├── clippy.toml ├── .gitignore ├── .cargo └── config.toml ├── generate ├── Cargo.toml └── src │ ├── github.rs │ ├── unicode │ ├── variations.rs │ └── data.rs │ ├── util.rs │ ├── main.rs │ └── unicode.rs ├── onedoc.toml ├── Cargo.toml ├── LICENSE-MIT ├── tests ├── serde.rs └── smoke.rs ├── examples └── replace.rs ├── .github └── workflows │ └── build.yaml ├── README.md ├── RELEASES.md ├── LICENSE-APACHE ├── Cargo.lock └── src ├── lib.rs └── gen ├── shortcode.rs └── unicode.rs /clippy.toml: -------------------------------------------------------------------------------- 1 | msrv = "1.66" 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.vscode 3 | -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [env] 2 | CARGO_WORKSPACE_DIR = { value = "", relative = true } 3 | -------------------------------------------------------------------------------- /generate/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "generate" 3 | version = "0.0.0" 4 | authors = ["Ross MacArthur "] 5 | edition = "2021" 6 | license = "MIT OR Apache-2.0" 7 | publish = false 8 | 9 | [dependencies] 10 | anyhow = "1.0.38" 11 | constcat = "0.6.1" 12 | curl = "0.4.46" 13 | hex = "0.4.3" 14 | indexmap = "1.6.1" 15 | phf_codegen = "0.13.1" 16 | phf_shared = "0.13.1" 17 | serde = { version = "1.0.124", features = ["derive"] } 18 | serde_json = "1.0.64" 19 | sha2 = "0.10.8" 20 | -------------------------------------------------------------------------------- /onedoc.toml: -------------------------------------------------------------------------------- 1 | [links] 2 | "get" = "https://docs.rs/emojis/latest/emojis/fn.get.html" 3 | "get_by_shortcode" = "https://docs.rs/emojis/latest/emojis/fn.get_by_shortcode.html" 4 | "Emoji" = "https://docs.rs/emojis/latest/emojis/struct.Emoji.html" 5 | "iter" = "https://docs.rs/emojis/latest/emojis/latest/emojis/fn.iter.html" 6 | "unicode_version()" = "https://docs.rs/emojis/latest/emojis/struct.Emoji.html#method.unicode_version" 7 | "skin_tones()" = "https://docs.rs/emojis/latest/emojis/struct.Emoji.html#method.skin_tones" 8 | -------------------------------------------------------------------------------- /generate/src/github.rs: -------------------------------------------------------------------------------- 1 | //! Parse GitHub emoji information. 2 | 3 | use std::collections::HashMap; 4 | 5 | use anyhow::Result; 6 | use serde::Deserialize; 7 | 8 | use crate::util; 9 | 10 | const URL: &str = "https://github.com/github/gemoji/raw/v4.1.0/db/emoji.json"; 11 | 12 | pub type ParsedData = HashMap>; 13 | 14 | #[derive(Debug, Deserialize)] 15 | pub struct Emoji { 16 | pub emoji: String, 17 | pub aliases: Vec, 18 | } 19 | 20 | pub fn build() -> Result { 21 | let buf = util::cached_download(URL)?; 22 | let emojis: Vec = serde_json::from_str(&buf)?; 23 | Ok(emojis.into_iter().map(|e| (e.emoji, e.aliases)).collect()) 24 | } 25 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = ["generate"] 3 | 4 | [package] 5 | name = "emojis" 6 | version = "0.8.0" 7 | authors = ["Ross MacArthur "] 8 | edition = "2021" 9 | rust-version = "1.66" 10 | description = "✨ Lookup emoji in *O(1)* time, access metadata and GitHub shortcodes, iterate over all emoji, and more!" 11 | readme = "README.md" 12 | repository = "https://github.com/rossmacarthur/emojis" 13 | license = "MIT OR Apache-2.0" 14 | keywords = ["emoji", "unicode", "github", "gemoji"] 15 | categories = ["text-processing", "no-std"] 16 | 17 | [package.metadata.docs.rs] 18 | all-features = true 19 | 20 | [dependencies] 21 | phf = { version = "0.13.1", default-features = false } 22 | serde = { version = "1.0.145", default-features = false, features = ["derive"], optional = true } 23 | 24 | [dev-dependencies] 25 | serde_json = "1.0.99" 26 | toml = "0.5.11" 27 | 28 | [features] 29 | serde = ["dep:serde"] 30 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy 2 | of this software and associated documentation files (the "Software"), to deal 3 | in the Software without restriction, including without limitation the rights 4 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 5 | copies of the Software, and to permit persons to whom the Software is 6 | furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in all 9 | copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | -------------------------------------------------------------------------------- /generate/src/unicode/variations.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Context as _; 2 | use anyhow::Result; 3 | use constcat::concat; 4 | 5 | use crate::unicode::{VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH}; 6 | use crate::util; 7 | 8 | const URL: &str = concat!( 9 | "https://unicode.org/Public/", 10 | VERSION_MAJOR, 11 | ".", 12 | VERSION_MINOR, 13 | ".", 14 | VERSION_PATCH, 15 | "/ucd/emoji/emoji-variation-sequences.txt" 16 | ); 17 | 18 | pub fn parse() -> Result> { 19 | let data = util::cached_download(URL)?; 20 | let mut entries = Vec::new(); 21 | for line in data.lines() { 22 | if line.starts_with('#') || line.is_empty() { 23 | continue; 24 | } 25 | let (code_points, _) = line.split_once(';').context("expected code points")?; 26 | let code_points = parse_code_points(code_points)?; 27 | if !code_points.ends_with(&['\u{fe0f}']) { 28 | continue; 29 | } 30 | 31 | match code_points.strip_suffix(&['\u{fe0f}']) { 32 | Some(code_points) => { 33 | entries.push(String::from_iter(code_points)); 34 | } 35 | None => todo!(), 36 | } 37 | } 38 | Ok(entries) 39 | } 40 | 41 | fn parse_code_points(s: &str) -> Result> { 42 | s.split_ascii_whitespace() 43 | .map(parse_code_point) 44 | .collect::>() 45 | .context("invalid code points") 46 | } 47 | 48 | fn parse_code_point(s: &str) -> Result { 49 | let scalar = u32::from_str_radix(s, 16).context("not hex")?; 50 | char::from_u32(scalar).context("not Unicode scalar value") 51 | } 52 | -------------------------------------------------------------------------------- /generate/src/util.rs: -------------------------------------------------------------------------------- 1 | use std::env; 2 | use std::fs; 3 | use std::io; 4 | use std::path::Path; 5 | 6 | use anyhow::Context as _; 7 | use anyhow::Result; 8 | use sha2::{Digest, Sha256}; 9 | 10 | pub fn cached_download(url: &str) -> Result { 11 | // Check if we have a cached version of the file. 12 | let checksum = hex::encode(Sha256::digest(url.as_bytes())); 13 | let path = Path::new(concat!(env!("CARGO_WORKSPACE_DIR"), "/target/generate")) 14 | .join(checksum) 15 | .with_extension("txt"); 16 | 17 | let cwd = env::current_dir()?; 18 | 19 | match fs::read_to_string(&path) { 20 | Ok(data) => { 21 | eprintln!( 22 | "using cached: {url}\n at {}", 23 | path.strip_prefix(&cwd)?.display() 24 | ); 25 | return Ok(data); 26 | } 27 | Err(err) if err.kind() == io::ErrorKind::NotFound => {} 28 | Err(err) => return Err(err.into()), 29 | } 30 | 31 | let data = download(url).with_context(|| format!("failed to download {url}"))?; 32 | fs::create_dir_all(path.parent().unwrap())?; 33 | fs::write(&path, &data)?; 34 | eprintln!( 35 | "downloaded: {url}\n to {}", 36 | path.strip_prefix(&cwd)?.display() 37 | ); 38 | 39 | Ok(data) 40 | } 41 | 42 | pub fn download(url: &str) -> Result { 43 | let mut buf = Vec::new(); 44 | let mut easy = curl::easy::Easy::new(); 45 | easy.fail_on_error(true)?; 46 | easy.follow_location(true)?; 47 | easy.url(url)?; 48 | { 49 | let mut transfer = easy.transfer(); 50 | transfer.write_function(|data| { 51 | buf.extend_from_slice(data); 52 | Ok(data.len()) 53 | })?; 54 | transfer.perform()?; 55 | } 56 | Ok(String::from_utf8(buf)?) 57 | } 58 | -------------------------------------------------------------------------------- /tests/serde.rs: -------------------------------------------------------------------------------- 1 | #![cfg(feature = "serde")] 2 | 3 | use emojis::{Emoji, Group, SkinTone, UnicodeVersion}; 4 | use serde::{Deserialize, Serialize}; 5 | 6 | #[derive(Debug, PartialEq, Eq, Deserialize, Serialize)] 7 | struct Test { 8 | skin_tone: SkinTone, 9 | group: Group, 10 | emoji: &'static Emoji, 11 | version: UnicodeVersion, 12 | } 13 | 14 | #[test] 15 | fn test_serialize_roundtrip_json() { 16 | let test = Test { 17 | emoji: emojis::get("🚀").unwrap(), 18 | version: UnicodeVersion::new(13, 0), 19 | skin_tone: SkinTone::Default, 20 | group: Group::Activities, 21 | }; 22 | let serialized = serde_json::to_string_pretty(&test).unwrap(); 23 | assert_eq!( 24 | serialized, 25 | r#"{ 26 | "skin_tone": "Default", 27 | "group": "Activities", 28 | "emoji": "🚀", 29 | "version": { 30 | "major": 13, 31 | "minor": 0 32 | } 33 | }"# 34 | ); 35 | let deserialized: Test = serde_json::from_str(&serialized).unwrap(); 36 | 37 | assert_eq!(deserialized, test); 38 | } 39 | 40 | #[test] 41 | fn test_serialize_roundtrip_toml() { 42 | let test = Test { 43 | emoji: emojis::get("🚀").unwrap(), 44 | skin_tone: SkinTone::Default, 45 | group: Group::Activities, 46 | version: UnicodeVersion::new(13, 0), 47 | }; 48 | let serialized = toml::to_string(&test).unwrap(); 49 | assert_eq!( 50 | serialized, 51 | r#"skin_tone = "Default" 52 | group = "Activities" 53 | emoji = "🚀" 54 | 55 | [version] 56 | major = 13 57 | minor = 0 58 | "# 59 | ); 60 | 61 | let deserialized: Test = toml::from_str(&serialized).unwrap(); 62 | 63 | assert_eq!(deserialized, test); 64 | } 65 | 66 | #[test] 67 | fn emoji_deserialize_invalid() { 68 | let err = serde_json::from_str::(r#"{"emoji":"invalid"}"#).unwrap_err(); 69 | assert_eq!(err.to_string(), "invalid emoji at line 1 column 18"); 70 | } 71 | -------------------------------------------------------------------------------- /examples/replace.rs: -------------------------------------------------------------------------------- 1 | //! Replaces occurrences of `:name:` with the actual emoji for `name` in text. 2 | //! 3 | //! # Usage 4 | //! 5 | //! ```sh 6 | //! $ echo "launch :rocket:" | cargo run --example replace 7 | //! launch 🚀 8 | //! ``` 9 | 10 | use std::io; 11 | use std::io::prelude::*; 12 | use std::io::BufWriter; 13 | 14 | fn main() -> io::Result<()> { 15 | let stdin = { 16 | let mut buf = String::new(); 17 | io::stdin().read_to_string(&mut buf)?; 18 | buf 19 | }; 20 | replace(&stdin, BufWriter::new(io::stdout())) 21 | } 22 | 23 | fn replace(mut s: &str, mut o: impl Write) -> io::Result<()> { 24 | // The meaning of the index values is as follows. 25 | // 26 | // : r o c k e t : 27 | // ^ ^ ^ ^ 28 | // i m n j 29 | // 30 | // i..j gives ":rocket:" 31 | // m..n gives "rocket" 32 | while let Some((i, m, n, j)) = s 33 | .find(':') 34 | .map(|i| (i, i + 1)) 35 | .and_then(|(i, m)| s[m..].find(':').map(|x| (i, m, m + x, m + x + 1))) 36 | { 37 | match emojis::get_by_shortcode(&s[m..n]) { 38 | Some(emoji) => { 39 | // Output everything preceding, except the first colon. 40 | o.write_all(&s.as_bytes()[..i])?; 41 | // Output the emoji. 42 | o.write_all(emoji.as_bytes())?; 43 | // Update the string to past the last colon. 44 | s = &s[j..]; 45 | } 46 | None => { 47 | // Output everything preceding but not including the colon. 48 | o.write_all(&s.as_bytes()[..n])?; 49 | // Update the string to start with the last colon. 50 | s = &s[n..]; 51 | } 52 | } 53 | } 54 | o.write_all(s.as_bytes()) 55 | } 56 | 57 | #[test] 58 | fn smoke() { 59 | let tests = [ 60 | ("launch nothing", "launch nothing"), 61 | ("launch :rocket: something", "launch 🚀 something"), 62 | ("? :unknown: emoji", "? :unknown: emoji"), 63 | ("::very:naughty::", "::very:naughty::"), 64 | (":maybe:rocket:", ":maybe🚀"), 65 | (":rocket::rocket:", "🚀🚀"), 66 | ]; 67 | 68 | for (i, o) in tests { 69 | let mut v = Vec::new(); 70 | replace(i, &mut v).unwrap(); 71 | assert_eq!(std::str::from_utf8(&v).unwrap(), o); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | 9 | env: 10 | RUSTFLAGS: --deny warnings 11 | 12 | strategy: 13 | matrix: 14 | toolchain: [stable, beta, nightly] 15 | 16 | steps: 17 | - uses: actions/checkout@v5 18 | 19 | - uses: dtolnay/rust-toolchain@master 20 | with: 21 | toolchain: ${{ matrix.toolchain }} 22 | components: clippy, rustfmt 23 | 24 | - name: Rustfmt 25 | run: cargo fmt -- --check 26 | 27 | - name: Clippy 28 | run: cargo clippy --workspace --all-targets --all-features 29 | 30 | - name: Test 31 | run: | 32 | cargo test --workspace --all-targets --all-features 33 | cargo test --workspace --doc --all-features 34 | 35 | msrv: 36 | runs-on: ubuntu-latest 37 | 38 | env: 39 | RUSTFLAGS: --deny warnings 40 | 41 | steps: 42 | - uses: actions/checkout@v5 43 | - uses: dtolnay/rust-toolchain@1.66 44 | 45 | - name: Test 46 | run: cargo test --all-features 47 | 48 | generated: 49 | runs-on: ubuntu-latest 50 | 51 | steps: 52 | - uses: actions/checkout@v5 53 | - uses: dtolnay/rust-toolchain@stable 54 | 55 | - name: Check generated code is up to date 56 | run: | 57 | cargo run --package generate 58 | git diff --exit-code -- src/gen/ 59 | 60 | readme: 61 | runs-on: ubuntu-latest 62 | 63 | steps: 64 | - uses: actions/checkout@v5 65 | - uses: dtolnay/rust-toolchain@stable 66 | 67 | - name: Install cargo-onedoc 68 | run: cargo install cargo-onedoc --locked 69 | 70 | - name: Check README 71 | run: cargo onedoc --check 72 | 73 | publish: 74 | needs: [generated, readme, test, msrv] 75 | if: startsWith(github.ref, 'refs/tags/') 76 | 77 | runs-on: ubuntu-latest 78 | 79 | permissions: 80 | id-token: write 81 | 82 | steps: 83 | - uses: actions/checkout@v5 84 | - uses: dtolnay/rust-toolchain@stable 85 | 86 | - name: Calculate version from tag 87 | id: version 88 | run: echo "value=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT 89 | 90 | - name: Check tag against package versions 91 | run: grep '^version = "${{ steps.version.outputs.value }}"$' Cargo.toml 92 | 93 | - uses: rust-lang/crates-io-auth-action@v1 94 | id: auth 95 | 96 | - name: Publish 97 | env: 98 | CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} 99 | run: cargo publish 100 | -------------------------------------------------------------------------------- /tests/smoke.rs: -------------------------------------------------------------------------------- 1 | use core::cmp::Ordering; 2 | 3 | use emojis::{SkinTone, UnicodeVersion}; 4 | 5 | #[test] 6 | fn get_variation() { 7 | assert_eq!(emojis::get("☹"), emojis::get("☹️")); 8 | assert_eq!(emojis::get("⭐\u{fe0f}"), emojis::get("⭐")); 9 | assert_eq!(emojis::get("1\u{fe0f}"), emojis::get("1️⃣")); 10 | assert_eq!( 11 | emojis::get("👱🏻‍♂️".trim_end_matches("\u{fe0f}")), 12 | emojis::get("👱🏻‍♂️") 13 | ); 14 | } 15 | 16 | #[test] 17 | fn iter_only_default_skin_tones() { 18 | assert!(emojis::iter().all(|emoji| matches!(emoji.skin_tone(), Some(SkinTone::Default) | None))); 19 | assert_ne!( 20 | emojis::iter() 21 | .filter(|emoji| matches!(emoji.skin_tone(), Some(SkinTone::Default))) 22 | .count(), 23 | 0 24 | ); 25 | } 26 | 27 | #[test] 28 | fn unicode_version_partial_ord() { 29 | assert!(UnicodeVersion::new(13, 0) >= UnicodeVersion::new(12, 0)); 30 | assert!(UnicodeVersion::new(12, 1) >= UnicodeVersion::new(12, 0)); 31 | assert!(UnicodeVersion::new(12, 0) >= UnicodeVersion::new(12, 0)); 32 | assert!(UnicodeVersion::new(12, 0) < UnicodeVersion::new(12, 1)); 33 | assert!(UnicodeVersion::new(11, 0) < UnicodeVersion::new(12, 1)); 34 | assert!(UnicodeVersion::new(11, 0) < UnicodeVersion::new(12, 1)); 35 | } 36 | 37 | #[test] 38 | fn emoji_eq() { 39 | let a = emojis::get("😀").unwrap(); 40 | let b = emojis::get("😃").unwrap(); 41 | assert!(a != b); 42 | assert!(b != a); 43 | assert!(a == a); 44 | assert!(b == b); 45 | assert!(a != "😃"); 46 | assert!(b == "😃"); 47 | } 48 | 49 | #[test] 50 | fn emoji_ord() { 51 | let a = emojis::get("😀").unwrap(); 52 | let b = emojis::get("😃").unwrap(); 53 | assert_eq!(a.partial_cmp(b), Some(Ordering::Less)); 54 | assert_eq!(b.partial_cmp(a), Some(Ordering::Greater)); 55 | assert_eq!(a.partial_cmp(a), Some(Ordering::Equal)); 56 | assert_eq!(b.partial_cmp(b), Some(Ordering::Equal)); 57 | assert_eq!(a.cmp(b), Ordering::Less); 58 | assert_eq!(b.cmp(a), Ordering::Greater); 59 | assert_eq!(a.cmp(a), Ordering::Equal); 60 | assert_eq!(b.cmp(b), Ordering::Equal); 61 | } 62 | 63 | #[test] 64 | fn emoji_display() { 65 | let s = emojis::get("😀").unwrap().to_string(); 66 | assert_eq!(s, "😀"); 67 | } 68 | 69 | #[test] 70 | fn emoji_skin_tones() { 71 | let skin_tones = [ 72 | SkinTone::Default, 73 | SkinTone::Light, 74 | SkinTone::MediumLight, 75 | SkinTone::Medium, 76 | SkinTone::MediumDark, 77 | SkinTone::Dark, 78 | SkinTone::LightAndMediumLight, 79 | SkinTone::LightAndMedium, 80 | SkinTone::LightAndMediumDark, 81 | SkinTone::LightAndDark, 82 | SkinTone::MediumLightAndLight, 83 | SkinTone::MediumLightAndMedium, 84 | SkinTone::MediumLightAndMediumDark, 85 | SkinTone::MediumLightAndDark, 86 | SkinTone::MediumAndLight, 87 | SkinTone::MediumAndMediumLight, 88 | SkinTone::MediumAndMediumDark, 89 | SkinTone::MediumAndDark, 90 | SkinTone::MediumDarkAndLight, 91 | SkinTone::MediumDarkAndMediumLight, 92 | SkinTone::MediumDarkAndMedium, 93 | SkinTone::MediumDarkAndDark, 94 | SkinTone::DarkAndLight, 95 | SkinTone::DarkAndMediumLight, 96 | SkinTone::DarkAndMedium, 97 | SkinTone::DarkAndMediumDark, 98 | ]; 99 | 100 | for emoji in emojis::iter() { 101 | match emoji.skin_tone() { 102 | Some(_) => { 103 | let emojis: Vec<_> = emoji.skin_tones().unwrap().collect(); 104 | assert!(emojis.len() == 6 || emojis.len() == 26); 105 | let default = emojis[0]; 106 | for (emoji, skin_tone) in emojis 107 | .iter() 108 | .zip(skin_tones.iter().copied().take(emojis.len())) 109 | { 110 | assert_eq!(emoji.skin_tone().unwrap(), skin_tone); 111 | assert_eq!(default.with_skin_tone(skin_tone).unwrap(), *emoji); 112 | assert_eq!(emoji.with_skin_tone(SkinTone::Default).unwrap(), default); 113 | } 114 | } 115 | None => { 116 | assert!(emoji.skin_tones().is_none()); 117 | } 118 | } 119 | } 120 | } 121 | 122 | #[test] 123 | fn emoji_with_skin_tone() { 124 | let e = emojis::get("🧑").unwrap(); 125 | assert_eq!( 126 | e.with_skin_tone(SkinTone::Dark).unwrap(), 127 | emojis::get("🧑🏿").unwrap() 128 | ); 129 | assert!(e.with_skin_tone(SkinTone::LightAndMediumDark).is_none()); 130 | 131 | let e = emojis::get("🤝").unwrap(); 132 | assert_eq!( 133 | e.with_skin_tone(SkinTone::Dark).unwrap(), 134 | emojis::get("🤝🏿").unwrap() 135 | ); 136 | assert_eq!( 137 | e.with_skin_tone(SkinTone::DarkAndMediumDark), 138 | emojis::get("🫱🏿‍🫲🏾") 139 | ); 140 | } 141 | 142 | #[test] 143 | fn emoji_shortcodes() { 144 | for emoji in emojis::iter() { 145 | assert_eq!(emoji.shortcodes().next(), emoji.shortcode()); 146 | } 147 | } 148 | 149 | #[test] 150 | fn group_iter_and_emojis() { 151 | let left: Vec<_> = emojis::Group::iter().flat_map(|g| g.emojis()).collect(); 152 | let right: Vec<_> = emojis::iter().collect(); 153 | assert_eq!(left, right); 154 | } 155 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # emojis 4 | 5 | [![Crates.io Version](https://badgers.space/crates/version/emojis)](https://crates.io/crates/emojis) 6 | [![Docs.rs Latest](https://badgers.space/badge/docs.rs/latest/blue)](https://docs.rs/emojis) 7 | [![Build Status](https://badgers.space/github/checks/rossmacarthur/emojis?label=build)](https://github.com/rossmacarthur/emojis/actions/workflows/build.yaml) 8 | 9 | ✨ Lookup emoji in *O(1)* time, access metadata and GitHub shortcodes, 10 | iterate over all emoji. 11 | 12 | ## Features 13 | 14 | - Lookup up emoji by Unicode value 15 | - Lookup up emoji by GitHub shortcode ([gemoji] v4.1.0) 16 | - Access emoji metadata: name, unicode version, group, skin tone, [gemoji] shortcodes 17 | - Iterate over emojis in Unicode CLDR order 18 | - Iterate over emojis in an emoji group, e.g. “Smileys & Emotion” or “Flags” 19 | - Iterate over the skin tones for an emoji 20 | - Select a specific skin tone for an emoji 21 | - Uses [Unicode v17.0](https://unicode.org/emoji/charts-17.0/emoji-released.html) emoji specification 22 | 23 | ## Getting started 24 | 25 | First, add the `emojis` crate to your Cargo manifest. 26 | 27 | ```sh 28 | cargo add emojis 29 | ``` 30 | 31 | Simply use the [`get()`][get] function to lookup emojis by Unicode value. 32 | 33 | ```rust 34 | let rocket = emojis::get("🚀").unwrap(); 35 | ``` 36 | 37 | Or the [`get_by_shortcode()`][get_by_shortcode] function to lookup emojis by 38 | [gemoji] shortcode. 39 | 40 | ```rust 41 | let rocket = emojis::get_by_shortcode("rocket").unwrap(); 42 | ``` 43 | 44 | These operations take *Ο(1)* time. 45 | 46 | ## MSRV 47 | 48 | Currently the minimum supported Rust version is 1.66 due to the dependency 49 | on `phf`. The policy of this crate is to only increase the MSRV in a 50 | breaking release. 51 | 52 | ## Breaking changes 53 | 54 | When [gemoji] or the Unicode version is upgraded this is not considered a 55 | breaking change, instead you should make sure to use 56 | [`unicode_version()`][unicode_version] to filter out newer versions. 57 | 58 | ## Examples 59 | 60 | See [examples/replace.rs] for an example that replaces `:gemoji:` names with 61 | real emojis in text. 62 | 63 | ```sh 64 | $ echo "launch :rocket:" | cargo run --example replace 65 | launch 🚀 66 | ``` 67 | 68 | [`get()`][get] and [`get_by_shortcode()`][get_by_shortcode] return an 69 | [`Emoji`][Emoji] struct which contains various metadata regarding the emoji. 70 | 71 | ```rust 72 | let hand = emojis::get("🤌").unwrap(); 73 | assert_eq!(hand.as_str(), "\u{1f90c}"); 74 | assert_eq!(hand.as_bytes(), &[0xf0, 0x9f, 0xa4, 0x8c]); 75 | assert_eq!(hand.name(), "pinched fingers"); 76 | assert_eq!(hand.unicode_version(), emojis::UnicodeVersion::new(13, 0)); 77 | assert_eq!(hand.group(), emojis::Group::PeopleAndBody); 78 | assert_eq!(hand.skin_tone(), Some(emojis::SkinTone::Default)); 79 | assert_eq!(hand.shortcode(), Some("pinched_fingers")); 80 | ``` 81 | 82 | Use [`skin_tones()`][skin_tones] to iterate over the skin tones of an 83 | emoji. 84 | 85 | ```rust 86 | let raised_hands = emojis::get("🙌🏼").unwrap(); 87 | let skin_tones: Vec<_> = raised_hands.skin_tones().unwrap().map(|e| e.as_str()).collect(); 88 | assert_eq!(skin_tones, ["🙌", "🙌🏻", "🙌🏼", "🙌🏽", "🙌🏾", "🙌🏿"]); 89 | ``` 90 | 91 | You can use the `iter()` function to iterate over all emojis. This only 92 | includes the default skin tone versions. 93 | 94 | ```rust 95 | let faces: Vec<_> = emojis::iter().map(|e| e.as_str()).take(5).collect(); 96 | assert_eq!(faces, ["😀", "😃", "😄", "😁", "😆"]); 97 | ``` 98 | 99 | It is recommended to filter the list by the maximum Unicode version that you 100 | wish to support. 101 | 102 | ```rust 103 | let iter = emojis::iter().filter(|e| { 104 | e.unicode_version() < emojis::UnicodeVersion::new(13, 0) 105 | }); 106 | ``` 107 | 108 | Using the `Group` enum you can iterate over all emojis in a group. 109 | 110 | ```rust 111 | let fruit: Vec<_> = emojis::Group::FoodAndDrink.emojis().map(|e| e.as_str()).take(5).collect(); 112 | assert_eq!(fruit, ["🍇", "🍈", "🍉", "🍊", "🍋"]); 113 | ``` 114 | 115 | #### Storing the [`Emoji`][Emoji] type 116 | 117 | If you want to store the [`Emoji`][Emoji] type in a data structure, you should 118 | store it as static reference: `&'static Emoji`. This crate intentionally 119 | does not provide any constructors or implement `Clone` or `Copy` for 120 | [`Emoji`][Emoji]. `&'static Emoji` supports `serde` serialization and 121 | deserialization, *not* `Emoji`. 122 | 123 | For example: 124 | 125 | ```rust 126 | #[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize)] 127 | enum Example { 128 | Rocket { 129 | value: &'static emojis::Emoji 130 | }, 131 | } 132 | 133 | Example::Rocket { value: emojis::get("🚀").unwrap() }; 134 | ``` 135 | 136 | [gemoji]: https://github.com/github/gemoji 137 | [get]: https://docs.rs/emojis/latest/emojis/fn.get.html 138 | [get_by_shortcode]: https://docs.rs/emojis/latest/emojis/fn.get_by_shortcode.html 139 | [unicode_version]: https://docs.rs/emojis/latest/emojis/struct.Emoji.html#method.unicode_version 140 | [examples/replace.rs]: https://github.com/rossmacarthur/emojis/blob/trunk/examples/replace.rs 141 | [Emoji]: https://docs.rs/emojis/latest/emojis/struct.Emoji.html 142 | [skin_tones]: https://docs.rs/emojis/latest/emojis/struct.Emoji.html#method.skin_tones 143 | 144 | ## License 145 | 146 | This project is distributed under the terms of both the MIT license and the Apache License (Version 2.0). 147 | 148 | See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details. 149 | -------------------------------------------------------------------------------- /generate/src/unicode/data.rs: -------------------------------------------------------------------------------- 1 | //! Parses the Unicode emoji data into a more usable format. 2 | 3 | use anyhow::bail; 4 | use anyhow::ensure; 5 | use anyhow::Context as _; 6 | use anyhow::Result; 7 | use constcat::concat; 8 | use serde::Serialize; 9 | 10 | use crate::unicode::{VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH}; 11 | use crate::util; 12 | 13 | const URL: &str = concat!( 14 | "https://unicode.org/Public/", 15 | VERSION_MAJOR, 16 | ".", 17 | VERSION_MINOR, 18 | ".", 19 | VERSION_PATCH, 20 | "/emoji/emoji-test.txt" 21 | ); 22 | 23 | /// A single entry in the file. 24 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] 25 | pub struct Entry { 26 | pub group: Group, 27 | pub subgroup: String, 28 | pub status: Status, 29 | pub unicode_version: UnicodeVersion, 30 | pub emoji: String, 31 | pub name: String, 32 | } 33 | 34 | /// The Unicode emoji group. 35 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize)] 36 | pub enum Group { 37 | SmileysAndEmotion, 38 | PeopleAndBody, 39 | AnimalsAndNature, 40 | FoodAndDrink, 41 | TravelAndPlaces, 42 | Activities, 43 | Objects, 44 | Symbols, 45 | Flags, 46 | Component, 47 | } 48 | 49 | /// The Unicode emoji data status. 50 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 51 | pub enum Status { 52 | /// A qualified emoji character, or an emoji sequence in which each emoji character is qualified. 53 | /// 54 | /// https://www.unicode.org/reports/tr51/#def_fully_qualified_emoji 55 | FullyQualified, 56 | 57 | /// An emoji sequence in which the first character is qualified but the sequence is not fully qualified. 58 | /// 59 | /// https://www.unicode.org/reports/tr51/#def_minimally_qualified_emoji 60 | MinimallyQualified, 61 | 62 | /// An emoji that is neither fully-qualified nor minimally qualified. 63 | /// 64 | /// https://www.unicode.org/reports/tr51/#def_unqualified_emoji 65 | Unqualified, 66 | 67 | /// Not an emoji, but defines building block code point(s) for emojis. 68 | Component, 69 | } 70 | 71 | /// The Unicode version. 72 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 73 | pub struct UnicodeVersion { 74 | major: u32, 75 | minor: u32, 76 | } 77 | 78 | pub fn parse() -> Result> { 79 | let data = util::cached_download(URL)?; 80 | let entries = parse_emoji_data(&data)?; 81 | Ok(entries) 82 | } 83 | 84 | fn parse_emoji_data(data: &str) -> Result> { 85 | let mut entries = Vec::new(); 86 | let mut group = String::new(); 87 | let mut subgroup = String::new(); 88 | for line in data.lines() { 89 | if line.is_empty() { 90 | continue; 91 | } else if let Some(g) = line.strip_prefix("# group: ") { 92 | group = g.trim().to_owned(); 93 | } else if let Some(s) = line.strip_prefix("# subgroup: ") { 94 | subgroup = s.trim().to_owned(); 95 | } else if line.starts_with('#') { 96 | continue; 97 | } else { 98 | ensure!(!group.is_empty(), "missing group"); 99 | ensure!(!subgroup.is_empty(), "missing subgroup"); 100 | let entry = parse_entry(parse_group(&group)?, subgroup.clone(), line)?; 101 | entries.push(entry); 102 | } 103 | } 104 | Ok(entries) 105 | } 106 | 107 | fn parse_group(s: &str) -> Result { 108 | Ok(match s { 109 | "Smileys & Emotion" => Group::SmileysAndEmotion, 110 | "People & Body" => Group::PeopleAndBody, 111 | "Animals & Nature" => Group::AnimalsAndNature, 112 | "Food & Drink" => Group::FoodAndDrink, 113 | "Travel & Places" => Group::TravelAndPlaces, 114 | "Activities" => Group::Activities, 115 | "Objects" => Group::Objects, 116 | "Symbols" => Group::Symbols, 117 | "Flags" => Group::Flags, 118 | "Component" => Group::Component, 119 | _ => bail!("invalid group: {}", s), 120 | }) 121 | } 122 | 123 | fn parse_entry(group: Group, subgroup: String, line: &str) -> Result { 124 | let (code_points, rest) = line.split_once(';').context("expected code points")?; 125 | let (status, rest) = rest.split_once('#').context("expected status")?; 126 | let (emoji, unicode_version, name) = { 127 | let mut rest = rest.trim().splitn(3, |c: char| c.is_ascii_whitespace()); 128 | let emoji = rest.next().context("expected emoji")?; 129 | let unicode_version = rest.next().context("expected unicode version")?; 130 | let name = rest.next().context("expected name")?; 131 | ensure!(rest.next().is_none()); 132 | (emoji, unicode_version, name) 133 | }; 134 | 135 | // Verify that the emoji matches the code points defined. 136 | if emoji != String::from_iter(parse_code_points(code_points)?) { 137 | bail!("emoji mismatch"); 138 | } 139 | 140 | let status = parse_status(status.trim())?; 141 | let emoji = emoji.to_owned(); 142 | let unicode_version = 143 | parse_unicode_version(unicode_version.trim()).context("invalid unicode version")?; 144 | let name = name.to_owned(); 145 | 146 | Ok(Entry { 147 | group, 148 | subgroup, 149 | status, 150 | unicode_version, 151 | emoji, 152 | name, 153 | }) 154 | } 155 | 156 | fn parse_code_points(s: &str) -> Result> { 157 | s.split_ascii_whitespace() 158 | .map(parse_code_point) 159 | .collect::>() 160 | .context("invalid code points") 161 | } 162 | 163 | fn parse_code_point(s: &str) -> Result { 164 | let scalar = u32::from_str_radix(s, 16).context("not hex")?; 165 | char::from_u32(scalar).context("not Unicode scalar value") 166 | } 167 | 168 | fn parse_status(s: &str) -> Result { 169 | Ok(match s { 170 | "fully-qualified" => Status::FullyQualified, 171 | "minimally-qualified" => Status::MinimallyQualified, 172 | "unqualified" => Status::Unqualified, 173 | "component" => Status::Component, 174 | _ => bail!("invalid status: {:?}", s), 175 | }) 176 | } 177 | 178 | fn parse_unicode_version(s: &str) -> Result { 179 | let (major, minor) = s 180 | .strip_prefix('E') 181 | .context("missing 'E'")? 182 | .split_once('.') 183 | .context("missing decimal")?; 184 | let major = major.parse().context("invalid major version")?; 185 | let minor = minor.parse().context("invalid minor version")?; 186 | Ok(UnicodeVersion { major, minor }) 187 | } 188 | -------------------------------------------------------------------------------- /generate/src/main.rs: -------------------------------------------------------------------------------- 1 | mod github; 2 | mod unicode; 3 | mod util; 4 | 5 | use std::collections::HashMap; 6 | use std::fmt; 7 | use std::fs; 8 | use std::hash::Hasher; 9 | use std::io; 10 | use std::io::Write as _; 11 | use std::path::PathBuf; 12 | 13 | use anyhow::bail; 14 | use anyhow::Result; 15 | 16 | const HEADER: &str = "// Code generated by `cargo run --package generate`. DO NOT EDIT.\n"; 17 | 18 | fn main() -> Result<()> { 19 | let dir = PathBuf::from_iter([env!("CARGO_WORKSPACE_DIR"), "src", "gen"]); 20 | 21 | let unicode_data = unicode::build()?; 22 | let github_data = github::build()?; 23 | 24 | let mut unicode_map = HashMap::new(); 25 | let mut shortcode_map = HashMap::new(); 26 | 27 | // start with extra variations 28 | for seq in &unicode_data.variations { 29 | let var = format!("{seq}\u{fe0f}"); 30 | match unicode_data.emojis.iter().enumerate().find(|(_, e)| { 31 | e.as_str() == seq || e.as_str() == var || e.as_str() == format!("{var}\u{20e3}") 32 | }) { 33 | Some((i, _)) => { 34 | unicode_map.insert(var, i.to_string()); 35 | } 36 | None => { 37 | bail!("warning: variation '{}' not found in unicode data", seq); 38 | } 39 | } 40 | } 41 | 42 | let cwd = std::env::current_dir()?; 43 | fs::remove_dir_all(&dir).ok(); 44 | fs::create_dir_all(&dir)?; 45 | 46 | let path = dir.join("mod.rs"); 47 | let mut f = fs::File::create(&path)?; 48 | writeln!(f, "{HEADER}")?; 49 | writeln!(f, "#![cfg_attr(rustfmt, rustfmt::skip)]\n")?; 50 | writeln!(f, "pub mod shortcode;")?; 51 | writeln!(f, "pub mod unicode;\n")?; 52 | writeln!( 53 | f, 54 | "use crate::{{Emoji, Group, SkinTone, UnicodeVersion}};\n" 55 | )?; 56 | writeln!( 57 | f, 58 | "/// The version of [Unicode](https://www.unicode.org/) that the emojis are based on." 59 | )?; 60 | writeln!( 61 | f, 62 | "pub const UNICODE_VERSION: UnicodeVersion = UnicodeVersion::new({}, {});\n", 63 | unicode::VERSION_MAJOR, 64 | unicode::VERSION_MINOR 65 | )?; 66 | write_emojis_slice( 67 | &mut f, 68 | &unicode_data, 69 | &github_data, 70 | &mut unicode_map, 71 | &mut shortcode_map, 72 | )?; 73 | eprintln!("generated: {}", path.strip_prefix(&cwd)?.display()); 74 | 75 | let path = dir.join("unicode.rs"); 76 | let mut f = fs::File::create(&path)?; 77 | writeln!(f, "{HEADER}")?; 78 | write_phf_map(&mut f, unicode_map)?; 79 | eprintln!("generated: {}", path.strip_prefix(&cwd)?.display()); 80 | 81 | let path = dir.join("shortcode.rs"); 82 | let mut f = fs::File::create(&path)?; 83 | writeln!(f, "{HEADER}")?; 84 | write_phf_map(&mut f, shortcode_map)?; 85 | eprintln!("generated: {}", path.strip_prefix(&cwd)?.display()); 86 | 87 | Ok(()) 88 | } 89 | 90 | fn write_emojis_slice( 91 | w: &mut W, 92 | unicode_data: &unicode::ParsedData, 93 | github_data: &github::ParsedData, 94 | unicode_map: &mut HashMap, 95 | shortcode_map: &mut HashMap, 96 | ) -> Result<()> { 97 | let mut default_skin_tone_index = 0; 98 | 99 | writeln!(w, "pub const EMOJIS: &[Emoji] = &[")?; 100 | for (i, emoji) in unicode_data.emojis.iter().enumerate() { 101 | if matches!(emoji.skin_tone, Some(unicode::SkinTone::Default)) { 102 | default_skin_tone_index = i; 103 | } 104 | write!(w, " ")?; 105 | write_emoji_struct( 106 | w, 107 | github_data, 108 | emoji, 109 | default_skin_tone_index, 110 | unicode_data.emojis[default_skin_tone_index].skin_tones, 111 | )?; 112 | writeln!(w, ",")?; 113 | 114 | unicode_map.insert(emoji.as_str().to_owned(), i.to_string()); 115 | for v in &emoji.variations { 116 | unicode_map.insert(v.to_owned(), i.to_string()); 117 | } 118 | 119 | if let Some(shortcodes) = &github_data.get(emoji.as_str()) { 120 | for shortcode in &**shortcodes { 121 | assert!(shortcode_map 122 | .insert(shortcode.to_owned(), i.to_string()) 123 | .is_none()); 124 | } 125 | } 126 | } 127 | 128 | writeln!(w, "];")?; 129 | Ok(()) 130 | } 131 | 132 | fn write_emoji_struct( 133 | w: &mut W, 134 | github_data: &github::ParsedData, 135 | emoji: &unicode::Emoji, 136 | default_skin_tone_index: usize, 137 | skin_tone_count: usize, 138 | ) -> Result<()> { 139 | let e = emoji.as_str(); 140 | let group = emoji.entry.group; 141 | let name = &emoji.entry.name; 142 | let uv = &emoji.entry.unicode_version; 143 | write!( 144 | w, 145 | "Emoji {{ emoji: \"{e}\", name: \"{name}\", unicode_version: {uv:?}, group: Group::{group:?}", 146 | )?; 147 | match emoji.skin_tone { 148 | Some(tone) => write!( 149 | w, 150 | ", skin_tone: Some(({default_skin_tone_index}, {skin_tone_count}, SkinTone::{tone:?}))", 151 | )?, 152 | None => write!(w, ", skin_tone: None")?, 153 | } 154 | match &github_data.get(e) { 155 | Some(github) => write!(w, ", shortcodes: Some(&{:?}) }}", &github)?, 156 | None => write!(w, ", shortcodes: None }}")?, 157 | } 158 | Ok(()) 159 | } 160 | 161 | fn write_phf_map(w: &mut W, map: HashMap) -> Result<()> { 162 | /// By default phf formats string keys using the Rust debug implementation, 163 | /// which uses escape sequences for some Unicode code points. But this means 164 | /// as the Rust version is updated the generated code will change. None of 165 | /// the keys in our maps contain characters that would cause invalid Rust 166 | /// syntax so we use a custom type that formats the strings as-is. 167 | #[derive(Hash, PartialEq, Eq)] 168 | struct NoEscapeStr<'a>(&'a str); 169 | 170 | impl phf_shared::PhfHash for NoEscapeStr<'_> { 171 | fn phf_hash(&self, state: &mut H) { 172 | phf_shared::PhfHash::phf_hash(self.0, state); 173 | } 174 | } 175 | impl phf_shared::FmtConst for NoEscapeStr<'_> { 176 | fn fmt_const(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 177 | write!(f, "\"{}\"", self.0) 178 | } 179 | } 180 | 181 | write!(w, "pub static MAP: phf::Map<&'static str, usize> = ")?; 182 | let mut gen = phf_codegen::Map::new(); 183 | for (key, value) in &map { 184 | gen.entry(NoEscapeStr(key), value); 185 | } 186 | writeln!( 187 | w, 188 | "{};", 189 | gen.phf_path("phf") 190 | .build() 191 | .to_string() 192 | .replace(char::is_whitespace, "") 193 | )?; 194 | Ok(()) 195 | } 196 | -------------------------------------------------------------------------------- /generate/src/unicode.rs: -------------------------------------------------------------------------------- 1 | //! Fetch and parse raw emoji data from Unicode.org. 2 | 3 | mod data; 4 | mod variations; 5 | 6 | use std::collections::HashMap; 7 | use std::str; 8 | 9 | use anyhow::bail; 10 | use anyhow::Context as _; 11 | use anyhow::Result; 12 | use serde::Serialize; 13 | 14 | pub use crate::unicode::data::Group; 15 | use crate::unicode::data::Status; 16 | 17 | pub const VERSION_MAJOR: &str = "17"; 18 | pub const VERSION_MINOR: &str = "0"; 19 | pub const VERSION_PATCH: &str = "0"; 20 | 21 | pub struct ParsedData { 22 | pub emojis: Vec, 23 | pub variations: Vec, 24 | } 25 | 26 | #[derive(Debug, Clone, PartialEq)] 27 | pub struct Emoji { 28 | pub index: usize, 29 | pub entry: data::Entry, 30 | pub skin_tones: usize, 31 | pub skin_tone: Option, 32 | pub variations: Vec, 33 | } 34 | 35 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize)] 36 | pub enum SkinTone { 37 | Default, 38 | Light, 39 | MediumLight, 40 | Medium, 41 | MediumDark, 42 | Dark, 43 | LightAndMediumLight, 44 | LightAndMedium, 45 | LightAndMediumDark, 46 | LightAndDark, 47 | MediumLightAndLight, 48 | MediumLightAndMedium, 49 | MediumLightAndMediumDark, 50 | MediumLightAndDark, 51 | MediumAndLight, 52 | MediumAndMediumLight, 53 | MediumAndMediumDark, 54 | MediumAndDark, 55 | MediumDarkAndLight, 56 | MediumDarkAndMediumLight, 57 | MediumDarkAndMedium, 58 | MediumDarkAndDark, 59 | DarkAndLight, 60 | DarkAndMediumLight, 61 | DarkAndMedium, 62 | DarkAndMediumDark, 63 | } 64 | 65 | impl Emoji { 66 | pub fn as_str(&self) -> &str { 67 | &self.entry.emoji 68 | } 69 | } 70 | 71 | pub fn build() -> Result { 72 | let mut emojis_map: HashMap> = HashMap::new(); 73 | 74 | let variations = variations::parse()?; 75 | 76 | for (index, entry) in data::parse()?.into_iter().enumerate() { 77 | if let Group::Component = entry.group { 78 | continue; 79 | } 80 | 81 | let base_name = parse_base_name(&entry.name); 82 | 83 | match entry.status { 84 | Status::Component => unreachable!(), 85 | Status::MinimallyQualified | Status::Unqualified => { 86 | // find fully qualified variation 87 | let base = emojis_map 88 | .get_mut(&base_name) 89 | .and_then(|e| e.last_mut()) 90 | .with_context(|| { 91 | format!( 92 | "failed to find fully qualified variation for '{}'", 93 | entry.name 94 | ) 95 | })?; 96 | assert_eq!(base.entry.status, Status::FullyQualified); 97 | assert_eq!(base.entry.group, entry.group); 98 | base.variations.push(entry.emoji); 99 | } 100 | Status::FullyQualified => { 101 | let skin_tone = parse_skin_tone(&entry)?; 102 | 103 | match skin_tone { 104 | None | Some(SkinTone::Default) => { 105 | // normal emoji, simply add to the list 106 | let emojis = emojis_map.entry(base_name.clone()).or_default(); 107 | assert!(emojis.is_empty(), "base emoji not the first entry!"); 108 | emojis.push(Emoji { 109 | index, 110 | entry, 111 | skin_tones: 1, 112 | skin_tone, 113 | variations: Vec::new(), 114 | }); 115 | } 116 | 117 | Some(skin_tone) => { 118 | // find the default skin tone to set it 119 | let emojis = emojis_map.get_mut(&base_name).with_context(|| { 120 | format!( 121 | "failed to find the base emoji for '{}' (base: {})", 122 | entry.name, &base_name 123 | ) 124 | })?; 125 | 126 | emojis[0].skin_tone = Some(SkinTone::Default); 127 | emojis[0].skin_tones += 1; 128 | assert!(emojis[0].skin_tones <= 26); 129 | 130 | // making sure to be consistent with the ordering of skin tones 131 | let i = emojis.partition_point(|e| e.skin_tone < Some(skin_tone)); 132 | emojis.insert( 133 | i, 134 | Emoji { 135 | index, 136 | entry, 137 | skin_tones: 1, 138 | skin_tone: Some(skin_tone), 139 | variations: Vec::new(), 140 | }, 141 | ); 142 | } 143 | } 144 | } 145 | } 146 | } 147 | 148 | // now flatten the emoji map, ensuring the order is consistent with the 149 | // original data (.index) 150 | let emojis = { 151 | let mut grouped: Vec<_> = emojis_map.into_values().collect(); 152 | grouped.sort_by_key(|e| e[0].index); 153 | for emojis in &mut grouped { 154 | emojis.sort_by_key(|e| e.skin_tone); 155 | } 156 | grouped.into_iter().flatten().collect() 157 | }; 158 | 159 | Ok(ParsedData { emojis, variations }) 160 | } 161 | 162 | fn parse_skin_tone(entry: &data::Entry) -> Result> { 163 | use SkinTone::*; 164 | 165 | let skin_tones: Vec<_> = entry 166 | .emoji 167 | .chars() 168 | .filter_map(|c| match c { 169 | '\u{1f3fb}' => Some(Light), 170 | '\u{1f3fc}' => Some(MediumLight), 171 | '\u{1f3fd}' => Some(Medium), 172 | '\u{1f3fe}' => Some(MediumDark), 173 | '\u{1f3ff}' => Some(Dark), 174 | _ => None, 175 | }) 176 | .collect(); 177 | 178 | let skin_tone = match *skin_tones.as_slice() { 179 | [] => return Ok(None), 180 | [a] => a, 181 | [Light, MediumLight] => LightAndMediumLight, 182 | [Light, Medium] => LightAndMedium, 183 | [Light, MediumDark] => LightAndMediumDark, 184 | [Light, Dark] => LightAndDark, 185 | [MediumLight, Light] => MediumLightAndLight, 186 | [MediumLight, Medium] => MediumLightAndMedium, 187 | [MediumLight, MediumDark] => MediumLightAndMediumDark, 188 | [MediumLight, Dark] => MediumLightAndDark, 189 | [Medium, Light] => MediumAndLight, 190 | [Medium, MediumLight] => MediumAndMediumLight, 191 | [Medium, MediumDark] => MediumAndMediumDark, 192 | [Medium, Dark] => MediumAndDark, 193 | [MediumDark, Light] => MediumDarkAndLight, 194 | [MediumDark, MediumLight] => MediumDarkAndMediumLight, 195 | [MediumDark, Medium] => MediumDarkAndMedium, 196 | [MediumDark, Dark] => MediumDarkAndDark, 197 | [Dark, Light] => DarkAndLight, 198 | [Dark, MediumLight] => DarkAndMediumLight, 199 | [Dark, Medium] => DarkAndMedium, 200 | [Dark, MediumDark] => DarkAndMediumDark, 201 | [a, b] if a == b => a, 202 | _ => bail!("unrecognized skin tone combination, {:?}", skin_tones), 203 | }; 204 | 205 | Ok(Some(skin_tone)) 206 | } 207 | 208 | /// Given an emoji name parse the expected base name. 209 | /// 210 | /// See the test below for examples 211 | fn parse_base_name(name: &str) -> String { 212 | let mut it = name.rsplitn(2, ':'); 213 | let right = it.next().unwrap().trim(); 214 | match it.next() { 215 | Some(left) => { 216 | let right = right 217 | .split(',') 218 | .map(str::trim) 219 | .filter(|part| !part.ends_with("skin tone")) 220 | .collect::>() 221 | .join(", "); 222 | if right.is_empty() { 223 | return left.to_owned(); 224 | } 225 | if right == "person, person" { 226 | return left.to_owned(); 227 | } 228 | format!("{left}: {right}") 229 | } 230 | None => right.to_owned(), 231 | } 232 | } 233 | 234 | #[test] 235 | fn test_parse_base_name() { 236 | struct Case { 237 | name: &'static str, 238 | exp: &'static str, 239 | } 240 | for case in [ 241 | Case { 242 | name: "grinning face", 243 | exp: "grinning face", 244 | }, 245 | Case { 246 | name: "man: blond hair", 247 | exp: "man: blond hair", 248 | }, 249 | Case { 250 | name: "handshake: light skin tone, medium-light skin tone", 251 | exp: "handshake", 252 | }, 253 | Case { 254 | name: "kiss: woman, man, light skin tone", 255 | exp: "kiss: woman, man", 256 | }, 257 | Case { 258 | name: "kiss: person, person, light skin tone, medium-light skin tone", 259 | exp: "kiss", 260 | }, 261 | ] { 262 | assert_eq!(parse_base_name(case.name), case.exp); 263 | } 264 | } 265 | -------------------------------------------------------------------------------- /RELEASES.md: -------------------------------------------------------------------------------- 1 | # 📝 Release notes 2 | 3 | ## 0.8.0 4 | 5 | *October 20th, 2025* 6 | 7 | - [Upgrade to `phf v0.13`][c125053c]. This raises the minimum supported Rust 8 | version to 1.66.0. 9 | - [Import Unicode 17.0 emojis][298370be] 10 | - [Fix `with_skin_tone` for emojis with only 5 variants][f53cf122] 11 | 12 | [c125053c]: https://github.com/rossmacarthur/emojis/commit/c125053cde13babc0ae301acdf66c7b7ca2191a7 13 | [298370be]: https://github.com/rossmacarthur/emojis/commit/298370be15b86b451f9620e9f49e75603da37da5 14 | [f53cf122]: https://github.com/rossmacarthur/emojis/commit/f53cf1221ad0bcb93c3925de80962a7a1dba1bad 15 | 16 | ## 0.7.2 17 | 18 | *August 12th, 2025* 19 | 20 | - [Implement `PartialOrd` and `Ord` for `Emoji`][e83473d3]. This allows emojis 21 | to be compared and sorted. Note that the order is based on the string 22 | representation (UTF-8 encoding) of the emoji, not the CLDR order. 23 | 24 | [e83473d3]: https://github.com/rossmacarthur/emojis/commit/e83473d3a67b9eab3f2b918d08c4ad9960e2c94f 25 | 26 | ## 0.7.1 27 | 28 | *July 31st, 2025* 29 | 30 | - [Expose the Unicode version that the emojis are based on][b458bc88]. Adds a 31 | public constant `UNICODE_VERSION` which is the version of the Unicode 32 | specification used to generate the emojis in this crate. 33 | 34 | [b458bc88]: https://github.com/rossmacarthur/emojis/commit/b458bc8853cf5e2b79e951b1ae4edacd4c892ccb 35 | 36 | ## 0.7.0 37 | 38 | *June 24th, 2025* 39 | 40 | - [Add missing emoji variation sequences][4ef3c598]. The Unicode specification 41 | allows for suffixing some sequences with `\u{fe0f}` to request an emoji 42 | presentation of the sequence. This change adds the missing sequences defined 43 | [here](https://unicode.org/Public/16.0.0/ucd/emoji/emoji-variation-sequences.txt) 44 | to the Unicode map. 45 | 46 | - [Upgrade to `phf v0.12.1`][5c8969fe]. This raises the minimum supported Rust 47 | version to 1.61.0. 48 | 49 | - [Improve codegen to not change with Rust version][640a3f18]. Previously the 50 | debug format for string keys was used to construct the `phf` maps which used 51 | escape sequences for some Unicode code points. But this meant as the Rust 52 | version is updated the generated code would change. 53 | 54 | - [Add "# Storing the `Emoji` type" section to docs][c40b8923]. Clarify how to 55 | store the `&'static Emoji` type. 56 | 57 | [4ef3c598]: https://github.com/rossmacarthur/emojis/commit/4ef3c5982b7de18c999857bb76d1e07a855654a9 58 | [5c8969fe]: https://github.com/rossmacarthur/emojis/commit/5c8969fe4daad470aa381d3be52c9a7bb20fa48f 59 | [640a3f18]: https://github.com/rossmacarthur/emojis/commit/640a3f18918603b5a9c6196f0cf4864bc5b8da16 60 | [c40b8923]: https://github.com/rossmacarthur/emojis/commit/c40b8923b637509188e7dc47a180e8c708e85246 61 | 62 | ## 0.6.4 63 | 64 | *September 29th, 2024* 65 | 66 | - [Update to Unicode 16.0 emojis][2ce453c8]. 67 | *Contributed by [**Linda_pp**](https://github.com/rhysd)* 68 | 69 | [2ce453c8]: https://github.com/rossmacarthur/emojis/commit/2ce453c88d795a54c4ca41839b14ecf81b24b63d 70 | 71 | ## 0.6.3 72 | 73 | *July 24th, 2024* 74 | 75 | - [Add `serde` support for types][d741c777]. The `&'static Emoji`, `Group`, and 76 | `SkinTone` types now support serialization and deserialization when the 77 | `serde` feature is enabled. 78 | 79 | [d741c777]: https://github.com/rossmacarthur/emojis/commit/d741c777c1dcaddc25db1cf069a768cd089ddd5e 80 | 81 | ## 0.6.2 82 | 83 | *April 21st, 2024* 84 | 85 | - [Add `Clone` to returned iterators where possible][de2a5852]. 86 | 87 | [de2a5852]: https://github.com/rossmacarthur/emojis/commit/de2a58524b3ef350bf6360d95b5fad0e7b1bebf0 88 | 89 | ## 0.6.1 90 | 91 | *September 4th, 2023* 92 | 93 | - [Update to Unicode 15.1 emojis][cb8f13f6]. 94 | 95 | [cb8f13f6]: https://github.com/rossmacarthur/emojis/commit/cb8f13f622fc39fa2b737830de918421a7ffb7d2 96 | 97 | ## 0.6.0 98 | 99 | *April 18th, 2023* 100 | 101 | - [Add a generous sprinkling of `#[inline]` attrs][73e5410b]. 102 | 103 | - [Enumerate all skin tone combinations][e1c85965]. This adds support for 104 | multi skin tone emojis, like those that display multiple people. 105 | 106 | [73e5410b]: https://github.com/rossmacarthur/emojis/commit/73e5410be38c9aa65c19fd0c7057ad508352e76c 107 | [e1c85965]: https://github.com/rossmacarthur/emojis/commit/e1c859651308ee4a29740b76519a183d82664810 108 | 109 | ## 0.5.3 110 | 111 | *April 17th, 2023* 112 | 113 | - [Update to gemoji v4.1.0 shortcodes][fde8f8d2]. 114 | 115 | [fde8f8d2]: https://github.com/rossmacarthur/emojis/commit/fde8f8d20f8d395119505e04a8907e23e0a76b07 116 | 117 | ## 0.5.2 118 | 119 | *November 25th, 2022* 120 | 121 | - [Update to gemoji v4.0.1 shortcodes][7ecc42b3]. 122 | 123 | *Contributed by [**Linda_pp**](https://github.com/rhysd)* 124 | 125 | [7ecc42b3]: https://github.com/rossmacarthur/emojis/commit/7ecc42b35d7ce7ba07ad51612a1dae0a24026aba 126 | 127 | ## 0.5.1 128 | 129 | *October 17th, 2022* 130 | 131 | ### Features 132 | 133 | - [Add function to iterate over groups][5bab0ac2]. You can now iterate over all 134 | emoji groups using the `Group::iter()` function. 135 | 136 | - [Add `shortcodes()` to iterate over an emoji's shortcodes][74b3a18c]. Some 137 | emojis have multiple shortcodes, this function allows you to iterate over 138 | them. 139 | *Contributed by [**Finn Bear**](https://github.com/FinnBear)* 140 | 141 | [5bab0ac2]: https://github.com/rossmacarthur/emojis/commit/5bab0ac2384bd894666235e73e5edf0f26038840 142 | [74b3a18c]: https://github.com/rossmacarthur/emojis/commit/74b3a18c393a5aad6597c185f41a048553190310 143 | 144 | ## 0.5.0 145 | 146 | *October 4th, 2022* 147 | 148 | - [Update to gemoji v4.0.0.rc3 shortcodes][ab7f2412]. 149 | 150 | - [Update to Unicode 15.0 emojis][da0fad25]. 151 | 152 | - [Use `phf` crate for O(1) lookups][de06cb56]. Generate compile-time maps using 153 | `phf_codegen`. This allows us to lookup emojis in O(1) time instead of the 154 | previous linear search. 155 | 156 | [da0fad25]: https://github.com/rossmacarthur/emojis/commit/da0fad25e0db8d224d1ff0cb8a393753ab97d9ec 157 | [ab7f2412]: https://github.com/rossmacarthur/emojis/commit/ab7f24125d1f2804fd01b1061765a19f5e665f40 158 | [de06cb56]: https://github.com/rossmacarthur/emojis/commit/de06cb566622d93f7a2818d1e18878eff893598f 159 | 160 | ## 0.4.0 161 | 162 | *March 29th, 2022* 163 | 164 | - [Remove `search()`][58587f4e]. 165 | 166 | - [Add `.as_bytes()` method][509ea67f]. This allows you to get the UTF-8 bytes 167 | of the emoji. 168 | 169 | - [Simplify API to `get` and `get_by_shortcode`][712f85db]. The API has been 170 | simplified to just two main lookup functions. 171 | 172 | [58587f4e]: https://github.com/rossmacarthur/emojis/commit/58587f4e3074998056954de94af565a1684ba853 173 | [509ea67f]: https://github.com/rossmacarthur/emojis/commit/509ea67f7c1eeadd3f048de810fec52e57817893 174 | [712f85db]: https://github.com/rossmacarthur/emojis/commit/712f85db9dae14d079b5f80f355fd51690c72ab2 175 | 176 | ## 0.3.0 177 | 178 | *March 1st, 2022* 179 | 180 | - [Update to Unicode 14.0 emojis][e8bbe29b]. 181 | 182 | - [Drop internal id and implement traits using emoji][c6d22463]. 183 | 184 | - [Add Unicode version][924a0ca3]. This is accessible on the emoji using 185 | `.unicode_version()`. This can be used to filter emojis by version. 186 | 187 | 188 | [e8bbe29b]: https://github.com/rossmacarthur/emojis/commit/e8bbe29bdce4f2b9d26672803fecb1b98c030adb 189 | [c6d22463]: https://github.com/rossmacarthur/emojis/commit/c6d22463fbb85e27cec810802f5c83b98dae9bd1 190 | [924a0ca3]: https://github.com/rossmacarthur/emojis/commit/924a0ca3bc8d1b6ab6c936912b53e828fbf58e68 191 | 192 | ## 0.2.1 193 | 194 | *November 19th, 2021* 195 | 196 | - [Fix some skin tone bugs][c6c7988b]. Return the default skin tone emojis in 197 | main emoji iterator and handle emojis that can have multiple skin tones. 198 | 199 | [c6c7988b]: https://github.com/rossmacarthur/emojis/commit/c6c7988bfe48219ea7de75708e6e8b63541fce9f 200 | 201 | ## 0.2.0 202 | 203 | *November 18th, 2021* 204 | 205 | - [Ergonomically support skin tones][399bf03b]. This adds better support for 206 | handling emojis with different skin tone variations. 207 | 208 | - [Make `lookup` return a reference][13d9ffa1]. 209 | 210 | - [Remove `Deref` implementation][ea6ce739]. `Emoji` is not a smart pointer, 211 | let's not abuse `Deref`. `.as_str()` works perfectly fine. 212 | 213 | - [Remove search functionality][7b53df3b]. This was removed because fuzzy 214 | searching is quite a hard problem to solve can be quite dependent on the use 215 | case. It helps simplify this crate to leave searching up to the user. 216 | 217 | [399bf03b]: https://github.com/rossmacarthur/emojis/commit/399bf03ba6071a6ca418a928383baecb873fca66 218 | [13d9ffa1]: https://github.com/rossmacarthur/emojis/commit/13d9ffa1db3bc2dadfc241b98b094854040372e1 219 | [ea6ce739]: https://github.com/rossmacarthur/emojis/commit/ea6ce739fcd343ec990dfa5f74ddd1679e689b3b 220 | [7b53df3b]: https://github.com/rossmacarthur/emojis/commit/7b53df3b938c324c180e5bc16ba70ea5c2965de7 221 | 222 | ## 0.1.2 223 | 224 | *April 7th, 2021* 225 | 226 | - [Implement `Display` for `Emoji`][a0e4c6b2]. 227 | 228 | - [Support looking up variations][35e4263e]. Unqualified and minimally qualified 229 | variations of emojis can now be looked up. The fully qualified variation will 230 | be returned. Skin tone variations of emojis can now be looked up and the 231 | default skin tone variation will be returned. 232 | 233 | [a0e4c6b2]: https://github.com/rossmacarthur/emojis/commit/a0e4c6b220b1d04fbf1ce9e27d7d121e97c970d5 234 | [35e4263e]: https://github.com/rossmacarthur/emojis/commit/35e4263eee261847202cde9955ab9ea8e3ae79ff 235 | 236 | ## 0.1.1 237 | 238 | *March 29th, 2021* 239 | 240 | - [Improve search score algorithm][c9fda861]. Add multiplier for cases where the 241 | emoji description or alias starts with the query. 242 | 243 | [c9fda861]: https://github.com/rossmacarthur/emojis/commit/c9fda861769e420ee6a49b937b35af86fef4ad3a 244 | 245 | ## 0.1.0 246 | 247 | *March 12th, 2021* 248 | 249 | - [Merge `lookup()` and `lookup_shortcode()`][b37ef644]. The lookup functions 250 | have been consolidated. 251 | 252 | - [Improve `search()` function][8219c356]. Switch to `simstr` crate and search 253 | aliases as well. 254 | 255 | - [Support GitHub (gemoji) shortcodes][1e70c5c1]. Automatically generated from 256 | the GitHub/gemoji repository data. Add `lookup_shortcode()` function to lookup 257 | by shortcode. 258 | 259 | [b37ef644]: https://github.com/rossmacarthur/emojis/commit/b37ef644a131b2fcac614ba446aeba3a0b62ced5 260 | [8219c356]: https://github.com/rossmacarthur/emojis/commit/8219c35628e01674d7f7fd1069bb6b2afb1575cf 261 | [1e70c5c1]: https://github.com/rossmacarthur/emojis/commit/1e70c5c184c65cd80db4ac9b9bb4df6b8a742952 262 | 263 | ## 0.0.0 264 | 265 | *March 6th, 2021* 266 | 267 | First version. 268 | -------------------------------------------------------------------------------- /LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "anyhow" 7 | version = "1.0.86" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" 10 | 11 | [[package]] 12 | name = "autocfg" 13 | version = "1.3.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 16 | 17 | [[package]] 18 | name = "block-buffer" 19 | version = "0.10.4" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 22 | dependencies = [ 23 | "generic-array", 24 | ] 25 | 26 | [[package]] 27 | name = "cc" 28 | version = "1.1.6" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" 31 | 32 | [[package]] 33 | name = "cfg-if" 34 | version = "1.0.0" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 37 | 38 | [[package]] 39 | name = "constcat" 40 | version = "0.6.1" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "136d3e02915a2cea4d74caa8681e2d44b1c3254bdbf17d11d41d587ff858832c" 43 | 44 | [[package]] 45 | name = "cpufeatures" 46 | version = "0.2.13" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" 49 | dependencies = [ 50 | "libc", 51 | ] 52 | 53 | [[package]] 54 | name = "crypto-common" 55 | version = "0.1.6" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 58 | dependencies = [ 59 | "generic-array", 60 | "typenum", 61 | ] 62 | 63 | [[package]] 64 | name = "curl" 65 | version = "0.4.46" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" 68 | dependencies = [ 69 | "curl-sys", 70 | "libc", 71 | "openssl-probe", 72 | "openssl-sys", 73 | "schannel", 74 | "socket2", 75 | "windows-sys", 76 | ] 77 | 78 | [[package]] 79 | name = "curl-sys" 80 | version = "0.4.73+curl-8.8.0" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "450ab250ecf17227c39afb9a2dd9261dc0035cb80f2612472fc0c4aac2dcb84d" 83 | dependencies = [ 84 | "cc", 85 | "libc", 86 | "libz-sys", 87 | "openssl-sys", 88 | "pkg-config", 89 | "vcpkg", 90 | "windows-sys", 91 | ] 92 | 93 | [[package]] 94 | name = "digest" 95 | version = "0.10.7" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 98 | dependencies = [ 99 | "block-buffer", 100 | "crypto-common", 101 | ] 102 | 103 | [[package]] 104 | name = "emojis" 105 | version = "0.8.0" 106 | dependencies = [ 107 | "phf", 108 | "serde", 109 | "serde_json", 110 | "toml", 111 | ] 112 | 113 | [[package]] 114 | name = "fastrand" 115 | version = "2.3.0" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 118 | 119 | [[package]] 120 | name = "generate" 121 | version = "0.0.0" 122 | dependencies = [ 123 | "anyhow", 124 | "constcat", 125 | "curl", 126 | "hex", 127 | "indexmap", 128 | "phf_codegen", 129 | "phf_shared", 130 | "serde", 131 | "serde_json", 132 | "sha2", 133 | ] 134 | 135 | [[package]] 136 | name = "generic-array" 137 | version = "0.14.7" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 140 | dependencies = [ 141 | "typenum", 142 | "version_check", 143 | ] 144 | 145 | [[package]] 146 | name = "hashbrown" 147 | version = "0.12.3" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 150 | 151 | [[package]] 152 | name = "hex" 153 | version = "0.4.3" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 156 | 157 | [[package]] 158 | name = "indexmap" 159 | version = "1.9.3" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 162 | dependencies = [ 163 | "autocfg", 164 | "hashbrown", 165 | ] 166 | 167 | [[package]] 168 | name = "itoa" 169 | version = "1.0.11" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 172 | 173 | [[package]] 174 | name = "libc" 175 | version = "0.2.155" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 178 | 179 | [[package]] 180 | name = "libz-sys" 181 | version = "1.1.18" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" 184 | dependencies = [ 185 | "cc", 186 | "libc", 187 | "pkg-config", 188 | "vcpkg", 189 | ] 190 | 191 | [[package]] 192 | name = "openssl-probe" 193 | version = "0.1.5" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 196 | 197 | [[package]] 198 | name = "openssl-sys" 199 | version = "0.9.103" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" 202 | dependencies = [ 203 | "cc", 204 | "libc", 205 | "pkg-config", 206 | "vcpkg", 207 | ] 208 | 209 | [[package]] 210 | name = "phf" 211 | version = "0.13.1" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" 214 | dependencies = [ 215 | "phf_shared", 216 | ] 217 | 218 | [[package]] 219 | name = "phf_codegen" 220 | version = "0.13.1" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" 223 | dependencies = [ 224 | "phf_generator", 225 | "phf_shared", 226 | ] 227 | 228 | [[package]] 229 | name = "phf_generator" 230 | version = "0.13.1" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" 233 | dependencies = [ 234 | "fastrand", 235 | "phf_shared", 236 | ] 237 | 238 | [[package]] 239 | name = "phf_shared" 240 | version = "0.13.1" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" 243 | dependencies = [ 244 | "siphasher", 245 | ] 246 | 247 | [[package]] 248 | name = "pkg-config" 249 | version = "0.3.30" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 252 | 253 | [[package]] 254 | name = "proc-macro2" 255 | version = "1.0.86" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 258 | dependencies = [ 259 | "unicode-ident", 260 | ] 261 | 262 | [[package]] 263 | name = "quote" 264 | version = "1.0.36" 265 | source = "registry+https://github.com/rust-lang/crates.io-index" 266 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 267 | dependencies = [ 268 | "proc-macro2", 269 | ] 270 | 271 | [[package]] 272 | name = "ryu" 273 | version = "1.0.18" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 276 | 277 | [[package]] 278 | name = "schannel" 279 | version = "0.1.23" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 282 | dependencies = [ 283 | "windows-sys", 284 | ] 285 | 286 | [[package]] 287 | name = "serde" 288 | version = "1.0.145" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" 291 | dependencies = [ 292 | "serde_derive", 293 | ] 294 | 295 | [[package]] 296 | name = "serde_derive" 297 | version = "1.0.145" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" 300 | dependencies = [ 301 | "proc-macro2", 302 | "quote", 303 | "syn", 304 | ] 305 | 306 | [[package]] 307 | name = "serde_json" 308 | version = "1.0.99" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" 311 | dependencies = [ 312 | "itoa", 313 | "ryu", 314 | "serde", 315 | ] 316 | 317 | [[package]] 318 | name = "sha2" 319 | version = "0.10.8" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 322 | dependencies = [ 323 | "cfg-if", 324 | "cpufeatures", 325 | "digest", 326 | ] 327 | 328 | [[package]] 329 | name = "siphasher" 330 | version = "1.0.1" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 333 | 334 | [[package]] 335 | name = "socket2" 336 | version = "0.5.7" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 339 | dependencies = [ 340 | "libc", 341 | "windows-sys", 342 | ] 343 | 344 | [[package]] 345 | name = "syn" 346 | version = "1.0.109" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 349 | dependencies = [ 350 | "proc-macro2", 351 | "quote", 352 | "unicode-ident", 353 | ] 354 | 355 | [[package]] 356 | name = "toml" 357 | version = "0.5.11" 358 | source = "registry+https://github.com/rust-lang/crates.io-index" 359 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 360 | dependencies = [ 361 | "serde", 362 | ] 363 | 364 | [[package]] 365 | name = "typenum" 366 | version = "1.17.0" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 369 | 370 | [[package]] 371 | name = "unicode-ident" 372 | version = "1.0.12" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 375 | 376 | [[package]] 377 | name = "vcpkg" 378 | version = "0.2.15" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 381 | 382 | [[package]] 383 | name = "version_check" 384 | version = "0.9.5" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 387 | 388 | [[package]] 389 | name = "windows-sys" 390 | version = "0.52.0" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 393 | dependencies = [ 394 | "windows-targets", 395 | ] 396 | 397 | [[package]] 398 | name = "windows-targets" 399 | version = "0.52.6" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 402 | dependencies = [ 403 | "windows_aarch64_gnullvm", 404 | "windows_aarch64_msvc", 405 | "windows_i686_gnu", 406 | "windows_i686_gnullvm", 407 | "windows_i686_msvc", 408 | "windows_x86_64_gnu", 409 | "windows_x86_64_gnullvm", 410 | "windows_x86_64_msvc", 411 | ] 412 | 413 | [[package]] 414 | name = "windows_aarch64_gnullvm" 415 | version = "0.52.6" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 418 | 419 | [[package]] 420 | name = "windows_aarch64_msvc" 421 | version = "0.52.6" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 424 | 425 | [[package]] 426 | name = "windows_i686_gnu" 427 | version = "0.52.6" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 430 | 431 | [[package]] 432 | name = "windows_i686_gnullvm" 433 | version = "0.52.6" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 436 | 437 | [[package]] 438 | name = "windows_i686_msvc" 439 | version = "0.52.6" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 442 | 443 | [[package]] 444 | name = "windows_x86_64_gnu" 445 | version = "0.52.6" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 448 | 449 | [[package]] 450 | name = "windows_x86_64_gnullvm" 451 | version = "0.52.6" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 454 | 455 | [[package]] 456 | name = "windows_x86_64_msvc" 457 | version = "0.52.6" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 460 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! ✨ Lookup emoji in *O(1)* time, access metadata and GitHub shortcodes, 2 | //! iterate over all emoji. 3 | //! 4 | //! # Features 5 | //! 6 | //! - Lookup up emoji by Unicode value 7 | //! - Lookup up emoji by GitHub shortcode ([gemoji] v4.1.0) 8 | //! - Access emoji metadata: name, unicode version, group, skin tone, [gemoji] shortcodes 9 | //! - Iterate over emojis in Unicode CLDR order 10 | //! - Iterate over emojis in an emoji group, e.g. "Smileys & Emotion" or "Flags" 11 | //! - Iterate over the skin tones for an emoji 12 | //! - Select a specific skin tone for an emoji 13 | //! - Uses [Unicode v17.0](https://unicode.org/emoji/charts-17.0/emoji-released.html) emoji specification 14 | //! 15 | //! [gemoji]: https://github.com/github/gemoji 16 | //! 17 | //! # Getting started 18 | //! 19 | //! First, add the `emojis` crate to your Cargo manifest. 20 | //! 21 | //! ```sh 22 | //! cargo add emojis 23 | //! ``` 24 | //! 25 | //! Simply use the [`get()`][get] function to lookup emojis by Unicode value. 26 | //! ``` 27 | //! let rocket = emojis::get("🚀").unwrap(); 28 | //! ``` 29 | //! 30 | //! Or the [`get_by_shortcode()`][get_by_shortcode] function to lookup emojis by 31 | //! [gemoji] shortcode. 32 | //! 33 | //! ``` 34 | //! let rocket = emojis::get_by_shortcode("rocket").unwrap(); 35 | //! ``` 36 | //! 37 | //! These operations take *Ο(1)* time. 38 | //! 39 | //! # MSRV 40 | //! 41 | //! Currently the minimum supported Rust version is 1.66 due to the dependency 42 | //! on [`phf`]. The policy of this crate is to only increase the MSRV in a 43 | //! breaking release. 44 | //! 45 | //! # Breaking changes 46 | //! 47 | //! When [gemoji] or the Unicode version is upgraded this is not considered a 48 | //! breaking change, instead you should make sure to use 49 | //! [`unicode_version()`][Emoji::unicode_version] to filter out newer versions. 50 | //! 51 | //! # Examples 52 | //! 53 | //! See [examples/replace.rs] for an example that replaces `:gemoji:` names with 54 | //! real emojis in text. 55 | //! 56 | //! ```sh 57 | //! $ echo "launch :rocket:" | cargo run --example replace 58 | //! launch 🚀 59 | //! ``` 60 | //! 61 | //! [`get()`][get] and [`get_by_shortcode()`][get_by_shortcode] return an 62 | //! [`Emoji`] struct which contains various metadata regarding the emoji. 63 | //! ``` 64 | //! let hand = emojis::get("🤌").unwrap(); 65 | //! assert_eq!(hand.as_str(), "\u{1f90c}"); 66 | //! assert_eq!(hand.as_bytes(), &[0xf0, 0x9f, 0xa4, 0x8c]); 67 | //! assert_eq!(hand.name(), "pinched fingers"); 68 | //! assert_eq!(hand.unicode_version(), emojis::UnicodeVersion::new(13, 0)); 69 | //! assert_eq!(hand.group(), emojis::Group::PeopleAndBody); 70 | //! assert_eq!(hand.skin_tone(), Some(emojis::SkinTone::Default)); 71 | //! assert_eq!(hand.shortcode(), Some("pinched_fingers")); 72 | //! ``` 73 | //! 74 | //! Use [`skin_tones()`][Emoji::skin_tones] to iterate over the skin tones of an 75 | //! emoji. 76 | //! ``` 77 | //! let raised_hands = emojis::get("🙌🏼").unwrap(); 78 | //! let skin_tones: Vec<_> = raised_hands.skin_tones().unwrap().map(|e| e.as_str()).collect(); 79 | //! assert_eq!(skin_tones, ["🙌", "🙌🏻", "🙌🏼", "🙌🏽", "🙌🏾", "🙌🏿"]); 80 | //! ``` 81 | //! 82 | //! You can use the [`iter()`] function to iterate over all emojis. This only 83 | //! includes the default skin tone versions. 84 | //! ``` 85 | //! let faces: Vec<_> = emojis::iter().map(|e| e.as_str()).take(5).collect(); 86 | //! assert_eq!(faces, ["😀", "😃", "😄", "😁", "😆"]); 87 | //! ``` 88 | //! 89 | //! It is recommended to filter the list by the maximum Unicode version that you 90 | //! wish to support. 91 | //! ``` 92 | //! let iter = emojis::iter().filter(|e| { 93 | //! e.unicode_version() < emojis::UnicodeVersion::new(13, 0) 94 | //! }); 95 | //! ``` 96 | //! 97 | //! Using the [`Group`] enum you can iterate over all emojis in a group. 98 | //! ``` 99 | //! let fruit: Vec<_> = emojis::Group::FoodAndDrink.emojis().map(|e| e.as_str()).take(5).collect(); 100 | //! assert_eq!(fruit, ["🍇", "🍈", "🍉", "🍊", "🍋"]); 101 | //! ``` 102 | #![cfg_attr( 103 | feature = "serde", 104 | doc = r#" 105 | ### Storing the [`Emoji`] type 106 | 107 | If you want to store the [`Emoji`] type in a data structure, you should 108 | store it as static reference: `&'static Emoji`. This crate intentionally 109 | does not provide any constructors or implement [`Clone`] or [`Copy`] for 110 | [`Emoji`]. `&'static Emoji` supports [`serde`] serialization and 111 | deserialization, *not* `Emoji`. 112 | 113 | For example: 114 | 115 | ``` 116 | #[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize)] 117 | enum Example { 118 | Rocket { 119 | value: &'static emojis::Emoji 120 | }, 121 | } 122 | 123 | Example::Rocket { value: emojis::get("🚀").unwrap() }; 124 | ```"# 125 | )] 126 | //! 127 | //! [examples/replace.rs]: https://github.com/rossmacarthur/emojis/blob/trunk/examples/replace.rs 128 | //! [gemoji]: https://github.com/github/gemoji 129 | 130 | #![no_std] 131 | 132 | #[cfg(test)] 133 | extern crate alloc; 134 | 135 | mod gen; 136 | 137 | use core::cmp; 138 | use core::convert; 139 | use core::fmt; 140 | use core::hash; 141 | 142 | pub use crate::gen::UNICODE_VERSION; 143 | 144 | /// Represents an emoji. 145 | /// 146 | /// See [Unicode.org](https://unicode.org/emoji/charts/full-emoji-list.html) for 147 | /// more information. 148 | #[derive(Debug)] 149 | pub struct Emoji { 150 | emoji: &'static str, 151 | name: &'static str, 152 | unicode_version: UnicodeVersion, 153 | group: Group, 154 | 155 | // Stores the id of the emoji with the default skin tone, the number of 156 | // skin tones and then the skin tone of the current emoji. 157 | // 158 | // (, , ) 159 | // 160 | skin_tone: Option<(u16, u8, SkinTone)>, 161 | 162 | shortcodes: Option<&'static [&'static str]>, 163 | } 164 | 165 | /// A Unicode version. 166 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] 167 | #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 168 | pub struct UnicodeVersion { 169 | major: u32, 170 | minor: u32, 171 | } 172 | 173 | /// A category for an emoji. 174 | /// 175 | /// Based on Unicode CLDR data. 176 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] 177 | #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 178 | pub enum Group { 179 | SmileysAndEmotion, 180 | PeopleAndBody, 181 | AnimalsAndNature, 182 | FoodAndDrink, 183 | TravelAndPlaces, 184 | Activities, 185 | Objects, 186 | Symbols, 187 | Flags, 188 | } 189 | 190 | /// The skin tone of an emoji. 191 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 192 | #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 193 | #[non_exhaustive] 194 | pub enum SkinTone { 195 | Default = 0, 196 | Light = 1, 197 | MediumLight = 2, 198 | Medium = 3, 199 | MediumDark = 4, 200 | Dark = 5, 201 | LightAndMediumLight = 6, 202 | LightAndMedium = 7, 203 | LightAndMediumDark = 8, 204 | LightAndDark = 9, 205 | MediumLightAndLight = 10, 206 | MediumLightAndMedium = 11, 207 | MediumLightAndMediumDark = 12, 208 | MediumLightAndDark = 13, 209 | MediumAndLight = 14, 210 | MediumAndMediumLight = 15, 211 | MediumAndMediumDark = 16, 212 | MediumAndDark = 17, 213 | MediumDarkAndLight = 18, 214 | MediumDarkAndMediumLight = 19, 215 | MediumDarkAndMedium = 20, 216 | MediumDarkAndDark = 21, 217 | DarkAndLight = 22, 218 | DarkAndMediumLight = 23, 219 | DarkAndMedium = 24, 220 | DarkAndMediumDark = 25, 221 | } 222 | 223 | impl UnicodeVersion { 224 | /// Construct a new version. 225 | #[inline] 226 | pub const fn new(major: u32, minor: u32) -> Self { 227 | Self { major, minor } 228 | } 229 | 230 | #[inline] 231 | pub const fn major(self) -> u32 { 232 | self.major 233 | } 234 | 235 | #[inline] 236 | pub const fn minor(self) -> u32 { 237 | self.minor 238 | } 239 | } 240 | 241 | impl Emoji { 242 | /// Returns this emoji as a string. 243 | /// 244 | /// # Examples 245 | /// 246 | /// ``` 247 | /// let rocket = emojis::get("🚀").unwrap(); 248 | /// assert_eq!(rocket.as_str(), "🚀") 249 | /// ``` 250 | #[inline] 251 | pub const fn as_str(&self) -> &str { 252 | self.emoji 253 | } 254 | 255 | /// Returns this emoji as slice of UTF-8 encoded bytes. 256 | /// 257 | /// # Examples 258 | /// 259 | /// ``` 260 | /// let rocket = emojis::get("🚀").unwrap(); 261 | /// assert_eq!(rocket.as_bytes(), &[0xf0, 0x9f, 0x9a, 0x80]); 262 | /// ``` 263 | #[inline] 264 | pub const fn as_bytes(&self) -> &[u8] { 265 | self.emoji.as_bytes() 266 | } 267 | 268 | /// Returns the CLDR name for this emoji. 269 | /// 270 | /// # Examples 271 | /// 272 | /// ``` 273 | /// let cool = emojis::get("😎").unwrap(); 274 | /// assert_eq!(cool.name(), "smiling face with sunglasses"); 275 | /// ``` 276 | #[inline] 277 | pub const fn name(&self) -> &str { 278 | self.name 279 | } 280 | 281 | /// Returns the Unicode version this emoji first appeared in. 282 | /// 283 | /// # Examples 284 | /// 285 | /// ``` 286 | /// use emojis::UnicodeVersion; 287 | /// 288 | /// let villain = emojis::get("🦹").unwrap(); 289 | /// assert_eq!(villain.unicode_version(), UnicodeVersion::new(11, 0)); 290 | /// ``` 291 | #[inline] 292 | pub const fn unicode_version(&self) -> UnicodeVersion { 293 | self.unicode_version 294 | } 295 | 296 | /// Returns the group this emoji belongs to. 297 | /// 298 | /// # Examples 299 | /// 300 | /// ``` 301 | /// use emojis::Group; 302 | /// 303 | /// let flag = emojis::get("🇿🇦").unwrap(); 304 | /// assert_eq!(flag.group(), Group::Flags); 305 | /// ``` 306 | #[inline] 307 | pub const fn group(&self) -> Group { 308 | self.group 309 | } 310 | 311 | /// Returns the skin tone of this emoji. 312 | /// 313 | /// # Examples 314 | /// 315 | /// ``` 316 | /// use emojis::SkinTone; 317 | /// 318 | /// let peace = emojis::get("✌️").unwrap(); 319 | /// assert_eq!(peace.skin_tone(), Some(SkinTone::Default)); 320 | /// 321 | /// let peace = emojis::get("✌🏽").unwrap(); 322 | /// assert_eq!(peace.skin_tone(), Some(SkinTone::Medium)); 323 | /// ``` 324 | /// 325 | /// For emojis where skin tones are not applicable this will be `None`. 326 | /// 327 | /// ``` 328 | /// let cool = emojis::get("😎").unwrap(); 329 | /// assert!(cool.skin_tone().is_none()); 330 | /// ``` 331 | #[inline] 332 | pub fn skin_tone(&self) -> Option { 333 | self.skin_tone.map(|(_, _, v)| v) 334 | } 335 | 336 | /// Returns an iterator over the emoji and all the related skin tone emojis. 337 | /// 338 | /// # Examples 339 | /// 340 | /// ``` 341 | /// use emojis::Emoji; 342 | /// 343 | /// let luck = emojis::get("🤞🏼").unwrap(); 344 | /// let skin_tones: Vec<_> = luck.skin_tones().unwrap().map(Emoji::as_str).collect(); 345 | /// assert_eq!(skin_tones, ["🤞", "🤞🏻", "🤞🏼", "🤞🏽", "🤞🏾", "🤞🏿"]); 346 | /// ``` 347 | /// 348 | /// Some emojis have 26 skin tones! 349 | /// 350 | /// ``` 351 | /// use emojis::SkinTone; 352 | /// 353 | /// let couple = emojis::get("👩🏿‍❤️‍👨🏼").unwrap(); 354 | /// let skin_tones = couple.skin_tones().unwrap().count(); 355 | /// assert_eq!(skin_tones, 26); 356 | /// ``` 357 | /// 358 | /// For emojis where skin tones are not applicable this will return `None`. 359 | /// 360 | /// ``` 361 | /// let cool = emojis::get("😎").unwrap(); 362 | /// assert!(cool.skin_tones().is_none()); 363 | /// ``` 364 | #[inline] 365 | pub fn skin_tones(&self) -> Option + Clone> { 366 | let (i, n, _) = self.skin_tone?; 367 | Some(crate::gen::EMOJIS[i as usize..].iter().take(n as usize)) 368 | } 369 | 370 | /// Returns a version of this emoji that has the given skin tone. 371 | /// 372 | /// # Examples 373 | /// 374 | /// ``` 375 | /// use emojis::SkinTone; 376 | /// 377 | /// let raised_hands = emojis::get("🙌🏼") 378 | /// .unwrap() 379 | /// .with_skin_tone(SkinTone::MediumDark) 380 | /// .unwrap(); 381 | /// assert_eq!(raised_hands, emojis::get("🙌🏾").unwrap()); 382 | /// ``` 383 | /// 384 | /// ``` 385 | /// use emojis::SkinTone; 386 | /// 387 | /// let couple = emojis::get("👩‍❤️‍👨") 388 | /// .unwrap() 389 | /// .with_skin_tone(SkinTone::DarkAndMediumLight) 390 | /// .unwrap(); 391 | /// assert_eq!(couple, emojis::get("👩🏿‍❤️‍👨🏼").unwrap()); 392 | /// ``` 393 | /// 394 | /// For emojis where the skin tone is not applicable this will return 395 | /// `None`. 396 | /// 397 | /// ``` 398 | /// use emojis::SkinTone; 399 | /// 400 | /// let cool = emojis::get("😎").unwrap(); 401 | /// assert!(cool.with_skin_tone(SkinTone::Medium).is_none()); 402 | /// ``` 403 | #[inline] 404 | pub fn with_skin_tone(&self, skin_tone: SkinTone) -> Option<&Self> { 405 | // This works because in the generated code we explicitly order skin tone 406 | // variants in the order of the SkinTone enum variants. 407 | // See file://../generate/src/unicode.rs 408 | let (i, n, _) = self.skin_tone?; 409 | if skin_tone as u8 >= n { 410 | return None; 411 | } 412 | Some(&crate::gen::EMOJIS[(i as usize) + (skin_tone as usize)]) 413 | } 414 | 415 | /// Returns the first GitHub shortcode for this emoji. 416 | /// 417 | /// Most emojis only have zero or one shortcode but for a few there are 418 | /// multiple. Use the [`shortcodes()`][Emoji::shortcodes] method to return 419 | /// all the shortcodes. See [gemoji] for more information. 420 | /// 421 | /// For emojis that have zero shortcodes this will return `None`. 422 | /// 423 | /// # Examples 424 | /// 425 | /// ``` 426 | /// let thinking = emojis::get("🤔").unwrap(); 427 | /// assert_eq!(thinking.shortcode().unwrap(), "thinking"); 428 | /// ``` 429 | /// 430 | /// [gemoji]: https://github.com/github/gemoji 431 | #[inline] 432 | pub fn shortcode(&self) -> Option<&str> { 433 | self.shortcodes 434 | .and_then(|shortcode| shortcode.first().copied()) 435 | } 436 | 437 | /// Returns an iterator over the GitHub shortcodes for this emoji. 438 | /// 439 | /// Most emojis only have zero or one shortcode but for a few there are 440 | /// multiple. Use the [`shortcode()`][Emoji::shortcode] method to return the 441 | /// first shortcode. See [gemoji] for more information. 442 | /// 443 | /// For emojis that have zero shortcodes this will return an empty iterator. 444 | /// 445 | /// # Examples 446 | /// 447 | /// ``` 448 | /// let laughing = emojis::get("😆").unwrap(); 449 | /// assert_eq!( 450 | /// laughing.shortcodes().collect::>(), 451 | /// vec!["laughing", "satisfied"] 452 | /// ); 453 | /// ``` 454 | /// 455 | /// [gemoji]: https://github.com/github/gemoji 456 | #[inline] 457 | pub fn shortcodes(&self) -> impl Iterator + Clone { 458 | self.shortcodes.into_iter().flatten().copied() 459 | } 460 | } 461 | 462 | impl cmp::PartialEq for Emoji { 463 | #[inline] 464 | fn eq(&self, other: &Emoji) -> bool { 465 | self.emoji.eq(other.emoji) 466 | } 467 | } 468 | 469 | impl cmp::PartialEq for Emoji { 470 | #[inline] 471 | fn eq(&self, s: &str) -> bool { 472 | self.emoji.eq(s) 473 | } 474 | } 475 | 476 | // TODO: needed? 477 | impl cmp::PartialEq<&str> for Emoji { 478 | #[inline] 479 | fn eq(&self, s: &&str) -> bool { 480 | self.emoji.eq(*s) 481 | } 482 | } 483 | 484 | impl cmp::Eq for Emoji {} 485 | 486 | impl cmp::PartialOrd for Emoji { 487 | /// Compares two emojis based on their *Unicode* value. 488 | #[inline] 489 | fn partial_cmp(&self, other: &Emoji) -> Option { 490 | Some(self.cmp(other)) 491 | } 492 | } 493 | 494 | impl cmp::Ord for Emoji { 495 | /// Compares two emojis based on their *Unicode* value. 496 | #[inline] 497 | fn cmp(&self, other: &Emoji) -> cmp::Ordering { 498 | self.emoji.cmp(other.emoji) 499 | } 500 | } 501 | 502 | impl hash::Hash for Emoji { 503 | #[inline] 504 | fn hash(&self, state: &mut H) { 505 | self.emoji.hash(state); 506 | } 507 | } 508 | 509 | impl convert::AsRef for Emoji { 510 | #[inline] 511 | fn as_ref(&self) -> &str { 512 | self.as_str() 513 | } 514 | } 515 | 516 | impl convert::AsRef<[u8]> for Emoji { 517 | #[inline] 518 | fn as_ref(&self) -> &[u8] { 519 | self.as_bytes() 520 | } 521 | } 522 | 523 | impl fmt::Display for Emoji { 524 | #[inline] 525 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 526 | self.as_str().fmt(f) 527 | } 528 | } 529 | 530 | #[cfg(feature = "serde")] 531 | impl serde::Serialize for &'static Emoji { 532 | fn serialize(&self, serializer: S) -> Result 533 | where 534 | S: serde::Serializer, 535 | { 536 | serializer.serialize_str(self.as_str()) 537 | } 538 | } 539 | 540 | #[cfg(feature = "serde")] 541 | impl<'de> serde::Deserialize<'de> for &'static Emoji { 542 | fn deserialize(deserializer: D) -> Result 543 | where 544 | D: serde::Deserializer<'de>, 545 | { 546 | struct Visitor; 547 | 548 | impl<'de> serde::de::Visitor<'de> for Visitor { 549 | type Value = &'static Emoji; 550 | 551 | fn expecting(&self, formatter: &mut core::fmt::Formatter) -> core::fmt::Result { 552 | formatter.write_str("a string representing an emoji") 553 | } 554 | 555 | fn visit_str(self, value: &str) -> Result 556 | where 557 | E: serde::de::Error, 558 | { 559 | crate::get(value).ok_or_else(|| E::custom("invalid emoji")) 560 | } 561 | } 562 | 563 | deserializer.deserialize_str(Visitor) 564 | } 565 | } 566 | 567 | impl Group { 568 | /// Returns an iterator over all groups. 569 | /// 570 | /// # Examples 571 | /// 572 | /// ``` 573 | /// let mut iter = emojis::Group::iter(); 574 | /// assert_eq!(iter.next().unwrap(), emojis::Group::SmileysAndEmotion); 575 | /// assert_eq!(iter.next().unwrap(), emojis::Group::PeopleAndBody); 576 | /// ``` 577 | #[inline] 578 | pub fn iter() -> impl Iterator + Clone { 579 | [ 580 | Self::SmileysAndEmotion, 581 | Self::PeopleAndBody, 582 | Self::AnimalsAndNature, 583 | Self::FoodAndDrink, 584 | Self::TravelAndPlaces, 585 | Self::Activities, 586 | Self::Objects, 587 | Self::Symbols, 588 | Self::Flags, 589 | ] 590 | .iter() 591 | .copied() 592 | } 593 | 594 | /// Returns an iterator over all emojis in this group. 595 | /// 596 | /// # Examples 597 | /// 598 | /// ``` 599 | /// let flags: Vec<_> = emojis::Group::Flags.emojis().map(|e| e.as_str()).take(5).collect(); 600 | /// assert_eq!(flags, ["🏁", "🚩", "🎌", "🏴", "🏳️"]); 601 | /// ``` 602 | #[inline] 603 | pub fn emojis(&self) -> impl Iterator { 604 | let group = *self; 605 | iter() 606 | .skip_while(move |emoji| emoji.group != group) 607 | .take_while(move |emoji| emoji.group == group) 608 | } 609 | } 610 | 611 | /// Returns an iterator over all emojis. 612 | /// 613 | /// - Ordered by Unicode CLDR data. 614 | /// - Excludes non-default skin tones. 615 | /// 616 | /// # Examples 617 | /// 618 | /// ``` 619 | /// let faces: Vec<_> = emojis::iter().map(|e| e.as_str()).take(5).collect(); 620 | /// assert_eq!(faces, ["😀", "😃", "😄", "😁", "😆"]); 621 | /// ``` 622 | #[inline] 623 | pub fn iter() -> impl Iterator + Clone { 624 | crate::gen::EMOJIS 625 | .iter() 626 | .filter(|emoji| matches!(emoji.skin_tone(), Some(SkinTone::Default) | None)) 627 | } 628 | 629 | /// Lookup an emoji by Unicode value. 630 | /// 631 | /// This take *Ο(1)* time. 632 | /// 633 | /// # Note 634 | /// 635 | /// If passed a minimally qualified or unqualified emoji this will return the 636 | /// emoji struct containing the fully qualified version. 637 | /// 638 | /// # Examples 639 | /// 640 | /// In the ordinary case. 641 | /// 642 | /// ``` 643 | /// let emoji = "🚀"; 644 | /// let rocket = emojis::get(emoji).unwrap(); 645 | /// assert!(rocket.as_str() == emoji); 646 | /// assert_eq!(rocket.shortcode().unwrap(), "rocket"); 647 | /// ``` 648 | /// 649 | /// For a minimally qualified or unqualified emoji. 650 | /// 651 | /// ``` 652 | /// let unqualified = "\u{1f43f}"; 653 | /// let fully_qualified = "\u{1f43f}\u{fe0f}"; 654 | /// let chipmunk = emojis::get(unqualified).unwrap(); 655 | /// assert_eq!(chipmunk.as_str(), fully_qualified); 656 | /// assert_eq!(chipmunk.shortcode().unwrap(), "chipmunk"); 657 | /// ``` 658 | #[inline] 659 | pub fn get(s: &str) -> Option<&'static Emoji> { 660 | crate::gen::unicode::MAP 661 | .get(s) 662 | .map(|&i| &crate::gen::EMOJIS[i]) 663 | } 664 | 665 | /// Lookup an emoji by GitHub shortcode. 666 | /// 667 | /// This take *Ο(1)* time. 668 | /// 669 | /// # Examples 670 | /// 671 | /// ``` 672 | /// let rocket = emojis::get_by_shortcode("rocket").unwrap(); 673 | /// assert_eq!(rocket, "🚀"); 674 | /// ``` 675 | #[inline] 676 | pub fn get_by_shortcode(s: &str) -> Option<&'static Emoji> { 677 | crate::gen::shortcode::MAP 678 | .get(s) 679 | .map(|&i| &crate::gen::EMOJIS[i]) 680 | } 681 | -------------------------------------------------------------------------------- /src/gen/shortcode.rs: -------------------------------------------------------------------------------- 1 | // Code generated by `cargo run --package generate`. DO NOT EDIT. 2 | 3 | pub static MAP: phf::Map<&'static str, usize> = phf::Map{key:16287231350648472473,disps:&[(0,42),(0,7),(0,79),(0,19),(0,0),(0,10),(0,0),(0,100),(0,987),(0,1),(0,26),(0,200),(0,147),(0,76),(0,0),(0,15),(0,407),(0,287),(0,160),(0,107),(0,0),(0,43),(0,0),(0,15),(0,5),(0,33),(0,38),(0,23),(0,2),(0,543),(0,8),(0,6),(0,30),(0,910),(0,47),(0,8),(0,25),(0,1145),(0,13),(0,155),(0,28),(0,1242),(0,489),(0,284),(0,2),(0,536),(0,267),(0,460),(0,178),(0,0),(0,12),(0,0),(0,224),(0,11),(0,1455),(0,1),(0,52),(0,12),(0,0),(0,8),(0,473),(0,14),(0,47),(0,823),(0,464),(0,87),(0,2),(0,1),(1,77),(0,2),(0,73),(0,23),(0,125),(0,17),(0,183),(0,1),(0,1),(0,1835),(0,213),(0,1),(0,3),(0,1),(0,838),(0,2),(0,34),(0,24),(0,330),(0,15),(0,22),(0,102),(0,79),(0,1614),(0,29),(0,102),(0,84),(0,61),(0,124),(0,1581),(0,284),(0,4),(0,16),(0,15),(0,643),(0,0),(0,15),(0,0),(0,730),(0,1),(0,761),(0,23),(0,206),(0,469),(0,7),(0,11),(0,832),(1,104),(0,1),(0,73),(0,174),(0,872),(0,161),(0,15),(0,96),(0,306),(0,0),(0,835),(0,125),(0,26),(1,0),(1,1174),(0,1),(0,489),(0,30),(0,112),(0,13),(0,893),(1,1014),(0,0),(0,0),(0,19),(0,3),(0,5),(1,882),(1,0),(0,123),(0,10),(1,679),(0,0),(0,683),(0,1432),(0,0),(0,11),(0,333),(0,6),(0,31),(0,29),(0,1089),(0,19),(1,3),(1,1773),(1,1506),(0,3),(0,24),(0,896),(0,1779),(0,368),(0,14),(0,104),(0,18),(0,172),(0,93),(0,12),(0,151),(0,20),(0,1408),(0,473),(0,466),(0,9),(0,115),(0,545),(0,9),(0,442),(0,14),(0,41),(0,90),(0,838),(0,198),(0,1),(0,85),(0,1412),(0,1150),(0,644),(0,97),(0,466),(0,31),(0,46),(0,116),(0,176),(0,206),(0,671),(0,62),(0,41),(0,379),(1,1758),(0,0),(0,709),(0,628),(0,783),(0,3),(0,108),(0,18),(0,1037),(0,106),(0,8),(0,32),(0,122),(0,23),(0,157),(0,887),(0,1151),(0,13),(0,675),(0,54),(0,642),(2,262),(0,98),(0,13),(0,12),(1,212),(0,1694),(0,109),(0,223),(0,1),(0,1592),(0,88),(0,76),(0,0),(0,136),(0,1),(0,1053),(0,795),(1,945),(2,1573),(0,99),(0,85),(0,725),(0,541),(0,4),(0,2),(0,17),(1,199),(0,309),(0,439),(1,906),(4,1139),(0,339),(0,17),(0,1430),(0,0),(0,4),(0,320),(0,183),(0,1604),(0,36),(0,456),(0,972),(0,31),(0,176),(0,1648),(0,309),(0,1887),(0,793),(1,553),(0,7),(0,0),(0,1),(0,28),(0,1849),(0,282),(0,23),(0,1423),(0,0),(0,58),(0,19),(0,482),(0,1477),(1,641),(0,1),(0,87),(0,8),(1,300),(2,1537),(0,28),(2,1904),(3,384),(0,75),(1,955),(0,1),(0,30),(0,0),(2,1145),(0,32),(0,128),(0,5),(1,913),(1,235),(0,187),(0,2),(0,277),(1,38),(0,1639),(3,1023),(0,45),(3,1637),(0,1026),(0,69),(7,1888),(0,0),(1,1317),(1,1343),(0,666),(0,1563),(0,210),(0,1615),(0,1),(2,1261),(0,427),(0,1),(0,94),(0,3),(2,84),(3,1279),(1,1006),(1,415),(0,75),(0,0),(1,1005),(0,310),(0,297),(5,1056),(0,4),(0,1),(0,138),(10,1777),(0,1375),(0,1),(0,52),(0,81),(0,1),(0,239),(0,1),(0,5),(0,131),(0,47),(0,214),(4,216),(0,495),(0,434),(0,23),(5,84),(0,1),(0,233),(0,3),(6,1009),(0,28),(0,1452),(0,231),(0,46),(3,441),(0,361),(0,7),(0,46),(1,1169),(0,203),(0,157),(0,434),(0,104),(18,150),(0,242),(0,65),(23,1853),(0,85),(0,1619),],entries:&[("eggplant",2770),("cn",3730),("red_square",3649),("hamburger",2801),("printer",3273),("brown_circle",3646),("sound",3233),("no_good",701),("princess",1223),("free",3611),("family_man_woman_boy",2553),("chestnut",2783),("cookie",2843),("dna",3405),("twisted_rightwards_arrows",3523),("persevere",97),("test_tube",3403),("coffee",2855),("iphone",3262),("new",3615),("montenegro",3828),("cook",935),("musical_keyboard",3254),("book",3300),("cup_with_straw",2868),("convenience_store",2915),("genie_woman",1489),("netherlands",3854),("rice_scene",3113),("gambia",3772),("female_detective",1163),("frowning_man",671),("dress",3196),("chad",3904),("diego_garcia",3742),("carpentry_saw",3386),("massage",1495),("dash",163),("vs",3622),("art",3179),("serbia",3878),("arrow_up_down",3484),("jordan",3801),("iraq",3795),("older_adult",647),("troll",1493),("ambulance",2963),("clinking_glasses",2865),("golfing_man",1923),("iceland",3797),("heart_hands",381),("mongolia",3835),("sleepy",54),("superhero_man",1367),("british_indian_ocean_territory",3794),("otter",2650),("ox",2617),("kyrgyzstan",3804),("pregnant_person",1307),("spoon",2876),("bhutan",3715),("kuwait",3811),("arrow_heading_up",3488),("shit",111),("copyright",3584),("peace_symbol",3506),("hourglass_flowing_sand",3022),("crown",3220),("imp",108),("office",2908),("cold_sweat",91),("family_man_man_girl",2559),("turkmenistan",3911),("coin",3315),("sparkle",3583),("white_small_square",3663),("chair",3422),("swimmer",1971),("bricks",2900),("man_cartwheeling",2067),("pea_pod",2785),("mahjong",3175),("playground_slide",2942),("ticket",3119),("card_index",3354),("man_student",869),("turtle",2679),("gloves",3193),("red_haired_woman",587),("crutch",3413),("placard",3448),("tennis",3133),("andorra",3683),("pink_heart",145),("kosovo",3935),("mailbox_closed",3334),("small_red_triangle_down",3669),("gb",3764),("blond_haired_person",527),("clock530",3039),("flower_playing_cards",3176),("polar_bear",2646),("mauritius",3842),("eyeglasses",3184),("scorpion",2715),("x",3576),("family_man_woman_girl",2554),("department_store",2917),("caribbean_netherlands",3712),("no_good_man",707),("petri_dish",3404),("ice_skate",3146),("hiking_boot",3213),("woman_teacher",893),("zany_face",26),("running_man",1735),("bald_man",575),("face_with_spiral_eyes",68),("baby_chick",2659),("family_man_woman_boy_boy",2556),("white_circle",3648),("indonesia",3789),("folding_hand_fan",3204),("new_moon_with_face",3061),("walking",1531),("soccer",3126),("cat",2601),("beans",2782),("venezuela",3928),("construction_worker",1193),("signal_strength",3544),("heavy_plus_sign",3552),("guinea",3773),("u7a7a",3635),("shopping_cart",3440),("parrot",2672),("horse",2608),("sponge",3438),("guardsman",1175),("tv",3286),("1st_place_medal",3123),("french_southern_territories",3905),("children_crossing",3464),("heavy_equals_sign",3555),("parking",3619),("kiwi_fruit",2765),("mountain_biking_man",2049),("u5272",3629),("antarctica",3691),("transgender_flag",3680),("car",2969),("basketball_man",1995),("tomato",2766),("razor",3428),("ireland",3790),("desert",2894),("woman_with_probing_cane",1645),("collision",160),("woman_farmer",929),("zipper_mouth_face",36),("cloud_with_rain",3079),("gibraltar",3770),("pitcairn_islands",3869),("briefcase",3346),("bookmark",3313),("gun",3156),("flight_arrival",3009),("man_playing_handball",2181),("b",3608),("radio_button",3671),("red_car",2969),("south_sudan",3896),("point_up",321),("fiji",3758),("credit_card",3323),("bento",2822),("rotating_light",2992),("black_square_button",3673),("raised_hands",375),("corn",2773),("sweat_smile",5),("moon",3055),("armenia",3689),("inbox_tray",3331),("love_hotel",2914),("maldives",3843),("st_helena",3887),("popcorn",2818),("scarf",3192),("hourglass",3021),("deer",2614),("paperclip",3361),("hammer_and_pick",3378),("mermaid",1463),("madagascar",3830),("curacao",3737),("woman_artist",1073),("heard_mcdonald_islands",3783),("frowning_person",665),("hole",164),("raising_hand_man",761),("heavy_check_mark",3575),("jeans",3191),("vanuatu",3932),("tm",3586),("trident",3569),("vampire_woman",1445),("coat",3194),("vatican_city",3926),("neutral_face",38),("fist_raised",345),("burundi",3706),("tokelau",3909),("turks_caicos_islands",3903),("western_sahara",3752),("partying_face",71),("flushed",84),("black_medium_small_square",3660),("hankey",111),("wallis_futuna",3933),("pretzel",2792),("headphones",3247),("stop_button",3538),("earth_africa",2880),("mx_claus",1355),("luggage",3020),("bulgaria",3704),("atm",3450),("djibouti",3743),("mauritania",3839),("giraffe",2630),("m",3614),("us",3923),("angola",3690),("desert_island",2895),("window",3419),("tumbler_glass",2866),("dotted_line_face",41),("fallen_leaf",2743),("south_africa",3938),("receipt",3324),("fire_engine",2964),("crab",2699),("skier",1910),("stars",3071),("gift",3116),("six",3596),("wave",171),("field_hockey",3137),("kneeling_woman",1597),("motorway",2987),("waffle",2795),("volleyball",3130),("blue_book",3302),("arrow_lower_left",3481),("poland",3867),("pensive",53),("sweat",99),("long_drum",3258),("adult",521),("uganda",3920),("curling_stone",3152),("safety_vest",3188),("sleeping_bed",2235),("bow",791),("lotus_position_man",2217),("three",3593),("2nd_place_medal",3124),("motorized_wheelchair",2980),("hotdog",2804),("lantern",3296),("samoa",3934),("woman_factory_worker",983),("monocle_face",75),("no_pedestrians",3471),("rocket",3017),("face_with_diagonal_mouth",77),("wine_glass",2860),("orange_circle",3641),("climbing_woman",1897),("rightwards_pushing_hand",231),("sao_tome_principe",3897),("blossom",2729),("film_projector",3284),("yum",23),("woman_cartwheeling",2073),("khanda",3509),("coral",2697),("leg",457),("family_man_man_girl_girl",2562),("superhero_woman",1373),("flight_departure",3008),("vietnam",3931),("roll_of_paper",3433),("hocho",2877),("plunger",3424),("checkered_flag",3674),("shark",2694),("ballot_box",3338),("foggy",2932),("baseball",3127),("clock930",3047),("family_man_girl_boy",2571),("diamonds",3171),("pinching_hand",249),("u6e80",3639),("u7533",3633),("uzbekistan",3925),("wood",2902),("person_in_tuxedo",1259),("jersey",3799),("control_knobs",3245),("hindu_temple",2926),("syringe",3409),("fish_cake",2833),("beginner",3571),("open_umbrella",3088),("woman_with_veil",1289),("foot",463),("donkey",2610),("heavy_minus_sign",3553),("falkland_islands",3759),("expressionless",39),("thread",3180),("virgo",3515),("oncoming_taxi",2968),("ringed_planet",3068),("train",2958),("men_wrestling",2105),("fondue",2815),("man_technologist",1031),("leopard",2607),("singer",1043),("pig",2620),("tanabata_tree",3108),("cupcake",2846),("guatemala",3778),("vulcan_salute",195),("information_desk_person",737),("speak_no_evil",130),("card_file_box",3366),("tonga",3913),("melting_face",10),("shell",2696),("warning",3463),("facepunch",351),("sunglasses",73),("snail",2704),("bridge_at_night",2939),("standing_man",1573),("red_haired_man",557),("malta",3841),("boat",2999),("lobster",2700),("envelope_with_arrow",3329),("us_outlying_islands",3921),("man_firefighter",1121),("rhinoceros",2633),("pause_button",3537),("switzerland",3725),("saxophone",3249),("hotel",2913),("reunion",3876),("mortar_board",3223),("cambodia",3805),("equatorial_guinea",3775),("ninja",1187),("school",2916),("eye",493),("svalbard_jan_mayen",3889),("probing_cane",3393),("muscle",449),("koala",2647),("paperclips",3362),("floppy_disk",3278),("mammoth",2632),("scorpius",3517),("parasol_on_ground",3090),("crescent_moon",3060),("meat_on_bone",2797),("nazar_amulet",3445),("nose",481),("evergreen_tree",2734),("micronesia",3760),("open_hands",387),("guard",1169),("boar",2622),("kimono",3197),("racing_car",2976),("lotus",2723),("brain",487),("bikini",3202),("phone",3264),("clubs",3172),("camera_flash",3288),("deciduous_tree",2735),("girl",515),("paraguay",3874),("st_lucia",3816),("frowning_face",80),("school_satchel",3209),("wavy_dash",3563),("computer_mouse",3275),("ring_buoy",2998),("trolleybus",2961),("pregnant_man",1301),("palm_down_hand",213),("kaaba",2929),("triangular_ruler",3364),("selfie",443),("fax",3267),("sunflower",2728),("slightly_frowning_face",79),("shrug",827),("boxing_glove",3142),("eagle",2664),("empty_nest",2745),("wheel_of_dharma",3501),("file_folder",3347),("dart",3153),("portugal",3872),("heart_decoration",139),("notebook_with_decorative_cover",3298),("watermelon",2751),("fork_and_knife",2875),("sauropod",2684),("crossed_swords",3381),("knife",2877),("elevator",3417),("palm_tree",2736),("bike",2982),("fox_face",2599),("ladder",3400),("liberia",3819),("sauna_woman",1879),("raising_hand_woman",767),("tristan_da_cunha",3902),("swaziland",3901),("diya_lamp",3297),("woman_office_worker",1001),("ng_woman",713),("tipping_hand_man",743),("four_leaf_clover",2741),("reminder_ribbon",3117),("pie",2847),("myanmar",3834),("magic_wand",3159),("dumpling",2836),("satisfied",4),("green_circle",3643),("arrow_right",3478),("clock230",3033),("ru",3879),("exclamation",3562),("woman_beard",551),("bug",2706),("tophat",3222),("restroom",3456),("space_invader",117),("amphora",2879),("vhs",3290),("sun_behind_small_cloud",3076),("balance_scale",3392),("finland",3757),("waning_crescent_moon",3059),("montserrat",3840),("tooth",490),("woman_dancing",1771),("woman_shrugging",839),("vampire",1433),("mali",3833),("family_woman_woman_girl_boy",2565),("san_marino",3892),("cinema",3541),("wing",2673),("black_cat",2603),("family_woman_girl_girl",2577),("blowfish",2693),("shrimp",2701),("fleur_de_lis",3568),("star_and_crescent",3505),("8ball",3157),("new_zealand",3859),("european_union",3756),("family_woman_girl_boy",2576),("morocco",3825),("office_worker",989),("smiley_cat",119),("arrow_double_up",3534),("end",3493),("beetle",2709),("clock11",3050),("bowling",3135),("handshake",399),("cowboy_hat_face",70),("pouting_man",689),("mending_heart",143),("flying_saucer",3018),("light_blue_heart",150),("couplekiss_woman_woman",2423),("dominican_republic",3746),("pirate_flag",3681),("ice_hockey",3138),("rewind",3531),("oncoming_automobile",2970),("asterisk",3589),("arrow_left",3482),("arrow_up",3476),("nesting_dolls",3168),("last_quarter_moon",3058),("triangular_flag_on_post",3675),("headstone",3443),("man_artist",1067),("diamond_shape_with_a_dot_inside",3670),("lying_face",48),("no_mobile_phones",3472),("rage",104),("lady_beetle",2710),("truck",2973),("rowing_man",1959),("ethiopia",3755),("woman_cook",947),("steam_locomotive",2947),("eritrea",3753),("fist_left",357),("slightly_smiling_face",8),("customs",3460),("open_file_folder",3348),("monkey_face",2589),("clamp",3391),("hong_kong",3782),("cockroach",2712),("weight_lifting_woman",2019),("norfolk_island",3851),("kneeling_person",1585),("elf_man",1475),("sneezing_face",63),("isle_of_man",3792),("mechanical_arm",455),("hash",3588),("rwanda",3880),("compass",2886),("money_mouth_face",28),("kissing_cat",124),("couplekiss",2345),("family_man_girl",2570),("dark_sunglasses",3185),("camera",3287),("rice_ball",2824),("womans_hat",3221),("supervillain",1379),("waning_gibbous_moon",3057),("minibus",2962),("slovenia",3888),("fireworks",3101),("st_pierre_miquelon",3868),("beers",2864),("green_apple",2759),("face_in_clouds",42),("accordion",3252),("outbox_tray",3330),("grimacing",46),("hedgehog",2643),("basket",3432),("eight",3598),("ecuador",3749),("cherry_blossom",2721),("cricket",2711),("wink",11),("name_badge",3570),("nerd_face",74),("juggling_person",2193),("blue_heart",149),("purple_heart",151),("whale",2686),("strawberry",2763),("flipper",2688),("bank",2912),("family_woman_woman_girl_girl",2567),("bicyclist",2025),("arrow_down_small",3535),("microscope",3406),("haircut_woman",1525),("sun_behind_rain_cloud",3078),("burrito",2807),("saluting_face",35),("fairy_man",1421),("pouting_cat",127),("man_with_turban",1235),("mantelpiece_clock",3027),("file_cabinet",3367),("notebook",3305),("pound",3321),("sparkling_heart",134),("pencil",3345),("lotus_position",2211),("seven",3597),("white_check_mark",3573),("swim_brief",3200),("orange_book",3303),("rose",2725),("lacrosse",3139),("male_detective",1157),("curly_haired_woman",599),("person_with_veil",1277),("bubble_tea",2869),("pouting_woman",695),("ferry",3003),("man_with_gua_pi_mao",1247),("man_mechanic",959),("roller_skate",2985),("page_facing_up",3309),("clock2",3032),("stuck_out_tongue_winking_eye",25),("family_man_boy_boy",2569),("hibiscus",2727),("fog",3083),("desktop_computer",3272),("seychelles",3883),("crocodile",2678),("footprints",2587),("hamsa",3446),("white_large_square",3657),("grinning",0),("bath",2229),("togo",3906),("stadium",2897),("innocent",13),("guinea_bissau",3780),("couple_with_heart_woman_man",2475),("dollar",3319),("man",533),("bulb",3294),("lotion_bottle",3429),("globe_with_meridians",2883),("knot",3183),("email",3327),("new_moon",3052),("rooster",2657),("handball_person",2175),("penguin",2662),("el_salvador",3898),("fly",2717),("angel",1337),("secret",3637),("beer",2863),("haircut",1513),("purple_circle",3645),("biking_man",2031),("interrobang",3558),("christmas_island",3738),("woman_feeding_baby",1319),("woman_health_worker",857),("family_man_man_boy",2558),("small_airplane",3007),("mountain_biking_woman",2055),("black_circle",3647),("round_pushpin",3360),("french_polynesia",3863),("bosnia_herzegovina",3699),("balloon",3105),("u55b6",3638),("bell",3238),("student",863),("sunrise",2936),("gear",3390),("massage_woman",1507),("bowing_woman",803),("people_hugging",2581),("purple_square",3654),("yellow_heart",147),("hatching_chick",2658),("badger",2653),("mailbox",3333),("bouvet_island",3716),("luxembourg",3822),("japanese_ogre",113),("basketball_woman",2001),("ribbon",3115),("world_map",2884),("white_heart",155),("sos",3620),("biting_lip",496),("small_red_triangle",3668),("unlock",3370),("frowning",88),("sauna_person",1867),("eu",3756),("droplet",3097),("oil_drum",2989),("bouncing_ball_person",1989),("clock730",3043),("ear_with_hearing_aid",475),("sari",3198),("jp",3802),("baggage_claim",3461),("minidisc",3277),("two_hearts",138),("rabbit2",2640),("circus_tent",2946),("pig2",2621),("cut_of_meat",2799),("t-rex",2685),("child",503),("bacon",2800),("peacock",2671),("martinique",3838),("raising_hand",755),("couplekiss_man_woman",2371),("rowboat",1953),("guadeloupe",3774),("female_sign",3548),("hot_face",64),("weight_lifting_man",2013),("arrow_right_hook",3487),("man_judge",905),("uruguay",3924),("euro",3320),("auto_rickshaw",2981),("croatia",3785),("apple",2758),("disappointed_relieved",92),("traffic_light",2993),("tulip",2730),("package",3332),("couplekiss_man_man",2397),("canary_islands",3788),("sunrise_over_mountains",2935),("capital_abcd",3601),("telescope",3407),("one_piece_swimsuit",3199),("older_man",653),("articulated_lorry",2974),("microbe",2719),("film_strip",3283),("blue_square",3653),("pancakes",2794),("japan",2885),("face_with_open_eyes_and_hand_over_mouth",31),("capricorn",3519),("man_pilot",1085),("volcano",2890),("wheel",2991),("honeybee",2708),("sri_lanka",3818),("haircut_man",1519),("ok_hand",237),("kiss",156),("mountain_railway",2957),("suriname",3895),("zap",3091),("wind_face",3084),("ng",3616),("o",3572),("blue_car",2971),("previous_track_button",3532),("ledger",3306),("hair_pick",3219),("person_feeding_baby",1331),("orangutan",2592),("ghana",3769),("sailboat",2999),("dancing_men",1815),("st_kitts_nevis",3808),("fire_extinguisher",3439),("loop",3579),("bell_pepper",2775),("fearful",90),("cupid",132),("egypt",3751),("liechtenstein",3817),("mobile_phone_off",3547),("anger",158),("dizzy_face",67),("hammer_and_wrench",3379),("mailbox_with_no_mail",3336),("es",3754),("greenland",3771),("bed",3420),("smirk_cat",123),("mountain",2888),("guitar",3253),("pig_nose",2623),("bellhop_bell",3019),("no_mouth",40),("mute",3231),("low_battery",3269),("detective",1151),("person_curly_hair",605),("love_letter",131),("zzz",170),("champagne",2859),("sun_behind_large_cloud",3077),("high_brightness",3543),("puerto_rico",3870),("diving_mask",3148),("woman_firefighter",1127),("olive",2767),("star2",3070),("squid",2702),("o2",3617),("hugs",29),("white_medium_square",3659),("sint_maarten",3899),("orthodox_cross",3504),("qatar",3875),("nicaragua",3853),("drooling_face",55),("surfing_woman",1947),("fairy_woman",1427),("tiger",2605),("deaf_person",773),("rugby_football",3132),("chile",3728),("paw_prints",2654),("ghost",115),("heavy_multiplication_x",3551),("ukraine",3919),("snowboarder",1911),("rightwards_hand",201),("fist",345),("belize",3719),("water_polo",2157),("revolving_hearts",137),("man_with_veil",1283),("taxi",2967),("family_man_girl_girl",2572),("syria",3900),("water_buffalo",2618),("card_index_dividers",3349),("bird",2661),("standing_woman",1579),("family_man_woman_girl_girl",2557),("northern_mariana_islands",3837),("last_quarter_moon_with_face",3063),("tornado",3082),("point_left",291),("fortune_cookie",2837),("bowl_with_spoon",2816),("namibia",3848),("trumpet",3250),("pushpin",3359),("taurus",3511),("biking_woman",2037),("cartwheeling",2061),("orange_heart",146),("woman_scientist",1019),("bearded_person",539),("shoe",3211),("honduras",3784),("yawning_face",102),("romania",3877),("peach",2761),("speaker",3232),("man_beard",545),("two",3592),("vertical_traffic_light",2994),("thumbsdown",339),("abcd",3602),("aerial_tramway",3015),("man_scientist",1013),("black_small_square",3662),("england",3941),("bolivia",3711),("service_dog",2596),("fishing_pole_and_fish",3147),("cow2",2619),("clock130",3031),("lollipop",2850),("punch",351),("vampire_man",1439),("spiral_calendar",3353),("green_book",3301),("dominica",3745),("arrow_upper_left",3483),("man_singer",1049),("airplane",3006),("grenada",3765),("coconut",2768),("trackball",3276),("dvd",3280),("carousel_horse",2941),("custard",2851),("heart_on_fire",142),("estonia",3750),("loud_sound",3234),("orange",2752),("ginger_root",2784),("carrot",2772),("bubbles",3436),("rescue_worker_helmet",3226),("european_post_office",2910),("railway_car",2948),("kiribati",3806),("newspaper",3310),("male_sign",3549),("joy",7),("arrow_forward",3526),("calling",3263),("woozy_face",66),("family_woman_boy",2573),("hand",189),("no_good_woman",713),("golfing_woman",1929),("a",3606),("umbrella",3089),("video_camera",3289),("poodle",2597),("takeout_box",2838),("mag",3291),("wolf",2598),("pen",3342),("surfer",1935),("arrow_backward",3530),("fountain",2930),("baby",497),("genie_man",1488),("faroe_islands",3761),("scissors",3365),("french_guiana",3767),("dog2",2594),("ok",3618),("relaxed",19),("person_with_crown",1211),("v",255),("standing_person",1567),("+1",333),("kazakhstan",3813),("malawi",3844),("kangaroo",2652),("sushi",2831),("yo_yo",3154),("hear_no_evil",129),("black_medium_square",3658),("zombie_woman",1492),("yen",3318),("tipping_hand_woman",749),("womens",3455),("arrow_upper_right",3477),("postbox",3337),("white_haired_woman",611),("monorail",2956),("yemen",3936),("woman_in_tuxedo",1271),("worm",2718),("taiwan",3917),("smoking",3441),("tr",3914),("colombia",3731),("marshall_islands",3831),("zero",3590),("business_suit_levitating",1783),("niger",3850),("clock1030",3049),("comoros",3807),("toolbox",3398),("wastebasket",3368),("tamale",2808),("climbing_man",1891),("underage",3473),("family_woman_woman_girl",2564),("fried_egg",2812),("woman_technologist",1037),("gorilla",2591),("hyacinth",2731),("dromedary_camel",2627),("bat",2644),("blueberries",2764),("shushing_face",33),("repeat_one",3525),("man_playing_water_polo",2163),("poultry_leg",2798),("play_or_pause_button",3529),("calendar",3351),("performing_arts",3177),("ice_cream",2841),("roller_coaster",2944),("snake",2681),("game_die",3163),("heavy_division_sign",3554),("weary",100),("house",2906),("sweet_potato",2829),("man_with_probing_cane",1633),("factory",2918),("smile",2),("pisces",3521),("benin",3707),("person_red_hair",593),("jar",2878),("pinata",3166),("symbols",3604),("us_virgin_islands",3930),("top",3496),("arrow_down",3480),("nauseated_face",61),("lemon",2753),("brown_square",3655),("white_square_button",3672),("taco",2806),("bullettrain_front",2950),("socks",3195),("laos",3814),("butter",2819),("artist",1061),("moyai",3447),("low_brightness",3542),("shopping",3208),("e-mail",3327),("mage_man",1403),("guide_dog",2595),("cocos_islands",3721),("first_quarter_moon_with_face",3062),("woman_judge",911),("unicorn",2612),("hatched_chick",2660),("stopwatch",3025),("honey_pot",2852),("shower",3425),("macedonia",3832),("ramen",2827),("person_white_hair",617),("hospital",2911),("stuck_out_tongue_closed_eyes",27),("onion",2780),("earth_americas",2881),("man_farmer",923),("curly_loop",3578),("oden",2830),("congo_kinshasa",3722),("united_nations",3922),("sauna_man",1873),("slot_machine",3162),("small_blue_diamond",3667),("non-potable_water",3470),("clock5",3038),("man_astronaut",1103),("leafy_green",2777),("manual_wheelchair",2979),("screwdriver",3388),("rowing_woman",1965),("ascension_island",3682),("woman_astronaut",1109),("owl",2667),("left_right_arrow",3485),("tea",2857),("clock7",3042),("nail_care",437),("open_mouth",81),("st_martin",3829),("sparkles",3104),("family_woman_girl",2575),("judge",899),("mrs_claus",1349),("ram",2624),("lips",495),("candle",3293),("confetti_ball",3107),("u7981",3631),("gemini",3512),("nut_and_bolt",3389),("negative_squared_cross_mark",3577),("confounded",96),("family_man_woman_girl_boy",2555),("pray",425),("dolls",3110),("barber",2945),("blond_haired_man",641),("snowflake",3092),("drum",3257),("factory_worker",971),("feet",2654),("baby_symbol",3457),("yin_yang",3502),("feather",2669),("no_entry",3465),("boom",160),("man_cook",941),("macau",3836),("yellow_square",3651),("monaco",3826),("pinched_fingers",243),("fountain_pen",3341),("green_heart",148),("crayon",3344),("large_orange_diamond",3664),("mask",58),("woman",581),("scotland",3942),("anguilla",3687),("post_office",2909),("x_ray",3415),("aruba",3696),("palau",3873),("toothbrush",3437),("pear",2760),("stethoscope",3414),("man_shrugging",833),("metro",2952),("black_nib",3340),("fish",2691),("horse_racing",1904),("no_smoking",3468),("high_heel",3215),("face_exhaling",47),("bullettrain_side",2949),("police_car",2965),("snowman",3094),("seal",2690),("woman_in_manual_wheelchair",1717),("pleading_face",86),("saudi_arabia",3881),("microphone",3246),("motor_boat",3004),("bangladesh",3701),("parachute",3010),("supervillain_woman",1391),("rice_cracker",2823),("coffin",3442),("man_in_manual_wheelchair",1705),("woman_singer",1055),("black_flag",3677),("grin",3),("police_officer",1133),("pouch",3207),("breast_feeding",1313),("israel",3791),("family_woman_woman_boy",2563),("ice_cube",2872),("tractor",2975),("bahrain",3705),("purse",3205),("garlic",2779),("raccoon",2600),("cl",3609),("cape_verde",3736),("face_with_peeking_eye",32),("bowing_man",797),("next_track_button",3528),("snowman_with_snow",3093),("ab",3607),("maple_leaf",2742),("running_shirt_with_sash",3149),("clown_face",112),("papua_new_guinea",3864),("weight_lifting",2007),("point_right",297),("star_struck",16),("jack_o_lantern",3099),("waxing_crescent_moon",3053),("beverage_box",2870),("-1",339),("smiling_face_with_three_hearts",14),("open_book",3300),("ski",3150),("shamrock",2740),("kissing",18),("bahamas",3714),("mushroom",2747),("busstop",2986),("id",3613),("love_you_gesture",273),("japanese_castle",2919),("movie_camera",3282),("mosquito",2716),("no_bell",3239),("banjo",3256),("pilot",1079),("poop",111),("medical_symbol",3566),("toilet",3423),("lungs",489),("3rd_place_medal",3125),("paintbrush",3343),("disguised_face",72),("czech_republic",3740),("scream_cat",125),("wc",3458),("walking_woman",1543),("alarm_clock",3024),("aquarius",3520),("telephone_receiver",3265),("green_salad",2817),("dancing_women",1841),("rainbow",3086),("necktie",3189),("u6708",3625),("couple_with_heart",2449),("cucumber",2776),("technologist",1025),("athletic_shoe",3212),("anatomical_heart",488),("partly_sunny",3074),("dancer",1771),("baby_bottle",2853),("no_entry_sign",3466),("thinking",34),("page_with_curl",3307),("lebanon",3815),("spaghetti",2828),("white_haired_man",569),("waxing_gibbous_moon",3055),("place_of_worship",3497),("disappointed",98),("battery",3268),("heavy_heart_exclamation",140),("astonished",83),("cameroon",3729),("framed_picture",3178),("leaves",2744),("couch_and_lamp",3421),("level_slider",3244),("construction_worker_man",1199),("cote_divoire",3726),("supervillain_man",1385),("large_blue_circle",3644),("tada",3106),("hearts",3170),("index_pointing_at_the_viewer",327),("denmark",3744),("tshirt",3190),("singapore",3886),("triumph",103),("wilted_flower",2726),("bride_with_veil",1289),("suspension_railway",3013),("curly_haired_man",563),("kite",3155),("six_pointed_star",3508),("potable_water",3452),("magnet",3399),("ceuta_melilla",3748),("four",3594),("pineapple",2756),("mirror",3418),("peanuts",2781),("mount_fuji",2891),("central_african_republic",3723),("large_blue_diamond",3665),("wireless",3545),("norway",3855),("timer_clock",3026),("on",3494),("recycle",3567),("building_construction",2899),("grey_exclamation",3561),("man_feeding_baby",1325),("genie",1487),("farmer",917),("clock430",3037),("flying_disc",3134),("keycap_ten",3600),("bouncing_ball_woman",2001),("green_square",3652),("heartpulse",135),("person_with_turban",1229),("alembic",3402),("seedling",2732),("kissing_heart",17),("swimming_man",1977),("no_bicycles",3467),("frog",2677),("flute",3260),("cocktail",2861),("closed_lock_with_key",3372),("smiling_face_with_tear",22),("unamused",44),("clock8",3044),("bread",2788),("heavy_dollar_sign",3565),("sparkler",3102),("ping_pong",3140),("guardswoman",1181),("bermuda",3709),("nepal",3856),("grey_heart",154),("motor_scooter",2978),("kissing_smiling_eyes",21),("joy_cat",121),("bust_in_silhouette",2579),("cloud_with_snow",3080),("point_up_2",303),("jigsaw",3164),("man_office_worker",995),("bamboo",3109),("books",3304),("dog",2593),("chipmunk",2641),("woman_playing_water_polo",2169),("shield",3385),("crossed_flags",3676),("thought_balloon",169),("rabbit",2639),("senegal",3893),("alien",116),("policewoman",1145),("white_flower",2722),("one",3591),("flashlight",3295),("nauru",3857),("person_in_manual_wheelchair",1693),("atom_symbol",3498),("cd",3279),("haiti",3786),("helicopter",3012),("studio_microphone",3243),("oman",3860),("mailbox_with_mail",3335),("rofl",6),("boy",509),("sled",3151),("merman",1457),("moon_cake",2834),("goat",2626),("moose",2609),("malaysia",3846),("barbados",3700),("beach_umbrella",2893),("speaking_head",2578),("keyboard",3274),("people_holding_hands",2241),("goggles",3186),("swimming_woman",1983),("hushed",82),("white_medium_small_square",3661),("niue",3858),("eject_button",3540),("santa",1343),("dragon",2683),("mag_right",3292),("spiral_notepad",3352),("curry",2826),("currency_exchange",3564),("dizzy",161),("lithuania",3821),("mango",2757),("full_moon_with_face",3066),("full_moon",3056),("lock",3369),("smiley",1),("crossed_fingers",261),("mate",2871),("wrench",3387),("cloud_with_lightning",3081),("elf_woman",1481),("cricket_game",3136),("guernsey",3768),("red_envelope",3114),("clock4",3036),("kenya",3803),("potato",2771),("firefighter",1115),("hammer",3375),("skunk",2651),("heavy_exclamation_mark",3562),("straight_ruler",3363),("camping",2892),("timor_leste",3910),("cherries",2762),("fire",3096),("busts_in_silhouette",2580),("rock",2901),("wales",3943),("clap",369),("mage_woman",1409),("grapes",2749),("blush",12),("shinto_shrine",2928),("speedboat",3001),("canoe",3000),("moldova",3827),("herb",2739),("ok_person",719),("red_circle",3640),("small_orange_diamond",3666),("spades",3169),("mechanic",953),("zimbabwe",3940),("somalia",3894),("mouse2",2636),("mechanical_leg",456),("put_litter_in_its_place",3451),("scream",95),("vomiting_face",62),("running",1729),("mouse",2635),("kick_scooter",2983),("salt",2820),("cook_islands",3727),("fist_oncoming",351),("chocolate_bar",2848),("botswana",3717),("national_park",2896),("artificial_satellite",3016),("eye_speech_bubble",166),("rat",2637),("sassy_woman",749),("new_caledonia",3849),("camel",2628),("electric_plug",3270),("st_barthelemy",3708),("face_with_head_bandage",60),("eyes",492),("family_man_boy",2568),("repeat",3524),("tuvalu",3916),("thailand",3907),("pouring_liquid",2867),("teacher",881),("elephant",2631),("boot",3218),("flat_shoe",3214),("man_dancing",1777),("crystal_ball",3158),("heart_eyes",15),("facepalm",809),("bar_chart",3357),("ring",3229),("brown_heart",152),("duck",2665),("woman_juggling",2205),("newspaper_roll",3311),("construction",2996),("chart_with_upwards_trend",3355),("potted_plant",2733),("south_georgia_south_sandwich_islands",3777),("congratulations",3636),("bouquet",2720),("oyster",2703),("mans_shoe",3211),("lizard",2680),("church",2924),("clock830",3045),("palm_up_hand",219),("ok_man",725),("burkina_faso",3703),("arrow_heading_down",3489),("family_woman_woman_boy_boy",2566),("mandarin",2752),("sewing_needle",3181),("baguette_bread",2790),("ng_man",707),("hamster",2638),("person_bald",629),("merperson",1451),("clock6",3040),("swan",2666),("hook",3397),("hotsprings",2940),("tent",2931),("monkey",2590),("pencil2",3339),("european_castle",2920),("abacus",3281),("black_bird",2674),("heart_eyes_cat",122),("woman_mechanic",965),("moneybag",3316),("gabon",3763),("heart",144),("brazil",3713),("computer",3271),("chart",3325),("radio",3248),("sake",2858),("exploding_head",69),("rosette",2724),("bouncing_ball_man",1995),("hot_pepper",2774),("policeman",1139),("passport_control",3459),("rice",2825),("greece",3776),("astronaut",1097),("nigeria",3852),("eight_spoked_asterisk",3581),("basketball",3129),("golf",3145),("five",3595),("tokyo_tower",2922),("arrows_counterclockwise",3491),("argentina",3692),("shaking_face",49),("fries",2802),("antigua_barbuda",3686),("date",3350),("de",3741),("running_woman",1741),("golfing",1917),("woman_in_motorized_wheelchair",1681),("stuffed_flatbread",2809),("loudspeaker",3235),("tunisia",3912),("skull",109),("fried_shrimp",2832),("latin_cross",3503),("albania",3688),("station",2954),("tram",2955),("beaver",2642),("envelope",3326),("egg",2811),("woman_with_turban",1241),("incoming_envelope",3328),("stuck_out_tongue",24),("hungary",3787),("sagittarius",3518),("clock12",3028),("mountain_snow",2887),("man_factory_worker",977),("zombie_man",1491),("family_man_man_girl_boy",2560),("nest_with_eggs",2746),("belgium",3702),("sweat_drops",162),("walking_man",1537),("star_of_david",3500),("soon",3495),("teapot",2856),("runner",1729),("hand_over_mouth",30),("chopsticks",2873),("kneeling_man",1591),("boomerang",3383),("maracas",3259),("up",3621),("ok_woman",731),("canada",3720),("kissing_closed_eyes",20),("libra",3516),("wedding",2921),("sa",3624),("tajikistan",3908),("hand_with_index_finger_and_thumb_crossed",267),("ear",469),("latvia",3823),("fast_forward",3527),("ocean",3098),("musical_note",3241),("couple_with_heart_woman_woman",2527),("billed_cap",3224),("stew",2814),("man_juggling",2199),("cuba",3735),("telephone",3264),("spider",2713),("middle_finger",309),("united_arab_emirates",3684),("100",157),("lipstick",3228),("first_quarter_moon",3054),("superhero",1361),("chains",3396),("man_health_worker",851),("man_teacher",887),("right_anger_bubble",168),("older_woman",659),("shirt",3190),("thumbsup",333),("afghanistan",3685),("shaved_ice",2840),("registered",3585),("cursing_face",106),("mens",3454),("climbing",1885),("left_luggage",3462),("arrow_double_down",3536),("pill",3411),("sudan",3884),("mosque",2925),("key",3373),("money_with_wings",3322),("bucket",3434),("robot",118),("memo",3345),("kr",3810),("tropical_fish",2692),("raised_eyebrow",37),("houses",2904),("clock1130",3051),("fairy",1415),("tanzania",3918),("flatbread",2791),("brunei",3710),("wheelchair",3453),("shorts",3201),("speech_balloon",165),("arrow_up_small",3533),("funeral_urn",3444),("panama",3861),("cop",1133),("rainbow_flag",3679),("deaf_woman",785),("bear",2645),("zebra",2613),("butterfly",2705),("ship",3005),("it",3798),("croissant",2789),("passenger_ship",3002),("cactus",2737),("pick",3377),("house_with_garden",2907),("nine",3599),("dragon_face",2682),("belarus",3718),("family_man_man_boy_boy",2561),("bomb",3382),("door",3416),("see_no_evil",128),("clock330",3035),("u6709",3626),("birthday",2844),("cloud",3073),("cat2",2602),("cool",3610),("information_source",3612),("military_helmet",3225),("ideograph_advantage",3628),("whale2",2687),("woman_facepalming",821),("panda_face",2648),("dodo",2668),("goose",2675),("plate_with_cutlery",2874),("u5408",3634),("thong_sandal",3210),("avocado",2769),("womans_clothes",3203),("leftwards_pushing_hand",225),("leo",3514),("woman_pilot",1091),("mega",3236),("pakistan",3866),("costa_rica",3734),("jellyfish",2698),("hut",2903),("man_facepalming",815),("vibration_mode",3546),("seat",3011),("aland_islands",3697),("iran",3796),("gift_heart",133),("yellow_circle",3642),("dagger",3380),("sandal",3216),("tiger2",2606),("construction_worker_woman",1205),("relieved",52),("martial_arts_uniform",3143),("person_in_motorized_wheelchair",1657),("record_button",3539),("leftwards_arrow_with_hook",3486),("pickup_truck",2972),("chicken",2656),("dancers",1789),("clock9",3046),("video_game",3160),("sandwich",2805),("british_virgin_islands",3929),("railway_track",2988),("do_not_litter",3469),("closed_umbrella",3087),("watch",3023),("fist_right",363),("person_fencing",1903),("palestinian_territories",3871),("canned_food",2821),("u7121",3630),("confused",76),("melon",2750),("hippopotamus",2634),("two_women_holding_hands",2267),("stop_sign",2995),("bald_woman",623),("safety_pin",3430),("blond_haired_woman",635),("clock10",3048),("soap",3435),("ferris_wheel",2943),("cyclone",3085),("ballot_box_with_check",3574),("upside_down_face",9),("infinity",3556),("chess_pawn",3173),("jamaica",3800),("motorcycle",2977),("mountain_bicyclist",2043),("azerbaijan",3698),("dango",2835),("smirk",43),("turkey",2655),("firecracker",3103),("milky_way",3072),("bone",491),("mage",1397),("clipperton_island",3732),("badminton",3141),("oncoming_police_car",2966),("roll_eyes",45),("sassy_man",743),("teddy_bear",3165),("guyana",3781),("woman_student",875),("slovakia",3890),("chart_with_downwards_trend",3356),("face_with_thermometer",59),("japanese_goblin",114),("clipboard",3358),("zambia",3939),("deaf_man",779),("flags",3111),("trophy",3121),("raised_back_of_hand",177),("austria",3694),("worried",78),("white_flag",3678),("angry",105),("prince",1217),("sloth",2649),("face_holding_back_tears",87),("postal_horn",3237),("anguished",89),("scroll",3308),("bagel",2793),("clapper",3285),("softball",3128),("izakaya_lantern",3296),("health_worker",845),("guam",3779),("lesotho",3820),("uk",3764),("icecream",2839),("black_heart",153),("elf",1469),("heartbeat",136),("mayotte",3937),("st_vincent_grenadines",3927),("llama",2629),("transgender_symbol",3550),("tickets",3118),("milk_glass",2854),("medal_military",3120),("shallow_pan_of_food",2813),("left_speech_bubble",167),("crying_cat_face",126),("part_alternation_mark",3580),("ophiuchus",3522),("back",3492),("wind_chime",3112),("clock1",3030),("mirror_ball",3167),("bee",2708),("thermometer",3064),("cry",93),("smile_cat",120),("cancer",3513),("trinidad_tobago",3915),("mountain_cableway",3014),("candy",2849),("gem",3230),("palms_up_together",393),("solomon_islands",3882),("couple_with_heart_man_man",2501),("algeria",3747),("man_in_tuxedo",1265),("ant",2707),("skull_and_crossbones",110),("classical_building",2898),("frowning_woman",677),("massage_man",1501),("bangbang",3557),("clock1230",3029),("night_with_stars",2933),("racehorse",2611),("goal_net",3144),("closed_book",3299),("bison",2615),("violin",3255),("football",3131),("banana",2755),("christmas_tree",3100),("om",3499),("blonde_woman",635),("family_woman_boy_boy",2574),("wrestling",2079),("fr",3762),("call_me_hand",285),("broccoli",2778),("cayman_islands",3812),("musical_score",3240),("label",3314),("black_large_square",3656),("fu",309),("sob",94),("india",3793),("ear_of_rice",2738),("dove",2663),("pout",104),("accept",3632),("mozambique",3847),("sheep",2625),("menorah",3507),("old_key",3374),("north_korea",3809),("earth_asia",2882),("koko",3623),("aries",3510),("cityscape",2934),("women_wrestling",2131),("tangerine",2752),("yarn",3182),("abc",3605),("sun_with_face",3067),("metal",279),("tongue",494),("black_joker",3174),("cyprus",3739),("congo_brazzaville",3724),("american_samoa",3693),("pregnant_woman",1295),("axe",3376),("pizza",2803),("surfing_man",1941),("cloud_with_lightning_and_rain",3075),("identification_card",3449),("question",3559),("arrows_clockwise",3490),("cow",2616),("skateboard",2984),("u6307",3627),("arrow_lower_right",3479),("drop_of_blood",3410),("pager",3266),("australia",3695),("scientist",1007),("joystick",3161),("woman_with_headscarf",1253),("philippines",3865),("tipping_hand_person",737),("spider_web",2714),("link",3394),("grey_question",3560),("1234",3603),("mouse_trap",3427),("lock_with_ink_pen",3371),("mexico",3845),("smiling_imp",107),("two_men_holding_hands",2319),("derelict_house",2905),("family",2582),("light_rail",2953),("medal_sports",3122),("adhesive_bandage",3412),("oncoming_bus",2960),("handbag",3206),("city_sunset",2937),("star",3069),("sierra_leone",3891),("falafel",2810),("bus",2959),("radioactive",3474),("orange_square",3650),("synagogue",2927),("broom",3431),("point_down",315),("statue_of_liberty",2923),("raised_hand",189),("raised_hand_with_fingers_splayed",183),("writing_hand",431),("dolphin",2688),("satellite",3408),("clock630",3041),("bookmark_tabs",3312),("lotus_position_woman",2223),("train2",2951),("laughing",4),("pouting_face",683),("cold_face",65),("octopus",2695),("tropical_drink",2862),("notes",3242),("woman_playing_handball",2187),("tired_face",101),("bathtub",3426),("georgia",3766),("libya",3824),("lion",2604),("fuelpump",2990),("leftwards_hand",207),("flamingo",2670),("comet",3095),("peru",3862),("cheese",2796),("bow_and_arrow",3384),("couple",2293),("person_with_probing_cane",1621),("eight_pointed_black_star",3582),("zombie",1490),("city_sunrise",2938),("sleeping",56),("cake",2845),("lab_coat",3187),("doughnut",2842),("sweden",3885),("clock3",3034),("prayer_beads",3227),("biohazard",3475),("man_in_motorized_wheelchair",1669),("sunny",3065),("ballet_shoes",3217),("anchor",2997),("broken_heart",141),],}; 4 | -------------------------------------------------------------------------------- /src/gen/unicode.rs: -------------------------------------------------------------------------------- 1 | // Code generated by `cargo run --package generate`. DO NOT EDIT. 2 | 3 | pub static MAP: phf::Map<&'static str, usize> = phf::Map{key:16287231350648472473,disps:&[(0,97),(0,57),(0,0),(0,1),(0,53),(0,366),(0,3),(0,22),(0,27),(0,22),(0,6),(0,40),(0,212),(0,68),(0,0),(0,1),(0,1),(0,542),(0,2),(0,1054),(0,37),(0,3),(0,729),(0,1),(0,85),(0,29),(0,7),(0,6),(0,17),(0,0),(0,2),(0,25),(0,1),(0,54),(0,38),(0,32),(0,7),(0,17),(0,5),(0,114),(0,363),(0,3),(0,498),(0,505),(0,1),(0,13),(0,1),(0,437),(0,0),(0,1),(0,16),(0,35),(0,67),(0,23),(0,4),(0,159),(0,0),(0,4),(0,817),(0,145),(0,51),(0,7),(0,4),(0,5),(0,2),(0,14),(0,224),(0,142),(0,143),(0,14),(0,845),(0,5),(0,288),(0,22),(0,2279),(0,13),(0,26),(0,11),(0,4),(0,0),(0,226),(0,14),(0,15),(0,23),(0,343),(0,40),(0,82),(0,204),(0,1743),(0,87),(0,87),(0,1),(0,245),(0,70),(0,38),(0,109),(0,300),(0,261),(0,167),(0,463),(0,2),(0,119),(0,0),(0,246),(0,1189),(0,86),(0,2),(0,1008),(0,203),(0,78),(0,8),(0,100),(0,10),(0,90),(0,499),(0,2),(0,611),(0,194),(0,90),(0,159),(0,5),(0,1),(0,17),(0,41),(0,25),(0,50),(0,26),(0,46),(0,6),(0,958),(0,122),(0,464),(0,96),(0,221),(0,0),(0,113),(0,89),(0,184),(0,11),(0,0),(0,717),(0,16),(0,4),(0,51),(0,7),(0,327),(0,102),(0,264),(0,497),(0,429),(0,0),(0,82),(0,823),(0,140),(0,200),(0,586),(0,4),(0,2),(0,29),(0,25),(0,4),(0,1044),(0,38),(0,5),(0,8),(0,51),(0,2),(0,190),(0,0),(0,1070),(0,0),(0,11),(0,492),(0,227),(0,232),(0,76),(0,17),(0,39),(0,1),(0,183),(0,31),(0,0),(0,5),(0,84),(1,315),(0,9),(0,541),(0,56),(0,149),(0,17),(0,20),(0,1),(0,3),(0,0),(0,243),(0,487),(0,1130),(0,127),(0,3),(0,2),(0,3),(0,134),(0,6),(0,79),(0,1017),(0,70),(0,330),(0,4),(0,580),(0,311),(0,1),(0,25),(0,13),(0,0),(0,7),(0,519),(0,297),(0,8),(0,5),(0,17),(0,41),(0,53),(0,52),(0,694),(0,0),(0,119),(0,0),(0,20),(0,1),(0,71),(0,36),(0,1224),(0,1),(0,492),(0,963),(0,266),(0,511),(0,1079),(0,36),(0,6),(0,45),(0,1),(0,3),(0,9),(0,1),(0,137),(0,0),(0,1378),(0,217),(0,215),(0,0),(0,103),(0,1214),(0,519),(0,35),(0,909),(0,327),(0,38),(0,205),(0,28),(0,62),(0,4),(0,4),(0,534),(0,206),(0,199),(0,16),(0,83),(0,148),(0,3),(0,0),(0,24),(0,48),(0,66),(0,600),(0,643),(0,12),(0,9),(0,1716),(0,41),(0,21),(0,849),(0,7),(0,93),(0,3),(0,4),(0,205),(0,432),(0,2078),(0,0),(0,22),(0,1),(0,582),(0,417),(0,11),(0,214),(0,121),(0,538),(0,51),(0,13),(0,0),(0,45),(0,75),(0,152),(0,2382),(0,382),(0,152),(0,124),(0,89),(0,1232),(0,1432),(0,62),(0,616),(0,2),(0,3741),(0,315),(0,252),(0,10),(0,505),(0,1923),(0,69),(0,1215),(0,494),(0,8),(0,5),(0,12),(0,0),(0,81),(0,680),(0,0),(0,83),(0,3),(0,14),(0,489),(0,0),(0,167),(0,527),(0,25),(0,30),(0,1),(0,1450),(0,13),(0,469),(0,682),(0,987),(0,0),(0,666),(0,151),(0,1775),(0,1045),(0,45),(0,116),(0,73),(0,2),(1,0),(0,27),(0,38),(0,342),(0,679),(0,253),(0,125),(0,1),(0,343),(0,433),(0,0),(0,1210),(0,1409),(0,0),(0,5),(0,30),(0,511),(0,1),(0,9),(0,187),(0,1976),(0,1),(0,6),(0,0),(0,366),(0,2018),(0,1909),(0,21),(0,1),(0,2),(0,1237),(0,10),(0,40),(0,121),(0,37),(0,214),(0,48),(0,270),(0,412),(0,29),(0,730),(0,2),(0,3),(0,83),(0,1),(0,1593),(0,27),(0,1590),(0,1579),(0,0),(0,0),(0,3),(0,67),(0,78),(0,520),(0,0),(0,1092),(0,2789),(0,106),(0,0),(0,11),(0,701),(0,10),(0,647),(0,0),(0,50),(0,601),(0,61),(0,56),(0,4177),(0,6),(0,78),(0,8),(0,41),(0,21),(0,2),(0,1140),(0,0),(0,87),(0,221),(0,1),(0,6),(0,284),(0,1),(0,60),(0,4815),(0,1),(0,1),(0,489),(0,535),(0,22),(0,19),(0,150),(0,3),(0,21),(0,123),(0,3),(0,263),(0,44),(0,210),(0,116),(0,1115),(0,19),(0,6),(0,1010),(0,2),(0,3229),(0,74),(0,7),(0,583),(0,0),(0,68),(0,3),(0,5),(0,1514),(0,0),(0,2),(0,0),(0,2),(0,178),(0,2),(0,294),(0,2),(0,755),(0,100),(0,0),(0,58),(0,1306),(0,94),(0,0),(0,0),(0,3),(0,5),(0,1),(0,22),(0,158),(0,3217),(0,45),(0,25),(0,100),(0,540),(0,0),(0,1131),(0,6),(0,87),(0,185),(0,208),(0,262),(0,160),(0,988),(0,453),(0,9),(0,155),(0,84),(0,84),(0,480),(0,7),(0,422),(0,48),(0,16),(0,1118),(0,1352),(0,6),(1,2860),(0,1502),(0,335),(0,534),(0,343),(0,0),(0,4086),(0,62),(0,186),(0,283),(0,3029),(0,24),(0,49),(0,89),(0,1461),(0,463),(0,75),(0,4),(0,4806),(0,834),(0,493),(0,738),(0,2705),(0,5),(0,179),(0,4557),(0,0),(0,2940),(0,8),(0,652),(0,191),(0,4),(0,40),(0,28),(0,299),(0,152),(0,1758),(0,4),(0,217),(0,7),(0,789),(0,0),(0,2664),(0,139),(0,12),(0,5),(0,8),(0,1091),(0,49),(0,0),(0,301),(0,252),(0,1142),(0,234),(0,4),(0,1595),(0,982),(0,1788),(0,387),(0,971),(0,0),(0,3002),(0,299),(0,333),(0,169),(0,85),(0,3),(0,578),(0,65),(0,1699),(0,40),(0,20),(0,126),(0,0),(0,7),(0,5363),(0,62),(0,207),(0,38),(0,652),(0,518),(0,3),(0,111),(0,201),(0,0),(0,29),(0,0),(0,236),(0,299),(0,655),(0,44),(0,2260),(0,2),(0,780),(0,76),(0,49),(0,547),(0,2308),(0,85),(0,6),(0,129),(0,0),(0,1655),(0,81),(0,23),(0,1381),(0,4125),(0,2982),(0,5),(0,0),(0,17),(0,347),(0,926),(0,633),(0,58),(0,13),(0,6),(0,1290),(0,2),(0,25),(0,58),(0,667),(0,653),(0,372),(0,3),(0,15),(0,45),(0,15),(0,1089),(0,129),(0,863),(0,284),(0,4795),(0,32),(0,1877),(1,2569),(0,33),(0,526),(0,3345),(0,121),(0,3),(0,603),(0,24),(0,593),(0,310),(0,1609),(0,4024),(0,2584),(0,617),(0,15),(0,0),(0,473),(0,201),(0,22),(0,5),(0,0),(0,1133),(0,28),(0,631),(0,68),(0,2913),(0,441),(0,667),(0,0),(0,12),(0,0),(0,2),(0,952),(0,69),(0,27),(0,144),(0,1170),(0,906),(0,88),(0,2),(0,96),(0,1517),(0,132),(0,2031),(0,198),(0,146),(0,319),(0,15),(0,401),(0,2977),(0,0),(0,90),(0,7),(0,2),(0,49),(0,42),(0,1085),(0,13),(0,35),(0,40),(0,699),(0,2059),(0,24),(0,726),(0,12),(0,37),(0,939),(0,78),(0,207),(0,126),(0,8),(0,6),(0,0),(0,0),(0,96),(0,2560),(0,55),(0,115),(2,1252),(0,758),(0,9),(1,274),(0,132),(0,242),(1,719),(0,85),(0,0),(0,3),(0,789),(0,830),(0,810),(0,170),(0,666),(0,247),(0,1652),(0,3),(0,133),(1,2386),(0,2034),(0,2),(1,1646),(0,863),(0,2903),(0,84),(0,19),(0,15),(0,10),(0,30),(0,793),(0,1),(0,141),(0,334),(0,629),(0,297),(0,3337),(0,19),(0,70),(0,893),(0,2198),(0,32),(0,14),(0,39),(0,134),(0,4777),(0,130),(0,5192),(0,3065),(0,6),(0,3),(0,4482),(0,2),(0,1042),(0,0),(0,5),(0,0),(0,0),(0,10),(0,231),(0,1910),(0,2),(0,25),(0,4147),(0,0),(2,1454),(0,32),(0,271),(0,180),(0,418),(0,81),(0,322),(1,499),(0,2322),(0,35),(1,1765),(0,64),(0,912),(0,192),(0,20),(1,4560),(0,0),(0,1102),(0,1511),(0,31),(0,67),(0,1),(0,1),(1,400),(0,4),(0,2),(0,18),(0,115),(0,4953),(0,54),(0,205),(0,40),(0,3859),(0,55),(0,1008),(0,1819),(2,118),(0,1963),(0,127),(0,40),(0,503),(0,571),(0,8),(0,81),(0,2199),(0,324),(0,26),(1,438),(0,27),(0,1948),(0,1026),(1,3328),(0,2620),(0,1862),(0,286),(0,37),(0,1538),(0,1199),(0,33),(0,15),(0,14),(0,2358),(0,1614),(0,316),(0,3554),(0,2),(0,4),(0,52),(0,2376),(1,2934),(0,95),(0,3103),(0,46),(0,2152),(0,6),(0,35),(0,22),(0,633),(0,3052),(0,179),(0,1618),(0,34),(0,452),(0,48),(0,665),(0,3762),(0,8),(0,986),(0,299),(0,642),(0,1),(0,416),(1,4777),(0,3),(0,112),(0,20),(0,1410),(0,1538),(0,101),(0,662),(0,623),(0,277),(0,27),(0,81),(0,5263),(0,4786),(0,393),(0,82),(0,1181),(0,661),(0,4830),(0,85),(0,64),(1,1331),(0,3),(0,2527),(0,62),(0,0),(0,483),(2,438),(0,16),(0,607),(0,816),(0,23),(0,1924),(2,4340),(0,140),(0,216),(0,3311),(2,4696),(0,91),(0,37),(0,877),(0,171),(3,4516),(0,191),(0,34),(0,41),(0,481),(0,4901),(0,83),(0,5066),(0,206),(0,202),(0,2766),(4,3459),(1,2369),(0,34),(0,743),(0,53),(3,1013),(0,78),(0,19),(2,594),(0,498),(0,519),(0,10),(0,3902),(0,445),(0,4),(0,3),(3,1135),(0,12),(0,1697),(0,882),(2,4861),(0,0),(6,2092),(0,83),(0,95),(0,3),(0,2948),(0,321),(0,51),(0,889),(0,2332),(0,32),(0,2646),(0,516),(0,892),(2,3825),(0,62),(0,3160),(0,56),(0,966),(0,4287),(0,869),(0,104),(0,181),(0,1941),(1,3293),(0,1),(0,84),(0,775),(0,320),(2,3010),(0,4432),(0,63),(0,892),(0,817),(0,681),(0,52),(0,1495),(8,3956),(0,247),(0,805),(0,38),(0,370),(0,139),(0,11),(0,49),(0,550),(0,632),(2,2319),(0,0),(0,39),(0,4),(0,88),(10,2987),(0,90),(0,7),(0,5051),(0,1717),(0,1780),(0,183),(0,12),(0,10),(0,4),(0,18),(0,202),(0,1041),(0,207),(0,1),(0,624),(0,989),(0,0),(0,3),(0,1229),(0,140),(0,0),(0,1766),(0,3825),(0,3100),(0,3970),(0,0),(0,108),(0,418),(0,73),(0,880),(0,4),(0,0),(1,2349),(0,2913),(4,3311),(0,0),(0,1489),(0,71),(0,22),(4,1702),(0,4),(0,43),(0,252),(5,2326),(0,387),(0,638),(0,8),(0,306),(1,1228),(0,19),(0,206),(0,53),(0,55),(3,1953),(0,4),(3,4997),(0,4130),(0,0),(0,30),(0,1134),(0,95),(0,21),],entries:&[("🏌🏻",1918),("🇯🇴",3801),("🦸🏼‍♂️",1369),("🚶🏾",1535),("🤓",74),("😭",94),("❄",3092),("⛹",1989),("🚶‍♂️‍➡️",1561),("0️",3590),("🎢",2944),("👩🏼‍❤‍👩🏾",2539),("💃🏼",1773),("🤹🏿‍♀️",2210),("👩🏿‍🐰‍👩🏾",1866),("👨🏾‍🎨",1071),("🧎🏿‍♀️‍➡️",1614),("🧑‍🎄",1355),("🚶🏾‍♂‍➡️",1565),("👦🏽",512),("⚜",3568),("⛹🏼",1991),("👩‍❤‍💋‍👨",2371),("🇨🇼",3737),("🏃🏾‍♀‍➡️",1757),("🇪🇺",3756),("↖",3483),("🎽",3149),("☀️",3065),("🧑🏻‍⚕",846),("🧔🏼‍♂",547),("👨🏿‍💼",1000),("🧙‍♂️",1403),("👰‍♀",1289),("🧩",3164),("🤸🏽‍♀️",2076),("🧛🏾‍♀",1449),("🐔",2656),("🧖🏽‍♂️",1876),("🧗‍♂️",1891),("🚶‍♀️",1543),("🚶🏼‍♀‍➡",1557),("🦸🏽‍♀",1376),("🇮🇳",3793),("🚣🏿",1958),("👨🏽‍🦱",566),("👨🏽‍🫯‍👨🏾",2121),("🔩",3389),("🙏🏼",427),("🕴🏻",1784),("🖤",153),("👨‍👦",2568),("🦹🏽‍♂",1388),("🧎🏾‍♂️‍➡",1619),("⛎️",3522),("🛑",2995),("🙎🏽‍♂",692),("🏣",2909),("2️",3592),("🕢️",3043),("🌟",3070),("🌂",3087),("🎡",2943),("🤸🏽",2064),("💇🏽‍♀",1528),("🌥",3077),("📷",3287),("🍋‍🟩",2754),("🤵🏼‍♀",1273),("✉",3326),("🤰🏾",1299),("🏃🏾‍♀️",1745),("💂🏻‍♂",1176),("🕵🏾‍♂️",1161),("👨🏻‍⚖",906),("👨🏾‍🦰",561),("🇮🇴",3794),("🖲",3276),("👩🏾‍🦼‍➡️",1691),("👨🏿‍🦼‍➡",1680),("🪖",3225),("🔓",3370),("🗿",3447),("👨🏼‍🦼‍➡",1677),("🇮🇸",3797),("👩🏼‍⚖️",913),("👩🏿‍❤‍👨🏾",2500),("👞",3211),("🖲️",3276),("🏃🏿‍♀‍➡️",1758),("🧠",487),("🔞",3473),("🧎‍♂",1591),("🤾🏽‍♂️",2184),("💇🏻‍♀",1526),("🦹🏽‍♀",1394),("🈚",3630),("🧑🏾‍🦱",609),("🫥",41),("🧑🏻‍💼",990),("👨🏿‍❤‍👨🏽",2525),("🏌",1917),("💇🏽",1516),("🇸🇨",3883),("👨🏼‍❤️‍👨🏻",2511),("🧑🏽‍🚀",1100),("🧑🏿‍🫯‍🧑🏻",2101),("👷🏽‍♂️",1202),("☄",3095),("🧗🏻",1886),("🕵️‍♀️",1163),("🤘🏾",283),("🤸🏻",2062),("🙎‍♀️",695),("👩🏻‍❤‍💋‍👨🏻",2372),("🔇",3231),("👨🏼‍🍼",1327),("🪰",2717),("🚴🏾‍♀",2041),("👨🏻‍❤‍👨🏽",2508),("🎖",3120),("🐈",2602),("🧓🏿",652),("🏐",3130),("👨🏿‍❤‍💋‍👨🏼",2420),("🦅",2664),("⛏️",3377),("◽️",3661),("🛢",2989),("🚶",1531),("👩🏻‍💻",1038),("🍡",2835),("🧚🏾‍♂️",1425),("👩🏿‍❤️‍👩🏽",2551),("🤹🏽‍♀",2208),("▪️",3662),("🕵🏼‍♂️",1159),("👩‍✈",1091),("💁🏽‍♂️",746),("👭🏿",2272),("🎦",3541),("💚",148),("☢",3474),("🏃🏼‍♂",1737),("🧑🏽‍🌾",920),("🤹🏽",2196),("🤛🏽",360),("👨🏻‍❤‍👨🏼",2507),("♌️",3514),("🖐🏻",184),("🚶🏾‍♀",1547),("🧥",3194),("💺",3011),("👷🏼‍♂️",1201),("🧆",2810),("👯🏿‍♀️",1846),("🙆🏻",720),("🤴🏿",1222),("🎞️",3283),("🔽",3535),("🧔🏾‍♂",549),("🧷",3430),("👨‍🏭",977),("🌼",2729),("🇸🇿",3901),("⏭",3528),("🐥",2660),("🧑🏾‍🦯",1625),("🦹🏻‍♂️",1386),("🚶🏼‍♂",1539),("🎄",3100),("🏋🏼‍♂️",2015),("🏆️",3121),("📑",3312),("♻",3567),("👨🏼‍🦼",1671),("👨🏾‍❤‍💋‍👨🏼",2416),("🧑🏿‍🦯‍➡",1632),("👂🏽",472),("🛡️",3385),("🙅🏿‍♂️",712),("🕖️",3042),("🐣",2658),("🫶🏿",386),("🚶🏿‍♀️",1548),("🧏🏾‍♂️",783),("🎰",3162),("🏊🏿",1976),("6⃣",3596),("🕗",3044),("👨🏼‍🦯‍➡️",1641),("✂",3365),("👩🏻‍🐰‍👩🏿",1850),("🏃🏻‍♂",1736),("🤡",112),("👱‍♀",635),("🥤",2868),("🏍",2977),("🇧🇴",3711),("🤷🏼‍♀️",841),("🤦🏿",814),("📻",3248),("💏🏿",2350),("🤼🏽",2082),("⚓",2997),("👨🏽‍🦽‍➡",1714),("🙎🏽‍♀️",698),("🏄🏾‍♀",1951),("👩🏽‍❤‍👨🏿",2492),("🏃🏽",1732),("🏕️",2892),("👨🏼‍❤️‍💋‍👨🏾",2409),("♦",3171),("💱",3564),("👨🏿‍❤️‍👨🏽",2525),("🧍🏼‍♂",1575),("🧑🏻‍🤝‍🧑🏻",2242),("🧑🏿‍🫯‍🧑🏽",2103),("⛹️",1989),("🧝🏿",1474),("🚶🏼‍➡️",1551),("🤸🏼‍♂",2069),("👨🏼‍❤‍💋‍👨🏼",2407),("🤱🏻",1314),("✌️",255),("🙇🏿‍♂",802),("👩🏻‍❤‍💋‍👨🏽",2378),("🏌🏿‍♀️",1934),("🛺",2981),("⏏️",3540),("👩🏽‍🐰‍👩🏿",1858),("😑",39),("🍲",2814),("🏕",2892),("🚴‍♂",2031),("🏋🏻‍♂️",2014),("🧜🏻‍♂️",1458),("🍂",2743),("🐚",2696),("🎃",3099),("🥁",3257),("🤙",285),("👩🏻‍🎓",876),("👩🏻‍❤‍💋‍👩🏽",2430),("🙇🏻‍♀️",804),("🆎",3607),("👯🏻‍♂",1816),("🤹‍♀",2205),("🧑🏻‍❤️‍💋‍🧑🏾",2353),("👩🏼‍🤝‍👩🏿",2280),("♍️",3515),("🧎🏿‍♀‍➡️",1614),("🏴󠁧󠁢󠁥󠁮󠁧󠁿",3941),("🥕",2772),("🚶🏼‍♀️",1545),("🖐🏽",186),("👩🏼‍❤️‍👨🏽",2486),("👩‍🦯",1645),("🌘",3059),("🦄",2612),("↩️",3486),("👸🏻",1224),("👩🏿‍❤️‍💋‍👨🏼",2394),("📋",3358),("👱🏽‍♂",644),("🐷",2620),("🧘‍♀",2223),("🧖🏻‍♂️",1874),("🧒",503),("👨‍❤️‍👨",2501),("🧑🏿‍🎤",1048),("🧑🏻‍🌾",918),("🏋🏻",2008),("🎱",3157),("🏌️",1917),("👨🏽‍🫯‍👨🏿",2122),("🧑🏻‍🍼",1332),("🇹🇩",3904),("🦵🏻",458),("🙇‍♂",797),("🧗🏽",1888),("👩🏼‍❤‍👨🏽",2486),("🔔",3238),("🎼",3240),("💑🏿",2454),("👩🏿‍🤝‍👩🏽",2291),("🦐",2701),("🛖",2903),("🏃🏻‍♀‍➡",1754),("👯🏽‍♂",1818),("🧏🏿‍♂",784),("🧟‍♂️",1491),("🦹🏼‍♀️",1393),("🧜🏿‍♀️",1468),("🇱🇰",3818),("👩🏽‍🤝‍👩🏾",2283),("🛠️",3379),("👃🏾",485),("👨🏼‍💻",1033),("🚶‍♀‍➡",1555),("👨🏻‍❤️‍👨🏾",2509),("🦣",2632),("👩🏾‍❤️‍💋‍👩🏿",2444),("🤸🏼‍♀",2075),("😊",12),("💟",139),("🤼🏾",2083),("🚶🏻‍♀️‍➡",1556),("🕷️",2713),("👱🏿",532),("🇦🇷",3692),("♾️",3556),("🛀🏻",2230),("👨🏾‍🎤",1053),("🏋️‍♀",2019),("🫱🏻",202),("🏊🏼‍♂️",1979),("👳🏾‍♀️",1245),("🚶🏾‍➡",1553),("🧑🏼‍🦽",1695),("🫶🏻",382),("▪",3662),("🕺🏽",1780),("👨🏻‍🎓",870),("👨‍⚕️",851),("🧑🏻‍🔧",954),("🧗🏽‍♂",1894),("💅🏿",442),("🧖🏽‍♀️",1882),("👨🏿‍🔬",1018),("🚤",3001),("🥧",2847),("🤸🏽‍♂️",2070),("🍿",2818),("🚶🏾‍♀‍➡️",1559),("🦶🏽",466),("🧚🏻‍♂",1422),("👩🏽‍❤‍👩🏼",2542),("🇬🇮",3770),("😥",92),("🖍️",3344),("👩🏾‍⚕",861),("⛹🏿",1994),("🧝🏽‍♂️",1478),("🇯🇲",3800),("🎗️",3117),("☸",3501),("💁🏿‍♀️",754),("👱🏾‍♀️",639),("🧜🏽‍♂️",1460),("🗾",2885),("🤾",2175),("🧎🏿",1590),("👎️",339),("👨🏾‍🐰‍👨🏿",1836),("👨🏻‍🐰‍👨🏾",1823),("🧘🏽‍♂️",2220),("🧑🏽‍🦯‍➡",1630),("🧑🏻‍🎓",864),("🚺",3455),("👨🏾‍🚒",1125),("💇‍♀️",1525),("🥷🏻",1188),("👨🏻‍❤‍💋‍👨🏾",2405),("🤲🏼",395),("🇵🇹",3872),("🕕",3040),("💆🏻",1496),("♨",2940),("💻",3271),("🙍🏼‍♂️",673),("🤱🏼",1315),("👩🏼‍🔬",1021),("🍗",2798),("🏃🏻‍♂‍➡",1760),("💇‍♂",1519),("🧎‍➡️",1603),("👩🏻‍🦼‍➡",1688),("♠️",3169),("🚣🏼‍♀️",1967),("💈",2945),("📛",3570),("🙆🏼‍♀️",733),("👉🏽",300),("🥝",2765),("🦖",2685),("🤟🏻",274),("🧏‍♂",779),("🇨🇨",3721),("👩🏽‍🦼‍➡",1690),("🧖‍♀",1879),("🦪",2703),("🏌️‍♀️",1929),("🧏🏿‍♀",790),("🚵🏻‍♀",2056),("👱🏼‍♂",643),("😐",38),("😼",123),("🇻🇪",3928),("🕝️",3033),("📀",3280),("🤸🏼",2063),("🧙‍♀",1409),("🐦‍🔥",2676),("🧖🏾‍♂",1877),("🕣️",3045),("🕗️",3044),("🏒",3138),("🙆🏻‍♂",726),("🕠",3039),("9️",3599),("🧍‍♂️",1573),("👩🏼‍❤‍👨🏻",2485),("💂🏽‍♂",1178),("🇬🇩",3765),("👨🏻‍🫯‍👨🏼",2111),("☑️",3574),("🧑🏼‍🦯",1623),("🧎🏽‍➡️",1606),("💘",132),("🏄🏿",1940),("🚶🏾‍♂️‍➡",1565),("🇸🇭",3887),("❗",3562),("🌃",2933),("💢",158),("🦹🏽‍♀️",1394),("👜",3206),("👟",3212),("🐩",2597),("🙅🏼‍♀",715),("👐",387),("👩‍❤️‍💋‍👩",2423),("🙆🏽‍♂️",728),("💂🏾‍♀",1185),("🖕🏾",313),("🥨",2792),("🏇🏿",1909),("💠",3670),("🍬",2849),("🐱",2601),("🎭",3177),("🧘🏾‍♀️",2227),("🙍🏾‍♀️",681),("👩🏻‍❤️‍👩🏻",2528),("👯‍♂️",1815),("👩🏼‍❤️‍💋‍👩🏽",2434),("✂️",3365),("🏃🏾‍♀️‍➡",1757),("💋",156),("☔️",3089),("🧑🏾‍🚀",1101),("💾",3278),("🚴🏽‍♀",2040),("🙎🏾‍♂️",693),("🪸",2697),("⛓‍💥",3395),("👩🏾‍❤️‍👨🏿",2496),("🔅",3542),("🧙🏿‍♂",1408),("🪘",3258),("🏭️",2918),("👩🏾‍❤️‍💋‍👨🏿",2392),("📦",3332),("👩🏽‍❤️‍💋‍👩🏽",2426),("🧎‍♀‍➡️",1609),("👩🏽‍❤️‍💋‍👩🏾",2439),("🧑🏽‍❤️‍🧑🏿",2466),("⛹🏼‍♂",1997),("🇸🇮",3888),("📷️",3287),("😟",78),("🍌",2755),("👌🏼",239),("🔗",3394),("🏊‍♂️",1977),("🇹🇷",3914),("👩🏿‍🫯‍👩🏾",2156),("🖊️",3342),("▫",3663),("🧚🏼‍♂",1423),("👩🏻‍❤️‍👩🏽",2534),("💆🏼‍♂️",1503),("👩🏾‍🫯‍👩🏽",2151),("👰🏿‍♀",1294),("⛹🏻",1990),("🙍🏽‍♂️",674),("🧛🏽",1436),("⌚",3023),("👨🏽‍🍼",1328),("💻️",3271),("⛓️",3396),("💁‍♀",749),("🧏🏿‍♀️",790),("🏃🏼‍♀️‍➡",1755),("👩🏾‍🔧",969),("🧝🏿‍♂",1480),("👩🏻‍❤‍💋‍👩🏾",2431),("👷🏿‍♀️",1210),("🤜🏿",368),("🧑🏿‍🤝‍🧑🏼",2264),("☁️",3073),("0⃣",3590),("✋",189),("👷",1193),("👨🏻‍🫯‍👨🏿",2114),("👨🏻‍💼",996),("🧎🏿‍♀‍➡",1614),("🧫",3404),("⏪",3531),("🚣🏽‍♂️",1962),("💃🏾",1775),("👩🏼‍🦯",1647),("🤼🏻‍♀",2132),("🧑🏾‍❤‍🧑🏼",2468),("🙍🏿‍♂",676),("🫴🏽",222),("🤦🏻‍♀️",822),("⬇",3480),("🦸‍♀",1373),("🙆🏽‍♀",734),("🇨🇴",3731),("🌵",2737),("👁‍🗨",166),("🧑🏽‍🤝‍🧑🏻",2255),("🧑🏿‍⚖",904),("⛹🏼‍♂️",1997),("🧑🏾‍❤‍🧑🏿",2470),("🕥",3049),("🛢️",2989),("📊",3357),("🚵🏾‍♀️",2059),("👨🏿‍🦯",1638),("👈🏽",294),("👨🏽‍❤️‍💋‍👨🏽",2400),("😝",27),("🏋🏼‍♀️",2021),("‼",3557),("🧑🏽‍❤‍🧑🏾",2465),("🧑🏽‍❤‍💋‍🧑🏾",2361),("🌗",3058),("👮🏾‍♂",1143),("👨🏾‍💼",999),("👩🏽‍❤️‍💋‍👩🏻",2437),("💽",3277),("⚕️",3566),("👩🏿‍❤‍👩🏽",2551),("👮🏾‍♀️",1149),("🇪🇦",3748),("👩🏾‍❤‍💋‍👨🏾",2391),("🧛‍♂️",1439),("🧼",3435),("🏳️‍⚧️",3680),("🇬🇬",3768),("👈🏼",293),("🎶",3242),("🧗🏻‍♂",1892),("🕟",3037),("🕵🏿‍♀️",1168),("💪🏽",452),("👩🏽‍❤‍💋‍👩🏼",2438),("🤟🏼",275),("👩🏼‍❤‍👨🏿",2488),("🫸🏻",232),("🔉",3233),("👩🏼‍🦰",589),("🧚🏽‍♀",1430),("↪",3487),("🧝‍♀",1481),("👩🏾‍🌾",933),("🧎🏿‍♀",1602),("🕕️",3040),("👨🏿‍🚀",1108),("❕",3561),("👩🏻‍🦳",612),("🦵🏽",460),("👩‍👦‍👦",2574),("😮",81),("🏄🏿‍♂️",1946),("🧙🏽‍♀️",1412),("👩🏾‍🎓",879),("🧑🏽‍🦰",596),("🕧️",3029),("🦫",2642),("👳🏻‍♀",1242),("🧑🏼‍🦼‍➡️",1665),("🏧",3450),("👩🏻‍🔧",966),("🚴🏿‍♂",2036),("👇🏼",317),("🧛🏿‍♂️",1444),("🧑🏿‍🔬",1012),("👩🏻‍❤‍👩🏾",2535),("♐️",3518),("💇🏼‍♀",1527),("🏴󠁧󠁢󠁳󠁣󠁴󠁿",3942),("💇‍♀",1525),("🙀",125),("🪀",3154),("👩🏼‍❤️‍💋‍👨🏽",2382),("👨🏻‍🦰",558),("🧑🏻‍❤️‍💋‍🧑🏽",2352),("🎖️",3120),("🍯",2852),("🥈",3124),("🅱️",3608),("🧘🏽‍♂",2220),("🌕",3056),("⛅",3074),("🧑‍🦼‍➡️",1663),("🤸🏽‍♂",2070),("🧑🏾‍🤝‍🧑🏼",2260),("👩🏿‍❤️‍💋‍👨🏿",2376),("🙂‍↔️",50),("🙋🏿‍♂",766),("👷🏽",1196),("🤹🏼‍♂️",2201),("👩🏿‍🦽",1722),("🧑🏽‍🤝‍🧑🏽",2244),("🧘🏻‍♂️",2218),("🫵🏼",329),("⚧",3550),("🙎‍♀",695),("🚶🏽‍♂‍➡️",1564),("Ⓜ️",3614),("🇸🇹",3897),("⬅️",3482),("🧑🏼‍🤝‍🧑🏿",2254),("🚠",3014),("🚶🏽‍♂️",1540),("🙋‍♂",761),("😨",90),("👨🏻‍❤‍💋‍👨🏻",2398),("🧙🏾‍♂️",1407),("🤷🏿‍♀",844),("🤹🏼",2195),("🤫",33),("🥾",3213),("✍🏽",434),("👃🏼",483),("🪝",3397),("😖",96),("🌭",2804),("🐅",2606),("🥦",2778),("🦹🏻‍♀",1392),("🧑🏾‍🐰‍🧑🏽",1809),("🦸🏽‍♂️",1370),("🤌🏾",247),("🦸🏿‍♀",1378),("🌓",3054),("🧣",3192),("🛩",3007),("🙆🏿‍♂️",730),("📣",3236),("🧜",1451),("👩🏽‍⚕",860),("🕵🏽‍♂️",1160),("🤽🏾‍♂️",2167),("👩🏾‍❤‍💋‍👨🏻",2389),("💇🏽‍♂",1522),("🧙🏽‍♂",1406),("👿",108),("👨🏼‍❤️‍👨🏼",2503),("🛜",3545),("🇵🇲",3868),("🌀",3085),("🪐",3068),("👨🏼‍❤‍💋‍👨🏾",2409),("🧗🏼‍♂️",1893),("👨🏾‍⚖️",909),("🏃🏽‍➡",1750),("🧑🏻‍🤝‍🧑🏿",2250),("🧑🏻‍❤️‍🧑🏼",2455),("🌐",2883),("🕔",3038),("🎲",3163),("🥍",3139),("🙎🏿‍♂️",694),("☠️",110),("👨‍👧‍👦",2571),("🦏",2633),("🖋",3341),("👩‍🍼",1319),("❔",3560),("🧑🏾‍🏭",975),("🚶🏻‍♂‍➡️",1562),("🏃🏼‍➡",1749),("🧑‍🩰",1765),("🤼🏽‍♀",2134),("👯🏼‍♀️",1843),("🦕",2684),("🦸🏾‍♂️",1371),("🫄🏼",1309),("👨🏾‍🦼",1673),("🦟",2716),("👊🏻",352),("🔦",3295),("💩",111),("🧑🏿‍🦽‍➡",1704),("💂‍♂️",1175),("👩🏾‍🔬",1023),("🉐",3628),("💅🏻",438),("💮",2722),("🧖‍♀️",1879),("👩🏼‍❤️‍👨🏾",2487),("🚶🏾‍♂‍➡",1565),("🧑🏻‍❤️‍🧑🏿",2458),("🧖🏽‍♂",1876),("👱🏻‍♀",636),("🧯",3439),("🚒",2964),("🧘",2211),("👥",2580),("👩🏼‍❤️‍💋‍👩🏻",2433),("🙍🏾",669),("👮🏾‍♀",1149),("🤝🏻",400),("🧝🏼‍♀",1483),("👨‍👧",2570),("📻️",3248),("👩🏻‍✈",1092),("🍐",2760),("👩🏻‍🚀",1110),("🆕",3615),("👨🏽‍🚀",1106),("🤹🏿",2198),("♍",3515),("🧗🏻‍♀",1898),("👯🏼‍♀",1843),("🔣",3604),("🇱🇮",3817),("🤹🏻",2194),("👩🏾‍❤‍💋‍👨🏽",2391),("🏃🏾‍♂️",1739),("💁🏻‍♀",750),("🧎🏼‍♀️‍➡",1611),("🤷",827),("👩🏿",586),("👩🏾‍💻",1041),("⚪️",3648),("❌️",3576),("👩🏼‍🫯‍👩🏿",2144),("📠",3267),("🫶",381),("🏄🏻‍♀",1948),("👨🏾‍❤️‍💋‍👨🏽",2417),("🇰🇾",3812),("🗺️",2884),("🇪🇨",3749),("👩🏿‍🔬",1024),("🇯🇪",3799),("🤛🏻",358),("🤜",363),("🧑🏽‍🐰‍🧑🏼",1804),("👨🏽‍🦯‍➡",1642),("🧑🏽‍❤️‍💋‍🧑🏻",2359),("🔁",3524),("🏇🏾",1908),("👫🏾",2297),("🦸🏽",1364),("👨🏼‍🐰‍👨🏿",1828),("🦔",2643),("🧞‍♀",1489),("🙆🏼",721),("🍘",2823),("👇",315),("👨🏽‍🚒",1124),("✏️",3339),("💂🏿‍♂",1180),("🇦🇪",3684),("🧓🏽",650),("🔨",3375),("🧑🏻‍🦳",618),("🧎🏿‍♀️‍➡",1614),("👇🏻",316),("🐄",2619),("🇬🇲",3772),("⛔️",3465),("👴🏽",656),("🪕",3256),("👩🏻‍❤‍👨🏽",2482),("👩🏿‍🤝‍👩🏻",2289),("💆🏻‍♂️",1502),("🙌",375),("👨🏻‍🐰‍👨🏽",1822),("🧚🏽‍♂",1424),("🙋🏿",760),("🧚🏾‍♀️",1431),("🙇🏼‍♂",799),("🈂",3624),("🔋",3268),("🛎",3019),("🧑🏽‍🫯‍🧑🏼",2094),("👨🏾‍✈️",1089),("👩‍🦱",599),("👩🏼‍🏭",985),("🍷",2860),("🈲",3631),("🍊",2752),("👨‍👨‍👦",2558),("⏫️",3534),("🚶🏽‍♀️‍➡️",1558),("👰🏻‍♂️",1284),("👰🏻‍♀",1290),("🚶🏻‍♀‍➡️",1556),("🇮🇲",3792),("🙆🏽‍♂",728),("🧑🏼‍✈",1081),("🙏🏽",428),("🚶🏻‍♂️",1538),("🧔🏽‍♀",554),("🇹🇬",3906),("👩🏽‍💼",1004),("🌤",3076),("🚶🏿",1536),("⤴",3488),("🧑🏻‍🤝‍🧑🏼",2247),("🧗🏽‍♂️",1894),("🏃‍♂️",1735),("🦹🏻‍♂",1386),("✊🏾",349),("😢",93),("👯🏿‍♀",1846),("🧑🏾‍🎨",1065),("🧑🏾‍🎄",1359),("🫢",31),("👨🏽‍🦼",1672),("🧞‍♀️",1489),("🧘🏻‍♀️",2224),("⛹🏿‍♂️",2000),("👨🏽‍🐰‍👨🏿",1832),("🫱🏿‍🫲🏻",421),("🌻",2728),("🎿",3150),("👩🏽‍⚕️",860),("🕸️",2714),("⛅️",3074),("👨🏽‍❤️‍👨🏽",2504),("🧘🏿‍♀️",2228),("👨🏾‍🎓",873),("🧑🏽‍🩰",1768),("🏌🏽‍♀",1932),("🍪",2843),("🦵🏿",462),("🍻",2864),("🇰🇬",3804),("🧘🏽",2214),("📱",3262),("🌩️",3081),("🇿🇼",3940),("💏🏽",2348),("🧑🏻‍🤝‍🧑🏽",2248),("👙",3202),("👩‍🦼",1681),("💇🏼‍♂",1521),("🗄️",3367),("👩🏻‍🤝‍👩🏿",2276),("👩🏽‍🏫",896),("⛹‍♀️",2001),("🅿",3619),("🚧",2996),("👨🏿‍🤝‍👨🏽",2343),("🏃🏻‍♂️‍➡️",1760),("🚶🏻‍➡️",1550),("💆🏾",1499),("👆🏾",307),("🏃🏻‍♀️",1742),("🛝",2942),("🧑🏻‍❤‍🧑🏽",2456),("🧑🏼‍🦳",619),("🌰",2783),("😵‍💫",68),("🏌️‍♂️",1923),("⛺",2931),("🕷",2713),("😡",104),("🧑🏽‍🦼‍➡️",1666),("♑️",3519),("🛩️",3007),("🏄🏿‍♀️",1952),("👨🏼‍❤️‍👨🏾",2513),("👩🏼‍💼",1003),("💁‍♀️",749),("🚙",2971),("#️",3588),("💳️",3323),("🧑🏿‍🤝‍🧑🏽",2265),("😇",13),("👨🏿‍⚕",856),("🧙🏿‍♀",1414),("👩🏿‍❤‍💋‍👨🏽",2395),("🦡",2653),("⏹️",3538),("☣️",3475),("🧑‍🎨",1061),("🔊",3234),("▫️",3663),("👩🏽‍🔬",1022),("👰‍♂️",1283),("💭",169),("🕵🏾‍♀",1167),("⛑",3226),("🩱",3199),("👬",2319),("👶",497),("✝",3503),("👩🏽‍🦯",1648),("🦸🏼",1363),("🫰🏾",271),("🇸🇯",3889),("🇪🇭",3752),("👨🏿‍❤‍👨🏼",2524),("🥷",1187),("👨🏼‍⚕",853),("🛻",2972),("🔀",3523),("👩🏿‍🍳",952),("🫲🏼",209),("🧙🏽‍♀",1412),("🚵‍♂",2049),("🚯",3469),("🐕‍🦺",2596),("🙋🏻‍♂️",762),("📯",3237),("👨🏻‍🎨",1068),("👩🏽‍❤‍💋‍👩🏾",2439),("🧏🏻‍♂",780),("👩🏼‍⚕",859),("🎟",3118),("🪞",3418),("🫟",3587),("☘",2740),("🪺",2746),("🤷🏿",832),("👳🏼",1231),("🇳🇿",3859),("👨🏻‍❤️‍💋‍👨🏼",2403),("👨🏽‍❤‍💋‍👨🏿",2414),("🧗🏿‍♂",1896),("🏊🏼‍♀️",1985),("🧑🏼‍❤‍💋‍🧑🏻",2355),("👩🏾‍🤝‍👩🏿",2288),("👩🏻‍🌾",930),("👩🏿‍🦼‍➡️",1692),("🕴️",1783),("🐹",2638),("🧎🏿‍♂️‍➡️",1620),("🚦",2994),("📰",3310),("🧑🏿‍✈",1084),("🇻🇮",3930),("🥃",2866),("👩🏻‍❤️‍💋‍👨🏽",2378),("👼",1337),("🚕",2967),("👩🏿‍🎤",1060),("🚰",3452),("⛴",3003),("🧖🏼",1869),("🐗",2622),("👨🏿‍❤️‍👨🏾",2526),("🙅🏿‍♀",718),("🚑️",2963),("🦸🏾‍♀️",1377),("🚶🏿‍♂️",1542),("🚴🏿‍♀",2042),("💂🏻‍♀",1182),("🛏️",3420),("🧎🏻‍♂️",1592),("🧏🏻‍♀️",786),("🏝️",2895),("👰",1277),("👩🏻‍❤️‍💋‍👩🏻",2424),("🕵🏾‍♀️",1167),("👨🏽‍❤‍👨🏽",2516),("🏁",3674),("🇵🇭",3865),("🧚🏻‍♂️",1422),("🧑🏻‍🏫",882),("👨🏾‍⚕",855),("🥌",3152),("🇦🇴",3690),("🕵🏿‍♀",1168),("🥷🏿",1192),("🙆🏾‍♂",729),("🙋🏼‍♀",769),("🔎",3292),("◽",3661),("👷🏼‍♂",1201),("🏂🏿",1916),("🤦🏿‍♀",826),("🫩",57),("🚶‍♀️‍➡️",1555),("🃏",3174),("📸",3288),("㊙",3637),("🥉",3125),("🧔🏻‍♀️",552),("📄",3309),("🪿",2675),("👩🏾‍❤️‍💋‍👩🏼",2442),("👲",1247),("🗣",2578),("🧛🏾",1437),("💁🏼‍♂",745),("🐀",2637),("⚪",3648),("🎗",3117),("🇫🇲",3760),("🔯",3508),("🚣🏽‍♀",1968),("🧑🏻‍🦽‍➡️",1700),("🦊",2599),("🏃🏿‍♀️‍➡",1758),("💁🏽",740),("🪭",3204),("🏃‍♀‍➡",1753),("👩🏾‍❤️‍💋‍👩🏽",2443),("🤷🏻‍♀️",840),("⬆",3476),("👨🏿‍🐰‍👨🏻",1837),("👨🏿‍❤‍💋‍👨🏻",2419),("🙅🏿",706),("🪢",3183),("🚣",1953),("🧝🏻‍♂",1476),("👩🏿‍🎓",880),("⛷",1910),("👩🏻‍❤️‍👨🏽",2482),("🧾",3324),("🚶🏿‍➡️",1554),("🏋🏼",2009),("🪒",3428),("🌅",2936),("🙋🏽‍♀",770),("🧑🏼‍❤️‍🧑🏿",2462),("🧎🏿‍♂‍➡",1620),("🙍",665),("👨🏿‍🐰‍👨🏼",1838),("☝🏻",322),("👯🏼",1791),("🐤",2659),("💂🏼‍♀️",1183),("👨🏾‍🐰‍👨🏻",1833),("➿",3579),("🚶🏻‍♀️‍➡️",1556),("🏠",2906),("👩🏿‍❤‍💋‍👩🏽",2447),("🧖🏿",1872),("👨🏻‍❤‍💋‍👨🏿",2406),("🚵🏼‍♂️",2051),("💁🏻‍♂",744),("🇵🇳",3869),("🙇🏽‍♀",806),("📅",3350),("🫲🏿",212),("🙋🏼‍♀️",769),("🧗",1885),("🚶‍♂️‍➡",1561),("🖐",183),("💏🏾",2349),("▶️",3526),("🧑🏼‍🔧",955),("🙅🏼‍♂",709),("🏋🏽",2010),("👯🏾‍♀️",1845),("🇱🇸",3820),("👩🏽‍🐰‍👩🏼",1856),("💆🏿‍♀️",1512),("💁🏿‍♂",748),("🧑🏿",526),("👩🏽‍❤️‍👨🏽",2478),("🎓️",3223),("🙅‍♂",707),("🧑🏾‍🩰",1769),("👩🏿‍❤‍👨🏽",2499),("⛹️‍♀️",2001),("🧑🏾‍❤️‍🧑🏽",2469),("🤼‍♀️",2131),("🧑🏽‍❤‍🧑🏼",2464),("💏",2345),("🤸🏻‍♂",2068),("🕵🏿",1156),("👩🏽‍🦽",1720),("👩🏼‍🫯‍👩🏾",2143),("👩🏻‍❤‍👨🏻",2476),("👵🏾",663),("🤵🏼‍♂️",1267),("🛸",3018),("🤾🏾",2179),("💇🏾‍♂️",1523),("🇻🇳",3931),("🍀",2741),("🗑️",3368),("👩🏾‍❤️‍👩🏿",2548),("👱🏼‍♀️",637),("🧚🏿",1420),("🧑🏽‍❤️‍💋‍🧑🏼",2360),("🧑🏾‍🤝‍🧑🏻",2259),("⛹🏻‍♀️",2002),("👩🏾‍❤‍👨🏿",2496),("🚮",3451),("👋🏾",175),("🛍️",3208),("🕑️",3032),("💂🏻‍♂️",1176),("👰🏼‍♂",1285),("🧚🏿‍♂️",1426),("🧑🏼‍✈️",1081),("🥙",2809),("🚶🏻‍♂",1538),("👨🏿‍🤝‍👨🏼",2342),("🧑🏽‍🦼‍➡",1666),("🪜",3400),("🇧🇹",3715),("🧿",3445),("⛺️",2931),("🤷🏽‍♂️",836),("😦",88),("🏃🏼‍♀️‍➡️",1755),("🚶🏾‍♂️‍➡️",1565),("👩🏿‍🦰",592),("⛔",3465),("🛌🏻",2236),("👳🏽‍♀",1244),("😞",98),("🧘🏼‍♂",2219),("*️",3589),("🤝🏿",404),("🤽🏿‍♀",2174),("🌧️",3079),("🧑🏽‍❤️‍🧑🏼",2464),("🤣",6),("✔️",3575),("🆓",3611),("🦎",2680),("🏭",2918),("👨🏾‍❤️‍💋‍👨🏿",2418),("🧜‍♂",1457),("🤾‍♂️",2181),("🤸🏾‍♂",2071),("👩🏼‍❤️‍👨🏼",2477),("🏂",1911),("🧑🏿‍❤️‍🧑🏽",2473),("👩🏽‍❤‍👩🏿",2544),("👨🏿‍❤‍👨🏿",2526),("🧎🏾‍♀‍➡️",1613),("⛹‍♀",2001),("👝",3207),("🚀",3017),("👨🏽‍❤‍👨🏿",2518),("👩🏿‍❤️‍💋‍👩🏿",2428),("🕐",3030),("🙍🏽",668),("🗡",3380),("🥗",2817),("👩🏻‍❤️‍👩🏾",2535),("👩🏻‍🦰",588),("👏🏻",370),("🛅",3462),("🙎🏽",686),("👩‍🚀",1109),("👩🏿‍🔧",970),("🪎",3317),("✔",3575),("🤷‍♂️",833),("🍺",2863),("👦",509),("🏃🏼‍♀",1743),("🤍",155),("😸",120),("🤹🏽‍♂️",2202),("🌮",2806),("🧑🏼‍🚀",1099),("🧱",2900),("👩🏻‍❤‍💋‍👨🏼",2377),("🧙🏽",1400),("👩🏾‍❤‍👨🏼",2494),("🤦🏾‍♂️",819),("🏊🏻‍♂️",1978),("🚣🏾‍♀",1969),("🤵🏻‍♂️",1266),("🇨🇮",3726),("👩🏻‍❤‍👨🏿",2484),("👩🏼‍❤️‍👩🏾",2539),("👨‍⚕",851),("💇🏻",1514),("📉",3356),("🏋🏽‍♀",2022),("🤸🏾‍♂️",2071),("‼️",3557),("🏃🏻‍♂️",1736),("♥️",3170),("🏄🏾‍♀️",1951),("🧙🏾‍♂",1407),("🇵🇬",3864),("🫂",2581),("🧑‍💼",989),("🙍🏻‍♀️",678),("🧝🏽‍♀",1484),("🧏‍♂️",779),("🫖",2856),("🫚",2784),("👨🏻‍🍼",1326),("🧑🏿‍❤‍💋‍🧑🏼",2368),("👷🏾‍♀️",1209),("🍦",2839),("🚄",2949),("🙎🏻‍♂️",690),("🏃🏽‍♀️‍➡",1756),("🧖‍♂️",1873),("🧎🏿‍♂",1596),("🏃🏼‍♂️",1737),("🔟",3600),("🇬🇷",3776),("🧑🏿‍🐰‍🧑🏽",1813),("🏊🏽‍♂",1980),("🫠",10),("👨🏻‍🤝‍👨🏿",2328),("👩🏾‍🐰‍👩🏻",1859),("👩🏽‍🦯‍➡️",1654),("🤛🏿",362),("✊🏿",350),("✋🏿",194),("👩🏼‍⚕️",859),("👨🏿‍⚖",910),("👨🏽‍🏭",980),("👩🏿‍❤️‍💋‍👩🏾",2448),("🚶‍♀‍➡️",1555),("👩🏻‍❤️‍💋‍👩🏿",2432),("🧍‍♂",1573),("💲",3565),("👩🏽‍❤️‍💋‍👩🏼",2438),("🫐",2764),("🧏🏼‍♀",787),("🕙",3048),("👩🏿‍❤‍💋‍👩🏿",2448),("🤹🏻‍♀",2206),("🤘🏼",281),("🕤",3047),("👰🏾‍♂",1287),("🚓",2965),("🏃🏽‍♀️‍➡️",1756),("👨🏼‍❤️‍💋‍👨🏼",2399),("⬅",3482),("🎾",3133),("🧍🏽‍♂️",1576),("👩🏾‍❤️‍👨🏾",2479),("🤙🏽",288),("🚐",2962),("🛣",2987),("🐦️",2661),("🧚🏿‍♀",1432),("👴🏾",657),("🍋",2753),("🕵🏼‍♂",1159),("🚸",3464),("👩🏼‍❤‍💋‍👨🏻",2381),("1️⃣",3591),("🏊🏻‍♀",1984),("🧑‍⚕️",845),("3️",3593),("🙅🏽‍♀️",716),("🛵",2978),("🙍🏿‍♀",682),("🤔",34),("👨🏽‍🫯‍👨🏻",2119),("✌🏽",258),("🤾🏻‍♀",2188),("🧘🏻‍♂",2218),("👀",492),("🧍🏻‍♂️",1574),("👳🏻‍♀️",1242),("🦹🏿‍♂",1390),("👩🏼‍❤️‍💋‍👨🏼",2373),("👩🏾‍🦼",1685),("⛹️‍♀",2001),("🧑🏻",522),("🗨️",167),("✳️",3581),("⛹🏼‍♀️",2003),("🦹🏿",1384),("💇🏼",1515),("👰🏻‍♂",1284),("🧚🏾‍♂",1425),("👩🏻‍🐰‍👩🏾",1849),("✏",3339),("⛹🏿‍♀️",2006),("🙎‍♂️",689),("💦",162),("💎",3230),("🤸‍♀️",2073),("🇩🇲",3745),("🚗",2969),("🚇️",2952),("🏴‍☠",3681),("🤶",1349),("🫱🏽‍🫲🏼",414),("⏯",3529),("🏋‍♀️",2019),("🤸🏿‍♀️",2078),("🦹‍♀️",1391),("🌏",2882),("👮‍♀",1145),("🧑🏼‍🎄",1357),("🙍‍♀️",677),("👩🏿‍❤‍💋‍👨🏻",2393),("🫱🏼‍🫲🏻",409),("🦹🏾‍♂️",1389),("👩🏾‍🫯‍👩🏼",2150),("7️",3597),("🏷️",3314),("🏵",2724),("🇧🇸",3714),("⛪️",2924),("🤰🏽",1298),("👹",113),("🇹🇱",3910),("🐇",2640),("🏄🏾‍♂",1945),("🚵🏽‍♀",2058),("🤚🏿",182),("🍸️",2861),("👩🏿‍❤️‍👩🏾",2552),("⚖️",3392),("🎣",3147),("🤌🏻",244),("🇬🇺",3779),("👱🏾‍♀",639),("👯🏼‍♂️",1817),("👍🏽",336),("👩🏼‍🏫",895),("👐🏾",391),("🤴",1217),("👯🏿",1794),("👩🏽‍🚒",1130),("🧝",1469),("🔶",3664),("🧊",2872),("🕛️",3028),("🫕",2815),("☯",3502),("⚫️",3647),("👩🏽‍❤‍👨🏽",2490),("🫱🏼‍🫲🏽",410),("🤟🏿",278),("📖",3300),("👩🏼‍🍳",949),("👩🏼‍🫯‍👩🏻",2141),("🫱🏿‍🫲🏼",422),("👩🏽‍❤‍💋‍👨🏾",2387),("💁🏾‍♀",753),("🧑🏿‍🦽",1698),("🧗🏾‍♀️",1901),("🛐",3497),("👱🏿‍♀️",640),("👨🏾‍🤝‍👨🏼",2338),("🙍🏿",670),("🇬🇹",3778),("🌝",3066),("🫸🏾",235),("👩🏼‍🦯‍➡️",1653),("🤚🏻",178),("🪗",3252),("🤾🏿",2180),("🇩🇬",3742),("😵",67),("🧳",3020),("🌁",2932),("🍄",2747),("🧑🏽‍🫯‍🧑🏿",2096),("🇹🇹",3915),("🏃🏼‍♂‍➡️",1761),("👨🏽‍💻",1034),("🧍🏻",1568),("🎪",2946),("🧒🏾",507),("🆒",3610),("🧚🏿‍♂",1426),("🧎‍♀️",1597),("🌥️",3077),("🌪️",3082),("🔐",3372),("🎤",3246),("👨🏼‍🦽‍➡",1713),("🤾🏽‍♀️",2190),("👨🏻‍🦱",564),("🤶🏾",1353),("🤶🏽",1352),("📮",3337),("🛋",3421),("👨🏽‍⚖️",908),("🎋",3108),("🟪",3654),("🌞",3067),("🚶🏻‍♂️‍➡️",1562),("🙅🏾‍♂",711),("🇸🇸",3896),("🧑‍🦳",617),("🤲🏻",394),("🆚",3622),("💿",3279),("🌄",2935),("🤲🏽",396),("📽️",3284),("🏌🏽‍♂",1926),("🏊🏼",1973),("🐑",2625),("👺",114),("🦂",2715),("🧑‍⚖",899),("🙇🏽‍♂",800),("🌊",3098),("🧀",2796),("🧛🏽‍♂",1442),("🕒",3034),("👓️",3184),("🤲🏾",397),("🤙🏾",289),("🧎🏾‍➡️",1607),("🧑🏾‍🌾",921),("👑",3220),("🤷🏾‍♀️",843),("🇿🇲",3939),("👩🏾‍❤️‍👨🏻",2493),("⚡️",3091),("⛩️",2928),("🤵🏽",1262),("🙇🏾",795),("🏩",2914),("🤘🏽",282),("🥚",2811),("⚱️",3444),("👱",527),("👧🏾",519),("👨‍👦‍👦",2569),("👨‍🌾",923),("🚣🏽‍♂",1962),("🍤",2832),("👩🏻‍🏭",984),("🇸🇦",3881),("🔂",3525),("👮🏿‍♀",1150),("🍍",2756),("🧑🏿‍🐰‍🧑🏾",1814),("🫵🏿",332),("🥱",102),("💆‍♂",1501),("🤾🏾‍♀",2191),("⬇️",3480),("🧑🏾‍🐰‍🧑🏼",1808),("💁🏼‍♀",751),("⚱",3444),("🏡",2907),("🇨🇾",3739),("🥢",2873),("🧑🏿‍❤️‍🧑🏾",2474),("🦵",457),("🏌🏼‍♀",1931),("🚶🏽‍♀",1546),("👨🏽‍🔧",962),("🤼🏾‍♀",2135),("🧛🏾‍♂",1443),("🚶‍♂‍➡",1561),("🧑🏾‍❤‍🧑🏻",2467),("💗",135),("👳‍♂",1235),("🐲",2682),("👩‍👩‍👧‍👧",2567),("🧑🏾‍🦰",597),("9️⃣",3599),("👨🏽‍❤️‍💋‍👨🏻",2411),("🏌‍♂️",1923),("🇧🇾",3718),("👌🏻",238),("🐞",2710),("👣",2587),("🚲",2982),("👈🏾",295),("🔠",3601),("🧎🏼‍♂‍➡",1617),("👅",494),("🦻",475),("🤙🏻",286),("👩🏾‍🎨",1077),("📋️",3358),("👩🏽‍🫯‍👩🏻",2145),("👮🏿‍♀️",1150),("🧑🏽‍✈",1082),("🪛",3388),("🌋",2890),("🛤️",2988),("🧑🏿‍🎓",868),("👩🏻‍⚖",912),("🍹",2862),("🧎‍♀️‍➡",1609),("👨🏻‍🚒",1122),("👩🏽‍❤‍💋‍👩🏿",2440),("💁🏿‍♀",754),("🧑🏾‍🤝‍🧑🏿",2262),("🐙",2695),("🚣🏿‍♂️",1964),("🇬🇼",3780),("🫱🏿‍🫲🏾",424),("😯",82),("🚶🏿‍♀‍➡️",1560),("🧑🏽‍🍼",1334),("⏱️",3025),("🎨",3179),("🐃",2618),("3️⃣",3593),("🤬",106),("🚶🏼‍♂️",1539),("🤼🏿",2084),("🚶🏻‍♀️",1544),("🌯",2807),("🌾",2738),("🧑🏿‍🦯‍➡️",1632),("🏌🏽‍♂️",1926),("🇰🇪",3803),("🔺",3668),("👳‍♀",1241),("🧒🏽",506),("👩🏽‍✈",1094),("🧍🏿‍♂",1578),("🎂",2844),("💊",3411),("🧖🏾‍♀",1883),("👩🏻‍🚒",1128),("🧛🏼‍♀️",1447),("🎅🏾",1347),("🏊",1971),("🌷",2730),("🤜🏽",366),("💇",1513),("🫱🏽",204),("🇦🇬",3686),("🤵🏻",1260),("🙎🏼‍♀️",697),("🏀",3129),("⛴️",3003),("🏌🏼‍♂️",1925),("👢",3218),("🇧🇿",3719),("🤦🏾‍♂",819),("♓",3521),("🤟",273),("7️⃣",3597),("👨🏻‍❤️‍👨🏿",2510),("🏃‍♀‍➡️",1753),("🧎🏿‍♂️",1596),("🧝🏼",1471),("👩🏽‍❤‍💋‍👨🏽",2386),("🧑‍🔬",1007),("👨🏽‍🌾",926),("👩🏾‍🫯‍👩🏻",2149),("👭🏽",2270),("🇹🇻",3916),("🚁",3012),("👩‍🦼‍➡",1687),("🧑🏾‍🫯‍🧑🏽",2099),("💂🏽",1172),("👨‍🔧",959),("🫎",2609),("🚈",2953),("👩🏽‍🚀",1112),("🏄🏽‍♂️",1944),("✖️",3551),("🇸🇴",3894),("👩🏿‍🦳",616),("🚣🏿‍♀️",1970),("👨🏻‍🤝‍👨🏼",2325),("👩🏼‍🚒",1129),("🇧🇲",3709),("🫱🏻‍🫲🏽",406),("🚏",2986),("🙋🏾‍♀️",771),("🧏🏼",775),("🚵🏼",2045),("💂🏿‍♀️",1186),("🏃🏼‍♀‍➡️",1755),("🧎🏻‍♀️",1598),("🦘",2652),("💆🏾‍♀",1511),("🫘",2782),("🏌🏼",1919),("👨🏾‍🦯‍➡",1643),("🏌🏻‍♀️",1930),("🏃🏼‍♂‍➡",1761),("👨🏾‍🐰‍👨🏼",1834),("🍸",2861),("🧎🏾‍♀️",1601),("🏊️",1971),("🗺",2884),("🧜‍♀️",1463),("🙇‍♀️",803),("👩🏿‍❤‍💋‍👨🏿",2396),("🫲",207),("↪️",3487),("👱🏽‍♀️",638),("🦼",2980),("🧑🏿‍❤️‍💋‍🧑🏻",2367),("🚵‍♀️",2055),("👩🏼‍❤‍💋‍👨🏽",2382),("🤽🏿‍♂",2168),("👨🏾‍🍳",945),("♊️",3512),("🙇🏻",792),("🧘🏾‍♂",2221),("🧔🏾",543),("🙎",683),("🙎🏾",687),("🚴🏾‍♂️",2035),("🤦🏾‍♀",825),("🐫",2628),("👨🏿‍🎨",1072),("💪🏼",451),("🏋🏼‍♂",2015),("🏃🏻‍♀️‍➡",1754),("🦹🏾‍♀️",1395),("👆🏿",308),("🤸‍♀",2073),("🏃🏽‍♀️",1744),("💆🏼‍♂",1503),("😩",100),("👩🏻‍❤‍💋‍👩🏻",2424),("👨🏽‍❤️‍👨🏾",2517),("🫷🏿",230),("🧝‍♂️",1475),("👩🏾‍🍼",1323),("🪳",2712),("👩‍🔬",1019),("🇧🇱",3708),("👨🏿‍❤‍👨🏻",2523),("🦙",2629),("👨🏻‍🚀",1104),("🧑🏿‍🏫",886),("👼🏽",1340),("💂🏾‍♂️",1179),("🤏🏾",253),("👩🏾‍🦯‍➡",1655),("👩🏿‍❤‍👨🏻",2497),("👨‍🦽",1705),("⌚️",3023),("🗄",3367),("🫪",85),("👴🏻",654),("🙆🏾",723),("👨🏽‍🍳",944),("👩🏻‍🫯‍👩🏽",2138),("🫄🏻",1308),("🧑🏼‍❤‍🧑🏿",2462),("🔥",3096),("🤦",809),("👭🏼",2269),("🤴🏽",1220),("💫",161),("☪",3505),("🥒",2776),("🇧🇻",3716),("🌱",2732),("🧝🏼‍♂",1477),("😹",121),("🇲🇺",3842),("🫷🏽",228),("🐦‍⬛",2674),("🚵‍♂️",2049),("🏃🏿‍➡️",1752),("😳",84),("🚵🏾",2047),("🗳",3338),("🚶🏼‍♂️‍➡",1563),("◼",3658),("💆🏿‍♂️",1506),("🙂‍↔",50),("🧏🏽",776),("🏌🏾‍♂️",1927),("👩🏼‍❤️‍👩🏽",2538),("🇷🇼",3880),("🤟🏽",276),("🇼🇫",3933),("🧑🏼‍🎤",1045),("🩷",145),("👩‍👩‍👧‍👦",2565),("🙇🏾‍♀",807),("👨🏿‍🎤",1054),("👨🏼‍🦰",559),("🥎",3128),("⛄️",3094),("👨🏻‍🦼",1670),("✊🏼",347),("🇬🇸",3777),("🧑🏿‍🩰",1770),("🧔🏻",540),("🚼",3457),("👨🏾‍❤️‍💋‍👨🏻",2415),("🇭🇰",3782),("🕐️",3030),("🤽🏾‍♀️",2173),("👨🏾‍🦼‍➡",1679),("📬",3335),("🧑‍🦲",629),("☎",3264),("🧍🏾‍♂️",1577),("🚣🏽",1956),("⏸️",3537),("🧑🏻‍🦽",1694),("⚾",3127),("🏄‍♀",1947),("👩🏿‍🏫",898),("🤹🏽‍♀️",2208),("🚴🏻‍♀",2038),("⚾️",3127),("🫄🏿",1312),("🧛🏻",1434),("🕛",3028),("👨🏽‍🤝‍👨🏻",2333),("🤳🏻",444),("♊",3512),("🏃‍➡️",1747),("👉🏿",302),("🪱",2718),("👨🏽‍🦼‍➡",1678),("🏃🏻‍♀",1742),("👩🏻‍⚕",858),("🏋🏼‍♀",2021),("🙍🏼",667),("🏃🏻",1730),("🔜",3495),("👍🏻",334),("🇸🇷",3895),("👩🏿‍🦼‍➡",1692),("◼️",3658),("💙",149),("🧏🏻‍♂️",780),("🏄🏼‍♂",1943),("👩🏾‍🤝‍👨🏿",2314),("🙋‍♀",767),("🇦🇶",3691),("👩🏿‍🤝‍👨🏻",2315),("🧑🏼‍🚒",1117),("🧑🏿‍❤‍💋‍🧑🏾",2370),("🎚️",3244),("🦞",2700),("♌",3514),("🧑🏽‍🦽‍➡️",1702),("👩🏼",583),("©",3584),("👮🏾",1137),("♂️",3549),("💂🏿‍♀",1186),("♥",3170),("👩🏼‍✈",1093),("🎬️",3285),("♒",3520),("⛹️‍♂",1995),("👸🏽",1226),("👨🏿‍❤️‍💋‍👨🏾",2422),("🫰🏽",270),("☃️",3093),("🚬",3441),("🏃🏿‍♀️",1746),("🤵🏿‍♂",1270),("👩🏽‍🦼",1684),("🇳🇺",3858),("🧑🏻‍⚖",900),("🧑🏻‍🎨",1062),("👯🏻‍♀️",1842),("👯🏿‍♂️",1820),("👩🏿‍❤️‍💋‍👨🏻",2393),("⚒️",3378),("👩🏾‍❤‍💋‍👩🏾",2443),("🙍🏽‍♂",674),("🤾🏼‍♂",2183),("👰🏾‍♂️",1287),("🇲🇨",3826),("🧎🏿‍♂‍➡️",1620),("🧑🏻‍🦯‍➡️",1628),("🧙🏻‍♀",1410),("🎺",3250),("❤️‍🔥",142),("🧔🏽‍♂️",548),("👩🏼‍🐰‍👩🏻",1851),("🎷",3249),("🦠",2719),("😆",4),("🧑🏽‍🦱",608),("🕯️",3293),("🌫",3083),("🧏🏾",777),("🧑🏽‍🎤",1046),("🧑🏾‍❤️‍💋‍🧑🏼",2364),("🧎🏾‍♀️‍➡",1613),("💝",133),("🍈",2750),("🥡",2838),("🧑🏿‍🌾",922),("🤞🏼",263),("🇸🇽",3899),("🍙",2824),("💇🏼‍♀️",1527),("🧚‍♂",1421),("🧑🏾‍🐰‍🧑🏻",1807),("👷🏻‍♀",1206),("🇸🇰",3890),("🧏🏿‍♂️",784),("🧖🏿‍♂",1878),("🕵️‍♂️",1157),("🐻‍❄️",2646),("🧜‍♂️",1457),("🇲🇷",3839),("👩🏾‍❤‍👩🏻",2545),("🕵🏽‍♀",1166),("👨🏿‍🫯‍👨🏽",2129),("🔫",3156),("🏃🏿‍♂‍➡",1764),("🧜🏿",1456),("👩🏾‍🦼‍➡",1691),("👨🏾‍❤‍👨🏼",2520),("🧒🏼",505),("🛃",3460),("👨‍👩‍👦‍👦",2556),("👩🏾‍🤝‍👨🏻",2311),("🤽🏿",2162),("🇨🇱",3728),("🧑🏿‍⚖️",904),("👩🏻‍❤‍👨🏼",2481),("💆🏽‍♂️",1504),("🙇🏿‍♀️",808),("®",3585),("👩🏾‍❤️‍👨🏽",2495),("🏌️‍♂",1923),("👔",3189),("🏘",2904),("🏌🏼‍♀️",1931),("🙎🏽‍♂️",692),("👰🏿‍♀️",1294),("👨🏼‍🤝‍👨🏻",2329),("👷🏻‍♂",1200),("👩🏻‍🦲",624),("🧑🏾‍⚕️",849),("🏊🏼‍♀",1985),("🙏🏻",426),("🧑‍🦯",1621),("👯🏼‍♂",1817),("🫀",488),("🚶‍♀️‍➡",1555),("🐮",2616),("📝",3345),("👨🏻‍🦽‍➡️",1712),("👩🏽‍🦰",590),("ℹ",3612),("🅱",3608),("🚶🏾‍♀️‍➡",1559),("♿",3453),("🚶🏿‍➡",1554),("🙆‍♀️",731),("🧛🏼‍♂",1441),("👩🏻‍✈️",1092),("🧑🏻‍🦼",1658),("🏋🏽‍♂",2016),("♏",3517),("👫🏿",2298),("🏄🏻‍♂",1942),("👨🏻‍🫯‍👨🏽",2112),("🇧🇧",3700),("👵🏻",660),("🫃",1301),("🏄🏿‍♀",1952),("👮🏽‍♂",1142),("🤙🏼",287),("🧑‍🦼",1657),("👬🏻",2320),("👱‍♂",641),("🧑🏻‍🦱",606),("🧑🏽‍💼",992),("🇲🇻",3843),("🦹",1379),("👩🏿‍❤️‍👩🏻",2549),("⛓",3396),("🏃🏽‍♀‍➡️",1756),("🤦🏻‍♂️",816),("🧙🏾‍♀️",1413),("👨‍🔬",1013),("🧑🏼‍⚖️",901),("🏃‍♂",1735),("👩‍🦰",587),("🧂",2820),("♟️",3173),("👷🏾",1197),("👩🏿‍🤝‍👩🏾",2292),("💅🏾",441),("🌇",2938),("🖐🏾",187),("🧖🏼‍♀",1881),("🚣🏼‍♀",1967),("🚵🏼‍♀️",2057),("🪃",3383),("👰🏼",1279),("🇳🇨",3849),("🤸🏾",2065),("🔄",3491),("🙏🏾",429),("🤹🏻‍♂",2200),("🧑🏿‍🦼‍➡️",1668),("🕵🏻‍♀",1164),("⛹🏽",1992),("😛",24),("⛳️",3145),("👷‍♂️",1199),("🙎🏻",684),("🧙🏻‍♀️",1410),("👧🏽",518),("🎠",2941),("🇮🇨",3788),("🔲",3673),("🧑🏻‍🦼‍➡",1664),("🔘",3671),("💁🏽‍♀️",752),("🪂",3010),("🏛",2898),("📇",3354),("➿️",3579),("🚭",3468),("👩🏻‍⚕️",858),("👂🏾",473),("🧜🏼‍♂️",1459),("👨🏿‍🔧",964),("🧑🏿‍🦳",622),("🎚",3244),("👩🏾‍🏭",987),("🤦‍♀",821),("🏃🏾‍♂️‍➡️",1763),("🧑🏽‍🎨",1064),("🏴‍☠️",3681),("❣",140),("🙆🏻‍♀️",732),("🧘🏾‍♀",2227),("👩🏼‍🐰‍👩🏽",1852),("🇨🇵",3732),("🙎🏿‍♀️",700),("🚌",2959),("🇷🇴",3877),("👐🏿",392),("🧘🏽‍♀",2226),("🦹‍♀",1391),("👩🏽‍✈️",1094),("🇱🇧",3815),("🙇🏼‍♀",805),("🚵🏽",2046),("🫱🏻‍🫲🏾",407),("👠",3215),("🛳️",3002),("🤵🏻‍♂",1266),("👉️",297),("🚶🏽‍♀️‍➡",1558),("💆🏾‍♂️",1505),("🦶🏻",464),("🤰🏿",1300),("🕶️",3185),("👉🏼",299),("🖇",3362),("🤽",2157),("🤾🏽‍♀",2190),("👯🏻",1790),("🍕",2803),("🦮",2595),("👨‍👩‍👧‍👧",2557),("🫱🏾‍🫲🏼",418),("🌠",3071),("🏋🏾‍♀️",2023),("🤌🏽",246),("👨🏾‍❤️‍👨🏿",2522),("🇦🇱",3688),("👨🏻‍🦳",570),("🧑🏼‍🦽‍➡",1701),("🇰🇷",3810),("👨🏻‍🐰‍👨🏿",1824),("👖",3191),("🏈",3131),("📎",3361),("👩🏻‍❤‍👩🏻",2528),("👩🏼‍🦽",1719),("🪠",3424),("🤘",279),("🍰",2845),("👱🏻‍♂️",642),("🧑‍🍼",1331),("👨🏿‍🤝‍👨🏾",2344),("🌜",3063),("🇦🇹",3694),("🤹🏻‍♀️",2206),("🤾🏽‍♂",2184),("⭐",3069),("👚",3203),("⚕",3566),("👼🏼",1339),("🧎‍♂‍➡️",1615),("🧏🏾‍♀",789),("🧑🏿‍🏭",976),("™",3586),("🧏🏾‍♀️",789),("🧑🏻‍⚖️",900),("🕘",3046),("🥅",3144),("🦨",2651),("🤾‍♀",2187),("🧍",1567),("👗",3196),("⛷️",1910),("🤽‍♂️",2163),("🕎",3507),("🏊🏽",1974),("👈🏿",296),("🇵🇱",3867),("🐓",2657),("🏌🏿",1922),("👨🏼‍🦯‍➡",1641),("🍚",2825),("🙇🏾‍♂️",801),("☔",3089),("🇰🇵",3809),("🏆",3121),("👋🏽",174),("🧎🏾‍♀",1601),("👩‍🦲",623),("🤷🏾",831),("🧜🏼",1453),("💑🏽",2452),("🙅🏻‍♀️",714),("👩🏼‍🎤",1057),("🤛🏾",361),("🕵🏾",1155),("🐺",2598),("🌍️",2880),("🧑🏼‍🏭",973),("🤷🏾‍♂️",837),("🙍‍♂️",671),("👨🏿‍🏫",892),("👨🏾‍🐰‍👨🏽",1835),("🚶🏿‍♂️‍➡️",1566),("🧔🏻‍♂",546),("👨🏽‍🐰‍👨🏼",1830),("🚶🏼‍♀️‍➡",1557),("🍝",2828),("👩🏽‍🦽‍➡",1726),("🀄",3175),("🏌🏿‍♀",1934),("🦈",2694),("👨🏽‍❤‍💋‍👨🏻",2411),("🇷🇸",3878),("🍢",2830),("👭🏻",2268),("🐻",2645),("📚️",3304),("🏋🏿",2012),("🫳🏾",217),("🏃‍♂‍➡",1759),("🦹🏽",1382),("⏲️",3026),("🐦",2661),("🥪",2805),("🇬🇧",3764),("👨🏼‍🎓",871),("😐️",38),("🇧🇪",3702),("🧙🏼‍♀️",1411),("👨‍👩‍👧‍👦",2555),("👨🏽‍⚖",908),("👪️",2582),("👩🏻‍🫯‍👩🏼",2137),("🧑🏾‍🤝‍🧑🏽",2261),("🦛",2634),("🫸🏼",233),("💕",138),("👩🏾‍🐰‍👩🏿",1862),("🤿",3148),("👱🏽‍♀",638),("🚹",3454),("™️",3586),("👨🏾‍❤‍👨🏿",2522),("🤢",61),("🧎🏻‍➡",1604),("🐏",2624),("🧓🏼",649),("🦚",2671),("👩🏼‍❤️‍💋‍👨🏻",2381),("👨🏽‍🔬",1016),("🚣‍♂",1959),("🤨",37),("◀",3530),("🟫",3655),("👼🏾",1341),("😾",127),("🧔‍♂",545),("💌",131),("✅️",3573),("🏝",2895),("📫️",3333),("🦸🏾",1365),("👨🏻‍🦼‍➡",1676),("🏳️",3678),("⛹🏾",1993),("👩🏾‍🦽",1721),("🌖",3057),("🧬",3405),("👩‍🦼‍➡️",1687),("🙇🏼‍♂️",799),("🏃🏾‍♂‍➡",1763),("👯🏾‍♀",1845),("🥀",2726),("👩🏽‍❤‍👨🏾",2491),("🚵🏾‍♂️",2053),("🙅🏽‍♂",710),("🧑🏾‍🫯‍🧑🏼",2098),("👮🏻‍♀",1146),("👃🏽",484),("💆",1495),("🇳🇷",3857),("🏋🏿‍♂️",2018),("👨‍🎓",869),("🍃",2744),("🧑🏽‍🏫",884),("🧑🏻‍❤‍🧑🏿",2458),("🈂️",3624),("🇵🇰",3866),("🇭🇳",3784),("🤦🏻‍♀",822),("🚶🏽‍➡",1552),("🫵🏾",331),("👩‍🎨",1073),("🎉",3106),("👱🏿‍♂️",646),("🤽🏾",2161),("👨🏾‍❤️‍💋‍👨🏼",2416),("💼",3346),("🙋🏽‍♂",764),("🚣🏿‍♂",1964),("🫗",2867),("🙆‍♀",731),("🐢",2679),("🇱🇷",3819),("🧎🏿‍♂️‍➡",1620),("🚶‍♂",1537),("🎵",3241),("🧔🏽‍♂",548),("🪡",3181),("🇬🇫",3767),("👨🏾‍❤‍💋‍👨🏽",2417),("⤵",3489),("🇮🇷",3796),("🧑🏻‍🦽‍➡",1700),("🙆🏿‍♀",736),("🤾🏻‍♂️",2182),("🏳‍⚧",3680),("👨🏻‍🦽",1706),("😠",105),("🇮🇹",3798),("👨‍🦽‍➡",1711),("♾",3556),("🟧",3650),("🙁",79),("👩🏽‍❤️‍👩🏼",2542),("🖕🏽",312),("*⃣",3589),("😚",20),("🫃🏽",1304),("🧞‍♂️",1488),("🫳🏿",218),("🚵🏽‍♀️",2058),("🙆🏻‍♂️",726),("📞",3265),("🏃🏾‍♂",1739),("🚴🏾",2029),("🌴",2736),("✌🏻",256),("🧝🏿‍♀️",1486),("⛽️",2990),("👨🏽‍🦯",1636),("🧎‍♂️‍➡️",1615),("⛸",3146),("🚶🏿‍♂",1542),("👩‍⚕️",857),("🤵‍♂️",1265),("🛘",2889),("🙅🏻‍♀",714),("✡",3500),("👨🏼‍❤‍💋‍👨🏽",2408),("🚶🏻‍♂‍➡",1562),("👨🏽‍💼",998),("🏫",2916),("🤜🏻",364),("🧑🏽‍❤️‍🧑🏾",2465),("👨🏿‍⚕️",856),("👩🏻‍🐰‍👩🏼",1847),("💆🏽‍♀️",1510),("💇🏽‍♀️",1528),("🪬",3446),("🇸🇩",3884),("🍏",2759),("🎓",3223),("🏂🏼",1913),("7⃣",3597),("🧎‍♂️",1591),("👨🏾‍❤️‍💋‍👨🏾",2401),("👨🏽‍🎨",1070),("🤽🏽",2160),("🧑🏿‍🦯",1626),("⛓️‍💥",3395),("💂🏻‍♀️",1182),("👩‍🎤",1055),("👩🏻‍🤝‍👨🏽",2300),("♑",3519),("👩‍🦳",611),("👆🏻",304),("🧑🏻‍✈",1080),("👩🏿‍❤️‍👨🏿",2480),("🤷🏽",830),("🦶🏼",465),("🛕",2926),("⏪️",3531),("🦸",1361),("🤵🏾‍♀️",1275),("👳🏿‍♀️",1246),("👬🏼",2321),("💿️",3279),("🧑🏼‍🫯‍🧑🏽",2090),("🎅🏼",1345),("🇲🇾",3846),("🤷🏼‍♀",841),("🤽🏼‍♂",2165),("🧑🏼‍🦱",607),("🚊",2955),("👩🏿‍❤️‍👨🏽",2499),("🫧",3436),("🤾🏼‍♀️",2189),("⏹",3538),("🏊🏽‍♀",1986),("🧑🏽‍❤️‍💋‍🧑🏾",2361),("🧗🏼‍♂",1893),("🙅🏿‍♀️",718),("*️⃣",3589),("⏮️",3532),("🧎",1585),("🕵🏼",1153),("🧽",3438),("👨🏼‍🔬",1015),("🐈️",2602),("💪🏿",454),("🤾🏾‍♂️",2185),("🫅🏿",1216),("🙅🏻",702),("🎏",3111),("🏃‍♂️‍➡️",1759),("👯‍♀",1841),("📶",3544),("🥄",2876),("🧙‍♀️",1409),("👨🏼‍❤‍👨🏻",2511),("➕️",3552),("🏚",2905),("🧑🏾‍❤‍💋‍🧑🏼",2364),("🔓️",3370),("⚛️",3498),("🧝🏾‍♀️",1485),("🏃🏻‍♂‍➡️",1760),("♉",3511),("🍄‍🟫",2786),("🤸",2061),("👨🏽‍❤️‍💋‍👨🏿",2414),("🕍",2927),("🧴",3429),("👨🏼‍❤‍👨🏼",2511),("🫱🏿‍🫲🏽",423),("♎️",3516),("🚷",3471),("☃",3093),("🧗🏿‍♂️",1896),("👩🏼‍❤‍💋‍👩🏿",2436),("🙎🏽‍♀",698),("🚳",3467),("🛞",2991),("🧘🏾",2215),("🇰🇲",3807),("🙇🏻‍♂",798),("👨🏻‍🤝‍👨🏾",2327),("🥴",66),("👩🏻‍❤️‍👨🏾",2483),("⛹🏼‍♀",2003),("🈚️",3630),("🚴🏽‍♀️",2040),("📪",3334),("🦸🏿‍♀️",1378),("🎌",3676),("🙇",791),("🧑🏻‍❤️‍💋‍🧑🏿",2354),("🪟",3419),("🧑🏾‍❤‍💋‍🧑🏻",2363),("👩🏾‍✈",1095),("🤷🏼",829),("👩🏻‍❤️‍💋‍👩🏽",2430),("6️⃣",3596),("👷🏻‍♀️",1206),("👴",653),("🌙",3060),("🇦🇲",3689),("👩🏽‍🦲",626),("👨🏽‍❤‍💋‍👨🏾",2413),("👩🏿‍💻",1042),("🧑🏾‍💻",1029),("🇷🇪",3876),("👩🏾‍❤️‍👩🏽",2547),("🏃🏼‍➡️",1749),("🧘🏾‍♂️",2221),("🙎🏻‍♀️",696),("🙎🏻‍♀",696),("🏊🏾‍♂",1981),("🧎🏽‍♀️",1600),("🧎🏽‍♀",1600),("🏪",2915),("🛤",2988),("👩🏾‍❤‍👨🏽",2495),("🇧🇫",3703),("🦶🏿",468),("🕙️",3048),("🧘🏿‍♀",2228),("👩‍⚕",857),("👨🏻‍✈️",1086),("🪊",3251),("🧑‍🦯‍➡",1627),("👨🏼‍🔧",961),("🧙🏿",1402),("👧🏿",520),("👩🏽‍❤️‍💋‍👨🏽",2374),("🇩🇪",3741),("👩🏾‍🦱",603),("🧜🏿‍♀",1468),("🕟️",3037),("🪪",3449),("🧎‍♂‍➡",1615),("🇲🇿",3847),("👩🏼‍❤️‍👩🏻",2537),("👈🏻",292),("🧑🏼‍❤️‍💋‍🧑🏻",2355),("🗜️",3391),("🧦",3195),("🧔🏼",541),("❓",3559),("🚣‍♀",1965),("🙋🏿‍♀️",772),("🛬",3009),("🚉",2954),("👨🏿‍🦽‍➡️",1716),("🧑🏻‍⚕️",846),("😌",52),("👨🏾‍🦱",567),("🏃🏻‍♀️‍➡️",1754),("👩🏻",582),("👨🏽‍❤️‍👨🏻",2515),("🧇",2795),("🩴",3210),("💇‍♂️",1519),("🤷🏽‍♂",836),("🍔",2801),("👩🏾‍🦰",591),("🔒️",3369),("🚍️",2960),("👩🏾‍🦯‍➡️",1655),("🌕️",3056),("👩🏾‍🐰‍👩🏼",1860),("👩🏾‍🎤",1059),("🏋️",2007),("👩🏿‍❤‍👩🏻",2549),("👨🏼‍🦽",1707),("✌",255),("🧞",1487),("👂🏿",474),("🟰",3555),("🇺🇦",3919),("🧑🏾‍🦽",1697),("🏊🏿‍♀",1988),("🤦🏿‍♂️",820),("👩🏾‍⚕️",861),("💇🏾",1517),("🤯",69),("🧛‍♀️",1445),("🧑🏼‍🦽‍➡️",1701),("🧑🏽‍🤝‍🧑🏿",2258),("😜",25),("👩🏽‍❤‍💋‍👨🏿",2388),("🏃🏼‍♂️‍➡",1761),("❤️‍🩹",143),("🚶🏾‍♂",1541),("🍽️",2874),("🇩🇴",3746),("🕜️",3031),("🫣",32),("🧑🏾",525),("☹️",80),("🙊",130),("✌🏾",259),("🚶🏽‍♂️‍➡️",1564),("🚵🏿‍♂️",2054),("🇵🇸",3871),("👛",3205),("🤼🏾‍♀️",2135),("🙂",8),("👩🏽‍🫯‍👩🏾",2147),("💛",147),("🧍🏾",1571),("🫦",496),("🤳🏾",447),("🧑🏻‍❤‍💋‍🧑🏼",2351),("🚵🏼‍♀",2057),("👩🏽‍❤️‍👩🏾",2543),("🕵️‍♂",1157),("🥠",2837),("👱‍♂️",641),("🧛🏿",1438),("🪤",3427),("👌🏿",242),("🚵🏿‍♀",2060),("🤹‍♂️",2199),("🏳",3678),("🏋🏻‍♂",2014),("☝🏽",324),("🤽🏽‍♀️",2172),("🧑🏾‍❤️‍🧑🏼",2468),("🗓",3353),("🤤",55),("❤️",144),("🇦🇿",3698),("🚴🏽‍♂",2034),("🧝🏽",1472),("👩🏽‍❤‍💋‍👩🏽",2438),("🫳🏽",216),("🍵",2857),("👩🏽‍❤️‍👩🏽",2530),("🧏🏼‍♂",781),("🏊🏼‍♂",1979),("🎯",3153),("💁🏾‍♂️",747),("👨🏿‍🦽",1710),("👩🏼‍🦼‍➡️",1689),("🕊️",2663),("🔆",3543),("🚶🏿‍♀️‍➡",1560),("🙅🏾‍♀",717),("🤦🏻",810),("⛹️‍♂️",1995),("👩🏼‍❤️‍👩🏿",2540),("🇬🇪",3766),("♠",3169),("😕",76),("🍛",2826),("🫆",2588),("👉🏾",301),("👨🏼‍⚖️",907),("👩‍❤️‍💋‍👨",2371),("💔",141),("🇺🇲",3921),("💯",157),("👨🏽‍❤‍👨🏻",2515),("👩🏽‍🎓",878),("🅰",3606),("🤦🏼",811),("🪴",2733),("👨🏻",534),("🧗‍♂",1891),("👩🏾‍🤝‍👩🏻",2285),("🤸🏼‍♂️",2069),("✋️",189),("🐰",2639),("🧑🏻‍🦯",1622),("🤸🏻‍♀️",2074),("👨‍👨‍👧",2559),("🇳🇴",3855),("👩🏽‍🤝‍👨🏻",2307),("🤼🏿‍♂",2110),("👩🏿‍🎨",1078),("💆🏽‍♂",1504),("👰🏻",1278),("🥲",22),("🏋",2007),("🚴🏿‍♂️",2036),("🛟",2998),("🚶🏻‍♀‍➡",1556),("🚣🏽‍♀️",1968),("🏳️‍⚧",3680),("🤹🏼‍♂",2201),("🧲",3399),("🦻🏼",477),("🧑🏼‍🫯‍🧑🏿",2092),("🕥️",3049),("🧑🏽‍❤‍💋‍🧑🏿",2362),("👩🏽‍🎨",1076),("🫔",2808),("👦🏼",511),("✋🏽",192),("🫱🏻‍🫲🏿",408),("➖",3553),("☕️",2855),("👩🏿‍🏭",988),("🧑🏻‍🔬",1008),("👎🏾",343),("👋🏻",172),("🎮",3160),("👩🏼‍🦼‍➡",1689),("⁉",3558),("🇸🇳",3893),("🚶🏾‍♀️‍➡️",1559),("👩🏽‍❤‍👨🏻",2489),("👩🏼‍🌾",931),("🕵🏻‍♂️",1158),("🤸🏽‍♀",2076),("🚶🏼",1533),("🏋🏻‍♀️",2020),("🚫",3466),("🇵🇾",3874),("➰",3578),("🤴🏾",1221),("🏊🏽‍♀️",1986),("🧑🏿‍🦱",610),("🇨🇦",3720),("🧢",3224),("🧑🏼‍🍼",1333),("👩‍✈️",1091),("🤵🏿‍♂️",1270),("🐧",2662),("👷‍♂",1199),("🪈",3260),("🔧",3387),("🏔",2887),("🗓️",3353),("🤽🏻‍♂️",2164),("🚣‍♀️",1965),("📓",3305),("🇭🇹",3786),("⛪",2924),("👨🏻‍🤝‍👨🏽",2326),("🇲🇴",3836),("🛀🏾",2233),("🤺",1903),("🧑‍🦱",605),("🥂",2865),("🪾",2748),("🖥️",3272),("👩🏽‍💻",1040),("😋",23),("👰🏽‍♀️",1292),("🚶🏽‍♀‍➡️",1558),("📃",3307),("🙅‍♀",713),("🕵🏽",1154),("🤼🏽‍♀️",2134),("🏃🏾‍♀",1745),("📦️",3332),("🧑🏾‍❤️‍💋‍🧑🏻",2363),("👩‍❤‍👨",2475),("🐊",2678),("🚶🏼‍♂️‍➡️",1563),("🧑🏿‍❤‍🧑🏼",2472),("🚋",2958),("📏",3363),("🤹",2193),("📲",3263),("❎",3577),("🪆",3168),("🗝️",3374),("🧜🏼‍♀️",1465),("8⃣",3598),("🧜🏽‍♀️",1466),("🧑🏻‍🐰‍🧑🏽",1796),("💂🏾",1173),("⏩️",3527),("🚛",2974),("☯️",3502),("🚵🏽‍♂",2052),("💥",160),("🫵🏻",328),("💇🏻‍♂️",1520),("👩🏾‍❤‍💋‍👩🏻",2441),("🤼🏿‍♀",2136),("❤‍🩹",143),("♦️",3171),("🏌🏾‍♂",1927),("🐻‍❄",2646),("🧔🏽",542),("👨🏽‍🤝‍👨🏾",2335),("🇪🇹",3755),("🧑🏿‍❤️‍💋‍🧑🏾",2370),("🇩🇯",3743),("🥊",3142),("🏃‍♀️‍➡",1753),("🚶🏼‍♀‍➡️",1557),("👨🏾‍🫯‍👨🏿",2126),("🫱🏽‍🫲🏾",415),("🤾🏾‍♀️",2191),("🦸🏾‍♂",1371),("👩🏿‍❤‍💋‍👨🏼",2394),("🇲🇭",3831),("🐖",2621),("💂‍♀️",1181),("👩🏽‍❤️‍💋‍👩🏿",2440),("🧏",773),("🕑",3032),("👨🏼‍⚕️",853),("🧄",2779),("👩🏼‍❤‍💋‍👨🏿",2384),("⤵️",3489),("👍",333),("🫃🏼",1303),("🚵🏻",2044),("☎️",3264),("👨🏾‍⚖",909),("📫",3333),("↗",3477),("🐘",2631),("🤚🏽",180),("📗",3301),("🖼️",3178),("🇲🇱",3833),("✋🏻",190),("🙋🏼‍♂️",763),("🧑🏼‍❤️‍🧑🏽",2460),("⛹🏽‍♀️",2004),("👦🏿",514),("👨🏻‍❤️‍💋‍👨🏽",2404),("🚶🏽‍➡️",1552),("👩🏽‍❤️‍💋‍👨🏾",2387),("🙇🏽",794),("💁🏼‍♀️",751),("🚵‍♀",2055),("🤵🏾",1263),("🤷🏻‍♂",834),("🦌",2614),("📤️",3330),("🤦‍♂️",815),("🧎🏿‍➡",1608),("👩‍🚒",1127),("👩🏻‍🫯‍👩🏿",2140),("👨🏽‍⚕️",854),("🗨",167),("🥐",2789),("👨🏼‍🏫",889),("🛌🏼",2237),("🎹",3254),("🌍",2880),("👩🏿‍❤️‍💋‍👨🏾",2396),("🤹🏼‍♀",2207),("👩🏽‍🐰‍👩🏻",1855),("🏄️",1935),("👩🏾‍❤‍💋‍👨🏿",2392),("🇲🇶",3838),("🏌🏾",1921),("👮🏽‍♀️",1148),("👩🏼‍🐰‍👩🏿",1854),("💇🏻‍♀️",1526),("🌚",3061),("🖕🏿",314),("🫓",2791),("🇦🇨",3682),("🧞‍♂",1488),("⛈",3075),("👨🏽‍❤‍👨🏼",2516),("🤸🏿‍♂️",2072),("🧑🏽‍🎄",1358),("ℹ️",3612),("👡",3216),("🈁",3623),("☪️",3505),("👱🏽‍♂️",644),("🤵🏿‍♀",1276),("🌎️",2881),("🧑🏻‍✈️",1080),("🧑🏼‍🤝‍🧑🏾",2253),("🏋️‍♂️",2013),("🐌",2704),("🗂️",3349),("👐🏻",388),("👩🏿‍💼",1006),("🧗🏾",1889),("👩🏻‍🤝‍👩🏽",2274),("🤹🏿‍♂",2204),("🖌️",3343),("🤦🏽‍♀",824),("🗃",3366),("🧎🏾‍♀‍➡",1613),("🧑🏿‍❤️‍💋‍🧑🏼",2368),("🟢",3643),("🌩",3081),("💇🏿‍♂",1524),("👨🏿‍❤️‍💋‍👨🏽",2421),("👩🏾",585),("🧑🏽‍🦯‍➡️",1630),("👯‍♀️",1841),("♨️",2940),("👨🏼‍✈️",1087),("🇬🇭",3769),("🧛🏿‍♂",1444),("👨🏾‍❤️‍👨🏽",2521),("🔬",3406),("🧑🏽‍✈️",1082),("👩🏽‍🏭",986),("⬜️",3657),("🥯",2793),("👶🏽",500),("😈",107),("👩🏿‍❤‍👩🏾",2552),("👨🏼‍🤝‍👨🏾",2331),("👶🏾",501),("⬆️",3476),("🧔🏻‍♂️",546),("🇨🇫",3723),("🚶🏼‍♀",1545),("👳🏿‍♂️",1240),("👨🏽‍❤‍💋‍👨🏽",2412),("🚶🏻‍➡",1550),("👒",3221),("🇱🇾",3824),("👩🏼‍🤝‍👨🏻",2303),("👨🏻‍🎤",1050),("⚔",3381),("👮🏾‍♂️",1143),("👳🏻",1230),("🕞️",3035),("🧑🏼‍💼",991),("🚔️",2966),("🧗🏻‍♂️",1892),("🇧🇦",3699),("🇹🇦",3902),("🧎🏻‍♂️‍➡️",1616),("🧑🏿‍🦲",634),("👩🏾‍❤‍👩🏼",2546),("🙄",45),("🫱",201),("🧑🏼‍🐰‍🧑🏾",1801),("👨🏽‍🤝‍👨🏼",2334),("👧🏻",516),("🛶",3000),("🤽🏼‍♀",2171),("🇮🇩",3789),("🧍🏼‍♂️",1575),("🙅🏿‍♂",712),("🧒🏿",508),("🥋",3143),("👩🏼‍🤝‍👨🏾",2305),("🏛️",2898),("🇲🇰",3832),("🏃‍♂️‍➡",1759),("🇧🇭",3705),("😀",0),("🦸‍♂️",1367),("👩🏾‍💼",1005),("🖨",3273),("🚴🏽",2028),("✈",3006),("🙇🏽‍♀️",806),("👨🏼‍🦼‍➡️",1677),("🇹🇯",3908),("📒",3306),("🧑🏿‍🎨",1066),("🐂",2617),("👨🏾‍🔧",963),("🏄🏼‍♀️",1949),("👩🏿‍✈",1096),("🙌🏻",376),("👩‍🦽",1717),("🚵🏻‍♀️",2056),("🚣🏻‍♀",1966),("🔻",3669),("🥜",2781),("👳🏼‍♂",1237),("👩🏻‍🦽‍➡️",1724),("👩🏼‍❤‍💋‍👩🏽",2434),("📨",3328),("💑🏻",2450),("🇨🇺",3735),("👁‍🗨️",166),("🧎🏾‍♂‍➡️",1619),("⚰️",3442),("🔡",3602),("🌸",2721),("🖖",195),("🧑🏻‍🦯‍➡",1628),("💁🏿",742),("🔙",3492),("🤦🏽‍♂️",818),("👩🏿‍❤️‍💋‍👩🏽",2447),("🪑",3422),("👩🏿‍🦼",1686),("🙆🏼‍♀",733),("🧑🏿‍❤‍🧑🏽",2473),("🙆🏾‍♀",735),("🍼",2853),("🦹🏼‍♂",1387),("😔",53),("🧍🏾‍♂",1577),("👰🏿",1282),("🧖🏻‍♀️",1880),("👨🏼‍🏭",979),("🧕🏼",1255),("🗒",3352),("⏸",3537),("💶",3320),("⏭️",3528),("🚔",2966),("✨️",3104),("🌶",2774),("🙅🏼",703),("👩🏼‍🦯‍➡",1653),("🧑🏼‍❤‍🧑🏻",2459),("🕵🏿‍♂",1162),("👨🏽‍🐰‍👨🏾",1831),("👨🏿‍🦳",574),("🙎🏼‍♀",697),("🏃🏽‍♂️",1738),("🙆",719),("👩‍🍳",947),("🪷",2723),("👱🏻‍♀️",636),("🇻🇺",3932),("🧘‍♂",2217),("🕴",1783),("🧛🏽‍♀",1448),("🧑‍🤝‍🧑",2241),("🧟‍♂",1491),("🎅🏻",1344),("👨🏾‍🫯‍👨🏼",2124),("🫲🏾",211),("🩻",3415),("👩🏿‍🫯‍👩🏼",2154),("🌲",2734),("🏃🏼‍♂️‍➡️",1761),("🇯🇵",3802),("🤽🏼‍♀️",2171),("⛵️",2999),("🌦",3078),("🧤",3193),("🧜🏿‍♂️",1462),("🧕🏿",1258),("🧑🏽‍⚖",902),("🧑🏾‍⚖️",903),("👨🏻‍🦽‍➡",1712),("💞",137),("💁🏾",741),("🏋🏾",2011),("👩‍❤️‍👩",2527),("🤽🏾‍♂",2167),("🙆🏿",724),("👳🏼‍♀️",1243),("🧓🏻",648),("👨🏾‍🔬",1017),("☣",3475),("👩🏾‍❤‍💋‍👨🏼",2390),("🙋🏽‍♀️",770),("🧝🏽‍♂",1478),("🏌🏻‍♀",1930),("👪",2582),("🤷🏿‍♀️",844),("🧝🏾‍♂️",1479),("👳🏽‍♂",1238),("👨🏻‍💻",1032),("💸",3322),("🕹",3161),("👨🏾‍❤️‍👨🏾",2505),("👵",659),("🇦🇸",3693),("👩🏾‍❤‍👨🏻",2493),("🐆",2607),("🧛🏾‍♀️",1449),("🤏🏼",251),("🖐🏿",188),("👩🏿‍🦯‍➡️",1656),("🤦🏼‍♀️",823),("🤵🏿",1264),("⛹🏻‍♂️",1996),("🧛🏻‍♂️",1440),("👩🏻‍⚖️",912),("🏄‍♀️",1947),("🛌",2235),("👮",1133),("🚱",3470),("🗽",2923),("👱🏾‍♂",645),("✍🏾",435),("👨🏾‍❤‍👨🏾",2521),("🙌🏼",377),("⛩",2928),("🧜🏾‍♂️",1461),("👩🏿‍❤‍💋‍👩🏻",2445),("🎁",3116),("🏹",3384),("♎",3516),("🚴🏻‍♂",2032),("🧍‍♀️",1579),("🤼🏻‍♂",2106),("🕵🏼‍♀️",1165),("🦸🏿‍♂️",1372),("🖱",3275),("🤝🏼",401),("🏃🏾‍➡️",1751),("🧑‍🍳",935),("🫷🏻",226),("🌺",2727),("🛌🏾",2239),("🏋🏿‍♀️",2024),("👷🏾‍♂",1203),("👨🏼‍💼",997),("🐶",2593),("👨🏽‍✈️",1088),("🤰🏼",1297),("🇺🇬",3920),("🏋🏽‍♂️",2016),("🔕",3239),("🤾🏼‍♀",2189),("💤",170),("🧹",3431),("🧝🏾",1473),("🧑🏼‍❤️‍💋‍🧑🏿",2358),("🐁",2636),("🧑🏾‍🎓",867),("🗑",3368),("👩🏽‍❤‍💋‍👨🏼",2386),("🧎🏼‍♂‍➡️",1617),("🤶🏼",1351),("💂🏽‍♀",1184),("🇬🇾",3781),("🏤",2910),("📡",3408),("👳",1229),("👐🏽",390),("🪶",2669),("👩🏾‍❤‍💋‍👩🏼",2442),("👩🏼‍🍼",1321),("🤞🏾",265),("👁️‍🗨️",166),("👩‍❤‍👩",2527),("🤦‍♀️",821),("⏬",3536),("✒",3340),("👨🏿‍🦼",1674),("🕹️",3161),("🧍🏾‍♀",1583),("🤼🏼‍♀️",2133),("🇱🇹",3821),("👨🏽‍🦳",572),("🫱🏾‍🫲🏻",417),("🇸🇱",3891),("🕺🏾",1781),("🤲",393),("👨🏼‍🐰‍👨🏻",1825),("🇳🇪",3850),("👨‍🏫",887),("🧑🏽‍🐰‍🧑🏻",1803),("🇭🇲",3783),("❇️",3583),("🦉",2667),("⛹‍♂",1995),("🇱🇻",3823),("👩🏻‍🦯",1646),("🧑🏼‍💻",1027),("😒",44),("🇹🇲",3911),("📳",3546),("🙏🏿",430),("🏜",2894),("🇦🇽",3697),("🧑🏻‍🦲",630),("👱🏼‍♀",637),("👩🏿‍🦯",1650),("🧏🏾‍♂",783),("🧘🏼‍♀️",2225),("🧗🏿‍♀️",1902),("👩🏿‍🚀",1114),("🀄️",3175),("🧍‍♀",1579),("🧜🏾‍♀️",1467),("🇼🇸",3934),("🚲️",2982),("🧏🏻",774),("🏜️",2894),("🧜🏾‍♀",1467),("🧛🏻‍♂",1440),("🙋🏻‍♀",768),("👩‍👩‍👦‍👦",2566),("👨🏼‍❤‍👨🏿",2514),("🤑",28),("🚶🏿‍♀️‍➡️",1560),("👩‍💼",1001),("🕵‍♀️",1163),("🕉️",3499),("👮‍♂",1139),("🇲🇹",3841),("🏃🏿‍♀️‍➡️",1758),("🥿",3214),("👮🏿‍♂",1144),("🅾",3617),("🇲🇸",3840),("👫",2293),("🏃🏾",1733),("🦧",2592),("🕚",3050),("🙎‍♂",689),("👩🏽‍🫯‍👩🏿",2148),("🎩",3222),("👩🏽‍❤️‍👨🏻",2489),("💀",109),("🤘🏿",284),("◻️",3659),("🏄🏾‍♂️",1945),("🧑🏾‍🤝‍🧑🏾",2245),("🚟",3013),("👩‍🦯‍➡",1651),("🫶🏼",383),("🏋🏿‍♂",2018),("🗂",3349),("🌪",3082),("👨🏾‍✈",1089),("💄",3228),("🏊🏽‍♂️",1980),("🛥️",3004),("🙍🏽‍♀",680),("☺",19),("🕵‍♂️",1157),("⏫",3534),("⚠",3463),("🚴",2025),("🇨🇬",3724),("🐪",2627),("#️⃣",3588),("🚢",3005),("🇹🇨",3903),("🧕",1253),("👩🏻‍🦯‍➡",1652),("♒️",3520),("🕵🏿‍♂️",1162),("😏",43),("👰🏿‍♂️",1288),("👨🏼‍❤️‍💋‍👨🏽",2408),("🧔🏿‍♂️",550),("🦸🏻‍♀",1374),("🤾🏾‍♂",2185),("🕵🏾‍♂",1161),("✴️",3582),("🧎🏿‍♀️",1602),("🤚🏾",181),("👩🏿‍❤️‍👩🏼",2550),("🤹🏽‍♂",2202),("👨🏼‍🚀",1105),("🥑",2769),("🤸‍♂️",2067),("🎙️",3243),("🧑🏽‍🤝‍🧑🏾",2257),("📕",3299),("☢️",3474),("🤚",177),("☘️",2740),("🏃🏾‍♀‍➡",1757),("4⃣",3594),("👩🏿‍🦲",628),("💜",151),("🙎🏿‍♀",700),("💃",1771),("🧑🏿‍🦼",1662),("🏊🏿‍♂️",1982),("🤳🏿",448),("🚣🏻‍♂️",1960),("⛹🏻‍♀",2002),("🕒️",3034),("📺️",3286),("👩🏿‍❤️‍👩🏿",2532),("🧑🏽‍🦼",1660),("♉️",3511),("🚎",2961),("👨🏾‍🫯‍👨🏻",2123),("🧑‍⚕",845),("📍",3360),("🤵🏾‍♂️",1269),("🤠",70),("🦵🏾",461),("🦴",491),("🧎🏾‍♂",1595),("🫅",1211),("🧒🏻",504),("🩲",3200),("🐵",2589),("🧛‍♂",1439),("👩🏻‍🤝‍👨🏾",2301),("🦹🏿‍♀️",1396),("🩳",3201),("🚆",2951),("🚩",3675),("🫤",77),("👮🏻",1134),("👨🏽‍🦲",578),("🅾️",3617),("👭🏾",2271),("🇦🇫",3685),("🕯",3293),("💪🏾",453),("🦸🏼‍♂",1369),("🧏🏽‍♂",782),("🧜🏻‍♀️",1464),("🧑🏼‍🎨",1063),("⛄",3094),("🧑🏽‍🏭",974),("🙋🏻‍♂",762),("🐟️",2691),("🕰",3027),("👳🏽‍♂️",1238),("✌🏿",260),("🚥",2993),("🍾",2859),("👩‍❤️‍👨",2475),("🧑🏻‍🎄",1356),("🧙‍♂",1403),("🧑🏻‍🫯‍🧑🏼",2085),("🚶‍♀",1543),("👱‍♀️",635),("🧑🏿‍❤️‍💋‍🧑🏽",2369),("🧘🏻‍♀",2224),("🫄🏾",1311),("👨‍🚀",1103),("🇲🇩",3827),("🏌🏻‍♂️",1924),("👾",117),("🍴",2875),("🤽🏼",2159),("🧚🏼",1417),("🏊‍♂",1977),("🏄‍♂",1941),("🤹🏻‍♂️",2200),("⌛",3021),("👨🏻‍✈",1086),("🧎🏼‍♀‍➡",1611),("🙅🏽‍♂️",710),("🚶🏻‍♀",1544),("🧝🏼‍♀️",1483),("🇵🇷",3870),("🇭🇺",3787),("😮‍💨",47),("🧑🏻‍🫯‍🧑🏾",2087),("🇻🇨",3927),("👩‍🌾",929),("🫜",2787),("👨‍🦼",1669),("🙌🏽",378),("💁🏽‍♂",746),("⚽",3126),("👩🏽‍⚖",914),("🇲🇪",3828),("⛈️",3075),("🧑🏾‍🦯‍➡️",1631),("🏃🏽‍♂️‍➡️",1762),("👩🏾‍🫯‍👩🏿",2152),("🤼🏻",2080),("🚵🏿‍♂",2054),("🇨🇩",3722),("🧜🏻‍♂",1458),("🧑🏻‍🐰‍🧑🏾",1797),("🧍🏿‍♀️",1584),("💁🏻‍♂️",744),("🩸",3410),("🛁",3426),("🦸‍♀️",1373),("🪓",3376),("🧎🏾",1589),("🧑‍🧒‍🧒",2586),("👊🏼",353),("🪵",2902),("⏮",3532),("👈",291),("👮‍♀️",1145),("👨🏿‍🦰",562),("🤸🏼‍♀️",2075),("🧎🏼‍➡",1605),("👩🏻‍❤️‍💋‍👩🏾",2431),("💁🏻",738),("🫴🏿",224),("🧕🏽",1256),("🇹🇰",3909),("🚼️",3457),("🕴🏾",1787),("🙆🏻‍♀",732),("🏏",3136),("🌡",3064),("🍜",2827),("👨‍🦱",563),("🐉",2683),("🫴🏼",221),("😰",91),("🧑🏾‍❤️‍💋‍🧑🏿",2366),("🤾🏼‍♂️",2183),("🥖",2790),("👨🏾‍🦲",579),("🧎🏽‍♂️",1594),("🧔",539),("🪙",3315),("😱",95),("🏃",1729),("♿️",3453),("👳‍♀️",1241),("🤽‍♀",2169),("🥶",65),("🤝🏾",403),("🎭️",3177),("👨🏽",536),("👇️",315),("😿",126),("🐠",2692),("🇾🇪",3936),("🧑🏼‍🦯‍➡",1629),("◀️",3530),("🚴🏻‍♂️",2032),("✖",3551),("👩🏼‍⚖",913),("❓️",3559),("💓",136),("👨‍👨‍👦‍👦",2561),("🈹",3629),("👩🏻‍🎤",1056),("🧚🏼‍♀",1429),("🔷",3665),("🇻🇦",3926),("👂🏼",471),("👱🏾‍♂️",645),("🤷🏻",828),("🧛🏻‍♀",1446),("🌨️",3080),("🌛",3062),("🧑🏼‍❤️‍💋‍🧑🏾",2357),("💁",737),("🤹🏼‍♀️",2207),("🎛️",3245),("💆🏾‍♀️",1511),("🔼",3533),("🏓",3140),("👨🏿‍🚒",1126),("🧚🏻",1416),("👨‍❤‍💋‍👨",2397),("🏄🏾",1939),("👩🏻‍🦽",1718),("👨🏾‍❤️‍👨🏼",2520),("👩🏻‍🍼",1320),("🚅",2950),("🧙🏾",1401),("🤾🏼",2177),("🥳",71),("🤷🏻‍♀",840),("📆",3351),("👨🏿‍🦯‍➡️",1644),("🎅🏿",1348),("👨🏽‍🦯‍➡️",1642),("🏃🏻‍➡",1748),("↗️",3477),("👍🏼",335),("🏺",2879),("🪏",3401),("🧗🏾‍♂️",1895),("🤵🏼",1261),("🤼🏼‍♀",2133),("🧑🏾‍🫯‍🧑🏻",2097),("🚶🏻",1532),("👷🏿‍♀",1210),("🈸",3633),("◻",3659),("👨🏻‍🏫",888),("👩🏾‍🤝‍👩🏽",2287),("🇺🇿",3925),("🇫🇴",3761),("⭕️",3572),("🤼‍♀",2131),("🤦🏽‍♂",818),("🍧",2840),("🧔🏿‍♂",550),("🇮🇶",3795),("🍑",2761),("🧍🏽‍♀",1582),("🩼",3413),("🔝",3496),("🏢",2908),("🤵🏼‍♂",1267),("🏃🏽‍♀",1744),("🥥",2768),("⬛",3656),("🧍🏾‍♀️",1583),("🏄🏼‍♀",1949),("👩🏻‍🫯‍👩🏾",2139),("👨🏾‍🦽",1709),("👷🏾‍♀",1209),("👳🏿‍♀",1246),("🤷🏽‍♀️",842),("🍟",2802),("👩🏽‍❤‍👩🏽",2542),("🧑🏽‍❤‍🧑🏿",2466),("🔌",3270),("👨🏽‍❤️‍👨🏼",2516),("🧑🏼‍❤️‍🧑🏻",2459),("🫰🏼",269),("🕵️",1151),("🧑🏽‍🫯‍🧑🏻",2093),("☂",3088),("💆🏿‍♀",1512),("🤳🏽",446),("📥",3331),("🫴🏻",220),("👨🏾‍🦯",1637),("🖌",3343),("👨🏽‍⚕",854),("👬🏽",2322),("🤼🏾‍♂",2109),("😗",18),("🤪",26),("🇰🇭",3805),("🕡",3041),("🧔‍♀️",551),("🤾‍♂",2181),("🤵🏼‍♀️",1273),("⏰",3024),("🧖🏾‍♂️",1877),("🚴🏼‍♀️",2039),("🤽🏽‍♀",2172),("🧚🏼‍♀️",1429),("🫳🏻",214),("👯🏾‍♂️",1819),("☄️",3095),("✡️",3500),("🚵🏼‍♂",2051),("🇫🇮",3757),("👷🏻",1194),("🪇",3259),("👨‍💼",995),("🚶🏿‍♀‍➡",1560),("🩺",3414),("🦹🏿‍♀",1396),("👩🏿‍✈️",1096),("👨🏼‍🌾",925),("🧖‍♂",1873),("🤽🏻‍♀️",2170),("🛂",3459),("🏊‍♀️",1983),("🔖",3313),("👩🏼‍❤‍👨🏾",2487),("🪥",3437),("🕳",164),("🤷🏼‍♂️",835),("🙅🏻‍♂️",708),("😴",56),("🤽‍♀️",2169),("🧑🏾‍❤‍💋‍🧑🏽",2365),("☝🏼",323),("⛎",3522),("🟡",3642),("🛋️",3421),("🤗",29),("👮🏻‍♀️",1146),("👨🏾‍🏭",981),("👘",3197),("🍁",2742),("👮🏻‍♂️",1140),("👨🏻‍🍳",942),("😎",73),("❤",144),("🪩",3167),("🤽🏻‍♂",2164),("👩🏼‍🚀",1111),("🏅",3122),("🫱🏻‍🫲🏼",405),("👳🏾‍♀",1245),("🥫",2821),("4️⃣",3594),("🧑",521),("👰🏼‍♂️",1285),("🧉",2871),("👨🏿‍🐰‍👨🏾",1840),("🪻",2731),("👷🏼‍♀️",1207),("👂🏻",470),("👋🏼",173),("☑",3574),("🙈",128),("🤷🏻‍♂️",834),("💆🏻‍♀️",1508),("👩🏿‍🤝‍👨🏽",2317),("🖖🏿",200),("👩🏻‍❤‍👩🏿",2536),("㊗",3636),("💅🏼",439),("🙆🏾‍♂️",729),("🤮",62),("💣️",3382),("🎇",3102),("🧑🏽‍⚕",848),("🧑🏿‍🫯‍🧑🏾",2104),("3⃣",3593),("🧑🏿‍🦰",598),("🙅‍♀️",713),("🤦🏼‍♂",817),("♣",3172),("🧑‍🌾",917),("🧛🏿‍♀️",1450),("🕴🏽",1786),("🧚‍♀️",1427),("8️",3598),("🏖️",2893),("👨🏾‍⚕️",855),("🇮🇪",3790),("👲🏿",1252),("🗡️",3380),("🏮",3296),("🍨",2841),("🛷",3151),("🕵🏻‍♀️",1164),("🧑🏿‍🍳",940),("🎴",3176),("📬️",3335),("🎛",3245),("🦹🏻‍♀️",1392),("🍭",2850),("🙍🏽‍♀️",680),("🤹🏾‍♂️",2203),("💖",134),("🙂‍↕️",51),("✋🏼",191),("📔",3298),("🗳️",3338),("🖖🏾",199),("🧖🏽",1870),("💷",3321),("👩",581),("🇹🇭",3907),("😁",3),("⛹🏾‍♂️",1999),("👰🏼‍♀️",1291),("🧑🏿‍✈️",1084),("🧑🏿‍🐰‍🧑🏻",1811),("🐟",2691),("💇🏿‍♂️",1524),("🫒",2767),("💇🏼‍♂️",1521),("👉",297),("🍶",2858),("🏞",2896),("👻",115),("👁️",493),("🔒",3369),("🧜🏼‍♂",1459),("🧚🏼‍♂️",1423),("👩🏿‍🚒",1132),("🇧🇳",3710),("㊗️",3636),("👨🏻‍❤️‍👨🏽",2508),("💆‍♀️",1507),("🚣🏻‍♂",1960),("👩🏽‍❤‍💋‍👨🏻",2385),("🧑🏿‍💼",994),("🤸🏿‍♀",2078),("🏃🏽‍♂️‍➡",1762),("🛀🏽",2232),("🤦🏽",812),("👨‍💻",1031),("🧑‍🏫",881),("🥷🏽",1190),("🫶🏾",385),("🏊‍♀",1983),("⏺",3539),("🧑🏻‍❤‍💋‍🧑🏽",2352),("🆗",3618),("💂🏾‍♀️",1185),("🧑🏻‍🤝‍🧑🏾",2249),("🇦🇩",3683),("🏊🏻‍♀️",1984),("🗻",2891),("👨🏻‍⚕️",852),("🚑",2963),("✈️",3006),("💁🏾‍♀️",753),("🧑‍🚒",1115),("👨🏿",538),("🧘🏻",2212),("🍳",2812),("♓️",3521),("👩🏽‍🤝‍👩🏿",2284),("🙆🏾‍♀️",735),("🎅🏽",1346),("🎧",3247),("🧵",3180),("👩🏿‍🐰‍👩🏼",1864),("🧑🏽‍⚖️",902),("👩🏾‍❤️‍👨🏼",2494),("🚶‍♂️",1537),("🕵🏻‍♂",1158),("🦶",463),("🧝🏾‍♀",1485),("🚶🏿‍♂‍➡",1566),("🏨",2913),("🤹‍♂",2199),("🧛",1433),("↘",3479),("💂🏿",1174),("👩🏻‍❤‍👩🏼",2533),("👩🏿‍⚕️",862),("👷‍♀️",1205),("👼🏿",1342),("🧗‍♀",1897),("🧑‍🦼‍➡",1663),("🤘🏻",280),("🧪",3403),("🦸🏽‍♂",1370),("🔱",3569),("🫏",2610),("👨🏼‍🦱",565),("🙇🏿‍♂️",802),("👩🏾‍❤‍👩🏾",2547),("🕵️‍♀",1163),("🧎🏼‍♀",1599),("5⃣",3595),("👩🏾‍❤️‍💋‍👨🏻",2389),("🤸‍♂",2067),("🏃🏿‍♂‍➡️",1764),("🪫",3269),("🧘🏼",2213),("🧎🏾‍♂️",1595),("🧝🏻‍♀️",1482),("💧",3097),("👨🏾‍🫯‍👨🏽",2125),("👩🏾‍🚀",1113),("👨🏻‍❤️‍💋‍👨🏿",2406),("👩‍💻",1037),("🧍🏽‍♂",1576),("👯🏾",1793),("🧚🏽",1418),("📺",3286),("😶‍🌫️",42),("🏋️‍♀️",2019),("🧎‍♀️‍➡️",1609),("👩🏿‍🫯‍👩🏻",2153),("🏃🏿‍♀‍➡",1758),("🇦🇼",3696),("🤜🏼",365),("🤌🏿",248),("🥭",2757),("🇵🇪",3862),("🧑🏾‍🦼‍➡",1667),("🫅🏾",1215),("🦒",2630),("🚣🏾‍♀️",1969),("👨🏻‍⚕",852),("👵🏽",662),("🇹🇼",3917),("🟤",3646),("👷🏽‍♀️",1208),("5️⃣",3595),("💐",2720),("👯🏻‍♀",1842),("👇🏽",318),("🧑🏽‍❤️‍💋‍🧑🏿",2362),("👩🏾‍❤️‍👩🏾",2531),("🪮",3219),("👩🏽‍🦯‍➡",1654),("✝️",3503),("🏃🏻‍➡️",1748),("🇨🇶",3733),("🧑🏼‍🫯‍🧑🏾",2091),("👩🏻‍🦯‍➡️",1652),("👩‍🏭",983),("👩‍🦯‍➡️",1651),("👩🏿‍⚕",862),("🧍🏻‍♂",1574),("🕵🏼‍♀",1165),("🇬🇳",3773),("📥️",3331),("💆🏼",1497),("👩🏻‍❤‍💋‍👨🏿",2380),("🏋‍♂️",2013),("♋️",3513),("🤵",1259),("🤹🏿‍♀",2210),("👆🏽",306),("🧑🏾‍🎤",1047),("1️",3591),("🧑🏾‍🔬",1011),("✨",3104),("🧜🏻",1452),("🚶🏼‍♀️‍➡️",1557),("🙅🏾‍♀️",717),("🚨",2992),("👩🏾‍🏫",897),("👩🏼‍❤‍👩🏿",2540),("🦷",490),("🌳",2735),("🫱🏿",206),("🐜",2707),("🧜🏻‍♀",1464),("🧑🏾‍🏫",885),("👨‍🦼‍➡",1675),("🦬",2615),("🆖",3616),("👨🏽‍🫯‍👨🏼",2120),("💂🏿‍♂️",1180),("🏊🏻‍♂",1978),("⛑️",3226),("📪️",3334),("🏄🏻‍♂️",1942),("🚴🏻",2026),("🤵🏽‍♀️",1274),("👨‍👨‍👧‍👧",2562),("🦥",2649),("👮🏿",1138),("🖇️",3362),("🅿️",3619),("👩🏾‍❤‍👨🏾",2495),("🙇🏻‍♀",804),("🔴",3640),("🦜",2672),("🧘🏿‍♂️",2222),("👩🏼‍🤝‍👩🏽",2278),("🤹🏾‍♀",2209),("🇸🇬",3886),("➗",3554),("🎸",3253),("👩🏾‍🤝‍👩🏼",2286),("👩🏼‍❤️‍💋‍👩🏾",2435),("🧑🏻‍🎤",1044),("💅",437),("🏃🏾‍➡",1751),("🧑‍🔧",953),("👩🏼‍🦳",613),("🤾🏿‍♂️",2186),("🍱",2822),("👨🏿‍🫯‍👨🏾",2130),("🤷🏼‍♂",835),("🏃🏽‍♀‍➡",1756),("👨🏿‍✈️",1090),("👨🏼‍✈",1087),("⛰️",2888),("➡",3478),("😪",54),("👨🏾‍❤️‍👨🏻",2519),("👩‍🎓",875),("📜",3308),("🫃🏾",1305),("🤭",30),("👸🏿",1228),("👩🏿‍❤️‍💋‍👩🏻",2445),("📢",3235),("😓",99),("↙️",3481),("🙆‍♂️",725),("👨🏿‍❤‍👨🏾",2526),("🏃🏼‍♀‍➡",1755),("☸️",3501),("👨🏿‍❤‍💋‍👨🏽",2421),("💆🏾‍♂",1505),("🛀",2229),("🚻",3456),("🇧🇬",3704),("👊",351),("🦢",2666),("🎊",3107),("🏃🏿",1734),("🐼",2648),("🇲🇫",3829),("🇵🇫",3863),("👩🏾‍🦽‍➡",1727),("🖱️",3275),("🐿",2641),("🇨🇻",3736),("👨‍🦯‍➡️",1639),("🇰🇿",3813),("🧑🏽‍❤‍💋‍🧑🏼",2360),("🏖",2893),("🤝",399),("🔸",3666),("🦿",456),("🧑🏾‍🦼",1661),("👰🏾‍♀️",1293),("☁",3073),("🇧🇷",3713),("🆙",3621),("🧑🏼‍⚕",847),("💇🏻‍♂",1520),("🛄",3461),("👨🏼‍⚖",907),("🧑🏼‍🎓",865),("🙍🏼‍♂",673),("👨🏼‍🎨",1069),("🤼‍♂",2105),("💡",3294),("🪲",2709),("🛀🏼",2231),("👩🏾‍🐰‍👩🏽",1861),("🙆🏽‍♀️",734),("😂",7),("👨‍❤‍👨",2501),("💨",163),("🗯",168),("🇰🇼",3811),("🎙",3243),("🦽",2979),("👨‍🦯‍➡",1639),("🛌🏽",2238),("🫱🏽‍🫲🏿",416),("🧏🏼‍♀️",787),("◾",3660),("🙋🏼‍♂",763),("👧",515),("🔢",3603),("🇳🇮",3853),("🧑🏾‍🍳",939),("🧚‍♀",1427),("👨🏼‍🦲",577),("🍽",2874),("👨🏽‍❤️‍💋‍👨🏼",2412),("♟",3173),("👨🏿‍❤‍💋‍👨🏿",2422),("🧑🏼‍❤️‍🧑🏾",2461),("🫨",49),("🧑🏻‍🩰",1766),("⬜",3657),("🦭",2690),("🚴🏿‍♀️",2042),("🦸🏻",1362),("🧏🏿",778),("👨🏻‍❤️‍👨🏻",2502),("🈯️",3627),("🖕🏼",311),("👩🏻‍🤝‍👨🏿",2302),("👨🏾",537),("🧙",1397),("🧑🏼‍❤‍💋‍🧑🏽",2356),("🤼🏻‍♂️",2106),("👳🏼‍♀",1243),("👨🏻‍❤️‍💋‍👨🏻",2398),("🌽",2773),("👲🏻",1248),("9⃣",3599),("🇬🇶",3775),("👨‍✈️",1085),("🐿️",2641),("🧛🏻‍♀️",1446),("🪼",2698),("🇾🇹",3937),("👩🏼‍❤️‍👨🏻",2485),("🧎‍♀‍➡",1609),("🩶",154),("🫁",489),("🚃",2948),("🧑🏿‍❤‍🧑🏾",2474),("👩🏻‍❤️‍💋‍👨🏼",2377),("🦸🏿‍♂",1372),("🏃🏿‍♀",1746),("👯🏻‍♂️",1816),("🧕🏻",1254),("🫷",225),("👨🏽‍🦰",560),("🏋‍♂",2013),("👱🏻",528),("💪🏻",450),("👨‍🎤",1049),("🤏🏻",250),("🧑🏼‍🩰",1767),("🧖🏾‍♀️",1883),("🕺🏼",1779),("🫃🏻",1302),("🥻",3198),("🇺🇳",3922),("🌉",2939),("🤵🏾‍♀",1275),("🙇🏿‍♀",808),("🧔🏾‍♀",555),("©️",3584),("🫰🏻",268),("🙇‍♀",803),("🚴‍♀️",2037),("👨🏿‍❤️‍💋‍👨🏻",2419),("🚶🏾‍➡️",1553),("🦹🏼‍♂️",1387),("👩🏻‍❤‍💋‍👩🏼",2429),("🦀",2699),("🚶🏽",1534),("💆🏿",1500),("🧑🏾‍❤️‍🧑🏻",2467),("🥷🏼",1189),("👩🏻‍🦼",1682),("🧖🏿‍♀",1884),("🧔🏻‍♀",552),("👩🏽‍🤝‍👩🏻",2281),("💆‍♀",1507),("🏸",3141),("✊",345),("👉🏻",298),("🤥",48),("🫙",2878),("👨🏻‍❤‍👨🏿",2510),("⛲",2930),("🚞",2957),("❌",3576),("🇩🇿",3747),("👩🏻‍❤‍👩🏽",2534),("👳🏽‍♀️",1244),("🏃🏾‍♀️‍➡️",1757),("🙍🏼‍♀️",679),("🎅",1343),("🏂️",1911),("🤷🏾‍♀",843),("🚾",3458),("🤦🏽‍♀️",824),("⛹🏿‍♂",2000),("🫱🏾‍🫲🏿",420),("👩🏾‍❤️‍💋‍👩🏾",2427),("💍",3229),("👩🏻‍❤️‍💋‍👨🏻",2372),("🇨🇳",3730),("🚭️",3468),("🤼‍♂️",2105),("🧑🏻‍❤‍💋‍🧑🏾",2353),("👩🏽‍❤‍👩🏾",2543),("😫",101),("👩🏽‍🤝‍👨🏼",2308),("🧑🏾‍⚕",849),("😣",97),("☝️",321),("💬",165),("🧎‍♀",1597),("🏃🏿‍♂️",1740),("🗜",3391),("👩🏻‍❤️‍👨🏻",2476),("🏃🏿‍♂️‍➡",1764),("⚓️",2997),("🤼🏾‍♂️",2109),("🏋🏽‍♀️",2022),("👨🏻‍🐰‍👨🏼",1821),("〰",3563),("🧎🏼‍♂️‍➡",1617),("🔈",3232),("🏌🏽",1920),("🧙🏾‍♀",1413),("🙎🏿‍♂",694),("🧛🏼",1435),("👨🏽‍🦼‍➡️",1678),("👩🏿‍❤️‍💋‍👩🏼",2446),("👩🏿‍🦱",604),("🤽🏿‍♀️",2174),("🏋🏿‍♀",2024),("☝🏿",326),("👏🏿",374),("⬛️",3656),("👏🏼",371),("🫛",2785),("👩🏿‍🤝‍👨🏾",2318),("💆🏼‍♀",1509),("🧍🏿‍♂️",1578),("🤽🏻‍♀",2170),("🧑🏾‍🔧",957),("👩🏼‍❤️‍👩🏼",2529),("👃🏻",482),("🚣🏿‍♀",1970),("🇫🇷",3762),("🧑🏼‍🐰‍🧑🏿",1802),("👬🏾",2323),("🛍",3208),("⌨",3274),("🧏‍♀️",785),("🧑🏻‍💻",1026),("👨🏽‍🐰‍👨🏻",1829),("🍒",2762),("🧑‍🧑‍🧒‍🧒",2584),("👨🏿‍🦲",580),("🇹🇴",3913),("✋🏾",193),("🫸🏽",234),("👰🏽‍♂️",1286),("👨🏼‍🦳",571),("🚣🏾",1957),("🐒",2590),("🧎🏼‍♂️‍➡️",1617),("🛴",2983),("🤳🏼",445),("👳🏾‍♂",1239),("👩🏽‍❤️‍👩🏻",2541),("🤐",36),("🤵‍♂",1265),("🤼🏿‍♀️",2136),("🙇🏾‍♀️",807),("🙍🏻‍♀",678),("🤚🏼",179),("☦️",3504),("🚘️",2970),("🫳",213),("👩🏽‍❤‍👨🏼",2490),("✒️",3340),("🛌🏿",2240),("🏳‍⚧️",3680),("🧑🏽‍⚕️",848),("🧎🏽‍➡",1606),("🙍🏻‍♂",672),("👨🏻‍🦼‍➡️",1676),("🎐",3112),("🧑🏾‍🦳",621),("🧑🏼‍🔬",1009),("👨🏻‍❤‍💋‍👨🏽",2404),("🙅🏽‍♀",716),("🍎",2758),("👩🏽‍🐰‍👩🏾",1857),("💆🏿‍♂",1506),("🕢",3043),("🏑",3137),("🤦🏿‍♂",820),("🛥",3004),("💂",1169),("❤‍🔥",142),("🚇",2952),("🤵🏽‍♀",1274),("🤸🏾‍♀️",2077),("🛫",3008),("👨‍👩‍👦",2553),("🫄🏽",1310),("🇨🇷",3734),("🐕",2594),("🏃‍♀️‍➡️",1753),("🧚🏽‍♀️",1430),("🧎🏾‍♂️‍➡️",1619),("🙆🏽",722),("🤞",261),("🧜🏾‍♂",1461),("👩🏽‍🍳",950),("🧎🏽‍♂",1594),("🤽🏽‍♂",2166),("🇪🇪",3750),("🪄",3159),("👨‍❤️‍💋‍👨",2397),("👷🏻‍♂️",1200),("🧝🏻",1470),("📐",3364),("🔭",3407),("👩🏾‍❤‍👩🏽",2547),("👰🏾‍♀",1293),("♈",3510),("🧎🏽‍♂️‍➡️",1618),("👩🏻‍🤝‍👨🏼",2299),("🧟‍♀️",1492),("🧋",2869),("⛹🏽‍♂️",1998),("🚶🏽‍♀️",1546),("Ⓜ",3614),("🥬",2777),("⛹🏾‍♂",1999),("🤖",118),("👨🏻‍🦯‍➡️",1640),("🦸🏿",1366),("🤵🏽‍♂",1268),("👨🏾‍❤‍👨🏽",2521),("🙋‍♀️",767),("☮",3506),("⏳️",3022),("🐡",2693),("♐",3518),("👍🏾",337),("🏙",2934),("💂🏻",1170),("💇🏽‍♂️",1522),("🤩",16),("🙅",701),("🦻🏻",476),("🇭🇷",3785),("👩🏻‍❤️‍💋‍👨🏾",2379),("🦁",2604),("🧎🏽",1588),("🦹‍♂️",1385),("↘️",3479),("🏋‍♀",2019),("⚰",3442),("👨‍🦼‍➡️",1675),("🧑‍✈",1079),("👩🏾‍🦲",627),("🎆",3101),("♣️",3172),("👳🏿",1234),("📈",3355),("👨‍🦳",569),("✊🏽",348),("🧑🏼‍🦰",595),("🧛🏿‍♀",1450),("👩🏼‍🤝‍👩🏾",2279),("👩‍⚖",911),("⛱",3090),("🙍‍♂",671),("👩🏼‍🦱",601),("💃🏿",1776),("❇",3583),("🧑🏼‍🦼",1659),("🪯",3509),("👩🏻‍❤️‍👩🏿",2536),("🦹🏾‍♀",1395),("🥺",86),("👨🏿‍🤝‍👨🏻",2341),("🟠",3641),("👩🏼‍❤‍👩🏻",2537),("🧑🏻‍🏭",972),("🚚",2973),("👩🏼‍🔧",967),("🚴🏼‍♂️",2033),("👩🏾‍❤️‍💋‍👩🏻",2441),("🕉",3499),("🤏🏽",252),("🙋🏻",756),("🧎🏼‍♂",1593),("⛵",2999),("↙",3481),("🏊🏾‍♀️",1987),("🧎🏼",1587),("🧔🏿",544),("🟨",3651),("🧎🏽‍♀️‍➡",1612),("🤼",2079),("🚶‍♂‍➡️",1561),("👮🏽",1136),("🧟",1490),("🛼",2985),("⚫",3647),("🎑",3113),("🈯",3627),("👩🏿‍❤‍👩🏿",2552),("🥹",87),("✉️",3326),("🫸",231),("👩🏿‍🦽‍➡️",1728),("🈴",3634),("🧚🏾",1419),("🏋🏻‍♀",2020),("🇰🇮",3806),("👬🏿",2324),("🏃🏽‍♂‍➡",1762),("🤎",152),("👩‍🦽‍➡️",1723),("🚶🏿‍♂️‍➡",1566),("👨🏻‍🦯‍➡",1640),("🧑🏾‍🍼",1335),("🇦🇺",3695),("🧑🏿‍⚕️",850),("☦",3504),("🦶🏾",467),("🌌",3072),("🧚🏿‍♀️",1432),("🧎🏻‍♀️‍➡️",1610),("👩🏽‍🫯‍👩🏼",2146),("👨🏽‍✈",1088),("👧🏼",517),("🪚",3386),("👨🏿‍🦱",568),("🧑🏿‍🫯‍🧑🏼",2102),("🖥",3272),("👩🏼‍🦽‍➡",1725),("🎳",3135),("🦸🏻‍♂️",1368),("🧟‍♀",1492),("🏌‍♀",1929),("🔮",3158),("👨🏽‍🏫",890),("👨🏾‍❤‍💋‍👨🏾",2417),("🙋",755),("🧑🏽‍❤‍🧑🏻",2463),("🔑",3373),("🗞️",3311),("®️",3585),("🏬",2917),("🧚",1415),("👮🏽‍♀",1148),("🧏🏽‍♀",788),("🚹️",3454),("🧝🏼‍♂️",1477),("🧙🏼‍♂️",1405),("😅",5),("🧑🏾‍💼",993),("🏄‍♂️",1941),("👩🏾‍🦳",615),("🚵🏻‍♂️",2050),("☮️",3506),("☝🏾",325),("🧑🏼‍🤝‍🧑🏻",2251),("👨🏻‍❤️‍👨🏼",2507),("🧝🏻‍♂️",1476),("👽",116),("👎🏿",344),("🤵🏿‍♀️",1276),("🧙🏼‍♂",1405),("👃",481),("🧑🏻‍🐰‍🧑🏼",1795),("👩🏿‍❤️‍👨🏾",2500),("👨🏻‍❤️‍💋‍👨🏾",2405),("🖐️",183),("🫴🏾",223),("⚠️",3463),("🚂",2947),("👯🏾‍♂",1819),("🫳🏼",215),("🚣🏾‍♂",1963),("🧖",1867),("👩🏽‍❤‍💋‍👩🏻",2437),("🧝‍♂",1475),("🍇",2749),("🚴🏼‍♀",2039),("💁🏼‍♂️",745),("⚽️",3126),("📿",3227),("💇🏾‍♂",1523),("🧑🏼‍🌾",919),("📂",3348),("⛰",2888),("🧎🏻‍♀‍➡",1610),("👩🏼‍🦽‍➡️",1725),("🚶🏼‍♂‍➡️",1563),("👩🏿‍🐰‍👩🏽",1865),("🧑🏽‍🦯",1624),("👩🏾‍✈️",1095),("🧙🏿‍♂️",1408),("👳🏾‍♂️",1239),("🤲🏿",398),("🉑",3632),("🚵🏽‍♂️",2052),("🏃🏻‍♀‍➡️",1754),("👩🏼‍❤️‍👨🏿",2488),("🧎🏻‍♂‍➡",1616),("🏊🏿‍♀️",1988),("🧗🏾‍♂",1895),("👸",1223),("🧻",3433),("👩🏼‍❤️‍💋‍👩🏿",2436),("🐽",2623),("👨‍⚖️",905),("👩🏻‍❤‍👨🏾",2483),("🍥",2833),("🤼🏻‍♀️",2132),("🧎🏿‍➡️",1608),("👩🏼‍🦼",1683),("👯🏽‍♀",1844),("🥣",2816),("🕘️",3046),("🛹",2984),("✊🏻",346),("🕔️",3038),("♏️",3517),("👩🏿‍❤️‍👨🏼",2498),("👰‍♂",1283),("📵",3472),("🖨️",3273),("👳🏾",1233),("😷",58),("👎🏽",342),("🧛‍♀",1445),("👷‍♀",1205),("🏃🏽‍♂‍➡️",1762),("👩🏼‍❤‍💋‍👨🏼",2381),("🧑🏼‍🫯‍🧑🏻",2089),("🫱🏾",205),("🏊🏿‍♂",1982),("🗯️",168),("🛰",3016),("🙇🏽‍♂️",800),("🧔🏾‍♀️",555),("🧰",3398),("🤽🏻",2158),("👨🏼‍🫯‍👨🏾",2117),("⛲️",2930),("🧘🏿",2216),("🧑🏽",524),("🧑‍🚀",1097),("🧎🏻",1586),("🐍",2681),("👋🏿",176),("🥏",3134),("🧝🏿‍♂️",1480),("👩🏾‍🤝‍👨🏽",2313),("🤞🏽",264),("🤧",63),("👰🏽‍♂",1286),("🇸🇧",3882),("👩🏼‍❤‍💋‍👨🏾",2383),("↖️",3483),("🤵🏽‍♂️",1268),("👩🏾‍⚖️",915),("🚶🏼‍➡",1551),("👨🏿‍💻",1036),("🇧🇩",3701),("👨🏾‍🦯‍➡️",1643),("🦹‍♂",1385),("🤦🏿‍♀️",826),("👨🏼‍🫯‍👨🏻",2115),("👈️",291),("🤦🏾",813),("👩‍👧‍👦",2576),("🐸",2677),("🧑🏻‍❤‍🧑🏾",2457),("🔹",3667),("👱🏼",529),("👨🏼‍❤️‍👨🏽",2512),("👩🏼‍🤝‍👨🏿",2306),("🧝🏽‍♀️",1484),("🌧",3079),("🧑‍💻",1025),("👍️",333),("🇱🇺",3822),("👨🏾‍🤝‍👨🏽",2339),("👶🏿",502),("⛹🏽‍♂",1998),("👨‍🍳",941),("🤵‍♀️",1271),("👨🏾‍🤝‍👨🏿",2340),("🟩",3652),("💂🏼‍♂️",1177),("🏍️",2977),("🙍🏻‍♂️",672),("👨🏼",535),("👩🏽‍🤝‍👨🏾",2309),("🐕️",2594),("🪉",3261),("🙋🏿‍♂️",766),("🏄🏽‍♂",1944),("🏔️",2887),("🧜🏼‍♀",1465),("🇳🇫",3851),("💂🏼‍♀",1183),("🙍🏾‍♂",675),("🧏🏻‍♀",786),("⛏",3377),("🍓",2763),("💆🏻‍♀",1508),("🇪🇷",3753),("👷🏽‍♂",1202),("🍉",2751),("🧑🏻‍🐰‍🧑🏿",1798),("👩🏿‍🤝‍👨🏼",2316),("✳",3581),("😍",15),("🕵‍♀",1163),("🤌🏼",245),("🧘🏽‍♀️",2226),("🤦‍♂",815),("👨🏿‍❤‍💋‍👨🏾",2422),("🇲🇵",3837),("⏳",3022),("🤏",249),("🏷",3314),("🛡",3385),("😶",40),("🪽",2673),("🏌🏾‍♀️",1933),("🦸🏼‍♀️",1375),("🤒",59),("👨🏼‍🤝‍👨🏿",2332),("🏗",2899),("🏃🏼",1731),("🇬🇱",3771),("🐨",2647),("◾️",3660),("👨🏾‍🍼",1329),("🧏🏼‍♂️",781),("🍖",2797),("👩🏽‍🦽‍➡️",1726),("👨🏽‍🎤",1052),("🪅",3166),("🙋🏽‍♂️",764),("🙎🏾‍♀",699),("🙅🏾‍♂️",711),("🇧🇮",3706),("🌏️",2882),("⛱️",3090),("👰🏾",1281),("🤦🏾‍♀️",825),("👫🏻",2294),("🧎🏼‍♂️",1593),("👩🏿‍🫯‍👩🏽",2155),("🤾‍♀️",2187),("🧗🏼‍♀",1899),("🧜🏽",1454),("👩🏽",584),("📽",3284),("🧑‍🦯‍➡️",1627),("👨🏻‍🫯‍👨🏾",2113),("👩🏿‍🦯‍➡",1656),("🧑🏾‍❤️‍🧑🏿",2470),("⚗️",3402),("🧘🏼‍♂️",2219),("🤼🏼",2081),("⛸️",3146),("🦸🏻‍♂",1368),("🤱🏿",1318),("🧑🏽‍🍳",938),("♋",3513),("🧶",3182),("👇🏾",319),("👨‍⚖",905),("👮🏿‍♂️",1144),("👆",303),("🫱🏼‍🫲🏾",411),("👩🏽‍❤️‍💋‍👨🏻",2385),("🧘‍♀️",2223),("👂",469),("🤴🏻",1218),("🏄🏼‍♂️",1943),("🇲🇲",3834),("🇶🇦",3875),("🧑🏾‍❤‍🧑🏽",2469),("❣️",140),("⁉️",3558),("🕶",3185),("✌🏼",257),("🧑🏼‍🍳",937),("🧑‍🦽‍➡️",1699),("🕜",3031),("👦🏻",510),("🧑🏼‍❤‍🧑🏽",2460),("👦🏾",513),("🕵🏽‍♂",1160),("🧑🏾‍🦽‍➡️",1703),("🏞️",2896),("🧑🏽‍💻",1028),("👩🏿‍❤‍👨🏿",2500),("🙍🏿‍♀️",682),("🥇",3123),("👨🏿‍🏭",982),("⚙️",3390),("🧝‍♀️",1481),("🧎🏾‍➡",1607),("🚵🏾‍♀",2059),("🚵",2043),("🧜🏽‍♂",1460),("👨🏽‍❤️‍👨🏿",2518),("👨🏿‍🎓",874),("🐳",2686),("🕺🏿",1782),("🖖🏽",198),("🏄🏻‍♀️",1948),("🫲🏻",208),("👨🏼‍🫯‍👨🏿",2118),("🧗🏽‍♀️",1900),("🧑‍🦽",1693),("🖖🏻",196),("👭",2267),("🧑🏼‍❤‍🧑🏾",2461),("🕵🏽‍♀️",1166),("✴",3582),("🕝",3033),("🤽🏾‍♀",2173),("⛽",2990),("🌈",3086),("💁🏽‍♀",752),("🧘🏿‍♂",2222),("👩🏻‍🏫",894),("🫅🏽",1214),("🍠",2829),("🧔🏿‍♀️",556),("🚣‍♂️",1959),("🪁",3155),("🏋🏾‍♀",2023),("🙇🏼‍♀️",805),("🤵🏾‍♂",1269),("🧑🏻‍🦰",594),("🦻🏽",478),("👳🏿‍♂",1240),("🦆",2665),("🎟️",3118),("🧎🏻‍♂‍➡️",1616),("♻️",3567),("🫄",1307),("👆️",303),("📹",3289),("👨‍🦽‍➡️",1711),("↔",3485),("🚍",2960),("🏉",3132),("👩🏾‍🍳",951),("🏴",3677),("🔃",3490),("🤹🏾‍♂",2203),("🤜🏾",367),("🧑🏼‍❤‍💋‍🧑🏿",2358),("👨🏽‍❤‍💋‍👨🏼",2412),("🕚️",3050),("🏙️",2934),("🤱🏽",1316),("🫸🏿",236),("🧝🏻‍♀",1482),("🔛",3494),("⚛",3498),("🇫🇯",3758),("🧙🏼",1399),("💑🏾",2453),("🙎🏾‍♀️",699),("👨🏾‍🌾",927),("0️⃣",3590),("🤸🏿",2066),("🧑🏾‍⚖",903),("🤴🏼",1219),("🫯",159),("🦹🏼‍♀",1393),("🧔🏼‍♂️",547),("👩‍👧‍👧",2577),("👨🏼‍❤️‍👨🏿",2514),("🚶🏽‍♀‍➡",1558),("🙇🏼",793),("🤶🏿",1354),("🌹",2725),("♂",3549),("🤛",357),("⌨️",3274),("🧑🏽‍🚒",1118),("🇰🇳",3808),("🍮",2851),("🌦️",3078),("👷🏿‍♂",1204),("💆‍♂️",1501),("🚡",3015),("🚵🏿‍♀️",2060),("😺",119),("🦹🏾",1383),("🤷🏿‍♂️",838),("👏",369),("👰🏽‍♀",1292),("🇨🇽",3738),("🧎‍➡",1603),("👨🏻‍🔧",960),("⚔️",3381),("💇🏿‍♀️",1530),("🧖🏿‍♀️",1884),("👂️",469),("👩🏿‍🤝‍👩🏼",2290),("🧖🏻",1868),("🧈",2819),("🕓️",3036),("📟",3266),("🦃",2655),("👨🏿‍🌾",928),("💑🏼",2451),("❎️",3577),("🧑🏻‍🚒",1116),("🧑🏼‍🐰‍🧑🏻",1799),("🕵🏻",1152),("🏂🏽",1914),("🩰",3217),("🧑🏾‍🚒",1119),("👩🏻‍🦽‍➡",1724),("🫵",327),("🧑🏿‍🐰‍🧑🏼",1812),("🔰",3571),("🇵🇦",3861),("👨🏻‍🌾",924),("🌬️",3084),("🤾🏿‍♂",2186),("🧙🏿‍♀️",1414),("🪣",3434),("👩🏽‍🎤",1058),("🤦🏻‍♂",816),("🏋️‍♂",2013),("🇷🇺",3879),("🧑🏼‍🤝‍🧑🏼",2243),("👩🏻‍❤️‍👨🏿",2484),("👩🏽‍❤‍👩🏻",2541),("🐋",2687),("🏃‍♀",1741),("🧔🏾‍♂️",549),("2️⃣",3592),("👨🏼‍❤️‍💋‍👨🏿",2410),("🇳🇱",3854),("🩵",150),("🧍🏼‍♀",1581),("🚪",3416),("4️",3594),("🏃🏼‍♀️",1743),("👲🏽",1250),("👨🏼‍❤‍💋‍👨🏿",2410),("🏵️",2724),("👨🏻‍🦯",1634),("🚴🏽‍♂️",2034),("🧚🏾‍♀",1431),("😃",1),("🧚🏻‍♀️",1428),("🤽🏽‍♂️",2166),("♈️",3510),("🚴🏼‍♂",2033),("🗼",2922),("👴🏼",655),("🧑🏽‍🫯‍🧑🏾",2095),("🍅",2766),("🥛",2854),("🏄🏼",1937),("🧑🏾‍🦯‍➡",1631),("👩🏾‍🦽‍➡️",1727),("👨🏿‍❤️‍👨🏼",2524),("🧖🏼‍♀️",1881),("🤽🏿‍♂️",2168),("👩‍❤‍💋‍👩",2423),("🆑",3609),("😶‍🌫",42),("💂‍♂",1175),("🫱🏼",203),("🏳️‍🌈",3679),("👨🏼‍❤️‍💋‍👨🏻",2407),("🧜🏿‍♂",1462),("🧺",3432),("⏰️",3024),("👩🏾‍🦯",1649),("🦻🏾",479),("📼",3290),("👩🏿‍🐰‍👩🏻",1863),("☂️",3088),("🚶🏼‍♂‍➡",1563),("🧑‍🎤",1043),("🐎",2611),("🪹",2745),("✍🏼",433),("💒",2921),("🧮",3281),("🚝",2956),("🎈",3105),("👨🏿‍🦯‍➡",1644),("🧍🏿",1572),("🦸‍♂",1367),("💰",3316),("💰️",3316),("👩🏽‍🦳",614),("🇴🇲",3860),("👨🏻‍⚖️",906),("🧙🏻",1398),("🤼🏼‍♂️",2107),("🤼🏽‍♂️",2108),("🇻🇬",3929),("💂🏽‍♂️",1178),("🪨",2901),("🚵🏻‍♂",2050),("🙆🏿‍♂",730),("🤽‍♂",2163),("🏇🏽",1907),("🐝",2708),("👋",171),("🇪🇬",3751),("👨🏽‍🎓",872),("🇨🇲",3729),("🏇🏻",1905),("👩🏾‍❤‍💋‍👩🏿",2444),("🦤",2668),("🎮️",3160),("👩🏻‍🔬",1020),("👫🏽",2296),("🛰️",3016),("👩🏽‍❤️‍👨🏾",2491),("🌆",2937),("💂🏼‍♂",1177),("🕋",2929),("👩🏾‍❤️‍👩🏻",2545),("📩",3329),("🗒️",3352),("🤙🏿",290),("🧍🏻‍♀️",1580),("👨🏼‍🎤",1051),("🦻🏿",480),("🧍🏿‍♀",1584),("👴🏿",658),("👃🏿",486),("🦹🏽‍♂️",1388),("🍣",2831),("🧑🏻‍❤‍🧑🏼",2455),("🧎🏻‍♀",1598),("👼🏻",1338),("🫱🏼‍🫲🏿",412),("🇹🇫",3905),("🧛🏼‍♀",1447),("👨🏾‍❤‍💋‍👨🏿",2418),("🏴󠁧󠁢󠁷󠁬󠁳󠁿",3943),("👩🏿‍❤‍💋‍👩🏼",2446),("🦸🏽‍♀️",1376),("🚶🏾‍♀️",1547),("🧑🏾‍🫯‍🧑🏿",2100),("🏯",2919),("👨🏽‍❤️‍💋‍👨🏾",2413),("🏃🏿‍➡",1752),("🚴🏿",2030),("❕️",3561),("🚶‍➡",1549),("👨🏻‍❤‍👨🏻",2502),("👰‍♀️",1289),("👨🏿‍❤️‍👨🏿",2506),("👯🏽‍♂️",1818),("👩🏿‍🦽‍➡",1728),("👊🏿",356),("🤞🏿",266),("👌🏾",241),("👩🏼‍❤️‍💋‍👨🏾",2383),("🗣️",2578),("👩🏽‍❤️‍💋‍👨🏼",2386),("👩🏿‍🌾",934),("🧑🏿‍💻",1030),("👨🏿‍🍼",1330),("🎒",3209),("👨‍🦲",575),("💂🏾‍♂",1179),("🙍🏿‍♂️",676),("👸🏾",1227),("🏘️",2904),("📚",3304),("🏃‍♂‍➡️",1759),("👌🏽",240),("👩🏼‍❤‍💋‍👩🏼",2433),("🧑🏿‍⚕",850),("🏊🏾‍♀",1987),("🧑‍🦽‍➡",1699),("🧘‍♂️",2217),("👷🏼",1195),("😧",89),("🧏🏽‍♂️",782),("🕤️",3047),("🏚️",2905),("🕓",3036),("🏦",2912),("🗝",3374),("⚖",3392),("🧑🏽‍🦽",1696),("🧸",3165),("🧑🏽‍🐰‍🧑🏾",1805),("👨🏼‍❤‍👨🏽",2512),("🥩",2799),("🙍‍♀",677),("🚴🏾‍♀️",2041),("⏏",3540),("🤰🏻",1296),("💁‍♂",743),("👨🏼‍❤‍👨🏾",2513),("♀",3548),("🎞",3283),("👨‍👧‍👧",2572),("🧚🏻‍♀",1428),("🧑🏿‍🚒",1120),("🧑🏻‍❤‍💋‍🧑🏿",2354),("🧓",647),("🏌🏿‍♂",1928),("🚣🏼",1955),("🤵🏻‍♀",1272),("🇪🇸",3754),("↩",3486),("🇧🇯",3707),("💅🏽",440),("👩🏼‍❤‍👩🏽",2538),("🧎🏻‍♂️‍➡",1616),("👳🏼‍♂️",1237),("🚴‍♀",2037),("🛠",3379),("⏲",3026),("🧗🏿‍♀",1902),("🤞🏻",262),("🧑🏽‍🔬",1010),("8️⃣",3598),("🙋‍♂️",761),("🕺🏻",1778),("👓",3184),("🇲🇳",3835),("🙍🏻",666),("👩‍👩‍👦",2563),("🚶🏾‍♂️",1541),("🫈",1494),("🇹🇿",3918),("💇🏾‍♀",1529),("👨🏿‍❤️‍💋‍👨🏼",2420),("👱🏽",530),("👩🏾‍❤️‍💋‍👨🏾",2375),("👨🏿‍🫯‍👨🏻",2127),("👩🏽‍❤️‍💋‍👨🏿",2388),("🧍🏽",1570),("👩🏼‍❤️‍💋‍👨🏿",2384),("🦇",2644),("🥸",72),("⏩",3527),("👨🏼‍🦯",1635),("🤶🏻",1350),("👲🏾",1251),("🧐",75),("⤴️",3488),("➗️",3554),("⌛️",3021),("🌑",3052),("⛳",3145),("🕵",1151),("🧜🏽‍♀",1466),("🈷",3625),("🍩",2842),("🤷🏿‍♂",838),("👨‍👩‍👧",2554),("⏯️",3529),("🇬🇵",3774),("⏺️",3539),("➰️",3578),("👨",533),("👩‍🏫",893),("🧔🏼‍♀️",553),("〽️",3580),("📘",3302),("👨🏽‍🦽‍➡️",1714),("🧑🏿‍🎄",1360),("🕦️",3051),("🧗🏽‍♀",1900),("🫰🏿",272),("👩🏻‍🐰‍👩🏽",1848),("🚘",2970),("🧖🏻‍♀",1880),("🇱🇦",3814),("🧕🏾",1257),("🧗🏼",1887),("🚿",3425),("🛣️",2987),("👩🏽‍🤝‍👩🏼",2282),("🕣",3045),("🇸🇾",3900),("💣",3382),("🧎🏾‍♂‍➡",1619),("☝",321),("🖋️",3341),("😬",46),("🟥",3649),("🔏",3371),("🏄",1935),("🧑‍✈️",1079),("🚵🏿",2048),("🧭",2886),("🤛🏼",359),("👩🏿‍⚖️",916),("🧙🏻‍♂️",1404),("🐈‍⬛",2603),("🐾",2654),("🎀",3115),("🙉",129),("👩🏼‍❤‍💋‍👩🏻",2433),("⛹🏻‍♂",1996),("🧑🏽‍🔧",956),("💆🏽‍♀",1510),("👩🏽‍🤝‍👨🏿",2310),("👌",237),("🧎🏾‍♀️‍➡️",1613),("📭️",3336),("🚣🏻‍♀️",1966),("🏌️‍♀",1929),("🧑🏼‍🤝‍🧑🏽",2252),("🔪",2877),("👶🏻",498),("👕",3190),("👩🏻‍🍳",948),("🇦🇮",3687),("🙅🏽",704),("🆘",3620),("🅰️",3606),("🥔",2771),("🏳‍🌈",3679),("🔈️",3232),("2⃣",3592),("👱🏻‍♂",642),("🧔🏽‍♀️",554),("🏄🏽‍♀",1950),("🧍🏻‍♀",1580),("✍️",431),("🔤",3605),("🌬",3084),("🎧️",3247),("🏃🏾‍♂‍➡️",1763),("🚶🏿‍♀",1548),("👨🏻‍🏭",978),("🖼",3178),("🧑🏽‍🦳",620),("👆🏼",305),("➡️",3478),("🧑🏼‍🦯‍➡️",1629),("🏃🏽‍♂",1738),("👯",1789),("👩🏾‍❤‍👩🏿",2548),("👩🏼‍🤝‍👩🏻",2277),("🧖🏻‍♂",1874),("🥷🏾",1191),("👩‍👩‍👧",2564),("➖️",3553),("🧓🏾",651),("👩🏻‍🤝‍👩🏼",2273),("🥞",2794),("🙃",9),("🈷️",3625),("👩🏻‍❤‍💋‍👨🏾",2379),("🧑🏽‍🦲",632),("🥽",3186),("🙎🏾‍♂",693),("😘",17),("🧗🏼‍♀️",1899),("🧑‍⚖️",899),("🧑🏿‍🤝‍🧑🏻",2263),("🖕🏻",310),("🏇",1904),("🤹🏾",2197),("🤷🏽‍♀",842),("👱🏼‍♂️",643),("👨‍🦯",1633),("🧑🏾‍❤‍💋‍🧑🏿",2366),("🕸",2714),("🧎🏽‍♂‍➡️",1618),("🛀🏿",2234),("👯🏽‍♀️",1844),("🏂🏾",1915),("👮🏼‍♂",1141),("🧑🏻‍❤️‍🧑🏽",2456),("🧎🏽‍♂‍➡",1618),("🧗🏻‍♀️",1898),("🖊",3342),("🧑🏼‍❤️‍💋‍🧑🏽",2356),("🙇🏿",796),("🇳🇦",3848),("👩🏼‍🫯‍👩🏽",2142),("🟣",3645),("👨‍✈",1085),("🧎🏼‍♀‍➡️",1611),("👰🏼‍♀",1291),("🙂‍↕",51),("🧖🏽‍♀",1882),("👩🏽‍🔧",968),("🍞",2788),("🫑",2775),("🏄🏽",1938),("🧍🏼",1569),("💆🏻‍♂",1502),("🦹🏿‍♂️",1390),("🦹🏾‍♂",1389),("🦹🏼",1381),("🫶🏽",384),("🪦",3443),("☠",110),("🧑🏻‍🫯‍🧑🏽",2086),("📌",3359),("👱🏿‍♀",640),("👨‍🦰",557),("🫅🏻",1212),("🙎🏼",685),("🤼🏽‍♂",2108),("🧖🏼‍♂",1875),("👩‍👧",2575),("🧑🏾‍🦽‍➡",1703),("👨‍🚒",1121),("⏱",3025),("💂🏼",1171),("💁🏻‍♀️",750),("🧔🏼‍♀",553),("⚗",3402),("🇳🇵",3856),("👩‍⚖️",911),("👮🏼",1135),("🙌🏿",380),("👩🏼‍🤝‍👨🏽",2304),("#⃣",3588),("🙅🏻‍♂",708),("🙅‍♂️",707),("🌜️",3063),("👨🏾‍🦽‍➡️",1715),("🙅🏾",705),("🤾🏻‍♀️",2188),("🆔",3613),("👽️",116),("🏄🏻",1936),("🗞",3311),("🏌‍♀️",1929),("👨🏾‍🚀",1107),("🔳",3672),("👨🏼‍🐰‍👨🏾",1827),("🧖🏼‍♂️",1875),("🙅🏼‍♂️",709),("💁🏼",739),("🥓",2800),("🈶",3626),("🕌",2925),("🙆🏼‍♂️",727),("➕",3552),("💆🏼‍♀️",1509),("🇽🇰",3935),("👨🏾‍🏫",891),("👷🏽‍♀",1208),("🧙🏻‍♂",1404),("👩🏻‍🦱",600),("🎻",3255),("🧘🏼‍♀",2225),("🙇🏾‍♂",801),("☀",3065),("👨🏾‍💻",1035),("🦸🏼‍♀",1375),("🙋🏾‍♀",771),("🇲🇼",3844),("🦋",2705),("🏠️",2906),("👮🏻‍♂",1140),("🧑🏽‍🐰‍🧑🏿",1806),("🌒",3053),("👩🏿‍❤️‍👨🏻",2497),("🙋🏻‍♀️",768),("👨🏾‍🤝‍👨🏻",2337),("🙏",425),("🫰",267),("🫷🏼",227),("〽",3580),("🇫🇰",3759),("🧎🏻‍♀️‍➡",1610),("🍫",2848),("🇹🇳",3912),("🕖",3042),("👩🏾‍⚖",915),("🙋🏾‍♂️",765),("👩🏽‍❤️‍👨🏼",2490),("🦾",455),("🏃🏽‍➡️",1750),("👩🏿‍❤‍👩🏼",2550),("🌿",2739),("💏🏼",2347),("🚶🏾‍♀‍➡",1559),("👳🏻‍♂️",1236),("🖐🏼",185),("🥮",2834),("👩🏼‍🎓",877),("🏌🏼‍♂",1925),("🧑🏽‍🎓",866),("🧑🏽‍❤‍💋‍🧑🏻",2359),("🫱🏽‍🫲🏻",413),("👩🏻‍❤‍💋‍👩🏿",2432),("🧑🏾‍🦼‍➡️",1667),("🩹",3412),("🦗",2711),("🥟",2836),("🫲🏽",210),("🦸🏻‍♀️",1374),("👩🏿‍🍼",1324),("🤟🏾",277),("🇨🇭",3725),("🧖🏿‍♂️",1878),("❗️",3562),("🙍🏼‍♀",679),("📁",3347),("✊️",345),("🧑🏿‍🤝‍🧑🏾",2266),("👩🏾‍🚒",1131),("🧚🏽‍♂️",1424),("🏰",2920),("⏬️",3536),("🏊🏻",1972),("🤼🏿‍♂️",2110),("🏃🏿‍♂️‍➡️",1764),("🦝",2600),("👨🏿‍✈",1090),("😄",2),("👮🏼‍♀️",1147),("🈵",3639),("👵🏿",664),("🤹‍♀️",2205),("👫🏼",2295),("👨🏻‍🦲",576),("🧝🏾‍♂",1479),("👍🏿",338),("👨🏿‍🍳",946),("🦺",3188),("👮‍♂️",1139),("🎍",3109),("🇲🇬",3830),("⭐️",3069),("🏇🏼",1906),("👩🏼‍❤‍👩🏼",2537),("🤾🏽",2178),("🏃‍➡",1747),("🏟️",2897),("👩🏼‍🎨",1075),("😉",11),("🧑🏼‍🦼‍➡",1665),("🧎🏻‍♂",1592),("👩🏿‍❤‍💋‍👩🏾",2448),("🙌🏾",379),("✅",3573),("👩‍🦽‍➡",1723),("🕴🏼",1785),("👇🏿",320),("🤷‍♀",839),("⚡",3091),("🧎🏼‍♀️",1599),("🤏🏿",254),("💴",3318),("👄",495),("👩🏻‍💼",1002),("🤾🏿‍♀️",2192),("🏌🏽‍♀️",1932),("👩🏽‍🌾",932),("❔️",3560),("🇿🇦",3938),("🧎🏼‍♀️‍➡️",1611),("🧑‍🦰",593),("🧎🏽‍♂️‍➡",1618),("📴",3547),("🫍",2689),("🧑🏿‍❤️‍🧑🏼",2472),("🧏🏽‍♀️",788),("🧖🏾",1871),("🇸🇲",3892),("🧑🏿‍🤝‍🧑🏿",2246),("🚶🏽‍♂",1540),("🧜🏾",1455),("🤸🏾‍♀",2077),("👨🏼‍🍳",943),("👨‍🎨",1067),("👩🏿‍❤‍💋‍👨🏾",2396),("👨🏼‍❤‍💋‍👨🏻",2407),("🇩🇰",3744),("🤷‍♀️",839),("👩🏻‍🦼‍➡️",1688),("🥰",14),("🧨",3103),("🧑🏽‍🦽‍➡",1702),("🌶️",2774),("🏃🏻‍♂️‍➡",1760),("👩🏻‍❤️‍👩🏼",2533),("🇸🇻",3898),("💹",3325),("🕞",3035),("🌔",3055),("👰🏻‍♀️",1290),("🧗🏾‍♀",1901),("👩🏼‍❤️‍💋‍👩🏼",2425),("💆🏽",1498),("👵🏼",661),("🙍🏾‍♂️",675),("🏃🏾‍♂️‍➡",1763),("🧑🏿‍🦽‍➡️",1704),("📟️",3266),("🚶‍➡️",1549),("👩🏿‍❤‍👨🏼",2498),("👩🏾‍❤‍💋‍👩🏽",2443),("🧑🏼‍🏫",883),("🧛🏽‍♂️",1442),("🧑🏻‍🫯‍🧑🏿",2088),("🏃🏿‍♂",1740),("👩🏻‍❤️‍💋‍👩🏼",2429),("🙋🏾‍♂",765),("🫷🏾",229),("👩🏼‍🐰‍👩🏾",1853),("💪",449),("🏌🏻‍♂",1924),("🚣🏻",1954),("📤",3330),("😙",21),("💃🏻",1772),("🈳",3635),("🧑🏻‍🚀",1098),("🏊🏾",1975),("🧧",3114),("🚶🏽‍♂️‍➡",1564),("🇨🇿",3740),("🚽",3423),("🎥",3282),("👩‍👦",2573),("🏋🏾‍♂",2017),("🐬",2688),("👸🏼",1225),("🚴🏻‍♀️",2038),("👨🏿‍🦽‍➡",1716),("🤸🏻‍♀",2074),("🥼",3187),("⚜️",3568),("🙅🏼‍♀️",715),("👩🏻‍❤️‍💋‍👨🏿",2380),("🧔🏿‍♀",556),("🦹🏻",1380),("🇬🇦",3763),("🧑‍🏭",971),("👨🏿‍⚖️",910),("💁🏾‍♂",747),("🈺",3638),("🧎‍♂️‍➡",1615),("👳🏻‍♂",1236),("🇱🇨",3816),("🦩",2670),("↔️",3485),("🎫",3119),("👰🏿‍♂",1288),("🧍🏼‍♀️",1581),("🇨🇰",3727),("🙋🏽",758),("👩🏽‍🍼",1322),("5️",3595),("👷🏿",1198),("🧑🏻‍🦼‍➡️",1664),("👨‍👨‍👧‍👦",2560),("🙆🏼‍♂",727),("👩🏻‍🎨",1074),("🧎🏻‍➡️",1604),("🧎🏽‍♀‍➡️",1612),("🚜",2975),("😽",124),("🕰️",3027),("⚧️",3550),("🦯",3393),("🕦",3051),("🫃🏿",1306),("🐛",2706),("👩🏼‍✈️",1093),("🖕",309),("🦸🏾‍♀",1377),("👨🏼‍🤝‍👨🏽",2330),("😲",83),("🤝🏽",402),("🏂🏻",1912),("🇧🇼",3717),("🧑🏿‍❤‍💋‍🧑🏻",2367),("📙",3303),("🫅🏼",1213),("🐭",2635),("🛒",3440),("🚖",2968),("🧔‍♀",551),("🧑🏿‍🚀",1102),("👮🏽‍♂️",1142),("🟦",3653),("🇵🇼",3873),("🚶🏽‍♂‍➡",1564),("⛹‍♂️",1995),("🫱🏾‍🫲🏽",419),("🙇‍♂️",797),("🤦🏼‍♂️",817),("⛹🏽‍♀",2004),("🤳",443),("👨🏿‍🦼‍➡️",1680),("🇲🇽",3845),("👨🏿‍🫯‍👨🏼",2128),("⛹🏾‍♀",2005),("😻",122),("🚵🏾‍♂",2053),("💃🏽",1774),("🕡️",3041),("💇🏿",1518),("👏🏽",372),("💉",3409),("👶🏼",499),("🤹🏾‍♀️",2209),("🤾🏻",2176),("🏥",2911),("🗃️",3366),("🧛🏼‍♂️",1441),("🫡",35),("👨🏻‍❤‍👨🏾",2509),("👲🏼",1249),("👯🏿‍♂",1820),("🙎🏼‍♂️",691),("🚴🏾‍♂",2035),("👎",339),("🧑🏾‍🦲",633),("👨🏻‍❤‍💋‍👨🏼",2403),("👳🏽",1232),("🧚‍♂️",1421),("🚶🏻‍♂️‍➡",1562),("⛹🏿‍♀",2006),("〰️",3563),("🧎🏻‍♀‍➡️",1610),("🧁",2846),("👁️‍🗨",166),("🙋🏿‍♀",772),("🧑🏿‍❤‍🧑🏻",2471),("🤌",243),("🧛🏽‍♀️",1448),("🤹🏿‍♂️",2204),("👏🏾",373),("☕",2855),("🤷🏾‍♂",837),("🇳🇬",3852),("🇸🇪",3885),("🚣🏼‍♂",1961),("🧑🏿‍❤️‍🧑🏻",2471),("↕️",3484),("👩🏾‍🤝‍👨🏼",2312),("🦑",2702),("👩🏼‍💻",1039),("🛎️",3019),("🧑🏿‍❤‍💋‍🧑🏽",2369),("✍🏿",436),("⛹🏾‍♀️",2005),("🤱",1313),("🕺",1777),("👩🏿‍⚖",916),("👩🏼‍❤‍👨🏼",2485),("👩🏽‍❤️‍👨🏿",2492),("🖍",3344),("🕠️",3039),("🏌🏾‍♀",1933),("🧑‍🧒",2585),("🧙🏼‍♀",1411),("😤",103),("🇲🇦",3825),("👩🏽‍❤️‍👩🏿",2544),("👯🏽",1792),("🇺🇸",3923),("🎬",3285),("🙍🏾‍♀",681),("🍆",2770),("🙇🏻‍♂️",798),("🤼🏼‍♂",2107),("💏🏻",2346),("🤸🏿‍♂",2072),("👨‍🍼",1325),("🙋🏼",757),("🧑‍🧑‍🧒",2583),("👰🏽",1280),("🐯",2605),("💁🏿‍♂️",748),("🧑🏾‍✈️",1083),("🇺🇾",3924),("🚴🏼",2027),("👨🏻‍🔬",1014),("🧑🏻‍❤️‍💋‍🧑🏼",2351),("🏌🏿‍♂️",1928),("👷🏼‍♀",1207),("👩🏽‍🦱",602),("🙎🏻‍♂",690),("🤦🏼‍♀",823),("🧑🏼‍🦲",631),("💳",3323),("🦦",2650),("🏎️",2976),("🤕",60),("🧎🏽‍♀‍➡",1612),("🏋🏾‍♂️",2017),("🤰",1295),("👩🏽‍⚖️",914),("👨🏾‍❤‍👨🏻",2519),("♀️",3548),("👮🏼‍♂️",1141),("👩🏾‍❤️‍💋‍👨🏽",2391),("🫵🏽",330),("🛏",3420),("↕",3484),("📹️",3289),("👱🏾",531),("👩🏻‍❤️‍👨🏼",2481),("👨🏼‍🦽‍➡️",1713),("👐🏼",389),("🕵‍♂",1157),("🚴‍♂️",2031),("💑",2449),("🏄🏽‍♀️",1950),("⚙",3390),("🧝🏿‍♀",1486),("💵",3319),("👊🏽",354),("🧑🏾‍🐰‍🧑🏿",1810),("🧍🏽‍♀️",1582),("👨🏽‍🦽",1708),("🧑🏼‍⚕️",847),("👎🏻",340),("🌡️",3064),("🧡",146),("🧗‍♀️",1897),("✍",431),("🙆🏿‍♀️",736),("🧑🏼‍🐰‍🧑🏽",1800),("❄️",3092),("🏊🏾‍♂️",1981),("👨🏿‍❤️‍💋‍👨🏿",2402),("🧗🏿",1890),("🏎",2976),("🙋🏾",759),("🧑🏽‍🤝‍🧑🏼",2256),("👨🏽‍🤝‍👨🏿",2336),("👩‍🔧",965),("🧏‍♀",785),("🧑🏼‍❤‍💋‍🧑🏾",2357),("👨🏿‍❤️‍👨🏻",2523),("🇮🇱",3791),("💂🏽‍♀️",1184),("🤽🏼‍♂️",2165),("🎎",3110),("🧔‍♂️",545),("👎🏼",341),("👩🏼‍❤‍💋‍👩🏾",2435),("🧑🏿‍🍼",1336),("🧑🏼",523),("🪧",3448),("🧛🏾‍♂️",1443),("🫴",219),("1⃣",3591),("👨🏽‍❤‍👨🏾",2517),("🙎🏿",688),("👱🏿‍♂",646),("💁‍♂️",743),("🥵",64),("👨🏾‍❤‍💋‍👨🏻",2415),("👨🏾‍🦳",573),("🐴",2608),("📧",3327),("🔍️",3291),("🖖🏼",197),("👤",2579),("🧑🏾‍✈",1083),("👨🏼‍🐰‍👨🏽",1826),("🌫️",3083),("💇🏾‍♀️",1529),("🧑🏿‍🔧",958),("🧅",2780),("🏌‍♂",1923),("👷🏿‍♂️",1204),("🤵‍♀",1271),("🔍",3291),("👁",493),("🧑🏾‍❤️‍💋‍🧑🏽",2365),("🧜‍♀",1463),("🧌",1493),("🌤️",3076),("🏃‍♀️",1741),("🦍",2591),("🚶🏿‍♂‍➡️",1566),("🌨",3080),("🚣🏼‍♂️",1961),("🚺️",3455),("㊙️",3637),("🪔",3297),("👷🏾‍♂️",1203),("👩🏼‍🦲",625),("🧑🏿‍🦼‍➡",1668),("👨🏾‍🦼‍➡️",1679),("🤾🏻‍♂",2182),("🛳",3002),("🏟",2897),("☹",80),("👨🏼‍🚒",1123),("🤸🏻‍♂️",2068),("🇧🇶",3712),("🕳️",164),("🧎🏽‍♀️‍➡️",1612),("🧑‍🎓",863),("🧃",2870),("👨🏾‍🦽‍➡",1715),("🕴🏿",1788),("👩🏽‍🦼‍➡️",1690),("📭",3336),("🧎🏼‍➡️",1605),("🧙🏽‍♂️",1406),("⚒",3378),("🔵",3644),("🦓",2613),("🏗️",2899),("👳‍♂️",1235),("🔚",3493),("🙎🏼‍♂",691),("🦵🏼",459),("▶",3526),("👨🏿‍🐰‍👨🏽",1839),("👨🏼‍🫯‍👨🏽",2116),("🐐",2626),("👩🏾‍❤️‍💋‍👨🏼",2390),("👩🏿‍❤️‍💋‍👨🏽",2395),("👊🏾",355),("💂‍♀",1181),("🧑🏻‍❤️‍🧑🏾",2457),("🛗",3417),("🤷‍♂",833),("🌎",2881),("👩🏾‍❤️‍👩🏼",2546),("🙆‍♂",725),("🧑🏻‍🍳",936),("⭕",3572),("✍🏻",432),("💇🏿‍♀",1530),("🤵🏻‍♀️",1272),("👯‍♂",1815),("👩🏻‍🤝‍👩🏾",2275),("🚣🏾‍♂️",1963),("🕊",2663),("6️",3596),("🕧",3029),("🧑🏼‍⚖",901),("🥘",2813),("🏄🏿‍♂",1946),("🤱🏾",1317),("👮🏼‍♀",1147),("🧑🏽‍❤️‍🧑🏻",2463),("☺️",19),("🤾🏿‍♀",2192),],}; 4 | --------------------------------------------------------------------------------