diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a76e27e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +Dockerfile +.circleci +.vscode +docs +lib diff --git a/.eslintrc b/.eslintrc index 4739f5f..162deee 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,13 +4,17 @@ "eol-last": [2], "indent": [2, 4], "quotes": [2, "single"], - "linebreak-style": [2, "unix"], - "max-len": [2, 80, 4], "semi": [2, "always"], - "strict": [2, "never"] + "strict": [2, "never"], + "no-console": "off" }, "env": { - "node": true + "node": true, + "es6": true, + "jest": true + }, + "parserOptions": { + "ecmaVersion": 2018 }, "extends": "eslint:recommended" } diff --git a/.gitignore b/.gitignore index 786adb8..d33e019 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ coverage /* Other */ .notes.txt + +docs +lib diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..67bfada --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Run Unit Tests", + "program": "${workspaceFolder}/node_modules/jest/bin/jest", + "args": [ + "-c", + "jest.config.unit.js", + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "protocol": "inspector" + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index e04608a..5089726 100644 --- a/README.md +++ b/README.md @@ -13,121 +13,229 @@ Sentiment is a Node.js module that uses the [AFINN-165](http://www2.imm.dtu.dk/p ## Table of contents -- [Installation](#installation) -- [Usage example](#usage-example) -- [Adding new languages](#adding-new-languages) -- [Adding and overwriting words](#adding-and-overwriting-words) -- [API Reference](#api-reference) -- [How it works](#how-it-works) -- [Benchmarks](#benchmarks) -- [Validation](#validation) -- [Testing](#testing) +- [sentiment](#sentiment) + - [AFINN-based sentiment analysis for Node.js](#afinn-based-sentiment-analysis-for-nodejs) + - [Table of contents](#table-of-contents) + - [Installation](#installation) + - [Usage example](#usage-example) + - [Adding new languages](#adding-new-languages) + - [Adding and overwriting words](#adding-and-overwriting-words) + - [API Reference](#api-reference) + - [`sentiment.analyze(phrase, [options], [callback])`](#sentimentanalyzephrase-options-callback) + - [`AnalyzeOptions`](#analyzeoptions) + - [`sentiment.registerLanguage(languageCode, language)`](#sentimentregisterlanguagelanguagecode-language) + - [`Language`](#language) + - [`ScoringStrategy`](#scoringstrategy) + - [How it works](#how-it-works) + - [AFINN](#afinn) + - [Tokenization](#tokenization) + - [Benchmarks](#benchmarks) + - [Validation](#validation) + - [Rand Accuracy (AFINN Only)](#rand-accuracy-afinn-only) + - [Rand Accuracy (AFINN + Additions)](#rand-accuracy-afinn--additions) + - [Testing](#testing) ## Installation + ```bash npm install sentiment ``` ## Usage example + +Javascript: ```js -var Sentiment = require('sentiment'); -var sentiment = new Sentiment(); -var result = sentiment.analyze('Cats are stupid.'); -console.dir(result); // Score: -2, Comparative: -0.666 +const Sentiment = require('sentiment'); +const sentiment = new Sentiment(); +const result = sentiment.analyze('Cats are stupid.'); +console.table(result); // Score: -2, Comparative: -0.666 +``` + +Typescript: +```ts +import { Sentiment } from 'sentiment'; +const sentiment = new Sentiment(); +const result = sentiment.analyze('Cats are stupid.'); +console.table(result); // Score: -2, Comparative: -0.666 ``` ## Adding new languages + You can add support for a new language by registering it using the `registerLanguage` method: +Javascript: ```js -var frLanguage = { +const Sentiment = require('sentiment'); +const sentiment = new Sentiment(); + +const frLanguage = { + labels: { 'stupide': -2 } +}; +sentiment.registerLanguage('fr', frLanguage); + +const result = sentiment.analyze('Le chat est stupide.', { languageCode: 'fr' }); +console.dir(result); // Score: -2, Comparative: -0.5 +``` + +Typescript: +```ts +import { Sentiment, LanguageInput } from 'sentiment'; + +const sentiment = new Sentiment(); +const frLanguage: LangaugeInput = { labels: { 'stupide': -2 } }; sentiment.registerLanguage('fr', frLanguage); -var result = sentiment.analyze('Le chat est stupide.', { language: 'fr' }); +const result = sentiment.analyze('Le chat est stupide.', { languageCode: 'fr' }); console.dir(result); // Score: -2, Comparative: -0.5 + ``` You can also define custom scoring strategies to handle things like negation and emphasis on a per-language basis: + +Javascript: ```js -var frLanguage = { +const Sentiment = require('sentiment'); +const sentiment = new Sentiment(); + +const frLanguage = { labels: { 'stupide': -2 }, - scoringStrategy: { - apply: function(tokens, cursor, tokenScore) { - if (cursor > 0) { - var prevtoken = tokens[cursor - 1]; - if (prevtoken === 'pas') { - tokenScore = -tokenScore; - } + scoringStrategy: function(tokens, cursor, tokenScore) { + if (cursor > 0) { + const prevtoken = tokens[cursor - 1]; + if (prevtoken === 'pas') { + tokenScore = -tokenScore; } - return tokenScore; } + return tokenScore; } }; sentiment.registerLanguage('fr', frLanguage); -var result = sentiment.analyze('Le chat n\'est pas stupide', { language: 'fr' }); +const result = sentiment.analyze('Le chat n\'est pas stupide', { language: 'fr' }); console.dir(result); // Score: 2, Comparative: 0.4 ``` +Typescript: +```ts +import { Sentiment, LanguageInput } from 'sentiment'; + +const frLanguage: LanguageInput = { + labels: { 'stupide': -2 }, + scoringStrategy: (tokens, cursor, tokenScore) => { + if (cursor > 0) { + const prevtoken = tokens[cursor - 1]; + if (prevtoken === 'pas') { + tokenScore = -tokenScore; + } + } + return tokenScore; + } +}; + +const sentiment = new Sentiment(); + +sentiment.registerLanguage('fr', frLanguage); + +const result = sentiment.analyze('Le chat n\'est pas stupide', { language: 'fr' }); +console.dir(result); // Score: 2, Comparative: 0.4 + +``` + ## Adding and overwriting words + You can append and/or overwrite values from AFINN by simply injecting key/value pairs into a sentiment method call: -```javascript -var options = { + +Javascript: +```js +const Sentiment = require('sentiment'); +const sentiment = new Sentiment(); + +const options = { extras: { - 'cats': 5, - 'amazing': 2 + cats: 5, + amazing: 2 } }; -var result = sentiment.analyze('Cats are totally amazing!', options); +const result = sentiment.analyze('Cats are totally amazing!', options); console.dir(result); // Score: 7, Comparative: 1.75 ``` -## API Reference +Typescript: +```ts +import { Sentiment, AnalyzeOptions } from 'sentiment'; -#### `var sentiment = new Sentiment([options])` +const options: AnalyzeOptions = { + extras: { + cats: 5, + amazing: 2 + } +}; -| Argument | Type | Required | Description | -|----------|------------|----------|------------------------------------------------------------| -| options | `object` | `false` | Configuration options _(no options supported currently)_ | +const result = sentiment.analyze('Cats are totally amazing!', options); +console.dir(result); // Score: 7, Comparative: 1.75 ---- +``` +## API Reference #### `sentiment.analyze(phrase, [options], [callback])` -| Argument | Type | Required | Description | -|----------|------------|----------|-------------------------| -| phrase | `string` | `true` | Input phrase to analyze | -| options | `object` | `false` | Options _(see below)_ | -| callback | `function` | `false` | If specified, the result is returned using this callback function | +| Argument | Type | Required | Description | +| -------- | ---------------- | -------- | ---------------------------- | +| phrase | `string` | `true` | Input phrase to analyze | +| options | `AnalyzeOptions` | `false` | AnalyzeOptions _(see below)_ | +--- -`options` object properties: +#### `AnalyzeOptions` -| Property | Type | Default | Description | -|----------|-----------|---------|---------------------------------------------------------------| -| language | `string` | `'en'` | Language to use for sentiment analysis | -| extras | `object` | `{}` | Set of labels and their associated values to add or overwrite | +| Property | Type | Default | Description | +| ------------ | -------- | ------- | ------------------------------------------------------------- | +| languageCode | `string` | `'en'` | Language to use for sentiment analysis | +| extras | `object` | `{}` | Set of labels and their associated values to add or overwrite | --- #### `sentiment.registerLanguage(languageCode, language)` -| Argument | Type | Required | Description | -|--------------|----------|----------|---------------------------------------------------------------------| -| languageCode | `string` | `true` | International two-digit code for the language to add | -| language | `object` | `true` | Language module (see [Adding new languages](#adding-new-languages)) | +| Argument | Type | Required | Description | +| ------------ | --------------- | -------- | ------------------------------------------------------------------- | +| languageCode | `string` | `true` | International two-digit code for the language to add | +| language | `LanguageInput` | `true` | Language module (see [Adding new languages](#adding-new-languages)) | --- +#### `Language` + +| Property | Type | Default | Description | +| --------------- | -------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------ | +| labels | `{[word: string]: number}` | `'en'` | Set of labels and their associated values | +| scoringStrategy | `ScoringStrategy` | `defaultScoringStrategy` | A function used to calculate the score for a word. The default function simply returns the tokenScore. | + +--- + +#### `ScoringStrategy` + +| Argument | Type | Description | +| ---------- | -------- | -------------------------------------------------- | +| tokens | string[] | A list of tokens used for analysis | +| cursor | number | An index that points to the current word in tokens | +| tokenScore | number | The score of the current word | + +| Returns | Description | +| ------- | ------------------------------------------------ | +| number | A numeric value representing the score of a word | + ## How it works + ### AFINN AFINN is a list of words rated for valence with an integer between minus five (negative) and plus five (positive). Sentiment analysis is performed by cross-checking the string tokens(words, emojis) with the AFINN list and getting their respective scores. The comparative score is simply: `sum of each token / number of tokens`. So for example let's take the following: `I love cats, but I am allergic to them.` That string results in the following: + ```javascript { score: 1, @@ -180,14 +288,24 @@ Tokenization works by splitting the lines of input string, then removing the spe --- ## Benchmarks -A primary motivation for designing `sentiment` was performance. As such, it includes a benchmark script within the test directory that compares it against the [Sentimental](https://github.com/thinkroth/Sentimental) module which provides a nearly equivalent interface and approach. Based on these benchmarks, running on a MacBook Pro with Node v6.9.1, `sentiment` is nearly twice as fast as alternative implementations: +A primary motivation for designing `sentiment` was performance. As such, it includes a benchmark script within the test directory that compares it against the [Sentimental](https://github.com/thinkroth/Sentimental) module which provides a nearly equivalent interface and approach. Based on these benchmarks using Node v11.10.1, `sentiment` is nearly twice as fast as alternative implementations. + +Bench specs: + - i5-8400 @ 2.80GHz 6 core + - 16 GB (8GB x 2) RAM DDR4 2666 MT/s + - WD Blue 3D NAND SSD - SATA III 6 Gb/s M.2 + ```bash -sentiment (Latest) x 861,312 ops/sec ±0.87% (89 runs sampled) -Sentimental (1.0.1) x 451,066 ops/sec ±0.99% (92 runs sampled) +sentiment (Latest) - Short: x 979,943 ops/sec ±2.01% (90 runs sampled) +sentiment (Latest) - Long : x 4,370 ops/sec ±1.04% (90 runs sampled) + +Sentimental (1.0.1) - Short: x 573,312 ops/sec ±1.17% (90 runs sampled) +Sentimental (1.0.1) - Long : x 2,143 ops/sec ±0.37% (92 runs sampled) ``` To run the benchmarks yourself: + ```bash npm run test:benchmark ``` @@ -198,11 +316,13 @@ npm run test:benchmark While the accuracy provided by AFINN is quite good considering it's computational performance (see above) there is always room for improvement. Therefore the `sentiment` module is open to accepting PRs which modify or amend the AFINN / Emoji datasets or implementation given that they improve accuracy and maintain similar performance characteristics. In order to establish this, we test the `sentiment` module against [three labelled datasets provided by UCI](https://archive.ics.uci.edu/ml/datasets/Sentiment+Labelled+Sentences). To run the validation tests yourself: + ```bash npm run test:validate ``` ### Rand Accuracy (AFINN Only) + ``` Amazon: 0.70 IMDB: 0.76 @@ -210,6 +330,7 @@ Yelp: 0.67 ``` ### Rand Accuracy (AFINN + Additions) + ``` Amazon: 0.72 (+2%) IMDB: 0.76 (+0%) @@ -219,6 +340,7 @@ Yelp: 0.69 (+2%) --- ## Testing + ```bash npm test ``` diff --git a/build/build.js b/build/build.js deleted file mode 100644 index 806fb10..0000000 --- a/build/build.js +++ /dev/null @@ -1,79 +0,0 @@ -var async = require('async'); -var fs = require('fs'); -var path = require('path'); - -// File paths -var EMOJI_PATH = path.resolve(__dirname, 'Emoji_Sentiment_Data_v1.0.csv'); -var RESULT_PATH = path.resolve(__dirname, 'emoji.json'); - -/** - * Read emoji data from original format (CSV). - * @param {object} hash Result hash - * @param {Function} callback Callback - * @return {void} - */ -function processEmoji(hash, callback) { - // Read file - fs.readFile(EMOJI_PATH, 'utf8', function (err, data) { - if (err) return callback(err); - - // Split data by new line - data = data.split(/\n/); - - // Iterate over dataset and add to hash - for (var i in data) { - var line = data[i].split(','); - - // Validate line - if (i == 0) continue; // Label - if (line.length !== 9) continue; // Invalid - - // Establish sentiment value - var emoji = String.fromCodePoint(line[1]); - var occurences = line[2]; - var negCount = line[4]; - var posCount = line[6]; - var score = (posCount / occurences) - (negCount / occurences); - var sentiment = Math.floor(5 * score); - - // Validate score - if (Number.isNaN(sentiment)) continue; - if (sentiment === 0) continue; - - // Add to hash - hash[emoji] = sentiment; - } - - callback(null, hash); - }); -} - -/** - * Write sentiment score hash to disk. - * @param {object} hash Result hash - * @param {Function} callback Callback - * @return {void} - */ -function finish(hash, callback) { - var result = JSON.stringify(hash, null, 4); - fs.writeFile(RESULT_PATH, result, function (err) { - if (err) return callback(err); - callback(null, hash); - }); -} - -// Execute build process -async.waterfall([ - function (cb) { - cb(null, {}); - }, - processEmoji, - finish -], function(err, result) { - if (err) throw new Error(err); - process.stderr.write( - 'Complete: ' + - Object.keys(result).length + - ' entries.\n' - ); -}); diff --git a/build/Emoji_Sentiment_Data_v1.0.csv b/emoji/Emoji_Sentiment_Data_v1.0.csv similarity index 98% rename from build/Emoji_Sentiment_Data_v1.0.csv rename to emoji/Emoji_Sentiment_Data_v1.0.csv index b800ec8..5a6fead 100644 --- a/build/Emoji_Sentiment_Data_v1.0.csv +++ b/emoji/Emoji_Sentiment_Data_v1.0.csv @@ -1,970 +1,970 @@ -Emoji,Unicode codepoint,Occurrences,Position,Negative,Neutral,Positive,Unicode name,Unicode block -😂,0x1f602,14622,0.805100583,3614,4163,6845,FACE WITH TEARS OF JOY,Emoticons -❤,0x2764,8050,0.746943086,355,1334,6361,HEAVY BLACK HEART,Dingbats -♥,0x2665,7144,0.753806008,252,1942,4950,BLACK HEART SUIT,Miscellaneous Symbols -😍,0x1f60d,6359,0.765292366,329,1390,4640,SMILING FACE WITH HEART-SHAPED EYES,Emoticons -😭,0x1f62d,5526,0.803351976,2412,1218,1896,LOUDLY CRYING FACE,Emoticons -😘,0x1f618,3648,0.854480172,193,702,2753,FACE THROWING A KISS,Emoticons -😊,0x1f60a,3186,0.813302436,189,754,2243,SMILING FACE WITH SMILING EYES,Emoticons -👌,0x1f44c,2925,0.805222883,274,728,1923,OK HAND SIGN,Miscellaneous Symbols and Pictographs -💕,0x1f495,2400,0.765725889,99,683,1618,TWO HEARTS,Miscellaneous Symbols and Pictographs -👏,0x1f44f,2336,0.787130164,243,634,1459,CLAPPING HANDS SIGN,Miscellaneous Symbols and Pictographs -😁,0x1f601,2189,0.796151187,278,648,1263,GRINNING FACE WITH SMILING EYES,Emoticons -☺,0x263a,2062,0.798633582,128,449,1485,WHITE SMILING FACE,Miscellaneous Symbols -♡,0x2661,1975,0.763695423,102,448,1425,WHITE HEART SUIT,Miscellaneous Symbols -👍,0x1f44d,1854,0.812125626,213,460,1181,THUMBS UP SIGN,Miscellaneous Symbols and Pictographs -😩,0x1f629,1808,0.826213985,1069,336,403,WEARY FACE,Emoticons -🙏,0x1f64f,1539,0.793847592,124,648,767,PERSON WITH FOLDED HANDS,Emoticons -✌,0x270c,1534,0.790480332,173,476,885,VICTORY HAND,Dingbats -😏,0x1f60f,1522,0.764977294,170,676,676,SMIRKING FACE,Emoticons -😉,0x1f609,1521,0.844832651,151,513,857,WINKING FACE,Emoticons -🙌,0x1f64c,1506,0.790600034,152,358,996,PERSON RAISING BOTH HANDS IN CELEBRATION,Emoticons -🙈,0x1f648,1456,0.738880937,238,350,868,SEE-NO-EVIL MONKEY,Emoticons -💪,0x1f4aa,1409,0.806704098,101,424,884,FLEXED BICEPS,Miscellaneous Symbols and Pictographs -😄,0x1f604,1398,0.794972621,191,426,781,SMILING FACE WITH OPEN MOUTH AND SMILING EYES,Emoticons -😒,0x1f612,1385,0.857620553,819,266,300,UNAMUSED FACE,Emoticons -💃,0x1f483,1344,0.852764705,59,237,1048,DANCER,Miscellaneous Symbols and Pictographs -💖,0x1f496,1263,0.762239109,54,254,955,SPARKLING HEART,Miscellaneous Symbols and Pictographs -😃,0x1f603,1206,0.734782211,86,361,759,SMILING FACE WITH OPEN MOUTH,Emoticons -😔,0x1f614,1205,0.86614594,559,263,383,PENSIVE FACE,Emoticons -😱,0x1f631,1130,0.773313178,298,319,513,FACE SCREAMING IN FEAR,Emoticons -🎉,0x1f389,1125,0.743635879,43,207,875,PARTY POPPER,Miscellaneous Symbols and Pictographs -😜,0x1f61c,1035,0.822246602,115,333,587,FACE WITH STUCK-OUT TONGUE AND WINKING EYE,Emoticons -☯,0x262f,992,0.383524015,5,981,6,YIN YANG,Miscellaneous Symbols -🌸,0x1f338,946,0.570021571,37,255,654,CHERRY BLOSSOM,Miscellaneous Symbols and Pictographs -💜,0x1f49c,939,0.730869962,41,241,657,PURPLE HEART,Miscellaneous Symbols and Pictographs -💙,0x1f499,912,0.703047577,29,186,697,BLUE HEART,Miscellaneous Symbols and Pictographs -✨,0x2728,848,0.560430162,43,463,342,SPARKLES,Dingbats -😳,0x1f633,846,0.797185814,277,277,292,FLUSHED FACE,Emoticons -💗,0x1f497,836,0.799725947,42,201,593,GROWING HEART,Miscellaneous Symbols and Pictographs -★,0x2605,828,0.353316599,25,543,260,BLACK STAR,Miscellaneous Symbols -█,0x2588,798,0.634172164,71,682,45,FULL BLOCK,Block Elements -☀,0x2600,786,0.54553079,21,377,388,BLACK SUN WITH RAYS,Miscellaneous Symbols -😡,0x1f621,756,0.861522028,403,81,272,POUTING FACE,Emoticons -😎,0x1f60e,754,0.76564387,79,224,451,SMILING FACE WITH SUNGLASSES,Emoticons -😢,0x1f622,749,0.813896833,288,168,293,CRYING FACE,Emoticons -💋,0x1f48b,734,0.800580592,28,169,537,KISS MARK,Miscellaneous Symbols and Pictographs -😋,0x1f60b,734,0.76498518,33,203,498,FACE SAVOURING DELICIOUS FOOD,Emoticons -🙊,0x1f64a,725,0.740523086,97,197,431,SPEAK-NO-EVIL MONKEY,Emoticons -😴,0x1f634,718,0.849922938,303,170,245,SLEEPING FACE,Emoticons -🎶,0x1f3b6,701,0.797255889,67,189,445,MULTIPLE MUSICAL NOTES,Miscellaneous Symbols and Pictographs -💞,0x1f49e,687,0.828705997,27,123,537,REVOLVING HEARTS,Miscellaneous Symbols and Pictographs -😌,0x1f60c,665,0.847121229,93,157,415,RELIEVED FACE,Emoticons -🔥,0x1f525,651,0.61555041,80,400,171,FIRE,Miscellaneous Symbols and Pictographs -💯,0x1f4af,637,0.871819418,179,202,256,HUNDRED POINTS SYMBOL,Miscellaneous Symbols and Pictographs -🔫,0x1f52b,604,0.893761284,298,126,180,PISTOL,Miscellaneous Symbols and Pictographs -💛,0x1f49b,602,0.751631631,25,123,454,YELLOW HEART,Miscellaneous Symbols and Pictographs -💁,0x1f481,549,0.839628793,105,159,285,INFORMATION DESK PERSON,Miscellaneous Symbols and Pictographs -💚,0x1f49a,537,0.737498972,41,101,395,GREEN HEART,Miscellaneous Symbols and Pictographs -♫,0x266b,533,0.396607039,33,313,187,BEAMED EIGHTH NOTES,Miscellaneous Symbols -😞,0x1f61e,532,0.825187832,255,85,192,DISAPPOINTED FACE,Emoticons -😆,0x1f606,527,0.809376422,81,148,298,SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES,Emoticons -😝,0x1f61d,496,0.808808972,65,155,276,FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES,Emoticons -😪,0x1f62a,482,0.858219873,208,105,169,SLEEPY FACE,Emoticons -�,0xfffd,472,0.11293316,78,275,119,REPLACEMENT CHARACTER,Specials -😫,0x1f62b,467,0.839517641,227,81,159,TIRED FACE,Emoticons -😅,0x1f605,462,0.827654572,135,109,218,SMILING FACE WITH OPEN MOUTH AND COLD SWEAT,Emoticons -👊,0x1f44a,458,0.824515864,121,111,226,FISTED HAND SIGN,Miscellaneous Symbols and Pictographs -💀,0x1f480,456,0.739462262,214,123,119,SKULL,Miscellaneous Symbols and Pictographs -😀,0x1f600,439,0.786284933,37,114,288,GRINNING FACE,Emoticons -😚,0x1f61a,424,0.853414944,20,81,323,KISSING FACE WITH CLOSED EYES,Emoticons -😻,0x1f63b,417,0.729665769,28,101,288,SMILING CAT FACE WITH HEART-SHAPED EYES,Emoticons -©,0xa9,416,0.740148376,54,259,103,COPYRIGHT SIGN,Latin-1 Supplement -👀,0x1f440,410,0.759422009,93,198,119,EYES,Miscellaneous Symbols and Pictographs -💘,0x1f498,395,0.785036942,18,87,290,HEART WITH ARROW,Miscellaneous Symbols and Pictographs -🐓,0x1f413,384,0.490808466,41,291,52,ROOSTER,Miscellaneous Symbols and Pictographs -☕,0x2615,382,0.685215074,53,182,147,HOT BEVERAGE,Miscellaneous Symbols -👋,0x1f44b,382,0.797944108,60,103,219,WAVING HAND SIGN,Miscellaneous Symbols and Pictographs -✋,0x270b,378,0.838291817,124,82,172,RAISED HAND,Dingbats -🎊,0x1f38a,363,0.72362175,20,59,284,CONFETTI BALL,Miscellaneous Symbols and Pictographs -🍕,0x1f355,352,0.544580757,19,166,167,SLICE OF PIZZA,Miscellaneous Symbols and Pictographs -❄,0x2744,349,0.760181984,34,103,212,SNOWFLAKE,Dingbats -😥,0x1f625,341,0.881976694,108,83,150,DISAPPOINTED BUT RELIEVED FACE,Emoticons -😕,0x1f615,340,0.856711865,205,66,69,CONFUSED FACE,Emoticons -💥,0x1f4a5,329,0.587206232,23,234,72,COLLISION SYMBOL,Miscellaneous Symbols and Pictographs -💔,0x1f494,328,0.835831574,136,96,96,BROKEN HEART,Miscellaneous Symbols and Pictographs -😤,0x1f624,327,0.884007985,157,82,88,FACE WITH LOOK OF TRIUMPH,Emoticons -😈,0x1f608,325,0.762497655,66,106,153,SMILING FACE WITH HORNS,Emoticons -►,0x25ba,325,0.516489206,40,192,93,BLACK RIGHT-POINTING POINTER,Geometric Shapes -✈,0x2708,322,0.521940266,13,161,148,AIRPLANE,Dingbats -🔝,0x1f51d,303,0.798433666,26,106,171,TOP WITH UPWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs -😰,0x1f630,302,0.919654285,132,44,126,FACE WITH OPEN MOUTH AND COLD SWEAT,Emoticons -⚽,0x26bd,299,0.193496177,15,83,201,SOCCER BALL,Miscellaneous Symbols -😑,0x1f611,299,0.844272967,154,85,60,EXPRESSIONLESS FACE,Emoticons -👑,0x1f451,298,0.698804832,12,65,221,CROWN,Miscellaneous Symbols and Pictographs -😹,0x1f639,295,0.8074145,88,77,130,CAT FACE WITH TEARS OF JOY,Emoticons -👉,0x1f449,292,0.559175629,20,137,135,WHITE RIGHT POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs -🍃,0x1f343,291,0.572324349,29,122,140,LEAF FLUTTERING IN WIND,Miscellaneous Symbols and Pictographs -🎁,0x1f381,288,0.709181399,11,45,232,WRAPPED PRESENT,Miscellaneous Symbols and Pictographs -😠,0x1f620,288,0.849218089,163,49,76,ANGRY FACE,Emoticons -🐧,0x1f427,284,0.540408727,11,131,142,PENGUIN,Miscellaneous Symbols and Pictographs -☆,0x2606,282,0.563398192,8,144,130,WHITE STAR,Miscellaneous Symbols -🍀,0x1f340,278,0.768496291,6,186,86,FOUR LEAF CLOVER,Miscellaneous Symbols and Pictographs -🎈,0x1f388,277,0.718504213,4,68,205,BALLOON,Miscellaneous Symbols and Pictographs -🎅,0x1f385,274,0.800786662,7,172,95,FATHER CHRISTMAS,Miscellaneous Symbols and Pictographs -😓,0x1f613,273,0.844887359,118,59,96,FACE WITH COLD SWEAT,Emoticons -😣,0x1f623,271,0.903307721,147,35,89,PERSEVERING FACE,Emoticons -😐,0x1f610,270,0.882732825,150,76,44,NEUTRAL FACE,Emoticons -✊,0x270a,270,0.858608998,37,79,154,RAISED FIST,Dingbats -😨,0x1f628,269,0.813687927,117,73,79,FEARFUL FACE,Emoticons -😖,0x1f616,268,0.868926665,130,50,88,CONFOUNDED FACE,Emoticons -💤,0x1f4a4,267,0.800461854,38,91,138,SLEEPING SYMBOL,Miscellaneous Symbols and Pictographs -💓,0x1f493,259,0.783045488,15,55,189,BEATING HEART,Miscellaneous Symbols and Pictographs -👎,0x1f44e,258,0.914491346,128,51,79,THUMBS DOWN SIGN,Miscellaneous Symbols and Pictographs -💦,0x1f4a6,252,0.779043752,35,62,155,SPLASHING SWEAT SYMBOL,Miscellaneous Symbols and Pictographs -✔,0x2714,249,0.565237075,31,119,99,HEAVY CHECK MARK,Dingbats -😷,0x1f637,246,0.840376534,117,54,75,FACE WITH MEDICAL MASK,Emoticons -⚡,0x26a1,246,0.778780762,10,182,54,HIGH VOLTAGE SIGN,Miscellaneous Symbols -🙋,0x1f64b,236,0.732500422,30,60,146,HAPPY PERSON RAISING ONE HAND,Emoticons -🎄,0x1f384,236,0.632526433,15,79,142,CHRISTMAS TREE,Miscellaneous Symbols and Pictographs -💩,0x1f4a9,229,0.839720048,94,68,67,PILE OF POO,Miscellaneous Symbols and Pictographs -🎵,0x1f3b5,223,0.71526961,23,64,136,MUSICAL NOTE,Miscellaneous Symbols and Pictographs -➡,0x27a1,222,0.478330444,2,185,35,BLACK RIGHTWARDS ARROW,Dingbats -😛,0x1f61b,220,0.734419263,18,50,152,FACE WITH STUCK-OUT TONGUE,Emoticons -😬,0x1f62c,214,0.793679841,57,58,99,GRIMACING FACE,Emoticons -👯,0x1f46f,211,0.742043843,24,69,118,WOMAN WITH BUNNY EARS,Miscellaneous Symbols and Pictographs -💎,0x1f48e,209,0.694054736,11,68,130,GEM STONE,Miscellaneous Symbols and Pictographs -🌿,0x1f33f,208,0.600120585,1,125,82,HERB,Miscellaneous Symbols and Pictographs -🎂,0x1f382,201,0.747999917,16,44,141,BIRTHDAY CAKE,Miscellaneous Symbols and Pictographs -🌟,0x1f31f,199,0.654510913,11,111,77,GLOWING STAR,Miscellaneous Symbols and Pictographs -🔮,0x1f52e,199,0.333161733,6,133,60,CRYSTAL BALL,Miscellaneous Symbols and Pictographs -❗,0x2757,198,0.620120854,31,116,51,HEAVY EXCLAMATION MARK SYMBOL,Dingbats -👫,0x1f46b,197,0.664270589,43,60,94,MAN AND WOMAN HOLDING HANDS,Miscellaneous Symbols and Pictographs -🏆,0x1f3c6,194,0.705937446,6,39,149,TROPHY,Miscellaneous Symbols and Pictographs -✖,0x2716,193,0.514517152,8,116,69,HEAVY MULTIPLICATION X,Dingbats -☝,0x261d,191,0.7597726,27,77,87,WHITE UP POINTING INDEX,Miscellaneous Symbols -😙,0x1f619,191,0.875675106,3,34,154,KISSING FACE WITH SMILING EYES,Emoticons -⛄,0x26c4,191,0.738724736,14,62,115,SNOWMAN WITHOUT SNOW,Miscellaneous Symbols -👅,0x1f445,190,0.738179133,23,55,112,TONGUE,Miscellaneous Symbols and Pictographs -♪,0x266a,190,0.696314423,15,57,118,EIGHTH NOTE,Miscellaneous Symbols -🍂,0x1f342,189,0.634540658,6,72,111,FALLEN LEAF,Miscellaneous Symbols and Pictographs -💏,0x1f48f,185,0.72895246,33,46,106,KISS,Miscellaneous Symbols and Pictographs -🔪,0x1f52a,183,0.764046479,38,94,51,HOCHO,Miscellaneous Symbols and Pictographs -🌴,0x1f334,178,0.675890052,13,57,108,PALM TREE,Miscellaneous Symbols and Pictographs -👈,0x1f448,174,0.701409121,14,71,89,WHITE LEFT POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs -🌹,0x1f339,172,0.664431116,3,61,108,ROSE,Miscellaneous Symbols and Pictographs -🙆,0x1f646,171,0.839916616,15,54,102,FACE WITH OK GESTURE,Emoticons -➜,0x279c,170,0.558506642,8,126,36,HEAVY ROUND-TIPPED RIGHTWARDS ARROW,Dingbats -👻,0x1f47b,168,0.740824428,28,73,67,GHOST,Miscellaneous Symbols and Pictographs -💰,0x1f4b0,168,0.827466509,26,73,69,MONEY BAG,Miscellaneous Symbols and Pictographs -🍻,0x1f37b,165,0.745306588,17,45,103,CLINKING BEER MUGS,Miscellaneous Symbols and Pictographs -🙅,0x1f645,165,0.838871886,76,47,42,FACE WITH NO GOOD GESTURE,Emoticons -🌞,0x1f31e,162,0.709366196,3,64,95,SUN WITH FACE,Miscellaneous Symbols and Pictographs -🍁,0x1f341,161,0.62398169,5,72,84,MAPLE LEAF,Miscellaneous Symbols and Pictographs -⭐,0x2b50,159,0.600764348,5,55,99,WHITE MEDIUM STAR,Miscellaneous Symbols and Arrows -▪,0x25aa,159,0.145166872,15,97,47,BLACK SMALL SQUARE,Geometric Shapes -🎀,0x1f380,156,0.651799025,6,44,106,RIBBON,Miscellaneous Symbols and Pictographs -━,0x2501,156,0.540249825,14,100,42,BOX DRAWINGS HEAVY HORIZONTAL,Box Drawing -☷,0x2637,154,0.012407833,2,140,12,TRIGRAM FOR EARTH,Miscellaneous Symbols -🐷,0x1f437,152,0.6026825,11,73,68,PIG FACE,Miscellaneous Symbols and Pictographs -🙉,0x1f649,150,0.757694988,26,47,77,HEAR-NO-EVIL MONKEY,Emoticons -🌺,0x1f33a,150,0.629472896,2,62,86,HIBISCUS,Miscellaneous Symbols and Pictographs -💅,0x1f485,149,0.755747604,27,36,86,NAIL POLISH,Miscellaneous Symbols and Pictographs -🐶,0x1f436,148,0.654155755,12,37,99,DOG FACE,Miscellaneous Symbols and Pictographs -🌚,0x1f31a,148,0.759894657,23,32,93,NEW MOON WITH FACE,Miscellaneous Symbols and Pictographs -👽,0x1f47d,146,0.612456875,13,73,60,EXTRATERRESTRIAL ALIEN,Miscellaneous Symbols and Pictographs -🎤,0x1f3a4,144,0.67089174,17,40,87,MICROPHONE,Miscellaneous Symbols and Pictographs -👭,0x1f46d,144,0.667223526,20,36,88,TWO WOMEN HOLDING HANDS,Miscellaneous Symbols and Pictographs -🎧,0x1f3a7,142,0.842970526,18,46,78,HEADPHONE,Miscellaneous Symbols and Pictographs -👆,0x1f446,138,0.78746414,16,60,62,WHITE UP POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs -🍸,0x1f378,138,0.662604118,12,38,88,COCKTAIL GLASS,Miscellaneous Symbols and Pictographs -🍷,0x1f377,137,0.603671624,7,68,62,WINE GLASS,Miscellaneous Symbols and Pictographs -®,0xae,137,0.353084876,9,80,48,REGISTERED SIGN,Latin-1 Supplement -🍉,0x1f349,136,0.647778999,10,33,93,WATERMELON,Miscellaneous Symbols and Pictographs -😇,0x1f607,135,0.781831331,9,36,90,SMILING FACE WITH HALO,Emoticons -☑,0x2611,135,0.690061863,2,117,16,BALLOT BOX WITH CHECK,Miscellaneous Symbols -🏃,0x1f3c3,135,0.735256148,12,55,68,RUNNER,Miscellaneous Symbols and Pictographs -😿,0x1f63f,134,0.811560707,78,29,27,CRYING CAT FACE,Emoticons -│,0x2502,134,0.483180302,0,87,47,BOX DRAWINGS LIGHT VERTICAL,Box Drawing -💣,0x1f4a3,131,0.846726927,40,50,41,BOMB,Miscellaneous Symbols and Pictographs -🍺,0x1f37a,131,0.68156608,8,49,74,BEER MUG,Miscellaneous Symbols and Pictographs -▶,0x25b6,131,0.498359177,7,89,35,BLACK RIGHT-POINTING TRIANGLE,Geometric Shapes -😲,0x1f632,129,0.853619885,50,38,41,ASTONISHED FACE,Emoticons -🎸,0x1f3b8,125,0.605443071,1,57,67,GUITAR,Miscellaneous Symbols and Pictographs -🍹,0x1f379,123,0.764164553,5,30,88,TROPICAL DRINK,Miscellaneous Symbols and Pictographs -💫,0x1f4ab,121,0.614437663,4,51,66,DIZZY SYMBOL,Miscellaneous Symbols and Pictographs -📚,0x1f4da,119,0.69163189,22,34,63,BOOKS,Miscellaneous Symbols and Pictographs -😶,0x1f636,117,0.868667638,50,34,33,FACE WITHOUT MOUTH,Emoticons -🌷,0x1f337,116,0.623397976,0,52,64,TULIP,Miscellaneous Symbols and Pictographs -💝,0x1f49d,115,0.774410045,8,23,84,HEART WITH RIBBON,Miscellaneous Symbols and Pictographs -💨,0x1f4a8,115,0.711396809,12,46,57,DASH SYMBOL,Miscellaneous Symbols and Pictographs -🏈,0x1f3c8,114,0.823010837,7,38,69,AMERICAN FOOTBALL,Miscellaneous Symbols and Pictographs -💍,0x1f48d,112,0.807520998,16,25,71,RING,Miscellaneous Symbols and Pictographs -☔,0x2614,111,0.687353164,21,36,54,UMBRELLA WITH RAIN DROPS,Miscellaneous Symbols -👸,0x1f478,111,0.654472403,6,30,75,PRINCESS,Miscellaneous Symbols and Pictographs -🇪,0x1f1ea,109,0.698877291,2,36,71,REGIONAL INDICATOR SYMBOL LETTER E,Enclosed Alphanumeric Supplement -░,0x2591,108,0.439438477,25,63,20,LIGHT SHADE,Block Elements -🍩,0x1f369,107,0.708816106,15,35,57,DOUGHNUT,Miscellaneous Symbols and Pictographs -👾,0x1f47e,105,0.55188131,1,64,40,ALIEN MONSTER,Miscellaneous Symbols and Pictographs -☁,0x2601,104,0.595923185,14,43,47,CLOUD,Miscellaneous Symbols -🌻,0x1f33b,104,0.607167343,1,41,62,SUNFLOWER,Miscellaneous Symbols and Pictographs -😵,0x1f635,103,0.808813841,33,28,42,DIZZY FACE,Emoticons -📒,0x1f4d2,102,0.473944671,0,98,4,LEDGER,Miscellaneous Symbols and Pictographs -↿,0x21bf,102,0.710504202,0,34,68,UPWARDS HARPOON WITH BARB LEFTWARDS,Arrows -🐯,0x1f42f,100,0.549561832,4,43,53,TIGER FACE,Miscellaneous Symbols and Pictographs -👼,0x1f47c,99,0.683210618,17,31,51,BABY ANGEL,Miscellaneous Symbols and Pictographs -🍔,0x1f354,98,0.636878313,16,38,44,HAMBURGER,Miscellaneous Symbols and Pictographs -😸,0x1f638,97,0.782035657,11,34,52,GRINNING CAT FACE WITH SMILING EYES,Emoticons -👶,0x1f476,96,0.745048578,13,27,56,BABY,Miscellaneous Symbols and Pictographs -↾,0x21be,96,0.707142857,0,32,64,UPWARDS HARPOON WITH BARB RIGHTWARDS,Arrows -💐,0x1f490,95,0.727586517,3,17,75,BOUQUET,Miscellaneous Symbols and Pictographs -🌊,0x1f30a,95,0.779832163,8,30,57,WATER WAVE,Miscellaneous Symbols and Pictographs -🍦,0x1f366,95,0.630275908,13,24,58,SOFT ICE CREAM,Miscellaneous Symbols and Pictographs -🍓,0x1f353,94,0.689469367,3,23,68,STRAWBERRY,Miscellaneous Symbols and Pictographs -👇,0x1f447,94,0.557020638,13,44,37,WHITE DOWN POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs -💆,0x1f486,92,0.814023638,24,23,45,FACE MASSAGE,Miscellaneous Symbols and Pictographs -🍴,0x1f374,92,0.580197926,4,33,55,FORK AND KNIFE,Miscellaneous Symbols and Pictographs -😧,0x1f627,92,0.774990088,36,26,30,ANGUISHED FACE,Emoticons -🇸,0x1f1f8,91,0.654691493,8,27,56,REGIONAL INDICATOR SYMBOL LETTER S,Enclosed Alphanumeric Supplement -😮,0x1f62e,90,0.774237435,16,33,41,FACE WITH OPEN MOUTH,Emoticons -▓,0x2593,90,0.658247473,2,85,3,DARK SHADE,Block Elements -🚫,0x1f6ab,88,0.702937729,48,32,8,NO ENTRY SIGN,Transport and Map Symbols -😽,0x1f63d,88,0.754242708,11,14,63,KISSING CAT FACE WITH CLOSED EYES,Emoticons -🌈,0x1f308,88,0.671884074,5,31,52,RAINBOW,Miscellaneous Symbols and Pictographs -🙀,0x1f640,88,0.790729154,14,30,44,WEARY CAT FACE,Emoticons -⚠,0x26a0,88,0.489084942,16,62,10,WARNING SIGN,Miscellaneous Symbols -🎮,0x1f3ae,86,0.467430446,8,32,46,VIDEO GAME,Miscellaneous Symbols and Pictographs -╯,0x256f,84,0.506910946,19,47,18,BOX DRAWINGS LIGHT ARC UP AND LEFT,Box Drawing -🍆,0x1f346,84,0.7185031,6,37,41,AUBERGINE,Miscellaneous Symbols and Pictographs -🍰,0x1f370,84,0.78250627,13,19,52,SHORTCAKE,Miscellaneous Symbols and Pictographs -✓,0x2713,84,0.627535601,9,41,34,CHECK MARK,Dingbats -👐,0x1f450,83,0.875981032,33,19,31,OPEN HANDS SIGN,Miscellaneous Symbols and Pictographs -🙇,0x1f647,83,0.794293941,24,23,36,PERSON BOWING DEEPLY,Emoticons -🍟,0x1f35f,83,0.650433666,14,29,40,FRENCH FRIES,Miscellaneous Symbols and Pictographs -🍌,0x1f34c,82,0.540634157,10,25,47,BANANA,Miscellaneous Symbols and Pictographs -💑,0x1f491,82,0.682682631,5,16,61,COUPLE WITH HEART,Miscellaneous Symbols and Pictographs -👬,0x1f46c,82,0.622239773,29,29,24,TWO MEN HOLDING HANDS,Miscellaneous Symbols and Pictographs -🐣,0x1f423,81,0.775650511,12,17,52,HATCHING CHICK,Miscellaneous Symbols and Pictographs -🎃,0x1f383,81,0.723541282,6,19,56,JACK-O-LANTERN,Miscellaneous Symbols and Pictographs -▬,0x25ac,81,0.33474298,0,42,39,BLACK RECTANGLE,Geometric Shapes -,0xfffc,81,0.308958013,44,33,4,OBJECT REPLACEMENT CHARACTER,Specials -😟,0x1f61f,80,0.824309355,28,18,34,WORRIED FACE,Emoticons -🐾,0x1f43e,78,0.738983384,8,13,57,PAW PRINTS,Miscellaneous Symbols and Pictographs -🎓,0x1f393,77,0.647134355,7,18,52,GRADUATION CAP,Miscellaneous Symbols and Pictographs -🏊,0x1f3ca,77,0.65309632,2,27,48,SWIMMER,Miscellaneous Symbols and Pictographs -🍫,0x1f36b,76,0.792701023,22,20,34,CHOCOLATE BAR,Miscellaneous Symbols and Pictographs -📷,0x1f4f7,76,0.489732992,7,28,41,CAMERA,Miscellaneous Symbols and Pictographs -👄,0x1f444,75,0.591674278,5,28,42,MOUTH,Miscellaneous Symbols and Pictographs -🌼,0x1f33c,74,0.603679109,1,12,61,BLOSSOM,Miscellaneous Symbols and Pictographs -🚶,0x1f6b6,74,0.796900446,28,29,17,PEDESTRIAN,Transport and Map Symbols -🐱,0x1f431,73,0.544447706,10,14,49,CAT FACE,Miscellaneous Symbols and Pictographs -║,0x2551,73,0.568238107,0,62,11,BOX DRAWINGS DOUBLE VERTICAL,Box Drawing -🐸,0x1f438,72,0.845772164,24,30,18,FROG FACE,Miscellaneous Symbols and Pictographs -🇺,0x1f1fa,71,0.682892538,8,15,48,REGIONAL INDICATOR SYMBOL LETTER U,Enclosed Alphanumeric Supplement -👿,0x1f47f,70,0.910730779,47,15,8,IMP,Miscellaneous Symbols and Pictographs -🚬,0x1f6ac,70,0.805066327,8,16,46,SMOKING SYMBOL,Transport and Map Symbols -✿,0x273f,70,0.49871007,2,38,30,BLACK FLORETTE,Dingbats -📖,0x1f4d6,68,0.709941199,18,20,30,OPEN BOOK,Miscellaneous Symbols and Pictographs -🐒,0x1f412,68,0.639847887,1,29,38,MONKEY,Miscellaneous Symbols and Pictographs -🌍,0x1f30d,68,0.623864265,5,16,47,EARTH GLOBE EUROPE-AFRICA,Miscellaneous Symbols and Pictographs -┊,0x250a,68,0.681885417,0,0,68,BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL,Box Drawing -🐥,0x1f425,67,0.779887133,4,18,45,FRONT-FACING BABY CHICK,Miscellaneous Symbols and Pictographs -🌀,0x1f300,66,0.553405789,10,39,17,CYCLONE,Miscellaneous Symbols and Pictographs -🐼,0x1f43c,66,0.614422004,4,40,22,PANDA FACE,Miscellaneous Symbols and Pictographs -🎥,0x1f3a5,66,0.675875827,8,30,28,MOVIE CAMERA,Miscellaneous Symbols and Pictographs -💄,0x1f484,66,0.636585295,6,24,36,LIPSTICK,Miscellaneous Symbols and Pictographs -💸,0x1f4b8,66,0.790337996,16,23,27,MONEY WITH WINGS,Miscellaneous Symbols and Pictographs -⛔,0x26d4,65,0.405987251,5,22,38,NO ENTRY,Miscellaneous Symbols -●,0x25cf,65,0.561224463,8,37,20,BLACK CIRCLE,Geometric Shapes -🏀,0x1f3c0,64,0.807196812,13,21,30,BASKETBALL AND HOOP,Miscellaneous Symbols and Pictographs -💉,0x1f489,64,0.749555976,11,18,35,SYRINGE,Miscellaneous Symbols and Pictographs -💟,0x1f49f,63,0.787621444,3,12,48,HEART DECORATION,Miscellaneous Symbols and Pictographs -🚗,0x1f697,62,0.638133891,8,31,23,AUTOMOBILE,Transport and Map Symbols -😯,0x1f62f,62,0.859007902,16,22,24,HUSHED FACE,Emoticons -📝,0x1f4dd,62,0.794711655,8,31,23,MEMO,Miscellaneous Symbols and Pictographs -═,0x2550,62,0.441188106,0,61,1,BOX DRAWINGS DOUBLE HORIZONTAL,Box Drawing -♦,0x2666,61,0.562227083,6,20,35,BLACK DIAMOND SUIT,Miscellaneous Symbols -💭,0x1f4ad,60,0.687954711,10,27,23,THOUGHT BALLOON,Miscellaneous Symbols and Pictographs -🌙,0x1f319,58,0.669389528,3,16,39,CRESCENT MOON,Miscellaneous Symbols and Pictographs -🐟,0x1f41f,58,0.676573608,2,12,44,FISH,Miscellaneous Symbols and Pictographs -👣,0x1f463,58,0.638779151,6,25,27,FOOTPRINTS,Miscellaneous Symbols and Pictographs -☞,0x261e,58,0.725402078,0,51,7,WHITE RIGHT POINTING INDEX,Miscellaneous Symbols -✂,0x2702,58,0.810271779,34,18,6,BLACK SCISSORS,Dingbats -🗿,0x1f5ff,58,0.941936907,5,21,32,MOYAI,Miscellaneous Symbols and Pictographs -🍝,0x1f35d,57,0.56442207,16,18,23,SPAGHETTI,Miscellaneous Symbols and Pictographs -👪,0x1f46a,57,0.653303852,24,10,23,FAMILY,Miscellaneous Symbols and Pictographs -🍭,0x1f36d,57,0.632538929,9,21,27,LOLLIPOP,Miscellaneous Symbols and Pictographs -🌃,0x1f303,56,0.747623603,3,27,26,NIGHT WITH STARS,Miscellaneous Symbols and Pictographs -❌,0x274c,56,0.612998,14,12,30,CROSS MARK,Dingbats -🐰,0x1f430,55,0.707516692,4,13,38,RABBIT FACE,Miscellaneous Symbols and Pictographs -💊,0x1f48a,55,0.675071279,8,14,33,PILL,Miscellaneous Symbols and Pictographs -🚨,0x1f6a8,55,0.520959173,6,6,43,POLICE CARS REVOLVING LIGHT,Transport and Map Symbols -😦,0x1f626,54,0.882218595,30,15,9,FROWNING FACE WITH OPEN MOUTH,Emoticons -🍪,0x1f36a,54,0.736575166,10,16,28,COOKIE,Miscellaneous Symbols and Pictographs -🍣,0x1f363,53,0.669970061,24,18,11,SUSHI,Miscellaneous Symbols and Pictographs -╭,0x256d,53,0.490077251,3,38,12,BOX DRAWINGS LIGHT ARC DOWN AND RIGHT,Box Drawing -✧,0x2727,53,0.398520727,1,33,19,WHITE FOUR POINTED STAR,Dingbats -🎆,0x1f386,52,0.798520237,2,9,41,FIREWORKS,Miscellaneous Symbols and Pictographs -╮,0x256e,52,0.422827361,5,35,12,BOX DRAWINGS LIGHT ARC DOWN AND LEFT,Box Drawing -🎎,0x1f38e,51,0.417134709,0,2,49,JAPANESE DOLLS,Miscellaneous Symbols and Pictographs -🇩,0x1f1e9,51,0.74501238,1,16,34,REGIONAL INDICATOR SYMBOL LETTER D,Enclosed Alphanumeric Supplement -✅,0x2705,51,0.672789014,3,23,25,WHITE HEAVY CHECK MARK,Dingbats -👹,0x1f479,49,0.70117277,13,20,16,JAPANESE OGRE,Miscellaneous Symbols and Pictographs -📱,0x1f4f1,49,0.719713336,4,25,20,MOBILE PHONE,Miscellaneous Symbols and Pictographs -🙍,0x1f64d,49,0.844922892,29,8,12,PERSON FROWNING,Emoticons -🍑,0x1f351,49,0.739305631,12,12,25,PEACH,Miscellaneous Symbols and Pictographs -🎼,0x1f3bc,49,0.636141803,2,28,19,MUSICAL SCORE,Miscellaneous Symbols and Pictographs -🔊,0x1f50a,49,0.651738713,4,20,25,SPEAKER WITH THREE SOUND WAVES,Miscellaneous Symbols and Pictographs -🌌,0x1f30c,47,0.750586217,5,11,31,MILKY WAY,Miscellaneous Symbols and Pictographs -🍎,0x1f34e,47,0.75089759,6,19,22,RED APPLE,Miscellaneous Symbols and Pictographs -🐻,0x1f43b,47,0.691609267,6,13,28,BEAR FACE,Miscellaneous Symbols and Pictographs -─,0x2500,47,0.711348374,0,40,7,BOX DRAWINGS LIGHT HORIZONTAL,Box Drawing -╰,0x2570,47,0.509745612,7,36,4,BOX DRAWINGS LIGHT ARC UP AND RIGHT,Box Drawing -💇,0x1f487,46,0.678429189,7,16,23,HAIRCUT,Miscellaneous Symbols and Pictographs -♬,0x266c,46,0.677442137,4,26,16,BEAMED SIXTEENTH NOTES,Miscellaneous Symbols -♚,0x265a,46,0.389194579,0,44,2,BLACK CHESS KING,Miscellaneous Symbols -🔴,0x1f534,45,0.655928061,1,24,20,LARGE RED CIRCLE,Miscellaneous Symbols and Pictographs -🍱,0x1f371,45,0.58000953,25,10,10,BENTO BOX,Miscellaneous Symbols and Pictographs -🍊,0x1f34a,45,0.697299999,6,13,26,TANGERINE,Miscellaneous Symbols and Pictographs -🍒,0x1f352,45,0.619434077,6,18,21,CHERRIES,Miscellaneous Symbols and Pictographs -🐭,0x1f42d,45,0.822545804,0,12,33,MOUSE FACE,Miscellaneous Symbols and Pictographs -👟,0x1f45f,45,0.561642541,5,15,25,ATHLETIC SHOE,Miscellaneous Symbols and Pictographs -🌎,0x1f30e,44,0.743438616,5,19,20,EARTH GLOBE AMERICAS,Miscellaneous Symbols and Pictographs -🍍,0x1f34d,44,0.583336287,7,8,29,PINEAPPLE,Miscellaneous Symbols and Pictographs -🐮,0x1f42e,43,0.846658768,2,12,29,COW FACE,Miscellaneous Symbols and Pictographs -📲,0x1f4f2,43,0.598172133,7,18,18,MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT,Miscellaneous Symbols and Pictographs -☼,0x263c,43,0.461142875,2,30,11,WHITE SUN WITH RAYS,Miscellaneous Symbols -🌅,0x1f305,42,0.603551051,6,14,22,SUNRISE,Miscellaneous Symbols and Pictographs -🇷,0x1f1f7,42,0.716327847,1,10,31,REGIONAL INDICATOR SYMBOL LETTER R,Enclosed Alphanumeric Supplement -👠,0x1f460,42,0.637243017,6,14,22,HIGH-HEELED SHOE,Miscellaneous Symbols and Pictographs -🌽,0x1f33d,42,0.648931091,5,12,25,EAR OF MAIZE,Miscellaneous Symbols and Pictographs -💧,0x1f4a7,41,0.76764795,20,8,13,DROPLET,Miscellaneous Symbols and Pictographs -❓,0x2753,41,0.614920844,7,24,10,BLACK QUESTION MARK ORNAMENT,Dingbats -🍬,0x1f36c,41,0.784072191,8,9,24,CANDY,Miscellaneous Symbols and Pictographs -😺,0x1f63a,40,0.825897808,8,7,25,SMILING CAT FACE WITH OPEN MOUTH,Emoticons -🐴,0x1f434,40,0.795776393,8,21,11,HORSE FACE,Miscellaneous Symbols and Pictographs -🚀,0x1f680,40,0.698479931,2,15,23,ROCKET,Transport and Map Symbols -¦,0xa6,40,0.402048475,7,1,32,BROKEN BAR,Latin-1 Supplement -💢,0x1f4a2,40,0.560644274,6,18,16,ANGER SYMBOL,Miscellaneous Symbols and Pictographs -🎬,0x1f3ac,40,0.650028961,2,24,14,CLAPPER BOARD,Miscellaneous Symbols and Pictographs -🍧,0x1f367,40,0.674847866,9,9,22,SHAVED ICE,Miscellaneous Symbols and Pictographs -🍜,0x1f35c,40,0.577916931,9,5,26,STEAMING BOWL,Miscellaneous Symbols and Pictographs -🐏,0x1f40f,40,0.975591533,2,12,26,RAM,Miscellaneous Symbols and Pictographs -🐘,0x1f418,40,0.722256768,9,21,10,ELEPHANT,Miscellaneous Symbols and Pictographs -👧,0x1f467,40,0.649498717,10,14,16,GIRL,Miscellaneous Symbols and Pictographs -⠀,0x2800,40,0.377950694,6,26,8,BRAILLE PATTERN BLANK,Braille Patterns -🏄,0x1f3c4,39,0.772893432,2,13,24,SURFER,Miscellaneous Symbols and Pictographs -➤,0x27a4,39,0.382195298,0,26,13,BLACK RIGHTWARDS ARROWHEAD,Dingbats -⬆,0x2b06,39,0.605681579,1,25,13,UPWARDS BLACK ARROW,Miscellaneous Symbols and Arrows -🍋,0x1f34b,38,0.742802859,6,16,16,LEMON,Miscellaneous Symbols and Pictographs -🆗,0x1f197,38,0.852316542,6,4,28,SQUARED OK,Enclosed Alphanumeric Supplement -⚪,0x26aa,37,0.564780444,0,19,18,MEDIUM WHITE CIRCLE,Miscellaneous Symbols -📺,0x1f4fa,37,0.61386867,3,16,18,TELEVISION,Miscellaneous Symbols and Pictographs -🍅,0x1f345,37,0.838126825,9,5,23,TOMATO,Miscellaneous Symbols and Pictographs -⛅,0x26c5,37,0.61632427,4,11,22,SUN BEHIND CLOUD,Miscellaneous Symbols -🐢,0x1f422,37,0.621646684,6,17,14,TURTLE,Miscellaneous Symbols and Pictographs -👙,0x1f459,37,0.697202004,3,11,23,BIKINI,Miscellaneous Symbols and Pictographs -🏡,0x1f3e1,36,0.744478613,5,9,22,HOUSE WITH GARDEN,Miscellaneous Symbols and Pictographs -🌾,0x1f33e,36,0.558280959,5,5,26,EAR OF RICE,Miscellaneous Symbols and Pictographs -◉,0x25c9,36,0.046697697,0,26,10,FISHEYE,Geometric Shapes -✏,0x270f,35,0.625100023,3,16,16,PENCIL,Dingbats -🐬,0x1f42c,35,0.74664334,2,15,18,DOLPHIN,Miscellaneous Symbols and Pictographs -🍤,0x1f364,35,0.513142123,6,21,8,FRIED SHRIMP,Miscellaneous Symbols and Pictographs -🇹,0x1f1f9,35,0.584324615,0,13,22,REGIONAL INDICATOR SYMBOL LETTER T,Enclosed Alphanumeric Supplement -♣,0x2663,35,0.666096972,4,14,17,BLACK CLUB SUIT,Miscellaneous Symbols -🐝,0x1f41d,35,0.734687255,5,17,13,HONEYBEE,Miscellaneous Symbols and Pictographs -🌝,0x1f31d,34,0.718124589,5,17,12,FULL MOON WITH FACE,Miscellaneous Symbols and Pictographs -🇮,0x1f1ee,34,0.575925963,0,12,22,REGIONAL INDICATOR SYMBOL LETTER I,Enclosed Alphanumeric Supplement -🔋,0x1f50b,34,0.583005086,22,8,4,BATTERY,Miscellaneous Symbols and Pictographs -🐍,0x1f40d,34,0.622534826,3,15,16,SNAKE,Miscellaneous Symbols and Pictographs -♔,0x2654,34,0.588904318,0,14,20,WHITE CHESS KING,Miscellaneous Symbols -🍳,0x1f373,33,0.798473001,13,6,14,COOKING,Miscellaneous Symbols and Pictographs -🔵,0x1f535,33,0.680543536,4,14,15,LARGE BLUE CIRCLE,Miscellaneous Symbols and Pictographs -😾,0x1f63e,33,0.914644696,20,5,8,POUTING CAT FACE,Emoticons -🌕,0x1f315,33,0.641921506,3,7,23,FULL MOON SYMBOL,Miscellaneous Symbols and Pictographs -🐨,0x1f428,33,0.696298274,4,9,20,KOALA,Miscellaneous Symbols and Pictographs -🔐,0x1f510,33,0.845213961,6,9,18,CLOSED LOCK WITH KEY,Miscellaneous Symbols and Pictographs -💿,0x1f4bf,33,0.444466092,0,11,22,OPTICAL DISC,Miscellaneous Symbols and Pictographs -❁,0x2741,33,0.492535753,0,31,2,EIGHT PETALLED OUTLINED BLACK FLORETTE,Dingbats -🌳,0x1f333,32,0.536180131,2,11,19,DECIDUOUS TREE,Miscellaneous Symbols and Pictographs -👰,0x1f470,32,0.787391801,3,9,20,BRIDE WITH VEIL,Miscellaneous Symbols and Pictographs -❀,0x2740,32,0.443664362,0,18,14,WHITE FLORETTE,Dingbats -⚓,0x2693,32,0.592872704,2,8,22,ANCHOR,Miscellaneous Symbols -🚴,0x1f6b4,32,0.573441922,0,9,23,BICYCLIST,Transport and Map Symbols -▀,0x2580,32,0.249971192,10,17,5,UPPER HALF BLOCK,Block Elements -👗,0x1f457,31,0.703059819,5,13,13,DRESS,Miscellaneous Symbols and Pictographs -➕,0x2795,31,0.034111266,4,5,22,HEAVY PLUS SIGN,Dingbats -💬,0x1f4ac,30,0.635322751,4,10,16,SPEECH BALLOON,Miscellaneous Symbols and Pictographs -▒,0x2592,30,0.5006455,2,27,1,MEDIUM SHADE,Block Elements -🔜,0x1f51c,30,0.606237062,5,11,14,SOON WITH RIGHTWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs -🍨,0x1f368,30,0.656537195,8,7,15,ICE CREAM,Miscellaneous Symbols and Pictographs -💲,0x1f4b2,30,0.793676272,0,22,8,HEAVY DOLLAR SIGN,Miscellaneous Symbols and Pictographs -⛽,0x26fd,30,0.287349631,1,23,6,FUEL PUMP,Miscellaneous Symbols -🍙,0x1f359,29,0.566487361,5,10,14,RICE BALL,Miscellaneous Symbols and Pictographs -🍗,0x1f357,29,0.674706178,9,9,11,POULTRY LEG,Miscellaneous Symbols and Pictographs -🍲,0x1f372,29,0.672925496,7,11,11,POT OF FOOD,Miscellaneous Symbols and Pictographs -🍥,0x1f365,29,0.57963379,22,4,3,FISH CAKE WITH SWIRL DESIGN,Miscellaneous Symbols and Pictographs -▸,0x25b8,29,0.516844972,0,22,7,BLACK RIGHT-POINTING SMALL TRIANGLE,Geometric Shapes -♛,0x265b,29,0.48995855,4,15,10,BLACK CHESS QUEEN,Miscellaneous Symbols -😼,0x1f63c,28,0.855991066,5,7,16,CAT FACE WITH WRY SMILE,Emoticons -🐙,0x1f419,28,0.677637628,2,12,14,OCTOPUS,Miscellaneous Symbols and Pictographs -👨,0x1f468,28,0.693754806,2,8,18,MAN,Miscellaneous Symbols and Pictographs -🍚,0x1f35a,28,0.636903275,6,2,20,COOKED RICE,Miscellaneous Symbols and Pictographs -🍖,0x1f356,28,0.678553575,7,10,11,MEAT ON BONE,Miscellaneous Symbols and Pictographs -♨,0x2668,28,0.664942237,0,1,27,HOT SPRINGS,Miscellaneous Symbols -🎹,0x1f3b9,28,0.466337612,0,17,11,MUSICAL KEYBOARD,Miscellaneous Symbols and Pictographs -♕,0x2655,28,0.621310417,0,16,12,WHITE CHESS QUEEN,Miscellaneous Symbols -▃,0x2583,28,0.373188406,0,0,28,LOWER THREE EIGHTHS BLOCK,Block Elements -🚘,0x1f698,27,0.649502793,8,9,10,ONCOMING AUTOMOBILE,Transport and Map Symbols -🍏,0x1f34f,27,0.85243179,7,11,9,GREEN APPLE,Miscellaneous Symbols and Pictographs -👩,0x1f469,27,0.731773327,9,7,11,WOMAN,Miscellaneous Symbols and Pictographs -👦,0x1f466,27,0.606457886,5,13,9,BOY,Miscellaneous Symbols and Pictographs -🇬,0x1f1ec,27,0.582061343,2,15,10,REGIONAL INDICATOR SYMBOL LETTER G,Enclosed Alphanumeric Supplement -🇧,0x1f1e7,27,0.595070874,2,15,10,REGIONAL INDICATOR SYMBOL LETTER B,Enclosed Alphanumeric Supplement -☠,0x2620,27,0.748862198,7,14,6,SKULL AND CROSSBONES,Miscellaneous Symbols -🐠,0x1f420,26,0.767680777,4,6,16,TROPICAL FISH,Miscellaneous Symbols and Pictographs -🚹,0x1f6b9,26,0.811646698,1,4,21,MENS SYMBOL,Transport and Map Symbols -💵,0x1f4b5,26,0.806506343,3,9,14,BANKNOTE WITH DOLLAR SIGN,Miscellaneous Symbols and Pictographs -✰,0x2730,26,0.19481227,0,3,23,SHADOWED WHITE STAR,Dingbats -╠,0x2560,26,0.542511882,0,20,6,BOX DRAWINGS DOUBLE VERTICAL AND RIGHT,Box Drawing -👛,0x1f45b,25,0.696359786,4,7,14,PURSE,Miscellaneous Symbols and Pictographs -🚙,0x1f699,25,0.653234313,5,14,6,RECREATIONAL VEHICLE,Transport and Map Symbols -🌱,0x1f331,25,0.561338235,0,9,16,SEEDLING,Miscellaneous Symbols and Pictographs -💻,0x1f4bb,25,0.489415613,1,16,8,PERSONAL COMPUTER,Miscellaneous Symbols and Pictographs -🌏,0x1f30f,25,0.681460526,3,10,12,EARTH GLOBE ASIA-AUSTRALIA,Miscellaneous Symbols and Pictographs -▄,0x2584,25,0.464453824,8,11,6,LOWER HALF BLOCK,Block Elements -👓,0x1f453,24,0.514451688,0,16,8,EYEGLASSES,Miscellaneous Symbols and Pictographs -◄,0x25c4,24,0.671979253,0,18,6,BLACK LEFT-POINTING POINTER,Geometric Shapes -⚾,0x26be,24,0.213609507,9,7,8,BASEBALL,Miscellaneous Symbols -🌲,0x1f332,23,0.496443035,2,9,12,EVERGREEN TREE,Miscellaneous Symbols and Pictographs -👴,0x1f474,23,0.783858479,5,7,11,OLDER MAN,Miscellaneous Symbols and Pictographs -🏠,0x1f3e0,23,0.641777733,1,8,14,HOUSE BUILDING,Miscellaneous Symbols and Pictographs -🍇,0x1f347,23,0.583781365,5,6,12,GRAPES,Miscellaneous Symbols and Pictographs -🍘,0x1f358,23,0.620778046,5,3,15,RICE CRACKER,Miscellaneous Symbols and Pictographs -🍛,0x1f35b,23,0.585489158,8,6,9,CURRY AND RICE,Miscellaneous Symbols and Pictographs -🐇,0x1f407,23,0.96735812,4,9,10,RABBIT,Miscellaneous Symbols and Pictographs -🔞,0x1f51e,23,0.814490975,6,12,5,NO ONE UNDER EIGHTEEN SYMBOL,Miscellaneous Symbols and Pictographs -👵,0x1f475,23,0.818006874,5,2,16,OLDER WOMAN,Miscellaneous Symbols and Pictographs -◀,0x25c0,23,0.221018064,0,16,7,BLACK LEFT-POINTING TRIANGLE,Geometric Shapes -🔙,0x1f519,23,0.143848565,2,14,7,BACK WITH LEFTWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs -🌵,0x1f335,23,0.670060172,6,6,11,CACTUS,Miscellaneous Symbols and Pictographs -🐽,0x1f43d,22,0.647826714,5,9,8,PIG NOSE,Miscellaneous Symbols and Pictographs -🍮,0x1f36e,22,0.701402915,10,5,7,CUSTARD,Miscellaneous Symbols and Pictographs -🎇,0x1f387,22,0.820989335,1,3,18,FIREWORK SPARKLER,Miscellaneous Symbols and Pictographs -🐎,0x1f40e,22,0.698088195,2,8,12,HORSE,Miscellaneous Symbols and Pictographs -➔,0x2794,22,0.540918757,3,19,0,HEAVY WIDE-HEADED RIGHTWARDS ARROW,Dingbats -💶,0x1f4b6,22,0.748289907,3,16,3,BANKNOTE WITH EURO SIGN,Miscellaneous Symbols and Pictographs -🐤,0x1f424,22,0.838037285,1,7,14,BABY CHICK,Miscellaneous Symbols and Pictographs -╩,0x2569,22,0.811363636,0,17,5,BOX DRAWINGS DOUBLE UP AND HORIZONTAL,Box Drawing -🛀,0x1f6c0,21,0.904298381,6,6,9,BATH,Transport and Map Symbols -🌑,0x1f311,21,0.603915537,2,6,13,NEW MOON SYMBOL,Miscellaneous Symbols and Pictographs -🚲,0x1f6b2,21,0.582675365,1,10,10,BICYCLE,Transport and Map Symbols -🐑,0x1f411,21,0.921935783,6,13,2,SHEEP,Miscellaneous Symbols and Pictographs -🏁,0x1f3c1,21,0.618314821,0,9,12,CHEQUERED FLAG,Miscellaneous Symbols and Pictographs -🍞,0x1f35e,21,0.710838498,6,8,7,BREAD,Miscellaneous Symbols and Pictographs -🎾,0x1f3be,21,0.820392839,2,4,15,TENNIS RACQUET AND BALL,Miscellaneous Symbols and Pictographs -╚,0x255a,21,0.714311764,0,14,7,BOX DRAWINGS DOUBLE UP AND RIGHT,Box Drawing -🈹,0x1f239,21,0.349907717,1,12,8,SQUARED CJK UNIFIED IDEOGRAPH-5272,Enclosed Ideographic Supplement -🐳,0x1f433,20,0.65571861,4,9,7,SPOUTING WHALE,Miscellaneous Symbols and Pictographs -👮,0x1f46e,20,0.742230559,10,8,2,POLICE OFFICER,Miscellaneous Symbols and Pictographs -☹,0x2639,20,0.776559964,14,4,2,WHITE FROWNING FACE,Miscellaneous Symbols -🐵,0x1f435,20,0.63050797,1,7,12,MONKEY FACE,Miscellaneous Symbols and Pictographs -✪,0x272a,20,0.287581918,0,13,7,CIRCLED WHITE STAR,Dingbats -◕,0x25d5,20,0.594134042,0,10,10,CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK,Geometric Shapes -🗼,0x1f5fc,20,0.653788547,1,6,13,TOKYO TOWER,Miscellaneous Symbols and Pictographs -▐,0x2590,20,0.304138759,4,15,1,RIGHT HALF BLOCK,Block Elements -♠,0x2660,20,0.533120829,0,13,7,BLACK SPADE SUIT,Miscellaneous Symbols -┳,0x2533,20,0.399288134,10,8,2,BOX DRAWINGS HEAVY DOWN AND HORIZONTAL,Box Drawing -👺,0x1f47a,19,0.824824563,8,7,4,JAPANESE GOBLIN,Miscellaneous Symbols and Pictographs -🐚,0x1f41a,19,0.526458845,1,12,6,SPIRAL SHELL,Miscellaneous Symbols and Pictographs -👂,0x1f442,19,0.68212761,7,8,4,EAR,Miscellaneous Symbols and Pictographs -🗽,0x1f5fd,19,0.651087541,1,10,8,STATUE OF LIBERTY,Miscellaneous Symbols and Pictographs -🍵,0x1f375,19,0.650326294,3,5,11,TEACUP WITHOUT HANDLE,Miscellaneous Symbols and Pictographs -🆒,0x1f192,19,0.627794041,0,11,8,SQUARED COOL,Enclosed Alphanumeric Supplement -🍯,0x1f36f,19,0.779822828,7,4,8,HONEY POT,Miscellaneous Symbols and Pictographs -🐺,0x1f43a,19,0.734916913,2,10,7,WOLF FACE,Miscellaneous Symbols and Pictographs -⇨,0x21e8,19,0.541146317,0,9,10,RIGHTWARDS WHITE ARROW,Arrows -➨,0x27a8,19,0.558287039,2,12,5,HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW,Dingbats -🌓,0x1f313,19,0.458297394,0,6,13,FIRST QUARTER MOON SYMBOL,Miscellaneous Symbols and Pictographs -🔒,0x1f512,19,0.939297049,5,5,9,LOCK,Miscellaneous Symbols and Pictographs -╬,0x256c,19,0.32158749,6,10,3,BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL,Box Drawing -👳,0x1f473,18,0.816081393,2,1,15,MAN WITH TURBAN,Miscellaneous Symbols and Pictographs -🌂,0x1f302,18,0.784983076,2,9,7,CLOSED UMBRELLA,Miscellaneous Symbols and Pictographs -🚌,0x1f68c,18,0.635613322,2,10,6,BUS,Transport and Map Symbols -♩,0x2669,18,0.791816647,0,7,11,QUARTER NOTE,Miscellaneous Symbols -🍡,0x1f361,18,0.699734257,5,9,4,DANGO,Miscellaneous Symbols and Pictographs -❥,0x2765,18,0.440217022,0,13,5,ROTATED HEAVY BLACK HEART BULLET,Dingbats -🎡,0x1f3a1,18,0.506097489,1,10,7,FERRIS WHEEL,Miscellaneous Symbols and Pictographs -💌,0x1f48c,17,0.805000544,2,3,12,LOVE LETTER,Miscellaneous Symbols and Pictographs -🐩,0x1f429,17,0.87034228,0,10,7,POODLE,Miscellaneous Symbols and Pictographs -🌜,0x1f31c,17,0.604117045,0,7,10,LAST QUARTER MOON WITH FACE,Miscellaneous Symbols and Pictographs -⌚,0x231a,17,0.64929786,2,9,6,WATCH,Miscellaneous Technical -🚿,0x1f6bf,17,0.669217138,1,3,13,SHOWER,Transport and Map Symbols -🐖,0x1f416,17,0.814054951,0,14,3,PIG,Miscellaneous Symbols and Pictographs -🔆,0x1f506,17,0.604618098,0,6,11,HIGH BRIGHTNESS SYMBOL,Miscellaneous Symbols and Pictographs -🌛,0x1f31b,17,0.679966738,0,6,11,FIRST QUARTER MOON WITH FACE,Miscellaneous Symbols and Pictographs -💂,0x1f482,17,0.691282654,8,4,5,GUARDSMAN,Miscellaneous Symbols and Pictographs -🐔,0x1f414,17,0.627149273,1,9,7,CHICKEN,Miscellaneous Symbols and Pictographs -🙎,0x1f64e,17,0.640742988,8,2,7,PERSON WITH POUTING FACE,Emoticons -🏩,0x1f3e9,16,0.587431016,2,4,10,LOVE HOTEL,Miscellaneous Symbols and Pictographs -🇫,0x1f1eb,16,0.718033886,0,7,9,REGIONAL INDICATOR SYMBOL LETTER F,Enclosed Alphanumeric Supplement -🔨,0x1f528,16,0.738603866,6,6,4,HAMMER,Miscellaneous Symbols and Pictographs -📢,0x1f4e2,16,0.545722402,0,8,8,PUBLIC ADDRESS LOUDSPEAKER,Miscellaneous Symbols and Pictographs -🐦,0x1f426,16,0.75753571,0,8,8,BIRD,Miscellaneous Symbols and Pictographs -🐲,0x1f432,16,0.457546329,2,13,1,DRAGON FACE,Miscellaneous Symbols and Pictographs -♻,0x267b,16,0.438690753,0,7,9,BLACK UNIVERSAL RECYCLING SYMBOL,Miscellaneous Symbols -🌘,0x1f318,16,0.577817017,0,5,11,WANING CRESCENT MOON SYMBOL,Miscellaneous Symbols and Pictographs -🍐,0x1f350,16,0.84457574,5,3,8,PEAR,Miscellaneous Symbols and Pictographs -🌔,0x1f314,16,0.447188207,0,5,11,WAXING GIBBOUS MOON SYMBOL,Miscellaneous Symbols and Pictographs -╥,0x2565,16,0.8694829,6,2,8,BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE,Box Drawing -❊,0x274a,16,0.45212766,0,16,0,EIGHT TEARDROP-SPOKED PROPELLER ASTERISK,Dingbats -👖,0x1f456,15,0.910194857,1,7,7,JEANS,Miscellaneous Symbols and Pictographs -🚺,0x1f6ba,15,0.677226689,2,8,5,WOMENS SYMBOL,Transport and Map Symbols -😗,0x1f617,15,0.714328477,1,2,12,KISSING FACE,Emoticons -🎭,0x1f3ad,15,0.657660049,5,5,5,PERFORMING ARTS,Miscellaneous Symbols and Pictographs -🐄,0x1f404,15,0.825887991,2,6,7,COW,Miscellaneous Symbols and Pictographs -◟,0x25df,15,0.646546064,2,12,1,LOWER LEFT QUADRANT CIRCULAR ARC,Geometric Shapes -🍢,0x1f362,15,0.684276452,5,7,3,ODEN,Miscellaneous Symbols and Pictographs -🎨,0x1f3a8,15,0.490548154,1,10,4,ARTIST PALETTE,Miscellaneous Symbols and Pictographs -⬇,0x2b07,15,0.631917187,2,4,9,DOWNWARDS BLACK ARROW,Miscellaneous Symbols and Arrows -🚼,0x1f6bc,15,0.692874634,0,5,10,BABY SYMBOL,Transport and Map Symbols -⛲,0x26f2,15,0.697309585,1,12,2,FOUNTAIN,Miscellaneous Symbols -▁,0x2581,15,0.711319751,0,15,0,LOWER ONE EIGHTH BLOCK,Block Elements -🇴,0x1f1f4,15,0.676124081,0,9,6,REGIONAL INDICATOR SYMBOL LETTER O,Enclosed Alphanumeric Supplement -🌗,0x1f317,15,0.54681955,0,4,11,LAST QUARTER MOON SYMBOL,Miscellaneous Symbols and Pictographs -🌖,0x1f316,15,0.534539354,0,4,11,WANING GIBBOUS MOON SYMBOL,Miscellaneous Symbols and Pictographs -🔅,0x1f505,15,0.634782609,0,0,15,LOW BRIGHTNESS SYMBOL,Miscellaneous Symbols and Pictographs -👜,0x1f45c,14,0.675482619,2,6,6,HANDBAG,Miscellaneous Symbols and Pictographs -🐌,0x1f40c,14,0.421349764,0,3,11,SNAIL,Miscellaneous Symbols and Pictographs -💼,0x1f4bc,14,0.573028381,1,3,10,BRIEFCASE,Miscellaneous Symbols and Pictographs -🚕,0x1f695,14,0.526016674,3,8,3,TAXI,Transport and Map Symbols -🐹,0x1f439,14,0.743700839,3,3,8,HAMSTER FACE,Miscellaneous Symbols and Pictographs -🌠,0x1f320,14,0.761411531,2,1,11,SHOOTING STAR,Miscellaneous Symbols and Pictographs -🐈,0x1f408,14,0.645414223,0,9,5,CAT,Miscellaneous Symbols and Pictographs -⇧,0x21e7,14,0.461420203,0,12,2,UPWARDS WHITE ARROW,Arrows -☎,0x260e,14,0.836709012,2,10,2,BLACK TELEPHONE,Miscellaneous Symbols -🌁,0x1f301,14,0.744406749,1,9,4,FOGGY,Miscellaneous Symbols and Pictographs -⚫,0x26ab,14,0.440912997,3,4,7,MEDIUM BLACK CIRCLE,Miscellaneous Symbols -♧,0x2667,14,0.775062446,0,6,8,WHITE CLUB SUIT,Miscellaneous Symbols -🏰,0x1f3f0,14,0.434066804,1,7,6,EUROPEAN CASTLE,Miscellaneous Symbols and Pictographs -🚵,0x1f6b5,14,0.5561554,0,8,6,MOUNTAIN BICYCLIST,Transport and Map Symbols -🎢,0x1f3a2,14,0.825803746,1,4,9,ROLLER COASTER,Miscellaneous Symbols and Pictographs -🎷,0x1f3b7,14,0.759955203,0,3,11,SAXOPHONE,Miscellaneous Symbols and Pictographs -🎐,0x1f390,14,0.290879701,0,11,3,WIND CHIME,Miscellaneous Symbols and Pictographs -┈,0x2508,14,0.792740417,12,0,2,BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL,Box Drawing -╗,0x2557,14,0.361119833,0,8,6,BOX DRAWINGS DOUBLE DOWN AND LEFT,Box Drawing -╱,0x2571,14,0.547959184,0,14,0,BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT,Box Drawing -🌇,0x1f307,13,0.54287435,0,5,8,SUNSET OVER BUILDINGS,Miscellaneous Symbols and Pictographs -⏰,0x23f0,13,0.645780266,2,2,9,ALARM CLOCK,Miscellaneous Technical -⇩,0x21e9,13,0.503572636,0,13,0,DOWNWARDS WHITE ARROW,Arrows -🚂,0x1f682,13,0.656030729,0,9,4,STEAM LOCOMOTIVE,Transport and Map Symbols -◠,0x25e0,13,0.652555193,0,6,7,UPPER HALF CIRCLE,Geometric Shapes -🎿,0x1f3bf,13,0.727391903,1,5,7,SKI AND SKI BOOT,Miscellaneous Symbols and Pictographs -✦,0x2726,13,0.402369693,0,12,1,BLACK FOUR POINTED STAR,Dingbats -🆔,0x1f194,13,0.479124776,0,1,12,SQUARED ID,Enclosed Alphanumeric Supplement -⛪,0x26ea,13,0.38723933,2,7,4,CHURCH,Miscellaneous Symbols -🌒,0x1f312,13,0.446222397,0,4,9,WAXING CRESCENT MOON SYMBOL,Miscellaneous Symbols and Pictographs -🐪,0x1f42a,13,0.836925018,0,4,9,DROMEDARY CAMEL,Miscellaneous Symbols and Pictographs -╔,0x2554,13,0.309824364,0,9,4,BOX DRAWINGS DOUBLE DOWN AND RIGHT,Box Drawing -╝,0x255d,13,0.800037569,0,6,7,BOX DRAWINGS DOUBLE UP AND LEFT,Box Drawing -👔,0x1f454,12,0.520012314,2,3,7,NECKTIE,Miscellaneous Symbols and Pictographs -🔱,0x1f531,12,0.790792217,3,5,4,TRIDENT EMBLEM,Miscellaneous Symbols and Pictographs -🆓,0x1f193,12,0.551459397,0,9,3,SQUARED FREE,Enclosed Alphanumeric Supplement -🐋,0x1f40b,12,0.865813424,2,5,5,WHALE,Miscellaneous Symbols and Pictographs -▽,0x25bd,12,0.843553507,1,4,7,WHITE DOWN-POINTING TRIANGLE,Geometric Shapes -▂,0x2582,12,0.578512397,0,12,0,LOWER ONE QUARTER BLOCK,Block Elements -🐛,0x1f41b,12,0.672751951,2,4,6,BUG,Miscellaneous Symbols and Pictographs -👕,0x1f455,12,0.795097842,1,4,7,T-SHIRT,Miscellaneous Symbols and Pictographs -🚋,0x1f68b,12,0.317741493,0,11,1,TRAM CAR,Transport and Map Symbols -💳,0x1f4b3,12,0.83392297,1,4,7,CREDIT CARD,Miscellaneous Symbols and Pictographs -🌆,0x1f306,12,0.764797204,2,6,4,CITYSCAPE AT DUSK,Miscellaneous Symbols and Pictographs -🏧,0x1f3e7,12,0.888240175,0,0,12,AUTOMATED TELLER MACHINE,Miscellaneous Symbols and Pictographs -💡,0x1f4a1,12,0.597619454,0,3,9,ELECTRIC LIGHT BULB,Miscellaneous Symbols and Pictographs -🔹,0x1f539,12,0.170199929,2,6,4,SMALL BLUE DIAMOND,Miscellaneous Symbols and Pictographs -⬅,0x2b05,12,0.662574787,0,5,7,LEFTWARDS BLACK ARROW,Miscellaneous Symbols and Arrows -🍠,0x1f360,12,0.938678015,5,2,5,ROASTED SWEET POTATO,Miscellaneous Symbols and Pictographs -🐫,0x1f42b,12,0.770082215,0,7,5,BACTRIAN CAMEL,Miscellaneous Symbols and Pictographs -🏪,0x1f3ea,12,0.374437236,2,7,3,CONVENIENCE STORE,Miscellaneous Symbols and Pictographs -۩,0x6e9,12,0.464312944,0,12,0,ARABIC PLACE OF SAJDAH,Arabic -🇱,0x1f1f1,12,0.71333692,0,6,6,REGIONAL INDICATOR SYMBOL LETTER L,Enclosed Alphanumeric Supplement -📹,0x1f4f9,11,0.718346535,1,3,7,VIDEO CAMERA,Miscellaneous Symbols and Pictographs -👞,0x1f45e,11,0.779457078,1,3,7,MANS SHOE,Miscellaneous Symbols and Pictographs -🚑,0x1f691,11,0.758087751,3,4,4,AMBULANCE,Transport and Map Symbols -🆘,0x1f198,11,0.775131806,4,2,5,SQUARED SOS,Enclosed Alphanumeric Supplement -👚,0x1f45a,11,0.810043786,0,3,8,WOMANS CLOTHES,Miscellaneous Symbols and Pictographs -🚍,0x1f68d,11,0.659558885,4,2,5,ONCOMING BUS,Transport and Map Symbols -□,0x25a1,11,0.673637431,7,0,4,WHITE SQUARE,Geometric Shapes -🐂,0x1f402,11,0.774388184,1,7,3,OX,Miscellaneous Symbols and Pictographs -🚣,0x1f6a3,11,0.712555862,0,3,8,ROWBOAT,Transport and Map Symbols -✳,0x2733,11,0.37234627,0,11,0,EIGHT SPOKED ASTERISK,Dingbats -🏉,0x1f3c9,11,0.837042609,0,4,7,RUGBY FOOTBALL,Miscellaneous Symbols and Pictographs -🗻,0x1f5fb,11,0.723455901,0,3,8,MOUNT FUJI,Miscellaneous Symbols and Pictographs -🐀,0x1f400,11,0.701470653,1,7,3,RAT,Miscellaneous Symbols and Pictographs -╦,0x2566,11,0.22026307,0,6,5,BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL,Box Drawing -⛺,0x26fa,10,0.905848988,1,2,7,TENT,Miscellaneous Symbols -🐕,0x1f415,10,0.879333592,1,5,4,DOG,Miscellaneous Symbols and Pictographs -🏂,0x1f3c2,10,0.777003138,1,3,6,SNOWBOARDER,Miscellaneous Symbols and Pictographs -👡,0x1f461,10,0.63543995,1,3,6,WOMANS SANDAL,Miscellaneous Symbols and Pictographs -📻,0x1f4fb,10,0.726200366,1,4,5,RADIO,Miscellaneous Symbols and Pictographs -✒,0x2712,10,0.543607437,1,5,4,BLACK NIB,Dingbats -🌰,0x1f330,10,0.786442145,0,3,7,CHESTNUT,Miscellaneous Symbols and Pictographs -🏢,0x1f3e2,10,0.542295544,0,8,2,OFFICE BUILDING,Miscellaneous Symbols and Pictographs -🎒,0x1f392,10,0.614006372,1,2,7,SCHOOL SATCHEL,Miscellaneous Symbols and Pictographs -⌒,0x2312,10,0.623939324,0,3,7,ARC,Miscellaneous Technical -🏫,0x1f3eb,10,0.644209517,6,1,3,SCHOOL,Miscellaneous Symbols and Pictographs -📴,0x1f4f4,10,0.981898981,1,0,9,MOBILE PHONE OFF,Miscellaneous Symbols and Pictographs -🚢,0x1f6a2,10,0.817914113,3,1,6,SHIP,Transport and Map Symbols -🚚,0x1f69a,10,0.479308081,2,7,1,DELIVERY TRUCK,Transport and Map Symbols -🐉,0x1f409,10,0.628494919,0,8,2,DRAGON,Miscellaneous Symbols and Pictographs -❒,0x2752,10,0.587413086,0,7,3,UPPER RIGHT SHADOWED WHITE SQUARE,Dingbats -🐊,0x1f40a,10,0.84550756,2,5,3,CROCODILE,Miscellaneous Symbols and Pictographs -🔔,0x1f514,10,0.713041475,0,0,10,BELL,Miscellaneous Symbols and Pictographs -◢,0x25e2,10,0.571991872,0,2,8,BLACK LOWER RIGHT TRIANGLE,Geometric Shapes -🏥,0x1f3e5,9,0.648092966,1,4,4,HOSPITAL,Miscellaneous Symbols and Pictographs -❔,0x2754,9,0.787466861,3,3,3,WHITE QUESTION MARK ORNAMENT,Dingbats -🚖,0x1f696,9,0.800144753,3,4,2,ONCOMING TAXI,Transport and Map Symbols -🃏,0x1f0cf,9,0.685606875,3,2,4,PLAYING CARD BLACK JOKER,Playing Cards -▼,0x25bc,9,0.656774297,2,4,3,BLACK DOWN-POINTING TRIANGLE,Geometric Shapes -▌,0x258c,9,0.420711618,4,4,1,LEFT HALF BLOCK,Block Elements -☛,0x261b,9,0.553782742,0,5,4,BLACK RIGHT POINTING INDEX,Miscellaneous Symbols -✩,0x2729,9,0.265667997,0,9,0,STRESS OUTLINED WHITE STAR,Dingbats -💒,0x1f492,9,0.79417208,0,3,6,WEDDING,Miscellaneous Symbols and Pictographs -🚤,0x1f6a4,9,0.503972435,0,5,4,SPEEDBOAT,Transport and Map Symbols -🐐,0x1f410,9,0.720583133,0,4,5,GOAT,Miscellaneous Symbols and Pictographs -■,0x25a0,9,0.79044432,5,2,2,BLACK SQUARE,Geometric Shapes -🔚,0x1f51a,9,0.868645196,1,3,5,END WITH LEFTWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs -🎻,0x1f3bb,9,0.720880053,0,5,4,VIOLIN,Miscellaneous Symbols and Pictographs -🔷,0x1f537,9,0.367845118,0,7,2,LARGE BLUE DIAMOND,Miscellaneous Symbols and Pictographs -🚦,0x1f6a6,9,0.454265022,2,4,3,VERTICAL TRAFFIC LIGHT,Transport and Map Symbols -🔓,0x1f513,9,0.802890324,3,2,4,OPEN LOCK,Miscellaneous Symbols and Pictographs -🎽,0x1f3bd,9,0.903767713,0,4,5,RUNNING SHIRT WITH SASH,Miscellaneous Symbols and Pictographs -📅,0x1f4c5,9,0.597376373,2,3,4,CALENDAR,Miscellaneous Symbols and Pictographs -🎺,0x1f3ba,9,0.646180394,1,0,8,TRUMPET,Miscellaneous Symbols and Pictographs -✯,0x272f,9,0.32090504,0,9,0,PINWHEEL STAR,Dingbats -🍈,0x1f348,9,0.520981407,6,1,2,MELON,Miscellaneous Symbols and Pictographs -✉,0x2709,9,0.44131007,1,4,4,ENVELOPE,Dingbats -╣,0x2563,9,0.641758242,0,9,0,BOX DRAWINGS DOUBLE VERTICAL AND LEFT,Box Drawing -◤,0x25e4,9,0.669223855,0,0,9,BLACK UPPER LEFT TRIANGLE,Geometric Shapes -○,0x25cb,8,0.625334477,0,3,5,WHITE CIRCLE,Geometric Shapes -🍼,0x1f37c,8,0.889794471,1,1,6,BABY BOTTLE,Miscellaneous Symbols and Pictographs -📀,0x1f4c0,8,0.842924661,1,5,2,DVD,Miscellaneous Symbols and Pictographs -🚛,0x1f69b,8,0.552176238,2,6,0,ARTICULATED LORRY,Transport and Map Symbols -📓,0x1f4d3,8,0.835156432,1,4,3,NOTEBOOK,Miscellaneous Symbols and Pictographs -☉,0x2609,8,0.985925307,0,6,2,SUN,Miscellaneous Symbols -💴,0x1f4b4,8,0.837157842,3,4,1,BANKNOTE WITH YEN SIGN,Miscellaneous Symbols and Pictographs -┼,0x253c,8,0.594639298,2,4,2,BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL,Box Drawing -🐃,0x1f403,8,0.82964401,0,8,0,WATER BUFFALO,Miscellaneous Symbols and Pictographs -➰,0x27b0,8,0.255281448,4,1,3,CURLY LOOP,Dingbats -🔌,0x1f50c,8,0.84383834,3,3,2,ELECTRIC PLUG,Miscellaneous Symbols and Pictographs -🍄,0x1f344,8,0.481955716,2,4,2,MUSHROOM,Miscellaneous Symbols and Pictographs -📕,0x1f4d5,8,0.687815619,1,4,3,CLOSED BOOK,Miscellaneous Symbols and Pictographs -📣,0x1f4e3,8,0.665290609,1,2,5,CHEERING MEGAPHONE,Miscellaneous Symbols and Pictographs -🚓,0x1f693,8,0.654503222,0,5,3,POLICE CAR,Transport and Map Symbols -🐗,0x1f417,8,0.756674318,0,3,5,BOAR,Miscellaneous Symbols and Pictographs -↪,0x21aa,8,0.726671282,0,7,1,RIGHTWARDS ARROW WITH HOOK,Arrows -⛳,0x26f3,8,0.659686501,0,1,7,FLAG IN HOLE,Miscellaneous Symbols -┻,0x253b,8,0.436070741,6,0,2,BOX DRAWINGS HEAVY UP AND HORIZONTAL,Box Drawing -┛,0x251b,8,0.711630126,0,2,6,BOX DRAWINGS HEAVY UP AND LEFT,Box Drawing -┃,0x2503,8,0.495888704,0,4,4,BOX DRAWINGS HEAVY VERTICAL,Box Drawing -👱,0x1f471,7,0.584040891,1,4,2,PERSON WITH BLOND HAIR,Miscellaneous Symbols and Pictographs -⏳,0x23f3,7,0.829006815,3,1,3,HOURGLASS WITH FLOWING SAND,Miscellaneous Technical -💺,0x1f4ba,7,0.499522738,1,3,3,SEAT,Miscellaneous Symbols and Pictographs -🏇,0x1f3c7,7,0.829351657,3,2,2,HORSE RACING,Miscellaneous Symbols and Pictographs -☻,0x263b,7,0.808078576,1,3,3,BLACK SMILING FACE,Miscellaneous Symbols -📞,0x1f4de,7,0.639663641,0,3,4,TELEPHONE RECEIVER,Miscellaneous Symbols and Pictographs -Ⓐ,0x24b6,7,0.467453036,2,4,1,CIRCLED LATIN CAPITAL LETTER A,Enclosed Alphanumerics -🌉,0x1f309,7,0.848338345,0,2,5,BRIDGE AT NIGHT,Miscellaneous Symbols and Pictographs -🚩,0x1f6a9,7,0.14668319,3,3,1,TRIANGULAR FLAG ON POST,Transport and Map Symbols -✎,0x270e,7,0.547314568,0,2,5,LOWER RIGHT PENCIL,Dingbats -📃,0x1f4c3,7,0.75418917,0,3,4,PAGE WITH CURL,Miscellaneous Symbols and Pictographs -🏨,0x1f3e8,7,0.803363124,0,5,2,HOTEL,Miscellaneous Symbols and Pictographs -📌,0x1f4cc,7,0.799054518,5,1,1,PUSHPIN,Miscellaneous Symbols and Pictographs -♎,0x264e,7,0.85514993,2,4,1,LIBRA,Miscellaneous Symbols -💷,0x1f4b7,7,0.573124902,0,3,4,BANKNOTE WITH POUND SIGN,Miscellaneous Symbols and Pictographs -🚄,0x1f684,7,0.699813945,0,2,5,HIGH-SPEED TRAIN,Transport and Map Symbols -▲,0x25b2,7,0.33783723,0,2,5,BLACK UP-POINTING TRIANGLE,Geometric Shapes -⛵,0x26f5,7,0.323527212,0,2,5,SAILBOAT,Miscellaneous Symbols -🔸,0x1f538,7,0.17210479,0,5,2,SMALL ORANGE DIAMOND,Miscellaneous Symbols and Pictographs -⌛,0x231b,7,0.796787872,2,2,3,HOURGLASS,Miscellaneous Technical -🚜,0x1f69c,7,0.76727505,0,0,7,TRACTOR,Transport and Map Symbols -🐆,0x1f406,7,0.550090954,0,4,3,LEOPARD,Miscellaneous Symbols and Pictographs -👒,0x1f452,7,0.843648743,1,3,3,WOMANS HAT,Miscellaneous Symbols and Pictographs -❕,0x2755,7,0.86202303,1,3,3,WHITE EXCLAMATION MARK ORNAMENT,Dingbats -🔛,0x1f51b,7,0.474006336,1,1,5,ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE,Miscellaneous Symbols and Pictographs -♢,0x2662,7,0.868165215,0,4,3,WHITE DIAMOND SUIT,Miscellaneous Symbols -🇲,0x1f1f2,7,0.786773623,0,3,4,REGIONAL INDICATOR SYMBOL LETTER M,Enclosed Alphanumeric Supplement -❅,0x2745,7,0.247154472,0,1,6,TIGHT TRIFOLIATE SNOWFLAKE,Dingbats -👝,0x1f45d,6,0.611228018,1,1,4,POUCH,Miscellaneous Symbols and Pictographs -✞,0x271e,6,0.509389671,0,3,3,SHADOWED WHITE LATIN CROSS,Dingbats -◡,0x25e1,6,0.946756676,0,4,2,LOWER HALF CIRCLE,Geometric Shapes -🎋,0x1f38b,6,0.785515587,1,0,5,TANABATA TREE,Miscellaneous Symbols and Pictographs -👥,0x1f465,6,0.83792517,1,2,3,BUSTS IN SILHOUETTE,Miscellaneous Symbols and Pictographs -📵,0x1f4f5,6,0.794071373,1,3,2,NO MOBILE PHONES,Miscellaneous Symbols and Pictographs -🐡,0x1f421,6,0.867288557,0,4,2,BLOWFISH,Miscellaneous Symbols and Pictographs -◆,0x25c6,6,0.602165081,0,1,5,BLACK DIAMOND,Geometric Shapes -🏯,0x1f3ef,6,0.529919889,0,5,1,JAPANESE CASTLE,Miscellaneous Symbols and Pictographs -☂,0x2602,6,0.453390203,1,4,1,UMBRELLA,Miscellaneous Symbols -🔭,0x1f52d,6,0.715984026,0,3,3,TELESCOPE,Miscellaneous Symbols and Pictographs -🎪,0x1f3aa,6,0.607881289,0,4,2,CIRCUS TENT,Miscellaneous Symbols and Pictographs -🐜,0x1f41c,6,0.879901961,0,2,4,ANT,Miscellaneous Symbols and Pictographs -♌,0x264c,6,0.790409536,0,1,5,LEO,Miscellaneous Symbols -☐,0x2610,6,0.538095238,6,0,0,BALLOT BOX,Miscellaneous Symbols -👷,0x1f477,6,0.739199448,1,2,3,CONSTRUCTION WORKER,Miscellaneous Symbols and Pictographs -↳,0x21b3,6,0.346428571,0,6,0,DOWNWARDS ARROW WITH TIP RIGHTWARDS,Arrows -🔈,0x1f508,6,0.635444115,0,4,2,SPEAKER,Miscellaneous Symbols and Pictographs -📄,0x1f4c4,6,0.624139531,0,0,6,PAGE FACING UP,Miscellaneous Symbols and Pictographs -📍,0x1f4cd,6,0.48869302,1,3,2,ROUND PUSHPIN,Miscellaneous Symbols and Pictographs -🚐,0x1f690,6,0.77642636,0,1,5,MINIBUS,Transport and Map Symbols -🚔,0x1f694,6,0.521943521,1,4,1,ONCOMING POLICE CAR,Transport and Map Symbols -🌋,0x1f30b,6,0.379680055,0,2,4,VOLCANO,Miscellaneous Symbols and Pictographs -📡,0x1f4e1,6,0.553891601,1,2,3,SATELLITE ANTENNA,Miscellaneous Symbols and Pictographs -⏩,0x23e9,6,0.7317139,0,5,1,BLACK RIGHT-POINTING DOUBLE TRIANGLE,Miscellaneous Technical -🚳,0x1f6b3,6,0.102993951,0,0,6,NO BICYCLES,Transport and Map Symbols -✘,0x2718,6,0.538602654,0,1,5,HEAVY BALLOT X,Dingbats -۞,0x6de,6,0.471786165,0,6,0,ARABIC START OF RUB EL HIZB,Arabic -☾,0x263e,6,0.452907711,0,6,0,LAST QUARTER MOON,Miscellaneous Symbols -🅰,0x1f170,6,0.311138998,1,2,3,NEGATIVE SQUARED LATIN CAPITAL LETTER A,Enclosed Alphanumeric Supplement -📥,0x1f4e5,6,0.981884058,0,6,0,INBOX TRAY,Miscellaneous Symbols and Pictographs -🇼,0x1f1fc,6,0.734391905,0,3,3,REGIONAL INDICATOR SYMBOL LETTER W,Enclosed Alphanumeric Supplement -┓,0x2513,6,0.51522533,0,2,4,BOX DRAWINGS HEAVY DOWN AND LEFT,Box Drawing -┣,0x2523,6,0.487486157,0,2,4,BOX DRAWINGS HEAVY VERTICAL AND RIGHT,Box Drawing -Ⓛ,0x24c1,6,0.726851852,0,3,3,CIRCLED LATIN CAPITAL LETTER L,Enclosed Alphanumerics -Ⓔ,0x24ba,6,0.814814815,0,3,3,CIRCLED LATIN CAPITAL LETTER E,Enclosed Alphanumerics -🔦,0x1f526,5,0.852648347,0,5,0,ELECTRIC TORCH,Miscellaneous Symbols and Pictographs -👤,0x1f464,5,0.785820605,0,1,4,BUST IN SILHOUETTE,Miscellaneous Symbols and Pictographs -🚁,0x1f681,5,0.509988852,0,4,1,HELICOPTER,Transport and Map Symbols -🎠,0x1f3a0,5,0.57433687,0,2,3,CAROUSEL HORSE,Miscellaneous Symbols and Pictographs -🐁,0x1f401,5,0.418555982,2,3,0,MOUSE,Miscellaneous Symbols and Pictographs -📗,0x1f4d7,5,0.78915959,1,2,2,GREEN BOOK,Miscellaneous Symbols and Pictographs -┐,0x2510,5,0.770866381,2,2,1,BOX DRAWINGS LIGHT DOWN AND LEFT,Box Drawing -☮,0x262e,5,0.75037594,2,1,2,PEACE SYMBOL,Miscellaneous Symbols -♂,0x2642,5,0.580233775,0,4,1,MALE SIGN,Miscellaneous Symbols -◞,0x25de,5,0.722789157,1,3,1,LOWER RIGHT QUADRANT CIRCULAR ARC,Geometric Shapes -📯,0x1f4ef,5,0.974048452,1,4,0,POSTAL HORN,Miscellaneous Symbols and Pictographs -🔩,0x1f529,5,0.672722386,1,2,2,NUT AND BOLT,Miscellaneous Symbols and Pictographs -👢,0x1f462,5,0.994117647,0,1,4,WOMANS BOOTS,Miscellaneous Symbols and Pictographs -◂,0x25c2,5,0.198500589,0,3,2,BLACK LEFT-POINTING SMALL TRIANGLE,Geometric Shapes -📰,0x1f4f0,5,0.860149569,1,1,3,NEWSPAPER,Miscellaneous Symbols and Pictographs -📶,0x1f4f6,5,0.930492899,0,3,2,ANTENNA WITH BARS,Miscellaneous Symbols and Pictographs -🚥,0x1f6a5,5,0.723893805,1,3,1,HORIZONTAL TRAFFIC LIGHT,Transport and Map Symbols -🌄,0x1f304,5,0.285583654,0,4,1,SUNRISE OVER MOUNTAINS,Miscellaneous Symbols and Pictographs -🗾,0x1f5fe,5,0.738585725,0,3,2,SILHOUETTE OF JAPAN,Miscellaneous Symbols and Pictographs -🔶,0x1f536,5,0.786004057,0,3,2,LARGE ORANGE DIAMOND,Miscellaneous Symbols and Pictographs -🏤,0x1f3e4,5,0.272575758,0,3,2,EUROPEAN POST OFFICE,Miscellaneous Symbols and Pictographs -🎩,0x1f3a9,5,0.58647571,0,3,2,TOP HAT,Miscellaneous Symbols and Pictographs -Ⓜ,0x24c2,5,0.765244502,1,1,3,CIRCLED LATIN CAPITAL LETTER M,Enclosed Alphanumerics -🔧,0x1f527,5,0.677226399,4,0,1,WRENCH,Miscellaneous Symbols and Pictographs -🐅,0x1f405,5,0.818550107,0,4,1,TIGER,Miscellaneous Symbols and Pictographs -♮,0x266e,5,0.936640494,0,4,1,MUSIC NATURAL SIGN,Miscellaneous Symbols -🅾,0x1f17e,5,0.977468672,2,2,1,NEGATIVE SQUARED LATIN CAPITAL LETTER O,Enclosed Alphanumeric Supplement -🔄,0x1f504,5,0.971014493,0,5,0,ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS,Miscellaneous Symbols and Pictographs -☄,0x2604,5,0.435373547,0,5,0,COMET,Miscellaneous Symbols -☨,0x2628,5,0.457692308,0,5,0,CROSS OF LORRAINE,Miscellaneous Symbols -📦,0x1f4e6,4,0.508942142,0,3,1,PACKAGE,Miscellaneous Symbols and Pictographs -🚊,0x1f68a,4,0.412291392,1,1,2,TRAM,Transport and Map Symbols -🔲,0x1f532,4,0.665449309,0,1,3,BLACK SQUARE BUTTON,Miscellaneous Symbols and Pictographs -🔁,0x1f501,4,0.570472495,1,2,1,CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS,Miscellaneous Symbols and Pictographs -△,0x25b3,4,0.595601141,0,3,1,WHITE UP-POINTING TRIANGLE,Geometric Shapes -📆,0x1f4c6,4,0.839991723,0,0,4,TEAR-OFF CALENDAR,Miscellaneous Symbols and Pictographs -❛,0x275b,4,0.735294118,0,2,2,HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT,Dingbats -📉,0x1f4c9,4,0.726505602,0,2,2,CHART WITH DOWNWARDS TREND,Miscellaneous Symbols and Pictographs -▵,0x25b5,4,0.012558719,0,2,2,WHITE UP-POINTING SMALL TRIANGLE,Geometric Shapes -🔎,0x1f50e,4,0.333026114,0,1,3,RIGHT-POINTING MAGNIFYING GLASS,Miscellaneous Symbols and Pictographs -☜,0x261c,4,0.95068438,0,3,1,WHITE LEFT POINTING INDEX,Miscellaneous Symbols -🇯,0x1f1ef,4,0.598500468,0,2,2,REGIONAL INDICATOR SYMBOL LETTER J,Enclosed Alphanumeric Supplement -🇵,0x1f1f5,4,0.60602405,0,2,2,REGIONAL INDICATOR SYMBOL LETTER P,Enclosed Alphanumeric Supplement -📘,0x1f4d8,4,0.729794868,1,1,2,BLUE BOOK,Miscellaneous Symbols and Pictographs -✡,0x2721,4,0.542307692,0,4,0,STAR OF DAVID,Dingbats -ⓔ,0x24d4,4,0.423106061,0,1,3,CIRCLED LATIN SMALL LETTER E,Enclosed Alphanumerics -🔑,0x1f511,4,0.712219599,1,1,2,KEY,Miscellaneous Symbols and Pictographs -🔃,0x1f503,4,0.480569642,1,2,1,CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS,Miscellaneous Symbols and Pictographs -👃,0x1f443,4,0.617338955,2,0,2,NOSE,Miscellaneous Symbols and Pictographs -⭕,0x2b55,4,0.521859186,0,2,2,HEAVY LARGE CIRCLE,Miscellaneous Symbols and Arrows -🔘,0x1f518,4,0.823106247,0,3,1,RADIO BUTTON,Miscellaneous Symbols and Pictographs -ⓒ,0x24d2,4,0.078409091,2,0,2,CIRCLED LATIN SMALL LETTER C,Enclosed Alphanumerics -🚭,0x1f6ad,4,0.691042031,0,0,4,NO SMOKING SYMBOL,Transport and Map Symbols -🚉,0x1f689,4,0.517599805,0,1,3,STATION,Transport and Map Symbols -🚪,0x1f6aa,4,0.459991145,0,1,3,DOOR,Transport and Map Symbols -➳,0x27b3,4,0.689189189,0,2,2,WHITE-FEATHERED RIGHTWARDS ARROW,Dingbats -🚃,0x1f683,4,0.867813709,0,1,3,RAILWAY CAR,Transport and Map Symbols -┯,0x252f,4,0.588235294,2,2,0,BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY,Box Drawing -🏬,0x1f3ec,4,0.772435897,0,4,0,DEPARTMENT STORE,Miscellaneous Symbols and Pictographs -☽,0x263d,4,0.827205882,0,4,0,FIRST QUARTER MOON,Miscellaneous Symbols -🆙,0x1f199,4,0.459136213,0,2,2,SQUARED UP WITH EXCLAMATION MARK,Enclosed Alphanumeric Supplement -🆖,0x1f196,4,0.32767456,1,1,2,SQUARED NG,Enclosed Alphanumeric Supplement -☪,0x262a,4,0.5,0,4,0,STAR AND CRESCENT,Miscellaneous Symbols -┗,0x2517,4,0.70743831,0,0,4,BOX DRAWINGS HEAVY UP AND RIGHT,Box Drawing -🚮,0x1f6ae,4,0.705415215,2,0,2,PUT LITTER IN ITS PLACE SYMBOL,Transport and Map Symbols -┫,0x252b,4,0.546428571,0,4,0,BOX DRAWINGS HEAVY VERTICAL AND LEFT,Box Drawing -Ⓞ,0x24c4,4,0.6875,0,2,2,CIRCLED LATIN CAPITAL LETTER O,Enclosed Alphanumerics -❇,0x2747,3,0.906565657,0,1,2,SPARKLE,Dingbats -✴,0x2734,3,0.425259601,0,1,2,EIGHT POINTED BLACK STAR,Dingbats -┌,0x250c,3,1,1,1,1,BOX DRAWINGS LIGHT DOWN AND RIGHT,Box Drawing -☊,0x260a,3,0.627212773,0,0,3,ASCENDING NODE,Miscellaneous Symbols -🔕,0x1f515,3,0.663273811,2,0,1,BELL WITH CANCELLATION STROKE,Miscellaneous Symbols and Pictographs -⬛,0x2b1b,3,0.93331136,2,0,1,BLACK LARGE SQUARE,Miscellaneous Symbols and Arrows -❝,0x275d,3,0.012385762,0,3,0,HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT,Dingbats -❞,0x275e,3,0.348845599,0,3,0,HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT,Dingbats -🚞,0x1f69e,3,0.401392441,0,1,2,MOUNTAIN RAILWAY,Transport and Map Symbols -🍶,0x1f376,3,0.670454148,0,1,2,SAKE BOTTLE AND CUP,Miscellaneous Symbols and Pictographs -🌐,0x1f310,3,0.661697723,0,1,2,GLOBE WITH MERIDIANS,Miscellaneous Symbols and Pictographs -♀,0x2640,3,0.496259709,0,2,1,FEMALE SIGN,Miscellaneous Symbols -🚅,0x1f685,3,0.60688385,0,1,2,HIGH-SPEED TRAIN WITH BULLET NOSE,Transport and Map Symbols -🚒,0x1f692,3,0.372181638,1,2,0,FIRE ENGINE,Transport and Map Symbols -➣,0x27a3,3,0.607657549,0,3,0,THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD,Dingbats -♋,0x264b,3,0.66780619,0,2,1,CANCER,Miscellaneous Symbols -♍,0x264d,3,0.921455436,0,1,2,VIRGO,Miscellaneous Symbols -🕝,0x1f55d,3,0.673202614,1,2,0,CLOCK FACE TWO-THIRTY,Miscellaneous Symbols and Pictographs -ⓐ,0x24d0,3,0.866666667,0,0,3,CIRCLED LATIN SMALL LETTER A,Enclosed Alphanumerics -✗,0x2717,3,1,1,1,1,BALLOT X,Dingbats -📙,0x1f4d9,3,0.985204154,1,0,2,ORANGE BOOK,Miscellaneous Symbols and Pictographs -Ⓢ,0x24c8,3,0.837301587,0,2,1,CIRCLED LATIN CAPITAL LETTER S,Enclosed Alphanumerics -📋,0x1f4cb,3,0.902676399,0,1,2,CLIPBOARD,Miscellaneous Symbols and Pictographs -⇢,0x21e2,3,0.795568159,1,1,1,RIGHTWARDS DASHED ARROW,Arrows -🎱,0x1f3b1,3,0.733061963,1,0,2,BILLIARDS,Miscellaneous Symbols and Pictographs -🐞,0x1f41e,3,0.867149758,0,2,1,LADY BEETLE,Miscellaneous Symbols and Pictographs -🔺,0x1f53a,3,0.331084568,0,2,1,UP-POINTING RED TRIANGLE,Miscellaneous Symbols and Pictographs -ⓡ,0x24e1,3,0.476666667,0,0,3,CIRCLED LATIN SMALL LETTER R,Enclosed Alphanumerics -🎍,0x1f38d,3,0.460928261,0,3,0,PINE DECORATION,Miscellaneous Symbols and Pictographs -♤,0x2664,3,0.864386792,0,1,2,WHITE SPADE SUIT,Miscellaneous Symbols -🎲,0x1f3b2,3,0.294190811,0,3,0,GAME DIE,Miscellaneous Symbols and Pictographs -🎯,0x1f3af,3,0.928725808,0,1,2,DIRECT HIT,Miscellaneous Symbols and Pictographs -〠,0x3020,3,0.589554531,0,3,0,POSTAL MARK FACE,CJK Symbols and Punctuation -🔉,0x1f509,3,0.527173913,0,1,2,SPEAKER WITH ONE SOUND WAVE,Miscellaneous Symbols and Pictographs -↩,0x21a9,3,0.790990991,0,0,3,LEFTWARDS ARROW WITH HOOK,Arrows -🚾,0x1f6be,3,0.97979798,0,2,1,WATER CLOSET,Transport and Map Symbols -🎣,0x1f3a3,3,0.661217721,2,1,0,FISHING POLE AND FISH,Miscellaneous Symbols and Pictographs -🔣,0x1f523,3,0.73668039,0,2,1,INPUT SYMBOL FOR SYMBOLS,Miscellaneous Symbols and Pictographs -❎,0x274e,3,0.376693767,3,0,0,NEGATIVE SQUARED CROSS MARK,Dingbats -➥,0x27a5,3,0.607479234,0,2,1,HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW,Dingbats -🅱,0x1f171,3,0.753702885,0,3,0,NEGATIVE SQUARED LATIN CAPITAL LETTER B,Enclosed Alphanumeric Supplement -🎌,0x1f38c,3,0.720638968,0,0,3,CROSSED FLAGS,Miscellaneous Symbols and Pictographs -◣,0x25e3,3,0.1679015,0,2,1,BLACK LOWER LEFT TRIANGLE,Geometric Shapes -⏬,0x23ec,3,0.798387097,0,0,3,BLACK DOWN-POINTING DOUBLE TRIANGLE,Miscellaneous Technical -♭,0x266d,3,0.996296296,0,2,1,MUSIC FLAT SIGN,Miscellaneous Symbols -💠,0x1f4a0,3,0.634782609,0,3,0,DIAMOND SHAPE WITH A DOT INSIDE,Miscellaneous Symbols and Pictographs -ⓞ,0x24de,2,0.334090909,0,0,2,CIRCLED LATIN SMALL LETTER O,Enclosed Alphanumerics -🔳,0x1f533,2,0.35921659,0,1,1,WHITE SQUARE BUTTON,Miscellaneous Symbols and Pictographs -🏭,0x1f3ed,2,0.620360999,0,1,1,FACTORY,Miscellaneous Symbols and Pictographs -🔰,0x1f530,2,0.612218045,0,2,0,JAPANESE SYMBOL FOR BEGINNER,Miscellaneous Symbols and Pictographs -🎳,0x1f3b3,2,0.031697819,1,1,0,BOWLING,Miscellaneous Symbols and Pictographs -☚,0x261a,2,0.536679293,0,0,2,BLACK LEFT POINTING INDEX,Miscellaneous Symbols -➽,0x27bd,2,0.872727273,0,1,1,HEAVY WEDGE-TAILED RIGHTWARDS ARROW,Dingbats -➫,0x27ab,2,0.22556391,0,1,1,BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW,Dingbats -➖,0x2796,2,0.023088023,2,0,0,HEAVY MINUS SIGN,Dingbats -🏮,0x1f3ee,2,0.949404762,0,2,0,IZAKAYA LANTERN,Miscellaneous Symbols and Pictographs -📛,0x1f4db,2,0.964880952,0,2,0,NAME BADGE,Miscellaneous Symbols and Pictographs -꒰,0xa4b0,2,0.744823477,0,1,1,YI RADICAL SHY,Yi Radicals -꒱,0xa4b1,2,0.800983167,0,1,1,YI RADICAL VEP,Yi Radicals -◝,0x25dd,2,0.847674607,1,1,0,UPPER RIGHT QUADRANT CIRCULAR ARC,Geometric Shapes -📑,0x1f4d1,2,0.557971014,0,0,2,BOOKMARK TABS,Miscellaneous Symbols and Pictographs -🎦,0x1f3a6,2,0.796610169,0,2,0,CINEMA,Miscellaneous Symbols and Pictographs -ⓧ,0x24e7,2,0.96,0,0,2,CIRCLED LATIN SMALL LETTER X,Enclosed Alphanumerics -🇨,0x1f1e8,2,0.935606061,0,2,0,REGIONAL INDICATOR SYMBOL LETTER C,Enclosed Alphanumeric Supplement -🇳,0x1f1f3,2,0.623484848,0,2,0,REGIONAL INDICATOR SYMBOL LETTER N,Enclosed Alphanumeric Supplement -🔟,0x1f51f,2,0.801587302,0,0,2,KEYCAP TEN,Miscellaneous Symbols and Pictographs -〓,0x3013,2,0.533898305,0,0,2,GETA MARK,CJK Symbols and Punctuation -ⓜ,0x24dc,2,0.743085399,0,1,1,CIRCLED LATIN SMALL LETTER M,Enclosed Alphanumerics -➠,0x27a0,2,0.642857143,0,0,2,HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW,Dingbats -🚆,0x1f686,2,0.472714286,0,1,1,TRAIN,Transport and Map Symbols -🚠,0x1f6a0,2,0.807469512,0,2,0,MOUNTAIN CABLEWAY,Transport and Map Symbols -℅,0x2105,2,0.606150794,2,0,0,CARE OF,Letterlike Symbols -☃,0x2603,2,0.566037736,0,1,1,SNOWMAN,Miscellaneous Symbols -🚽,0x1f6bd,2,0.69047619,0,0,2,TOILET,Transport and Map Symbols -📐,0x1f4d0,2,0.02970297,0,2,0,TRIANGULAR RULER,Miscellaneous Symbols and Pictographs -ⓝ,0x24dd,2,0.393333333,0,0,2,CIRCLED LATIN SMALL LETTER N,Enclosed Alphanumerics -✮,0x272e,2,0.211711712,0,2,0,HEAVY OUTLINED BLACK STAR,Dingbats -⇦,0x21e6,2,0.489955357,0,0,2,LEFTWARDS WHITE ARROW,Arrows -👲,0x1f472,2,0.382655827,0,1,1,MAN WITH GUA PI MAO,Miscellaneous Symbols and Pictographs -🚡,0x1f6a1,2,0.622505543,1,1,0,AERIAL TRAMWAY,Transport and Map Symbols -🎑,0x1f391,2,0.309294872,0,2,0,MOON VIEWING CEREMONY,Miscellaneous Symbols and Pictographs -🔬,0x1f52c,2,0.727696078,0,0,2,MICROSCOPE,Miscellaneous Symbols and Pictographs -➗,0x2797,2,0.018722944,1,1,0,HEAVY DIVISION SIGN,Dingbats -📈,0x1f4c8,2,0.568724559,0,1,1,CHART WITH UPWARDS TREND,Miscellaneous Symbols and Pictographs -⌘,0x2318,2,0.613333333,0,2,0,PLACE OF INTEREST SIGN,Miscellaneous Technical -⏪,0x23ea,2,0.489035088,0,1,1,BLACK LEFT-POINTING DOUBLE TRIANGLE,Miscellaneous Technical -╹,0x2579,2,0.952380952,0,2,0,BOX DRAWINGS HEAVY UP,Box Drawing -◎,0x25ce,2,0.925,0,0,2,BULLSEYE,Geometric Shapes -🔼,0x1f53c,2,0.358974359,0,2,0,UP-POINTING SMALL RED TRIANGLE,Miscellaneous Symbols and Pictographs -꒦,0xa4a6,2,0.953125,2,0,0,YI RADICAL GGUO,Yi Radicals -📎,0x1f4ce,2,0.044776119,0,0,2,PAPERCLIP,Miscellaneous Symbols and Pictographs -⑅,0x2445,2,0.652173913,0,0,2,OCR BOW TIE,Optical Character Recognition -⍝,0x235d,2,0.776859504,0,2,0,APL FUNCTIONAL SYMBOL UP SHOE JOT,Miscellaneous Technical -📁,0x1f4c1,2,0.785714286,0,2,0,FILE FOLDER,Miscellaneous Symbols and Pictographs -✭,0x272d,2,0.589285714,0,0,2,OUTLINED BLACK STAR,Dingbats -➲,0x27b2,2,0.009615385,0,2,0,CIRCLED HEAVY WHITE RIGHTWARDS ARROW,Dingbats -♓,0x2653,2,0.093023256,0,1,1,PISCES,Miscellaneous Symbols -┏,0x250f,2,0.58778626,0,0,2,BOX DRAWINGS HEAVY DOWN AND RIGHT,Box Drawing -☇,0x2607,2,0.99382716,0,0,2,LIGHTNING,Miscellaneous Symbols -♺,0x267a,2,0.175,0,2,0,RECYCLING SYMBOL FOR GENERIC MATERIALS,Miscellaneous Symbols -♞,0x265e,2,0.581967213,0,2,0,BLACK CHESS KNIGHT,Miscellaneous Symbols -࿎,0xfce,2,0.232142857,2,0,0,TIBETAN SIGN RDEL NAG RDEL DKAR,Tibetan -📠,0x1f4e0,2,1,0,2,0,FAX MACHINE,Miscellaneous Symbols and Pictographs -👘,0x1f458,2,0.643678161,0,0,2,KIMONO,Miscellaneous Symbols and Pictographs -↙,0x2199,2,0.206766917,0,0,2,SOUTH WEST ARROW,Arrows -Ⓕ,0x24bb,2,0.652777778,0,1,1,CIRCLED LATIN CAPITAL LETTER F,Enclosed Alphanumerics -Ⓦ,0x24cc,2,0.722222222,0,1,1,CIRCLED LATIN CAPITAL LETTER W,Enclosed Alphanumerics -Ⓟ,0x24c5,2,0.791666667,0,1,1,CIRCLED LATIN CAPITAL LETTER P,Enclosed Alphanumerics -🕑,0x1f551,2,0.988407728,0,1,1,CLOCK FACE TWO OCLOCK,Miscellaneous Symbols and Pictographs -💽,0x1f4bd,1,0.566037736,0,1,0,MINIDISC,Miscellaneous Symbols and Pictographs -🕛,0x1f55b,1,1,0,0,1,CLOCK FACE TWELVE OCLOCK,Miscellaneous Symbols and Pictographs -🎫,0x1f3ab,1,0.452631579,0,1,0,TICKET,Miscellaneous Symbols and Pictographs -♈,0x2648,1,0.524590164,1,0,0,ARIES,Miscellaneous Symbols -📟,0x1f4df,1,0.991666667,0,1,0,PAGER,Miscellaneous Symbols and Pictographs -℃,0x2103,1,0.2375,0,1,0,DEGREE CELSIUS,Letterlike Symbols -↬,0x21ac,1,0.806818182,0,0,1,RIGHTWARDS ARROW WITH LOOP,Arrows -🕒,0x1f552,1,0.039215686,0,1,0,CLOCK FACE THREE OCLOCK,Miscellaneous Symbols and Pictographs -🇰,0x1f1f0,1,0.939393939,0,1,0,REGIONAL INDICATOR SYMBOL LETTER K,Enclosed Alphanumeric Supplement -↱,0x21b1,1,0.537190083,0,1,0,UPWARDS ARROW WITH TIP RIGHTWARDS,Arrows -✍,0x270d,1,1,0,0,1,WRITING HAND,Dingbats -⇐,0x21d0,1,0.741007194,0,1,0,LEFTWARDS DOUBLE ARROW,Arrows -🏦,0x1f3e6,1,1,0,0,1,BANK,Miscellaneous Symbols and Pictographs -🔻,0x1f53b,1,0.575757576,0,0,1,DOWN-POINTING RED TRIANGLE,Miscellaneous Symbols and Pictographs -ⓟ,0x24df,1,0.05,0,0,1,CIRCLED LATIN SMALL LETTER P,Enclosed Alphanumerics -ⓕ,0x24d5,1,0.1,0,0,1,CIRCLED LATIN SMALL LETTER F,Enclosed Alphanumerics -ⓘ,0x24d8,1,0.166666667,0,0,1,CIRCLED LATIN SMALL LETTER I,Enclosed Alphanumerics -♿,0x267f,1,1,0,0,1,WHEELCHAIR SYMBOL,Miscellaneous Symbols -⇗,0x21d7,1,0.761904762,0,0,1,NORTH EAST DOUBLE ARROW,Arrows -⇘,0x21d8,1,0.857142857,0,0,1,SOUTH EAST DOUBLE ARROW,Arrows -ⓨ,0x24e8,1,0.613333333,0,0,1,CIRCLED LATIN SMALL LETTER Y,Enclosed Alphanumerics -ⓙ,0x24d9,1,0.68,0,0,1,CIRCLED LATIN SMALL LETTER J,Enclosed Alphanumerics -▫,0x25ab,1,0.126760563,0,0,1,WHITE SMALL SQUARE,Geometric Shapes -🔇,0x1f507,1,1,0,0,1,SPEAKER WITH CANCELLATION STROKE,Miscellaneous Symbols and Pictographs -⌃,0x2303,1,0.611940299,1,0,0,UP ARROWHEAD,Miscellaneous Technical -🔖,0x1f516,1,0.988888889,0,0,1,BOOKMARK,Miscellaneous Symbols and Pictographs -📜,0x1f4dc,1,1,0,0,1,SCROLL,Miscellaneous Symbols and Pictographs -♏,0x264f,1,0.772058824,0,1,0,SCORPIUS,Miscellaneous Symbols -🚝,0x1f69d,1,0.966666667,0,0,1,MONORAIL,Transport and Map Symbols -☢,0x2622,1,0.725,0,1,0,RADIOACTIVE SIGN,Miscellaneous Symbols -🎏,0x1f38f,1,0.390243902,0,1,0,CARP STREAMER,Miscellaneous Symbols and Pictographs -┘,0x2518,1,0.909090909,1,0,0,BOX DRAWINGS LIGHT UP AND LEFT,Box Drawing -✝,0x271d,1,0.411764706,1,0,0,LATIN CROSS,Dingbats -❖,0x2756,1,0.581967213,0,1,0,BLACK DIAMOND MINUS WHITE X,Dingbats -⍣,0x2363,1,0.953125,1,0,0,APL FUNCTIONAL SYMBOL STAR DIAERESIS,Miscellaneous Technical -📮,0x1f4ee,1,0.798319328,1,0,0,POSTBOX,Miscellaneous Symbols and Pictographs -🕕,0x1f555,1,0.646153846,1,0,0,CLOCK FACE SIX OCLOCK,Miscellaneous Symbols and Pictographs -🇭,0x1f1ed,1,0.236363636,0,1,0,REGIONAL INDICATOR SYMBOL LETTER H,Enclosed Alphanumeric Supplement -◜,0x25dc,1,0.760330579,0,1,0,UPPER LEFT QUADRANT CIRCULAR ARC,Geometric Shapes -🔯,0x1f52f,1,1,0,0,1,SIX POINTED STAR WITH MIDDLE DOT,Miscellaneous Symbols and Pictographs -➸,0x27b8,1,0.364963504,0,0,1,HEAVY BLACK-FEATHERED RIGHTWARDS ARROW,Dingbats -꒵,0xa4b5,1,0.927007299,0,0,1,YI RADICAL JJY,Yi Radicals -🕥,0x1f565,1,0.811965812,1,0,0,CLOCK FACE TEN-THIRTY,Miscellaneous Symbols and Pictographs -♙,0x2659,1,0.342857143,0,1,0,WHITE CHESS PAWN,Miscellaneous Symbols -▿,0x25bf,1,0.432835821,0,1,0,WHITE DOWN-POINTING SMALL TRIANGLE,Geometric Shapes -⚃,0x2683,1,0.918918919,0,1,0,DIE FACE-4,Miscellaneous Symbols -✽,0x273d,1,0.99270073,0,0,1,HEAVY TEARDROP-SPOKED ASTERISK,Dingbats -📼,0x1f4fc,1,1,0,0,1,VIDEOCASSETTE,Miscellaneous Symbols and Pictographs -🕐,0x1f550,1,1,1,0,0,CLOCK FACE ONE OCLOCK,Miscellaneous Symbols and Pictographs -🀄,0x1f004,1,1,0,0,1,MAHJONG TILE RED DRAGON,Mahjong Tiles -✾,0x273e,1,0.023255814,0,1,0,SIX PETALLED BLACK AND WHITE FLORETTE,Dingbats -✬,0x272c,1,0.955223881,0,0,1,BLACK CENTRE WHITE STAR,Dingbats -🆑,0x1f191,1,0.983606557,0,1,0,SQUARED CL,Enclosed Alphanumeric Supplement -✫,0x272b,1,0.923728814,0,0,1,OPEN CENTRE BLACK STAR,Dingbats -🕔,0x1f554,1,0.742424242,1,0,0,CLOCK FACE FIVE OCLOCK,Miscellaneous Symbols and Pictographs -❣,0x2763,1,0.471428571,0,0,1,HEAVY HEART EXCLAMATION MARK ORNAMENT,Dingbats -➱,0x27b1,1,0.704347826,0,1,0,NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW,Dingbats -🆕,0x1f195,1,0.669117647,0,1,0,SQUARED NEW,Enclosed Alphanumeric Supplement -➢,0x27a2,1,0.242647059,0,1,0,THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD,Dingbats -↕,0x2195,1,0.735632184,0,1,0,UP DOWN ARROW,Arrows -📫,0x1f4eb,1,0.384615385,0,0,1,CLOSED MAILBOX WITH RAISED FLAG,Miscellaneous Symbols and Pictographs -🉐,0x1f250,1,0.03125,0,0,1,CIRCLED IDEOGRAPH ADVANTAGE,Enclosed Ideographic Supplement -♊,0x264a,1,0.327586207,0,1,0,GEMINI,Miscellaneous Symbols -🈂,0x1f202,1,0.466666667,1,0,0,SQUARED KATAKANA SA,Enclosed Ideographic Supplement -🎰,0x1f3b0,1,0.421686747,1,0,0,SLOT MACHINE,Miscellaneous Symbols and Pictographs -҂,0x482,1,0.519230769,1,0,0,CYRILLIC THOUSANDS SIGN,Cyrillic -╤,0x2564,1,0.634615385,1,0,0,BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE,Box Drawing -➛,0x279b,1,0.011627907,0,1,0,DRAFTING POINT RIGHTWARDS ARROW,Dingbats -♝,0x265d,1,0.28,0,1,0,BLACK CHESS BISHOP,Miscellaneous Symbols -❋,0x274b,1,0.888888889,0,1,0,HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK,Dingbats -✆,0x2706,1,0.557251908,0,1,0,TELEPHONE LOCATION SIGN,Dingbats -📔,0x1f4d4,1,0.814814815,0,0,1,NOTEBOOK WITH DECORATIVE COVER,Miscellaneous Symbols and Pictographs +Emoji,Unicode codepoint,Occurrences,Position,Negative,Neutral,Positive,Unicode name,Unicode block +😂,0x1f602,14622,0.805100583,3614,4163,6845,FACE WITH TEARS OF JOY,Emoticons +❤,0x2764,8050,0.746943086,355,1334,6361,HEAVY BLACK HEART,Dingbats +♥,0x2665,7144,0.753806008,252,1942,4950,BLACK HEART SUIT,Miscellaneous Symbols +😍,0x1f60d,6359,0.765292366,329,1390,4640,SMILING FACE WITH HEART-SHAPED EYES,Emoticons +😭,0x1f62d,5526,0.803351976,2412,1218,1896,LOUDLY CRYING FACE,Emoticons +😘,0x1f618,3648,0.854480172,193,702,2753,FACE THROWING A KISS,Emoticons +😊,0x1f60a,3186,0.813302436,189,754,2243,SMILING FACE WITH SMILING EYES,Emoticons +👌,0x1f44c,2925,0.805222883,274,728,1923,OK HAND SIGN,Miscellaneous Symbols and Pictographs +💕,0x1f495,2400,0.765725889,99,683,1618,TWO HEARTS,Miscellaneous Symbols and Pictographs +👏,0x1f44f,2336,0.787130164,243,634,1459,CLAPPING HANDS SIGN,Miscellaneous Symbols and Pictographs +😁,0x1f601,2189,0.796151187,278,648,1263,GRINNING FACE WITH SMILING EYES,Emoticons +☺,0x263a,2062,0.798633582,128,449,1485,WHITE SMILING FACE,Miscellaneous Symbols +♡,0x2661,1975,0.763695423,102,448,1425,WHITE HEART SUIT,Miscellaneous Symbols +👍,0x1f44d,1854,0.812125626,213,460,1181,THUMBS UP SIGN,Miscellaneous Symbols and Pictographs +😩,0x1f629,1808,0.826213985,1069,336,403,WEARY FACE,Emoticons +🙏,0x1f64f,1539,0.793847592,124,648,767,PERSON WITH FOLDED HANDS,Emoticons +✌,0x270c,1534,0.790480332,173,476,885,VICTORY HAND,Dingbats +😏,0x1f60f,1522,0.764977294,170,676,676,SMIRKING FACE,Emoticons +😉,0x1f609,1521,0.844832651,151,513,857,WINKING FACE,Emoticons +🙌,0x1f64c,1506,0.790600034,152,358,996,PERSON RAISING BOTH HANDS IN CELEBRATION,Emoticons +🙈,0x1f648,1456,0.738880937,238,350,868,SEE-NO-EVIL MONKEY,Emoticons +💪,0x1f4aa,1409,0.806704098,101,424,884,FLEXED BICEPS,Miscellaneous Symbols and Pictographs +😄,0x1f604,1398,0.794972621,191,426,781,SMILING FACE WITH OPEN MOUTH AND SMILING EYES,Emoticons +😒,0x1f612,1385,0.857620553,819,266,300,UNAMUSED FACE,Emoticons +💃,0x1f483,1344,0.852764705,59,237,1048,DANCER,Miscellaneous Symbols and Pictographs +💖,0x1f496,1263,0.762239109,54,254,955,SPARKLING HEART,Miscellaneous Symbols and Pictographs +😃,0x1f603,1206,0.734782211,86,361,759,SMILING FACE WITH OPEN MOUTH,Emoticons +😔,0x1f614,1205,0.86614594,559,263,383,PENSIVE FACE,Emoticons +😱,0x1f631,1130,0.773313178,298,319,513,FACE SCREAMING IN FEAR,Emoticons +🎉,0x1f389,1125,0.743635879,43,207,875,PARTY POPPER,Miscellaneous Symbols and Pictographs +😜,0x1f61c,1035,0.822246602,115,333,587,FACE WITH STUCK-OUT TONGUE AND WINKING EYE,Emoticons +☯,0x262f,992,0.383524015,5,981,6,YIN YANG,Miscellaneous Symbols +🌸,0x1f338,946,0.570021571,37,255,654,CHERRY BLOSSOM,Miscellaneous Symbols and Pictographs +💜,0x1f49c,939,0.730869962,41,241,657,PURPLE HEART,Miscellaneous Symbols and Pictographs +💙,0x1f499,912,0.703047577,29,186,697,BLUE HEART,Miscellaneous Symbols and Pictographs +✨,0x2728,848,0.560430162,43,463,342,SPARKLES,Dingbats +😳,0x1f633,846,0.797185814,277,277,292,FLUSHED FACE,Emoticons +💗,0x1f497,836,0.799725947,42,201,593,GROWING HEART,Miscellaneous Symbols and Pictographs +★,0x2605,828,0.353316599,25,543,260,BLACK STAR,Miscellaneous Symbols +█,0x2588,798,0.634172164,71,682,45,FULL BLOCK,Block Elements +☀,0x2600,786,0.54553079,21,377,388,BLACK SUN WITH RAYS,Miscellaneous Symbols +😡,0x1f621,756,0.861522028,403,81,272,POUTING FACE,Emoticons +😎,0x1f60e,754,0.76564387,79,224,451,SMILING FACE WITH SUNGLASSES,Emoticons +😢,0x1f622,749,0.813896833,288,168,293,CRYING FACE,Emoticons +💋,0x1f48b,734,0.800580592,28,169,537,KISS MARK,Miscellaneous Symbols and Pictographs +😋,0x1f60b,734,0.76498518,33,203,498,FACE SAVOURING DELICIOUS FOOD,Emoticons +🙊,0x1f64a,725,0.740523086,97,197,431,SPEAK-NO-EVIL MONKEY,Emoticons +😴,0x1f634,718,0.849922938,303,170,245,SLEEPING FACE,Emoticons +🎶,0x1f3b6,701,0.797255889,67,189,445,MULTIPLE MUSICAL NOTES,Miscellaneous Symbols and Pictographs +💞,0x1f49e,687,0.828705997,27,123,537,REVOLVING HEARTS,Miscellaneous Symbols and Pictographs +😌,0x1f60c,665,0.847121229,93,157,415,RELIEVED FACE,Emoticons +🔥,0x1f525,651,0.61555041,80,400,171,FIRE,Miscellaneous Symbols and Pictographs +💯,0x1f4af,637,0.871819418,179,202,256,HUNDRED POINTS SYMBOL,Miscellaneous Symbols and Pictographs +🔫,0x1f52b,604,0.893761284,298,126,180,PISTOL,Miscellaneous Symbols and Pictographs +💛,0x1f49b,602,0.751631631,25,123,454,YELLOW HEART,Miscellaneous Symbols and Pictographs +💁,0x1f481,549,0.839628793,105,159,285,INFORMATION DESK PERSON,Miscellaneous Symbols and Pictographs +💚,0x1f49a,537,0.737498972,41,101,395,GREEN HEART,Miscellaneous Symbols and Pictographs +♫,0x266b,533,0.396607039,33,313,187,BEAMED EIGHTH NOTES,Miscellaneous Symbols +😞,0x1f61e,532,0.825187832,255,85,192,DISAPPOINTED FACE,Emoticons +😆,0x1f606,527,0.809376422,81,148,298,SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES,Emoticons +😝,0x1f61d,496,0.808808972,65,155,276,FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES,Emoticons +😪,0x1f62a,482,0.858219873,208,105,169,SLEEPY FACE,Emoticons +�,0xfffd,472,0.11293316,78,275,119,REPLACEMENT CHARACTER,Specials +😫,0x1f62b,467,0.839517641,227,81,159,TIRED FACE,Emoticons +😅,0x1f605,462,0.827654572,135,109,218,SMILING FACE WITH OPEN MOUTH AND COLD SWEAT,Emoticons +👊,0x1f44a,458,0.824515864,121,111,226,FISTED HAND SIGN,Miscellaneous Symbols and Pictographs +💀,0x1f480,456,0.739462262,214,123,119,SKULL,Miscellaneous Symbols and Pictographs +😀,0x1f600,439,0.786284933,37,114,288,GRINNING FACE,Emoticons +😚,0x1f61a,424,0.853414944,20,81,323,KISSING FACE WITH CLOSED EYES,Emoticons +😻,0x1f63b,417,0.729665769,28,101,288,SMILING CAT FACE WITH HEART-SHAPED EYES,Emoticons +©,0xa9,416,0.740148376,54,259,103,COPYRIGHT SIGN,Latin-1 Supplement +👀,0x1f440,410,0.759422009,93,198,119,EYES,Miscellaneous Symbols and Pictographs +💘,0x1f498,395,0.785036942,18,87,290,HEART WITH ARROW,Miscellaneous Symbols and Pictographs +🐓,0x1f413,384,0.490808466,41,291,52,ROOSTER,Miscellaneous Symbols and Pictographs +☕,0x2615,382,0.685215074,53,182,147,HOT BEVERAGE,Miscellaneous Symbols +👋,0x1f44b,382,0.797944108,60,103,219,WAVING HAND SIGN,Miscellaneous Symbols and Pictographs +✋,0x270b,378,0.838291817,124,82,172,RAISED HAND,Dingbats +🎊,0x1f38a,363,0.72362175,20,59,284,CONFETTI BALL,Miscellaneous Symbols and Pictographs +🍕,0x1f355,352,0.544580757,19,166,167,SLICE OF PIZZA,Miscellaneous Symbols and Pictographs +❄,0x2744,349,0.760181984,34,103,212,SNOWFLAKE,Dingbats +😥,0x1f625,341,0.881976694,108,83,150,DISAPPOINTED BUT RELIEVED FACE,Emoticons +😕,0x1f615,340,0.856711865,205,66,69,CONFUSED FACE,Emoticons +💥,0x1f4a5,329,0.587206232,23,234,72,COLLISION SYMBOL,Miscellaneous Symbols and Pictographs +💔,0x1f494,328,0.835831574,136,96,96,BROKEN HEART,Miscellaneous Symbols and Pictographs +😤,0x1f624,327,0.884007985,157,82,88,FACE WITH LOOK OF TRIUMPH,Emoticons +😈,0x1f608,325,0.762497655,66,106,153,SMILING FACE WITH HORNS,Emoticons +►,0x25ba,325,0.516489206,40,192,93,BLACK RIGHT-POINTING POINTER,Geometric Shapes +✈,0x2708,322,0.521940266,13,161,148,AIRPLANE,Dingbats +🔝,0x1f51d,303,0.798433666,26,106,171,TOP WITH UPWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs +😰,0x1f630,302,0.919654285,132,44,126,FACE WITH OPEN MOUTH AND COLD SWEAT,Emoticons +⚽,0x26bd,299,0.193496177,15,83,201,SOCCER BALL,Miscellaneous Symbols +😑,0x1f611,299,0.844272967,154,85,60,EXPRESSIONLESS FACE,Emoticons +👑,0x1f451,298,0.698804832,12,65,221,CROWN,Miscellaneous Symbols and Pictographs +😹,0x1f639,295,0.8074145,88,77,130,CAT FACE WITH TEARS OF JOY,Emoticons +👉,0x1f449,292,0.559175629,20,137,135,WHITE RIGHT POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs +🍃,0x1f343,291,0.572324349,29,122,140,LEAF FLUTTERING IN WIND,Miscellaneous Symbols and Pictographs +🎁,0x1f381,288,0.709181399,11,45,232,WRAPPED PRESENT,Miscellaneous Symbols and Pictographs +😠,0x1f620,288,0.849218089,163,49,76,ANGRY FACE,Emoticons +🐧,0x1f427,284,0.540408727,11,131,142,PENGUIN,Miscellaneous Symbols and Pictographs +☆,0x2606,282,0.563398192,8,144,130,WHITE STAR,Miscellaneous Symbols +🍀,0x1f340,278,0.768496291,6,186,86,FOUR LEAF CLOVER,Miscellaneous Symbols and Pictographs +🎈,0x1f388,277,0.718504213,4,68,205,BALLOON,Miscellaneous Symbols and Pictographs +🎅,0x1f385,274,0.800786662,7,172,95,FATHER CHRISTMAS,Miscellaneous Symbols and Pictographs +😓,0x1f613,273,0.844887359,118,59,96,FACE WITH COLD SWEAT,Emoticons +😣,0x1f623,271,0.903307721,147,35,89,PERSEVERING FACE,Emoticons +😐,0x1f610,270,0.882732825,150,76,44,NEUTRAL FACE,Emoticons +✊,0x270a,270,0.858608998,37,79,154,RAISED FIST,Dingbats +😨,0x1f628,269,0.813687927,117,73,79,FEARFUL FACE,Emoticons +😖,0x1f616,268,0.868926665,130,50,88,CONFOUNDED FACE,Emoticons +💤,0x1f4a4,267,0.800461854,38,91,138,SLEEPING SYMBOL,Miscellaneous Symbols and Pictographs +💓,0x1f493,259,0.783045488,15,55,189,BEATING HEART,Miscellaneous Symbols and Pictographs +👎,0x1f44e,258,0.914491346,128,51,79,THUMBS DOWN SIGN,Miscellaneous Symbols and Pictographs +💦,0x1f4a6,252,0.779043752,35,62,155,SPLASHING SWEAT SYMBOL,Miscellaneous Symbols and Pictographs +✔,0x2714,249,0.565237075,31,119,99,HEAVY CHECK MARK,Dingbats +😷,0x1f637,246,0.840376534,117,54,75,FACE WITH MEDICAL MASK,Emoticons +⚡,0x26a1,246,0.778780762,10,182,54,HIGH VOLTAGE SIGN,Miscellaneous Symbols +🙋,0x1f64b,236,0.732500422,30,60,146,HAPPY PERSON RAISING ONE HAND,Emoticons +🎄,0x1f384,236,0.632526433,15,79,142,CHRISTMAS TREE,Miscellaneous Symbols and Pictographs +💩,0x1f4a9,229,0.839720048,94,68,67,PILE OF POO,Miscellaneous Symbols and Pictographs +🎵,0x1f3b5,223,0.71526961,23,64,136,MUSICAL NOTE,Miscellaneous Symbols and Pictographs +➡,0x27a1,222,0.478330444,2,185,35,BLACK RIGHTWARDS ARROW,Dingbats +😛,0x1f61b,220,0.734419263,18,50,152,FACE WITH STUCK-OUT TONGUE,Emoticons +😬,0x1f62c,214,0.793679841,57,58,99,GRIMACING FACE,Emoticons +👯,0x1f46f,211,0.742043843,24,69,118,WOMAN WITH BUNNY EARS,Miscellaneous Symbols and Pictographs +💎,0x1f48e,209,0.694054736,11,68,130,GEM STONE,Miscellaneous Symbols and Pictographs +🌿,0x1f33f,208,0.600120585,1,125,82,HERB,Miscellaneous Symbols and Pictographs +🎂,0x1f382,201,0.747999917,16,44,141,BIRTHDAY CAKE,Miscellaneous Symbols and Pictographs +🌟,0x1f31f,199,0.654510913,11,111,77,GLOWING STAR,Miscellaneous Symbols and Pictographs +🔮,0x1f52e,199,0.333161733,6,133,60,CRYSTAL BALL,Miscellaneous Symbols and Pictographs +❗,0x2757,198,0.620120854,31,116,51,HEAVY EXCLAMATION MARK SYMBOL,Dingbats +👫,0x1f46b,197,0.664270589,43,60,94,MAN AND WOMAN HOLDING HANDS,Miscellaneous Symbols and Pictographs +🏆,0x1f3c6,194,0.705937446,6,39,149,TROPHY,Miscellaneous Symbols and Pictographs +✖,0x2716,193,0.514517152,8,116,69,HEAVY MULTIPLICATION X,Dingbats +☝,0x261d,191,0.7597726,27,77,87,WHITE UP POINTING INDEX,Miscellaneous Symbols +😙,0x1f619,191,0.875675106,3,34,154,KISSING FACE WITH SMILING EYES,Emoticons +⛄,0x26c4,191,0.738724736,14,62,115,SNOWMAN WITHOUT SNOW,Miscellaneous Symbols +👅,0x1f445,190,0.738179133,23,55,112,TONGUE,Miscellaneous Symbols and Pictographs +♪,0x266a,190,0.696314423,15,57,118,EIGHTH NOTE,Miscellaneous Symbols +🍂,0x1f342,189,0.634540658,6,72,111,FALLEN LEAF,Miscellaneous Symbols and Pictographs +💏,0x1f48f,185,0.72895246,33,46,106,KISS,Miscellaneous Symbols and Pictographs +🔪,0x1f52a,183,0.764046479,38,94,51,HOCHO,Miscellaneous Symbols and Pictographs +🌴,0x1f334,178,0.675890052,13,57,108,PALM TREE,Miscellaneous Symbols and Pictographs +👈,0x1f448,174,0.701409121,14,71,89,WHITE LEFT POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs +🌹,0x1f339,172,0.664431116,3,61,108,ROSE,Miscellaneous Symbols and Pictographs +🙆,0x1f646,171,0.839916616,15,54,102,FACE WITH OK GESTURE,Emoticons +➜,0x279c,170,0.558506642,8,126,36,HEAVY ROUND-TIPPED RIGHTWARDS ARROW,Dingbats +👻,0x1f47b,168,0.740824428,28,73,67,GHOST,Miscellaneous Symbols and Pictographs +💰,0x1f4b0,168,0.827466509,26,73,69,MONEY BAG,Miscellaneous Symbols and Pictographs +🍻,0x1f37b,165,0.745306588,17,45,103,CLINKING BEER MUGS,Miscellaneous Symbols and Pictographs +🙅,0x1f645,165,0.838871886,76,47,42,FACE WITH NO GOOD GESTURE,Emoticons +🌞,0x1f31e,162,0.709366196,3,64,95,SUN WITH FACE,Miscellaneous Symbols and Pictographs +🍁,0x1f341,161,0.62398169,5,72,84,MAPLE LEAF,Miscellaneous Symbols and Pictographs +⭐,0x2b50,159,0.600764348,5,55,99,WHITE MEDIUM STAR,Miscellaneous Symbols and Arrows +▪,0x25aa,159,0.145166872,15,97,47,BLACK SMALL SQUARE,Geometric Shapes +🎀,0x1f380,156,0.651799025,6,44,106,RIBBON,Miscellaneous Symbols and Pictographs +━,0x2501,156,0.540249825,14,100,42,BOX DRAWINGS HEAVY HORIZONTAL,Box Drawing +☷,0x2637,154,0.012407833,2,140,12,TRIGRAM FOR EARTH,Miscellaneous Symbols +🐷,0x1f437,152,0.6026825,11,73,68,PIG FACE,Miscellaneous Symbols and Pictographs +🙉,0x1f649,150,0.757694988,26,47,77,HEAR-NO-EVIL MONKEY,Emoticons +🌺,0x1f33a,150,0.629472896,2,62,86,HIBISCUS,Miscellaneous Symbols and Pictographs +💅,0x1f485,149,0.755747604,27,36,86,NAIL POLISH,Miscellaneous Symbols and Pictographs +🐶,0x1f436,148,0.654155755,12,37,99,DOG FACE,Miscellaneous Symbols and Pictographs +🌚,0x1f31a,148,0.759894657,23,32,93,NEW MOON WITH FACE,Miscellaneous Symbols and Pictographs +👽,0x1f47d,146,0.612456875,13,73,60,EXTRATERRESTRIAL ALIEN,Miscellaneous Symbols and Pictographs +🎤,0x1f3a4,144,0.67089174,17,40,87,MICROPHONE,Miscellaneous Symbols and Pictographs +👭,0x1f46d,144,0.667223526,20,36,88,TWO WOMEN HOLDING HANDS,Miscellaneous Symbols and Pictographs +🎧,0x1f3a7,142,0.842970526,18,46,78,HEADPHONE,Miscellaneous Symbols and Pictographs +👆,0x1f446,138,0.78746414,16,60,62,WHITE UP POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs +🍸,0x1f378,138,0.662604118,12,38,88,COCKTAIL GLASS,Miscellaneous Symbols and Pictographs +🍷,0x1f377,137,0.603671624,7,68,62,WINE GLASS,Miscellaneous Symbols and Pictographs +®,0xae,137,0.353084876,9,80,48,REGISTERED SIGN,Latin-1 Supplement +🍉,0x1f349,136,0.647778999,10,33,93,WATERMELON,Miscellaneous Symbols and Pictographs +😇,0x1f607,135,0.781831331,9,36,90,SMILING FACE WITH HALO,Emoticons +☑,0x2611,135,0.690061863,2,117,16,BALLOT BOX WITH CHECK,Miscellaneous Symbols +🏃,0x1f3c3,135,0.735256148,12,55,68,RUNNER,Miscellaneous Symbols and Pictographs +😿,0x1f63f,134,0.811560707,78,29,27,CRYING CAT FACE,Emoticons +│,0x2502,134,0.483180302,0,87,47,BOX DRAWINGS LIGHT VERTICAL,Box Drawing +💣,0x1f4a3,131,0.846726927,40,50,41,BOMB,Miscellaneous Symbols and Pictographs +🍺,0x1f37a,131,0.68156608,8,49,74,BEER MUG,Miscellaneous Symbols and Pictographs +▶,0x25b6,131,0.498359177,7,89,35,BLACK RIGHT-POINTING TRIANGLE,Geometric Shapes +😲,0x1f632,129,0.853619885,50,38,41,ASTONISHED FACE,Emoticons +🎸,0x1f3b8,125,0.605443071,1,57,67,GUITAR,Miscellaneous Symbols and Pictographs +🍹,0x1f379,123,0.764164553,5,30,88,TROPICAL DRINK,Miscellaneous Symbols and Pictographs +💫,0x1f4ab,121,0.614437663,4,51,66,DIZZY SYMBOL,Miscellaneous Symbols and Pictographs +📚,0x1f4da,119,0.69163189,22,34,63,BOOKS,Miscellaneous Symbols and Pictographs +😶,0x1f636,117,0.868667638,50,34,33,FACE WITHOUT MOUTH,Emoticons +🌷,0x1f337,116,0.623397976,0,52,64,TULIP,Miscellaneous Symbols and Pictographs +💝,0x1f49d,115,0.774410045,8,23,84,HEART WITH RIBBON,Miscellaneous Symbols and Pictographs +💨,0x1f4a8,115,0.711396809,12,46,57,DASH SYMBOL,Miscellaneous Symbols and Pictographs +🏈,0x1f3c8,114,0.823010837,7,38,69,AMERICAN FOOTBALL,Miscellaneous Symbols and Pictographs +💍,0x1f48d,112,0.807520998,16,25,71,RING,Miscellaneous Symbols and Pictographs +☔,0x2614,111,0.687353164,21,36,54,UMBRELLA WITH RAIN DROPS,Miscellaneous Symbols +👸,0x1f478,111,0.654472403,6,30,75,PRINCESS,Miscellaneous Symbols and Pictographs +🇪,0x1f1ea,109,0.698877291,2,36,71,REGIONAL INDICATOR SYMBOL LETTER E,Enclosed Alphanumeric Supplement +░,0x2591,108,0.439438477,25,63,20,LIGHT SHADE,Block Elements +🍩,0x1f369,107,0.708816106,15,35,57,DOUGHNUT,Miscellaneous Symbols and Pictographs +👾,0x1f47e,105,0.55188131,1,64,40,ALIEN MONSTER,Miscellaneous Symbols and Pictographs +☁,0x2601,104,0.595923185,14,43,47,CLOUD,Miscellaneous Symbols +🌻,0x1f33b,104,0.607167343,1,41,62,SUNFLOWER,Miscellaneous Symbols and Pictographs +😵,0x1f635,103,0.808813841,33,28,42,DIZZY FACE,Emoticons +📒,0x1f4d2,102,0.473944671,0,98,4,LEDGER,Miscellaneous Symbols and Pictographs +↿,0x21bf,102,0.710504202,0,34,68,UPWARDS HARPOON WITH BARB LEFTWARDS,Arrows +🐯,0x1f42f,100,0.549561832,4,43,53,TIGER FACE,Miscellaneous Symbols and Pictographs +👼,0x1f47c,99,0.683210618,17,31,51,BABY ANGEL,Miscellaneous Symbols and Pictographs +🍔,0x1f354,98,0.636878313,16,38,44,HAMBURGER,Miscellaneous Symbols and Pictographs +😸,0x1f638,97,0.782035657,11,34,52,GRINNING CAT FACE WITH SMILING EYES,Emoticons +👶,0x1f476,96,0.745048578,13,27,56,BABY,Miscellaneous Symbols and Pictographs +↾,0x21be,96,0.707142857,0,32,64,UPWARDS HARPOON WITH BARB RIGHTWARDS,Arrows +💐,0x1f490,95,0.727586517,3,17,75,BOUQUET,Miscellaneous Symbols and Pictographs +🌊,0x1f30a,95,0.779832163,8,30,57,WATER WAVE,Miscellaneous Symbols and Pictographs +🍦,0x1f366,95,0.630275908,13,24,58,SOFT ICE CREAM,Miscellaneous Symbols and Pictographs +🍓,0x1f353,94,0.689469367,3,23,68,STRAWBERRY,Miscellaneous Symbols and Pictographs +👇,0x1f447,94,0.557020638,13,44,37,WHITE DOWN POINTING BACKHAND INDEX,Miscellaneous Symbols and Pictographs +💆,0x1f486,92,0.814023638,24,23,45,FACE MASSAGE,Miscellaneous Symbols and Pictographs +🍴,0x1f374,92,0.580197926,4,33,55,FORK AND KNIFE,Miscellaneous Symbols and Pictographs +😧,0x1f627,92,0.774990088,36,26,30,ANGUISHED FACE,Emoticons +🇸,0x1f1f8,91,0.654691493,8,27,56,REGIONAL INDICATOR SYMBOL LETTER S,Enclosed Alphanumeric Supplement +😮,0x1f62e,90,0.774237435,16,33,41,FACE WITH OPEN MOUTH,Emoticons +▓,0x2593,90,0.658247473,2,85,3,DARK SHADE,Block Elements +🚫,0x1f6ab,88,0.702937729,48,32,8,NO ENTRY SIGN,Transport and Map Symbols +😽,0x1f63d,88,0.754242708,11,14,63,KISSING CAT FACE WITH CLOSED EYES,Emoticons +🌈,0x1f308,88,0.671884074,5,31,52,RAINBOW,Miscellaneous Symbols and Pictographs +🙀,0x1f640,88,0.790729154,14,30,44,WEARY CAT FACE,Emoticons +⚠,0x26a0,88,0.489084942,16,62,10,WARNING SIGN,Miscellaneous Symbols +🎮,0x1f3ae,86,0.467430446,8,32,46,VIDEO GAME,Miscellaneous Symbols and Pictographs +╯,0x256f,84,0.506910946,19,47,18,BOX DRAWINGS LIGHT ARC UP AND LEFT,Box Drawing +🍆,0x1f346,84,0.7185031,6,37,41,AUBERGINE,Miscellaneous Symbols and Pictographs +🍰,0x1f370,84,0.78250627,13,19,52,SHORTCAKE,Miscellaneous Symbols and Pictographs +✓,0x2713,84,0.627535601,9,41,34,CHECK MARK,Dingbats +👐,0x1f450,83,0.875981032,33,19,31,OPEN HANDS SIGN,Miscellaneous Symbols and Pictographs +🙇,0x1f647,83,0.794293941,24,23,36,PERSON BOWING DEEPLY,Emoticons +🍟,0x1f35f,83,0.650433666,14,29,40,FRENCH FRIES,Miscellaneous Symbols and Pictographs +🍌,0x1f34c,82,0.540634157,10,25,47,BANANA,Miscellaneous Symbols and Pictographs +💑,0x1f491,82,0.682682631,5,16,61,COUPLE WITH HEART,Miscellaneous Symbols and Pictographs +👬,0x1f46c,82,0.622239773,29,29,24,TWO MEN HOLDING HANDS,Miscellaneous Symbols and Pictographs +🐣,0x1f423,81,0.775650511,12,17,52,HATCHING CHICK,Miscellaneous Symbols and Pictographs +🎃,0x1f383,81,0.723541282,6,19,56,JACK-O-LANTERN,Miscellaneous Symbols and Pictographs +▬,0x25ac,81,0.33474298,0,42,39,BLACK RECTANGLE,Geometric Shapes +,0xfffc,81,0.308958013,44,33,4,OBJECT REPLACEMENT CHARACTER,Specials +😟,0x1f61f,80,0.824309355,28,18,34,WORRIED FACE,Emoticons +🐾,0x1f43e,78,0.738983384,8,13,57,PAW PRINTS,Miscellaneous Symbols and Pictographs +🎓,0x1f393,77,0.647134355,7,18,52,GRADUATION CAP,Miscellaneous Symbols and Pictographs +🏊,0x1f3ca,77,0.65309632,2,27,48,SWIMMER,Miscellaneous Symbols and Pictographs +🍫,0x1f36b,76,0.792701023,22,20,34,CHOCOLATE BAR,Miscellaneous Symbols and Pictographs +📷,0x1f4f7,76,0.489732992,7,28,41,CAMERA,Miscellaneous Symbols and Pictographs +👄,0x1f444,75,0.591674278,5,28,42,MOUTH,Miscellaneous Symbols and Pictographs +🌼,0x1f33c,74,0.603679109,1,12,61,BLOSSOM,Miscellaneous Symbols and Pictographs +🚶,0x1f6b6,74,0.796900446,28,29,17,PEDESTRIAN,Transport and Map Symbols +🐱,0x1f431,73,0.544447706,10,14,49,CAT FACE,Miscellaneous Symbols and Pictographs +║,0x2551,73,0.568238107,0,62,11,BOX DRAWINGS DOUBLE VERTICAL,Box Drawing +🐸,0x1f438,72,0.845772164,24,30,18,FROG FACE,Miscellaneous Symbols and Pictographs +🇺,0x1f1fa,71,0.682892538,8,15,48,REGIONAL INDICATOR SYMBOL LETTER U,Enclosed Alphanumeric Supplement +👿,0x1f47f,70,0.910730779,47,15,8,IMP,Miscellaneous Symbols and Pictographs +🚬,0x1f6ac,70,0.805066327,8,16,46,SMOKING SYMBOL,Transport and Map Symbols +✿,0x273f,70,0.49871007,2,38,30,BLACK FLORETTE,Dingbats +📖,0x1f4d6,68,0.709941199,18,20,30,OPEN BOOK,Miscellaneous Symbols and Pictographs +🐒,0x1f412,68,0.639847887,1,29,38,MONKEY,Miscellaneous Symbols and Pictographs +🌍,0x1f30d,68,0.623864265,5,16,47,EARTH GLOBE EUROPE-AFRICA,Miscellaneous Symbols and Pictographs +┊,0x250a,68,0.681885417,0,0,68,BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL,Box Drawing +🐥,0x1f425,67,0.779887133,4,18,45,FRONT-FACING BABY CHICK,Miscellaneous Symbols and Pictographs +🌀,0x1f300,66,0.553405789,10,39,17,CYCLONE,Miscellaneous Symbols and Pictographs +🐼,0x1f43c,66,0.614422004,4,40,22,PANDA FACE,Miscellaneous Symbols and Pictographs +🎥,0x1f3a5,66,0.675875827,8,30,28,MOVIE CAMERA,Miscellaneous Symbols and Pictographs +💄,0x1f484,66,0.636585295,6,24,36,LIPSTICK,Miscellaneous Symbols and Pictographs +💸,0x1f4b8,66,0.790337996,16,23,27,MONEY WITH WINGS,Miscellaneous Symbols and Pictographs +⛔,0x26d4,65,0.405987251,5,22,38,NO ENTRY,Miscellaneous Symbols +●,0x25cf,65,0.561224463,8,37,20,BLACK CIRCLE,Geometric Shapes +🏀,0x1f3c0,64,0.807196812,13,21,30,BASKETBALL AND HOOP,Miscellaneous Symbols and Pictographs +💉,0x1f489,64,0.749555976,11,18,35,SYRINGE,Miscellaneous Symbols and Pictographs +💟,0x1f49f,63,0.787621444,3,12,48,HEART DECORATION,Miscellaneous Symbols and Pictographs +🚗,0x1f697,62,0.638133891,8,31,23,AUTOMOBILE,Transport and Map Symbols +😯,0x1f62f,62,0.859007902,16,22,24,HUSHED FACE,Emoticons +📝,0x1f4dd,62,0.794711655,8,31,23,MEMO,Miscellaneous Symbols and Pictographs +═,0x2550,62,0.441188106,0,61,1,BOX DRAWINGS DOUBLE HORIZONTAL,Box Drawing +♦,0x2666,61,0.562227083,6,20,35,BLACK DIAMOND SUIT,Miscellaneous Symbols +💭,0x1f4ad,60,0.687954711,10,27,23,THOUGHT BALLOON,Miscellaneous Symbols and Pictographs +🌙,0x1f319,58,0.669389528,3,16,39,CRESCENT MOON,Miscellaneous Symbols and Pictographs +🐟,0x1f41f,58,0.676573608,2,12,44,FISH,Miscellaneous Symbols and Pictographs +👣,0x1f463,58,0.638779151,6,25,27,FOOTPRINTS,Miscellaneous Symbols and Pictographs +☞,0x261e,58,0.725402078,0,51,7,WHITE RIGHT POINTING INDEX,Miscellaneous Symbols +✂,0x2702,58,0.810271779,34,18,6,BLACK SCISSORS,Dingbats +🗿,0x1f5ff,58,0.941936907,5,21,32,MOYAI,Miscellaneous Symbols and Pictographs +🍝,0x1f35d,57,0.56442207,16,18,23,SPAGHETTI,Miscellaneous Symbols and Pictographs +👪,0x1f46a,57,0.653303852,24,10,23,FAMILY,Miscellaneous Symbols and Pictographs +🍭,0x1f36d,57,0.632538929,9,21,27,LOLLIPOP,Miscellaneous Symbols and Pictographs +🌃,0x1f303,56,0.747623603,3,27,26,NIGHT WITH STARS,Miscellaneous Symbols and Pictographs +❌,0x274c,56,0.612998,14,12,30,CROSS MARK,Dingbats +🐰,0x1f430,55,0.707516692,4,13,38,RABBIT FACE,Miscellaneous Symbols and Pictographs +💊,0x1f48a,55,0.675071279,8,14,33,PILL,Miscellaneous Symbols and Pictographs +🚨,0x1f6a8,55,0.520959173,6,6,43,POLICE CARS REVOLVING LIGHT,Transport and Map Symbols +😦,0x1f626,54,0.882218595,30,15,9,FROWNING FACE WITH OPEN MOUTH,Emoticons +🍪,0x1f36a,54,0.736575166,10,16,28,COOKIE,Miscellaneous Symbols and Pictographs +🍣,0x1f363,53,0.669970061,24,18,11,SUSHI,Miscellaneous Symbols and Pictographs +╭,0x256d,53,0.490077251,3,38,12,BOX DRAWINGS LIGHT ARC DOWN AND RIGHT,Box Drawing +✧,0x2727,53,0.398520727,1,33,19,WHITE FOUR POINTED STAR,Dingbats +🎆,0x1f386,52,0.798520237,2,9,41,FIREWORKS,Miscellaneous Symbols and Pictographs +╮,0x256e,52,0.422827361,5,35,12,BOX DRAWINGS LIGHT ARC DOWN AND LEFT,Box Drawing +🎎,0x1f38e,51,0.417134709,0,2,49,JAPANESE DOLLS,Miscellaneous Symbols and Pictographs +🇩,0x1f1e9,51,0.74501238,1,16,34,REGIONAL INDICATOR SYMBOL LETTER D,Enclosed Alphanumeric Supplement +✅,0x2705,51,0.672789014,3,23,25,WHITE HEAVY CHECK MARK,Dingbats +👹,0x1f479,49,0.70117277,13,20,16,JAPANESE OGRE,Miscellaneous Symbols and Pictographs +📱,0x1f4f1,49,0.719713336,4,25,20,MOBILE PHONE,Miscellaneous Symbols and Pictographs +🙍,0x1f64d,49,0.844922892,29,8,12,PERSON FROWNING,Emoticons +🍑,0x1f351,49,0.739305631,12,12,25,PEACH,Miscellaneous Symbols and Pictographs +🎼,0x1f3bc,49,0.636141803,2,28,19,MUSICAL SCORE,Miscellaneous Symbols and Pictographs +🔊,0x1f50a,49,0.651738713,4,20,25,SPEAKER WITH THREE SOUND WAVES,Miscellaneous Symbols and Pictographs +🌌,0x1f30c,47,0.750586217,5,11,31,MILKY WAY,Miscellaneous Symbols and Pictographs +🍎,0x1f34e,47,0.75089759,6,19,22,RED APPLE,Miscellaneous Symbols and Pictographs +🐻,0x1f43b,47,0.691609267,6,13,28,BEAR FACE,Miscellaneous Symbols and Pictographs +─,0x2500,47,0.711348374,0,40,7,BOX DRAWINGS LIGHT HORIZONTAL,Box Drawing +╰,0x2570,47,0.509745612,7,36,4,BOX DRAWINGS LIGHT ARC UP AND RIGHT,Box Drawing +💇,0x1f487,46,0.678429189,7,16,23,HAIRCUT,Miscellaneous Symbols and Pictographs +♬,0x266c,46,0.677442137,4,26,16,BEAMED SIXTEENTH NOTES,Miscellaneous Symbols +♚,0x265a,46,0.389194579,0,44,2,BLACK CHESS KING,Miscellaneous Symbols +🔴,0x1f534,45,0.655928061,1,24,20,LARGE RED CIRCLE,Miscellaneous Symbols and Pictographs +🍱,0x1f371,45,0.58000953,25,10,10,BENTO BOX,Miscellaneous Symbols and Pictographs +🍊,0x1f34a,45,0.697299999,6,13,26,TANGERINE,Miscellaneous Symbols and Pictographs +🍒,0x1f352,45,0.619434077,6,18,21,CHERRIES,Miscellaneous Symbols and Pictographs +🐭,0x1f42d,45,0.822545804,0,12,33,MOUSE FACE,Miscellaneous Symbols and Pictographs +👟,0x1f45f,45,0.561642541,5,15,25,ATHLETIC SHOE,Miscellaneous Symbols and Pictographs +🌎,0x1f30e,44,0.743438616,5,19,20,EARTH GLOBE AMERICAS,Miscellaneous Symbols and Pictographs +🍍,0x1f34d,44,0.583336287,7,8,29,PINEAPPLE,Miscellaneous Symbols and Pictographs +🐮,0x1f42e,43,0.846658768,2,12,29,COW FACE,Miscellaneous Symbols and Pictographs +📲,0x1f4f2,43,0.598172133,7,18,18,MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT,Miscellaneous Symbols and Pictographs +☼,0x263c,43,0.461142875,2,30,11,WHITE SUN WITH RAYS,Miscellaneous Symbols +🌅,0x1f305,42,0.603551051,6,14,22,SUNRISE,Miscellaneous Symbols and Pictographs +🇷,0x1f1f7,42,0.716327847,1,10,31,REGIONAL INDICATOR SYMBOL LETTER R,Enclosed Alphanumeric Supplement +👠,0x1f460,42,0.637243017,6,14,22,HIGH-HEELED SHOE,Miscellaneous Symbols and Pictographs +🌽,0x1f33d,42,0.648931091,5,12,25,EAR OF MAIZE,Miscellaneous Symbols and Pictographs +💧,0x1f4a7,41,0.76764795,20,8,13,DROPLET,Miscellaneous Symbols and Pictographs +❓,0x2753,41,0.614920844,7,24,10,BLACK QUESTION MARK ORNAMENT,Dingbats +🍬,0x1f36c,41,0.784072191,8,9,24,CANDY,Miscellaneous Symbols and Pictographs +😺,0x1f63a,40,0.825897808,8,7,25,SMILING CAT FACE WITH OPEN MOUTH,Emoticons +🐴,0x1f434,40,0.795776393,8,21,11,HORSE FACE,Miscellaneous Symbols and Pictographs +🚀,0x1f680,40,0.698479931,2,15,23,ROCKET,Transport and Map Symbols +¦,0xa6,40,0.402048475,7,1,32,BROKEN BAR,Latin-1 Supplement +💢,0x1f4a2,40,0.560644274,6,18,16,ANGER SYMBOL,Miscellaneous Symbols and Pictographs +🎬,0x1f3ac,40,0.650028961,2,24,14,CLAPPER BOARD,Miscellaneous Symbols and Pictographs +🍧,0x1f367,40,0.674847866,9,9,22,SHAVED ICE,Miscellaneous Symbols and Pictographs +🍜,0x1f35c,40,0.577916931,9,5,26,STEAMING BOWL,Miscellaneous Symbols and Pictographs +🐏,0x1f40f,40,0.975591533,2,12,26,RAM,Miscellaneous Symbols and Pictographs +🐘,0x1f418,40,0.722256768,9,21,10,ELEPHANT,Miscellaneous Symbols and Pictographs +👧,0x1f467,40,0.649498717,10,14,16,GIRL,Miscellaneous Symbols and Pictographs +⠀,0x2800,40,0.377950694,6,26,8,BRAILLE PATTERN BLANK,Braille Patterns +🏄,0x1f3c4,39,0.772893432,2,13,24,SURFER,Miscellaneous Symbols and Pictographs +➤,0x27a4,39,0.382195298,0,26,13,BLACK RIGHTWARDS ARROWHEAD,Dingbats +⬆,0x2b06,39,0.605681579,1,25,13,UPWARDS BLACK ARROW,Miscellaneous Symbols and Arrows +🍋,0x1f34b,38,0.742802859,6,16,16,LEMON,Miscellaneous Symbols and Pictographs +🆗,0x1f197,38,0.852316542,6,4,28,SQUARED OK,Enclosed Alphanumeric Supplement +⚪,0x26aa,37,0.564780444,0,19,18,MEDIUM WHITE CIRCLE,Miscellaneous Symbols +📺,0x1f4fa,37,0.61386867,3,16,18,TELEVISION,Miscellaneous Symbols and Pictographs +🍅,0x1f345,37,0.838126825,9,5,23,TOMATO,Miscellaneous Symbols and Pictographs +⛅,0x26c5,37,0.61632427,4,11,22,SUN BEHIND CLOUD,Miscellaneous Symbols +🐢,0x1f422,37,0.621646684,6,17,14,TURTLE,Miscellaneous Symbols and Pictographs +👙,0x1f459,37,0.697202004,3,11,23,BIKINI,Miscellaneous Symbols and Pictographs +🏡,0x1f3e1,36,0.744478613,5,9,22,HOUSE WITH GARDEN,Miscellaneous Symbols and Pictographs +🌾,0x1f33e,36,0.558280959,5,5,26,EAR OF RICE,Miscellaneous Symbols and Pictographs +◉,0x25c9,36,0.046697697,0,26,10,FISHEYE,Geometric Shapes +✏,0x270f,35,0.625100023,3,16,16,PENCIL,Dingbats +🐬,0x1f42c,35,0.74664334,2,15,18,DOLPHIN,Miscellaneous Symbols and Pictographs +🍤,0x1f364,35,0.513142123,6,21,8,FRIED SHRIMP,Miscellaneous Symbols and Pictographs +🇹,0x1f1f9,35,0.584324615,0,13,22,REGIONAL INDICATOR SYMBOL LETTER T,Enclosed Alphanumeric Supplement +♣,0x2663,35,0.666096972,4,14,17,BLACK CLUB SUIT,Miscellaneous Symbols +🐝,0x1f41d,35,0.734687255,5,17,13,HONEYBEE,Miscellaneous Symbols and Pictographs +🌝,0x1f31d,34,0.718124589,5,17,12,FULL MOON WITH FACE,Miscellaneous Symbols and Pictographs +🇮,0x1f1ee,34,0.575925963,0,12,22,REGIONAL INDICATOR SYMBOL LETTER I,Enclosed Alphanumeric Supplement +🔋,0x1f50b,34,0.583005086,22,8,4,BATTERY,Miscellaneous Symbols and Pictographs +🐍,0x1f40d,34,0.622534826,3,15,16,SNAKE,Miscellaneous Symbols and Pictographs +♔,0x2654,34,0.588904318,0,14,20,WHITE CHESS KING,Miscellaneous Symbols +🍳,0x1f373,33,0.798473001,13,6,14,COOKING,Miscellaneous Symbols and Pictographs +🔵,0x1f535,33,0.680543536,4,14,15,LARGE BLUE CIRCLE,Miscellaneous Symbols and Pictographs +😾,0x1f63e,33,0.914644696,20,5,8,POUTING CAT FACE,Emoticons +🌕,0x1f315,33,0.641921506,3,7,23,FULL MOON SYMBOL,Miscellaneous Symbols and Pictographs +🐨,0x1f428,33,0.696298274,4,9,20,KOALA,Miscellaneous Symbols and Pictographs +🔐,0x1f510,33,0.845213961,6,9,18,CLOSED LOCK WITH KEY,Miscellaneous Symbols and Pictographs +💿,0x1f4bf,33,0.444466092,0,11,22,OPTICAL DISC,Miscellaneous Symbols and Pictographs +❁,0x2741,33,0.492535753,0,31,2,EIGHT PETALLED OUTLINED BLACK FLORETTE,Dingbats +🌳,0x1f333,32,0.536180131,2,11,19,DECIDUOUS TREE,Miscellaneous Symbols and Pictographs +👰,0x1f470,32,0.787391801,3,9,20,BRIDE WITH VEIL,Miscellaneous Symbols and Pictographs +❀,0x2740,32,0.443664362,0,18,14,WHITE FLORETTE,Dingbats +⚓,0x2693,32,0.592872704,2,8,22,ANCHOR,Miscellaneous Symbols +🚴,0x1f6b4,32,0.573441922,0,9,23,BICYCLIST,Transport and Map Symbols +▀,0x2580,32,0.249971192,10,17,5,UPPER HALF BLOCK,Block Elements +👗,0x1f457,31,0.703059819,5,13,13,DRESS,Miscellaneous Symbols and Pictographs +➕,0x2795,31,0.034111266,4,5,22,HEAVY PLUS SIGN,Dingbats +💬,0x1f4ac,30,0.635322751,4,10,16,SPEECH BALLOON,Miscellaneous Symbols and Pictographs +▒,0x2592,30,0.5006455,2,27,1,MEDIUM SHADE,Block Elements +🔜,0x1f51c,30,0.606237062,5,11,14,SOON WITH RIGHTWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs +🍨,0x1f368,30,0.656537195,8,7,15,ICE CREAM,Miscellaneous Symbols and Pictographs +💲,0x1f4b2,30,0.793676272,0,22,8,HEAVY DOLLAR SIGN,Miscellaneous Symbols and Pictographs +⛽,0x26fd,30,0.287349631,1,23,6,FUEL PUMP,Miscellaneous Symbols +🍙,0x1f359,29,0.566487361,5,10,14,RICE BALL,Miscellaneous Symbols and Pictographs +🍗,0x1f357,29,0.674706178,9,9,11,POULTRY LEG,Miscellaneous Symbols and Pictographs +🍲,0x1f372,29,0.672925496,7,11,11,POT OF FOOD,Miscellaneous Symbols and Pictographs +🍥,0x1f365,29,0.57963379,22,4,3,FISH CAKE WITH SWIRL DESIGN,Miscellaneous Symbols and Pictographs +▸,0x25b8,29,0.516844972,0,22,7,BLACK RIGHT-POINTING SMALL TRIANGLE,Geometric Shapes +♛,0x265b,29,0.48995855,4,15,10,BLACK CHESS QUEEN,Miscellaneous Symbols +😼,0x1f63c,28,0.855991066,5,7,16,CAT FACE WITH WRY SMILE,Emoticons +🐙,0x1f419,28,0.677637628,2,12,14,OCTOPUS,Miscellaneous Symbols and Pictographs +👨,0x1f468,28,0.693754806,2,8,18,MAN,Miscellaneous Symbols and Pictographs +🍚,0x1f35a,28,0.636903275,6,2,20,COOKED RICE,Miscellaneous Symbols and Pictographs +🍖,0x1f356,28,0.678553575,7,10,11,MEAT ON BONE,Miscellaneous Symbols and Pictographs +♨,0x2668,28,0.664942237,0,1,27,HOT SPRINGS,Miscellaneous Symbols +🎹,0x1f3b9,28,0.466337612,0,17,11,MUSICAL KEYBOARD,Miscellaneous Symbols and Pictographs +♕,0x2655,28,0.621310417,0,16,12,WHITE CHESS QUEEN,Miscellaneous Symbols +▃,0x2583,28,0.373188406,0,0,28,LOWER THREE EIGHTHS BLOCK,Block Elements +🚘,0x1f698,27,0.649502793,8,9,10,ONCOMING AUTOMOBILE,Transport and Map Symbols +🍏,0x1f34f,27,0.85243179,7,11,9,GREEN APPLE,Miscellaneous Symbols and Pictographs +👩,0x1f469,27,0.731773327,9,7,11,WOMAN,Miscellaneous Symbols and Pictographs +👦,0x1f466,27,0.606457886,5,13,9,BOY,Miscellaneous Symbols and Pictographs +🇬,0x1f1ec,27,0.582061343,2,15,10,REGIONAL INDICATOR SYMBOL LETTER G,Enclosed Alphanumeric Supplement +🇧,0x1f1e7,27,0.595070874,2,15,10,REGIONAL INDICATOR SYMBOL LETTER B,Enclosed Alphanumeric Supplement +☠,0x2620,27,0.748862198,7,14,6,SKULL AND CROSSBONES,Miscellaneous Symbols +🐠,0x1f420,26,0.767680777,4,6,16,TROPICAL FISH,Miscellaneous Symbols and Pictographs +🚹,0x1f6b9,26,0.811646698,1,4,21,MENS SYMBOL,Transport and Map Symbols +💵,0x1f4b5,26,0.806506343,3,9,14,BANKNOTE WITH DOLLAR SIGN,Miscellaneous Symbols and Pictographs +✰,0x2730,26,0.19481227,0,3,23,SHADOWED WHITE STAR,Dingbats +╠,0x2560,26,0.542511882,0,20,6,BOX DRAWINGS DOUBLE VERTICAL AND RIGHT,Box Drawing +👛,0x1f45b,25,0.696359786,4,7,14,PURSE,Miscellaneous Symbols and Pictographs +🚙,0x1f699,25,0.653234313,5,14,6,RECREATIONAL VEHICLE,Transport and Map Symbols +🌱,0x1f331,25,0.561338235,0,9,16,SEEDLING,Miscellaneous Symbols and Pictographs +💻,0x1f4bb,25,0.489415613,1,16,8,PERSONAL COMPUTER,Miscellaneous Symbols and Pictographs +🌏,0x1f30f,25,0.681460526,3,10,12,EARTH GLOBE ASIA-AUSTRALIA,Miscellaneous Symbols and Pictographs +▄,0x2584,25,0.464453824,8,11,6,LOWER HALF BLOCK,Block Elements +👓,0x1f453,24,0.514451688,0,16,8,EYEGLASSES,Miscellaneous Symbols and Pictographs +◄,0x25c4,24,0.671979253,0,18,6,BLACK LEFT-POINTING POINTER,Geometric Shapes +⚾,0x26be,24,0.213609507,9,7,8,BASEBALL,Miscellaneous Symbols +🌲,0x1f332,23,0.496443035,2,9,12,EVERGREEN TREE,Miscellaneous Symbols and Pictographs +👴,0x1f474,23,0.783858479,5,7,11,OLDER MAN,Miscellaneous Symbols and Pictographs +🏠,0x1f3e0,23,0.641777733,1,8,14,HOUSE BUILDING,Miscellaneous Symbols and Pictographs +🍇,0x1f347,23,0.583781365,5,6,12,GRAPES,Miscellaneous Symbols and Pictographs +🍘,0x1f358,23,0.620778046,5,3,15,RICE CRACKER,Miscellaneous Symbols and Pictographs +🍛,0x1f35b,23,0.585489158,8,6,9,CURRY AND RICE,Miscellaneous Symbols and Pictographs +🐇,0x1f407,23,0.96735812,4,9,10,RABBIT,Miscellaneous Symbols and Pictographs +🔞,0x1f51e,23,0.814490975,6,12,5,NO ONE UNDER EIGHTEEN SYMBOL,Miscellaneous Symbols and Pictographs +👵,0x1f475,23,0.818006874,5,2,16,OLDER WOMAN,Miscellaneous Symbols and Pictographs +◀,0x25c0,23,0.221018064,0,16,7,BLACK LEFT-POINTING TRIANGLE,Geometric Shapes +🔙,0x1f519,23,0.143848565,2,14,7,BACK WITH LEFTWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs +🌵,0x1f335,23,0.670060172,6,6,11,CACTUS,Miscellaneous Symbols and Pictographs +🐽,0x1f43d,22,0.647826714,5,9,8,PIG NOSE,Miscellaneous Symbols and Pictographs +🍮,0x1f36e,22,0.701402915,10,5,7,CUSTARD,Miscellaneous Symbols and Pictographs +🎇,0x1f387,22,0.820989335,1,3,18,FIREWORK SPARKLER,Miscellaneous Symbols and Pictographs +🐎,0x1f40e,22,0.698088195,2,8,12,HORSE,Miscellaneous Symbols and Pictographs +➔,0x2794,22,0.540918757,3,19,0,HEAVY WIDE-HEADED RIGHTWARDS ARROW,Dingbats +💶,0x1f4b6,22,0.748289907,3,16,3,BANKNOTE WITH EURO SIGN,Miscellaneous Symbols and Pictographs +🐤,0x1f424,22,0.838037285,1,7,14,BABY CHICK,Miscellaneous Symbols and Pictographs +╩,0x2569,22,0.811363636,0,17,5,BOX DRAWINGS DOUBLE UP AND HORIZONTAL,Box Drawing +🛀,0x1f6c0,21,0.904298381,6,6,9,BATH,Transport and Map Symbols +🌑,0x1f311,21,0.603915537,2,6,13,NEW MOON SYMBOL,Miscellaneous Symbols and Pictographs +🚲,0x1f6b2,21,0.582675365,1,10,10,BICYCLE,Transport and Map Symbols +🐑,0x1f411,21,0.921935783,6,13,2,SHEEP,Miscellaneous Symbols and Pictographs +🏁,0x1f3c1,21,0.618314821,0,9,12,CHEQUERED FLAG,Miscellaneous Symbols and Pictographs +🍞,0x1f35e,21,0.710838498,6,8,7,BREAD,Miscellaneous Symbols and Pictographs +🎾,0x1f3be,21,0.820392839,2,4,15,TENNIS RACQUET AND BALL,Miscellaneous Symbols and Pictographs +╚,0x255a,21,0.714311764,0,14,7,BOX DRAWINGS DOUBLE UP AND RIGHT,Box Drawing +🈹,0x1f239,21,0.349907717,1,12,8,SQUARED CJK UNIFIED IDEOGRAPH-5272,Enclosed Ideographic Supplement +🐳,0x1f433,20,0.65571861,4,9,7,SPOUTING WHALE,Miscellaneous Symbols and Pictographs +👮,0x1f46e,20,0.742230559,10,8,2,POLICE OFFICER,Miscellaneous Symbols and Pictographs +☹,0x2639,20,0.776559964,14,4,2,WHITE FROWNING FACE,Miscellaneous Symbols +🐵,0x1f435,20,0.63050797,1,7,12,MONKEY FACE,Miscellaneous Symbols and Pictographs +✪,0x272a,20,0.287581918,0,13,7,CIRCLED WHITE STAR,Dingbats +◕,0x25d5,20,0.594134042,0,10,10,CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK,Geometric Shapes +🗼,0x1f5fc,20,0.653788547,1,6,13,TOKYO TOWER,Miscellaneous Symbols and Pictographs +▐,0x2590,20,0.304138759,4,15,1,RIGHT HALF BLOCK,Block Elements +♠,0x2660,20,0.533120829,0,13,7,BLACK SPADE SUIT,Miscellaneous Symbols +┳,0x2533,20,0.399288134,10,8,2,BOX DRAWINGS HEAVY DOWN AND HORIZONTAL,Box Drawing +👺,0x1f47a,19,0.824824563,8,7,4,JAPANESE GOBLIN,Miscellaneous Symbols and Pictographs +🐚,0x1f41a,19,0.526458845,1,12,6,SPIRAL SHELL,Miscellaneous Symbols and Pictographs +👂,0x1f442,19,0.68212761,7,8,4,EAR,Miscellaneous Symbols and Pictographs +🗽,0x1f5fd,19,0.651087541,1,10,8,STATUE OF LIBERTY,Miscellaneous Symbols and Pictographs +🍵,0x1f375,19,0.650326294,3,5,11,TEACUP WITHOUT HANDLE,Miscellaneous Symbols and Pictographs +🆒,0x1f192,19,0.627794041,0,11,8,SQUARED COOL,Enclosed Alphanumeric Supplement +🍯,0x1f36f,19,0.779822828,7,4,8,HONEY POT,Miscellaneous Symbols and Pictographs +🐺,0x1f43a,19,0.734916913,2,10,7,WOLF FACE,Miscellaneous Symbols and Pictographs +⇨,0x21e8,19,0.541146317,0,9,10,RIGHTWARDS WHITE ARROW,Arrows +➨,0x27a8,19,0.558287039,2,12,5,HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW,Dingbats +🌓,0x1f313,19,0.458297394,0,6,13,FIRST QUARTER MOON SYMBOL,Miscellaneous Symbols and Pictographs +🔒,0x1f512,19,0.939297049,5,5,9,LOCK,Miscellaneous Symbols and Pictographs +╬,0x256c,19,0.32158749,6,10,3,BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL,Box Drawing +👳,0x1f473,18,0.816081393,2,1,15,MAN WITH TURBAN,Miscellaneous Symbols and Pictographs +🌂,0x1f302,18,0.784983076,2,9,7,CLOSED UMBRELLA,Miscellaneous Symbols and Pictographs +🚌,0x1f68c,18,0.635613322,2,10,6,BUS,Transport and Map Symbols +♩,0x2669,18,0.791816647,0,7,11,QUARTER NOTE,Miscellaneous Symbols +🍡,0x1f361,18,0.699734257,5,9,4,DANGO,Miscellaneous Symbols and Pictographs +❥,0x2765,18,0.440217022,0,13,5,ROTATED HEAVY BLACK HEART BULLET,Dingbats +🎡,0x1f3a1,18,0.506097489,1,10,7,FERRIS WHEEL,Miscellaneous Symbols and Pictographs +💌,0x1f48c,17,0.805000544,2,3,12,LOVE LETTER,Miscellaneous Symbols and Pictographs +🐩,0x1f429,17,0.87034228,0,10,7,POODLE,Miscellaneous Symbols and Pictographs +🌜,0x1f31c,17,0.604117045,0,7,10,LAST QUARTER MOON WITH FACE,Miscellaneous Symbols and Pictographs +⌚,0x231a,17,0.64929786,2,9,6,WATCH,Miscellaneous Technical +🚿,0x1f6bf,17,0.669217138,1,3,13,SHOWER,Transport and Map Symbols +🐖,0x1f416,17,0.814054951,0,14,3,PIG,Miscellaneous Symbols and Pictographs +🔆,0x1f506,17,0.604618098,0,6,11,HIGH BRIGHTNESS SYMBOL,Miscellaneous Symbols and Pictographs +🌛,0x1f31b,17,0.679966738,0,6,11,FIRST QUARTER MOON WITH FACE,Miscellaneous Symbols and Pictographs +💂,0x1f482,17,0.691282654,8,4,5,GUARDSMAN,Miscellaneous Symbols and Pictographs +🐔,0x1f414,17,0.627149273,1,9,7,CHICKEN,Miscellaneous Symbols and Pictographs +🙎,0x1f64e,17,0.640742988,8,2,7,PERSON WITH POUTING FACE,Emoticons +🏩,0x1f3e9,16,0.587431016,2,4,10,LOVE HOTEL,Miscellaneous Symbols and Pictographs +🇫,0x1f1eb,16,0.718033886,0,7,9,REGIONAL INDICATOR SYMBOL LETTER F,Enclosed Alphanumeric Supplement +🔨,0x1f528,16,0.738603866,6,6,4,HAMMER,Miscellaneous Symbols and Pictographs +📢,0x1f4e2,16,0.545722402,0,8,8,PUBLIC ADDRESS LOUDSPEAKER,Miscellaneous Symbols and Pictographs +🐦,0x1f426,16,0.75753571,0,8,8,BIRD,Miscellaneous Symbols and Pictographs +🐲,0x1f432,16,0.457546329,2,13,1,DRAGON FACE,Miscellaneous Symbols and Pictographs +♻,0x267b,16,0.438690753,0,7,9,BLACK UNIVERSAL RECYCLING SYMBOL,Miscellaneous Symbols +🌘,0x1f318,16,0.577817017,0,5,11,WANING CRESCENT MOON SYMBOL,Miscellaneous Symbols and Pictographs +🍐,0x1f350,16,0.84457574,5,3,8,PEAR,Miscellaneous Symbols and Pictographs +🌔,0x1f314,16,0.447188207,0,5,11,WAXING GIBBOUS MOON SYMBOL,Miscellaneous Symbols and Pictographs +╥,0x2565,16,0.8694829,6,2,8,BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE,Box Drawing +❊,0x274a,16,0.45212766,0,16,0,EIGHT TEARDROP-SPOKED PROPELLER ASTERISK,Dingbats +👖,0x1f456,15,0.910194857,1,7,7,JEANS,Miscellaneous Symbols and Pictographs +🚺,0x1f6ba,15,0.677226689,2,8,5,WOMENS SYMBOL,Transport and Map Symbols +😗,0x1f617,15,0.714328477,1,2,12,KISSING FACE,Emoticons +🎭,0x1f3ad,15,0.657660049,5,5,5,PERFORMING ARTS,Miscellaneous Symbols and Pictographs +🐄,0x1f404,15,0.825887991,2,6,7,COW,Miscellaneous Symbols and Pictographs +◟,0x25df,15,0.646546064,2,12,1,LOWER LEFT QUADRANT CIRCULAR ARC,Geometric Shapes +🍢,0x1f362,15,0.684276452,5,7,3,ODEN,Miscellaneous Symbols and Pictographs +🎨,0x1f3a8,15,0.490548154,1,10,4,ARTIST PALETTE,Miscellaneous Symbols and Pictographs +⬇,0x2b07,15,0.631917187,2,4,9,DOWNWARDS BLACK ARROW,Miscellaneous Symbols and Arrows +🚼,0x1f6bc,15,0.692874634,0,5,10,BABY SYMBOL,Transport and Map Symbols +⛲,0x26f2,15,0.697309585,1,12,2,FOUNTAIN,Miscellaneous Symbols +▁,0x2581,15,0.711319751,0,15,0,LOWER ONE EIGHTH BLOCK,Block Elements +🇴,0x1f1f4,15,0.676124081,0,9,6,REGIONAL INDICATOR SYMBOL LETTER O,Enclosed Alphanumeric Supplement +🌗,0x1f317,15,0.54681955,0,4,11,LAST QUARTER MOON SYMBOL,Miscellaneous Symbols and Pictographs +🌖,0x1f316,15,0.534539354,0,4,11,WANING GIBBOUS MOON SYMBOL,Miscellaneous Symbols and Pictographs +🔅,0x1f505,15,0.634782609,0,0,15,LOW BRIGHTNESS SYMBOL,Miscellaneous Symbols and Pictographs +👜,0x1f45c,14,0.675482619,2,6,6,HANDBAG,Miscellaneous Symbols and Pictographs +🐌,0x1f40c,14,0.421349764,0,3,11,SNAIL,Miscellaneous Symbols and Pictographs +💼,0x1f4bc,14,0.573028381,1,3,10,BRIEFCASE,Miscellaneous Symbols and Pictographs +🚕,0x1f695,14,0.526016674,3,8,3,TAXI,Transport and Map Symbols +🐹,0x1f439,14,0.743700839,3,3,8,HAMSTER FACE,Miscellaneous Symbols and Pictographs +🌠,0x1f320,14,0.761411531,2,1,11,SHOOTING STAR,Miscellaneous Symbols and Pictographs +🐈,0x1f408,14,0.645414223,0,9,5,CAT,Miscellaneous Symbols and Pictographs +⇧,0x21e7,14,0.461420203,0,12,2,UPWARDS WHITE ARROW,Arrows +☎,0x260e,14,0.836709012,2,10,2,BLACK TELEPHONE,Miscellaneous Symbols +🌁,0x1f301,14,0.744406749,1,9,4,FOGGY,Miscellaneous Symbols and Pictographs +⚫,0x26ab,14,0.440912997,3,4,7,MEDIUM BLACK CIRCLE,Miscellaneous Symbols +♧,0x2667,14,0.775062446,0,6,8,WHITE CLUB SUIT,Miscellaneous Symbols +🏰,0x1f3f0,14,0.434066804,1,7,6,EUROPEAN CASTLE,Miscellaneous Symbols and Pictographs +🚵,0x1f6b5,14,0.5561554,0,8,6,MOUNTAIN BICYCLIST,Transport and Map Symbols +🎢,0x1f3a2,14,0.825803746,1,4,9,ROLLER COASTER,Miscellaneous Symbols and Pictographs +🎷,0x1f3b7,14,0.759955203,0,3,11,SAXOPHONE,Miscellaneous Symbols and Pictographs +🎐,0x1f390,14,0.290879701,0,11,3,WIND CHIME,Miscellaneous Symbols and Pictographs +┈,0x2508,14,0.792740417,12,0,2,BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL,Box Drawing +╗,0x2557,14,0.361119833,0,8,6,BOX DRAWINGS DOUBLE DOWN AND LEFT,Box Drawing +╱,0x2571,14,0.547959184,0,14,0,BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT,Box Drawing +🌇,0x1f307,13,0.54287435,0,5,8,SUNSET OVER BUILDINGS,Miscellaneous Symbols and Pictographs +⏰,0x23f0,13,0.645780266,2,2,9,ALARM CLOCK,Miscellaneous Technical +⇩,0x21e9,13,0.503572636,0,13,0,DOWNWARDS WHITE ARROW,Arrows +🚂,0x1f682,13,0.656030729,0,9,4,STEAM LOCOMOTIVE,Transport and Map Symbols +◠,0x25e0,13,0.652555193,0,6,7,UPPER HALF CIRCLE,Geometric Shapes +🎿,0x1f3bf,13,0.727391903,1,5,7,SKI AND SKI BOOT,Miscellaneous Symbols and Pictographs +✦,0x2726,13,0.402369693,0,12,1,BLACK FOUR POINTED STAR,Dingbats +🆔,0x1f194,13,0.479124776,0,1,12,SQUARED ID,Enclosed Alphanumeric Supplement +⛪,0x26ea,13,0.38723933,2,7,4,CHURCH,Miscellaneous Symbols +🌒,0x1f312,13,0.446222397,0,4,9,WAXING CRESCENT MOON SYMBOL,Miscellaneous Symbols and Pictographs +🐪,0x1f42a,13,0.836925018,0,4,9,DROMEDARY CAMEL,Miscellaneous Symbols and Pictographs +╔,0x2554,13,0.309824364,0,9,4,BOX DRAWINGS DOUBLE DOWN AND RIGHT,Box Drawing +╝,0x255d,13,0.800037569,0,6,7,BOX DRAWINGS DOUBLE UP AND LEFT,Box Drawing +👔,0x1f454,12,0.520012314,2,3,7,NECKTIE,Miscellaneous Symbols and Pictographs +🔱,0x1f531,12,0.790792217,3,5,4,TRIDENT EMBLEM,Miscellaneous Symbols and Pictographs +🆓,0x1f193,12,0.551459397,0,9,3,SQUARED FREE,Enclosed Alphanumeric Supplement +🐋,0x1f40b,12,0.865813424,2,5,5,WHALE,Miscellaneous Symbols and Pictographs +▽,0x25bd,12,0.843553507,1,4,7,WHITE DOWN-POINTING TRIANGLE,Geometric Shapes +▂,0x2582,12,0.578512397,0,12,0,LOWER ONE QUARTER BLOCK,Block Elements +🐛,0x1f41b,12,0.672751951,2,4,6,BUG,Miscellaneous Symbols and Pictographs +👕,0x1f455,12,0.795097842,1,4,7,T-SHIRT,Miscellaneous Symbols and Pictographs +🚋,0x1f68b,12,0.317741493,0,11,1,TRAM CAR,Transport and Map Symbols +💳,0x1f4b3,12,0.83392297,1,4,7,CREDIT CARD,Miscellaneous Symbols and Pictographs +🌆,0x1f306,12,0.764797204,2,6,4,CITYSCAPE AT DUSK,Miscellaneous Symbols and Pictographs +🏧,0x1f3e7,12,0.888240175,0,0,12,AUTOMATED TELLER MACHINE,Miscellaneous Symbols and Pictographs +💡,0x1f4a1,12,0.597619454,0,3,9,ELECTRIC LIGHT BULB,Miscellaneous Symbols and Pictographs +🔹,0x1f539,12,0.170199929,2,6,4,SMALL BLUE DIAMOND,Miscellaneous Symbols and Pictographs +⬅,0x2b05,12,0.662574787,0,5,7,LEFTWARDS BLACK ARROW,Miscellaneous Symbols and Arrows +🍠,0x1f360,12,0.938678015,5,2,5,ROASTED SWEET POTATO,Miscellaneous Symbols and Pictographs +🐫,0x1f42b,12,0.770082215,0,7,5,BACTRIAN CAMEL,Miscellaneous Symbols and Pictographs +🏪,0x1f3ea,12,0.374437236,2,7,3,CONVENIENCE STORE,Miscellaneous Symbols and Pictographs +۩,0x6e9,12,0.464312944,0,12,0,ARABIC PLACE OF SAJDAH,Arabic +🇱,0x1f1f1,12,0.71333692,0,6,6,REGIONAL INDICATOR SYMBOL LETTER L,Enclosed Alphanumeric Supplement +📹,0x1f4f9,11,0.718346535,1,3,7,VIDEO CAMERA,Miscellaneous Symbols and Pictographs +👞,0x1f45e,11,0.779457078,1,3,7,MANS SHOE,Miscellaneous Symbols and Pictographs +🚑,0x1f691,11,0.758087751,3,4,4,AMBULANCE,Transport and Map Symbols +🆘,0x1f198,11,0.775131806,4,2,5,SQUARED SOS,Enclosed Alphanumeric Supplement +👚,0x1f45a,11,0.810043786,0,3,8,WOMANS CLOTHES,Miscellaneous Symbols and Pictographs +🚍,0x1f68d,11,0.659558885,4,2,5,ONCOMING BUS,Transport and Map Symbols +□,0x25a1,11,0.673637431,7,0,4,WHITE SQUARE,Geometric Shapes +🐂,0x1f402,11,0.774388184,1,7,3,OX,Miscellaneous Symbols and Pictographs +🚣,0x1f6a3,11,0.712555862,0,3,8,ROWBOAT,Transport and Map Symbols +✳,0x2733,11,0.37234627,0,11,0,EIGHT SPOKED ASTERISK,Dingbats +🏉,0x1f3c9,11,0.837042609,0,4,7,RUGBY FOOTBALL,Miscellaneous Symbols and Pictographs +🗻,0x1f5fb,11,0.723455901,0,3,8,MOUNT FUJI,Miscellaneous Symbols and Pictographs +🐀,0x1f400,11,0.701470653,1,7,3,RAT,Miscellaneous Symbols and Pictographs +╦,0x2566,11,0.22026307,0,6,5,BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL,Box Drawing +⛺,0x26fa,10,0.905848988,1,2,7,TENT,Miscellaneous Symbols +🐕,0x1f415,10,0.879333592,1,5,4,DOG,Miscellaneous Symbols and Pictographs +🏂,0x1f3c2,10,0.777003138,1,3,6,SNOWBOARDER,Miscellaneous Symbols and Pictographs +👡,0x1f461,10,0.63543995,1,3,6,WOMANS SANDAL,Miscellaneous Symbols and Pictographs +📻,0x1f4fb,10,0.726200366,1,4,5,RADIO,Miscellaneous Symbols and Pictographs +✒,0x2712,10,0.543607437,1,5,4,BLACK NIB,Dingbats +🌰,0x1f330,10,0.786442145,0,3,7,CHESTNUT,Miscellaneous Symbols and Pictographs +🏢,0x1f3e2,10,0.542295544,0,8,2,OFFICE BUILDING,Miscellaneous Symbols and Pictographs +🎒,0x1f392,10,0.614006372,1,2,7,SCHOOL SATCHEL,Miscellaneous Symbols and Pictographs +⌒,0x2312,10,0.623939324,0,3,7,ARC,Miscellaneous Technical +🏫,0x1f3eb,10,0.644209517,6,1,3,SCHOOL,Miscellaneous Symbols and Pictographs +📴,0x1f4f4,10,0.981898981,1,0,9,MOBILE PHONE OFF,Miscellaneous Symbols and Pictographs +🚢,0x1f6a2,10,0.817914113,3,1,6,SHIP,Transport and Map Symbols +🚚,0x1f69a,10,0.479308081,2,7,1,DELIVERY TRUCK,Transport and Map Symbols +🐉,0x1f409,10,0.628494919,0,8,2,DRAGON,Miscellaneous Symbols and Pictographs +❒,0x2752,10,0.587413086,0,7,3,UPPER RIGHT SHADOWED WHITE SQUARE,Dingbats +🐊,0x1f40a,10,0.84550756,2,5,3,CROCODILE,Miscellaneous Symbols and Pictographs +🔔,0x1f514,10,0.713041475,0,0,10,BELL,Miscellaneous Symbols and Pictographs +◢,0x25e2,10,0.571991872,0,2,8,BLACK LOWER RIGHT TRIANGLE,Geometric Shapes +🏥,0x1f3e5,9,0.648092966,1,4,4,HOSPITAL,Miscellaneous Symbols and Pictographs +❔,0x2754,9,0.787466861,3,3,3,WHITE QUESTION MARK ORNAMENT,Dingbats +🚖,0x1f696,9,0.800144753,3,4,2,ONCOMING TAXI,Transport and Map Symbols +🃏,0x1f0cf,9,0.685606875,3,2,4,PLAYING CARD BLACK JOKER,Playing Cards +▼,0x25bc,9,0.656774297,2,4,3,BLACK DOWN-POINTING TRIANGLE,Geometric Shapes +▌,0x258c,9,0.420711618,4,4,1,LEFT HALF BLOCK,Block Elements +☛,0x261b,9,0.553782742,0,5,4,BLACK RIGHT POINTING INDEX,Miscellaneous Symbols +✩,0x2729,9,0.265667997,0,9,0,STRESS OUTLINED WHITE STAR,Dingbats +💒,0x1f492,9,0.79417208,0,3,6,WEDDING,Miscellaneous Symbols and Pictographs +🚤,0x1f6a4,9,0.503972435,0,5,4,SPEEDBOAT,Transport and Map Symbols +🐐,0x1f410,9,0.720583133,0,4,5,GOAT,Miscellaneous Symbols and Pictographs +■,0x25a0,9,0.79044432,5,2,2,BLACK SQUARE,Geometric Shapes +🔚,0x1f51a,9,0.868645196,1,3,5,END WITH LEFTWARDS ARROW ABOVE,Miscellaneous Symbols and Pictographs +🎻,0x1f3bb,9,0.720880053,0,5,4,VIOLIN,Miscellaneous Symbols and Pictographs +🔷,0x1f537,9,0.367845118,0,7,2,LARGE BLUE DIAMOND,Miscellaneous Symbols and Pictographs +🚦,0x1f6a6,9,0.454265022,2,4,3,VERTICAL TRAFFIC LIGHT,Transport and Map Symbols +🔓,0x1f513,9,0.802890324,3,2,4,OPEN LOCK,Miscellaneous Symbols and Pictographs +🎽,0x1f3bd,9,0.903767713,0,4,5,RUNNING SHIRT WITH SASH,Miscellaneous Symbols and Pictographs +📅,0x1f4c5,9,0.597376373,2,3,4,CALENDAR,Miscellaneous Symbols and Pictographs +🎺,0x1f3ba,9,0.646180394,1,0,8,TRUMPET,Miscellaneous Symbols and Pictographs +✯,0x272f,9,0.32090504,0,9,0,PINWHEEL STAR,Dingbats +🍈,0x1f348,9,0.520981407,6,1,2,MELON,Miscellaneous Symbols and Pictographs +✉,0x2709,9,0.44131007,1,4,4,ENVELOPE,Dingbats +╣,0x2563,9,0.641758242,0,9,0,BOX DRAWINGS DOUBLE VERTICAL AND LEFT,Box Drawing +◤,0x25e4,9,0.669223855,0,0,9,BLACK UPPER LEFT TRIANGLE,Geometric Shapes +○,0x25cb,8,0.625334477,0,3,5,WHITE CIRCLE,Geometric Shapes +🍼,0x1f37c,8,0.889794471,1,1,6,BABY BOTTLE,Miscellaneous Symbols and Pictographs +📀,0x1f4c0,8,0.842924661,1,5,2,DVD,Miscellaneous Symbols and Pictographs +🚛,0x1f69b,8,0.552176238,2,6,0,ARTICULATED LORRY,Transport and Map Symbols +📓,0x1f4d3,8,0.835156432,1,4,3,NOTEBOOK,Miscellaneous Symbols and Pictographs +☉,0x2609,8,0.985925307,0,6,2,SUN,Miscellaneous Symbols +💴,0x1f4b4,8,0.837157842,3,4,1,BANKNOTE WITH YEN SIGN,Miscellaneous Symbols and Pictographs +┼,0x253c,8,0.594639298,2,4,2,BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL,Box Drawing +🐃,0x1f403,8,0.82964401,0,8,0,WATER BUFFALO,Miscellaneous Symbols and Pictographs +➰,0x27b0,8,0.255281448,4,1,3,CURLY LOOP,Dingbats +🔌,0x1f50c,8,0.84383834,3,3,2,ELECTRIC PLUG,Miscellaneous Symbols and Pictographs +🍄,0x1f344,8,0.481955716,2,4,2,MUSHROOM,Miscellaneous Symbols and Pictographs +📕,0x1f4d5,8,0.687815619,1,4,3,CLOSED BOOK,Miscellaneous Symbols and Pictographs +📣,0x1f4e3,8,0.665290609,1,2,5,CHEERING MEGAPHONE,Miscellaneous Symbols and Pictographs +🚓,0x1f693,8,0.654503222,0,5,3,POLICE CAR,Transport and Map Symbols +🐗,0x1f417,8,0.756674318,0,3,5,BOAR,Miscellaneous Symbols and Pictographs +↪,0x21aa,8,0.726671282,0,7,1,RIGHTWARDS ARROW WITH HOOK,Arrows +⛳,0x26f3,8,0.659686501,0,1,7,FLAG IN HOLE,Miscellaneous Symbols +┻,0x253b,8,0.436070741,6,0,2,BOX DRAWINGS HEAVY UP AND HORIZONTAL,Box Drawing +┛,0x251b,8,0.711630126,0,2,6,BOX DRAWINGS HEAVY UP AND LEFT,Box Drawing +┃,0x2503,8,0.495888704,0,4,4,BOX DRAWINGS HEAVY VERTICAL,Box Drawing +👱,0x1f471,7,0.584040891,1,4,2,PERSON WITH BLOND HAIR,Miscellaneous Symbols and Pictographs +⏳,0x23f3,7,0.829006815,3,1,3,HOURGLASS WITH FLOWING SAND,Miscellaneous Technical +💺,0x1f4ba,7,0.499522738,1,3,3,SEAT,Miscellaneous Symbols and Pictographs +🏇,0x1f3c7,7,0.829351657,3,2,2,HORSE RACING,Miscellaneous Symbols and Pictographs +☻,0x263b,7,0.808078576,1,3,3,BLACK SMILING FACE,Miscellaneous Symbols +📞,0x1f4de,7,0.639663641,0,3,4,TELEPHONE RECEIVER,Miscellaneous Symbols and Pictographs +Ⓐ,0x24b6,7,0.467453036,2,4,1,CIRCLED LATIN CAPITAL LETTER A,Enclosed Alphanumerics +🌉,0x1f309,7,0.848338345,0,2,5,BRIDGE AT NIGHT,Miscellaneous Symbols and Pictographs +🚩,0x1f6a9,7,0.14668319,3,3,1,TRIANGULAR FLAG ON POST,Transport and Map Symbols +✎,0x270e,7,0.547314568,0,2,5,LOWER RIGHT PENCIL,Dingbats +📃,0x1f4c3,7,0.75418917,0,3,4,PAGE WITH CURL,Miscellaneous Symbols and Pictographs +🏨,0x1f3e8,7,0.803363124,0,5,2,HOTEL,Miscellaneous Symbols and Pictographs +📌,0x1f4cc,7,0.799054518,5,1,1,PUSHPIN,Miscellaneous Symbols and Pictographs +♎,0x264e,7,0.85514993,2,4,1,LIBRA,Miscellaneous Symbols +💷,0x1f4b7,7,0.573124902,0,3,4,BANKNOTE WITH POUND SIGN,Miscellaneous Symbols and Pictographs +🚄,0x1f684,7,0.699813945,0,2,5,HIGH-SPEED TRAIN,Transport and Map Symbols +▲,0x25b2,7,0.33783723,0,2,5,BLACK UP-POINTING TRIANGLE,Geometric Shapes +⛵,0x26f5,7,0.323527212,0,2,5,SAILBOAT,Miscellaneous Symbols +🔸,0x1f538,7,0.17210479,0,5,2,SMALL ORANGE DIAMOND,Miscellaneous Symbols and Pictographs +⌛,0x231b,7,0.796787872,2,2,3,HOURGLASS,Miscellaneous Technical +🚜,0x1f69c,7,0.76727505,0,0,7,TRACTOR,Transport and Map Symbols +🐆,0x1f406,7,0.550090954,0,4,3,LEOPARD,Miscellaneous Symbols and Pictographs +👒,0x1f452,7,0.843648743,1,3,3,WOMANS HAT,Miscellaneous Symbols and Pictographs +❕,0x2755,7,0.86202303,1,3,3,WHITE EXCLAMATION MARK ORNAMENT,Dingbats +🔛,0x1f51b,7,0.474006336,1,1,5,ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE,Miscellaneous Symbols and Pictographs +♢,0x2662,7,0.868165215,0,4,3,WHITE DIAMOND SUIT,Miscellaneous Symbols +🇲,0x1f1f2,7,0.786773623,0,3,4,REGIONAL INDICATOR SYMBOL LETTER M,Enclosed Alphanumeric Supplement +❅,0x2745,7,0.247154472,0,1,6,TIGHT TRIFOLIATE SNOWFLAKE,Dingbats +👝,0x1f45d,6,0.611228018,1,1,4,POUCH,Miscellaneous Symbols and Pictographs +✞,0x271e,6,0.509389671,0,3,3,SHADOWED WHITE LATIN CROSS,Dingbats +◡,0x25e1,6,0.946756676,0,4,2,LOWER HALF CIRCLE,Geometric Shapes +🎋,0x1f38b,6,0.785515587,1,0,5,TANABATA TREE,Miscellaneous Symbols and Pictographs +👥,0x1f465,6,0.83792517,1,2,3,BUSTS IN SILHOUETTE,Miscellaneous Symbols and Pictographs +📵,0x1f4f5,6,0.794071373,1,3,2,NO MOBILE PHONES,Miscellaneous Symbols and Pictographs +🐡,0x1f421,6,0.867288557,0,4,2,BLOWFISH,Miscellaneous Symbols and Pictographs +◆,0x25c6,6,0.602165081,0,1,5,BLACK DIAMOND,Geometric Shapes +🏯,0x1f3ef,6,0.529919889,0,5,1,JAPANESE CASTLE,Miscellaneous Symbols and Pictographs +☂,0x2602,6,0.453390203,1,4,1,UMBRELLA,Miscellaneous Symbols +🔭,0x1f52d,6,0.715984026,0,3,3,TELESCOPE,Miscellaneous Symbols and Pictographs +🎪,0x1f3aa,6,0.607881289,0,4,2,CIRCUS TENT,Miscellaneous Symbols and Pictographs +🐜,0x1f41c,6,0.879901961,0,2,4,ANT,Miscellaneous Symbols and Pictographs +♌,0x264c,6,0.790409536,0,1,5,LEO,Miscellaneous Symbols +☐,0x2610,6,0.538095238,6,0,0,BALLOT BOX,Miscellaneous Symbols +👷,0x1f477,6,0.739199448,1,2,3,CONSTRUCTION WORKER,Miscellaneous Symbols and Pictographs +↳,0x21b3,6,0.346428571,0,6,0,DOWNWARDS ARROW WITH TIP RIGHTWARDS,Arrows +🔈,0x1f508,6,0.635444115,0,4,2,SPEAKER,Miscellaneous Symbols and Pictographs +📄,0x1f4c4,6,0.624139531,0,0,6,PAGE FACING UP,Miscellaneous Symbols and Pictographs +📍,0x1f4cd,6,0.48869302,1,3,2,ROUND PUSHPIN,Miscellaneous Symbols and Pictographs +🚐,0x1f690,6,0.77642636,0,1,5,MINIBUS,Transport and Map Symbols +🚔,0x1f694,6,0.521943521,1,4,1,ONCOMING POLICE CAR,Transport and Map Symbols +🌋,0x1f30b,6,0.379680055,0,2,4,VOLCANO,Miscellaneous Symbols and Pictographs +📡,0x1f4e1,6,0.553891601,1,2,3,SATELLITE ANTENNA,Miscellaneous Symbols and Pictographs +⏩,0x23e9,6,0.7317139,0,5,1,BLACK RIGHT-POINTING DOUBLE TRIANGLE,Miscellaneous Technical +🚳,0x1f6b3,6,0.102993951,0,0,6,NO BICYCLES,Transport and Map Symbols +✘,0x2718,6,0.538602654,0,1,5,HEAVY BALLOT X,Dingbats +۞,0x6de,6,0.471786165,0,6,0,ARABIC START OF RUB EL HIZB,Arabic +☾,0x263e,6,0.452907711,0,6,0,LAST QUARTER MOON,Miscellaneous Symbols +🅰,0x1f170,6,0.311138998,1,2,3,NEGATIVE SQUARED LATIN CAPITAL LETTER A,Enclosed Alphanumeric Supplement +📥,0x1f4e5,6,0.981884058,0,6,0,INBOX TRAY,Miscellaneous Symbols and Pictographs +🇼,0x1f1fc,6,0.734391905,0,3,3,REGIONAL INDICATOR SYMBOL LETTER W,Enclosed Alphanumeric Supplement +┓,0x2513,6,0.51522533,0,2,4,BOX DRAWINGS HEAVY DOWN AND LEFT,Box Drawing +┣,0x2523,6,0.487486157,0,2,4,BOX DRAWINGS HEAVY VERTICAL AND RIGHT,Box Drawing +Ⓛ,0x24c1,6,0.726851852,0,3,3,CIRCLED LATIN CAPITAL LETTER L,Enclosed Alphanumerics +Ⓔ,0x24ba,6,0.814814815,0,3,3,CIRCLED LATIN CAPITAL LETTER E,Enclosed Alphanumerics +🔦,0x1f526,5,0.852648347,0,5,0,ELECTRIC TORCH,Miscellaneous Symbols and Pictographs +👤,0x1f464,5,0.785820605,0,1,4,BUST IN SILHOUETTE,Miscellaneous Symbols and Pictographs +🚁,0x1f681,5,0.509988852,0,4,1,HELICOPTER,Transport and Map Symbols +🎠,0x1f3a0,5,0.57433687,0,2,3,CAROUSEL HORSE,Miscellaneous Symbols and Pictographs +🐁,0x1f401,5,0.418555982,2,3,0,MOUSE,Miscellaneous Symbols and Pictographs +📗,0x1f4d7,5,0.78915959,1,2,2,GREEN BOOK,Miscellaneous Symbols and Pictographs +┐,0x2510,5,0.770866381,2,2,1,BOX DRAWINGS LIGHT DOWN AND LEFT,Box Drawing +☮,0x262e,5,0.75037594,2,1,2,PEACE SYMBOL,Miscellaneous Symbols +♂,0x2642,5,0.580233775,0,4,1,MALE SIGN,Miscellaneous Symbols +◞,0x25de,5,0.722789157,1,3,1,LOWER RIGHT QUADRANT CIRCULAR ARC,Geometric Shapes +📯,0x1f4ef,5,0.974048452,1,4,0,POSTAL HORN,Miscellaneous Symbols and Pictographs +🔩,0x1f529,5,0.672722386,1,2,2,NUT AND BOLT,Miscellaneous Symbols and Pictographs +👢,0x1f462,5,0.994117647,0,1,4,WOMANS BOOTS,Miscellaneous Symbols and Pictographs +◂,0x25c2,5,0.198500589,0,3,2,BLACK LEFT-POINTING SMALL TRIANGLE,Geometric Shapes +📰,0x1f4f0,5,0.860149569,1,1,3,NEWSPAPER,Miscellaneous Symbols and Pictographs +📶,0x1f4f6,5,0.930492899,0,3,2,ANTENNA WITH BARS,Miscellaneous Symbols and Pictographs +🚥,0x1f6a5,5,0.723893805,1,3,1,HORIZONTAL TRAFFIC LIGHT,Transport and Map Symbols +🌄,0x1f304,5,0.285583654,0,4,1,SUNRISE OVER MOUNTAINS,Miscellaneous Symbols and Pictographs +🗾,0x1f5fe,5,0.738585725,0,3,2,SILHOUETTE OF JAPAN,Miscellaneous Symbols and Pictographs +🔶,0x1f536,5,0.786004057,0,3,2,LARGE ORANGE DIAMOND,Miscellaneous Symbols and Pictographs +🏤,0x1f3e4,5,0.272575758,0,3,2,EUROPEAN POST OFFICE,Miscellaneous Symbols and Pictographs +🎩,0x1f3a9,5,0.58647571,0,3,2,TOP HAT,Miscellaneous Symbols and Pictographs +Ⓜ,0x24c2,5,0.765244502,1,1,3,CIRCLED LATIN CAPITAL LETTER M,Enclosed Alphanumerics +🔧,0x1f527,5,0.677226399,4,0,1,WRENCH,Miscellaneous Symbols and Pictographs +🐅,0x1f405,5,0.818550107,0,4,1,TIGER,Miscellaneous Symbols and Pictographs +♮,0x266e,5,0.936640494,0,4,1,MUSIC NATURAL SIGN,Miscellaneous Symbols +🅾,0x1f17e,5,0.977468672,2,2,1,NEGATIVE SQUARED LATIN CAPITAL LETTER O,Enclosed Alphanumeric Supplement +🔄,0x1f504,5,0.971014493,0,5,0,ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS,Miscellaneous Symbols and Pictographs +☄,0x2604,5,0.435373547,0,5,0,COMET,Miscellaneous Symbols +☨,0x2628,5,0.457692308,0,5,0,CROSS OF LORRAINE,Miscellaneous Symbols +📦,0x1f4e6,4,0.508942142,0,3,1,PACKAGE,Miscellaneous Symbols and Pictographs +🚊,0x1f68a,4,0.412291392,1,1,2,TRAM,Transport and Map Symbols +🔲,0x1f532,4,0.665449309,0,1,3,BLACK SQUARE BUTTON,Miscellaneous Symbols and Pictographs +🔁,0x1f501,4,0.570472495,1,2,1,CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS,Miscellaneous Symbols and Pictographs +△,0x25b3,4,0.595601141,0,3,1,WHITE UP-POINTING TRIANGLE,Geometric Shapes +📆,0x1f4c6,4,0.839991723,0,0,4,TEAR-OFF CALENDAR,Miscellaneous Symbols and Pictographs +❛,0x275b,4,0.735294118,0,2,2,HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT,Dingbats +📉,0x1f4c9,4,0.726505602,0,2,2,CHART WITH DOWNWARDS TREND,Miscellaneous Symbols and Pictographs +▵,0x25b5,4,0.012558719,0,2,2,WHITE UP-POINTING SMALL TRIANGLE,Geometric Shapes +🔎,0x1f50e,4,0.333026114,0,1,3,RIGHT-POINTING MAGNIFYING GLASS,Miscellaneous Symbols and Pictographs +☜,0x261c,4,0.95068438,0,3,1,WHITE LEFT POINTING INDEX,Miscellaneous Symbols +🇯,0x1f1ef,4,0.598500468,0,2,2,REGIONAL INDICATOR SYMBOL LETTER J,Enclosed Alphanumeric Supplement +🇵,0x1f1f5,4,0.60602405,0,2,2,REGIONAL INDICATOR SYMBOL LETTER P,Enclosed Alphanumeric Supplement +📘,0x1f4d8,4,0.729794868,1,1,2,BLUE BOOK,Miscellaneous Symbols and Pictographs +✡,0x2721,4,0.542307692,0,4,0,STAR OF DAVID,Dingbats +ⓔ,0x24d4,4,0.423106061,0,1,3,CIRCLED LATIN SMALL LETTER E,Enclosed Alphanumerics +🔑,0x1f511,4,0.712219599,1,1,2,KEY,Miscellaneous Symbols and Pictographs +🔃,0x1f503,4,0.480569642,1,2,1,CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS,Miscellaneous Symbols and Pictographs +👃,0x1f443,4,0.617338955,2,0,2,NOSE,Miscellaneous Symbols and Pictographs +⭕,0x2b55,4,0.521859186,0,2,2,HEAVY LARGE CIRCLE,Miscellaneous Symbols and Arrows +🔘,0x1f518,4,0.823106247,0,3,1,RADIO BUTTON,Miscellaneous Symbols and Pictographs +ⓒ,0x24d2,4,0.078409091,2,0,2,CIRCLED LATIN SMALL LETTER C,Enclosed Alphanumerics +🚭,0x1f6ad,4,0.691042031,0,0,4,NO SMOKING SYMBOL,Transport and Map Symbols +🚉,0x1f689,4,0.517599805,0,1,3,STATION,Transport and Map Symbols +🚪,0x1f6aa,4,0.459991145,0,1,3,DOOR,Transport and Map Symbols +➳,0x27b3,4,0.689189189,0,2,2,WHITE-FEATHERED RIGHTWARDS ARROW,Dingbats +🚃,0x1f683,4,0.867813709,0,1,3,RAILWAY CAR,Transport and Map Symbols +┯,0x252f,4,0.588235294,2,2,0,BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY,Box Drawing +🏬,0x1f3ec,4,0.772435897,0,4,0,DEPARTMENT STORE,Miscellaneous Symbols and Pictographs +☽,0x263d,4,0.827205882,0,4,0,FIRST QUARTER MOON,Miscellaneous Symbols +🆙,0x1f199,4,0.459136213,0,2,2,SQUARED UP WITH EXCLAMATION MARK,Enclosed Alphanumeric Supplement +🆖,0x1f196,4,0.32767456,1,1,2,SQUARED NG,Enclosed Alphanumeric Supplement +☪,0x262a,4,0.5,0,4,0,STAR AND CRESCENT,Miscellaneous Symbols +┗,0x2517,4,0.70743831,0,0,4,BOX DRAWINGS HEAVY UP AND RIGHT,Box Drawing +🚮,0x1f6ae,4,0.705415215,2,0,2,PUT LITTER IN ITS PLACE SYMBOL,Transport and Map Symbols +┫,0x252b,4,0.546428571,0,4,0,BOX DRAWINGS HEAVY VERTICAL AND LEFT,Box Drawing +Ⓞ,0x24c4,4,0.6875,0,2,2,CIRCLED LATIN CAPITAL LETTER O,Enclosed Alphanumerics +❇,0x2747,3,0.906565657,0,1,2,SPARKLE,Dingbats +✴,0x2734,3,0.425259601,0,1,2,EIGHT POINTED BLACK STAR,Dingbats +┌,0x250c,3,1,1,1,1,BOX DRAWINGS LIGHT DOWN AND RIGHT,Box Drawing +☊,0x260a,3,0.627212773,0,0,3,ASCENDING NODE,Miscellaneous Symbols +🔕,0x1f515,3,0.663273811,2,0,1,BELL WITH CANCELLATION STROKE,Miscellaneous Symbols and Pictographs +⬛,0x2b1b,3,0.93331136,2,0,1,BLACK LARGE SQUARE,Miscellaneous Symbols and Arrows +❝,0x275d,3,0.012385762,0,3,0,HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT,Dingbats +❞,0x275e,3,0.348845599,0,3,0,HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT,Dingbats +🚞,0x1f69e,3,0.401392441,0,1,2,MOUNTAIN RAILWAY,Transport and Map Symbols +🍶,0x1f376,3,0.670454148,0,1,2,SAKE BOTTLE AND CUP,Miscellaneous Symbols and Pictographs +🌐,0x1f310,3,0.661697723,0,1,2,GLOBE WITH MERIDIANS,Miscellaneous Symbols and Pictographs +♀,0x2640,3,0.496259709,0,2,1,FEMALE SIGN,Miscellaneous Symbols +🚅,0x1f685,3,0.60688385,0,1,2,HIGH-SPEED TRAIN WITH BULLET NOSE,Transport and Map Symbols +🚒,0x1f692,3,0.372181638,1,2,0,FIRE ENGINE,Transport and Map Symbols +➣,0x27a3,3,0.607657549,0,3,0,THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD,Dingbats +♋,0x264b,3,0.66780619,0,2,1,CANCER,Miscellaneous Symbols +♍,0x264d,3,0.921455436,0,1,2,VIRGO,Miscellaneous Symbols +🕝,0x1f55d,3,0.673202614,1,2,0,CLOCK FACE TWO-THIRTY,Miscellaneous Symbols and Pictographs +ⓐ,0x24d0,3,0.866666667,0,0,3,CIRCLED LATIN SMALL LETTER A,Enclosed Alphanumerics +✗,0x2717,3,1,1,1,1,BALLOT X,Dingbats +📙,0x1f4d9,3,0.985204154,1,0,2,ORANGE BOOK,Miscellaneous Symbols and Pictographs +Ⓢ,0x24c8,3,0.837301587,0,2,1,CIRCLED LATIN CAPITAL LETTER S,Enclosed Alphanumerics +📋,0x1f4cb,3,0.902676399,0,1,2,CLIPBOARD,Miscellaneous Symbols and Pictographs +⇢,0x21e2,3,0.795568159,1,1,1,RIGHTWARDS DASHED ARROW,Arrows +🎱,0x1f3b1,3,0.733061963,1,0,2,BILLIARDS,Miscellaneous Symbols and Pictographs +🐞,0x1f41e,3,0.867149758,0,2,1,LADY BEETLE,Miscellaneous Symbols and Pictographs +🔺,0x1f53a,3,0.331084568,0,2,1,UP-POINTING RED TRIANGLE,Miscellaneous Symbols and Pictographs +ⓡ,0x24e1,3,0.476666667,0,0,3,CIRCLED LATIN SMALL LETTER R,Enclosed Alphanumerics +🎍,0x1f38d,3,0.460928261,0,3,0,PINE DECORATION,Miscellaneous Symbols and Pictographs +♤,0x2664,3,0.864386792,0,1,2,WHITE SPADE SUIT,Miscellaneous Symbols +🎲,0x1f3b2,3,0.294190811,0,3,0,GAME DIE,Miscellaneous Symbols and Pictographs +🎯,0x1f3af,3,0.928725808,0,1,2,DIRECT HIT,Miscellaneous Symbols and Pictographs +〠,0x3020,3,0.589554531,0,3,0,POSTAL MARK FACE,CJK Symbols and Punctuation +🔉,0x1f509,3,0.527173913,0,1,2,SPEAKER WITH ONE SOUND WAVE,Miscellaneous Symbols and Pictographs +↩,0x21a9,3,0.790990991,0,0,3,LEFTWARDS ARROW WITH HOOK,Arrows +🚾,0x1f6be,3,0.97979798,0,2,1,WATER CLOSET,Transport and Map Symbols +🎣,0x1f3a3,3,0.661217721,2,1,0,FISHING POLE AND FISH,Miscellaneous Symbols and Pictographs +🔣,0x1f523,3,0.73668039,0,2,1,INPUT SYMBOL FOR SYMBOLS,Miscellaneous Symbols and Pictographs +❎,0x274e,3,0.376693767,3,0,0,NEGATIVE SQUARED CROSS MARK,Dingbats +➥,0x27a5,3,0.607479234,0,2,1,HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW,Dingbats +🅱,0x1f171,3,0.753702885,0,3,0,NEGATIVE SQUARED LATIN CAPITAL LETTER B,Enclosed Alphanumeric Supplement +🎌,0x1f38c,3,0.720638968,0,0,3,CROSSED FLAGS,Miscellaneous Symbols and Pictographs +◣,0x25e3,3,0.1679015,0,2,1,BLACK LOWER LEFT TRIANGLE,Geometric Shapes +⏬,0x23ec,3,0.798387097,0,0,3,BLACK DOWN-POINTING DOUBLE TRIANGLE,Miscellaneous Technical +♭,0x266d,3,0.996296296,0,2,1,MUSIC FLAT SIGN,Miscellaneous Symbols +💠,0x1f4a0,3,0.634782609,0,3,0,DIAMOND SHAPE WITH A DOT INSIDE,Miscellaneous Symbols and Pictographs +ⓞ,0x24de,2,0.334090909,0,0,2,CIRCLED LATIN SMALL LETTER O,Enclosed Alphanumerics +🔳,0x1f533,2,0.35921659,0,1,1,WHITE SQUARE BUTTON,Miscellaneous Symbols and Pictographs +🏭,0x1f3ed,2,0.620360999,0,1,1,FACTORY,Miscellaneous Symbols and Pictographs +🔰,0x1f530,2,0.612218045,0,2,0,JAPANESE SYMBOL FOR BEGINNER,Miscellaneous Symbols and Pictographs +🎳,0x1f3b3,2,0.031697819,1,1,0,BOWLING,Miscellaneous Symbols and Pictographs +☚,0x261a,2,0.536679293,0,0,2,BLACK LEFT POINTING INDEX,Miscellaneous Symbols +➽,0x27bd,2,0.872727273,0,1,1,HEAVY WEDGE-TAILED RIGHTWARDS ARROW,Dingbats +➫,0x27ab,2,0.22556391,0,1,1,BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW,Dingbats +➖,0x2796,2,0.023088023,2,0,0,HEAVY MINUS SIGN,Dingbats +🏮,0x1f3ee,2,0.949404762,0,2,0,IZAKAYA LANTERN,Miscellaneous Symbols and Pictographs +📛,0x1f4db,2,0.964880952,0,2,0,NAME BADGE,Miscellaneous Symbols and Pictographs +꒰,0xa4b0,2,0.744823477,0,1,1,YI RADICAL SHY,Yi Radicals +꒱,0xa4b1,2,0.800983167,0,1,1,YI RADICAL VEP,Yi Radicals +◝,0x25dd,2,0.847674607,1,1,0,UPPER RIGHT QUADRANT CIRCULAR ARC,Geometric Shapes +📑,0x1f4d1,2,0.557971014,0,0,2,BOOKMARK TABS,Miscellaneous Symbols and Pictographs +🎦,0x1f3a6,2,0.796610169,0,2,0,CINEMA,Miscellaneous Symbols and Pictographs +ⓧ,0x24e7,2,0.96,0,0,2,CIRCLED LATIN SMALL LETTER X,Enclosed Alphanumerics +🇨,0x1f1e8,2,0.935606061,0,2,0,REGIONAL INDICATOR SYMBOL LETTER C,Enclosed Alphanumeric Supplement +🇳,0x1f1f3,2,0.623484848,0,2,0,REGIONAL INDICATOR SYMBOL LETTER N,Enclosed Alphanumeric Supplement +🔟,0x1f51f,2,0.801587302,0,0,2,KEYCAP TEN,Miscellaneous Symbols and Pictographs +〓,0x3013,2,0.533898305,0,0,2,GETA MARK,CJK Symbols and Punctuation +ⓜ,0x24dc,2,0.743085399,0,1,1,CIRCLED LATIN SMALL LETTER M,Enclosed Alphanumerics +➠,0x27a0,2,0.642857143,0,0,2,HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW,Dingbats +🚆,0x1f686,2,0.472714286,0,1,1,TRAIN,Transport and Map Symbols +🚠,0x1f6a0,2,0.807469512,0,2,0,MOUNTAIN CABLEWAY,Transport and Map Symbols +℅,0x2105,2,0.606150794,2,0,0,CARE OF,Letterlike Symbols +☃,0x2603,2,0.566037736,0,1,1,SNOWMAN,Miscellaneous Symbols +🚽,0x1f6bd,2,0.69047619,0,0,2,TOILET,Transport and Map Symbols +📐,0x1f4d0,2,0.02970297,0,2,0,TRIANGULAR RULER,Miscellaneous Symbols and Pictographs +ⓝ,0x24dd,2,0.393333333,0,0,2,CIRCLED LATIN SMALL LETTER N,Enclosed Alphanumerics +✮,0x272e,2,0.211711712,0,2,0,HEAVY OUTLINED BLACK STAR,Dingbats +⇦,0x21e6,2,0.489955357,0,0,2,LEFTWARDS WHITE ARROW,Arrows +👲,0x1f472,2,0.382655827,0,1,1,MAN WITH GUA PI MAO,Miscellaneous Symbols and Pictographs +🚡,0x1f6a1,2,0.622505543,1,1,0,AERIAL TRAMWAY,Transport and Map Symbols +🎑,0x1f391,2,0.309294872,0,2,0,MOON VIEWING CEREMONY,Miscellaneous Symbols and Pictographs +🔬,0x1f52c,2,0.727696078,0,0,2,MICROSCOPE,Miscellaneous Symbols and Pictographs +➗,0x2797,2,0.018722944,1,1,0,HEAVY DIVISION SIGN,Dingbats +📈,0x1f4c8,2,0.568724559,0,1,1,CHART WITH UPWARDS TREND,Miscellaneous Symbols and Pictographs +⌘,0x2318,2,0.613333333,0,2,0,PLACE OF INTEREST SIGN,Miscellaneous Technical +⏪,0x23ea,2,0.489035088,0,1,1,BLACK LEFT-POINTING DOUBLE TRIANGLE,Miscellaneous Technical +╹,0x2579,2,0.952380952,0,2,0,BOX DRAWINGS HEAVY UP,Box Drawing +◎,0x25ce,2,0.925,0,0,2,BULLSEYE,Geometric Shapes +🔼,0x1f53c,2,0.358974359,0,2,0,UP-POINTING SMALL RED TRIANGLE,Miscellaneous Symbols and Pictographs +꒦,0xa4a6,2,0.953125,2,0,0,YI RADICAL GGUO,Yi Radicals +📎,0x1f4ce,2,0.044776119,0,0,2,PAPERCLIP,Miscellaneous Symbols and Pictographs +⑅,0x2445,2,0.652173913,0,0,2,OCR BOW TIE,Optical Character Recognition +⍝,0x235d,2,0.776859504,0,2,0,APL FUNCTIONAL SYMBOL UP SHOE JOT,Miscellaneous Technical +📁,0x1f4c1,2,0.785714286,0,2,0,FILE FOLDER,Miscellaneous Symbols and Pictographs +✭,0x272d,2,0.589285714,0,0,2,OUTLINED BLACK STAR,Dingbats +➲,0x27b2,2,0.009615385,0,2,0,CIRCLED HEAVY WHITE RIGHTWARDS ARROW,Dingbats +♓,0x2653,2,0.093023256,0,1,1,PISCES,Miscellaneous Symbols +┏,0x250f,2,0.58778626,0,0,2,BOX DRAWINGS HEAVY DOWN AND RIGHT,Box Drawing +☇,0x2607,2,0.99382716,0,0,2,LIGHTNING,Miscellaneous Symbols +♺,0x267a,2,0.175,0,2,0,RECYCLING SYMBOL FOR GENERIC MATERIALS,Miscellaneous Symbols +♞,0x265e,2,0.581967213,0,2,0,BLACK CHESS KNIGHT,Miscellaneous Symbols +࿎,0xfce,2,0.232142857,2,0,0,TIBETAN SIGN RDEL NAG RDEL DKAR,Tibetan +📠,0x1f4e0,2,1,0,2,0,FAX MACHINE,Miscellaneous Symbols and Pictographs +👘,0x1f458,2,0.643678161,0,0,2,KIMONO,Miscellaneous Symbols and Pictographs +↙,0x2199,2,0.206766917,0,0,2,SOUTH WEST ARROW,Arrows +Ⓕ,0x24bb,2,0.652777778,0,1,1,CIRCLED LATIN CAPITAL LETTER F,Enclosed Alphanumerics +Ⓦ,0x24cc,2,0.722222222,0,1,1,CIRCLED LATIN CAPITAL LETTER W,Enclosed Alphanumerics +Ⓟ,0x24c5,2,0.791666667,0,1,1,CIRCLED LATIN CAPITAL LETTER P,Enclosed Alphanumerics +🕑,0x1f551,2,0.988407728,0,1,1,CLOCK FACE TWO OCLOCK,Miscellaneous Symbols and Pictographs +💽,0x1f4bd,1,0.566037736,0,1,0,MINIDISC,Miscellaneous Symbols and Pictographs +🕛,0x1f55b,1,1,0,0,1,CLOCK FACE TWELVE OCLOCK,Miscellaneous Symbols and Pictographs +🎫,0x1f3ab,1,0.452631579,0,1,0,TICKET,Miscellaneous Symbols and Pictographs +♈,0x2648,1,0.524590164,1,0,0,ARIES,Miscellaneous Symbols +📟,0x1f4df,1,0.991666667,0,1,0,PAGER,Miscellaneous Symbols and Pictographs +℃,0x2103,1,0.2375,0,1,0,DEGREE CELSIUS,Letterlike Symbols +↬,0x21ac,1,0.806818182,0,0,1,RIGHTWARDS ARROW WITH LOOP,Arrows +🕒,0x1f552,1,0.039215686,0,1,0,CLOCK FACE THREE OCLOCK,Miscellaneous Symbols and Pictographs +🇰,0x1f1f0,1,0.939393939,0,1,0,REGIONAL INDICATOR SYMBOL LETTER K,Enclosed Alphanumeric Supplement +↱,0x21b1,1,0.537190083,0,1,0,UPWARDS ARROW WITH TIP RIGHTWARDS,Arrows +✍,0x270d,1,1,0,0,1,WRITING HAND,Dingbats +⇐,0x21d0,1,0.741007194,0,1,0,LEFTWARDS DOUBLE ARROW,Arrows +🏦,0x1f3e6,1,1,0,0,1,BANK,Miscellaneous Symbols and Pictographs +🔻,0x1f53b,1,0.575757576,0,0,1,DOWN-POINTING RED TRIANGLE,Miscellaneous Symbols and Pictographs +ⓟ,0x24df,1,0.05,0,0,1,CIRCLED LATIN SMALL LETTER P,Enclosed Alphanumerics +ⓕ,0x24d5,1,0.1,0,0,1,CIRCLED LATIN SMALL LETTER F,Enclosed Alphanumerics +ⓘ,0x24d8,1,0.166666667,0,0,1,CIRCLED LATIN SMALL LETTER I,Enclosed Alphanumerics +♿,0x267f,1,1,0,0,1,WHEELCHAIR SYMBOL,Miscellaneous Symbols +⇗,0x21d7,1,0.761904762,0,0,1,NORTH EAST DOUBLE ARROW,Arrows +⇘,0x21d8,1,0.857142857,0,0,1,SOUTH EAST DOUBLE ARROW,Arrows +ⓨ,0x24e8,1,0.613333333,0,0,1,CIRCLED LATIN SMALL LETTER Y,Enclosed Alphanumerics +ⓙ,0x24d9,1,0.68,0,0,1,CIRCLED LATIN SMALL LETTER J,Enclosed Alphanumerics +▫,0x25ab,1,0.126760563,0,0,1,WHITE SMALL SQUARE,Geometric Shapes +🔇,0x1f507,1,1,0,0,1,SPEAKER WITH CANCELLATION STROKE,Miscellaneous Symbols and Pictographs +⌃,0x2303,1,0.611940299,1,0,0,UP ARROWHEAD,Miscellaneous Technical +🔖,0x1f516,1,0.988888889,0,0,1,BOOKMARK,Miscellaneous Symbols and Pictographs +📜,0x1f4dc,1,1,0,0,1,SCROLL,Miscellaneous Symbols and Pictographs +♏,0x264f,1,0.772058824,0,1,0,SCORPIUS,Miscellaneous Symbols +🚝,0x1f69d,1,0.966666667,0,0,1,MONORAIL,Transport and Map Symbols +☢,0x2622,1,0.725,0,1,0,RADIOACTIVE SIGN,Miscellaneous Symbols +🎏,0x1f38f,1,0.390243902,0,1,0,CARP STREAMER,Miscellaneous Symbols and Pictographs +┘,0x2518,1,0.909090909,1,0,0,BOX DRAWINGS LIGHT UP AND LEFT,Box Drawing +✝,0x271d,1,0.411764706,1,0,0,LATIN CROSS,Dingbats +❖,0x2756,1,0.581967213,0,1,0,BLACK DIAMOND MINUS WHITE X,Dingbats +⍣,0x2363,1,0.953125,1,0,0,APL FUNCTIONAL SYMBOL STAR DIAERESIS,Miscellaneous Technical +📮,0x1f4ee,1,0.798319328,1,0,0,POSTBOX,Miscellaneous Symbols and Pictographs +🕕,0x1f555,1,0.646153846,1,0,0,CLOCK FACE SIX OCLOCK,Miscellaneous Symbols and Pictographs +🇭,0x1f1ed,1,0.236363636,0,1,0,REGIONAL INDICATOR SYMBOL LETTER H,Enclosed Alphanumeric Supplement +◜,0x25dc,1,0.760330579,0,1,0,UPPER LEFT QUADRANT CIRCULAR ARC,Geometric Shapes +🔯,0x1f52f,1,1,0,0,1,SIX POINTED STAR WITH MIDDLE DOT,Miscellaneous Symbols and Pictographs +➸,0x27b8,1,0.364963504,0,0,1,HEAVY BLACK-FEATHERED RIGHTWARDS ARROW,Dingbats +꒵,0xa4b5,1,0.927007299,0,0,1,YI RADICAL JJY,Yi Radicals +🕥,0x1f565,1,0.811965812,1,0,0,CLOCK FACE TEN-THIRTY,Miscellaneous Symbols and Pictographs +♙,0x2659,1,0.342857143,0,1,0,WHITE CHESS PAWN,Miscellaneous Symbols +▿,0x25bf,1,0.432835821,0,1,0,WHITE DOWN-POINTING SMALL TRIANGLE,Geometric Shapes +⚃,0x2683,1,0.918918919,0,1,0,DIE FACE-4,Miscellaneous Symbols +✽,0x273d,1,0.99270073,0,0,1,HEAVY TEARDROP-SPOKED ASTERISK,Dingbats +📼,0x1f4fc,1,1,0,0,1,VIDEOCASSETTE,Miscellaneous Symbols and Pictographs +🕐,0x1f550,1,1,1,0,0,CLOCK FACE ONE OCLOCK,Miscellaneous Symbols and Pictographs +🀄,0x1f004,1,1,0,0,1,MAHJONG TILE RED DRAGON,Mahjong Tiles +✾,0x273e,1,0.023255814,0,1,0,SIX PETALLED BLACK AND WHITE FLORETTE,Dingbats +✬,0x272c,1,0.955223881,0,0,1,BLACK CENTRE WHITE STAR,Dingbats +🆑,0x1f191,1,0.983606557,0,1,0,SQUARED CL,Enclosed Alphanumeric Supplement +✫,0x272b,1,0.923728814,0,0,1,OPEN CENTRE BLACK STAR,Dingbats +🕔,0x1f554,1,0.742424242,1,0,0,CLOCK FACE FIVE OCLOCK,Miscellaneous Symbols and Pictographs +❣,0x2763,1,0.471428571,0,0,1,HEAVY HEART EXCLAMATION MARK ORNAMENT,Dingbats +➱,0x27b1,1,0.704347826,0,1,0,NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW,Dingbats +🆕,0x1f195,1,0.669117647,0,1,0,SQUARED NEW,Enclosed Alphanumeric Supplement +➢,0x27a2,1,0.242647059,0,1,0,THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD,Dingbats +↕,0x2195,1,0.735632184,0,1,0,UP DOWN ARROW,Arrows +📫,0x1f4eb,1,0.384615385,0,0,1,CLOSED MAILBOX WITH RAISED FLAG,Miscellaneous Symbols and Pictographs +🉐,0x1f250,1,0.03125,0,0,1,CIRCLED IDEOGRAPH ADVANTAGE,Enclosed Ideographic Supplement +♊,0x264a,1,0.327586207,0,1,0,GEMINI,Miscellaneous Symbols +🈂,0x1f202,1,0.466666667,1,0,0,SQUARED KATAKANA SA,Enclosed Ideographic Supplement +🎰,0x1f3b0,1,0.421686747,1,0,0,SLOT MACHINE,Miscellaneous Symbols and Pictographs +҂,0x482,1,0.519230769,1,0,0,CYRILLIC THOUSANDS SIGN,Cyrillic +╤,0x2564,1,0.634615385,1,0,0,BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE,Box Drawing +➛,0x279b,1,0.011627907,0,1,0,DRAFTING POINT RIGHTWARDS ARROW,Dingbats +♝,0x265d,1,0.28,0,1,0,BLACK CHESS BISHOP,Miscellaneous Symbols +❋,0x274b,1,0.888888889,0,1,0,HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK,Dingbats +✆,0x2706,1,0.557251908,0,1,0,TELEPHONE LOCATION SIGN,Dingbats +📔,0x1f4d4,1,0.814814815,0,0,1,NOTEBOOK WITH DECORATIVE COVER,Miscellaneous Symbols and Pictographs diff --git a/emoji/build.js b/emoji/build.js new file mode 100644 index 0000000..cf7fff9 --- /dev/null +++ b/emoji/build.js @@ -0,0 +1,64 @@ + +const fs = require('fs'); +const path = require('path'); +const util = require('util'); + +const rf = util.promisify(fs.readFile); +const wf = util.promisify(fs.writeFile); + +// File paths +const EMOJI_PATH = path.join(__dirname, 'Emoji_Sentiment_Data_v1.0.csv'); +const RESULT_PATH = path.join(__dirname, 'emoji.json'); + +/** + * Read emoji data from original format (CSV). + * + * @return {{ [index: string]: number }} + */ +async function processEmoji() { + try { + const map = {}; + const data = await rf(EMOJI_PATH, 'utf-8'); + // Format: + // Emoji,Unicode codepoint,Occurrences,Position,Negative,Neutral,Positive,Unicode name,Unicode block + const lines = data.split(/\n/); + // Remove label + lines.shift(); + // Iterate over dataset and add to hash + for (let line of lines) { + const values = line.split(','); + + if (values.length !== 9) continue; // Invalid + + // Establish sentiment value + const emoji = String.fromCodePoint(values[1]); + const occurences = values[2]; + const negCount = values[4]; + const posCount = values[6]; + const score = (posCount / occurences) - (negCount / occurences); + const sentiment = Math.floor(5 * score); + + // Validate score + if (Number.isNaN(sentiment)) continue; + if (sentiment === 0) continue; + + // Add to hash + map[emoji] = sentiment; + } + return map; + } catch (err) { + console.error('Error reading emoji file: ' + err); + } +} + + +void async function run() { + const data = await processEmoji(); + const prettyJson = JSON.stringify(data, null, 4); + try { + await wf(RESULT_PATH, prettyJson); + console.info(`Complete: ${Object.keys(data).length} entries.`); + } catch(err) { + console.error('Error writing emoji file: ' + err); + } +}().catch(console.error); diff --git a/build/emoji.json b/emoji/emoji.json similarity index 100% rename from build/emoji.json rename to emoji/emoji.json diff --git a/jest.config.coverage.js b/jest.config.coverage.js new file mode 100644 index 0000000..fea61fb --- /dev/null +++ b/jest.config.coverage.js @@ -0,0 +1,29 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + transform: { + '^.+\\.tsx?$': 'ts-jest' + }, + roots: [ + '/languages', + '/src', + '/test/unit', + '/test/integration' + ], + testRegex: '(.*|(\\.|/)(test|spec))\\.ts$', + testPathIgnorePatterns: [ + '/lib/', + '/node_modules/', + '/src', + '/languages' + ], + moduleFileExtensions: [ + 'ts', + 'tsx', + 'js', + 'jsx', + 'json', + 'node' + ], + collectCoverage: true, +}; diff --git a/jest.config.integration.js b/jest.config.integration.js new file mode 100644 index 0000000..43eb164 --- /dev/null +++ b/jest.config.integration.js @@ -0,0 +1,17 @@ +module.exports = { + transform: { + '^.+\\.tsx?$': 'ts-jest' + }, + roots: [ + '/test/integration' + ], + testRegex: '(.*|(\\.|/)(test|spec))\\.ts$', + moduleFileExtensions: [ + 'ts', + 'tsx', + 'js', + 'jsx', + 'json', + 'node' + ], +}; diff --git a/jest.config.unit.js b/jest.config.unit.js new file mode 100644 index 0000000..3bd8570 --- /dev/null +++ b/jest.config.unit.js @@ -0,0 +1,17 @@ +module.exports = { + transform: { + '^.+\\.tsx?$': 'ts-jest' + }, + roots: [ + '/test/unit' + ], + testRegex: '(.*|(\\.|/)(test|spec))\\.ts$', + moduleFileExtensions: [ + 'ts', + 'tsx', + 'js', + 'jsx', + 'json', + 'node' + ], +}; diff --git a/languages/en/index.js b/languages/en/index.js deleted file mode 100644 index 46e0f91..0000000 --- a/languages/en/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - labels: require('./labels.json'), - scoringStrategy: require('./scoring-strategy') -}; diff --git a/languages/en/index.ts b/languages/en/index.ts new file mode 100644 index 0000000..7fd7ed5 --- /dev/null +++ b/languages/en/index.ts @@ -0,0 +1,7 @@ +import labels from './labels.json'; +import { scoringStrategy } from './scoring-strategy'; +import { Language } from '../language'; + +export const english: Language = { labels, scoringStrategy }; + +export default english; // Use unnamed default exports for dynamic loading diff --git a/languages/en/scoring-strategy.js b/languages/en/scoring-strategy.js deleted file mode 100644 index d9a09ca..0000000 --- a/languages/en/scoring-strategy.js +++ /dev/null @@ -1,13 +0,0 @@ -var negators = require('./negators.json'); - -module.exports = { - apply: function(tokens, cursor, tokenScore) { - if (cursor > 0) { - var prevtoken = tokens[cursor - 1]; - if (negators[prevtoken]) { - tokenScore = -tokenScore; - } - } - return tokenScore; - } -}; diff --git a/languages/en/scoring-strategy.ts b/languages/en/scoring-strategy.ts new file mode 100644 index 0000000..73765bc --- /dev/null +++ b/languages/en/scoring-strategy.ts @@ -0,0 +1,16 @@ +import { ScoringStrategy } from '../scoring-strategy'; +import negators from './negators.json'; +import { Negators } from '../negators'; + +const _negators: Negators = negators; + +export const scoringStrategy: ScoringStrategy = (tokens: string[], cursor: number, tokenScore: number) => { + // Check if the previous token is a negator + if (cursor > 0) { + const prevtoken = tokens[cursor - 1]; + if (_negators[prevtoken]) { + tokenScore = -tokenScore; + } + } + return tokenScore; +}; diff --git a/languages/es/index.ts b/languages/es/index.ts new file mode 100644 index 0000000..86a7ddf --- /dev/null +++ b/languages/es/index.ts @@ -0,0 +1,13 @@ +import labels from './labels.json'; +import { scoringStrategy } from './scoring-strategy'; +import { Language } from '../language'; +// import { readFileSync } from 'fs'; + +// const labels = JSON.parse(readFileSync(__dirname + '/labels.json', 'utf8')); + +export const spanish: Language = { + labels: labels, + scoringStrategy: scoringStrategy +}; + +export default spanish; diff --git a/languages/es/labels.json b/languages/es/labels.json new file mode 100644 index 0000000..9e5423d --- /dev/null +++ b/languages/es/labels.json @@ -0,0 +1,2748 @@ +{ + "a bordo": 1, + "a dedo": 1, + "a salvo": 1, + "abandonado": -2, + "abandonar": -2, + "abandono": -2, + "abandonos": -2, + "abatido": -2, + "abatimiento": -2, + "abolladura": -2, + "aborrecer": -3, + "aborrecible": -3, + "aborrecido": -3, + "aborrecimientos": -3, + "aborta": -1, + "abortado": -1, + "abrazar": 1, + "abrazo": 2, + "abrazos": 2, + "absolver": 2, + "absolviendo": 2, + "absorbido": 1, + "absorto": 1, + "absuelto": 2, + "absuelve": 2, + "aburrido": -2, + "abusado": -3, + "abusar": -3, + "abusivo": -3, + "abuso": -3, + "abusos": -3, + "acariciado": 2, + "acariciando": 2, + "accesible": 1, + "accidental": -2, + "accidentalmente": -2, + "accidente": -2, + "accidentes": -2, + "acciones": 1, + "acecha": -1, + "acechando": -1, + "acechar": -1, + "acepta": 1, + "aceptable": 1, + "aceptación": 1, + "aceptado": 1, + "aceptando": 1, + "aceptar": 1, + "aclamación": 2, + "aclamado": 2, + "aclara": 2, + "aconsejable": 1, + "acorralado": -2, + "acosado": -2, + "acosando": -3, + "acosar": -3, + "acoso": -3, + "acosos": -3, + "acrimonioso": -3, + "activo": 2, + "activos": 2, + "acuchillado": -2, + "acuchillando": -2, + "acuerdo": 1, + "acusa": -2, + "acusación": -1, + "acusaciones": -2, + "acusado": -2, + "acusar": -2, + "adecuado": 2, + "admira": 3, + "admirado": 3, + "admirando": 3, + "admirar": 3, + "admite": -1, + "admitido": -1, + "admitir": -1, + "adoctrina": -2, + "adoctrinado": -2, + "adoctrinando": -2, + "adoctrinar": -2, + "adopta": 1, + "adoptar": 1, + "adora": 3, + "adorable": 3, + "adorablemente": 3, + "adorables": 3, + "adoración": 3, + "adorada": 3, + "adorando": 3, + "adorar": 3, + "adusta": -2, + "adversario": -1, + "advertencia": -3, + "advertencias": -3, + "advertido": -2, + "advertir": -2, + "advierte": -2, + "afectado": -2, + "afecto": 3, + "afectuoso": 3, + "aficionados": 2, + "afligido": -2, + "afortunadamente": 2, + "afortunado": 2, + "agobiado": -2, + "agobiante": -2, + "agog": 2, + "agoniza": -3, + "agonizado": -3, + "agonizante": -3, + "agonizar": -3, + "agradable": 3, + "agradecido": 2, + "agravado": -2, + "agravados": -2, + "agravante": -2, + "agravar": -2, + "agraviado": -2, + "agresión": -2, + "agresiones": -2, + "agresividad": -2, + "agresivo": -2, + "ahogado": -2, + "ahogarse": -2, + "ahorros": 1, + "aislado": -1, + "alabado": 3, + "alabando": 3, + "alabanza": 3, + "alabanzas": 3, + "alarma": -2, + "alarmado": -2, + "alarmista": -2, + "alarmistas": -2, + "alboroto": -3, + "alcance": 2, + "alcanza": 1, + "alcanzable": 1, + "alcanzado": 1, + "alcanzando": 1, + "alcanzar": 1, + "aleccionador": 1, + "alegación": -2, + "alegaciones": -2, + "alegre": 3, + "alegremente": 3, + "alegría": 3, + "aleluya": 3, + "alentador": 2, + "alérgico": -2, + "alerta": -1, + "algún tipo": 0, + "aliado": 2, + "alienación": -2, + "aliento": 2, + "alivia": 1, + "aliviado": 2, + "altruista": 2, + "ama": 3, + "amabilidad": 2, + "amable": 2, + "amado": 3, + "amañado": -1, + "amargado": -2, + "amargamente": -2, + "amargo": -2, + "ambicioso": 2, + "ambivalente": -1, + "amenaza": -2, + "amenazado": -2, + "amenazante": -2, + "amenazar": -2, + "amenazas": -2, + "amigable": 2, + "amigo": 1, + "amistad": 2, + "amonestado": -2, + "amonestar": -2, + "amor": 3, + "amordazado": -2, + "amoroso": 2, + "amortiguamiento": -2, + "analfabetismo": -2, + "angustia": -2, + "angustiado": -2, + "angustiante": -2, + "angustias": -2, + "anhelo": 1, + "anima": 2, + "animado": 2, + "animando": 2, + "animar": 2, + "animosidad": -2, + "ansiedad": -2, + "ansioso": 2, + "antagonista": -2, + "anti": -1, + "anticipación": 1, + "antihigiénico": -2, + "antiparlamentario": -2, + "apacigua": 2, + "apaciguado": 2, + "apaciguador": 2, + "apaciguar": 2, + "apagón": -2, + "apagones": -2, + "apasionado": 2, + "apasionante": 2, + "apatía": -3, + "apático": -3, + "apesadumbrado": -2, + "apesta": -3, + "apestaba": -2, + "apestar": -3, + "apestoso": -2, + "apiñamiento": -1, + "aplastado": -1, + "aplastante": -1, + "aplastar": -1, + "aplaude": 2, + "aplaudido": 2, + "aplaudiendo": 2, + "aplaudir": 2, + "aplausos": 2, + "aplazando": -1, + "apocalíptico": -2, + "apoya": 2, + "apoyado": 2, + "apoyando": 1, + "apoyo": 2, + "aprecia": 2, + "apreciado": 2, + "apreciando": 2, + "apreciar": 2, + "aprecio": 2, + "aprensivo": -2, + "aprobación": 2, + "aprobado": 2, + "apropiadamente": 2, + "apropiado": 2, + "apuñalado": -2, + "ardiente": 1, + "armonía": 2, + "armoniosamente": 2, + "armonioso": 2, + "arrastra": -1, + "arrastrado": -1, + "arrastrar": -1, + "arrebatado": 2, + "arrepentido": -2, + "arrepentimiento": -2, + "arrepentimientos": -2, + "arrestado": -3, + "arresto": -2, + "arrestos": -2, + "arriesgado": -2, + "arrogante": -2, + "arruinado": -2, + "arruinando": -2, + "asalto": -2, + "asaltos": -2, + "ascendido": 1, + "asco": -3, + "asegura": 2, + "asegurado": 2, + "asegurando": 1, + "asegurar": 1, + "asentamientos": 1, + "asequible": 2, + "asesinado": -3, + "asesinar": -3, + "asesinato": -2, + "asesinatos": -2, + "asesino": -3, + "asfixia": -2, + "asfixiante": -2, + "asombra": 3, + "asombrado": 3, + "asombrar": 3, + "asombrosamente": 3, + "asombroso": 3, + "asqueado": -3, + "asqueroso": -2, + "astuto": 2, + "asustado": -2, + "asustar": -2, + "atacado": -1, + "atacando": -1, + "atacar": 1, + "ataque": -1, + "ataques": -1, + "atascado": -2, + "atento": 2, + "aterrador": -2, + "aterroriza": -3, + "aterrorizado": -3, + "aterrorizar": -3, + "atracción": 2, + "atracciones": 2, + "atractivamente": 2, + "atractivo": 2, + "atrae": 1, + "atraer": 1, + "atraído": 1, + "atrapado": -2, + "atrayendo": 2, + "atrevido": 2, + "atrocidad": -3, + "atroz": -3, + "aturdido": -2, + "audaz": 2, + "audazmente": 2, + "aumentado": 1, + "aumentar": 1, + "aura": 1, + "ausente": -1, + "ausentes": -1, + "auto-contradictorio": -2, + "autoabuso": -2, + "autoengañado": -2, + "autoridad": 1, + "avanzado": 1, + "avaricia": -3, + "aventura": 2, + "aventuras": 2, + "aventurero": 2, + "avergonzado": -2, + "avergonzar": -2, + "ávido": 2, + "ay": -1, + "ayuda": 2, + "ayudar": 2, + "baja": -2, + "bajo rendimiento": -2, + "bambú": -2, + "bambúes": -2, + "bancarrota": -3, + "bankster": -3, + "bárbaro": -2, + "barra": -2, + "barras oblicuas": -2, + "barrera": -2, + "bastardo": -5, + "bastardos": -5, + "basura": -4, + "batalla": -1, + "batallado": -1, + "batallando": -2, + "batallas": -1, + "beatífica": 3, + "belleza": 3, + "bellezas": 3, + "bendición": 3, + "bendiciones": 3, + "bendito": 2, + "benefactor": 2, + "benefactores": 2, + "beneficiado": 2, + "beneficiar": 2, + "beneficio": 2, + "beneficios": 2, + "benevolente": 3, + "beso": 2, + "bien campeón": 3, + "bien cuidado": 2, + "bien desarrollado": 2, + "bien enfocado": 2, + "bien establecido": 2, + "bien proporcionado": 2, + "bien": 3, + "bienaventurado": 3, + "bienaventuranza": 3, + "bienestar": 2, + "bienvenido": 2, + "bienvenidos": 2, + "bizarro": -2, + "bla bla": -2, + "blockbuster": 3, + "bloqueado": -1, + "bloqueo": -2, + "bloques": -1, + "boicot": -2, + "boicoteado": -2, + "boicotear": -2, + "boicots": -2, + "bomba": -1, + "bondad amorosa": 3, + "bondad": 3, + "bonita": 1, + "bonito": 3, + "boost": 1, + "borracho": -2, + "borrado": -2, + "borrar": -2, + "borroso": -2, + "bravura": 3, + "breaching": -2, + "brecha": -2, + "brechas": -2, + "brillante": 4, + "brillantez": 3, + "brillo": 1, + "broma": 2, + "brote": -2, + "brotes": -2, + "brutal": -3, + "brutalmente": -3, + "buena voluntad": 2, + "buenos días": 1, + "buque insignia": 2, + "burla": -2, + "burlado": -2, + "burlarse": -2, + "cabeza de chorlito": -4, + "cabildeado": -2, + "cabildeo": -2, + "cabildero": -2, + "cabilderos": -2, + "cabizbajo": -2, + "cabreado": -4, + "cabrón": -4, + "cabrones": -4, + "cadáver": -1, + "caducado": -1, + "caído": -2, + "calambre": -1, + "calidad": 2, + "calidez": 2, + "cálido": 2, + "callejón sin salida": -2, + "calma": 2, + "calmado": 3, + "calmante": 3, + "calmar": 3, + "cambiando el juego": 3, + "campeón": 2, + "campeones": 2, + "cancela": -1, + "cancelación": -1, + "cancelado": -1, + "cancelar": -1, + "cáncer": -1, + "cansado": -2, + "caos": -2, + "caótico": -2, + "capacidad": 1, + "capacidades": 1, + "capaz": 1, + "caprichoso": 1, + "cara de culo": -4, + "carente de sentido": -2, + "carga": -2, + "cargado": -3, + "cargas": -2, + "cargos": -2, + "cariño": 2, + "cariñoso": 2, + "carisma": 2, + "caritativo": 2, + "castiga": -2, + "castigado": -2, + "castigar": -2, + "castigos": -3, + "catástrofe": -3, + "catastrófico": -4, + "cauteloso": -1, + "cautivado": 3, + "cayendo": -1, + "celebra": 3, + "celebración": 3, + "celebraciones": 3, + "celebrado": 3, + "celebrando": 3, + "celebrar": 3, + "celestial": 4, + "celos": -2, + "celoso": 2, + "censor": -2, + "censores": -2, + "censurado": -2, + "chagrin": -2, + "chantaje": -3, + "chantajeado": -3, + "chantajes": -3, + "chic": 2, + "chides": -3, + "chispa": 1, + "chispeante": 3, + "chistes": 2, + "chivo expiatorio": -2, + "chivos expiatorios": -2, + "choca": -1, + "chocando": -1, + "chocante": -2, + "chocar": -1, + "choque": -2, + "choques": -2, + "chupavergas": -5, + "cicatrices": -2, + "cicatriz": -2, + "ciego": -1, + "cierto": 1, + "cínico": -2, + "cinismo": -2, + "citación": -2, + "claramente": 1, + "claridad": 2, + "clasifica mal": -2, + "clasificar mal": -2, + "coacción": -2, + "coaccionado": -2, + "cobarde": -2, + "cobrando": -2, + "codicioso": -2, + "colapsa": -2, + "colapsado": -2, + "colapsando": -2, + "colapso": -2, + "colisión": -2, + "colisiones": -2, + "coludir": -3, + "combate": -1, + "combates": -1, + "comedia": 1, + "comic": 1, + "como": 2, + "cómodamente": 2, + "comodidades": 2, + "cómodo": 2, + "compadecido": -1, + "compartido": 1, + "compartir": 1, + "compasión": 2, + "compasivo": 2, + "competencias": 1, + "competente": 2, + "competitivo": 2, + "complacido": 3, + "complaciente": -2, + "complicando": -2, + "comprometerse": 1, + "comprometido": 1, + "compromiso": 2, + "con clase": 3, + "con confianza": 2, + "con cuidado": 2, + "con el corazón roto": -3, + "con éxito": 3, + "con miedo": -2, + "con mucho corazón": -2, + "con orgullo": 2, + "con suerte": 2, + "con un propósito": 2, + "conceder": 1, + "concedido": 1, + "conciliado": 2, + "conciliar": 2, + "condena": -2, + "condenado al ostracismo": -2, + "condenado": -2, + "condenar": -2, + "conferido": 1, + "confía": 1, + "confiable": 2, + "confiablemente": 2, + "confiado": 2, + "confianza": 1, + "conflictivo": -2, + "conflicto": -2, + "conflictos": -2, + "confundido": -2, + "confundir": -2, + "confusión de marca": -3, + "confuso": -2, + "conmovedor": 2, + "coño": -5, + "consentido": -2, + "consentimiento": 2, + "consentimientos": 2, + "consolable": 2, + "conspiración": -3, + "consternado": -2, + "consuelo": 2, + "contagio": -2, + "contagios": -2, + "contagioso": -1, + "contamina": -2, + "contaminación": -2, + "contaminaciones": -2, + "contaminado": -2, + "contaminador": -2, + "contaminadores": -2, + "contaminante": -2, + "contaminantes": -2, + "contaminar": -2, + "contender": -1, + "contendiendo": -1, + "contendiente": -1, + "contento": 3, + "contestable": -2, + "contrabando": -2, + "controversia": -2, + "controversias": -2, + "convence": 1, + "convencer": 1, + "convencido": 1, + "convivial": 2, + "cool": 1, + "coraje": 2, + "corrompe": -3, + "corromper": -3, + "corrompido": -3, + "corrupción": -3, + "corrupto": -3, + "cortar": -1, + "corte": -1, + "cortes": -1, + "cortés": 2, + "cortesía": 2, + "cosas geniales": 3, + "costoso": -2, + "creativo": 2, + "creciendo": 1, + "crecimiento": 2, + "crecimientos": 2, + "credulidad": -2, + "crédulo": -2, + "crimen": -3, + "crímenes": -3, + "criminado": -3, + "criminal": -3, + "criminales": -3, + "criminar": -3, + "crisis": -3, + "critica": -2, + "crítica": -2, + "criticado": -2, + "criticando": -2, + "criticar": -2, + "crítico": -2, + "críticos": -2, + "crudo": -1, + "cruel": -3, + "crueldad": -3, + "cualidades": 2, + "cuestionable": -2, + "cuidado": 2, + "culo": -4, + "culpa": -2, + "culpabilidad": -3, + "culpable": -3, + "culpado": -2, + "culpando": -2, + "cumple": 2, + "cumplido": 2, + "cumplidos": 2, + "cumplimiento": 2, + "cumplir": 2, + "curioso": 1, + "dañado": -2, + "dañino": -2, + "daño": -2, + "daños": -2, + "de acuerdo": 1, + "de confianza": 2, + "de luto": -2, + "de mente cerrada": -2, + "débil": -2, + "debilidad": -2, + "debilidades": -2, + "debilitado": -2, + "debonair": 2, + "decepción": -2, + "decepcionado": -2, + "decepcionante": -2, + "decepcionar": -2, + "decepciones": -2, + "decidida": 2, + "decisivo": 1, + "dedicación": 2, + "dedicado": 2, + "defecto": -2, + "defectos": -2, + "defectuoso": -3, + "defendido": 2, + "defensor": 2, + "defensores": 2, + "deficiencia": -2, + "deficiencias": -2, + "deficiente": -2, + "déficit": -2, + "deformado": -2, + "deformidad": -2, + "deformidades": -2, + "defrauda": -3, + "defraudar": -3, + "degrada": -2, + "degradado": -2, + "degradar": -2, + "delicia": 3, + "delicias": 3, + "deliciosamente": 3, + "delicioso": 3, + "delincuente": -2, + "delito grave": -3, + "delitos graves": -3, + "delitos": -2, + "demanda": -2, + "demandado": -2, + "demandar": -2, + "demandas": -2, + "demostración": -1, + "denigrante": -2, + "denuncia": -2, + "denunciar": -2, + "dependiente": 2, + "deplora": -3, + "deplorado": -3, + "deplorando": -3, + "deplorar": -3, + "deportación": -2, + "deportaciones": -2, + "deportado": -2, + "deportando": -2, + "deportar": -2, + "deportes": -2, + "depredador": -2, + "deprimente": -1, + "deprimido": -1, + "derrota": -2, + "derrotado": -2, + "desacreditado": -2, + "desacuerdo": -2, + "desafiante": -1, + "desafío": -1, + "desagradable": -2, + "desagradecido": -3, + "desagrado": -2, + "desairado": -2, + "desairar": -2, + "desaire": -2, + "desalentador": -2, + "desalojo": -1, + "desamparo": -2, + "desanimado": -2, + "desánimo": -2, + "desaparece": -1, + "desaparecer": -1, + "desaparecido": -2, + "desapareció": -1, + "desapegado": -1, + "desaprobación": -2, + "desaprobaciones": -2, + "desaprobado": -2, + "desaprobar": -2, + "desaprueba": -2, + "desarticulado": -2, + "desastre": -2, + "desastres": -2, + "desastroso": -3, + "desatendida": -2, + "descalificado": -2, + "descarrila": -2, + "descarrilado": -2, + "descarrilar": -2, + "descartar": -1, + "descartes": -1, + "desconcertado": -2, + "desconfiado": -3, + "desconfianza": -3, + "desconsiderado": -2, + "desconsolado": -2, + "desconsuelo": -2, + "descontento": -2, + "descuento": -1, + "descuidado": -2, + "descuidar": -2, + "descuido": -1, + "descuidos": -2, + "desdén": -2, + "desdentado": -2, + "deseable": 2, + "deseado": 2, + "deseando": 1, + "desempleado": -1, + "desempleo": -2, + "desenfocado": -2, + "desenmarañar": 1, + "deseo": 1, + "deseos": 1, + "deseoso": 2, + "desesperación": -3, + "desesperadamente": -3, + "desesperado": -3, + "desesperanza": -2, + "desestimado": -2, + "desfalco": -3, + "desfavorable": -2, + "desfavorecidos": -2, + "desgarrado": -2, + "desgarrador": -2, + "desgastado": -1, + "desgracia": -2, + "deshonesto": -2, + "deshonrado": -2, + "deshumaniza": -2, + "deshumanizado": -2, + "deshumanizante": -2, + "deshumanizar": -2, + "desigual": -1, + "desilusionado": -2, + "desinformación": -2, + "desinteresado": 2, + "deslumbrante": 3, + "desmoraliza": -2, + "desmoralizado": -2, + "desmoralizante": -2, + "desmoralizar": -2, + "desmotivado": -2, + "desorden": -2, + "desordenado": -2, + "desórdenes": -2, + "desorganizado": -2, + "desorientado": -2, + "despectivamente": -2, + "despectivo": -2, + "despedido": -2, + "despeja": 1, + "despejado": 1, + "desperdiciado": -2, + "desperdiciar": -2, + "desperdicio": -1, + "despilfarrado": -2, + "despilfarradores": -2, + "despilfarrar": -2, + "desplomándose": -1, + "despotricar": -3, + "despreciable": -2, + "despreciativo": -2, + "desprecio": -2, + "desproporcionado": -2, + "destacar": 2, + "destellos": 3, + "desterrar": -1, + "destrozado": -2, + "destrucción": -3, + "destructivo": -3, + "destruido": -3, + "destruir": -3, + "destruye": -3, + "destruyendo": -3, + "desvalorizado": -1, + "desventaja": -2, + "desventurado": -2, + "desviando": -1, + "detención": -2, + "detener": -2, + "detenido": -2, + "deteriorado": -2, + "deteriorándose": -2, + "deteriorarse": -2, + "deterioro": -2, + "detesta": -3, + "detesto": -3, + "deuda": -2, + "devastación": -2, + "devastaciones": -2, + "devastado": -2, + "devastador": -2, + "devastar": -2, + "devoción": 2, + "devocional": 2, + "devoto": 3, + "diamante": 1, + "difamación": -2, + "difamatorio": -2, + "diferir": -1, + "difícil": -1, + "dificultad": -2, + "difunto": -2, + "dignidad": 2, + "digno": 2, + "dilema": -1, + "dilligence": 2, + "dios": 1, + "dirección correcta": 3, + "discapacidad": -2, + "discapacidades": -2, + "discernimiento": 2, + "discordia": -2, + "discrimina": -2, + "discriminados": -2, + "discriminar": -2, + "discriminatoria": -2, + "discriminatorio": -2, + "disculpa": -1, + "disculparme": -1, + "disculparse": -1, + "discutido": -2, + "disfraces": -1, + "disfraz": -1, + "disfrazado": -1, + "disfrazando": -1, + "disfruta": 2, + "disfrutado": 2, + "disfrutando": 2, + "disfrutar": 2, + "disfunción": -2, + "disgustado": -2, + "disgusto": -2, + "disparando": -2, + "disparar": -1, + "disputa": -2, + "disputando": -2, + "disputas": -2, + "distinguido": 2, + "distorsiona": -2, + "distorsionado": -2, + "distorsionante": -2, + "distorsionar": -2, + "distracción": -2, + "distrae": -2, + "distraer": -2, + "distraído": -2, + "disturbio": -2, + "disturbios": -2, + "disuasivo": -2, + "diversión": 4, + "diversiones": 3, + "divertido": 3, + "diviértete": 3, + "dolor de cabeza": -2, + "dolor": -1, + "dolorido": -2, + "doloroso": -2, + "dona": 2, + "donación": 2, + "donado": 2, + "donando": 2, + "donar": 2, + "doom": -2, + "drenado": -2, + "droopy": -2, + "ducha": -3, + "duda": -1, + "dudaba": -1, + "dudando": -1, + "dudas": -1, + "dudoso": -2, + "duele": -2, + "duelo": -2, + "duelos": -2, + "dulce": 2, + "duradero": 2, + "duramente": -2, + "duro": -2, + "edificante": 2, + "eery": -2, + "efectivamente": 2, + "efectivo": 2, + "efecto secundario": -2, + "efectos secundarios": -2, + "eficacia": 2, + "egoísmo": -3, + "egoísta": -3, + "ejecución hipotecaria": -2, + "ejecuciones hipotecarias": -2, + "el cielo": 2, + "el lado malo": -2, + "el más amargo": -2, + "el más bajo": -1, + "el más brillante": 2, + "el más dulce": 3, + "el más duro": -2, + "el más fuerte": 2, + "el más grande": 3, + "el más hábil": 2, + "el más inteligente": 2, + "el más loco": -2, + "el más noble": 2, + "el más oscuro": -2, + "el más sucio": -2, + "el mejor de los malditos": 4, + "el paraíso": 3, + "elegante": 2, + "elegantemente": 2, + "elogiado": 2, + "elogiar": 2, + "elogio": 2, + "embarazoso": -2, + "embaucado": -2, + "embelesado": 3, + "embellecer": 3, + "embrujado": -2, + "emergencia": -2, + "emoción": 3, + "emocionado": 5, + "emocionante": 3, + "empañado": -2, + "empañar": -2, + "empático": 2, + "empeora": -3, + "empeorando": -3, + "empeorar": -3, + "empeoró": -3, + "empoderamiento": 2, + "empoderar": 2, + "emprendedor": 1, + "empujando": 1, + "en bancarrota": -3, + "en forma": 1, + "enamorada": 3, + "enamoramientos": -1, + "encantado": 4, + "encantador": 3, + "encantadoramente": 3, + "encanto": 3, + "encaprichado": 2, + "encaprichamiento": 2, + "encarcelado": -2, + "encarcelamiento": -2, + "encubrimiento": -3, + "endosar": 2, + "endoso": 2, + "enemigo": -2, + "enemigos": -2, + "energético": 2, + "enérgico": 2, + "enfadado": -3, + "enfermedad": -2, + "enfermedades": -2, + "enfermo": -2, + "enfocado": 2, + "enfurece": -2, + "enfurecedor": -2, + "enfurecer": -2, + "enfurecido": -2, + "enfurecidos": -2, + "enfurruñado": -2, + "engaña": -3, + "engañado": -3, + "engañar": -3, + "engaño": -2, + "engañoso": -3, + "enhorabuena": 2, + "enloquecedor": -3, + "enojo": -3, + "enorme": 1, + "ensordecedor": -1, + "entorpecer": -2, + "entretenido": 2, + "entretenimiento": -2, + "entristecido": -2, + "entrometido": -2, + "entumecido": -1, + "entusiasmado": 3, + "entusiasta": 1, + "envenenado": -2, + "enviado del cielo": 4, + "envidia": -1, + "envidias": -1, + "envidioso": -2, + "equilibrado": 1, + "erróneamente": -2, + "erróneo": -2, + "error": -2, + "errores": -2, + "escalofriante": -1, + "escándalo": -3, + "escándalos": -3, + "escandaloso": -3, + "escapa": -1, + "escapando": -1, + "escapar": -1, + "escasez": -2, + "escepticismo": -2, + "escéptico": -2, + "escépticos": -2, + "esclarecedor": 2, + "esclavitud": -3, + "esclavizado": -2, + "esclavizar": -2, + "esclavo": -3, + "esclavos": -3, + "esconderse": -1, + "escondido": -1, + "escondiéndose": -1, + "escoria": -3, + "espacioso": 1, + "espaldas": 1, + "espantoso": -3, + "especulador": -2, + "especulativo": -2, + "espeluznante": -2, + "espera": -1, + "esperado": -1, + "esperando": 2, + "esperanza": 2, + "esperanzado": 2, + "esperanzas": 2, + "esperar": -1, + "espinoso": -2, + "espíritu": 1, + "espléndido": 3, + "esquivar": -2, + "está de acuerdo": 1, + "estable": 2, + "estafa": -3, + "estafador": -4, + "estafadores": -4, + "estafas": -3, + "estampida": -2, + "estancado": -2, + "estancamiento": -2, + "estereotipado": -2, + "estereotipo": -2, + "estima": 2, + "estimado": 2, + "estimula": 1, + "estimulado": 1, + "estimulante": 2, + "estimular": 1, + "estornuda": -2, + "estornudando": -2, + "estornudé": -2, + "estornudo": -2, + "estragos": -2, + "estrangulado": -2, + "estreñimiento": -2, + "estrés": -1, + "estresado": -2, + "estresantes": -2, + "estúpidamente": -2, + "estupidez": -3, + "estúpido": -2, + "ético": 2, + "euforia": 3, + "eufórico": 4, + "evacua": -1, + "evacuación": -1, + "evacuado": -1, + "evacuando": -1, + "evacuar": -1, + "evergreens": 2, + "evita": -1, + "evitado": -1, + "evitar": -1, + "exacerba": -2, + "exacerbado": -2, + "exacerbando": -2, + "exacerbar": -2, + "exagera": -2, + "exageración": -2, + "exagerada": -2, + "exagerando": -2, + "exagerar": -2, + "exageró": -2, + "exasperado": -2, + "exasperados": -2, + "exasperante": -2, + "excelencia": 3, + "excelente": 5, + "excitar": 3, + "excluido": -2, + "excluir": -1, + "exclusión": -1, + "exclusivo": 2, + "excusa": -1, + "exento": -1, + "exhausto": -2, + "exigente": -1, + "exigió": -1, + "éxito": 2, + "exitoso": 3, + "exonera": 2, + "exonerado": 2, + "exonerando": 2, + "exonerar": 2, + "expandir": 1, + "expertamente": 2, + "exploración": 1, + "exploraciones": 1, + "explotación": -2, + "explotado": -2, + "explotando": -2, + "expone": -1, + "exponer": -1, + "expuesto": -1, + "expulsa": -2, + "expulsado": -2, + "expulsar": -2, + "exquisito": 3, + "éxtasis": 2, + "extático": 4, + "extender": 1, + "extrañamente": -1, + "extraño": -1, + "extraordinario": 2, + "extraviar": -2, + "extravío": -2, + "extremista": -2, + "extremistas": -2, + "exuberante": 4, + "exultante": 3, + "exultantemente": 3, + "fabulosamente": 4, + "fabuloso": 4, + "fácil": 1, + "factor estresante": -2, + "falla": -2, + "fallando": -2, + "fallar": -2, + "fallo de disparo": -2, + "falsamente": -2, + "falseamiento de información": -2, + "falsificado": -3, + "falsificar": -3, + "falso": -1, + "falsos": -3, + "falta de respeto": -2, + "falta": -2, + "fama": 1, + "famoso": 2, + "fan": 3, + "fanático": -2, + "fangoso": -2, + "fantasma": -1, + "fantasmas": -1, + "fantástico": 4, + "farsa": -1, + "farsante": -3, + "fascina": 3, + "fascinación": 3, + "fascinado": 3, + "fascinante": 3, + "fascinar": 3, + "fascista": -2, + "fascistas": -2, + "fatal": -3, + "fatalidad": -3, + "fatalidades": -3, + "fatiga": -2, + "fatigado": -2, + "fatigante": -2, + "fatigas": -2, + "favor": 2, + "favorable": 2, + "favorablemente": 2, + "favorecido": 2, + "favores": 2, + "favorito": 2, + "favoritos": 2, + "fe": 1, + "fealdad": -3, + "felicidad": 3, + "felicidades": 2, + "felicitaciones": 3, + "feliz": 3, + "feo": -3, + "fértil": 2, + "ferviente": 2, + "festivo": 2, + "fiabilidad": 2, + "fiasco": -3, + "fiebre": -2, + "fiel": 3, + "filantropía": 2, + "filtrado": -1, + "finge": -1, + "fingiendo": -1, + "fingir": -1, + "firme": 2, + "fitness": 1, + "flop": -2, + "flotante": 2, + "fóbico": -2, + "forefront": 1, + "fornido": 2, + "fortalece": 2, + "fortalecer": 2, + "fortalecido": 2, + "fortalecimiento": 2, + "fortalezas": 2, + "fortuna": 2, + "forzado": -1, + "fracasado": -2, + "fracaso": -2, + "fracasos": -2, + "frases": -2, + "fraude": -4, + "fraudes": -4, + "fraudulento": -4, + "freak": -2, + "frenesí": -3, + "frenético": -1, + "fresco": 1, + "frikin": -2, + "frunciendo el ceño": -1, + "frustración": -2, + "frustrado": -2, + "frustrados": -2, + "frustrante": -2, + "frustrar": -2, + "ftw": 3, + "fuck": -4, + "fud": -3, + "fuego": -2, + "fuera de línea": -1, + "fuera de lugar": -2, + "fuerte": 2, + "fuerza": 2, + "fuga": -1, + "funeral": -1, + "funerales": -1, + "funky": 2, + "furioso": -3, + "gag": -2, + "galante": 3, + "galantemente": 3, + "galantería": 3, + "gamberrismo": -2, + "gana": 4, + "ganado": 2, + "ganador": 4, + "ganancias": 2, + "ganando": 2, + "ganar": 4, + "ganga": 2, + "ganó": 3, + "garantizado": 1, + "gema": 3, + "gemidos": -2, + "gemir": -2, + "generosamente": 2, + "generoso": 2, + "genial": 3, + "gilipollas": -5, + "gimiendo": -2, + "gimió": -2, + "glamuroso": 3, + "glee": 3, + "gloria": 2, + "glorioso": 2, + "golpeado": -1, + "golpeando": -1, + "goofy": -2, + "gota": -1, + "gr8": 3, + "gracia": 1, + "gracias": 2, + "grácil": 2, + "gracioso": 3, + "gran avance": 3, + "grande": 1, + "grandioso": 3, + "grant": 1, + "gratificación": 2, + "gratificante": 2, + "grave": -2, + "greenwasher": -3, + "greenwashers": -3, + "greenwashing": -3, + "gripe": -2, + "gris": -1, + "gritando": -2, + "gritar": -2, + "gritó": -2, + "gritos": -2, + "grosero": -2, + "gruñir": -2, + "guapo": 3, + "guerra": -2, + "guiando": 2, + "gustaba": 2, + "gustadores": 2, + "gustar": 2, + "gustos": 2, + "hábil": 2, + "habilidad": 2, + "habilidades": 2, + "hacer trampa": -3, + "hacha": -1, + "hackeado": -1, + "hambre": -2, + "hambriento": -2, + "hambruna": -2, + "harto": -3, + "hazañas": -2, + "herido": -2, + "hermosa": 3, + "héroe": 2, + "héroes": 2, + "heroico": 3, + "heterosexual": 1, + "hijo de puta": -5, + "hilarante": 2, + "hinchado": -1, + "hipócrita": -2, + "histeria": -3, + "histérica": -3, + "homicidio involuntario": -3, + "homicidio": -2, + "homicidios": -2, + "honesto": 2, + "honor": 2, + "honrado": 2, + "honrando": 2, + "hooligan": -2, + "hooligans": -2, + "horrendo": -3, + "horrible": -3, + "horrorizado": -3, + "hosco": -2, + "hospitalizado": -2, + "hostil": -2, + "huckster": -2, + "hueco": -1, + "huelga": -1, + "huelgas": -2, + "huelguistas": -2, + "humano": 2, + "humeante": -2, + "humilde": 1, + "humillación": -3, + "humillado": -3, + "humillante": 3, + "humor": 2, + "humorístico": 2, + "humoroso": 2, + "hurra": 5, + "huye": -1, + "idiota": -3, + "idiotez": -3, + "ignora": -1, + "ignorado": -2, + "ignorancia": -2, + "ignorante": -2, + "ignorar": -1, + "ilegal": -3, + "ilegalmente": -3, + "ilegítimo": -3, + "ilógico": -2, + "ilumina": 2, + "iluminado": 2, + "iluminar": 2, + "imaginativo": 2, + "imbécil": -4, + "imbéciles": -4, + "imfao": 4, + "impaciente": -2, + "imparable": 2, + "imparcial": 2, + "impecable": 2, + "impecablemente": 2, + "impedido": -2, + "impedimento": -2, + "impedir": -2, + "impedirlo": -2, + "imperdonable": -3, + "imperfecto": -2, + "impide": -2, + "implacable": -2, + "impone": -1, + "imponente": -1, + "imponer": -1, + "importa": 1, + "importancia": 2, + "importante": 2, + "impostor": -2, + "impotente": -2, + "impresiona": 3, + "impresionado": 3, + "impresionante": 4, + "impresionar": 3, + "improbable": -1, + "impropio": -2, + "imprudente": -2, + "impuesto": -1, + "impugnaciones": -3, + "impulsado": 1, + "impulsos": 1, + "inacción": -2, + "inaceptable": -2, + "inadaptación": -2, + "inadecuado": -2, + "inadvertidamente": -2, + "inapreciable": -2, + "inapropiadamente": -2, + "inapropiado": -2, + "incapacidad": -2, + "incapacita": -2, + "incapacitado": -2, + "incapacitante": -2, + "incapaz": -2, + "incesante": -2, + "incienso": -2, + "inciensos": -2, + "incierto": -1, + "incoherente": -2, + "incomodidad": -2, + "incómodo": -2, + "incompetencia": -2, + "incompetente": -2, + "incompleto": -1, + "incomprendido": -2, + "incomprensible": -2, + "inconsciente": -2, + "inconveniente": -2, + "incrédulo": -1, + "increíble": -1, + "indeciso": -1, + "indefenso": -2, + "indeseable": -2, + "indestructible": 2, + "indiferencia": -2, + "indiferente": -2, + "indignación": -3, + "indignado": -3, + "indignante": -2, + "indigno": -2, + "indulgente": 1, + "indultos": 2, + "ineditable": -2, + "ineficaz": -2, + "ineficiencia": -2, + "ineficiente": -2, + "ineficientemente": -2, + "ineptitud": -2, + "inepto": -2, + "inestable": -2, + "inestables": -1, + "inexcusable": -3, + "inexorable": -3, + "infantil": -2, + "infantilizado": -2, + "infección": -2, + "infecciones": -2, + "infeccioso": -2, + "infecta": -2, + "infectado": -2, + "infectando": -2, + "infectar": -2, + "infelicidad": -2, + "infeliz": -2, + "inferior": -2, + "infernal": -2, + "infestaciones": -2, + "infestado": -2, + "infestando": -2, + "infierno": -4, + "inflamado": -2, + "inflige": -2, + "infligido": -2, + "infligir": -2, + "influyente": 2, + "informes erróneos": -2, + "infracción": -2, + "infringe": -2, + "infringido": -2, + "infringiendo": -2, + "infringir": -2, + "infructuoso": -2, + "ingenio": 2, + "ingenioso": 2, + "ingenuo": -2, + "inhibir": -1, + "inhumano": -2, + "inigualable": 1, + "injustamente": -2, + "injusticia": -2, + "injusto": -2, + "inmerecido": -2, + "inmortal": 2, + "inmovilizado": -1, + "inmune": 1, + "innova": 1, + "innovación": 1, + "innovador": 2, + "innovar": 1, + "inoperante": -2, + "inquieto": -2, + "inquietud": -2, + "inquisición": -2, + "inquisitivo": 2, + "insalubre": -2, + "insatisfecho": -2, + "inseguro": -1, + "insensibilidad": -2, + "insensible": -2, + "insignificante": -2, + "insípido": -2, + "insolvente": -2, + "insomnio": -2, + "insoportable": -2, + "insoportablemente": -1, + "inspira": 2, + "inspiración": 2, + "inspirado": 2, + "inspirador": 3, + "inspirar": 2, + "insuficiencia": -2, + "insuficiente": -2, + "insuficientemente": -2, + "insultado": -2, + "insultante": -2, + "insulto": -2, + "insultos": -2, + "intacto": 2, + "integral": 2, + "integridad": 2, + "inteligente": 1, + "intenso": 1, + "interés": 1, + "interesado": 2, + "interesante": 2, + "intereses": 1, + "interrogado": -1, + "interrogatorio": -1, + "interrumpe": -2, + "interrumpido": -2, + "interrumpiendo": -2, + "interrumpir": -2, + "interrupción": -2, + "interrupciones": -2, + "intimida": -2, + "intimidación": -2, + "intimidad": 2, + "intimidado": -2, + "intimidante": -2, + "intimidar": -2, + "intransigencia": -2, + "intrépido": 2, + "intrigas": 1, + "intrincado": 2, + "inútil": -2, + "inutilidad": -2, + "invadido": -2, + "invasión": -1, + "invencible": 2, + "inventado": -1, + "invitando": 1, + "invitar": 1, + "involuntario": -2, + "invulnerable": 2, + "ira": -3, + "iracundo": -3, + "ironía": -1, + "irónico": -1, + "irracional": -1, + "irreparable": -2, + "irreproducible": -2, + "irresistible": 2, + "irresistiblemente": 2, + "irresoluto": -2, + "irrespetado": -2, + "irresponsable": -2, + "irresponsablemente": -2, + "irreversible": -1, + "irreversiblemente": -1, + "irrita": -3, + "irritación": -2, + "irritado": -3, + "irritante": -2, + "irritar": -3, + "ja": 2, + "jactancioso": 2, + "jaja": 3, + "jajaja": 3, + "jajajaja": 3, + "jeje": 2, + "jesús": 1, + "jocoso": 2, + "joder": -4, + "jodidamente bien": 4, + "jodidamente fantástico": 4, + "jodidamente genial": 4, + "jodidamente guapo": 4, + "jodidamente hermosa": 4, + "jodidamente increíble": 4, + "jodidamente perfecto": 4, + "jodidamente sexy": 2, + "jodido": -2, + "jodiendo": -4, + "jolly": 2, + "jovial": 2, + "joya": 1, + "joyas": 1, + "jubiloso": 3, + "juguetón": 2, + "juguetona": 2, + "juicio político": -3, + "jura": -2, + "justicia": 2, + "justificadamente": 2, + "justificado": 2, + "justo": 2, + "juvenil": 2, + "la cagó": -3, + "la más pura": 1, + "ladrón": -2, + "lag": -1, + "lágrimas": -2, + "lamentable": -3, + "landmark": 2, + "lanzado": 1, + "lapsus": -1, + "lástima": -2, + "lastimando": -2, + "lavado de cerebro": -3, + "lavado verde": -3, + "lawl": 3, + "leal": 3, + "lealtad": 3, + "legal": 1, + "legalmente": 1, + "legítimo": 2, + "lesión": -2, + "lesiones": -2, + "letal": -2, + "letalidad": -2, + "letárgico": -2, + "letargo": -2, + "levántate": 1, + "libertad": 2, + "libertades": 2, + "libre": 1, + "liderazgo": 1, + "limitación": -1, + "limitado": -1, + "límites": -1, + "limpiador": 2, + "limpio": 2, + "lindo": 2, + "listo": -2, + "litigio": -1, + "litigiosos": -2, + "livid": -2, + "llora": -2, + "llorando": -2, + "llorar": -2, + "lloró": -2, + "lluvioso": -1, + "lmao": 4, + "lo aprueba": 2, + "lo juro": -2, + "lo mejor": 3, + "lo siento": -1, + "lobby": -2, + "locamente": -3, + "loco": -3, + "locura": -3, + "lograr": 2, + "logro": 2, + "logros": 2, + "lol": 3, + "lolol": 4, + "lololol": 4, + "lololololol": 4, + "lool": 3, + "loool": 3, + "looool": 3, + "lucha": -2, + "luchando": -2, + "luchas": -2, + "luchó": -2, + "lucrativo": 3, + "lugares perdidos": -2, + "lúgubre": -2, + "lujo": 2, + "lunático": -3, + "lunáticos": -3, + "macabro": -2, + "maduro": 2, + "magnífico": 3, + "mal clasificado": -2, + "mal comportamiento": -2, + "mal informado": -2, + "mal reportado": -2, + "mal uso": -2, + "mal": -2, + "mala conducta": -2, + "mala suerte": -2, + "malas acciones": -2, + "malcriado": -2, + "maldad": -2, + "maldiciendo": -2, + "maldición": -1, + "maldita monada": 3, + "maldita sea": -3, + "malditamente bueno": 4, + "maldito amor": 4, + "maldito desarrollo": -2, + "maldito": -4, + "malditos amores": 4, + "malentendido": -2, + "malentendidos": -2, + "malhumorado": -1, + "malinterpretado": -1, + "malo": -3, + "maltrato": -2, + "malvado": -2, + "mancha": -2, + "manchado": -2, + "manipulación": -1, + "manipulado": -1, + "manipulando": -1, + "maravillas": 3, + "maravillosamente": 4, + "maravilloso": 4, + "mareado": -2, + "maricón": -3, + "maricones": -3, + "más amable": 2, + "más dulce": 3, + "más duro": -2, + "más feliz": 3, + "más fuerte": 2, + "más gracioso": 4, + "más grande": 3, + "más inteligente": 2, + "más loco": -2, + "más o menos": 0, + "más pobre": -2, + "más rico": 2, + "más seguro": 2, + "más sucio": -2, + "mata": -3, + "matar": -3, + "materia": 1, + "matón": -2, + "meando": -3, + "mear": -4, + "medalla": 3, + "mediocridad": -3, + "meditativo": 1, + "mejor": 2, + "mejora": 2, + "mejorada": 2, + "mejorando": 2, + "mejorar": 2, + "melancolía": -2, + "melancólico": -2, + "memorable": 1, + "memoriam": -2, + "menosprecia": -2, + "menospreciado": -2, + "menospreciar": -2, + "mentira": -4, + "mentiroso": -3, + "mentirosos": -3, + "metiendo la pata": -2, + "metódicamente": 2, + "metódico": 2, + "miedo": -2, + "mierda de mono": -3, + "mierda": -3, + "milagro": 4, + "mintió": -2, + "miope": -2, + "miopía": -2, + "miscast": -2, + "miserable": -3, + "miserablemente": -3, + "miseria": -2, + "misericordia": 2, + "mito": -1, + "moda": -2, + "modernizado": 2, + "modernizar": 2, + "molesta": -2, + "molestar": -2, + "molestas": -2, + "molestia": -2, + "molestias": -2, + "molesto": -2, + "mongering": -2, + "monopoliza": -2, + "monopolizado": -2, + "monopolizar": -2, + "monótona": -2, + "monótono": -1, + "morir de hambre": -2, + "mortal": -3, + "motivación": 1, + "motivado": 2, + "motivante": 2, + "motivar": 1, + "muere": -3, + "muerte": -2, + "muertes": -2, + "muerto": -3, + "multas": -2, + "mumpish": -2, + "muriendo": -3, + "murió": -3, + "musaraña": -4, + "narcisismo": -2, + "natural": 1, + "naufragio": -2, + "necesitado": -2, + "nefasto": -3, + "negación": -2, + "negaciones": -2, + "negado": -2, + "negador": -2, + "negadores": -2, + "negando": -2, + "negar": -2, + "negarse": -2, + "negatividad": -2, + "negativo": -2, + "negligencia": -2, + "negro": -5, + "negros": -5, + "nervios": -1, + "nerviosamente": -2, + "nervioso": -2, + "niega": -2, + "no acreditado": -1, + "no amado": -2, + "no apreciado": -2, + "no aprobado": -2, + "no apto": -2, + "no convencido": -1, + "no deseado": -2, + "no disponible": -1, + "no es bueno": -2, + "no es divertido": -3, + "no está claro": -1, + "no estoy de acuerdo": -2, + "no funciona": -3, + "no impresionado": -2, + "no involucrado": -2, + "no le gusta": -2, + "no me gusta": -2, + "no puedo estar de pie": -3, + "no": -1, + "noble": 2, + "noob": -2, + "nostálgico": -2, + "notable": 2, + "notorio": -2, + "novato": -2, + "novela": 2, + "nublado": -1, + "nueces": -3, + "nutriente": 2, + "obligado": 1, + "obligatorio": -1, + "obra maestra": 4, + "obras maestras": 4, + "obscenidad": -2, + "obsceno": -2, + "obsesionado": 2, + "obsoleto": -2, + "obstáculo": -2, + "obstáculos": -2, + "obstinado": -2, + "obstrucción": -2, + "obstruido": -2, + "obstruir": -2, + "obstruye": -2, + "odia": -3, + "odiado": -3, + "odiador": -3, + "odiadores": -3, + "odiar": -3, + "odio": -3, + "odioso": -3, + "ofender": -2, + "ofendida": -1, + "ofendido": -2, + "ofensa": -2, + "ofensas": -2, + "ofensivamente": -2, + "ofensivo": -2, + "oks": 2, + "olvidable": -1, + "olvidadizo": -2, + "olvidado": -1, + "olvidar": -1, + "oops": -2, + "oportunidad": 2, + "oportunidades": 2, + "opresión": -2, + "opresiones": -2, + "opresivo": -2, + "oprimido": -2, + "optimismo": 2, + "optimista": 2, + "orgulloso": 2, + "oro": 2, + "oscuridad": -1, + "ostracismo": -2, + "ostracista": -2, + "ouch": -2, + "oxímoron": -1, + "pacíficamente": 2, + "pacífico": 2, + "pagar": -1, + "pajero": -3, + "pánico": -3, + "para": -1, + "paradoja": -1, + "parando": -1, + "parlamentar": -1, + "parodia": -2, + "partidario": 1, + "partidarios": 1, + "pasado por alto": -1, + "pasión": 1, + "pasivamente": -1, + "pasivo": -1, + "patético": -2, + "paz": 2, + "pecado": -2, + "pecados": -2, + "pecaminoso": -3, + "peleando": -2, + "pelear": -1, + "peligro": -2, + "peligrosamente": -2, + "peligroso": -3, + "penaliza": -2, + "penalización": -2, + "penalizado": -2, + "penalizando": -2, + "penalizar": -2, + "pene": -4, + "pensativo": -1, + "peor": -3, + "perdedor": -3, + "pérdida": -3, + "pérdidas": -3, + "perdido": -2, + "perdiendo": -3, + "perdón": 2, + "perdonado": 2, + "perdonar": 2, + "perezoso": -2, + "perfección": 3, + "perfeccionado": 2, + "perfectamente": 3, + "perfecto": 2, + "perjudicial": -2, + "perjurio": -3, + "permitir": 1, + "perpetrado": -2, + "perpetrador": -2, + "perpetradores": -2, + "perplejo": -2, + "perseguido": -2, + "perseguir": -2, + "perseverante": -2, + "persigue": -2, + "persiguiendo": -2, + "perturba": -2, + "perturbado": -2, + "perturbador": -2, + "perturbar": -2, + "pervertido": -3, + "pesimismo": -2, + "pesimista": -2, + "pésimo": -2, + "petrificado": -2, + "piadoso": -2, + "picado": -2, + "pierde": -3, + "pile-up": -1, + "pillaje": -2, + "pintoresco": 2, + "pique": -2, + "pistola": -1, + "placentero": 3, + "placer": 3, + "plaga": -3, + "plagado": -3, + "plagas": -3, + "pobre": -2, + "pobremente": -2, + "pobreza": -1, + "poco atractivo": -2, + "poco científico": -2, + "poco cocinado": -2, + "poco ético": -2, + "poco fiable": -2, + "poco generoso": -2, + "poco imaginativo": -2, + "poco inteligente": -2, + "poco original": -2, + "poco profesional": -2, + "poco sofisticado": -2, + "poco sólido": -2, + "poderoso": 2, + "podrido": -3, + "polémicamente": -2, + "polémico": -2, + "polla": -5, + "popular": 3, + "popularidad": 3, + "por derecho": 2, + "por favor": 1, + "por suerte": 3, + "posesivo": -2, + "positivamente": 2, + "positivo": 2, + "pospone": -1, + "posponer": -1, + "pospuesto": -1, + "postraumático": -2, + "prblm": -2, + "prblms": -2, + "precio incorrecto": -3, + "pregonando": -2, + "premiado": 3, + "premio": 3, + "premios": 3, + "preocupación": -3, + "preocupaciones": -3, + "preocupada": -2, + "preocupado": -3, + "preocupante": -3, + "preparado": 1, + "prepotente": -1, + "presión": -1, + "presionado": -2, + "prevenido": -1, + "prevenir": -1, + "previene": -1, + "primicia": 3, + "prisión": -2, + "prisionero": -2, + "prisioneros": -2, + "privación": -3, + "privilegiado": 2, + "proactivo": 2, + "problema": -2, + "problemas": -2, + "problemático": -2, + "procesa": -1, + "procesado": -2, + "procesar": -1, + "progreso": 2, + "prohibe": -1, + "prohibición": -2, + "prohibido": -1, + "prohibiendo": -2, + "prohibir": -1, + "promesa": 1, + "promesas": 1, + "prometido": 1, + "prominente": 2, + "promocionado": -2, + "promocionando": 1, + "promover": 1, + "promueve": 1, + "propaganda": -2, + "prospecto": 1, + "prospectos": 1, + "prosperidad": 3, + "próspero": 3, + "protege": 1, + "proteger": 1, + "protegido": 1, + "protesta": -2, + "protestando": -2, + "protestantes": -2, + "protestas": -2, + "provoca": -1, + "provocado": -1, + "provocar": -1, + "prudencia": 2, + "pseudociencia": -3, + "psicopático": -2, + "pulido": 2, + "puñalada": -2, + "puñaladas": -2, + "punitivo": -2, + "punta de lanza": 2, + "puro": 1, + "pusilánime": -2, + "puta": -5, + "putas": -5, + "qué lástima": -2, + "queja": -2, + "quejándose": -2, + "quejarse": -2, + "quejas": -2, + "querer": 1, + "querida": 2, + "querido": 3, + "racismo": -3, + "racista": -3, + "racistas": -3, + "rage": -2, + "rageful": -2, + "ranter": -3, + "rápidamente": 2, + "rápido": 2, + "rapto": 2, + "raro": -2, + "ratificado": 2, + "reacción exagerada": -2, + "rebelde": -2, + "rebeldes": -2, + "rebelión": -2, + "recelo": -2, + "recesión": -2, + "rechazado": -1, + "rechazados": -1, + "rechazando": -1, + "rechazar": -1, + "rechazo": -2, + "recomendado": 2, + "recomendar": 2, + "recomienda": 2, + "recompensa": 2, + "recompensado": 2, + "recompensas": 2, + "reconfortante": 3, + "reconocimiento": 2, + "recorte": -2, + "recortes": -2, + "redimido": 2, + "refina": 1, + "refinado": 1, + "refinar": 1, + "refrescantemente": 2, + "regalo": 2, + "regañado": -2, + "regañando": -2, + "regañar": -2, + "regaño": -2, + "regocijado": 4, + "regocijándose": 4, + "regocíjate": 4, + "reinando": 1, + "relacionado con la violencia": -3, + "relajado": 2, + "relevación": 1, + "relevante": 2, + "remordimiento": -2, + "rencoroso": -2, + "rentable": 2, + "renuncia": -1, + "renunciando": -1, + "renunciar": -1, + "repelente": -2, + "repercusión": -2, + "repercusiones": -2, + "reporte erróneo": -2, + "reposo": 2, + "reprimendas": -2, + "repugnante": -2, + "repulsa": -1, + "repulsado": -2, + "repulsivo": -2, + "resbaladizo": 2, + "resbalón": -1, + "rescatado": 2, + "rescate": 2, + "rescates": 2, + "resentido": -2, + "resignado": -1, + "resistencia": 2, + "resolución": 2, + "resolver": 1, + "resolviendo": 1, + "respalda": 2, + "respaldado": 1, + "respetado": 2, + "respeto": 2, + "respetos": 2, + "respetuoso con el medio ambiente": 2, + "responsabilidad": 1, + "responsable": 2, + "restar méritos": -1, + "restaura": 1, + "restaurado": 1, + "restaurando": 1, + "restaurar": 1, + "restricción": -2, + "restrictivo": -1, + "restringe": -2, + "restringido": -2, + "restringir": -2, + "resuelto": 1, + "resuelve": 1, + "retardado": -2, + "retenido": -1, + "reticente": -2, + "retirada": -3, + "retrasado": -1, + "retraso": -1, + "retroceder": -1, + "revive": 2, + "revivir": 2, + "reza": 1, + "rezagado": -2, + "rezagados": -2, + "rezando": 1, + "ricamente": 2, + "rico": 2, + "ridiculizado": -2, + "ridículo": -3, + "riendo": 1, + "riesgo": -2, + "riesgos": -2, + "ríete": 1, + "rig": -1, + "rigurosamente": 3, + "riguroso": 3, + "riqueza": 3, + "risas": 1, + "roba": -2, + "robado": -2, + "robar": -2, + "robo": -2, + "robos": -2, + "robusto": 2, + "rofl": 4, + "roflcopter": 4, + "roflmao": 4, + "romance": 2, + "románticamente": 2, + "romántico": 2, + "ronquera": -3, + "rose": 1, + "rotfl": 4, + "rotflmfao": 4, + "rotflol": 4, + "roto": -1, + "ruido": -1, + "ruina": -2, + "ruinas": -2, + "sabiduría": 1, + "saboreando": 2, + "sabotaje": -2, + "saliente": 1, + "salud": 2, + "saludable": 2, + "saludado": 2, + "saludando": 2, + "saludar": 2, + "saludo": 2, + "saludos": 2, + "salvación": 2, + "salvado": 2, + "salvajes": -2, + "salvar": 2, + "salvavidas": 4, + "sangriento": -3, + "sarcástico": -2, + "sarnoso": -2, + "sarpullido": -2, + "satisfecho": 2, + "savange": -2, + "se ahoga": -2, + "se avecina": -1, + "se avecinaba": -1, + "se burla": -2, + "se cayó": -1, + "se compromete": 1, + "se deteriora": -2, + "se detuvo": -1, + "se disculpa": -1, + "se disculpó": -1, + "se eleva": 1, + "se esconde": -1, + "se expande": 1, + "se extiende": 1, + "se moderniza": 2, + "se muere de hambre": -2, + "se niega": -2, + "se preocupa": 2, + "se queja": -2, + "se quejó": -2, + "se regocija": 4, + "se rió": 1, + "se solidifica": 2, + "secuestrado": -2, + "secuestro": -2, + "secuestros": -2, + "sedición": -2, + "sedicioso": -2, + "seducido": -1, + "seguridad": 1, + "seguro de sí mismo": 2, + "seguro": 2, + "señorita": -2, + "sensible": 2, + "sentencia": -2, + "sentenciado": -2, + "sentimental": -1, + "sentimiento": 1, + "sereno": 2, + "seriedad": 2, + "sesgado": -2, + "sesgo": -1, + "severamente": -2, + "severo": -2, + "sexista": -2, + "sexy": 3, + "shock": -2, + "shoody": -2, + "sí": 2, + "siempre verde": -3, + "significado": 1, + "significativo": 1, + "silenciamiento": -1, + "simpatía": 2, + "simpático": 2, + "simplicidad": 1, + "simplifica demasiado": -2, + "simplificación excesiva": -2, + "simplificado en exceso": -2, + "simplificar demasiado": -2, + "sin alegría": -2, + "sin ánimo": -2, + "sin apoyo": -2, + "sin blanca": -1, + "sin confirmar": -1, + "sin corazón": -2, + "sin encanto": -3, + "sin esfuerzo": 2, + "sin esperanza": -2, + "sin espíritu": -2, + "sin éxito": -2, + "sin fisuras": 2, + "sin garantía": -2, + "sin gracia": -2, + "sin incidentes": -2, + "sin inspiración": -2, + "sin investigar": -2, + "sin miedo": 2, + "sin opción": -2, + "sin pistas": -2, + "sin preocupaciones": 1, + "sin problemas": 2, + "sin sentido": -2, + "sin tener en cuenta": -2, + "sin valor": -2, + "sin vender": -1, + "sin vida": -1, + "sinceramente": 2, + "sinceridad": 2, + "sincero": 2, + "siniestro": -2, + "slam": -2, + "slicker": 2, + "smog": -2, + "sobornado": -3, + "soborno": -3, + "sobornos": -3, + "sobrecarga": -1, + "sobreestimaciones": -2, + "sobreexcitado": -3, + "sobrepeso": -1, + "sobreprotector": -2, + "sobresaliente": 5, + "sobrevender": -2, + "sobrevendido": -2, + "sobrevendidos": -2, + "sobreventa": -2, + "sobreviviendo": 2, + "sobrevivió": 2, + "socava": -2, + "socavado": -2, + "socavando": -2, + "socavar": -2, + "sofisticado": 2, + "sofocado": -1, + "sol": 2, + "solemne": -1, + "solidaridad": 2, + "solidificado": 2, + "solidificando": 2, + "solidificar": 2, + "sólido": 2, + "solitario": -2, + "solo": -2, + "solución": 1, + "soluciones": 1, + "sombrío": -2, + "sonríe": 2, + "sonriendo": 2, + "sonrió": 2, + "sonrisas": 2, + "sorprendente": 3, + "sorprendido": -2, + "sospechar": -1, + "sospechoso": -2, + "sospechosos": -1, + "sostenibilidad": 1, + "sostenible": 2, + "sosteniblemente": 2, + "spam": -2, + "spammer": -3, + "spammers": -3, + "spamming": -2, + "sparkle": 3, + "suave": 2, + "subestima": -1, + "subestimado": -1, + "subestimar": -1, + "subvenciones": 1, + "subversivo": -2, + "suciedad": -2, + "sucio": -2, + "sue": -2, + "suelto": -3, + "sueño": 1, + "sueños": 1, + "suerte": 3, + "sufre": -2, + "sufridor": -2, + "sufrimiento": -2, + "sufrimientos": -2, + "sufrió": -2, + "sufrir": -2, + "suicida": -2, + "suicidio": -2, + "suicidios": -2, + "super": 3, + "superada": -2, + "superados en número": -2, + "superior": 2, + "supremo": 4, + "survivor": 2, + "suspender": -1, + "suspendido": -1, + "suspira": -2, + "sustancial": 1, + "sustancialmente": 1, + "tacaño": -2, + "taimado": -1, + "talento": 2, + "tarde": -2, + "tedio": -2, + "telar": -1, + "telares": -1, + "temblando": -2, + "temblor": -2, + "temblores": -2, + "tembloroso": -2, + "temer": -2, + "temerario": 2, + "temeroso": -2, + "temible": -2, + "temido": -2, + "tensión": -1, + "tenso": -2, + "tergiversa": -2, + "tergiversación": -2, + "tergiversaciones": -2, + "tergiversado": -2, + "tergiversar": -2, + "ternura": 2, + "terrible": -3, + "terriblemente": 4, + "terror": -3, + "terrorista": -2, + "terroristas": -2, + "tesoro": 2, + "tesoros": 2, + "testaruda": -2, + "tetas": -2, + "tiene éxito": 3, + "tierno": 2, + "tímido": -2, + "timorato": -2, + "tiránicamente": -3, + "tiránico": -3, + "tirano": -3, + "tiranos": -3, + "tirar": -1, + "titulado": 1, + "tolerancia": 2, + "tolerante": 2, + "tontería": -2, + "tonterías": -2, + "tonto": -2, + "tontos": -2, + "top": 2, + "tops": 2, + "tortura": -4, + "torturado": -4, + "torturando": -4, + "torturas": -4, + "totalitario": -2, + "totalitarismo": -2, + "tout": -2, + "touts": -2, + "tóxico": -3, + "tragedia": -2, + "tragedias": -2, + "trágico": -2, + "traición": -3, + "traiciona": -3, + "traicionado": -3, + "traicionar": -3, + "traicionero": -3, + "trampa": -1, + "trampas": -1, + "tramposo": -3, + "tramposos": -3, + "tranquiliza": 1, + "tranquilizador": 2, + "tranquilizar": 1, + "tranquilo": 2, + "transgredido": -2, + "transgredir": -2, + "transgresores": -2, + "trauma": -3, + "traumático": -3, + "travesura": -1, + "travesuras": -1, + "trémulo": -2, + "tribulación": -2, + "tributo": 2, + "triste": -2, + "tristemente": -2, + "tristeza": -1, + "triunfando": 3, + "triunfante": 4, + "triunfar": 3, + "triunfó": 3, + "triunfo": 4, + "troll": -2, + "trucado": -2, + "trucos": -2, + "tumor": -2, + "turbio": -2, + "ubicuo": 2, + "ugh": -2, + "una vez en la vida": 3, + "únete": 1, + "unidos": 1, + "unificado": 1, + "urgente": -1, + "uso indebido": -2, + "usos indebidos": -2, + "útil": 2, + "utilidad": 2, + "vacilando": -1, + "vacilante": -2, + "vacilar": -2, + "vacío": -1, + "vagabundo": -2, + "vago": -2, + "valentía": 2, + "valida": 1, + "validado": 1, + "validando": 1, + "validar": 1, + "valiente": 2, + "valientemente": 2, + "vencedores": 3, + "veneno": -2, + "venenos": -2, + "venerado": 3, + "vengado": -2, + "vengador": -2, + "vengadores": -2, + "vengando": -2, + "venganza": 2, + "vengar": -2, + "ventaja": 2, + "ventajas": 2, + "ventajosamente": 2, + "ventajoso": 2, + "verdadero": 2, + "veredicto": -1, + "veredictos": -1, + "vergonzoso": -2, + "vergüenza": -2, + "vertederos": -1, + "vete": -1, + "vibrante": 3, + "vicioso": -2, + "víctima": -3, + "víctimas": -3, + "victimiza": -3, + "victimización": -3, + "victimizado": -3, + "victimizar": -3, + "victor": 3, + "victoria": 3, + "victorias": 3, + "vigilante": 3, + "vigor": 3, + "vil": -3, + "vindicado": 2, + "vindicar": 2, + "vindicativo": 2, + "viola": -2, + "violación": -2, + "violaciones": -2, + "violada": -4, + "violado": -2, + "violador": -4, + "violando": -2, + "violar": -2, + "violencia": -3, + "violentamente": -3, + "violento": -3, + "virtuoso": 2, + "virulento": -2, + "visión": 1, + "visionado": 1, + "visionario": 3, + "visiones": 1, + "vitalidad": 3, + "vitamina": 1, + "vitriólico": -3, + "viudo": -1, + "vivaracha": 2, + "vivaz": 3, + "vívidamente": 2, + "vivo": 1, + "vociferante": -1, + "vomitado": -3, + "vómito": -3, + "vómitos": -3, + "vulnerabilidad": -2, + "vulnerable": -2, + "wicked": -2, + "winwin": 3, + "woebegone": -2, + "woo": 3, + "woohoo": 3, + "wooo": 4, + "woow": 4, + "worth": 2, + "wow": 4, + "wowow": 4, + "wowww": 4, + "wtf": -4, + "wtff": -4, + "wtfff": -4, + "xo": 3, + "xoxo": 3, + "xoxoxo": 4, + "xoxoxoxoxo": 4, + "zelotes": -2 +} \ No newline at end of file diff --git a/languages/es/negators.json b/languages/es/negators.json new file mode 100644 index 0000000..ce0905b --- /dev/null +++ b/languages/es/negators.json @@ -0,0 +1,56 @@ +{ + "no puedo": 1, + "no puedes": 1, + "no puede": 1, + "no podemos": 1, + "no podeis": 1, + "no pueden": 1, + "no hago": 1, + "no haces": 1, + "no hace": 1, + "no hacemos": 1, + "no haceis": 1, + "no hacen": 1, + "no soy": 1, + "no eres": 1, + "no es": 1, + "no somos": 1, + "no sois": 1, + "no son": 1, + "no podré": 1, + "no podrás": 1, + "no podrá": 1, + "no podremos": 1, + "no podreis": 1, + "no podrán": 1, + "no haré": 1, + "no harás": 1, + "no hará": 1, + "no haremos": 1, + "no haréis": 1, + "no harán": 1, + "no seré": 1, + "no serás": 1, + "no será": 1, + "no seremos": 1, + "no seréis": 1, + "no serán": 1, + "no pude": 1, + "no pudiste": 1, + "no pudo": 1, + "no pudimos": 1, + "no pudisteis": 1, + "no pudieron": 1, + "no hice": 1, + "no hiciste": 1, + "no hizo": 1, + "no hicimos": 1, + "no hicisteis": 1, + "no hicieron": 1, + "no fui": 1, + "no fuiste": 1, + "no fue": 1, + "no fuimos": 1, + "no fuisteis": 1, + "no fueron": 1 +} \ No newline at end of file diff --git a/languages/es/scoring-strategy.ts b/languages/es/scoring-strategy.ts new file mode 100644 index 0000000..73765bc --- /dev/null +++ b/languages/es/scoring-strategy.ts @@ -0,0 +1,16 @@ +import { ScoringStrategy } from '../scoring-strategy'; +import negators from './negators.json'; +import { Negators } from '../negators'; + +const _negators: Negators = negators; + +export const scoringStrategy: ScoringStrategy = (tokens: string[], cursor: number, tokenScore: number) => { + // Check if the previous token is a negator + if (cursor > 0) { + const prevtoken = tokens[cursor - 1]; + if (_negators[prevtoken]) { + tokenScore = -tokenScore; + } + } + return tokenScore; +}; diff --git a/languages/language.ts b/languages/language.ts new file mode 100644 index 0000000..11d7601 --- /dev/null +++ b/languages/language.ts @@ -0,0 +1,6 @@ +import { ScoringStrategy } from "./scoring-strategy"; + +export interface Language { + labels: { [index: string]: number; }; + scoringStrategy: ScoringStrategy; +} diff --git a/languages/negators.ts b/languages/negators.ts new file mode 100644 index 0000000..de497fd --- /dev/null +++ b/languages/negators.ts @@ -0,0 +1 @@ +export type Negators = { [index: string]: number }; diff --git a/languages/scoring-strategy.ts b/languages/scoring-strategy.ts new file mode 100644 index 0000000..32a7ab0 --- /dev/null +++ b/languages/scoring-strategy.ts @@ -0,0 +1,16 @@ + +/** + * A type for a function used in computing the score of a token. + * + * @export + * @interface ScoringStrategy + */ +export interface ScoringStrategy { + /** + * @param {string[]} tokens The tokens/labels from the language used for analysis + * @param {number} cursor An index that points to the current word in the tokens array + * @param {number} tokenScore The score of the current token from the associated language + * @returns {number} A final computed score for the current token + */ + (tokens: string[], cursor: number, tokenScore: number): number; +} diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index ff8a672..0000000 --- a/lib/index.js +++ /dev/null @@ -1,98 +0,0 @@ -var tokenize = require('./tokenize'); -var languageProcessor = require('./language-processor'); - -/** - * Constructor - * @param {Object} options - Instance options - */ -var Sentiment = function (options) { - this.options = options; -}; - -/** - * Registers the specified language - * - * @param {String} languageCode - * - Two-digit code for the language to register - * @param {Object} language - * - The language module to register - */ -Sentiment.prototype.registerLanguage = function (languageCode, language) { - languageProcessor.addLanguage(languageCode, language); -}; - -/** - * Performs sentiment analysis on the provided input 'phrase'. - * - * @param {String} phrase - * - Input phrase - * @param {Object} opts - * - Options - * @param {Object} opts.language - * - Input language code (2 digit code), defaults to 'en' - * @param {Object} opts.extras - * - Optional sentiment additions to AFINN (hash k/v pairs) - * @param {function} callback - * - Optional callback - * @return {Object} - */ -Sentiment.prototype.analyze = function (phrase, opts, callback) { - // Parse arguments - if (typeof phrase === 'undefined') phrase = ''; - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - opts = opts || {}; - - var languageCode = opts.language || 'en'; - var labels = languageProcessor.getLabels(languageCode); - - // Merge extra labels - if (typeof opts.extras === 'object') { - labels = Object.assign(labels, opts.extras); - } - - // Storage objects - var tokens = tokenize(phrase), - score = 0, - words = [], - positive = [], - negative = []; - - // Iterate over tokens - var i = tokens.length; - while (i--) { - var obj = tokens[i]; - if (!labels.hasOwnProperty(obj)) continue; - words.push(obj); - - // Apply scoring strategy - var tokenScore = labels[obj]; - // eslint-disable-next-line max-len - tokenScore = languageProcessor.applyScoringStrategy(languageCode, tokens, i, tokenScore); - if (tokenScore > 0) positive.push(obj); - if (tokenScore < 0) negative.push(obj); - score += tokenScore; - } - - var result = { - score: score, - comparative: tokens.length > 0 ? score / tokens.length : 0, - tokens: tokens, - words: words, - positive: positive, - negative: negative - }; - - // Handle optional async interface - if (typeof callback === 'function') { - process.nextTick(function () { - callback(null, result); - }); - } else { - return result; - } -}; - -module.exports = Sentiment; diff --git a/lib/language-processor.js b/lib/language-processor.js deleted file mode 100644 index fe373de..0000000 --- a/lib/language-processor.js +++ /dev/null @@ -1,89 +0,0 @@ -var emojis = require('../build/emoji.json'); - -// English is loaded by default -var enLanguage = require('../languages/en/index'); -// Add emojis -Object.assign(enLanguage.labels, emojis); - -// Cache loaded languages -var languages = { - en: enLanguage -}; - -module.exports = { - - /** - * Registers the specified language - * - * @param {String} languageCode - * - Two-digit code for the language to register - * @param {Object} language - * - The language module to register - */ - addLanguage: function (languageCode, language) { - if (!language.labels) { - throw new Error('language.labels must be defined!'); - } - // Add emojis - Object.assign(language.labels, emojis); - languages[languageCode] = language; - }, - - /** - * Retrieves a language object from the cache, - * or tries to load it from the set of supported languages - * - * @param {String} languageCode - Two-digit code for the language to fetch - */ - getLanguage: function(languageCode) { - if (!languageCode) { - // Default to english if no language was specified - return languages.en; - } - if (!languages[languageCode]) { - // Try to load specified language - try { - // eslint-disable-next-line max-len - var language = require('../languages/' + languageCode + '/index'); - // Add language to in-memory cache - this.addLanguage(languageCode, language); - } catch (err) { - throw new Error('No language found: ' + languageCode); - } - } - return languages[languageCode]; - }, - - /** - * Returns AFINN-165 weighted labels for the specified language - * - * @param {String} languageCode - Two-digit language code - * @return {Object} - */ - getLabels: function(languageCode) { - var language = this.getLanguage(languageCode); - return language.labels; - }, - - /** - * Applies a scoring strategy for the current token - * - * @param {String} languageCode - Two-digit language code - * @param {Array} tokens - Tokens of the phrase to analyze - * @param {int} cursor - Cursor of the current token being analyzed - * @param {int} tokenScore - The score of the current token being analyzed - */ - applyScoringStrategy: function(languageCode, tokens, cursor, tokenScore) { - var language = this.getLanguage(languageCode); - // Fallback to default strategy if none was specified - // eslint-disable-next-line max-len - var scoringStrategy = language.scoringStrategy || defaultScoringStrategy; - return scoringStrategy.apply(tokens, cursor, tokenScore); - } -}; - -var defaultScoringStrategy = { - apply: function(tokens, cursor, tokenScore) { - return tokenScore; - } -}; diff --git a/lib/tokenize.js b/lib/tokenize.js deleted file mode 100644 index 6ac47a4..0000000 --- a/lib/tokenize.js +++ /dev/null @@ -1,14 +0,0 @@ -/*eslint no-useless-escape: "off"*/ - -/** - * Remove special characters and return an array of tokens (words). - * @param {string} input Input string - * @return {array} Array of tokens - */ -module.exports = function(input) { - return input - .toLowerCase() - .replace(/\n/g, ' ') - .replace(/[.,\/#!$%\^&\*;:{}=_`\"~()]/g, '') - .split(' '); -}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..22cf2f0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5835 @@ +{ + "name": "sentiment", + "version": "5.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", + "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helpers": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.11", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helpers": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "dev": true, + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "dev": true + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@jest/console": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "dev": true, + "requires": { + "@jest/source-map": "^24.3.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", + "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.8.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "jest-watcher": "^24.8.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "@jest/environment": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", + "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0" + } + }, + "@jest/fake-timers": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", + "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0" + } + }, + "@jest/reporters": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", + "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.1.1", + "jest-haste-map": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.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 + } + } + }, + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "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 + } + } + }, + "@jest/test-result": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", + "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.8.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", + "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "dev": true, + "requires": { + "@jest/test-result": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0" + } + }, + "@jest/transform": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", + "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.8.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.8.0", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "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 + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "@jest/types": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", + "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^12.0.9" + } + }, + "@types/babel__core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", + "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/benchmark": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/@types/benchmark/-/benchmark-1.0.31.tgz", + "integrity": "sha512-F6fVNOkGEkSdo/19yWYOwVKGvzbTeWkR/XQYBKtGBQ9oGRjBN9f/L4aJI4sDcVPJO58Y1CJZN8va9V2BhrZapA==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/fs-extra": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", + "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", + "dev": true, + "requires": { + "handlebars": "*" + } + }, + "@types/highlight.js": { + "version": "9.12.3", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", + "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "24.0.13", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", + "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", + "dev": true, + "requires": { + "@types/jest-diff": "*" + } + }, + "@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.129", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.129.tgz", + "integrity": "sha512-oYaV0eSlnOacOr7i4X1FFdH8ttSlb57gu3I9MuStIv2CYkISEY84dNHYsC3bF6sNH7qYcu1BtVrCtQ8Q4KPTfQ==", + "dev": true + }, + "@types/marked": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz", + "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", + "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", + "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "dev": true + }, + "Sentimental": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/Sentimental/-/Sentimental-1.0.1.tgz", + "integrity": "sha1-EV45gS4tKEtEqstVInkGtFE3uS8=", + "dev": true + }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-jest": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", + "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "dev": true, + "requires": { + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.6.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", + "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.6.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 + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "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": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "^0.4.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 + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "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" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.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 + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true, + "optional": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "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.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "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 + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cssom": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "dev": true + }, + "cssstyle": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", + "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "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" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff-sequences": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "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 + }, + "escodegen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "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, + "optional": true + } + } + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expect": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", + "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "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 + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "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 + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "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 + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "highlight.js": { + "version": "9.15.6", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", + "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inquirer": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "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" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.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" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "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 + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", + "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.8.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "jest-cli": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", + "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "dev": true, + "requires": { + "@jest/core": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^12.0.2" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", + "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", + "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.8.0", + "@jest/types": "^24.8.0", + "babel-jest": "^24.8.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.8.0", + "jest-environment-node": "^24.8.0", + "jest-get-type": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.8.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", + "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" + } + }, + "jest-docblock": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", + "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0" + } + }, + "jest-environment-jsdom": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", + "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", + "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0" + } + }, + "jest-get-type": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", + "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "dev": true + }, + "jest-haste-map": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", + "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.4.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", + "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.8.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", + "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "dev": true, + "requires": { + "pretty-format": "^24.8.0" + } + }, + "jest-matcher-utils": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", + "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.8.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" + } + }, + "jest-message-util": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", + "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", + "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "dev": true + }, + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", + "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.8.0" + } + }, + "jest-runner": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", + "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.8.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-leak-detector": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", + "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.2", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^12.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "dev": true + }, + "jest-snapshot": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", + "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "expect": "^24.8.0", + "jest-diff": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.8.0", + "semver": "^5.5.0" + } + }, + "jest-util": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", + "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.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 + } + } + }, + "jest-validate": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", + "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "camelcase": "^5.0.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.8.0", + "leven": "^2.1.0", + "pretty-format": "^24.8.0" + } + }, + "jest-watcher": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", + "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.9", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.8.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "dev": true, + "requires": { + "merge-stream": "^1.0.1", + "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 + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "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" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", + "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "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": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.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-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "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-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "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 + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "platform": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", + "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", + "dev": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-format": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", + "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", + "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", + "dev": true, + "requires": { + "kleur": "^3.0.2", + "sisteransi": "^1.0.0" + } + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "react-is": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", + "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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 + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sisteransi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", + "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "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 + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "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" + } + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "table": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.3.3.tgz", + "integrity": "sha512-3wUNCgdWX6PNpOe3amTTPWPuF6VGvgzjKCaO1snFj0z7Y3mUPWf5+zDtxUVGispJkDECPmR29wbzh6bVMOHbcw==", + "dev": true, + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "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 + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "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-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-jest": { + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", + "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.14.2.tgz", + "integrity": "sha512-aEbgJXV8/KqaVhcedT7xG6d2r+mOvB5ep3eIz1KuB5sc4fDYXcepEEMdU7XSqLFO5hVPu0nllHi1QxX2h/QlpQ==", + "dev": true, + "requires": { + "@types/fs-extra": "^5.0.3", + "@types/handlebars": "^4.0.38", + "@types/highlight.js": "^9.12.3", + "@types/lodash": "^4.14.110", + "@types/marked": "^0.4.0", + "@types/minimatch": "3.0.3", + "@types/shelljs": "^0.8.0", + "fs-extra": "^7.0.0", + "handlebars": "^4.0.6", + "highlight.js": "^9.13.1", + "lodash": "^4.17.10", + "marked": "^0.4.0", + "minimatch": "^3.0.0", + "progress": "^2.0.0", + "shelljs": "^0.8.2", + "typedoc-default-themes": "^0.5.0", + "typescript": "3.2.x" + }, + "dependencies": { + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true + } + } + }, + "typedoc-default-themes": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", + "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", + "dev": true + }, + "typescript": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "dev": true + }, + "uglify-js": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.13.tgz", + "integrity": "sha512-Lho+IJlquX6sdJgyKSJx/M9y4XbDd3ekPjD8S6HYmT5yVSwDtlSuca2w5hV4g2dIsp0Y/4orbfWxKexodmFv7w==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "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, + "optional": true + } + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "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 + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + }, + "dependencies": { + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + } + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 9435654..2f7ce2e 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,9 @@ "version": "5.0.1", "license": "MIT", "homepage": "https://github.com/thisandagain/sentiment", + "contributors": [ + "Joseph Harrison-Lim " + ], "repository": { "type": "git", "url": "https://github.com/thisandagain/sentiment.git" @@ -15,24 +18,41 @@ "nlp", "sentiment analysis" ], - "main": "./lib/index.js", + "main": "./lib/src/index.js", + "types": "./lib/src/index.d.ts", "scripts": { - "build": "node ./build/build.js", - "test:lint": "eslint . --ext=js", - "test:unit": "tap test/unit/*.js", - "test:integration": "tap test/integration/*.js", - "test:benchmark": "node ./test/benchmark/performance.js", - "test:validate": "node ./test/benchmark/validate.js", - "test:coverage": "tap './test/{integration,unit}/*.js' --coverage --coverage-report=lcov", - "test": "npm run test:lint && npm run test:unit && npm run test:integration && npm run test:benchmark && npm run test:validate" + "build": "tsc -p tsconfig.build.json", + "build:emoji": "node ./emoji/build.js", + "build:types": "npm run build -- --declaration --outdir lib --emitDeclarationOnly", + "documentation": "typedoc --out docs --exclude '*.json' ./src", + "lint": "tsc --noEmit", + "test:deployment": "docker build -f ./test/deployment/Dockerfile -t sentimentdeploymenttest . && docker run --rm sentimentdeploymenttest:latest", + "test:unit": "jest -c jest.config.unit.js", + "test:integration": "jest -c jest.config.integration.js", + "test:benchmark": "npm run build && node ./test/benchmark/performance.test.js", + "test:validate": "npm run build && node ./test/benchmark/validate.test.js", + "test:coverage": "jest -c jest.config.coverage.js --coverage", + "test:watch": "jest -c jest.config.unit.js --watch", + "test": "npm run test:unit && npm run test:integration && npm run test:benchmark && npm run test:validate" + }, + "publishConfig": { + "access": "public" }, + "files": [ + "/lib", + "LICENSE" + ], "devDependencies": { + "@types/benchmark": "^1.0.31", + "@types/jest": "^24.0.13", + "@types/node": "^12.0.2", "Sentimental": "1.0.1", - "async": "^2.1.5", - "benchmark": "^2.1.0", - "eslint": "^5.0.1", - "mock-require": "^3.0.1", - "tap": "^12.0.1" + "benchmark": "^2.1.4", + "eslint": "^5.16.0", + "jest": "^24.8.0", + "ts-jest": "^24.0.2", + "typedoc": "^0.14.2", + "typescript": "^3.4.5" }, "engines": { "node": ">=8.0" diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..3daf2ae --- /dev/null +++ b/src/index.ts @@ -0,0 +1,11 @@ +import { Sentiment } from './sentiment-analyzer'; + +export { AnalyzeOptions } from './sentiment-analyzer'; +export { LanguageProcessor, LanguageInput } from './language-processor'; +export { tokenize } from './tokenize'; +export { ScoringStrategy } from '../languages/scoring-strategy'; +export { Sentiment }; + +const sentiment = new Sentiment(); + +export default sentiment; diff --git a/src/language-processor.ts b/src/language-processor.ts new file mode 100644 index 0000000..27e1d3d --- /dev/null +++ b/src/language-processor.ts @@ -0,0 +1,145 @@ +import emojis from '../emoji/emoji.json'; + +// English is loaded by default +import { english } from '../languages/en'; +import { Language } from '../languages/language'; +import { join } from 'path'; +import { ScoringStrategy } from './scoring-strategy'; + +type Languages = { [index: string]: Language }; + +export interface LanguageInput extends Partial { + labels: { [index: string]: number; }; + scoringStrategy?: ScoringStrategy; +} + +// Merge English with Emojis +Object.assign(english.labels, emojis); + +const defaultScoringStrategy: ScoringStrategy = (_tokens, _cursor, tokenScore) => tokenScore; + + +/** + * Dynamically loads a language from the languages directory. + * This directory MUST include: + * - index.ts + * - labels.json + * - scoring-strategy.ts + * + * > Note: Remember that the .ts files will actually be .js at runtime. + * @param {string} languageCode + */ +function loadLanguage(languageCode: string): Language { + const languagePath = join(__dirname, '..', 'languages', languageCode); + const language: Language = require(languagePath).default; + if (!language) { + throw new Error('No language found: ' + languageCode); + } + if (!language.labels) { + throw new Error( + `Could not load labels for language: ${languageCode}.` + + `Make sure ${join('languages', languageCode, 'labels.json')} exists.` + ); + } + if (!language.scoringStrategy) { + console.warn( + `Scoring strategy not found for language: ${languageCode}. ` + + `Using default strategy instead.` + ); + language.scoringStrategy = defaultScoringStrategy; + } + return language; +} + + +export class LanguageProcessor { + private readonly _languages: Languages; + + constructor() { + this._languages = { en: english }; + } + + /** + * Registers the specified language + * @param {string} languageCode Two-digit code for the language to register + * @param {Language} language The language module to register + */ + addLanguage(languageCode: string, language: LanguageInput): void { + if (!language.labels) { + throw new Error('language.labels must be defined.'); + } + if (Object.keys(language.labels).length === 0) { + throw new Error('language.labels must contain fields.'); + } + Object.assign(language.labels, emojis); + + if(language.scoringStrategy) { + this._languages[languageCode] = { + labels: language.labels, + scoringStrategy: language.scoringStrategy + }; + } else { + this._languages[languageCode] = { + labels: language.labels, + scoringStrategy: defaultScoringStrategy + }; + } + + } + + /** + * Retrieves a language object from the cache, + * or tries to load it from the set of supported languages + * @param {string | undefined} languageCode Two-digit code for the language to fetch + * @returns {Promise} The language associated with the given language code + * @memberof LanguageProcessor + */ + getLanguage(languageCode?: string): Language { + // Default to english if no language was specified + if (!languageCode) { + return this._languages.en; + } + // Try loading from the cache + if (this._languages[languageCode]) { + return this._languages[languageCode]; + } + // Try loading language from one of the language roots in the languages directory + const language = loadLanguage(languageCode); + // Add language to in-memory cache + this.addLanguage(languageCode, language); + return language; + } + + /** + * Returns AFINN-165 weighted labels for the specified language + * + * @param {string} languageCode Two-digit language code + * @returns + * @memberof LanguageProcessor + */ + getLabels(languageCode: string): { [index: string]: number } { + const language = this.getLanguage(languageCode); + if (!language) { + throw new Error(`Could not get labels for language: ${languageCode}`); + } + return language.labels; + } + + /** + * Applies a scoring strategy for the current token + * + * @param {string} languageCode Two-digit language code + * @param {string[]} tokens Tokens of the phrase to analyze + * @param {number} cursor Cursor of the current token being analyzed + * @param {number} tokenScore The score of the current token being analyzed + * @returns + * @memberof LanguageProcessor + */ + applyScoringStrategy(languageCode: string, tokens: string[], cursor: number, tokenScore: number) { + const language = this.getLanguage(languageCode); + // Fallback to default strategy if none was specified + // eslint-disable-next-line max-len + const scoringStrategy = language.scoringStrategy || defaultScoringStrategy; + return scoringStrategy(tokens, cursor, tokenScore); + } +} diff --git a/src/sentiment-analyzer.ts b/src/sentiment-analyzer.ts new file mode 100644 index 0000000..7af61d3 --- /dev/null +++ b/src/sentiment-analyzer.ts @@ -0,0 +1,180 @@ +import { tokenize } from './tokenize'; +import { LanguageProcessor, LanguageInput } from './language-processor'; + +/** + * The final result of the analysis. + * + * @interface AnalyzeResult + */ +interface AnalyzeResult { + /** + * Score calculated by adding the sentiment values of recongnized words + * + * @type {number} + * @memberof AnalyzeResult + */ + score: number; + /** + * Comparative score of the input string + * + * @type {number} + * @memberof AnalyzeResult + */ + comparative: number; + /** + * All the tokens like words or emojis found in the input string + * + * @type {string[]} + * @memberof AnalyzeResult + */ + tokens: string[]; + /** + * List of words from input string that were found in AFINN list + * + * @type {string[]} + * @memberof AnalyzeResult + */ + words: string[]; + /** + * List of postive words in input string that were found in AFINN list + * + * @type {string[]} + * @memberof AnalyzeResult + */ + positive: string[]; + /** + * List of negative words in input string that were found in AFINN list + * + * @type {string[]} + * @memberof AnalyzeResult + */ + negative: string[]; +} + +/** + * Options for the Sentiment Analyzer. + * + * @interface AnalyzeOptions + */ +export interface AnalyzeOptions { + /** + * An optional object with strings mapped to their sentiment value. + * Optional sentiment additions to AFINN (hash k/v pairs) + * @type {{ + * [word: string]: number; + * } | undefined} + * @memberof AnalyzeOptions + */ + extras?: { + [word: string]: number; + }; + /** + * An optional 2 letter language code to select one of the languages stored in the languages folder. + * If not used, the language will be set to English. + * @type {string | undefined} + * @memberof AnalyzeOptions + */ + languageCode?: string; +} + +/** + * Creates an instance of Sentiment; a tool for AFINN Sentiment analysis. + * Comes prepacked with English language defaults, and has the ability to be extended + * with new languages. + * + * @export + * @class Sentiment + */ +export class Sentiment { + private readonly _languageProcessor: LanguageProcessor; + + /** + * Creates an instance of Sentiment. + * @memberof Sentiment + */ + constructor() { + this._languageProcessor = new LanguageProcessor(); + } + + /** + * Registers the specified language + * @param {string} languageCode Two-digit code for the language to register + * @param {LanguageInput} language The language module to register + */ + registerLanguage(languageCode: string, language: LanguageInput) { + this._languageProcessor.addLanguage(languageCode, language); + } + + analyze(phrase: string): AnalyzeResult; + analyze(phrase: string, opts: AnalyzeOptions): AnalyzeResult; + + /** + * Performs sentiment analysis on the provided input 'phrase'. + * + * @param {string} phrase Input phrase + * @param {AnalyzeOptions} analyzeOptions Options such as the language code or extra AFINN pairs + * @memberof Sentiment + */ + analyze(phrase: string, analyzeOptions?: AnalyzeOptions): AnalyzeResult { + let opts: AnalyzeOptions = {}; + if (analyzeOptions) { + if (analyzeOptions.extras || analyzeOptions.languageCode) { + opts = analyzeOptions || {}; + } + else { + throw new Error( + `Invalid options given for analyze.\n` + + `Options given: ${Object.keys(analyzeOptions)}.\n` + + `Expected any of: extras, languageCode.\n` + + `Example: analyze('foo bar baz', { extras: { baz: 2 }, languageCode: 'en' })` + ); + } + } + + const languageCode = opts.languageCode || 'en'; + const labels = this._languageProcessor.getLabels(languageCode); + + // Merge extra labels + if (typeof opts.extras === 'object') { + Object.assign(labels, opts.extras); + } + + const tokens = tokenize(phrase); + let score: number = 0; + const words: string[] = []; + const positive: string[] = []; + const negative: string[] = []; + + // Iterate over tokens + let i = tokens.length; + while (i--) { + const token = tokens[i]; + if (!labels.hasOwnProperty(token)) { + continue; + } + words.push(token); + + // Apply scoring strategy + const tokenScore = this._languageProcessor + .applyScoringStrategy(languageCode, tokens, i, labels[token]); + + if (tokenScore > 0) + positive.push(token); + if (tokenScore < 0) + negative.push(token); + score += tokenScore; + } + + const result: AnalyzeResult = { + score, + comparative: tokens.length > 0 ? score / tokens.length : 0, + tokens, + words, + positive, + negative + }; + + return result; + } +} + diff --git a/src/tokenize.ts b/src/tokenize.ts new file mode 100644 index 0000000..1189d0d --- /dev/null +++ b/src/tokenize.ts @@ -0,0 +1,20 @@ +/*eslint no-useless-escape: "off"*/ + +/** + * Remove special characters and return an array of tokens (words). + * @param {string} input Input string + * @return {array} Array of tokens + */ +export function tokenize(input: string): Array { + // Check type for js users and give a more meaningful message than: + // "Uncaught TypeError: input.toLowerCase is not a function" + if(typeof input !== 'string') { + throw new Error(`Cannot tokenize non-string values.\nValue received: ${input}`); + } + return input + .toLowerCase() + .replace(/\n/g, ' ') + .replace(/[.,\/#!$%\^&\*;:{}=_`\"~()]/g, '') + .split(' ') + .filter(s => s.length > 0); +}; diff --git a/test/benchmark/performance.js b/test/benchmark/performance.js deleted file mode 100644 index caa9499..0000000 --- a/test/benchmark/performance.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Runs benchmarks against sentiment and Sentimental. - * - * @package sentiment - * @author Andrew Sliwinski - */ - -/** - * Dependencies - */ -var Benchmark = require('benchmark'); -var suite = new Benchmark.Suite(); - -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); -var sentimental = require('Sentimental'); - -/** - * Test data - */ -var stringShort = 'This cat is totally awesome'; -var stringLong = require('../fixtures/corpus'); - -/** - * Setup - */ -suite - .add('sentiment (Latest) - Short ', function () { - sentiment.analyze(stringShort); - }) - .add('sentiment (Latest) - Long ', function () { - sentiment.analyze(stringLong); - }) - .add('Sentimental (1.0.1) - Short', function () { - sentimental.analyze(stringShort); - }) - .add('Sentimental (1.0.1) - Long ', function () { - sentimental.analyze(stringLong); - }) - .on('cycle', function (event) { - process.stdout.write(String(event.target) + '\n'); - }) - .run({ - minSamples: 100, - delay: 2 - }); diff --git a/test/benchmark/performance.test.js b/test/benchmark/performance.test.js new file mode 100644 index 0000000..7ea4945 --- /dev/null +++ b/test/benchmark/performance.test.js @@ -0,0 +1,44 @@ +/** + * Runs benchmarks against sentiment and Sentimental. + * + * @package sentiment + * @author Andrew Sliwinski + */ + +/** + * Dependencies + */ +const { Suite } = require('benchmark'); +const { Sentiment } = require('../../lib/src'); +const sentimental = require('Sentimental'); + +/** + * Test data + */ +const stringShort = 'This cat is totally awesome'; +const { corpus } = require('../fixtures/corpus.json'); +const sentiment = new Sentiment(); +/** + * Setup + */ +const suite = new Suite(); +suite + .add('sentiment (Latest) - Short:', function () { + sentiment.analyze(stringShort); + }) + .add('sentiment (Latest) - Long :', function () { + sentiment.analyze(corpus); + }) + .add('Sentimental (1.0.1) - Short:', function () { + sentimental.analyze(stringShort); + }) + .add('Sentimental (1.0.1) - Long :', function () { + sentimental.analyze(corpus); + }) + .on('cycle', function (event) { + console.info(String(event.target) + '\n'); + }) + .run({ + minSamples: 100, + delay: 2 + }); diff --git a/test/benchmark/validate.js b/test/benchmark/validate.js deleted file mode 100644 index 7a7d0ff..0000000 --- a/test/benchmark/validate.js +++ /dev/null @@ -1,33 +0,0 @@ -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var amazon = require('../fixtures/amazon.json'); -var imdb = require('../fixtures/imdb.json'); -var yelp = require('../fixtures/yelp.json'); - -function validate (set) { - // Storage object - var obj = { - pass: 0, - fail: 0 - }; - - // Iterate over each word/class pair in the dataset - for (var i in set) { - var score = sentiment.analyze(set[i].text).comparative; - if (set[i].class === 0) { - if (score >= 0) obj.fail++; - if (score < 0) obj.pass++; - } else { - if (score >= 0) obj.pass++; - if (score < 0) obj.fail++; - } - } - - // Calculate Rand accuracy - return obj.pass / (obj.pass + obj.fail); -} - -process.stdout.write('Amazon accuracy: ' + validate(amazon) + '\n'); -process.stdout.write('IMDB accuracy: ' + validate(imdb) + '\n'); -process.stdout.write('Yelp accuracy: ' + validate(yelp) + '\n'); diff --git a/test/benchmark/validate.test.js b/test/benchmark/validate.test.js new file mode 100644 index 0000000..c2397c4 --- /dev/null +++ b/test/benchmark/validate.test.js @@ -0,0 +1,54 @@ +const { Sentiment } = require('../../lib/src'); +/** + * @type {Array<{text: string, class: number}>} + */ +const amazon = require('../fixtures/amazon.json'); +/** + * @type {Array<{text: string, class: number}>} + */ +const imdb = require('../fixtures/imdb.json'); +/** + * @type {Array<{text: string, class: number}>} + */ +const yelp = require('../fixtures/yelp.json'); + + +/** + * Calculate the accuracy of Sentiment using datasets from Amazon, IMDB, and Yelp. + * + * @param {Array<{text: string, class: number}>} set + * @returns + */ +function validate(set) { + const sentiment = new Sentiment(); + + const tally = { + pass: 0, + fail: 0 + }; + + // Iterate over each word/class pair in the dataset + for (let pair of set) { + const score = sentiment.analyze(pair.text).comparative; + if (pair.class === 0) { + if (score >= 0) tally.fail++; + if (score < 0) tally.pass++; + } else { + if (score >= 0) tally.pass++; + if (score < 0) tally.fail++; + } + } + + // Calculate Rand accuracy + return tally.pass / (tally.pass + tally.fail); +} + + +void function run() { + const amazonAccuracy = validate(amazon); + const imdbAccuracy = validate(imdb); + const yelpAccuracy = validate(yelp); + console.log('Amazon accuracy: ' + amazonAccuracy + '\n'); + console.log('IMDB accuracy: ' + imdbAccuracy + '\n'); + console.log('Yelp accuracy: ' + yelpAccuracy + '\n'); +}(); diff --git a/test/deployment/Dockerfile b/test/deployment/Dockerfile new file mode 100644 index 0000000..a74fe7a --- /dev/null +++ b/test/deployment/Dockerfile @@ -0,0 +1,10 @@ +# Must be ran with -f from the project root + +FROM node:12.0.0-slim +WORKDIR /sentiment +COPY . . +RUN npm ci +RUN npm run build +WORKDIR /sentiment/test/deployment +RUN npm i /sentiment +ENTRYPOINT [ "node", "." ] diff --git a/test/deployment/index.js b/test/deployment/index.js new file mode 100644 index 0000000..aaccbbd --- /dev/null +++ b/test/deployment/index.js @@ -0,0 +1,14 @@ +const assert = require('assert'); + +const { Sentiment } = require('sentiment'); +assert.ok(Sentiment); + +const sentiment = new Sentiment(); +assert.ok(sentiment); + +const result = sentiment.analyze('hello world'); +assert.ok(result); + +console.info('Deployment test successful.'); + +process.exit(0); diff --git a/test/deployment/package.json b/test/deployment/package.json new file mode 100644 index 0000000..a85535e --- /dev/null +++ b/test/deployment/package.json @@ -0,0 +1,11 @@ +{ + "name": "delpoyment-test", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Joseph Harrison-Lim", + "license": "ISC" +} diff --git a/test/fixtures/corpus.js b/test/fixtures/corpus.js deleted file mode 100644 index 4b67a64..0000000 --- a/test/fixtures/corpus.js +++ /dev/null @@ -1,5 +0,0 @@ -/* eslint max-len: [1, 8000, 4] */ -/* eslint quotes: [1, "double"] */ - -// http://www.gutenberg.org/files/2701/2701-h/2701-h.htm -module.exports = "I stuffed a shirt or two into my old carpet-bag, tucked it under my arm, and started for Cape Horn and the Pacific. Quitting the good city of old Manhatto, I duly arrived in New Bedford. It was a Saturday night in December. Much was I disappointed upon learning that the little packet for Nantucket had already sailed, and that no way of reaching that place would offer, till the following Monday. As most young candidates for the pains and penalties of whaling stop at this same New Bedford, thence to embark on their voyage, it may as well be related that I, for one, had no idea of so doing. For my mind was made up to sail in no other than a Nantucket craft, because there was a fine, boisterous something about everything connected with that famous old island, which amazingly pleased me. Besides though New Bedford has of late been gradually monopolising the business of whaling, and though in this matter poor old Nantucket is now much behind her, yet Nantucket was her great original—the Tyre of this Carthage;—the place where the first dead American whale was stranded. Where else but from Nantucket did those aboriginal whalemen, the Red-Men, first sally out in canoes to give chase to the Leviathan? And where but from Nantucket, too, did that first adventurous little sloop put forth, partly laden with imported cobblestones—so goes the story—to throw at the whales, in order to discover when they were nigh enough to risk a harpoon from the bowsprit? Now having a night, a day, and still another night following before me in New Bedford, ere I could embark for my destined port, it became a matter of concernment where I was to eat and sleep meanwhile. It was a very dubious-looking, nay, a very dark and dismal night, bitingly cold and cheerless. I knew no one in the place. With anxious grapnels I had sounded my pocket, and only brought up a few pieces of silver,—So, wherever you go, Ishmael, said I to myself, as I stood in the middle of a dreary street shouldering my bag, and comparing the gloom towards the north with the darkness towards the south—wherever in your wisdom you may conclude to lodge for the night, my dear Ishmael, be sure to inquire the price, and don't be too particular. With halting steps I paced the streets, and passed the sign of \"The Crossed Harpoons\"—but it looked too expensive and jolly there. Further on, from the bright red windows of the \"Sword-Fish Inn,\" there came such fervent rays, that it seemed to have melted the packed snow and ice from before the house, for everywhere else the congealed frost lay ten inches thick in a hard, asphaltic pavement,—rather weary for me, when I struck my foot against the flinty projections, because from hard, remorseless service the soles of my boots were in a most miserable plight. Too expensive and jolly, again thought I, pausing one moment to watch the broad glare in the street, and hear the sounds of the tinkling glasses within. But go on, Ishmael, said I at last; don't you hear? get away from before the door; your patched boots are stopping the way. So on I went. I now by instinct followed the streets that took me waterward, for there, doubtless, were the cheapest, if not the cheeriest inns. Such dreary streets! blocks of blackness, not houses, on either hand, and here and there a candle, like a candle moving about in a tomb. At this hour of the night, of the last day of the week, that quarter of the town proved all but deserted. But presently I came to a smoky light proceeding from a low, wide building, the door of which stood invitingly open. It had a careless look, as if it were meant for the uses of the public; so, entering, the first thing I did was to stumble over an ash-box in the porch. Ha! thought I, ha, as the flying particles almost choked me, are these ashes from that destroyed city, Gomorrah? But \"The Crossed Harpoons,\" and \"The Sword-Fish?\"—this, then must needs be the sign of \"The Trap.\" However, I picked myself up and hearing a loud voice within, pushed on and opened a second, interior door. It seemed the great Black Parliament sitting in Tophet. A hundred black faces turned round in their rows to peer; and beyond, a black Angel of Doom was beating a book in a pulpit. It was a negro church; and the preacher's text was about the blackness of darkness, and the weeping and wailing and teeth-gnashing there. Ha, Ishmael, muttered I, backing out, Wretched entertainment at the sign of 'The Trap!' Moving on, I at last came to a dim sort of light not far from the docks, and heard a forlorn creaking in the air; and looking up, saw a swinging sign over the door with a white painting upon it, faintly representing a tall straight jet of misty spray, and these words underneath—\"The Spouter Inn:—Peter Coffin.\" Coffin?—Spouter?—Rather ominous in that particular connexion, thought I. But it is a common name in Nantucket, they say, and I suppose this Peter here is an emigrant from there. As the light looked so dim, and the place, for the time, looked quiet enough, and the dilapidated little wooden house itself looked as if it might have been carted here from the ruins of some burnt district, and as the swinging sign had a poverty-stricken sort of creak to it, I thought that here was the very spot for cheap lodgings, and the best of pea coffee. It was a queer sort of place—a gable-ended old house, one side palsied as it were, and leaning over sadly. It stood on a sharp bleak corner, where that tempestuous wind Euroclydon kept up a worse howling than ever it did about poor Paul's tossed craft. Euroclydon, nevertheless, is a mighty pleasant zephyr to any one in-doors, with his feet on the hob quietly toasting for bed. \"In judging of that tempestuous wind called Euroclydon,\" says an old writer—of whose works I possess the only copy extant—\"it maketh a marvellous difference, whether thou lookest out at it from a glass window where the frost is all on the outside, or whether thou observest it from that sashless window, where the frost is on both sides, and of which the wight Death is the only glazier.\" True enough, thought I, as this passage occurred to my mind—old black-letter, thou reasonest well. Yes, these eyes are windows, and this body of mine is the house. What a pity they didn't stop up the chinks and the crannies though, and thrust in a little lint here and there. But it's too late to make any improvements now. The universe is finished; the copestone is on, and the chips were carted off a million years ago. Poor Lazarus there, chattering his teeth against the curbstone for his pillow, and shaking off his tatters with his shiverings, he might plug up both ears with rags, and put a corn-cob into his mouth, and yet that would not keep out the tempestuous Euroclydon. Euroclydon! says old Dives, in his red silken wrapper—(he had a redder one afterwards) pooh, pooh! What a fine frosty night; how Orion glitters; what northern lights! Let them talk of their oriental summer climes of everlasting conservatories; give me the privilege of making my own summer with my own coals. But what thinks Lazarus? Can he warm his blue hands by holding them up to the grand northern lights? Would not Lazarus rather be in Sumatra than here? Would he not far rather lay him down lengthwise along the line of the equator; yea, ye gods! go down to the fiery pit itself, in order to keep out this frost? Now, that Lazarus should lie stranded there on the curbstone before the door of Dives, this is more wonderful than that an iceberg should be moored to one of the Moluccas. Yet Dives himself, he too lives like a Czar in an ice palace made of frozen sighs, and being a president of a temperance society, he only drinks the tepid tears of orphans. But no more of this blubbering now, we are going a-whaling, and there is plenty of that yet to come. Let us scrape the ice from our frosted feet, and see what sort of a place this \"Spouter\" may be."; diff --git a/test/fixtures/corpus.json b/test/fixtures/corpus.json new file mode 100644 index 0000000..f9677ba --- /dev/null +++ b/test/fixtures/corpus.json @@ -0,0 +1,3 @@ +{ + "corpus": "I stuffed a shirt or two into my old carpet-bag, tucked it under my arm, and started for Cape Horn and the Pacific. Quitting the good city of old Manhatto, I duly arrived in New Bedford. It was a Saturday night in December. Much was I disappointed upon learning that the little packet for Nantucket had already sailed, and that no way of reaching that place would offer, till the following Monday. As most young candidates for the pains and penalties of whaling stop at this same New Bedford, thence to embark on their voyage, it may as well be related that I, for one, had no idea of so doing. For my mind was made up to sail in no other than a Nantucket craft, because there was a fine, boisterous something about everything connected with that famous old island, which amazingly pleased me. Besides though New Bedford has of late been gradually monopolising the business of whaling, and though in this matter poor old Nantucket is now much behind her, yet Nantucket was her great original—the Tyre of this Carthage;—the place where the first dead American whale was stranded. Where else but from Nantucket did those aboriginal whalemen, the Red-Men, first sally out in canoes to give chase to the Leviathan? And where but from Nantucket, too, did that first adventurous little sloop put forth, partly laden with imported cobblestones—so goes the story—to throw at the whales, in order to discover when they were nigh enough to risk a harpoon from the bowsprit? Now having a night, a day, and still another night following before me in New Bedford, ere I could embark for my destined port, it became a matter of concernment where I was to eat and sleep meanwhile. It was a very dubious-looking, nay, a very dark and dismal night, bitingly cold and cheerless. I knew no one in the place. With anxious grapnels I had sounded my pocket, and only brought up a few pieces of silver,—So, wherever you go, Ishmael, said I to myself, as I stood in the middle of a dreary street shouldering my bag, and comparing the gloom towards the north with the darkness towards the south—wherever in your wisdom you may conclude to lodge for the night, my dear Ishmael, be sure to inquire the price, and don't be too particular. With halting steps I paced the streets, and passed the sign of \"The Crossed Harpoons\"—but it looked too expensive and jolly there. Further on, from the bright red windows of the \"Sword-Fish Inn,\" there came such fervent rays, that it seemed to have melted the packed snow and ice from before the house, for everywhere else the congealed frost lay ten inches thick in a hard, asphaltic pavement,—rather weary for me, when I struck my foot against the flinty projections, because from hard, remorseless service the soles of my boots were in a most miserable plight. Too expensive and jolly, again thought I, pausing one moment to watch the broad glare in the street, and hear the sounds of the tinkling glasses within. But go on, Ishmael, said I at last; don't you hear? get away from before the door; your patched boots are stopping the way. So on I went. I now by instinct followed the streets that took me waterward, for there, doubtless, were the cheapest, if not the cheeriest inns. Such dreary streets! blocks of blackness, not houses, on either hand, and here and there a candle, like a candle moving about in a tomb. At this hour of the night, of the last day of the week, that quarter of the town proved all but deserted. But presently I came to a smoky light proceeding from a low, wide building, the door of which stood invitingly open. It had a careless look, as if it were meant for the uses of the public; so, entering, the first thing I did was to stumble over an ash-box in the porch. Ha! thought I, ha, as the flying particles almost choked me, are these ashes from that destroyed city, Gomorrah? But \"The Crossed Harpoons,\" and \"The Sword-Fish?\"—this, then must needs be the sign of \"The Trap.\" However, I picked myself up and hearing a loud voice within, pushed on and opened a second, interior door. It seemed the great Black Parliament sitting in Tophet. A hundred black faces turned round in their rows to peer; and beyond, a black Angel of Doom was beating a book in a pulpit. It was a negro church; and the preacher's text was about the blackness of darkness, and the weeping and wailing and teeth-gnashing there. Ha, Ishmael, muttered I, backing out, Wretched entertainment at the sign of 'The Trap!' Moving on, I at last came to a dim sort of light not far from the docks, and heard a forlorn creaking in the air; and looking up, saw a swinging sign over the door with a white painting upon it, faintly representing a tall straight jet of misty spray, and these words underneath—\"The Spouter Inn:—Peter Coffin.\" Coffin?—Spouter?—Rather ominous in that particular connexion, thought I. But it is a common name in Nantucket, they say, and I suppose this Peter here is an emigrant from there. As the light looked so dim, and the place, for the time, looked quiet enough, and the dilapidated little wooden house itself looked as if it might have been carted here from the ruins of some burnt district, and as the swinging sign had a poverty-stricken sort of creak to it, I thought that here was the very spot for cheap lodgings, and the best of pea coffee. It was a queer sort of place—a gable-ended old house, one side palsied as it were, and leaning over sadly. It stood on a sharp bleak corner, where that tempestuous wind Euroclydon kept up a worse howling than ever it did about poor Paul's tossed craft. Euroclydon, nevertheless, is a mighty pleasant zephyr to any one in-doors, with his feet on the hob quietly toasting for bed. \"In judging of that tempestuous wind called Euroclydon,\" says an old writer—of whose works I possess the only copy extant—\"it maketh a marvellous difference, whether thou lookest out at it from a glass window where the frost is all on the outside, or whether thou observest it from that sashless window, where the frost is on both sides, and of which the wight Death is the only glazier.\" True enough, thought I, as this passage occurred to my mind—old black-letter, thou reasonest well. Yes, these eyes are windows, and this body of mine is the house. What a pity they didn't stop up the chinks and the crannies though, and thrust in a little lint here and there. But it's too late to make any improvements now. The universe is finished; the copestone is on, and the chips were carted off a million years ago. Poor Lazarus there, chattering his teeth against the curbstone for his pillow, and shaking off his tatters with his shiverings, he might plug up both ears with rags, and put a corn-cob into his mouth, and yet that would not keep out the tempestuous Euroclydon. Euroclydon! says old Dives, in his red silken wrapper—(he had a redder one afterwards) pooh, pooh! What a fine frosty night; how Orion glitters; what northern lights! Let them talk of their oriental summer climes of everlasting conservatories; give me the privilege of making my own summer with my own coals. But what thinks Lazarus? Can he warm his blue hands by holding them up to the grand northern lights? Would not Lazarus rather be in Sumatra than here? Would he not far rather lay him down lengthwise along the line of the equator; yea, ye gods! go down to the fiery pit itself, in order to keep out this frost? Now, that Lazarus should lie stranded there on the curbstone before the door of Dives, this is more wonderful than that an iceberg should be moored to one of the Moluccas. Yet Dives himself, he too lives like a Czar in an ice palace made of frozen sighs, and being a president of a temperance society, he only drinks the tepid tears of orphans. But no more of this blubbering now, we are going a-whaling, and there is plenty of that yet to come. Let us scrape the ice from our frosted feet, and see what sort of a place this \"Spouter\" may be." +} \ No newline at end of file diff --git a/test/fixtures/fuzz.js b/test/fixtures/fuzz.js deleted file mode 100644 index 5d1e453..0000000 --- a/test/fixtures/fuzz.js +++ /dev/null @@ -1,33 +0,0 @@ -function rand (limit) { - return Math.floor(Math.random() * limit); -} - -function createRandomWord (length) { - var consonants = 'bcdfghjklmnpqrstvwxyz!@#$%^&*()_+":;\'?><~`'; - var vowels = 'aeiou'; - var word = ''; - - // Split - consonants = consonants.split(''); - vowels = vowels.split(''); - - // Create word - for (var i = 0; i < length / 2; i++) { - var randConsonant = consonants[rand(consonants.length)]; - var randVowel = vowels[rand(vowels.length)]; - - word += (i===0) ? randConsonant.toUpperCase() : randConsonant; - word += i*2<~`'; + const vowels = 'aeiou'; + let word = ''; + + for (let i = 0; i < length / 2; i++) { + const randConsonant = consonants[rand(consonants.length)]; + const randVowel = vowels[rand(vowels.length)]; + + word += (i === 0) ? randConsonant.toUpperCase() : randConsonant; + word += i * 2 < length - 1 ? randVowel : ''; + } + + return word; +} + +export function fuzz(length: number) { + let words = ''; + for (let i = 0; i < length; i++) { + words += `${createRandomWord(rand(20))} `; + } + words = words.trimRight(); + return words; +}; diff --git a/test/integration/add_lang.js b/test/integration/add_lang.js deleted file mode 100644 index b029c5c..0000000 --- a/test/integration/add_lang.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -test('adding a language with no labels attribute should throw', function (t) { - t.throws(function () { - sentiment.registerLanguage('xx', {}); - }, new Error('language.labels must be defined!')); - t.end(); -}); diff --git a/test/integration/async_inject.js b/test/integration/async_inject.js deleted file mode 100644 index 59077b8..0000000 --- a/test/integration/async_inject.js +++ /dev/null @@ -1,19 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool'; -var options = { - extras: { 'cool': 100 } -}; - -sentiment.analyze(input, options, function (err, result) { - test('asynchronous inject', function (t) { - t.type(result, 'object'); - t.equal(result.score, 100); - t.equal(result.comparative, 25); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); - }); -}); diff --git a/test/integration/async_negative.js b/test/integration/async_negative.js deleted file mode 100644 index ac60a27..0000000 --- a/test/integration/async_negative.js +++ /dev/null @@ -1,16 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'Hey you worthless scumbag'; - -sentiment.analyze(input, function (err, result) { - test('asynchronous negative', function (t) { - t.type(result, 'object'); - t.equal(result.score, -6); - t.equal(result.comparative, -1.5); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 2); - t.end(); - }); -}); diff --git a/test/integration/async_negative_text_and_emoji.js b/test/integration/async_negative_text_and_emoji.js deleted file mode 100644 index dc5c9d1..0000000 --- a/test/integration/async_negative_text_and_emoji.js +++ /dev/null @@ -1,16 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'Hey you worthless scumbag 😦'; - -sentiment.analyze(input, function (err, result) { - test('asynchronous negative text and emoji', function (t) { - t.type(result, 'object'); - t.equal(result.score, -8); - t.equal(result.comparative, -1.6); - t.equal(result.tokens.length, 5); - t.equal(result.words.length, 3); - t.end(); - }); -}); diff --git a/test/integration/async_positive.js b/test/integration/async_positive.js deleted file mode 100644 index afb2f0a..0000000 --- a/test/integration/async_positive.js +++ /dev/null @@ -1,16 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool'; - -sentiment.analyze(input, function (err, result) { - test('asynchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 1); - t.equal(result.comparative, 0.25); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); - }); -}); diff --git a/test/integration/async_positive_text_and_emoji.js b/test/integration/async_positive_text_and_emoji.js deleted file mode 100644 index abf18d5..0000000 --- a/test/integration/async_positive_text_and_emoji.js +++ /dev/null @@ -1,16 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool 😃'; - -sentiment.analyze(input, function (err, result) { - test('asynchronous positive text and emoji', function (t) { - t.type(result, 'object'); - t.equal(result.score, 3); - t.equal(result.comparative, 0.6); - t.equal(result.tokens.length, 5); - t.equal(result.words.length, 2); - t.end(); - }); -}); diff --git a/test/integration/corpus.test.ts b/test/integration/corpus.test.ts new file mode 100644 index 0000000..76c59bf --- /dev/null +++ b/test/integration/corpus.test.ts @@ -0,0 +1,13 @@ +import { Sentiment } from '../../src'; +import { corpus } from '../fixtures/corpus.json'; + +test('Corpus', () => { + const sentiment = new Sentiment(); + + const result = sentiment.analyze(corpus); + + expect(typeof result).toBe('object'); + expect(result.score).toBe(-3); + expect(result.tokens.length).toBe(1416); + expect(result.words.length).toBe(73); +}); diff --git a/test/integration/custom_lang.js b/test/integration/custom_lang.js deleted file mode 100644 index c916790..0000000 --- a/test/integration/custom_lang.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool'; - -sentiment.registerLanguage('xx', { - labels: { 'cool': 5 } -}); - -sentiment.analyze(input, { language: 'xx' }, function (err, result) { - test('asynchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 5); - t.equal(result.comparative, 1.25); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); - }); -}); diff --git a/test/integration/fuzz.test.ts b/test/integration/fuzz.test.ts new file mode 100644 index 0000000..edec4ae --- /dev/null +++ b/test/integration/fuzz.test.ts @@ -0,0 +1,17 @@ +import { fuzz } from '../fixtures/fuzz'; +import { Sentiment } from '../../src'; + +test('Fuzz', () => { + const sentiment = new Sentiment(); + const input = fuzz(1000); + + const result = sentiment.analyze(input); + + expect(result).toBeDefined(); + expect(result.comparative).toBeDefined(); + expect(result.negative).toBeDefined(); + expect(result.positive).toBeDefined(); + expect(result.score).toBeDefined(); + expect(result.tokens).toBeDefined(); + expect(result.words).toBeDefined(); +}); diff --git a/test/integration/gh-13.test.ts b/test/integration/gh-13.test.ts new file mode 100644 index 0000000..1ba4176 --- /dev/null +++ b/test/integration/gh-13.test.ts @@ -0,0 +1,15 @@ +import { Sentiment } from '../../src'; + +// Related issue: https://github.com/thisandagain/sentiment/issues/13 +test('GH Issue 13 - Constructor bug', () => { + const sentiment = new Sentiment(); + const input = 'constructor'; + + const result = sentiment.analyze(input); + + expect(typeof result).toBe('object'); + expect(result.score).toEqual(0); + expect(result.comparative).toEqual(0); + expect(result.tokens.length).toEqual(1); + expect(result.words.length).toEqual(0); +}); diff --git a/test/integration/gh-85.test.ts b/test/integration/gh-85.test.ts new file mode 100644 index 0000000..c974177 --- /dev/null +++ b/test/integration/gh-85.test.ts @@ -0,0 +1,15 @@ +import { Sentiment } from '../../src'; + +// Related issue: https://github.com/thisandagain/sentiment/issues/85 +test('GH Issue 85 - Regex accidentally modifying words', () => { + const sentiment = new Sentiment(); + const input = 'i\'ll be there soon'; + + const result = sentiment.analyze(input); + + expect(typeof result).toBe('object'); + expect(result.score).toEqual(0); + expect(result.comparative).toEqual(0); + expect(result.tokens.length).toEqual(4); + expect(result.words.length).toEqual(0); +}); diff --git a/test/integration/gh_12.js b/test/integration/gh_12.js deleted file mode 100644 index 1d8f01a..0000000 --- a/test/integration/gh_12.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'self-deluded'; -var result = sentiment.analyze(input); - -test('synchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, -2); - t.equal(result.comparative, -2); - t.equal(result.tokens.length, 1); - t.equal(result.words.length, 1); - t.end(); -}); diff --git a/test/integration/gh_13.js b/test/integration/gh_13.js deleted file mode 100644 index 2903cc0..0000000 --- a/test/integration/gh_13.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'constructor'; -var result = sentiment.analyze(input); - -test('synchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 0); - t.equal(result.comparative, 0); - t.equal(result.tokens.length, 1); - t.equal(result.words.length, 0); - t.end(); -}); diff --git a/test/integration/gh_85.js b/test/integration/gh_85.js deleted file mode 100644 index b3ea090..0000000 --- a/test/integration/gh_85.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'i\'ll be there soon'; -var result = sentiment.analyze(input); - -test('synchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 0); - t.equal(result.comparative, 0); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 0); - t.end(); -}); diff --git a/test/integration/hyphenated-words.test.ts b/test/integration/hyphenated-words.test.ts new file mode 100644 index 0000000..1610dab --- /dev/null +++ b/test/integration/hyphenated-words.test.ts @@ -0,0 +1,15 @@ +import { Sentiment } from '../../src'; + +// Related issue: https://github.com/thisandagain/sentiment/issues/12 +test('Hyphenated Words', () => { + const sentiment = new Sentiment(); + const input = 'self-deluded'; + + const result = sentiment.analyze(input); + + expect(typeof result).toBe('object'); + expect(result.score).toEqual(-2); + expect(result.comparative).toEqual(-2); + expect(result.tokens.length).toEqual(1); + expect(result.words.length).toEqual(1); +}); diff --git a/test/integration/inject.test.ts b/test/integration/inject.test.ts new file mode 100644 index 0000000..90d8564 --- /dev/null +++ b/test/integration/inject.test.ts @@ -0,0 +1,19 @@ +import { Sentiment } from '../../src'; + +test('Inject', () => { + const sentiment = new Sentiment(); + const input = 'This is so cool'; + + const result = sentiment.analyze(input, { + extras: { + 'cool': 100 + } + }); + + expect(typeof result).toBe('object'); + expect(result.score).toEqual(100); + expect(result.comparative).toEqual(25); + expect(result.tokens.length).toEqual(4); + expect(result.words.length).toEqual(1); +}); + diff --git a/test/integration/negation.test.ts b/test/integration/negation.test.ts new file mode 100644 index 0000000..8c1b03a --- /dev/null +++ b/test/integration/negation.test.ts @@ -0,0 +1,17 @@ +import { Sentiment } from '../../src'; + +test('Negation', () => { + const sentiment = new Sentiment(); + const input = 'I don\'t hate you'; + + const result = sentiment.analyze(input); + + expect(result.score).toBeGreaterThan(0); + + expect(typeof result).toEqual('object'); + expect(result.score).toBe(3); + expect(result.comparative).toBeCloseTo(0.75); + expect(result.tokens.length).toBe(4); + expect(result.words.length).toBe(1); + expect(result.words).toContain('hate'); +}); diff --git a/test/integration/negative-text-and-emoji.test.ts b/test/integration/negative-text-and-emoji.test.ts new file mode 100644 index 0000000..e7951ca --- /dev/null +++ b/test/integration/negative-text-and-emoji.test.ts @@ -0,0 +1,17 @@ +import { Sentiment } from '../../src'; + +test('Negative Text and Emoji', () => { + const sentiment = new Sentiment(); + const input = 'Hey you worthless scumbag 😦'; + const expectedTokens = ['hey', 'you', 'worthless', 'scumbag', '😦']; + const expectedWords = ['worthless', 'scumbag', '😦']; + const result = sentiment.analyze(input); + + expect(result).toBeDefined(); + expect(result.score).toBe(-8); + expect(result.comparative).toBeCloseTo(-1.6); + expect(result.tokens.length).toBe(5); + expect(result.words.length).toBe(3); + expectedTokens.forEach(token => expect(result.tokens).toContain(token)); + expectedWords.forEach(word => expect(result.words).toContain(word)); +}); diff --git a/test/integration/negative.test.ts b/test/integration/negative.test.ts new file mode 100644 index 0000000..ac05aa1 --- /dev/null +++ b/test/integration/negative.test.ts @@ -0,0 +1,16 @@ + +import { Sentiment } from '../../src'; + + +test('Negative Sentiment', () => { + const sentiment = new Sentiment(); + const input = 'Hey you worthless scumbag'; + + const result = sentiment.analyze(input); + + expect(typeof result).toEqual('object'); + expect(result.score).toEqual(-6); + expect(result.comparative).toEqual(-1.5); + expect(result.tokens.length).toEqual(4); + expect(result.words.length).toEqual(2); +}); diff --git a/test/integration/positive-text-and-emoji.test.ts b/test/integration/positive-text-and-emoji.test.ts new file mode 100644 index 0000000..19d3cb6 --- /dev/null +++ b/test/integration/positive-text-and-emoji.test.ts @@ -0,0 +1,14 @@ +import { Sentiment } from '../../src'; + +test('GH Issue 15 - Regex accidentally modifying words', () => { + const sentiment = new Sentiment(); + const input = 'This is so cool 😃'; + + const result = sentiment.analyze(input); + + expect(typeof result).toBe('object'); + expect(result.score).toEqual(3); + expect(result.comparative).toEqual(0.6); + expect(result.tokens.length).toEqual(5); + expect(result.words.length).toEqual(2); +}); diff --git a/test/integration/positive.test.ts b/test/integration/positive.test.ts new file mode 100644 index 0000000..d3d3324 --- /dev/null +++ b/test/integration/positive.test.ts @@ -0,0 +1,17 @@ +import { Sentiment } from '../../src'; + +test('Positive Sentiment', () => { + const sentiment = new Sentiment(); + const input = 'This is so cool'; + + const result = sentiment.analyze(input); + + expect(result.score).toBeGreaterThan(0); + + expect(typeof result).toEqual('object'); + expect(result.score).toBe(1); + expect(result.comparative).toBeCloseTo(0.25); + expect(result.tokens.length).toBe(4); + expect(result.words.length).toBe(1); + expect(result.words).toContain('cool'); +}); diff --git a/test/integration/sentiment-default-import.test.ts b/test/integration/sentiment-default-import.test.ts new file mode 100644 index 0000000..67df1cb --- /dev/null +++ b/test/integration/sentiment-default-import.test.ts @@ -0,0 +1,16 @@ +import sentiment from '../../src'; + +test('Sentiment Default Import', () => { + const input = 'This is so cool'; + + const result = sentiment.analyze(input); + + expect(result.score).toBeGreaterThan(0); + + expect(typeof result).toEqual('object'); + expect(result.score).toBe(1); + expect(result.comparative).toBeCloseTo(0.25); + expect(result.tokens.length).toBe(4); + expect(result.words.length).toBe(1); + expect(result.words).toContain('cool'); +}); diff --git a/test/integration/spanish.test.ts b/test/integration/spanish.test.ts new file mode 100644 index 0000000..a180505 --- /dev/null +++ b/test/integration/spanish.test.ts @@ -0,0 +1,17 @@ +import { Sentiment } from '../../src'; + +test('Spanish Language', () => { + const sentiment = new Sentiment(); + + const positive = 'los gatos son adorables'; + const positiveResult = sentiment.analyze(positive, { + languageCode: 'es' + }); + expect(positiveResult.score).toBeGreaterThan(0); + + const negative = 'odio a esas personas'; + const negativeResult = sentiment.analyze(negative, { + languageCode: 'es' + }); + expect(negativeResult.score).toBeLessThan(0); +}); \ No newline at end of file diff --git a/test/integration/supported_lang.js b/test/integration/supported_lang.js deleted file mode 100644 index 5db1679..0000000 --- a/test/integration/supported_lang.js +++ /dev/null @@ -1,21 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); -var mock = require('mock-require'); - -// Mock a supported language -mock('../../languages/yy/index', { - labels: { 'cool': 20 } -}); - -var input = 'This is so cool'; -var result = sentiment.analyze(input, { language: 'yy' }); - -test('synchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 20); - t.equal(result.comparative, 5); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); -}); diff --git a/test/integration/sync_corpus.js b/test/integration/sync_corpus.js deleted file mode 100644 index 72d45ea..0000000 --- a/test/integration/sync_corpus.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var corpus = require('../fixtures/corpus'); -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var dataset = corpus; -var result = sentiment.analyze(dataset); - -test('synchronous corpus', function (t) { - t.type(result, 'object'); - t.equal(result.score, -3); - t.equal(result.tokens.length, 1416); - t.equal(result.words.length, 73); - t.end(); -}); diff --git a/test/integration/sync_fuzz.js b/test/integration/sync_fuzz.js deleted file mode 100644 index 9a94d53..0000000 --- a/test/integration/sync_fuzz.js +++ /dev/null @@ -1,11 +0,0 @@ -var test = require('tap').test; -var fuzz = require('../fixtures/fuzz'); -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = fuzz(1000); - -test('synchronous fuzz', function (t) { - t.type(sentiment.analyze(input), 'object'); - t.end(); -}); diff --git a/test/integration/sync_inject.js b/test/integration/sync_inject.js deleted file mode 100644 index c8dd90c..0000000 --- a/test/integration/sync_inject.js +++ /dev/null @@ -1,19 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool'; -var options = { - extras: { 'cool': 100 } -}; - -var result = sentiment.analyze(input, options); - -test('synchronous inject', function (t) { - t.type(result, 'object'); - t.equal(result.score, 100); - t.equal(result.comparative, 25); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); -}); diff --git a/test/integration/sync_negation.js b/test/integration/sync_negation.js deleted file mode 100644 index 0635a9b..0000000 --- a/test/integration/sync_negation.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'I don\'t hate you'; -var result = sentiment.analyze(input); - -test('synchronous negation', function (t) { - t.type(result, 'object'); - t.equal(result.score, 3); - t.equal(result.comparative, 0.75); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); -}); diff --git a/test/integration/sync_negative.js b/test/integration/sync_negative.js deleted file mode 100644 index cb6019a..0000000 --- a/test/integration/sync_negative.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'Hey you worthless scumbag'; -var result = sentiment.analyze(input); - -test('synchronous negative', function (t) { - t.type(result, 'object'); - t.equal(result.score, -6); - t.equal(result.comparative, -1.5); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 2); - t.end(); -}); diff --git a/test/integration/sync_negative_text_and_emoji.js b/test/integration/sync_negative_text_and_emoji.js deleted file mode 100644 index 4514f7f..0000000 --- a/test/integration/sync_negative_text_and_emoji.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'Hey you worthless scumbag 😦'; -var result = sentiment.analyze(input); - -test('synchronous negative with emoji', function (t) { - t.type(result, 'object'); - t.equal(result.score, -8); - t.equal(result.comparative, -1.6); - t.equal(result.tokens.length, 5); - t.equal(result.words.length, 3); - t.end(); -}); diff --git a/test/integration/sync_positive.js b/test/integration/sync_positive.js deleted file mode 100644 index 35260a0..0000000 --- a/test/integration/sync_positive.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool'; -var result = sentiment.analyze(input); - -test('synchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 1); - t.equal(result.comparative, 0.25); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 1); - t.end(); -}); diff --git a/test/integration/sync_positive_text_and_emoji.js b/test/integration/sync_positive_text_and_emoji.js deleted file mode 100644 index f9bf464..0000000 --- a/test/integration/sync_positive_text_and_emoji.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = 'This is so cool 😃'; -var result = sentiment.analyze(input); - -test('synchronous positive with emoji', function (t) { - t.type(result, 'object'); - t.equal(result.score, 3); - t.equal(result.comparative, 0.6); - t.equal(result.tokens.length, 5); - t.equal(result.words.length, 2); - t.end(); -}); diff --git a/test/integration/sync_undefined.js b/test/integration/sync_undefined.js deleted file mode 100644 index 33b91af..0000000 --- a/test/integration/sync_undefined.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -var input = undefined; -var result = sentiment.analyze(input); - -test('synchronous undefined', function (t) { - t.type(result, 'object'); - t.equal(result.score, 0); - t.equal(result.comparative, 0); - t.equal(result.tokens.length, 1); - t.equal(result.words.length, 0); - t.end(); -}); diff --git a/test/integration/undefined-input.test.ts b/test/integration/undefined-input.test.ts new file mode 100644 index 0000000..5e307da --- /dev/null +++ b/test/integration/undefined-input.test.ts @@ -0,0 +1,8 @@ +import { Sentiment } from '../../src'; + +test('Undefined Input', () => { + const sentiment = new Sentiment(); + const input = undefined; + + expect(() => sentiment.analyze(input as any)).toThrow(); +}); diff --git a/test/unit/language-processor.js b/test/unit/language-processor.js deleted file mode 100644 index c546da7..0000000 --- a/test/unit/language-processor.js +++ /dev/null @@ -1,37 +0,0 @@ -var test = require('tap').test; -var languageProcessor = require('../../lib/language-processor'); - -test('spec', function (t) { - t.type(languageProcessor, 'object'); - t.type(languageProcessor.getLanguage, 'function'); - t.type(languageProcessor.getLabels, 'function'); - t.type(languageProcessor.applyScoringStrategy, 'function'); - t.end(); -}); - -test('getLanguage', function (t) { - - var englishLanguage = require('../../languages/en/index'); - - t.deepEqual( - languageProcessor.getLanguage(), - englishLanguage - ); - - t.deepEqual( - languageProcessor.getLanguage(null), - englishLanguage - ); - - t.deepEqual( - languageProcessor.getLanguage('en'), - englishLanguage - ); - - t.throws(function () { - // Should throw with unknown language code - languageProcessor.getLanguage('xx'); - }); - - t.end(); -}); diff --git a/test/unit/language-processor.test.ts b/test/unit/language-processor.test.ts new file mode 100644 index 0000000..59fcc57 --- /dev/null +++ b/test/unit/language-processor.test.ts @@ -0,0 +1,144 @@ +import { ScoringStrategy, LanguageInput, LanguageProcessor } from '../../src'; + +import englishLabels from '../../languages/en/labels.json'; +import emojis from '../../emoji/emoji.json'; + +describe('LanguageProcessor', () => { + describe('#constructor', () => { + it('returns an instance of LanguageProcessor when given 0 arguments', () => { + expect(() => new LanguageProcessor()).not.toThrow(); + expect(new LanguageProcessor()).toBeDefined(); + }); + }); + + describe('#getLanguage', () => { + it('returns the default language English when given "en"', () => { + const languageProcessor = new LanguageProcessor(); + + const language = languageProcessor.getLanguage('en'); + + expect(language).toBeDefined(); + expect(language.labels).toBeDefined(); + expect(language.scoringStrategy).toBeDefined(); + expect(language.scoringStrategy!.apply).toBeDefined(); + }); + + it('returns English when not given any language code', () => { + const languageProcessor = new LanguageProcessor(); + + const language = languageProcessor.getLanguage(); + + expect(language).toBeDefined(); + expect(language.labels).toBeDefined(); + expect(language.scoringStrategy).toBeDefined(); + expect(language.scoringStrategy!.apply).toBeDefined(); + }); + + it('throws an error when given a language code that does not exist', () => { + const languageProcessor = new LanguageProcessor(); + + expect(() => languageProcessor.getLanguage('fake')).toThrow(); + }); + }); + + describe('#getLabels', () => { + it('returns the labels for english when given "en"', () => { + const languageProcessor = new LanguageProcessor(); + + const labels = languageProcessor.getLabels('en'); + + expect(labels).toEqual(englishLabels); + }); + + it('throws an error when given a language code that does not exist', () => { + const languageProcessor = new LanguageProcessor(); + + return expect(() => languageProcessor.getLabels('fake')).toThrow(); + }); + }); + + describe('#addLanguage', () => { + it('successfully adds a new language when given labels as well as combining them with emojis', + () => { + const languageProcessor = new LanguageProcessor(); + const languageCode = 'fr'; + const lang: LanguageInput = { + labels: { + a: 2, + b: -1 + } + }; + + languageProcessor.addLanguage(languageCode, lang); + const result = languageProcessor.getLanguage(languageCode); + return expect(result.labels).toEqual({ ...lang.labels, ...emojis }); + } + ); + + it('successfully adds a new language when given labels and scoring strategy', () => { + const languageProcessor = new LanguageProcessor(); + const languageCode = 'fr'; + const scoringStrategy: ScoringStrategy = (_tokens, _cursor, tScore) => { + return tScore; + }; + const lang: LanguageInput = { + labels: { + a: 5, + b: -3 + }, + scoringStrategy + }; + + languageProcessor.addLanguage(languageCode, lang); + const result = languageProcessor.getLanguage(languageCode); + + expect(result.labels).toBeDefined(); + expect(result.scoringStrategy).toBeDefined(); + expect(result.labels).toHaveProperty('a'); + expect(result.labels).toHaveProperty('b'); + expect(result.labels.a).toBe(5); + expect(result.labels.b).toBe(-3); + }); + + it('will successfully use given scoring strategy', () => { + const languageProcessor = new LanguageProcessor(); + const languageCode = 'aa'; + + const scoringStrategy: ScoringStrategy = (_tokens, _cursor, _tScore) => { + return 100; + }; + + languageProcessor.addLanguage(languageCode, { + labels: { foo: 1 }, + scoringStrategy + }); + + const language = languageProcessor.getLanguage(languageCode); + const result = language!.scoringStrategy(['foo'], 0, 1); + + expect(result).toBe(100); + + }); + it('will throw an error if labels is undefined', () => { + const languageProcessor = new LanguageProcessor(); + const languageCode = 'fr'; + + expect(() => { + languageProcessor.addLanguage(languageCode, {} as any); + }).toThrow(); + }); + + it('will throw an error if labels is defined but empty', () => { + const languageProcessor = new LanguageProcessor(); + const languageCode = 'fr'; + + expect(() => { + languageProcessor.addLanguage(languageCode, { + labels: { + + } + }); + }).toThrow(); + }); + }); +}); \ No newline at end of file diff --git a/test/unit/sentiment-analyzer.test.ts b/test/unit/sentiment-analyzer.test.ts new file mode 100644 index 0000000..765b4c3 --- /dev/null +++ b/test/unit/sentiment-analyzer.test.ts @@ -0,0 +1,152 @@ +import { Sentiment, AnalyzeOptions } from '../../src'; +import { LanguageInput } from '../../src'; + +describe("Sentiment", () => { + describe('#constructor', () => { + it('Can return a new instance', () => { + const sentiment = new Sentiment(); + + expect(sentiment).toBeDefined(); + }); + }); + + describe('#analyze', () => { + it('is callable', () => { + const sentiment = new Sentiment(); + + expect(sentiment.analyze).toBeDefined(); + expect(sentiment.analyze).toBeInstanceOf(Function); + expect(typeof sentiment.analyze).toBe('function'); + }); + + it('analyzes a string and returns a result with all of the expected fields', () => { + const sentiment = new Sentiment(); + + const result = sentiment.analyze('Hello world'); + + expect(result).toBeDefined(); + expect(typeof result.score).toBe('number'); + expect(typeof result.comparative).toBe('number'); + expect(result.negative).toBeInstanceOf(Array); + expect(result.positive).toBeInstanceOf(Array); + expect(result.tokens).toBeInstanceOf(Array); + expect(result.words).toBeInstanceOf(Array); + }); + + it('throws an error when given invalid options', () => { + const sentiment = new Sentiment(); + const badOptions = { floop: true, glorp: true } as AnalyzeOptions; + expect(() => sentiment.analyze('Hello world', badOptions)).toThrow(); + }); + + it('returns a response with a positive score for a positive sentence', () => { + const sentiment = new Sentiment(); + + const response = sentiment.analyze('This is a wonderful test!'); + + expect(response).toBeDefined(); + expect(response.score).toBeGreaterThan(0); + }); + + it('returns a response with a negative score for a negative sentence', () => { + const sentiment = new Sentiment(); + + const response = sentiment.analyze('This is a terrible test!'); + + expect(response).toBeDefined(); + expect(response.score).toBeLessThan(0); + }); + + describe('when a language is registered', () => { + it('can analyze with the default scoring strategy and ' + + 'the registered language by specifying the language code', () => { + const sentiment = new Sentiment(); + const languageCode = 'te'; + const language: LanguageInput = { + labels: { + foo: 2, + bar: 2, + baz: -2 + } + }; + sentiment.registerLanguage(languageCode, language); + + const { + comparative, + negative, + positive, + score, + tokens, + words, + } = sentiment.analyze('foo bar baz qwop', { languageCode }); + + expect(score).toBe(2); + + expect(comparative).toBeCloseTo(score / tokens.length); + + expect(negative).toContain('baz'); + expect(negative.length).toBe(1); + + expect(positive).toContain('foo'); + expect(positive).toContain('bar'); + expect(positive.length).toBe(2); + + expect(tokens).toContain('foo'); + expect(tokens).toContain('bar'); + expect(tokens).toContain('baz'); + expect(tokens).toContain('qwop'); + expect(tokens.length).toBe(4); + + expect(words).toContain('foo'); + expect(words).toContain('bar'); + expect(words).toContain('baz'); + expect(words.length).toBe(3); + }); + }); + }); + + describe('#registerLanguage', () => { + it('is callable', () => { + const sentiment = new Sentiment(); + + expect(sentiment.registerLanguage).toBeDefined(); + expect(sentiment.registerLanguage).toBeInstanceOf(Function); + expect(typeof sentiment.registerLanguage).toBe('function'); + }); + + it('successfully adds a new language when given labels', () => { + const sentiment = new Sentiment(); + const languageCode = 'fr'; + const lang: LanguageInput = { + labels: { + a: 2, + b: -1 + } + }; + + expect(() => sentiment.registerLanguage(languageCode, lang)).not.toThrow(); + }); + + it('throws an error if labels is undefined', () => { + const sentiment = new Sentiment(); + const languageCode = 'fr'; + + expect(() => { + sentiment.registerLanguage(languageCode, {} as any); + }).toThrow(); + }); + + it('throws an error if labels is defined but empty', () => { + const sentiment = new Sentiment(); + const languageCode = 'fr'; + + expect(() => { + sentiment.registerLanguage(languageCode, { + labels: { + + } + }); + }).toThrow(); + }); + }); +}); \ No newline at end of file diff --git a/test/unit/spec.js b/test/unit/spec.js deleted file mode 100644 index 1d14a5c..0000000 --- a/test/unit/spec.js +++ /dev/null @@ -1,18 +0,0 @@ -var test = require('tap').test; -var Sentiment = require('../../lib/index'); -var sentiment = new Sentiment(); - -test('module', function (t) { - t.type(Sentiment, 'function', 'module is a function'); - t.end(); -}); - -test('interface', function (t) { - t.type(sentiment, 'object', 'instance is an object'); - t.type(sentiment.analyze, 'function', 'sentiment.analyze is a function'); - // eslint-disable-next-line max-len - t.type(sentiment.registerLanguage, 'function', 'sentiment.registerLanguage is a function'); - t.type(sentiment.analyze('test'), 'object'); - t.type(sentiment.analyze('test', { test: 10 }), 'object'); - t.end(); -}); diff --git a/test/unit/tokenize.js b/test/unit/tokenize.js deleted file mode 100644 index 4d8795f..0000000 --- a/test/unit/tokenize.js +++ /dev/null @@ -1,48 +0,0 @@ -var test = require('tap').test; -var tokenize = require('../../lib/tokenize'); - -test('spec', function (t) { - t.type(tokenize, 'function'); - t.type(tokenize('foo'), 'object'); - t.equal(tokenize('foo bar').length, 2); - - t.throws(function () { - tokenize(123); - }); - t.throws(function () { - tokenize({}); - }); - t.throws(function () { - tokenize([]); - }); - - t.end(); -}); - -test('english', function (t) { - t.deepEqual( - tokenize('The cat went over the wall.'), - ['the', 'cat', 'went', 'over', 'the', 'wall'] - ); - t.deepEqual( - tokenize('That\'ll cause problems for the farmer\'s pigs'), - ['that\'ll', 'cause', 'problems', 'for', 'the', 'farmer\'s', 'pigs'] - ); - t.end(); -}); - -test('diacritic', function (t) { - t.deepEqual( - tokenize('This approach is naïve.'), - ['this', 'approach', 'is', 'naïve'] - ); - t.deepEqual( - tokenize('The puppy bowl team was very coöperative.'), - ['the', 'puppy', 'bowl', 'team', 'was', 'very', 'coöperative'] - ); - t.deepEqual( - tokenize('The soufflé was delicious!'), - ['the', 'soufflé', 'was', 'delicious'] - ); - t.end(); -}); diff --git a/test/unit/tokenize.test.ts b/test/unit/tokenize.test.ts new file mode 100644 index 0000000..8afc5aa --- /dev/null +++ b/test/unit/tokenize.test.ts @@ -0,0 +1,128 @@ +import { tokenize } from '../../src/tokenize'; + + +describe('#tokenize', () => { + it('should be a function', () => { + expect(tokenize).toBeInstanceOf(Function); + }); + + it('should return an array with a token when given one token', () => { + const word = 'foo'; + + const result = tokenize(word); + + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(1); + expect(result).toContain(word); + }); + + it('should throw an error when given a number', () => { + expect(() => tokenize(10 as any)) + .toThrowError(/^Cannot tokenize non-string values./); + }); + + it('should throw an error when given an object', () => { + expect(() => tokenize({ foo: true } as any)) + .toThrowError(/^Cannot tokenize non-string values./); + }); + + it('should throw an error when given an array', () => { + expect(() => tokenize([1, 'two', true, {}] as any)) + .toThrowError(/^Cannot tokenize non-string values./); + }); + + it('should return an array with two tokens when given a string of two tokens separated by a space.', () => { + const token1 = 'foo'; + const token2 = 'bar'; + const sentence = `${token1} ${token2}`; + + const result = tokenize(sentence); + + expect(result).toBeInstanceOf(Array); + expect(result).toContain(token1); + expect(result).toContain(token2); + expect(result.length).toBe(2); + }); + + it('should return an array of tokens when separated by newlines.', () => { + const token1 = 'foo'; + const token2 = 'bar'; + const sentence = `${token1}\n\n${token2}`; + + const result = tokenize(sentence); + expect(result).toBeInstanceOf(Array); + expect(result).toContain(token1); + expect(result).toContain(token2); + expect(result.length).toBe(2); + }); + + describe('tokenizing English sentences', () => { + it('should tokenize a simple English sentence separated by spaces and ending in a period', () => { + const sentence = 'The cat went over the wall.'; + const expectedResult = ['the', 'cat', 'went', 'over', 'the', 'wall']; + + const result = tokenize(sentence); + + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(expectedResult.length); + expectedResult.forEach(word => { + expect(result).toContain(word); + }); + }); + + it('should tokenize contractions', () => { + const sentence = "that'll cause problems for the farmer's pigs."; + const expectedResult = ["that'll", 'cause', 'problems', 'for', 'the', "farmer's", 'pigs']; + + const result = tokenize(sentence); + + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(expectedResult.length); + expectedResult.forEach(word => { + expect(result).toContain(word); + }); + }); + }); + + describe('tokenizing sentences with diacritics', () => { + it('should tokenize a sentence that contains a word with the letter "ï"', () => { + const sentence = 'This approach is naïve.'; + const expectedResult = ['this', 'approach', 'is', 'naïve']; + + const result = tokenize(sentence); + + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(expectedResult.length); + expectedResult.forEach(word => { + expect(result).toContain(word); + }); + }); + + it('should tokenize a sentence that contains a word with the letter "ö"', () => { + const sentence = 'The puppy bowl team was very coöperative.'; + const expectedResult = ['the', 'puppy', 'bowl', 'team', 'was', 'very', 'coöperative']; + + const result = tokenize(sentence); + + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(expectedResult.length); + expectedResult.forEach(word => { + expect(result).toContain(word); + }); + }); + + it('should tokenize a sentence that contains a word with the letter "é"', () => { + const sentence = 'The soufflé was delicious!'; + const expectedResult = ['the', 'soufflé', 'was', 'delicious']; + + const result = tokenize(sentence); + + expect(result).toBeInstanceOf(Array); + expect(result.length).toBe(expectedResult.length); + expectedResult.forEach(word => { + expect(result).toContain(word); + }); + }); + }); +}); + diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..a5ab1d0 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,13 @@ +{ // use separate tsconfig for builds to exclude dirs. This lets the + // VS Code linter use the tsconfig.json for linting tests properly. + "compilerOptions": { + "target": "es6" + }, + "extends": "./tsconfig.json", + "exclude": [ + "test", + "node_modules", + "lib", + "docs" + ] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a249037 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": false, /* Generates corresponding '.map' file. */ + "outDir": "./lib", /* Redirect output structure to the directory. */ + "removeComments": true, /* Do not emit comments to output. */ + "inlineSourceMap": true, + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "rootDirs": ["src", "languages"], /* List of root folders whose combined content represents the structure of the project at runtime. */ + "esModuleInterop": true, + "resolveJsonModule": true + } +} \ No newline at end of file