text: from typing import Any, Dict
  
  EMOJI_NAME_MAPS = {
      # 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': 'big_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': 'smile', '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']},
      '1f617': {'canonical_name': 'kiss', 'aliases': []},
      '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
      '1f61c': {'canonical_name': 'stuck_out_tongue_wink', 'aliases': ['joking', 'crazy']},
      '1f61d': {'canonical_name': 'stuck_out_tongue', 'aliases': []},
      # don't really need two stuck_out_tongues (see People/23), so chose
      # something else that could fit
      '1f61b': {'canonical_name': 'mischievous', '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 dissapointed_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': []},
      # cant_talk from https://beebom.com/emoji-meanings/
      '1f637': {'canonical_name': 'cant_talk', 'aliases': ['mask']},
      # 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']},    # ignorelongline
      # 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': 'pray', 'aliases': ['welcome', 'thank_you', 'namaste']},
      # 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']},    # ignorelongline
      # 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']},
      # unicode/gemoji have lady_beetle; hopefully with ladybug we get both the
      # people that prefer lady_beetle (with beetle) and ladybug. There is also
      # ladybird, but seems a bit much for this to complete for bird.
      '1f41e': {'canonical_name': 'beetle', 'aliases': ['ladybug']},
      '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']},
      # thunderstorm seems better for this emoji, and thunder_and_rain more
      # evocative than thunder_cloud_and_rain
      '26c8': {'canonical_name': 'thunderstorm', 'aliases': ['thunder_and_rain']},
      # lightning_storm seemed better than lightning_cloud
      '1f329': {'canonical_name': 'lightning', 'aliases': ['lightning_storm']},
      # snowy to parallel sunny, cloudy, etc; snowstorm seems like a good
      # addition
      '1f328': {'canonical_name': 'snowy', 'aliases': ['snowstorm']},
      '2603': {'canonical_name': 'snowman', 'aliases': []},
      # don't need two snowmen. frosty is nice because it's a weather (primary
      # benefit) and also a snowman (one that suffered from not having snow, in
      # fact)
      '26c4': {'canonical_name': 'frosty', 'aliases': []},
      '2744': {'canonical_name': 'snowflake', 'aliases': []},
      # the internet didn't seem to have a good use for this emoji. windy is a
      # good weather that is otherwise not represented. mother_nature from
      # https://emojipedia.org/wind-blowing-face/
      '1f32c': {'canonical_name': 'windy', 'aliases': ['mother_nature']},
      '1f4a8': {'canonical_name': 'dash', 'aliases': []},
      # tornado_cloud comes from the unicode, but e.g. gemoji drops the cloud
      '1f32a': {'canonical_name': 'tornado', 'aliases': []},
      # hazy seemed like a good addition
      '1f32b': {'canonical_name': 'fog', 'aliases': ['hazy']},
      '1f30a': {'canonical_name': 'ocean', 'aliases': []},
      # drop seems better than droplet, since could be used for its other
      # meanings. water drop partly so that it shows up in typeahead for water
      '1f4a7': {'canonical_name': 'drop', 'aliases': ['water_drop']},
      '1f4a6': {'canonical_name': 'sweat_drops', 'aliases': []},
      '2614': {'canonical_name': 'umbrella_with_rain', 'aliases': []},
      '1f34f': {'canonical_name': 'green_apple', 'aliases': []},
      '1f34e': {'canonical_name': 'apple', 'aliases': []},
      '1f350': {'canonical_name': 'pear', 'aliases': []},
      # An argument for not calling this orange is to save the color for a color
      # swatch, but we can deal with that when it happens. Mandarin is from
      # https://emojipedia.org/tangerine/, also like that it has a second meaning
      '1f34a': {'canonical_name': 'orange', 'aliases': ['tangerine', 'mandarin']},
      '1f34b': {'canonical_name': 'lemon', 'aliases': []},
      '1f34c': {'canonical_name': 'banana', 'aliases': []},
      '1f349': {'canonical_name': 'watermelon', 'aliases': []},
      '1f347': {'canonical_name': 'grapes', 'aliases': []},
      '1f353': {'canonical_name': 'strawberry', 'aliases': []},
      '1f348': {'canonical_name': 'melon', 'aliases': []},
      '1f352': {'canonical_name': 'cherries', 'aliases': []},
      '1f351': {'canonical_name': 'peach', 'aliases': []},
      '1f34d': {'canonical_name': 'pineapple', 'aliases': []},
      '1f95d': {'canonical_name': 'kiwi', 'aliases': []},
      '1f951': {'canonical_name': 'avocado', 'aliases': []},
      '1f345': {'canonical_name': 'tomato', 'aliases': []},
      '1f346': {'canonical_name': 'eggplant', 'aliases': []},
      '1f952': {'canonical_name': 'cucumber', 'aliases': []},
      '1f955': {'canonical_name': 'carrot', 'aliases': []},
      # maize is from unicode
      '1f33d': {'canonical_name': 'corn', 'aliases': ['maize']},
      # chili_pepper seems like a reasonable addition
      '1f336': {'canonical_name': 'hot_pepper', 'aliases': ['chili_pepper']},
      '1f954': {'canonical_name': 'potato', 'aliases': []},
      # yam seems better than sweet_potato, since we already have a potato (not a
      # strong argument, but is better on the typeahead not to have emoji that
      # share long prefixes)
      '1f360': {'canonical_name': 'yam', 'aliases': ['sweet_potato']},
      '1f330': {'canonical_name': 'chestnut', 'aliases': []},
      '1f95c': {'canonical_name': 'peanuts', 'aliases': []},
      '1f36f': {'canonical_name': 'honey', 'aliases': []},
      '1f950': {'canonical_name': 'croissant', 'aliases': []},
      '1f35e': {'canonical_name': 'bread', 'aliases': []},
      '1f956': {'canonical_name': 'baguette', 'aliases': []},
      '1f9c0': {'canonical_name': 'cheese', 'aliases': []},
      '1f95a': {'canonical_name': 'egg', 'aliases': []},
      # already have an egg in Foods/31, though I guess wouldn't be a big deal to
      # add it here.
      '1f373': {'canonical_name': 'cooking', 'aliases': []},
      '1f953': {'canonical_name': 'bacon', 'aliases': []},
      # there's no lunch and dinner, which is a small negative against adding
      # breakfast
      '1f95e': {'canonical_name': 'pancakes', 'aliases': ['breakfast']},
      # There is already shrimp in Nature/51, and tempura seems like a better
      # description
      '1f364': {'canonical_name': 'tempura', 'aliases': []},
      # drumstick seems like a better description
      '1f357': {'canonical_name': 'drumstick', 'aliases': ['poultry']},
      '1f356': {'canonical_name': 'meat', 'aliases': []},
      '1f355': {'canonical_name': 'pizza', 'aliases': []},
      '1f32d': {'canonical_name': 'hotdog', 'aliases': []},
      '1f354': {'canonical_name': 'hamburger', 'aliases': []},
      '1f35f': {'canonical_name': 'fries', 'aliases': []},
      # https://emojipedia.org/stuffed-flatbread/
      '1f959': {'canonical_name': 'doner_kebab', 'aliases': ['shawarma', 'souvlaki', 'stuffed_flatbread']},
      '1f32e': {'canonical_name': 'taco', 'aliases': []},
      '1f32f': {'canonical_name': 'burrito', 'aliases': []},
      '1f957': {'canonical_name': 'salad', 'aliases': []},
      # I think Foods/49 is a better :food:
      '1f958': {'canonical_name': 'paella', 'aliases': []},
      '1f35d': {'canonical_name': 'spaghetti', 'aliases': []},
      # seems like the best noodles? maybe this should be Foods/47? Noodles seem
      # like a bigger thing in east asia than in europe, so going with that.
      '1f35c': {'canonical_name': 'ramen', 'aliases': ['noodles']},
      # seems like the best :food:. Also a reasonable :soup:, though the google
      # one is indeed more a pot of food (the unicode) than a soup
      '1f372': {'canonical_name': 'food', 'aliases': ['soup', 'stew']},
      # naruto is actual name, and I think don't need this to autocomplete for
      # "fish"
      '1f365': {'canonical_name': 'naruto', 'aliases': []},
      '1f363': {'canonical_name': 'sushi', 'aliases': []},
      '1f371': {'canonical_name': 'bento', 'aliases': []},
      '1f35b': {'canonical_name': 'curry', 'aliases': []},
      '1f35a': {'canonical_name': 'rice', 'aliases': []},
      # onigiri is actual name, and I think don't need this to typeahead complete
      # for "rice"
      '1f359': {'canonical_name': 'onigiri', 'aliases': []},
      # leaving rice_cracker in, so that we have something for cracker
      '1f358': {'canonical_name': 'senbei', 'aliases': ['rice_cracker']},
      '1f362': {'canonical_name': 'oden', 'aliases': []},
      '1f361': {'canonical_name': 'dango', 'aliases': []},
      '1f367': {'canonical_name': 'shaved_ice', 'aliases': []},
      # seemed like the best emoji for gelato
      '1f368': {'canonical_name': 'ice_cream', 'aliases': ['gelato']},
      # already have ice_cream in Foods/60, and soft_serve seems like a
      # potentially fun emoji to have in conjunction with ice_cream. Put in
      # soft_ice_cream so it typeahead completes on ice_cream as well.
      '1f366': {'canonical_name': 'soft_serve', 'aliases': ['soft_ice_cream']},
      '1f370': {'canonical_name': 'cake', 'aliases': []},
      '1f382': {'canonical_name': 'birthday', 'aliases': []},
      # flan seems like a reasonable addition
      '1f36e': {'canonical_name': 'custard', 'aliases': ['flan']},
      '1f36d': {'canonical_name': 'lollipop', 'aliases': []},
      '1f36c': {'canonical_name': 'candy', 'aliases': []},
      '1f36b': {'canonical_name': 'chocolate', 'aliases': []},
      '1f37f': {'canonical_name': 'popcorn', 'aliases': []},
      # donut dominates doughnut on
      # https://trends.google.com/trends/explore?q=doughnut,donut
      '1f369': {'canonical_name': 'donut', 'aliases': ['doughnut']},
      '1f36a': {'canonical_name': 'cookie', 'aliases': []},
      '1f95b': {'canonical_name': 'milk', 'aliases': ['glass_of_milk']},
      '1f37c': {'canonical_name': 'baby_bottle', 'aliases': []},
      '2615': {'canonical_name': 'coffee', 'aliases': []},
      '1f375': {'canonical_name': 'tea', 'aliases': []},
      '1f376': {'canonical_name': 'sake', 'aliases': []},
      '1f37a': {'canonical_name': 'beer', 'aliases': []},
      '1f37b': {'canonical_name': 'beers', 'aliases': []},
      '1f942': {'canonical_name': 'clink', 'aliases': ['toast']},
      '1f377': {'canonical_name': 'wine', 'aliases': []},
      # tumbler means something different in india, and don't want to use
      # shot_glass given our policy of using school-age-appropriate terms
      '1f943': {'canonical_name': 'small_glass', 'aliases': []},
      '1f378': {'canonical_name': 'cocktail', 'aliases': []},
      '1f379': {'canonical_name': 'tropical_drink', 'aliases': []},
      '1f37e': {'canonical_name': 'champagne', 'aliases': []},
      '1f944': {'canonical_name': 'spoon', 'aliases': []},
      # Added eating_utensils so this would show up in typeahead for eat.
      '1f374': {'canonical_name': 'fork_and_knife', 'aliases': ['eating_utensils']},
      # Seems like the best emoji for hungry and meal. fork_and_knife_and_plate
      # is from gemoji/unicode, and I think is better than the shorter iamcal
      # version in this case. The rest just seemed like good additions.
      '1f37d': {'canonical_name': 'hungry', 'aliases': ['meal', 'table_setting', 'fork_and_knife_with_plate', 'lets_eat']},    # ignorelongline
      # most people interested in this sport call it football
      '26bd': {'canonical_name': 'football', 'aliases': ['soccer']},
      '1f3c0': {'canonical_name': 'basketball', 'aliases': []},
      # to distinguish from Activity/1, but is also the unicode name
      '1f3c8': {'canonical_name': 'american_football', 'aliases': []},
      '26be': {'canonical_name': 'baseball', 'aliases': []},
      '1f3be': {'canonical_name': 'tennis', 'aliases': []},
      '1f3d0': {'canonical_name': 'volleyball', 'aliases': []},
      '1f3c9': {'canonical_name': 'rugby', 'aliases': []},
      # https://emojipedia.org/billiards/ suggests this is actually used for
      # billiards, not for "unlucky" or "losing" or some other connotation of
      # 8ball. The unicode name is billiards.
      '1f3b1': {'canonical_name': 'billiards', 'aliases': ['pool', '8_ball']},
      # ping pong is the unicode name, and seems slightly more popular on
      # https://trends.google.com/trends/explore?q=table%20tennis,ping%20pong
      '1f3d3': {'canonical_name': 'ping_pong', 'aliases': ['table_tennis']},
      '1f3f8': {'canonical_name': 'badminton', 'aliases': []},
      # gooooooooal seems more useful of a name, though arguably this isn't the
      # best emoji for it
      '1f945': {'canonical_name': 'gooooooooal', 'aliases': ['goal']},
      '1f3d2': {'canonical_name': 'ice_hockey', 'aliases': []},
      '1f3d1': {'canonical_name': 'field_hockey', 'aliases': []},
      # would say bat, but taken by Nature/30
      '1f3cf': {'canonical_name': 'cricket', 'aliases': ['cricket_bat']},
      # hole_in_one seems like a more useful name to have. Sent golf to
      # Activity/39
      '26f3': {'canonical_name': 'hole_in_one', 'aliases': []},
      # archery seems like a reasonable addition
      '1f3f9': {'canonical_name': 'bow_and_arrow', 'aliases': ['archery']},
      '1f3a3': {'canonical_name': 'fishing', 'aliases': []},
      '1f94a': {'canonical_name': 'boxing_glove', 'aliases': []},
      # keikogi and dogi are the actual names for this, I believe. black_belt is
      # I think a more useful name here
      '1f94b': {'canonical_name': 'black_belt', 'aliases': ['keikogi', 'dogi', 'martial_arts']},
      '26f8': {'canonical_name': 'ice_skate', 'aliases': []},
      '1f3bf': {'canonical_name': 'ski', 'aliases': []},
      '26f7': {'canonical_name': 'skier', 'aliases': []},
      '1f3c2': {'canonical_name': 'snowboarder', 'aliases': []},
      # lift is both what lifters call it, and potentially can be used more
      # generally than weight_lift. The others seemed like good additions.
      '1f3cb': {'canonical_name': 'lift', 'aliases': ['work_out', 'weight_lift', 'gym']},
      # The decisions on tenses here and in the rest of the sports section are
      # mostly from gut feel. The unicode itself is all over the place.
      '1f93a': {'canonical_name': 'fencing', 'aliases': []},
      '1f93c': {'canonical_name': 'wrestling', 'aliases': []},
      # seemed like reasonable additions
      '1f938': {'canonical_name': 'cartwheel', 'aliases': ['acrobatics', 'gymnastics', 'tumbling']},
      # seemed the best emoji for sports
      '26f9': {'canonical_name': 'ball', 'aliases': ['sports']},
      '1f93e': {'canonical_name': 'handball', 'aliases': []},
      '1f3cc': {'canonical_name': 'golf', 'aliases': []},
      '1f3c4': {'canonical_name': 'surf', 'aliases': []},
      '1f3ca': {'canonical_name': 'swim', 'aliases': []},
      '1f93d': {'canonical_name': 'water_polo', 'aliases': []},
      # rest seem like reasonable additions
      '1f6a3': {'canonical_name': 'rowboat', 'aliases': ['crew', 'sculling', 'rowing']},
      # horse_riding seems like a reasonable addition
      '1f3c7': {'canonical_name': 'horse_racing', 'aliases': ['horse_riding']},
      # at least in the US: this = cyclist, Activity/53 = mountain biker, and
      # motorcyclist = biker. Mainly from googling around and personal
      # experience. E.g. https://grammarist.com/usage/cyclist-biker/ for cyclist
      # and biker,
      # https://www.theguardian.com/lifeandstyle/2010/oct/24/bike-snobs-guide-cycling-tribes
      # for mountain biker (I've never heard the term "mountain cyclist", and
      # they are the only group on that page that gets "biker" instead of
      # "cyclist")
      '1f6b4': {'canonical_name': 'cyclist', 'aliases': []},
      # see Activity/51
      '1f6b5': {'canonical_name': 'mountain_biker', 'aliases': []},
      '1f3bd': {'canonical_name': 'running_shirt', 'aliases': []},
      # I feel like people call sports medals "medals", and military medals
      # "military medals". Also see Activity/56
      '1f3c5': {'canonical_name': 'medal', 'aliases': []},
      # See Activity/55. military_medal is the gemoji/unicode
      '1f396': {'canonical_name': 'military_medal', 'aliases': []},
      # gold and number_one seem like good additions
      '1f947': {'canonical_name': 'first_place', 'aliases': ['gold', 'number_one']},
      # to parallel Activity/57
      '1f948': {'canonical_name': 'second_place', 'aliases': ['silver']},
      # to parallel Activity/57
      '1f949': {'canonical_name': 'third_place', 'aliases': ['bronze']},
      # seemed the best emoji for winner
      '1f3c6': {'canonical_name': 'trophy', 'aliases': ['winner']},
      '1f3f5': {'canonical_name': 'rosette', 'aliases': []},
      '1f397': {'canonical_name': 'reminder_ribbon', 'aliases': []},
      # don't need ticket and admission_ticket (see Activity/64), so made one of
      # them :pass:.
      '1f3ab': {'canonical_name': 'pass', 'aliases': []},
      # see Activity/63
      '1f39f': {'canonical_name': 'ticket', 'aliases': []},
      '1f3aa': {'canonical_name': 'circus', 'aliases': []},
      '1f939': {'canonical_name': 'juggling', 'aliases': []},
      # rest seem like good additions
      '1f3ad': {'canonical_name': 'performing_arts', 'aliases': ['drama', 'theater']},
      # rest seem like good additions
      '1f3a8': {'canonical_name': 'art', 'aliases': ['palette', 'painting']},
      # action seems more useful than clapper, and clapper doesn't seem like that
      # common of a term
      '1f3ac': {'canonical_name': 'action', 'aliases': []},
      # seem like good additions
      '1f3a4': {'canonical_name': 'microphone', 'aliases': ['mike', 'mic']},
      '1f3a7': {'canonical_name': 'headphones', 'aliases': []},
      '1f3bc': {'canonical_name': 'musical_score', 'aliases': []},
      # piano seems more useful than musical_keyboard
      '1f3b9': {'canonical_name': 'piano', 'aliases': ['musical_keyboard']},
      '1f941': {'canonical_name': 'drum', 'aliases': []},
      '1f3b7': {'canonical_name': 'saxophone', 'aliases': []},
      '1f3ba': {'canonical_name': 'trumpet', 'aliases': []},
      '1f3b8': {'canonical_name': 'guitar', 'aliases': []},
      '1f3bb': {'canonical_name': 'violin', 'aliases': []},
      # dice seems more useful
      '1f3b2': {'canonical_name': 'dice', 'aliases': ['die']},
      # direct_hit from gemoji/unicode, and seems more useful. bulls_eye seemed
      # like a reasonable addition
      '1f3af': {'canonical_name': 'direct_hit', 'aliases': ['darts', 'bulls_eye']},
      # strike seemed more useful than bowling
      '1f3b3': {'canonical_name': 'strike', 'aliases': ['bowling']},
      '1f3ae': {'canonical_name': 'video_game', 'aliases': []},
      # gambling seemed more useful than slot_machine
      '1f3b0': {'canonical_name': 'slot_machine', 'aliases': []},
      # the google emoji for this is not red
      '1f697': {'canonical_name': 'car', 'aliases': []},
      # rideshare seems like a reasonable addition
      '1f695': {'canonical_name': 'taxi', 'aliases': ['rideshare']},
      # the google emoji for this is not blue. recreational_vehicle is from
      # gemoji/unicode, jeep seemed like a good addition
      '1f699': {'canonical_name': 'recreational_vehicle', 'aliases': ['jeep']},
      # school_bus seemed like a reasonable addition, even though the twitter
      # glyph for this doesn't really look like a school bus
      '1f68c': {'canonical_name': 'bus', 'aliases': ['school_bus']},
      '1f68e': {'canonical_name': 'trolley', 'aliases': []},
      '1f3ce': {'canonical_name': 'racecar', 'aliases': []},
      '1f693': {'canonical_name': 'police_car', 'aliases': []},
      '1f691': {'canonical_name': 'ambulance', 'aliases': []},
      # https://trends.google.com/trends/explore?q=fire%20truck,fire%20engine
      '1f692': {'canonical_name': 'fire_truck', 'aliases': ['fire_engine']},
      '1f690': {'canonical_name': 'minibus', 'aliases': []},
      # moving_truck and truck for Places/11 and Places/12 seem much better than
      # the iamcal names
      '1f69a': {'canonical_name': 'moving_truck', 'aliases': []},
      # see Places/11 for truck. Rest seem reasonable additions.
      '1f69b': {'canonical_name': 'truck', 'aliases': ['tractor-trailer', 'big_rig', 'semi_truck', 'transport_truck']},    # ignorelongline
      '1f69c': {'canonical_name': 'tractor', 'aliases': []},
      # kick_scooter and scooter seem better for Places/14 and Places /16 than
      # scooter and motor_scooter.
      '1f6f4': {'canonical_name': 'kick_scooter', 'aliases': []},
      '1f6b2': {'canonical_name': 'bike', 'aliases': ['bicycle']},
      # see Places/14. Called motor_bike (or bike) in India
      '1f6f5': {'canonical_name': 'scooter', 'aliases': ['motor_bike']},
      '1f3cd': {'canonical_name': 'motorcycle', 'aliases': []},
      # siren seems more useful. alert seems like a reasonable addition
      '1f6a8': {'canonical_name': 'siren', 'aliases': ['rotating_light', 'alert']},
      '1f694': {'canonical_name': 'oncoming_police_car', 'aliases': []},
      '1f68d': {'canonical_name': 'oncoming_bus', 'aliases': []},
      # car to parallel e.g. Places/1
      '1f698': {'canonical_name': 'oncoming_car', 'aliases': ['oncoming_automobile']},
      '1f696': {'canonical_name': 'oncoming_taxi', 'aliases': []},
      # ski_lift seems like a good addition
      '1f6a1': {'canonical_name': 'aerial_tramway', 'aliases': ['ski_lift']},
      # gondola seems more useful
      '1f6a0': {'canonical_name': 'gondola', 'aliases': ['mountain_cableway']},
      '1f69f': {'canonical_name': 'suspension_railway', 'aliases': []},
      # train_car seems like a reasonable addition
      '1f683': {'canonical_name': 'railway_car', 'aliases': ['train_car']},
      # this does not seem like a good emoji for train, especially compared to
      # Places/33. streetcar seems like a good addition.
      '1f68b': {'canonical_name': 'tram', 'aliases': ['streetcar']},
      '1f69e': {'canonical_name': 'mountain_railway', 'aliases': []},
      # elevated_train seems like a reasonable addition
      '1f69d': {'canonical_name': 'monorail', 'aliases': ['elevated_train']},
      # from gemoji/unicode. Also, don't thin we need two bullettrain's
      '1f684': {'canonical_name': 'high_speed_train', 'aliases': []},
      # google, wikipedia, etc prefer bullet train to bullettrain
      '1f685': {'canonical_name': 'bullet_train', 'aliases': []},
      '1f688': {'canonical_name': 'light_rail', 'aliases': []},
      '1f682': {'canonical_name': 'train', 'aliases': ['steam_locomotive']},
      # oncoming_train seems better than train2
      '1f686': {'canonical_name': 'oncoming_train', 'aliases': []},
      # saving metro for Symbols/108. The tunnel makes subway more appropriate
      # anyway.
      '1f687': {'canonical_name': 'subway', 'aliases': []},
      # all the glyphs of oncoming vehicles have names like oncoming_*. The
      # alternate names are to parallel the alternates to Places/27.
      '1f68a': {'canonical_name': 'oncoming_tram', 'aliases': ['oncoming_streetcar', 'oncoming_trolley']},
      '1f689': {'canonical_name': 'station', 'aliases': []},
      '1f681': {'canonical_name': 'helicopter', 'aliases': []},
      '1f6e9': {'canonical_name': 'small_airplane', 'aliases': []},
      '2708': {'canonical_name': 'airplane', 'aliases': []},
      # take_off seems more useful than airplane_departure. departure also seems
      # more useful than airplane_departure. Arguably departure should be the
      # primary, since arrival is probably more useful than landing in Places/42,
      # but going with this for now.
      '1f6eb': {'canonical_name': 'take_off', 'aliases': ['departure', 'airplane_departure']},
      # parallel to Places/41
      '1f6ec': {'canonical_name': 'landing', 'aliases': ['arrival', 'airplane_arrival']},
      '1f680': {'canonical_name': 'rocket', 'aliases': []},
      '1f6f0': {'canonical_name': 'satellite', 'aliases': []},
      '1f4ba': {'canonical_name': 'seat', 'aliases': []},
      '1f6f6': {'canonical_name': 'canoe', 'aliases': []},
      '26f5': {'canonical_name': 'boat', 'aliases': ['sailboat']},
      '1f6e5': {'canonical_name': 'motor_boat', 'aliases': []},
      '1f6a4': {'canonical_name': 'speedboat', 'aliases': []},
      # yacht and cruise seem like reasonable additions
      '1f6f3': {'canonical_name': 'passenger_ship', 'aliases': ['yacht', 'cruise']},
      '26f4': {'canonical_name': 'ferry', 'aliases': []},
      '1f6a2': {'canonical_name': 'ship', 'aliases': []},
      '2693': {'canonical_name': 'anchor', 'aliases': []},
      # there already is a construction in Places/82, and work_in_progress seems
      # like a useful thing to have. Construction_zone seems better than the
      # unicode construction_sign, and is there partly so this autocompletes for
      # construction.
      '1f6a7': {'canonical_name': 'work_in_progress', 'aliases': ['construction_zone']},
      # alternates from https://emojipedia.org/fuel-pump/. unicode is fuel_pump,
      # not fuelpump
      '26fd': {'canonical_name': 'fuel_pump', 'aliases': ['gas_pump', 'petrol_pump']},
      # not sure why iamcal removed the space
      '1f68f': {'canonical_name': 'bus_stop', 'aliases': []},
      # https://emojipedia.org/vertical-traffic-light/ thinks this is the more
      # common of the two traffic lights, so putting traffic_light on this one
      '1f6a6': {'canonical_name': 'traffic_light', 'aliases': ['vertical_traffic_light']},
      # see Places/57
      '1f6a5': {'canonical_name': 'horizontal_traffic_light', 'aliases': []},
      # road_trip from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
      '1f5fa': {'canonical_name': 'map', 'aliases': ['world_map', 'road_trip']},
      # rock_carving, statue, and tower seem more general and less culturally
      # specific, for Places/60, 61, and 63.
      '1f5ff': {'canonical_name': 'rock_carving', 'aliases': ['moyai']},
      # new_york from https://emojipedia.org/statue-of-liberty/. see Places/60
      # for statue
      '1f5fd': {'canonical_name': 'statue', 'aliases': ['new_york', 'statue_of_liberty']},
      '26f2': {'canonical_name': 'fountain', 'aliases': []},
      # see Places/60
      '1f5fc': {'canonical_name': 'tower', 'aliases': ['tokyo_tower']},
      # choosing this as the castle since castles are a way bigger thing in
      # europe than japan, and shiro is a pretty reasonable name for Places/65
      '1f3f0': {'canonical_name': 'castle', 'aliases': []},
      # see Places/64
      '1f3ef': {'canonical_name': 'shiro', 'aliases': []},
      '1f3df': {'canonical_name': 'stadium', 'aliases': []},
      '1f3a1': {'canonical_name': 'ferris_wheel', 'aliases': []},
      '1f3a2': {'canonical_name': 'roller_coaster', 'aliases': []},
      # merry_go_round seems like a good addition
      '1f3a0': {'canonical_name': 'carousel', 'aliases': ['merry_go_round']},
      # beach_umbrella seems more useful
      '26f1': {'canonical_name': 'beach_umbrella', 'aliases': []},
      '1f3d6': {'canonical_name': 'beach', 'aliases': []},
      '1f3dd': {'canonical_name': 'island', 'aliases': []},
      '26f0': {'canonical_name': 'mountain', 'aliases': []},
      '1f3d4': {'canonical_name': 'snowy_mountain', 'aliases': []},
      # already lots of other mountains, otherwise would rename this like
      # Places/60
      '1f5fb': {'canonical_name': 'mount_fuji', 'aliases': []},
      '1f30b': {'canonical_name': 'volcano', 'aliases': []},
      '1f3dc': {'canonical_name': 'desert', 'aliases': []},
      # campsite from https://emojipedia.org/camping/, I think Places/79 is a
      # better camping
      '1f3d5': {'canonical_name': 'campsite', 'aliases': []},
      '26fa': {'canonical_name': 'tent', 'aliases': ['camping']},
      '1f6e4': {'canonical_name': 'railway_track', 'aliases': ['train_tracks']},
      # road is used much more frequently at
      # https://trends.google.com/trends/explore?q=road,motorway
      '1f6e3': {'canonical_name': 'road', 'aliases': ['motorway']},
      '1f3d7': {'canonical_name': 'construction', 'aliases': []},
      '1f3ed': {'canonical_name': 'factory', 'aliases': []},
      '1f3e0': {'canonical_name': 'house', 'aliases': []},
      # suburb seems more useful
      '1f3e1': {'canonical_name': 'suburb', 'aliases': []},
      '1f3d8': {'canonical_name': 'houses', 'aliases': []},
      # condemned seemed like a good addition
      '1f3da': {'canonical_name': 'derelict_house', 'aliases': ['condemned']},
      '1f3e2': {'canonical_name': 'office', 'aliases': []},
      '1f3ec': {'canonical_name': 'department_store', 'aliases': []},
      '1f3e3': {'canonical_name': 'japan_post', 'aliases': []},
      '1f3e4': {'canonical_name': 'post_office', 'aliases': []},
      '1f3e5': {'canonical_name': 'hospital', 'aliases': []},
      '1f3e6': {'canonical_name': 'bank', 'aliases': []},
      '1f3e8': {'canonical_name': 'hotel', 'aliases': []},
      '1f3ea': {'canonical_name': 'convenience_store', 'aliases': []},
      '1f3eb': {'canonical_name': 'school', 'aliases': []},
      '1f3e9': {'canonical_name': 'love_hotel', 'aliases': []},
      '1f492': {'canonical_name': 'wedding', 'aliases': []},
      '1f3db': {'canonical_name': 'classical_building', 'aliases': []},
      '26ea': {'canonical_name': 'church', 'aliases': []},
      '1f54c': {'canonical_name': 'mosque', 'aliases': []},
      '1f54d': {'canonical_name': 'synagogue', 'aliases': []},
      '1f54b': {'canonical_name': 'kaaba', 'aliases': []},
      '26e9': {'canonical_name': 'shinto_shrine', 'aliases': []},
      '1f5fe': {'canonical_name': 'japan', 'aliases': []},
      # rice_scene seems like a strange name to have. gemoji alternate is
      # moon_ceremony
      '1f391': {'canonical_name': 'moon_ceremony', 'aliases': []},
      '1f3de': {'canonical_name': 'national_park', 'aliases': []},
      # ocean_sunrise to parallel Places/109
      '1f305': {'canonical_name': 'sunrise', 'aliases': ['ocean_sunrise']},
      '1f304': {'canonical_name': 'mountain_sunrise', 'aliases': []},
      # shooting_star and wish seem like way better descriptions. gemoji/unicode
      # is shooting_star
      '1f320': {'canonical_name': 'shooting_star', 'aliases': ['wish']},
      '1f387': {'canonical_name': 'sparkler', 'aliases': []},
      '1f386': {'canonical_name': 'fireworks', 'aliases': []},
      '1f307': {'canonical_name': 'city_sunrise', 'aliases': []},
      '1f306': {'canonical_name': 'sunset', 'aliases': []},
      # city and skyline seem more useful than cityscape
      '1f3d9': {'canonical_name': 'city', 'aliases': ['skyline']},
      '1f303': {'canonical_name': 'night', 'aliases': []},
      # night_sky seems like a good addition
      '1f30c': {'canonical_name': 'milky_way', 'aliases': ['night_sky']},
      '1f309': {'canonical_name': 'bridge', 'aliases': []},
      '1f301': {'canonical_name': 'foggy', 'aliases': []},
      '231a': {'canonical_name': 'watch', 'aliases': []},
      # unicode/gemoji is mobile_phone. The rest seem like good additions
      '1f4f1': {'canonical_name': 'mobile_phone', 'aliases': ['smartphone', 'iphone', 'android']},
      '1f4f2': {'canonical_name': 'calling', 'aliases': []},
      # gemoji has laptop, even though the google emoji for this does not look
      # like a laptop
      '1f4bb': {'canonical_name': 'computer', 'aliases': ['laptop']},
      '2328': {'canonical_name': 'keyboard', 'aliases': []},
      '1f5a5': {'canonical_name': 'desktop_computer', 'aliases': []},
      '1f5a8': {'canonical_name': 'printer', 'aliases': []},
      # gemoji/unicode is computer_mouse
      '1f5b1': {'canonical_name': 'computer_mouse', 'aliases': []},
      '1f5b2': {'canonical_name': 'trackball', 'aliases': []},
      # arcade seems like a reasonable addition
      '1f579': {'canonical_name': 'joystick', 'aliases': ['arcade']},
      # vise seems like a reasonable addition
      '1f5dc': {'canonical_name': 'compression', 'aliases': ['vise']},
      # gold record seems more useful, idea came from
      # https://11points.com/11-emoji-different-meanings-think/
      '1f4bd': {'canonical_name': 'gold_record', 'aliases': ['minidisc']},
      '1f4be': {'canonical_name': 'floppy_disk', 'aliases': []},
      '1f4bf': {'canonical_name': 'cd', 'aliases': []},
      '1f4c0': {'canonical_name': 'dvd', 'aliases': []},
      # videocassette from gemoji/unicode
      '1f4fc': {'canonical_name': 'vhs', 'aliases': ['videocassette']},
      '1f4f7': {'canonical_name': 'camera', 'aliases': []},
      # both of these seem more useful than camera_with_flash
      '1f4f8': {'canonical_name': 'taking_a_picture', 'aliases': ['say_cheese']},
      # video_recorder seems like a reasonable addition
      '1f4f9': {'canonical_name': 'video_camera', 'aliases': ['video_recorder']},
      '1f3a5': {'canonical_name': 'movie_camera', 'aliases': []},
      # seems like the best emoji for movie
      '1f4fd': {'canonical_name': 'projector', 'aliases': ['movie']},
      '1f39e': {'canonical_name': 'film', 'aliases': []},
      # both of these seem more useful than telephone_receiver
      '1f4de': {'canonical_name': 'landline', 'aliases': ['home_phone']},
      '260e': {'canonical_name': 'phone', 'aliases': ['telephone']},
      '1f4df': {'canonical_name': 'pager', 'aliases': []},
      '1f4e0': {'canonical_name': 'fax', 'aliases': []},
      '1f4fa': {'canonical_name': 'tv', 'aliases': ['television']},
      '1f4fb': {'canonical_name': 'radio', 'aliases': []},
      '1f399': {'canonical_name': 'studio_microphone', 'aliases': []},
      # volume seems more useful
      '1f39a': {'canonical_name': 'volume', 'aliases': ['level_slider']},
      '1f39b': {'canonical_name': 'control_knobs', 'aliases': []},
      '23f1': {'canonical_name': 'stopwatch', 'aliases': []},
      '23f2': {'canonical_name': 'timer', 'aliases': []},
      '23f0': {'canonical_name': 'alarm_clock', 'aliases': []},
      '1f570': {'canonical_name': 'mantelpiece_clock', 'aliases': []},
      # times_up and time_ticking seem more useful than the hourglass names
      '231b': {'canonical_name': 'times_up', 'aliases': ['hourglass_done']},
      # seems like the better hourglass. Also see Objects/36
      '23f3': {'canonical_name': 'time_ticking', 'aliases': ['hourglass']},
      '1f4e1': {'canonical_name': 'satellite_antenna', 'aliases': []},
      # seems like a reasonable addition
      '1f50b': {'canonical_name': 'battery', 'aliases': ['full_battery']},
      '1f50c': {'canonical_name': 'electric_plug', 'aliases': []},
      # light_bulb seems better and from unicode/gemoji. idea seems like a good
      # addition
      '1f4a1': {'canonical_name': 'light_bulb', 'aliases': ['bulb', 'idea']},
      '1f526': {'canonical_name': 'flashlight', 'aliases': []},
      '1f56f': {'canonical_name': 'candle', 'aliases': []},
      # seems like a reasonable addition
      '1f5d1': {'canonical_name': 'wastebasket', 'aliases': ['trash_can']},
      # https://www.iemoji.com/view/emoji/1173/objects/oil-drum
      '1f6e2': {'canonical_name': 'oil_drum', 'aliases': ['commodities']},
      # losing money from https://emojipedia.org/money-with-wings/,
      # easy_come_easy_go seems like a reasonable addition
      '1f4b8': {'canonical_name': 'losing_money', 'aliases': ['easy_come_easy_go', 'money_with_wings']},
      # I think the _bills, _banknotes etc versions of these are arguably more
      # fun to use in chat, and certainly match the glyphs better
      '1f4b5': {'canonical_name': 'dollar_bills', 'aliases': []},
      '1f4b4': {'canonical_name': 'yen_banknotes', 'aliases': []},
      '1f4b6': {'canonical_name': 'euro_banknotes', 'aliases': []},
      '1f4b7': {'canonical_name': 'pound_notes', 'aliases': []},
      '1f4b0': {'canonical_name': 'money', 'aliases': []},
      '1f4b3': {'canonical_name': 'credit_card', 'aliases': ['debit_card']},
      '1f48e': {'canonical_name': 'gem', 'aliases': ['crystal']},
      # justice seems more useful
      '2696': {'canonical_name': 'justice', 'aliases': ['scales', 'balance']},
      # fixing, at_work, and working_on_it seem like useful concepts for
      # workplace chat
      '1f527': {'canonical_name': 'fixing', 'aliases': ['wrench']},
      '1f528': {'canonical_name': 'hammer', 'aliases': ['maintenance', 'handyman', 'handywoman']},
      '2692': {'canonical_name': 'at_work', 'aliases': ['hammer_and_pick']},
      # something that might be useful for chat.zulip.org, even
      '1f6e0': {'canonical_name': 'working_on_it', 'aliases': ['hammer_and_wrench', 'tools']},
      '26cf': {'canonical_name': 'mine', 'aliases': ['pick']},
      # screw is somewhat inappropriate, but not openly so, so leaving it in
      '1f529': {'canonical_name': 'nut_and_bolt', 'aliases': ['screw']},
      '2699': {'canonical_name': 'gear', 'aliases': ['settings', 'mechanical', 'engineer']},
      '26d3': {'canonical_name': 'chains', 'aliases': []},
      '1f52b': {'canonical_name': 'gun', 'aliases': []},
      '1f4a3': {'canonical_name': 'bomb', 'aliases': []},
      # betrayed from https://www.iemoji.com/view/emoji/786/objects/kitchen-knife
      '1f52a': {'canonical_name': 'knife', 'aliases': ['hocho', 'betrayed']},
      # rated_for_violence from
      # https://www.iemoji.com/view/emoji/1085/objects/dagger. hate (also
      # suggested there) seems too strong, as does just "violence".
      '1f5e1': {'canonical_name': 'dagger', 'aliases': ['rated_for_violence']},
      '2694': {'canonical_name': 'duel', 'aliases': ['swords']},
      '1f6e1': {'canonical_name': 'shield', 'aliases': []},
      '1f6ac': {'canonical_name': 'smoking', 'aliases': []},
      '26b0': {'canonical_name': 'coffin', 'aliases': ['burial', 'grave']},
      '26b1': {'canonical_name': 'funeral_urn', 'aliases': ['cremation']},
      # amphora is too obscure, I think
      '1f3fa': {'canonical_name': 'vase', 'aliases': ['amphora']},
      '1f52e': {'canonical_name': 'crystal_ball', 'aliases': ['oracle', 'future', 'fortune_telling']},
      '1f4ff': {'canonical_name': 'prayer_beads', 'aliases': []},
      '1f488': {'canonical_name': 'barber', 'aliases': ['striped_pole']},
      # alchemy seems more useful and less obscure
      '2697': {'canonical_name': 'alchemy', 'aliases': ['alembic']},
      '1f52d': {'canonical_name': 'telescope', 'aliases': []},
      # science seems useful to have. scientist inspired by
      # https://www.iemoji.com/view/emoji/787/objects/microscope
      '1f52c': {'canonical_name': 'science', 'aliases': ['microscope', 'scientist']},
      '1f573': {'canonical_name': 'hole', 'aliases': []},
      '1f48a': {'canonical_name': 'medicine', 'aliases': ['pill']},
      '1f489': {'canonical_name': 'injection', 'aliases': ['syringe']},
      '1f321': {'canonical_name': 'temperature', 'aliases': ['thermometer', 'warm']},
      '1f6bd': {'canonical_name': 'toilet', 'aliases': []},
      '1f6b0': {'canonical_name': 'potable_water', 'aliases': ['tap_water', 'drinking_water']},
      '1f6bf': {'canonical_name': 'shower', 'aliases': []},
      '1f6c1': {'canonical_name': 'bathtub', 'aliases': []},
      '1f6c0': {'canonical_name': 'bath', 'aliases': []},
      # reception and services from
      # https://www.iemoji.com/view/emoji/1169/objects/bellhop-bell
      '1f6ce': {'canonical_name': 'bellhop_bell', 'aliases': ['reception', 'services', 'ding']},
      '1f511': {'canonical_name': 'key', 'aliases': []},
      # encrypted from https://www.iemoji.com/view/emoji/1081/objects/old-key,
      # secret from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
      '1f5dd': {'canonical_name': 'secret', 'aliases': ['dungeon', 'old_key', 'encrypted', 'clue', 'hint']},
      '1f6aa': {'canonical_name': 'door', 'aliases': []},
      '1f6cb': {'canonical_name': 'living_room', 'aliases': ['furniture', 'couch_and_lamp', 'lifestyles']},
      '1f6cf': {'canonical_name': 'bed', 'aliases': ['bedroom']},
      # guestrooms from iemoji, would add hotel but taken by Places/94
      '1f6cc': {'canonical_name': 'in_bed', 'aliases': ['accommodations', 'guestrooms']},
      '1f5bc': {'canonical_name': 'picture', 'aliases': ['framed_picture']},
      '1f6cd': {'canonical_name': 'shopping_bags', 'aliases': []},
      # https://trends.google.com/trends/explore?q=shopping%20cart,shopping%20trolley
      '1f6d2': {'canonical_name': 'shopping_cart', 'aliases': ['shopping_trolley']},
      '1f381': {'canonical_name': 'gift', 'aliases': ['present']},
      # seemed like the best celebration
      '1f388': {'canonical_name': 'balloon', 'aliases': ['celebration']},
      # from gemoji/unicode
      '1f38f': {'canonical_name': 'carp_streamer', 'aliases': ['flags']},
      '1f380': {'canonical_name': 'ribbon', 'aliases': ['decoration']},
      '1f38a': {'canonical_name': 'confetti', 'aliases': ['party_ball']},
      # seemed like the best congratulations
      '1f389': {'canonical_name': 'tada', 'aliases': ['congratulations']},
      '1f38e': {'canonical_name': 'dolls', 'aliases': []},
      '1f3ee': {'canonical_name': 'lantern', 'aliases': ['izakaya_lantern']},
      '1f390': {'canonical_name': 'wind_chime', 'aliases': []},
      '2709': {'canonical_name': 'email', 'aliases': ['envelope', 'mail']},
      # seems useful for chat?
      '1f4e9': {'canonical_name': 'mail_sent', 'aliases': ['sealed']},
      '1f4e8': {'canonical_name': 'mail_received', 'aliases': []},
      '1f4e7': {'canonical_name': 'e-mail', 'aliases': []},
      '1f48c': {'canonical_name': 'love_letter', 'aliases': []},
      '1f4e5': {'canonical_name': 'inbox', 'aliases': []},
      '1f4e4': {'canonical_name': 'outbox', 'aliases': []},
      '1f4e6': {'canonical_name': 'package', 'aliases': []},
      # price_tag from iemoji
      '1f3f7': {'canonical_name': 'label', 'aliases': ['tag', 'price_tag']},
      '1f4ea': {'canonical_name': 'closed_mailbox', 'aliases': []},
      '1f4eb': {'canonical_name': 'mailbox', 'aliases': []},
      '1f4ec': {'canonical_name': 'unread_mail', 'aliases': []},
      '1f4ed': {'canonical_name': 'inbox_zero', 'aliases': ['empty_mailbox', 'no_mail']},
      '1f4ee': {'canonical_name': 'mail_dropoff', 'aliases': []},
      '1f4ef': {'canonical_name': 'horn', 'aliases': []},
      '1f4dc': {'canonical_name': 'scroll', 'aliases': []},
      # receipt seems more useful?
      '1f4c3': {'canonical_name': 'receipt', 'aliases': []},
      '1f4c4': {'canonical_name': 'document', 'aliases': ['paper', 'file', 'page']},
      '1f4d1': {'canonical_name': 'place_holder', 'aliases': []},
      '1f4ca': {'canonical_name': 'bar_chart', 'aliases': []},
      # seems like the best chart
      '1f4c8': {'canonical_name': 'chart', 'aliases': ['upwards_trend', 'growing', 'increasing']},
      '1f4c9': {'canonical_name': 'downwards_trend', 'aliases': ['shrinking', 'decreasing']},
      '1f5d2': {'canonical_name': 'spiral_notepad', 'aliases': []},
      # '1f5d3': {'canonical_name': 'X', 'aliases': ['spiral_calendar_pad']},
      # swapped the following two largely due to the emojione glyphs
      '1f4c6': {'canonical_name': 'date', 'aliases': []},
      '1f4c5': {'canonical_name': 'calendar', 'aliases': []},
      '1f4c7': {'canonical_name': 'rolodex', 'aliases': ['card_index']},
      '1f5c3': {'canonical_name': 'archive', 'aliases': []},
      '1f5f3': {'canonical_name': 'ballot_box', 'aliases': []},
      '1f5c4': {'canonical_name': 'file_cabinet', 'aliases': []},
      '1f4cb': {'canonical_name': 'clipboard', 'aliases': []},
      # don't need two file_folders, so made this organize
      '1f4c1': {'canonical_name': 'organize', 'aliases': ['file_folder']},
      '1f4c2': {'canonical_name': 'folder', 'aliases': []},
      '1f5c2': {'canonical_name': 'sort', 'aliases': []},
      '1f5de': {'canonical_name': 'newspaper', 'aliases': ['swat']},
      '1f4f0': {'canonical_name': 'headlines', 'aliases': []},
      '1f4d3': {'canonical_name': 'notebook', 'aliases': ['composition_book']},
      '1f4d4': {'canonical_name': 'decorative_notebook', 'aliases': []},
      '1f4d2': {'canonical_name': 'ledger', 'aliases': ['spiral_notebook']},
      # the glyphs here are the same as Objects/147-149 (with a different color),
      # for all but google
      '1f4d5': {'canonical_name': 'red_book', 'aliases': ['closed_book']},
      '1f4d7': {'canonical_name': 'green_book', 'aliases': []},
      '1f4d8': {'canonical_name': 'blue_book', 'aliases': []},
      '1f4d9': {'canonical_name': 'orange_book', 'aliases': []},
      '1f4da': {'canonical_name': 'books', 'aliases': []},
      '1f4d6': {'canonical_name': 'book', 'aliases': ['open_book']},
      '1f516': {'canonical_name': 'bookmark', 'aliases': []},
      '1f517': {'canonical_name': 'link', 'aliases': []},
      '1f4ce': {'canonical_name': 'paperclip', 'aliases': ['attachment']},
      # office_supplies from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
      '1f587': {'canonical_name': 'office_supplies', 'aliases': ['paperclip_chain', 'linked']},
      '1f4d0': {'canonical_name': 'carpenter_square', 'aliases': ['triangular_ruler']},
      '1f4cf': {'canonical_name': 'ruler', 'aliases': ['straightedge']},
      '1f4cc': {'canonical_name': 'push_pin', 'aliases': ['thumb_tack']},
      '1f4cd': {'canonical_name': 'pin', 'aliases': ['sewing_pin']},
      '2702': {'canonical_name': 'scissors', 'aliases': []},
      '1f58a': {'canonical_name': 'pen', 'aliases': ['ballpoint_pen']},
      '1f58b': {'canonical_name': 'fountain_pen', 'aliases': []},
      # three of the four emoji sets just have a rightwards-facing objects/162
      # '2712': {'canonical_name': 'X', 'aliases': ['black_nib']},
      '1f58c': {'canonical_name': 'paintbrush', 'aliases': []},
      '1f58d': {'canonical_name': 'crayon', 'aliases': []},
      '1f4dd': {'canonical_name': 'memo', 'aliases': ['note']},
      '270f': {'canonical_name': 'pencil', 'aliases': []},
      '1f50d': {'canonical_name': 'search', 'aliases': ['find', 'magnifying_glass']},
      # '1f50e': {'canonical_name': 'X', 'aliases': ['mag_right']},
      # https://emojipedia.org/lock-with-ink-pen/
      '1f50f': {'canonical_name': 'privacy', 'aliases': ['key_signing', 'digital_security', 'protected']},
      '1f510': {'canonical_name': 'secure', 'aliases': ['lock_with_key', 'safe', 'commitment', 'loyalty']},
      '1f512': {'canonical_name': 'locked', 'aliases': []},
      '1f513': {'canonical_name': 'unlocked', 'aliases': []},
      # seems the best glyph for love and love_you
      '2764': {'canonical_name': 'heart', 'aliases': ['love', 'love_you']},
      '1f49b': {'canonical_name': 'yellow_heart', 'aliases': ['heart_of_gold']},
      '1f49a': {'canonical_name': 'green_heart', 'aliases': ['envy']},
      '1f499': {'canonical_name': 'blue_heart', 'aliases': []},
      '1f49c': {'canonical_name': 'purple_heart', 'aliases': ['bravery']},
      '1f5a4': {'canonical_name': 'black_heart', 'aliases': []},
      '1f494': {'canonical_name': 'broken_heart', 'aliases': ['heartache']},
      '2763': {'canonical_name': 'heart_exclamation', 'aliases': []},
      '1f495': {'canonical_name': 'two_hearts', 'aliases': []},
      '1f49e': {'canonical_name': 'revolving_hearts', 'aliases': []},
      '1f493': {'canonical_name': 'heartbeat', 'aliases': []},
      '1f497': {'canonical_name': 'heart_pulse', 'aliases': ['growing_heart']},
      '1f496': {'canonical_name': 'sparkling_heart', 'aliases': []},
      '1f498': {'canonical_name': 'cupid', 'aliases': ['smitten', 'heart_arrow']},
      '1f49d': {'canonical_name': 'gift_heart', 'aliases': []},
      '1f49f': {'canonical_name': 'heart_box', 'aliases': []},
      '262e': {'canonical_name': 'peace', 'aliases': []},
      '271d': {'canonical_name': 'cross', 'aliases': ['christianity']},
      '262a': {'canonical_name': 'star_and_crescent', 'aliases': ['islam']},
      '1f549': {'canonical_name': 'om', 'aliases': ['hinduism']},
      '2638': {'canonical_name': 'wheel_of_dharma', 'aliases': ['buddhism']},
      '2721': {'canonical_name': 'star_of_david', 'aliases': ['judiasm']},
      # can't find any explanation of this at all. Is an alternate star of david?
      # '1f52f': {'canonical_name': 'X', 'aliases': ['six_pointed_star']},
      '1f54e': {'canonical_name': 'menorah', 'aliases': []},
      '262f': {'canonical_name': 'yin_yang', 'aliases': []},
      '2626': {'canonical_name': 'orthodox_cross', 'aliases': []},
      '1f6d0': {'canonical_name': 'place_of_worship', 'aliases': []},
      '26ce': {'canonical_name': 'ophiuchus', 'aliases': []},
      '2648': {'canonical_name': 'aries', 'aliases': []},
      '2649': {'canonical_name': 'taurus', 'aliases': []},
      '264a': {'canonical_name': 'gemini', 'aliases': []},
      '264b': {'canonical_name': 'cancer', 'aliases': []},
      '264c': {'canonical_name': 'leo', 'aliases': []},
      '264d': {'canonical_name': 'virgo', 'aliases': []},
      '264e': {'canonical_name': 'libra', 'aliases': []},
      '264f': {'canonical_name': 'scorpius', 'aliases': []},
      '2650': {'canonical_name': 'sagittarius', 'aliases': []},
      '2651': {'canonical_name': 'capricorn', 'aliases': []},
      '2652': {'canonical_name': 'aquarius', 'aliases': []},
      '2653': {'canonical_name': 'pisces', 'aliases': []},
      '1f194': {'canonical_name': 'id', 'aliases': []},
      '269b': {'canonical_name': 'atom', 'aliases': ['physics']},
      # japanese symbol
      # '1f251': {'canonical_name': 'X', 'aliases': ['accept']},
      '2622': {'canonical_name': 'radioactive', 'aliases': ['nuclear']},
      '2623': {'canonical_name': 'biohazard', 'aliases': []},
      '1f4f4': {'canonical_name': 'phone_off', 'aliases': []},
      '1f4f3': {'canonical_name': 'vibration_mode', 'aliases': []},
      # '1f236': {'canonical_name': 'X', 'aliases': ['u6709']},
      # '1f21a': {'canonical_name': 'X', 'aliases': ['u7121']},
      # '1f238': {'canonical_name': 'X', 'aliases': ['u7533']},
      # '1f23a': {'canonical_name': 'X', 'aliases': ['u55b6']},
      # '1f237': {'canonical_name': 'X', 'aliases': ['u6708']},
      '2734': {'canonical_name': 'eight_pointed_star', 'aliases': []},
      '1f19a': {'canonical_name': 'vs', 'aliases': []},
      '1f4ae': {'canonical_name': 'white_flower', 'aliases': []},
      # '1f250': {'canonical_name': 'X', 'aliases': ['ideograph_advantage']},
      # japanese character
      # '3299': {'canonical_name': 'X', 'aliases': ['secret']},
      # '3297': {'canonical_name': 'X', 'aliases': ['congratulations']},
      # '1f234': {'canonical_name': 'X', 'aliases': ['u5408']},
      # '1f235': {'canonical_name': 'X', 'aliases': ['u6e80']},
      # '1f239': {'canonical_name': 'X', 'aliases': ['u5272']},
      # '1f232': {'canonical_name': 'X', 'aliases': ['u7981']},
      '1f170': {'canonical_name': 'a', 'aliases': []},
      '1f171': {'canonical_name': 'b', 'aliases': []},
      '1f18e': {'canonical_name': 'ab', 'aliases': []},
      '1f191': {'canonical_name': 'cl', 'aliases': []},
      '1f17e': {'canonical_name': 'o', 'aliases': []},
      '1f198': {'canonical_name': 'sos', 'aliases': []},
      # Symbols/105 seems like a better x, and looks more like the other letters
      '274c': {'canonical_name': 'cross_mark', 'aliases': ['incorrect', 'wrong']},
      '2b55': {'canonical_name': 'circle', 'aliases': []},
      '1f6d1': {'canonical_name': 'stop_sign', 'aliases': ['octagonal_sign']},
      '26d4': {'canonical_name': 'no_entry', 'aliases': ['wrong_way']},
      '1f4db': {'canonical_name': 'name_badge', 'aliases': []},
      '1f6ab': {'canonical_name': 'prohibited', 'aliases': ['not_allowed']},
      '1f4af': {'canonical_name': '100', 'aliases': ['hundred']},
      '1f4a2': {'canonical_name': 'anger', 'aliases': ['bam', 'pow']},
      '2668': {'canonical_name': 'hot_springs', 'aliases': []},
      '1f6b7': {'canonical_name': 'no_pedestrians', 'aliases': []},
      '1f6af': {'canonical_name': 'do_not_litter', 'aliases': []},
      '1f6b3': {'canonical_name': 'no_bicycles', 'aliases': []},
      '1f6b1': {'canonical_name': 'non-potable_water', 'aliases': []},
      '1f51e': {'canonical_name': 'underage', 'aliases': ['nc17']},
      '1f4f5': {'canonical_name': 'no_phones', 'aliases': []},
      '1f6ad': {'canonical_name': 'no_smoking', 'aliases': []},
      '2757': {'canonical_name': 'exclamation', 'aliases': []},
      '2755': {'canonical_name': 'grey_exclamation', 'aliases': []},
      '2753': {'canonical_name': 'question', 'aliases': []},
      '2754': {'canonical_name': 'grey_question', 'aliases': []},
      '203c': {'canonical_name': 'bangbang', 'aliases': ['double_exclamation']},
      '2049': {'canonical_name': 'interrobang', 'aliases': []},
      '1f505': {'canonical_name': 'low_brightness', 'aliases': ['dim']},
      '1f506': {'canonical_name': 'brightness', 'aliases': ['high_brightness']},
      '303d': {'canonical_name': 'part_alternation', 'aliases': []},
      '26a0': {'canonical_name': 'warning', 'aliases': ['caution', 'danger']},
      '1f6b8': {'canonical_name': 'children_crossing', 'aliases': ['school_crossing', 'drive_with_care']},
      '1f531': {'canonical_name': 'trident', 'aliases': []},
      '269c': {'canonical_name': 'fleur_de_lis', 'aliases': []},
      '1f530': {'canonical_name': 'beginner', 'aliases': []},
      '267b': {'canonical_name': 'recycle', 'aliases': []},
      # seems like the best check
      '2705': {'canonical_name': 'check', 'aliases': ['all_good', 'approved']},
      # '1f22f': {'canonical_name': 'X', 'aliases': ['u6307']},
      # stock_market seemed more useful
      '1f4b9': {'canonical_name': 'stock_market', 'aliases': []},
      '2747': {'canonical_name': 'sparkle', 'aliases': []},
      '2733': {'canonical_name': 'eight_spoked_asterisk', 'aliases': []},
      '274e': {'canonical_name': 'x', 'aliases': []},
      '1f310': {'canonical_name': 'www', 'aliases': ['globe']},
      '1f4a0': {'canonical_name': 'cute', 'aliases': ['kawaii', 'diamond_with_a_dot']},
      '24c2': {'canonical_name': 'metro', 'aliases': ['m']},
      '1f300': {'canonical_name': 'cyclone', 'aliases': ['hurricane', 'typhoon']},
      '1f4a4': {'canonical_name': 'zzz', 'aliases': []},
      '1f3e7': {'canonical_name': 'atm', 'aliases': []},
      '1f6be': {'canonical_name': 'wc', 'aliases': ['water_closet']},
      '267f': {'canonical_name': 'accessible', 'aliases': ['wheelchair', 'disabled']},
      '1f17f': {'canonical_name': 'parking', 'aliases': ['p']},
      # '1f233': {'canonical_name': 'X', 'aliases': ['u7a7a']},
      # '1f202': {'canonical_name': 'X', 'aliases': ['sa']},
      '1f6c2': {'canonical_name': 'passport_control', 'aliases': ['immigration']},
      '1f6c3': {'canonical_name': 'customs', 'aliases': []},
      '1f6c4': {'canonical_name': 'baggage_claim', 'aliases': []},
      '1f6c5': {'canonical_name': 'locker', 'aliases': ['locked_bag']},
      '1f6b9': {'canonical_name': 'mens', 'aliases': []},
      '1f6ba': {'canonical_name': 'womens', 'aliases': []},
      # seems more in line with the surrounding bathroom symbols
      '1f6bc': {'canonical_name': 'baby_change_station', 'aliases': ['nursery']},
      '1f6bb': {'canonical_name': 'restroom', 'aliases': []},
      '1f6ae': {'canonical_name': 'put_litter_in_its_place', 'aliases': []},
      '1f3a6': {'canonical_name': 'cinema', 'aliases': ['movie_theater']},
      '1f4f6': {'canonical_name': 'cell_reception', 'aliases': ['signal_strength', 'signal_bars']},
      # '1f201': {'canonical_name': 'X', 'aliases': ['koko']},
      '1f523': {'canonical_name': 'symbols', 'aliases': []},
      '2139': {'canonical_name': 'info', 'aliases': []},
      '1f524': {'canonical_name': 'abc', 'aliases': []},
      '1f521': {'canonical_name': 'abcd', 'aliases': ['alphabet']},
      '1f520': {'canonical_name': 'capital_abcd', 'aliases': ['capital_letters']},
      '1f196': {'canonical_name': 'ng', 'aliases': []},
      # from unicode/gemoji. Saving ok for People/111
      '1f197': {'canonical_name': 'squared_ok', 'aliases': []},
      # from unicode, and to parallel Symbols/135. Saving up for Symbols/171
      '1f199': {'canonical_name': 'squared_up', 'aliases': []},
      '1f192': {'canonical_name': 'cool', 'aliases': []},
      '1f195': {'canonical_name': 'new', 'aliases': []},
      '1f193': {'canonical_name': 'free', 'aliases': []},
      '0030-20e3': {'canonical_name': 'zero', 'aliases': []},
      '0031-20e3': {'canonical_name': 'one', 'aliases': []},
      '0032-20e3': {'canonical_name': 'two', 'aliases': []},
      '0033-20e3': {'canonical_name': 'three', 'aliases': []},
      '0034-20e3': {'canonical_name': 'four', 'aliases': []},
      '0035-20e3': {'canonical_name': 'five', 'aliases': []},
      '0036-20e3': {'canonical_name': 'six', 'aliases': []},
      '0037-20e3': {'canonical_name': 'seven', 'aliases': []},
      '0038-20e3': {'canonical_name': 'eight', 'aliases': []},
      '0039-20e3': {'canonical_name': 'nine', 'aliases': []},
      '1f51f': {'canonical_name': 'ten', 'aliases': []},
      '1f522': {'canonical_name': '1234', 'aliases': ['numbers']},
      '0023-20e3': {'canonical_name': 'hash', 'aliases': []},
      '002a-20e3': {'canonical_name': 'asterisk', 'aliases': []},
      '25b6': {'canonical_name': 'play', 'aliases': []},
      '23f8': {'canonical_name': 'pause', 'aliases': []},
      '23ef': {'canonical_name': 'play_pause', 'aliases': []},
      # stop taken by People/118
      '23f9': {'canonical_name': 'stop_button', 'aliases': []},
      '23fa': {'canonical_name': 'record', 'aliases': []},
      '23ed': {'canonical_name': 'next_track', 'aliases': ['skip_forward']},
      '23ee': {'canonical_name': 'previous_track', 'aliases': ['skip_back']},
      '23e9': {'canonical_name': 'fast_forward', 'aliases': []},
      '23ea': {'canonical_name': 'rewind', 'aliases': ['fast_reverse']},
      '23eb': {'canonical_name': 'double_up', 'aliases': ['fast_up']},
      '23ec': {'canonical_name': 'double_down', 'aliases': ['fast_down']},
      '25c0': {'canonical_name': 'play_reverse', 'aliases': []},
      '1f53c': {'canonical_name': 'upvote', 'aliases': ['up_button', 'increase']},
      '1f53d': {'canonical_name': 'downvote', 'aliases': ['down_button', 'decrease']},
      '27a1': {'canonical_name': 'right', 'aliases': ['east']},
      '2b05': {'canonical_name': 'left', 'aliases': ['west']},
      '2b06': {'canonical_name': 'up', 'aliases': ['north']},
      '2b07': {'canonical_name': 'down', 'aliases': ['south']},
      '2197': {'canonical_name': 'upper_right', 'aliases': ['north_east']},
      '2198': {'canonical_name': 'lower_right', 'aliases': ['south_east']},
      '2199': {'canonical_name': 'lower_left', 'aliases': ['south_west']},
      '2196': {'canonical_name': 'upper_left', 'aliases': ['north_west']},
      '2195': {'canonical_name': 'up_down', 'aliases': []},
      '2194': {'canonical_name': 'left_right', 'aliases': ['swap']},
      '21aa': {'canonical_name': 'forward', 'aliases': ['right_hook']},
      '21a9': {'canonical_name': 'reply', 'aliases': ['left_hook']},
      '2934': {'canonical_name': 'heading_up', 'aliases': []},
      '2935': {'canonical_name': 'heading_down', 'aliases': []},
      '1f500': {'canonical_name': 'shuffle', 'aliases': []},
      '1f501': {'canonical_name': 'repeat', 'aliases': []},
      '1f502': {'canonical_name': 'repeat_one', 'aliases': []},
      '1f504': {'canonical_name': 'counterclockwise', 'aliases': ['return']},
      '1f503': {'canonical_name': 'clockwise', 'aliases': []},
      '1f3b5': {'canonical_name': 'music', 'aliases': []},
      '1f3b6': {'canonical_name': 'musical_notes', 'aliases': []},
      '2795': {'canonical_name': 'plus', 'aliases': ['add']},
      '2796': {'canonical_name': 'minus', 'aliases': ['subtract']},
      '2797': {'canonical_name': 'division', 'aliases': ['divide']},
      '2716': {'canonical_name': 'multiplication', 'aliases': ['multiply']},
      '1f4b2': {'canonical_name': 'dollars', 'aliases': []},
      # There is no other exchange, so might as well generalize this
      '1f4b1': {'canonical_name': 'exchange', 'aliases': []},
      '2122': {'canonical_name': 'tm', 'aliases': ['trademark']},
      '3030': {'canonical_name': 'wavy_dash', 'aliases': []},
      '27b0': {'canonical_name': 'loop', 'aliases': []},
      # https://emojipedia.org/double-curly-loop/
      '27bf': {'canonical_name': 'double_loop', 'aliases': ['voicemail']},
      '1f51a': {'canonical_name': 'end', 'aliases': []},
      '1f519': {'canonical_name': 'back', 'aliases': []},
      '1f51b': {'canonical_name': 'on', 'aliases': []},
      '1f51d': {'canonical_name': 'top', 'aliases': []},
      '1f51c': {'canonical_name': 'soon', 'aliases': []},
      '2714': {'canonical_name': 'check_mark', 'aliases': []},
      '2611': {'canonical_name': 'checkbox', 'aliases': []},
      '1f518': {'canonical_name': 'radio_button', 'aliases': []},
      '26aa': {'canonical_name': 'white_circle', 'aliases': []},
      '26ab': {'canonical_name': 'black_circle', 'aliases': []},
      '1f534': {'canonical_name': 'red_circle', 'aliases': []},
      '1f535': {'canonical_name': 'blue_circle', 'aliases': []},
      '1f53a': {'canonical_name': 'red_triangle_up', 'aliases': []},
      '1f53b': {'canonical_name': 'red_triangle_down', 'aliases': []},
      '1f538': {'canonical_name': 'small_orange_diamond', 'aliases': []},
      '1f539': {'canonical_name': 'small_blue_diamond', 'aliases': []},
      '1f536': {'canonical_name': 'large_orange_diamond', 'aliases': []},
      '1f537': {'canonical_name': 'large_blue_diamond', 'aliases': []},
      '1f533': {'canonical_name': 'black_and_white_square', 'aliases': []},
      '1f532': {'canonical_name': 'white_and_black_square', 'aliases': []},
      '25aa': {'canonical_name': 'black_small_square', 'aliases': []},
      '25ab': {'canonical_name': 'white_small_square', 'aliases': []},
      '25fe': {'canonical_name': 'black_medium_small_square', 'aliases': []},
      '25fd': {'canonical_name': 'white_medium_small_square', 'aliases': []},
      '25fc': {'canonical_name': 'black_medium_square', 'aliases': []},
      '25fb': {'canonical_name': 'white_medium_square', 'aliases': []},
      '2b1b': {'canonical_name': 'black_large_square', 'aliases': []},
      '2b1c': {'canonical_name': 'white_large_square', 'aliases': []},
      '1f508': {'canonical_name': 'speaker', 'aliases': []},
      '1f507': {'canonical_name': 'mute', 'aliases': ['no_sound']},
      '1f509': {'canonical_name': 'softer', 'aliases': []},
      '1f50a': {'canonical_name': 'louder', 'aliases': ['sound']},
      '1f514': {'canonical_name': 'notifications', 'aliases': ['bell']},
      '1f515': {'canonical_name': 'mute_notifications', 'aliases': []},
      '1f4e3': {'canonical_name': 'megaphone', 'aliases': ['shout']},
      '1f4e2': {'canonical_name': 'loudspeaker', 'aliases': ['bullhorn']},
      '1f4ac': {'canonical_name': 'umm', 'aliases': ['speech_balloon']},
      '1f5e8': {'canonical_name': 'speech_bubble', 'aliases': []},
      '1f4ad': {'canonical_name': 'thought', 'aliases': ['dream']},
      '1f5ef': {'canonical_name': 'anger_bubble', 'aliases': []},
      '2660': {'canonical_name': 'spades', 'aliases': []},
      '2663': {'canonical_name': 'clubs', 'aliases': []},
      '2665': {'canonical_name': 'hearts', 'aliases': []},
      '2666': {'canonical_name': 'diamonds', 'aliases': []},
      '1f0cf': {'canonical_name': 'joker', 'aliases': []},
      '1f3b4': {'canonical_name': 'playing_cards', 'aliases': []},
      '1f004': {'canonical_name': 'mahjong', 'aliases': []},
      # The only use I can think of for so many clocks is to be able to use them
      # to vote on times and such in emoji reactions. But a) the experience is
      # not that great (the images are too small), b) there are issues with
      # 24-hour time (used in many countries), like what is 00:30 or 01:00
      # called, c) it's hard to make the compose typeahead experience great, and
      # d) we should have a dedicated time voting widget that takes care of
      # timezone and locale issues, and uses a digital representation.
      # '1f550': {'canonical_name': 'X', 'aliases': ['clock1']},
      # '1f551': {'canonical_name': 'X', 'aliases': ['clock2']},
      # '1f552': {'canonical_name': 'X', 'aliases': ['clock3']},
      # '1f553': {'canonical_name': 'X', 'aliases': ['clock4']},
      # '1f554': {'canonical_name': 'X', 'aliases': ['clock5']},
      # '1f555': {'canonical_name': 'X', 'aliases': ['clock6']},
      # '1f556': {'canonical_name': 'X', 'aliases': ['clock7']},
      # seems like the best choice for time
      '1f557': {'canonical_name': 'time', 'aliases': ['clock']},
      # '1f558': {'canonical_name': 'X', 'aliases': ['clock9']},
      # '1f559': {'canonical_name': 'X', 'aliases': ['clock10']},
      # '1f55a': {'canonical_name': 'X', 'aliases': ['clock11']},
      # '1f55b': {'canonical_name': 'X', 'aliases': ['clock12']},
      # '1f55c': {'canonical_name': 'X', 'aliases': ['clock130']},
      # '1f55d': {'canonical_name': 'X', 'aliases': ['clock230']},
      # '1f55e': {'canonical_name': 'X', 'aliases': ['clock330']},
      # '1f55f': {'canonical_name': 'X', 'aliases': ['clock430']},
      # '1f560': {'canonical_name': 'X', 'aliases': ['clock530']},
      # '1f561': {'canonical_name': 'X', 'aliases': ['clock630']},
      # '1f562': {'canonical_name': 'X', 'aliases': ['clock730']},
      # '1f563': {'canonical_name': 'X', 'aliases': ['clock830']},
      # '1f564': {'canonical_name': 'X', 'aliases': ['clock930']},
      # '1f565': {'canonical_name': 'X', 'aliases': ['clock1030']},
      # '1f566': {'canonical_name': 'X', 'aliases': ['clock1130']},
      # '1f567': {'canonical_name': 'X', 'aliases': ['clock1230']},
      '1f3f3': {'canonical_name': 'white_flag', 'aliases': ['surrender']},
      '1f3f4': {'canonical_name': 'black_flag', 'aliases': []},
      '1f3c1': {'canonical_name': 'checkered_flag', 'aliases': ['race', 'go', 'start']},
      '1f6a9': {'canonical_name': 'triangular_flag', 'aliases': []},
      # solidarity from iemoji
      '1f38c': {'canonical_name': 'crossed_flags', 'aliases': ['solidarity']},
  }   # type: Dict[str, Dict[str, Any]]
  