from typing import Any

CUSTOM_EMOJI_NAME_MAPS: dict[str, dict[str, Any]] = {
    # seems like best emoji for happy
    "1f600": {"canonical_name": "grinning", "aliases": ["happy"]},
    "1f603": {"canonical_name": "smiley", "aliases": []},
    # the Google emoji for this is not great, so made People/9 'smile' and
    # renamed this one
    "1f604": {"canonical_name": "smile", "aliases": []},
    # from gemoji/Unicode
    "1f601": {"canonical_name": "grinning_face_with_smiling_eyes", "aliases": []},
    # satisfied doesn't seem like a good description of these images
    "1f606": {"canonical_name": "laughing", "aliases": ["lol"]},
    "1f605": {"canonical_name": "sweat_smile", "aliases": []},
    # laughter_tears from https://beebom.com/emoji-meanings/
    "1f602": {"canonical_name": "joy", "aliases": ["tears", "laughter_tears"]},
    "1f923": {"canonical_name": "rolling_on_the_floor_laughing", "aliases": ["rofl"]},
    # not sure how the glyphs match relaxed, but both iamcal and gemoji have it
    "263a": {"canonical_name": "smiling_face", "aliases": ["relaxed"]},
    "1f60a": {"canonical_name": "blush", "aliases": []},
    # halo comes from gemoji/Unicode
    "1f607": {"canonical_name": "innocent", "aliases": ["halo"]},
    "1f642": {"canonical_name": "slight_smile", "aliases": []},
    "1f643": {"canonical_name": "upside_down", "aliases": ["oops"]},
    "1f609": {"canonical_name": "wink", "aliases": []},
    "1f60c": {"canonical_name": "relieved", "aliases": []},
    # in_love from https://beebom.com/emoji-meanings/
    "1f60d": {"canonical_name": "heart_eyes", "aliases": ["in_love"]},
    # blow_a_kiss from https://beebom.com/emoji-meanings/
    "1f618": {"canonical_name": "heart_kiss", "aliases": ["blow_a_kiss"]},
    "1f619": {"canonical_name": "kiss_smiling_eyes", "aliases": []},
    "1f61a": {"canonical_name": "kiss_with_blush", "aliases": []},
    "1f60b": {"canonical_name": "yum", "aliases": []},
    # crazy from https://beebom.com/emoji-meanings/, seems like best emoji for
    # joking
    "1f61b": {"canonical_name": "stuck_out_tongue", "aliases": ["mischievous"]},
    "1f61c": {"canonical_name": "stuck_out_tongue_wink", "aliases": ["joking", "crazy"]},
    "1f61d": {"canonical_name": "stuck_out_tongue_closed_eyes", "aliases": []},
    # kaching suggested by user
    "1f911": {"canonical_name": "money_face", "aliases": ["kaching"]},
    # arms_open seems like a natural addition
    "1f917": {"canonical_name": "hug", "aliases": ["arms_open"]},
    "1f913": {"canonical_name": "nerd", "aliases": ["geek"]},
    # several sites suggested this was used for "cool", but cool is taken by
    # Symbols/137
    "1f60e": {"canonical_name": "sunglasses", "aliases": []},
    "1f921": {"canonical_name": "clown", "aliases": []},
    "1f920": {"canonical_name": "cowboy", "aliases": []},
    # https://emojipedia.org/smirking-face/
    "1f60f": {"canonical_name": "smirk", "aliases": ["smug"]},
    "1f612": {"canonical_name": "unamused", "aliases": []},
    "1f61e": {"canonical_name": "disappointed", "aliases": []},
    # see People/41
    "1f614": {"canonical_name": "pensive", "aliases": ["tired"]},
    "1f61f": {"canonical_name": "worried", "aliases": []},
    # these seem to better capture the glyphs. This is also what :/ turns into
    # in Google Hangouts
    "1f615": {"canonical_name": "oh_no", "aliases": ["half_frown", "concerned", "confused"]},
    "1f641": {"canonical_name": "frown", "aliases": ["slight_frown"]},
    # sad seemed better than putting another frown as the primary name (see
    # People/37)
    "2639": {"canonical_name": "sad", "aliases": ["big_frown"]},
    # helpless from https://emojipedia.org/persevering-face/
    "1f623": {"canonical_name": "persevere", "aliases": ["helpless"]},
    # agony seemed like a good addition
    "1f616": {"canonical_name": "confounded", "aliases": ["agony"]},
    # tired doesn't really match any of the 4 images, put it on People/34
    "1f62b": {"canonical_name": "anguish", "aliases": []},
    # distraught from https://beebom.com/emoji-meanings/
    "1f629": {"canonical_name": "weary", "aliases": ["distraught"]},
    "1f624": {"canonical_name": "triumph", "aliases": []},
    "1f620": {"canonical_name": "angry", "aliases": []},
    # mad and grumpy from https://beebom.com/emoji-meanings/, very_angry to
    # parallel People/44 and show up in typeahead for "ang.."
    "1f621": {"canonical_name": "rage", "aliases": ["mad", "grumpy", "very_angry"]},
    # blank from https://beebom.com/emoji-meanings/, speechless and poker_face
    # seemed like good ideas for this
    "1f636": {"canonical_name": "speechless", "aliases": ["no_mouth", "blank", "poker_face"]},
    "1f610": {"canonical_name": "neutral", "aliases": []},
    "1f611": {"canonical_name": "expressionless", "aliases": []},
    "1f62f": {"canonical_name": "hushed", "aliases": []},
    "1f626": {"canonical_name": "frowning", "aliases": []},
    # pained from https://beebom.com/emoji-meanings/
    "1f627": {"canonical_name": "anguished", "aliases": ["pained"]},
    # surprise from https://emojipedia.org/face-with-open-mouth/
    "1f62e": {"canonical_name": "open_mouth", "aliases": ["surprise"]},
    "1f632": {"canonical_name": "astonished", "aliases": []},
    "1f635": {"canonical_name": "dizzy", "aliases": []},
    # the alternates are from https://emojipedia.org/flushed-face/. shame
    # doesn't work with the Google emoji
    "1f633": {"canonical_name": "flushed", "aliases": ["embarrassed", "blushing"]},
    "1f631": {"canonical_name": "scream", "aliases": []},
    # scared from https://emojipedia.org/fearful-face/, shock seemed like a
    # nice addition
    "1f628": {"canonical_name": "fear", "aliases": ["scared", "shock"]},
    "1f630": {"canonical_name": "cold_sweat", "aliases": []},
    "1f622": {"canonical_name": "cry", "aliases": []},
    # stressed from https://beebom.com/emoji-meanings/. The internet generally
    # didn't seem to know what to make of the disappointed_relieved name, and I
    # got the sense it wasn't an emotion that was often used. Hence replaced it
    # with exhausted.
    "1f625": {"canonical_name": "exhausted", "aliases": ["disappointed_relieved", "stressed"]},
    "1f924": {"canonical_name": "drooling", "aliases": []},
    "1f62d": {"canonical_name": "sob", "aliases": []},
    "1f613": {"canonical_name": "sweat", "aliases": []},
    "1f62a": {"canonical_name": "sleepy", "aliases": []},
    "1f634": {"canonical_name": "sleeping", "aliases": []},
    "1f644": {"canonical_name": "rolling_eyes", "aliases": []},
    "1f914": {"canonical_name": "thinking", "aliases": []},
    "1f925": {"canonical_name": "lying", "aliases": []},
    # seems like best emoji for nervous/anxious
    "1f62c": {"canonical_name": "grimacing", "aliases": ["nervous", "anxious"]},
    # zip_it from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/,
    # lips_sealed from https://emojipedia.org/zipper-mouth-face/, rest seemed
    # like reasonable additions
    "1f910": {
        "canonical_name": "silence",
        "aliases": ["quiet", "hush", "zip_it", "lips_are_sealed"],
    },
    # queasy seemed like a natural addition
    "1f922": {"canonical_name": "nauseated", "aliases": ["queasy"]},
    "1f927": {"canonical_name": "sneezing", "aliases": []},
    "1f637": {"canonical_name": "mask", "aliases": []},
    # flu from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/, sick from
    # https://emojipedia.org/face-with-thermometer/, face_with_thermometer so
    # it shows up in typeahead (thermometer taken by Objects/82)
    "1f912": {
        "canonical_name": "sick",
        "aliases": ["flu", "face_with_thermometer", "ill", "fever"],
    },
    # hurt and injured from https://beebom.com/emoji-meanings/. Chose hurt as
    # primary since I think it can cover a wider set of things (e.g. emotional
    # hurt)
    "1f915": {"canonical_name": "hurt", "aliases": ["head_bandage", "injured"]},
    # devil from https://emojipedia.org/smiling-face-with-horns/,
    # smiling_face_with_horns from gemoji/Unicode
    "1f608": {
        "canonical_name": "smiling_devil",
        "aliases": ["smiling_imp", "smiling_face_with_horns"],
    },
    # angry_devil from https://beebom.com/emoji-meanings/
    "1f47f": {"canonical_name": "devil", "aliases": ["imp", "angry_devil"]},
    "1f479": {"canonical_name": "ogre", "aliases": []},
    "1f47a": {"canonical_name": "goblin", "aliases": []},
    # pile_of_poo from gemoji/Unicode
    "1f4a9": {"canonical_name": "poop", "aliases": ["pile_of_poo"]},
    # alternates seemed like reasonable additions
    "1f47b": {"canonical_name": "ghost", "aliases": ["boo", "spooky", "haunted"]},
    "1f480": {"canonical_name": "skull", "aliases": []},
    # alternates seemed like reasonable additions
    "2620": {
        "canonical_name": "skull_and_crossbones",
        "aliases": ["pirate", "death", "hazard", "toxic", "poison"],
    },
    # ufo seemed like a natural addition
    "1f47d": {"canonical_name": "alien", "aliases": ["ufo"]},
    "1f47e": {"canonical_name": "space_invader", "aliases": []},
    "1f916": {"canonical_name": "robot", "aliases": []},
    # pumpkin seemed like a natural addition
    "1f383": {"canonical_name": "jack-o-lantern", "aliases": ["pumpkin"]},
    "1f63a": {"canonical_name": "smiley_cat", "aliases": []},
    "1f638": {"canonical_name": "smile_cat", "aliases": []},
    "1f639": {"canonical_name": "joy_cat", "aliases": []},
    "1f63b": {"canonical_name": "heart_eyes_cat", "aliases": []},
    # smug_cat to parallel People/31
    "1f63c": {"canonical_name": "smirk_cat", "aliases": ["smug_cat"]},
    "1f63d": {"canonical_name": "kissing_cat", "aliases": []},
    # weary_cat from Unicode/gemoji
    "1f640": {"canonical_name": "scream_cat", "aliases": ["weary_cat"]},
    "1f63f": {"canonical_name": "crying_cat", "aliases": []},
    # angry_cat to better parallel People/45
    "1f63e": {"canonical_name": "angry_cat", "aliases": ["pouting_cat"]},
    "1f450": {"canonical_name": "open_hands", "aliases": []},
    # praise from
    # https://emojipedia.org/person-raising-both-hands-in-celebration/
    "1f64c": {"canonical_name": "raised_hands", "aliases": ["praise"]},
    # applause from https://emojipedia.org/clapping-hands-sign/
    "1f44f": {"canonical_name": "clap", "aliases": ["applause"]},
    # welcome and thank_you from
    # https://emojipedia.org/person-with-folded-hands/, namaste from Indian
    # culture
    "1f64f": {
        "canonical_name": "folded_hands",
        "aliases": ["welcome", "thank_you", "namaste", "pray"],
    },
    # done_deal seems like a natural addition
    "1f91d": {"canonical_name": "handshake", "aliases": ["done_deal"]},
    "1f44d": {"canonical_name": "+1", "aliases": ["thumbs_up", "like"]},
    "1f44e": {"canonical_name": "-1", "aliases": ["thumbs_down"]},
    # fist_bump from https://beebom.com/emoji-meanings/
    "1f44a": {"canonical_name": "fist_bump", "aliases": ["punch"]},
    # used as power in social justice movements
    "270a": {"canonical_name": "fist", "aliases": ["power"]},
    "1f91b": {"canonical_name": "left_fist", "aliases": []},
    "1f91c": {"canonical_name": "right_fist", "aliases": []},
    "1f91e": {"canonical_name": "fingers_crossed", "aliases": []},
    # seems to be mostly used as peace on twitter
    "270c": {"canonical_name": "peace_sign", "aliases": ["victory"]},
    # https://emojipedia.org/sign-of-the-horns/
    "1f918": {"canonical_name": "rock_on", "aliases": ["sign_of_the_horns"]},
    # got_it seems like a natural addition
    "1f44c": {"canonical_name": "ok", "aliases": ["got_it"]},
    "1f448": {"canonical_name": "point_left", "aliases": []},
    "1f449": {"canonical_name": "point_right", "aliases": []},
    # :this: is a way of emphasizing the previous message. point_up instead of
    # point_up_2 so that point_up better matches the other point_*s
    "1f446": {"canonical_name": "point_up", "aliases": ["this"]},
    "1f447": {"canonical_name": "point_down", "aliases": []},
    # People/114 is point_up. These seemed better than naming it point_up_2,
    # and point_of_information means it will come up in typeahead for 'point'
    "261d": {
        "canonical_name": "wait_one_second",
        "aliases": ["point_of_information", "asking_a_question"],
    },
    "270b": {"canonical_name": "hand", "aliases": ["raised_hand"]},
    # seems like best emoji for stop, raised_back_of_hand doesn't seem that
    # useful
    "1f91a": {"canonical_name": "stop", "aliases": []},
    # seems like best emoji for high_five, raised_hand_with_fingers_splayed
    # doesn't seem that useful
    "1f590": {"canonical_name": "high_five", "aliases": ["palm"]},
    # https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
    "1f596": {"canonical_name": "spock", "aliases": ["live_long_and_prosper"]},
    # People/119 is a better 'hi', but 'hi' will never show up in the typeahead
    # due to 'high_five'
    "1f44b": {"canonical_name": "wave", "aliases": ["hello", "hi"]},
    "1f919": {"canonical_name": "call_me", "aliases": []},
    # flexed_biceps from gemoji/Unicode, strong seemed like a good addition
    "1f4aa": {"canonical_name": "muscle", "aliases": []},
    "1f595": {"canonical_name": "middle_finger", "aliases": []},
    "270d": {"canonical_name": "writing", "aliases": []},
    "1f933": {"canonical_name": "selfie", "aliases": []},
    # Couldn't figure out why iamcal chose nail_care. Unicode uses nail_polish,
    # gemoji uses both
    "1f485": {"canonical_name": "nail_polish", "aliases": ["nail_care"]},
    "1f48d": {"canonical_name": "ring", "aliases": []},
    "1f484": {"canonical_name": "lipstick", "aliases": []},
    # People/18 seems like a better kiss for most circumstances
    "1f48b": {"canonical_name": "lipstick_kiss", "aliases": []},
    # mouth from gemoji/Unicode
    "1f444": {"canonical_name": "lips", "aliases": ["mouth"]},
    "1f445": {"canonical_name": "tongue", "aliases": []},
    "1f442": {"canonical_name": "ear", "aliases": []},
    "1f443": {"canonical_name": "nose", "aliases": []},
    # seems a better feet than Nature/86 (paw_prints)
    "1f463": {"canonical_name": "footprints", "aliases": ["feet"]},
    "1f441": {"canonical_name": "eye", "aliases": []},
    # seemed the best emoji for looking
    "1f440": {"canonical_name": "eyes", "aliases": ["looking"]},
    "1f5e3": {"canonical_name": "speaking_head", "aliases": []},
    # shadow seems like a good addition
    "1f464": {"canonical_name": "silhouette", "aliases": ["shadow"]},
    # to parallel People/139
    "1f465": {"canonical_name": "silhouettes", "aliases": ["shadows"]},
    "1f476": {"canonical_name": "baby", "aliases": []},
    "1f466": {"canonical_name": "boy", "aliases": []},
    "1f467": {"canonical_name": "girl", "aliases": []},
    "1f468": {"canonical_name": "man", "aliases": []},
    "1f469": {"canonical_name": "woman", "aliases": []},
    # It's used on twitter a bunch, either when showing off hair, or in a way
    # where People/144 would substitute. It'd be nice if there were another
    # emoji one could use for "good hair", but I think not a big loss to not
    # have one for Zulip, and not worth the eurocentrism.
    # '1f471': {'canonical_name': 'X', 'aliases': ['person_with_blond_hair']},
    # Added elderly since I think some people prefer that term
    "1f474": {"canonical_name": "older_man", "aliases": ["elderly_man"]},
    # Added elderly since I think some people prefer that term
    "1f475": {"canonical_name": "older_woman", "aliases": ["elderly_woman"]},
    "1f472": {"canonical_name": "gua_pi_mao", "aliases": []},
    "1f473": {"canonical_name": "turban", "aliases": []},
    # police seems like a more polite term, and matches the Unicode
    "1f46e": {"canonical_name": "police", "aliases": ["cop"]},
    "1f477": {"canonical_name": "construction_worker", "aliases": []},
    "1f482": {"canonical_name": "guard", "aliases": []},
    # detective from gemoji, sneaky from
    # https://mashable.com/2015/10/23/ios-9-1-emoji-guide/, agent seems a
    # reasonable addition
    "1f575": {"canonical_name": "detective", "aliases": ["spy", "sleuth", "agent", "sneaky"]},
    # mrs_claus from https://emojipedia.org/mother-christmas/
    "1f936": {"canonical_name": "mother_christmas", "aliases": ["mrs_claus"]},
    "1f385": {"canonical_name": "santa", "aliases": []},
    "1f478": {"canonical_name": "princess", "aliases": []},
    "1f934": {"canonical_name": "prince", "aliases": []},
    "1f470": {"canonical_name": "bride", "aliases": []},
    "1f935": {"canonical_name": "tuxedo", "aliases": []},
    "1f47c": {"canonical_name": "angel", "aliases": []},
    # expecting seems like a good addition
    "1f930": {"canonical_name": "pregnant", "aliases": ["expecting"]},
    "1f647": {"canonical_name": "bow", "aliases": []},
    # mostly used sassily. person_tipping_hand from
    # https://emojipedia.org/information-desk-person/
    "1f481": {"canonical_name": "information_desk_person", "aliases": ["person_tipping_hand"]},
    # no_signal to parallel People/207. Nope seems like a reasonable addition
    "1f645": {"canonical_name": "no_signal", "aliases": ["nope"]},
    "1f646": {"canonical_name": "ok_signal", "aliases": []},
    # pick_me seems like a good addition
    "1f64b": {"canonical_name": "raising_hand", "aliases": ["pick_me"]},
    "1f926": {"canonical_name": "face_palm", "aliases": []},
    "1f937": {"canonical_name": "shrug", "aliases": []},
    "1f64e": {"canonical_name": "person_pouting", "aliases": []},
    "1f64d": {"canonical_name": "person_frowning", "aliases": []},
    "1f487": {"canonical_name": "haircut", "aliases": []},
    "1f486": {"canonical_name": "massage", "aliases": []},
    # hover seems like a reasonable addition
    "1f574": {"canonical_name": "levitating", "aliases": ["hover"]},
    "1f483": {"canonical_name": "dancer", "aliases": []},
    "1f57a": {"canonical_name": "dancing", "aliases": ["disco"]},
    "1f46f": {"canonical_name": "dancers", "aliases": []},
    # pedestrian seems like reasonable addition
    "1f6b6": {"canonical_name": "walking", "aliases": ["pedestrian"]},
    "1f3c3": {"canonical_name": "running", "aliases": ["runner"]},
    "1f46b": {"canonical_name": "man_and_woman_holding_hands", "aliases": ["man_and_woman_couple"]},
    # to parallel People/234
    "1f46d": {"canonical_name": "two_women_holding_hands", "aliases": ["women_couple"]},
    # to parallel People/234
    "1f46c": {"canonical_name": "two_men_holding_hands", "aliases": ["men_couple"]},
    # no need for man-woman-boy, since we aren't including the other family
    # combos
    "1f46a": {"canonical_name": "family", "aliases": []},
    "1f45a": {"canonical_name": "clothing", "aliases": []},
    "1f455": {"canonical_name": "shirt", "aliases": ["tshirt"]},
    # denim seems like a good addition
    "1f456": {"canonical_name": "jeans", "aliases": ["denim"]},
    # tie is shorter, and a bit more general
    "1f454": {"canonical_name": "tie", "aliases": []},
    "1f457": {"canonical_name": "dress", "aliases": []},
    "1f459": {"canonical_name": "bikini", "aliases": []},
    "1f458": {"canonical_name": "kimono", "aliases": []},
    # I feel like this is always used in the plural
    "1f460": {"canonical_name": "high_heels", "aliases": []},
    # flip_flops seems like a reasonable addition
    "1f461": {"canonical_name": "sandal", "aliases": ["flip_flops"]},
    "1f462": {"canonical_name": "boot", "aliases": []},
    "1f45e": {"canonical_name": "shoe", "aliases": []},
    # running_shoe is from gemoji, sneaker seems like a reasonable addition
    "1f45f": {"canonical_name": "athletic_shoe", "aliases": ["sneaker", "running_shoe"]},
    "1f452": {"canonical_name": "hat", "aliases": []},
    "1f3a9": {"canonical_name": "top_hat", "aliases": []},
    # graduate seems like a better word for this
    "1f393": {"canonical_name": "graduate", "aliases": ["mortar_board"]},
    # king and queen seem like good additions
    "1f451": {"canonical_name": "crown", "aliases": ["queen", "king"]},
    # safety and invincibility inspired by
    # https://mashable.com/2015/10/23/ios-9-1-emoji-guide/. hard_hat and
    # rescue_worker seem like good additions
    "26d1": {
        "canonical_name": "helmet",
        "aliases": ["hard_hat", "rescue_worker", "safety_first", "invincible"],
    },
    # backpack from gemoji, dominates satchel on Google Trends
    "1f392": {"canonical_name": "backpack", "aliases": ["satchel"]},
    "1f45d": {"canonical_name": "pouch", "aliases": []},
    "1f45b": {"canonical_name": "purse", "aliases": []},
    "1f45c": {"canonical_name": "handbag", "aliases": []},
    "1f4bc": {"canonical_name": "briefcase", "aliases": []},
    # glasses seems a more common term than eyeglasses, spectacles seems like a
    # reasonable synonym to add
    "1f453": {"canonical_name": "glasses", "aliases": ["spectacles"]},
    "1f576": {"canonical_name": "dark_sunglasses", "aliases": []},
    "1f302": {"canonical_name": "closed_umbrella", "aliases": []},
    "2602": {"canonical_name": "umbrella", "aliases": []},
    # Some animals have a Unicode codepoint "<animal>", some have a codepoint
    # "<animal> face", and some have both. If an animal has just a single
    # codepoint, we call it <animal>, regardless of what the codepoint is. If
    # an animal has both, we call the "<animal>" codepoint <animal>, and come
    # up with something else useful-seeming for the "<animal> face" codepoint.
    # The reason we chose "<animal> face" for the non-standard name (instead of
    # giving "<animal>" the non-standard name, as iamcal does) is because the
    # apple emoji for the "<animal>"s are too realistic. E.g. Apple's Nature/76
    # is less plausibly a puppy than this one.
    "1f436": {"canonical_name": "puppy", "aliases": []},
    "1f431": {"canonical_name": "kitten", "aliases": []},
    "1f42d": {"canonical_name": "dormouse", "aliases": []},
    "1f439": {"canonical_name": "hamster", "aliases": []},
    "1f430": {"canonical_name": "bunny", "aliases": []},
    "1f98a": {"canonical_name": "fox", "aliases": []},
    "1f43b": {"canonical_name": "bear", "aliases": []},
    "1f43c": {"canonical_name": "panda", "aliases": []},
    "1f428": {"canonical_name": "koala", "aliases": []},
    "1f42f": {"canonical_name": "tiger_cub", "aliases": []},
    "1f981": {"canonical_name": "lion", "aliases": []},
    "1f42e": {"canonical_name": "calf", "aliases": []},
    "1f437": {"canonical_name": "piglet", "aliases": []},
    "1f43d": {"canonical_name": "pig_nose", "aliases": []},
    "1f438": {"canonical_name": "frog", "aliases": []},
    "1f435": {"canonical_name": "monkey_face", "aliases": []},
    "1f648": {"canonical_name": "see_no_evil", "aliases": []},
    "1f649": {"canonical_name": "hear_no_evil", "aliases": []},
    "1f64a": {"canonical_name": "speak_no_evil", "aliases": []},
    "1f412": {"canonical_name": "monkey", "aliases": []},
    # cluck seemed like a good addition
    "1f414": {"canonical_name": "chicken", "aliases": ["cluck"]},
    "1f427": {"canonical_name": "penguin", "aliases": []},
    "1f426": {"canonical_name": "bird", "aliases": []},
    "1f424": {"canonical_name": "chick", "aliases": ["baby_chick"]},
    "1f423": {"canonical_name": "hatching", "aliases": ["hatching_chick"]},
    # https://www.iemoji.com/view/emoji/668/animals-nature/front-facing-baby-chick
    "1f425": {"canonical_name": "new_baby", "aliases": []},
    "1f986": {"canonical_name": "duck", "aliases": []},
    "1f985": {"canonical_name": "eagle", "aliases": []},
    "1f989": {"canonical_name": "owl", "aliases": []},
    "1f987": {"canonical_name": "bat", "aliases": []},
    "1f43a": {"canonical_name": "wolf", "aliases": []},
    "1f417": {"canonical_name": "boar", "aliases": []},
    "1f434": {"canonical_name": "pony", "aliases": []},
    "1f984": {"canonical_name": "unicorn", "aliases": []},
    # buzz seemed like a reasonable addition
    "1f41d": {"canonical_name": "bee", "aliases": ["buzz", "honeybee"]},
    # caterpillar seemed like a reasonable addition
    "1f41b": {"canonical_name": "bug", "aliases": ["caterpillar"]},
    "1f98b": {"canonical_name": "butterfly", "aliases": []},
    "1f40c": {"canonical_name": "snail", "aliases": []},
    # spiral_shell from Unicode/gemoji, the others seemed like reasonable
    # additions
    "1f41a": {"canonical_name": "shell", "aliases": ["seashell", "conch", "spiral_shell"]},
    "1f41c": {"canonical_name": "ant", "aliases": []},
    "1f577": {"canonical_name": "spider", "aliases": []},
    "1f578": {"canonical_name": "web", "aliases": ["spider_web"]},
    # tortoise seemed like a reasonable addition
    "1f422": {"canonical_name": "turtle", "aliases": ["tortoise"]},
    # put in a few animal sounds, including this one
    "1f40d": {"canonical_name": "snake", "aliases": ["hiss"]},
    "1f98e": {"canonical_name": "lizard", "aliases": ["gecko"]},
    "1f982": {"canonical_name": "scorpion", "aliases": []},
    "1f980": {"canonical_name": "crab", "aliases": []},
    "1f991": {"canonical_name": "squid", "aliases": []},
    "1f419": {"canonical_name": "octopus", "aliases": []},
    "1f990": {"canonical_name": "shrimp", "aliases": []},
    "1f420": {"canonical_name": "tropical_fish", "aliases": []},
    "1f41f": {"canonical_name": "fish", "aliases": []},
    "1f421": {"canonical_name": "blowfish", "aliases": []},
    "1f42c": {"canonical_name": "dolphin", "aliases": ["flipper"]},
    "1f988": {"canonical_name": "shark", "aliases": []},
    "1f433": {"canonical_name": "whale", "aliases": []},
    # https://emojipedia.org/whale/
    "1f40b": {"canonical_name": "humpback_whale", "aliases": []},
    "1f40a": {"canonical_name": "crocodile", "aliases": []},
    "1f406": {"canonical_name": "leopard", "aliases": []},
    "1f405": {"canonical_name": "tiger", "aliases": []},
    "1f403": {"canonical_name": "water_buffalo", "aliases": []},
    "1f402": {"canonical_name": "ox", "aliases": ["bull"]},
    "1f404": {"canonical_name": "cow", "aliases": []},
    "1f98c": {"canonical_name": "deer", "aliases": []},
    # https://emojipedia.org/dromedary-camel/
    "1f42a": {"canonical_name": "arabian_camel", "aliases": []},
    "1f42b": {"canonical_name": "camel", "aliases": []},
    "1f418": {"canonical_name": "elephant", "aliases": []},
    "1f98f": {"canonical_name": "rhinoceros", "aliases": []},
    "1f98d": {"canonical_name": "gorilla", "aliases": []},
    "1f40e": {"canonical_name": "horse", "aliases": []},
    "1f416": {"canonical_name": "pig", "aliases": ["oink"]},
    "1f410": {"canonical_name": "goat", "aliases": []},
    "1f40f": {"canonical_name": "ram", "aliases": []},
    "1f411": {"canonical_name": "sheep", "aliases": ["baa"]},
    "1f415": {"canonical_name": "dog", "aliases": ["woof"]},
    "1f429": {"canonical_name": "poodle", "aliases": []},
    "1f408": {"canonical_name": "cat", "aliases": ["meow"]},
    # alarm seemed like a fun addition
    "1f413": {"canonical_name": "rooster", "aliases": ["alarm", "cock-a-doodle-doo"]},
    "1f983": {"canonical_name": "turkey", "aliases": []},
    "1f54a": {"canonical_name": "dove", "aliases": ["dove_of_peace"]},
    "1f407": {"canonical_name": "rabbit", "aliases": []},
    "1f401": {"canonical_name": "mouse", "aliases": []},
    "1f400": {"canonical_name": "rat", "aliases": []},
    "1f43f": {"canonical_name": "chipmunk", "aliases": []},
    # paws seemed like reasonable addition. Put feet at People/135
    "1f43e": {"canonical_name": "paw_prints", "aliases": ["paws"]},
    "1f409": {"canonical_name": "dragon", "aliases": []},
    "1f432": {"canonical_name": "dragon_face", "aliases": []},
    "1f335": {"canonical_name": "cactus", "aliases": []},
    "1f384": {"canonical_name": "holiday_tree", "aliases": []},
    "1f332": {"canonical_name": "evergreen_tree", "aliases": []},
    "1f333": {"canonical_name": "tree", "aliases": ["deciduous_tree"]},
    "1f334": {"canonical_name": "palm_tree", "aliases": []},
    # sprout seemed like a reasonable addition
    "1f331": {"canonical_name": "seedling", "aliases": ["sprout"]},
    # seemed like the best emoji for plant
    "1f33f": {"canonical_name": "herb", "aliases": ["plant"]},
    # clover seemed like a reasonable addition
    "2618": {"canonical_name": "shamrock", "aliases": ["clover"]},
    # lucky seems more useful
    "1f340": {"canonical_name": "lucky", "aliases": ["four_leaf_clover"]},
    "1f38d": {"canonical_name": "bamboo", "aliases": []},
    # https://emojipedia.org/tanabata-tree/
    "1f38b": {"canonical_name": "wish_tree", "aliases": ["tanabata_tree"]},
    # seemed like good additions. Used fall instead of autumn, since don't have
    # the rest of the seasons, and could imagine someone using both meanings of
    # fall.
    "1f343": {"canonical_name": "leaves", "aliases": ["wind", "fall"]},
    "1f342": {"canonical_name": "fallen_leaf", "aliases": []},
    "1f341": {"canonical_name": "maple_leaf", "aliases": []},
    "1f344": {"canonical_name": "mushroom", "aliases": []},
    # harvest seems more useful
    "1f33e": {"canonical_name": "harvest", "aliases": ["ear_of_rice"]},
    "1f490": {"canonical_name": "bouquet", "aliases": []},
    # seems like the best emoji for flower
    "1f337": {"canonical_name": "tulip", "aliases": ["flower"]},
    "1f339": {"canonical_name": "rose", "aliases": []},
    # crushed suggest by a user
    "1f940": {"canonical_name": "wilted_flower", "aliases": ["crushed"]},
    "1f33b": {"canonical_name": "sunflower", "aliases": []},
    "1f33c": {"canonical_name": "blossom", "aliases": []},
    "1f338": {"canonical_name": "cherry_blossom", "aliases": []},
    "1f33a": {"canonical_name": "hibiscus", "aliases": []},
    "1f30e": {"canonical_name": "earth_americas", "aliases": []},
    "1f30d": {"canonical_name": "earth_africa", "aliases": []},
    "1f30f": {"canonical_name": "earth_asia", "aliases": []},
    "1f315": {"canonical_name": "full_moon", "aliases": []},
    # too many useless moons. Don't seem to get much use on twitter, and clog
    # up typeahead for moon.
    # '1f316': {'canonical_name': 'X', 'aliases': ['waning_crescent_moon']},
    # '1f317': {'canonical_name': 'X', 'aliases': ['last_quarter_moon']},
    # '1f318': {'canonical_name': 'X', 'aliases': ['waning_crescent_moon']},
    "1f311": {"canonical_name": "new_moon", "aliases": []},
    # '1f312': {'canonical_name': 'X', 'aliases': ['waxing_crescent_moon']},
    # '1f313': {'canonical_name': 'X', 'aliases': ['first_quarter_moon']},
    "1f314": {"canonical_name": "waxing_moon", "aliases": []},
    "1f31a": {"canonical_name": "new_moon_face", "aliases": []},
    "1f31d": {"canonical_name": "moon_face", "aliases": []},
    "1f31e": {"canonical_name": "sun_face", "aliases": []},
    # goodnight seems way more useful
    "1f31b": {"canonical_name": "goodnight", "aliases": []},
    # '1f31c': {'canonical_name': 'X', 'aliases': ['last_quarter_moon_with_face']},
    # seems like the best emoji for moon
    "1f319": {"canonical_name": "moon", "aliases": []},
    # dizzy taken by People/54, had to come up with something else
    "1f4ab": {"canonical_name": "seeing_stars", "aliases": []},
    "2b50": {"canonical_name": "star", "aliases": []},
    # glowing_star from gemoji/Unicode
    "1f31f": {"canonical_name": "glowing_star", "aliases": []},
    # glamour seems like a reasonable addition
    "2728": {"canonical_name": "sparkles", "aliases": ["glamour"]},
    # high_voltage from gemoji/Unicode
    "26a1": {"canonical_name": "high_voltage", "aliases": ["zap"]},
    # https://emojipedia.org/fire/
    "1f525": {"canonical_name": "fire", "aliases": ["lit", "hot", "flame"]},
    # explosion and crash seem like reasonable additions
    "1f4a5": {"canonical_name": "boom", "aliases": ["explosion", "crash", "collision"]},
    # meteor seems like a reasonable addition
    "2604": {"canonical_name": "comet", "aliases": ["meteor"]},
    "2600": {"canonical_name": "sunny", "aliases": []},
    "1f324": {"canonical_name": "mostly_sunny", "aliases": []},
    # partly_cloudy for the glass half empty people
    "26c5": {"canonical_name": "partly_sunny", "aliases": ["partly_cloudy"]},
    "1f325": {"canonical_name": "cloudy", "aliases": []},
    # sunshowers seems like a more fun term
    "1f326": {
        "canonical_name": "sunshowers",
        "aliases": ["sun_and_rain", "partly_sunny_with_rain"],
    },
    # pride and lgbtq seem like reasonable additions
    "1f308": {"canonical_name": "rainbow", "aliases": ["pride", "lgbtq"]},
    # overcast seems like a good addition
    "2601": {"canonical_name": "cloud", "aliases": ["overcast"]},
    # suggested by user typing these into their typeahead.
    "1f327": {"canonical_name": "rainy", "aliases": ["soaked", "drenched"]},
