Merge "Snap for 7955407 from be8a7617da8765fdcb3abe35d9f1578b1cc8d45a to androidx-localbroadcastmanager-release" into androidx-localbroadcastmanager-release
diff --git a/TEST_MAPPING b/TEST_MAPPING
new file mode 100644
index 0000000..279657d
--- /dev/null
+++ b/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "presubmit": [
+    {
+      "name": "minikin_tests"
+    }
+  ]
+}
diff --git a/emoji-compat/Android.mk b/emoji-compat-flatbuffers/Android.mk
similarity index 94%
rename from emoji-compat/Android.mk
rename to emoji-compat-flatbuffers/Android.mk
index bc47046..76bd918 100644
--- a/emoji-compat/Android.mk
+++ b/emoji-compat-flatbuffers/Android.mk
@@ -15,7 +15,7 @@
 LOCAL_PATH := $(call my-dir)
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := noto-emoji-compat-java
+LOCAL_MODULE := noto-emoji-compat-flatbuffers-java
 LOCAL_SRC_FILES := $(call all-java-files-under, src/java)
 LOCAL_SDK_VERSION := current
 
diff --git a/emoji-compat-flatbuffers/build.gradle b/emoji-compat-flatbuffers/build.gradle
new file mode 100644
index 0000000..20d8dfb
--- /dev/null
+++ b/emoji-compat-flatbuffers/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+    id("java")
+}
+
+sourceSets {
+    main {
+        java.srcDirs = ['src/java']
+    }
+}
+
+compileJava {
+    sourceCompatibility = JavaVersion.VERSION_1_7
+    targetCompatibility = JavaVersion.VERSION_1_7
+}
+
+dependencies {
+    implementation("com.google.flatbuffers:flatbuffers-java:1.12.0")
+}
+
+// The "javadoc" task is unused so we don't want it to appear in the output of `./gradlew tasks`
+// So, we set the group to null
+tasks["javadoc"].group = null
diff --git a/emoji-compat/data/emoji_metadata.fbs b/emoji-compat-flatbuffers/data/emoji_metadata.fbs
similarity index 100%
rename from emoji-compat/data/emoji_metadata.fbs
rename to emoji-compat-flatbuffers/data/emoji_metadata.fbs
diff --git a/emoji-compat/data/flatbuffer_header.txt b/emoji-compat-flatbuffers/data/flatbuffer_header.txt
similarity index 69%
rename from emoji-compat/data/flatbuffer_header.txt
rename to emoji-compat-flatbuffers/data/flatbuffer_header.txt
index d67f3a8..2b40a04 100644
--- a/emoji-compat/data/flatbuffer_header.txt
+++ b/emoji-compat-flatbuffers/data/flatbuffer_header.txt
@@ -14,16 +14,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package androidx.text.emoji.flatbuffer;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import com.google.flatbuffers.Table;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Automatically generated by the FlatBuffers compiler, do not modify.
- */
-@SuppressWarnings("unused")
\ No newline at end of file
diff --git a/emoji-compat/jarjar-rules.txt b/emoji-compat-flatbuffers/jarjar-rules.txt
similarity index 100%
rename from emoji-compat/jarjar-rules.txt
rename to emoji-compat-flatbuffers/jarjar-rules.txt
diff --git a/emoji-compat/settings.gradle b/emoji-compat-flatbuffers/settings.gradle
similarity index 100%
rename from emoji-compat/settings.gradle
rename to emoji-compat-flatbuffers/settings.gradle
diff --git a/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java
new file mode 100644
index 0000000..0b2a694
--- /dev/null
+++ b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java
@@ -0,0 +1,89 @@
+// CHECKSTYLE:OFF Generated code
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package androidx.text.emoji.flatbuffer;
+
+import java.nio.*;
+import java.lang.*;
+import java.util.*;
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class MetadataItem extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb) { return getRootAsMetadataItem(_bb, new MetadataItem()); }
+  public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb, MetadataItem obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public MetadataItem __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public int id() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
+  public boolean emojiStyle() { int o = __offset(6); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
+  public short sdkAdded() { int o = __offset(8); return o != 0 ? bb.getShort(o + bb_pos) : 0; }
+  public short compatAdded() { int o = __offset(10); return o != 0 ? bb.getShort(o + bb_pos) : 0; }
+  public short width() { int o = __offset(12); return o != 0 ? bb.getShort(o + bb_pos) : 0; }
+  public short height() { int o = __offset(14); return o != 0 ? bb.getShort(o + bb_pos) : 0; }
+  public int codepoints(int j) { int o = __offset(16); return o != 0 ? bb.getInt(__vector(o) + j * 4) : 0; }
+  public int codepointsLength() { int o = __offset(16); return o != 0 ? __vector_len(o) : 0; }
+  public IntVector codepointsVector() { return codepointsVector(new IntVector()); }
+  public IntVector codepointsVector(IntVector obj) { int o = __offset(16); return o != 0 ? obj.__assign(__vector(o), bb) : null; }
+  public ByteBuffer codepointsAsByteBuffer() { return __vector_as_bytebuffer(16, 4); }
+  public ByteBuffer codepointsInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 16, 4); }
+
+  public static int createMetadataItem(FlatBufferBuilder builder,
+      int id,
+      boolean emojiStyle,
+      short sdkAdded,
+      short compatAdded,
+      short width,
+      short height,
+      int codepointsOffset) {
+    builder.startTable(7);
+    MetadataItem.addCodepoints(builder, codepointsOffset);
+    MetadataItem.addId(builder, id);
+    MetadataItem.addHeight(builder, height);
+    MetadataItem.addWidth(builder, width);
+    MetadataItem.addCompatAdded(builder, compatAdded);
+    MetadataItem.addSdkAdded(builder, sdkAdded);
+    MetadataItem.addEmojiStyle(builder, emojiStyle);
+    return MetadataItem.endMetadataItem(builder);
+  }
+
+  public static void startMetadataItem(FlatBufferBuilder builder) { builder.startTable(7); }
+  public static void addId(FlatBufferBuilder builder, int id) { builder.addInt(0, id, 0); }
+  public static void addEmojiStyle(FlatBufferBuilder builder, boolean emojiStyle) { builder.addBoolean(1, emojiStyle, false); }
+  public static void addSdkAdded(FlatBufferBuilder builder, short sdkAdded) { builder.addShort(2, sdkAdded, 0); }
+  public static void addCompatAdded(FlatBufferBuilder builder, short compatAdded) { builder.addShort(3, compatAdded, 0); }
+  public static void addWidth(FlatBufferBuilder builder, short width) { builder.addShort(4, width, 0); }
+  public static void addHeight(FlatBufferBuilder builder, short height) { builder.addShort(5, height, 0); }
+  public static void addCodepoints(FlatBufferBuilder builder, int codepointsOffset) { builder.addOffset(6, codepointsOffset, 0); }
+  public static int createCodepointsVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addInt(data[i]); return builder.endVector(); }
+  public static void startCodepointsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static int endMetadataItem(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public MetadataItem get(int j) { return get(new MetadataItem(), j); }
+    public MetadataItem get(MetadataItem obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+
diff --git a/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java
new file mode 100644
index 0000000..6330098
--- /dev/null
+++ b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java
@@ -0,0 +1,76 @@
+// CHECKSTYLE:OFF Generated code
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package androidx.text.emoji.flatbuffer;
+
+import java.nio.*;
+import java.lang.*;
+import java.util.*;
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class MetadataList extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static MetadataList getRootAsMetadataList(ByteBuffer _bb) { return getRootAsMetadataList(_bb, new MetadataList()); }
+  public static MetadataList getRootAsMetadataList(ByteBuffer _bb, MetadataList obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public MetadataList __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public int version() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
+  public androidx.text.emoji.flatbuffer.MetadataItem list(int j) { return list(new androidx.text.emoji.flatbuffer.MetadataItem(), j); }
+  public androidx.text.emoji.flatbuffer.MetadataItem list(androidx.text.emoji.flatbuffer.MetadataItem obj, int j) { int o = __offset(6); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
+  public int listLength() { int o = __offset(6); return o != 0 ? __vector_len(o) : 0; }
+  public androidx.text.emoji.flatbuffer.MetadataItem.Vector listVector() { return listVector(new androidx.text.emoji.flatbuffer.MetadataItem.Vector()); }
+  public androidx.text.emoji.flatbuffer.MetadataItem.Vector listVector(androidx.text.emoji.flatbuffer.MetadataItem.Vector obj) { int o = __offset(6); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
+  public String sourceSha() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer sourceShaAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
+  public ByteBuffer sourceShaInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
+
+  public static int createMetadataList(FlatBufferBuilder builder,
+      int version,
+      int listOffset,
+      int sourceShaOffset) {
+    builder.startTable(3);
+    MetadataList.addSourceSha(builder, sourceShaOffset);
+    MetadataList.addList(builder, listOffset);
+    MetadataList.addVersion(builder, version);
+    return MetadataList.endMetadataList(builder);
+  }
+
+  public static void startMetadataList(FlatBufferBuilder builder) { builder.startTable(3); }
+  public static void addVersion(FlatBufferBuilder builder, int version) { builder.addInt(0, version, 0); }
+  public static void addList(FlatBufferBuilder builder, int listOffset) { builder.addOffset(1, listOffset, 0); }
+  public static int createListVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+  public static void startListVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static void addSourceSha(FlatBufferBuilder builder, int sourceShaOffset) { builder.addOffset(2, sourceShaOffset, 0); }
+  public static int endMetadataList(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+  public static void finishMetadataListBuffer(FlatBufferBuilder builder, int offset) { builder.finish(offset); }
+  public static void finishSizePrefixedMetadataListBuffer(FlatBufferBuilder builder, int offset) { builder.finishSizePrefixed(offset); }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public MetadataList get(int j) { return get(new MetadataList(), j); }
+    public MetadataList get(MetadataList obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+
diff --git a/emoji-compat/build.gradle b/emoji-compat/build.gradle
deleted file mode 100644
index 34acb79..0000000
--- a/emoji-compat/build.gradle
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-apply plugin: 'java'
-apply plugin: 'org.anarres.jarjar'
-apply plugin: 'maven'
-
-ext {
-    flatbuffersDir = '../../flatbuffers'
-}
-
-buildscript {
-    boolean unbundleBuild = (new File("unbundled-build")).exists()
-    repositories {
-        maven { url '../../../prebuilts/androidx/external' }
-        if (unbundleBuild) {
-            jcenter()
-        }
-    }
-
-    dependencies {
-        classpath 'org.anarres.jarjar:jarjar-gradle:1.0.1'
-    }
-}
-
-sourceSets {
-    main {
-        java.srcDirs = ['src/java']
-    }
-}
-
-compileJava {
-    sourceCompatibility = JavaVersion.VERSION_1_7
-    targetCompatibility = JavaVersion.VERSION_1_7
-}
-
-dependencies {
-    compile 'com.google.flatbuffers:flatbuffers-java:1.8.0'
-}
-
-jarjar.repackage('rename') {
-    destinationName "noto-emoji-compat-java.jar"
-    from 'com.google.flatbuffers:flatbuffers-java:1.8.0'
-    from files(sourceSets.main.output.classesDirs)
-    dependsOn sourceSets.main.output
-    classRename 'com.google.flatbuffers.**', 'androidx.text.emoji.flatbuffer.@1'
-}
-
-configurations {
-    parser
-}
-
-artifacts {
-    parser(rename.destinationPath) {
-        name 'noto-emoji-compat'
-        type 'jar'
-        builtBy rename
-    }
-}
-
-// The "javadoc" task is unused so we don't want it to appear in the output of `./gradlew tasks`
-// So, we set the group to null
-tasks["javadoc"].group = null
diff --git a/emoji-compat/createfont.py b/emoji-compat/createfont.py
index fb9dc5a..39204f8 100755
--- a/emoji-compat/createfont.py
+++ b/emoji-compat/createfont.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python3
 #
 # Copyright (C) 2017 The Android Open Source Project
 #
@@ -43,8 +43,6 @@
 - src/java/android/support/text/emoji/flatbuffer/*
 """
 
-from __future__ import print_function
-
 import contextlib
 import csv
 import hashlib
@@ -52,24 +50,25 @@
 import json
 import os
 import shutil
+import subprocess
 import sys
 import tempfile
 from fontTools import ttLib
 
 ########### UPDATE OR CHECK WHEN A NEW FONT IS BEING GENERATED ###########
 # Last Android SDK Version
-SDK_VERSION = 29
+SDK_VERSION = 30
 # metadata version that will be embedded into font. If there are updates to the font that would
 # cause data/emoji_metadata.txt to change, this integer number should be incremented. This number
 # defines in which EmojiCompat metadata version the emoji is added to the font.
-METADATA_VERSION = 5
+METADATA_VERSION = 7
 
 ####### main directories where output files are created #######
 SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
 FONT_DIR = os.path.join(SCRIPT_DIR, 'font')
 DATA_DIR = os.path.join(SCRIPT_DIR, 'data')
 SUPPORTED_EMOJIS_DIR = os.path.join(SCRIPT_DIR, 'supported-emojis')
-JAVA_SRC_DIR = os.path.join(SCRIPT_DIR, 'src', 'java')
+JAVA_SRC_DIR = os.path.join('src', 'java')
 ####### output files #######
 # font file
 FONT_PATH = os.path.join(FONT_DIR, 'NotoColorEmojiCompat.ttf')
@@ -91,10 +90,12 @@
 EMOJI_STYLE_OVERRIDE_FILE = os.path.join('additions', 'emoji-data.txt')
 # emoji metadata file
 INPUT_META_FILE = OUTPUT_META_FILE
+# default flatbuffer module location (if not specified by caller)
+FLATBUFFER_MODULE_DIR = os.path.join(SCRIPT_DIR, '..', 'emoji-compat-flatbuffers')
 # flatbuffer schema
-FLATBUFFER_SCHEMA = os.path.join(DATA_DIR, 'emoji_metadata.fbs')
+FLATBUFFER_SCHEMA = os.path.join(FLATBUFFER_MODULE_DIR, 'data', 'emoji_metadata.fbs')
 # file path for java header, it will be prepended to flatbuffer java files
-FLATBUFFER_HEADER = os.path.join(DATA_DIR, "flatbuffer_header.txt")
+FLATBUFFER_HEADER = os.path.join(FLATBUFFER_MODULE_DIR, 'data', 'flatbuffer_header.txt')
 # temporary emoji metadata json output file
 OUTPUT_JSON_FILE_NAME = 'emoji_metadata.json'
 # temporary binary file generated by flatbuffer
@@ -106,7 +107,7 @@
 FLATBUFFER_METADATA_LIST_JAVA = "MetadataList.java"
 FLATBUFFER_METADATA_ITEM_JAVA = "MetadataItem.java"
 # directory under source where flatbuffer java files will be copied into
-FLATBUFFER_JAVA_TARGET = os.path.join(JAVA_SRC_DIR, FLATBUFFER_PACKAGE_PATH)
+FLATBUFFER_JAVA_TARGET = os.path.join(FLATBUFFER_MODULE_DIR, JAVA_SRC_DIR, FLATBUFFER_PACKAGE_PATH)
 # meta tag name used in the font to embed the emoji metadata. This value is also used in
 # MetadataListReader.java in order to locate the metadata location.
 EMOJI_META_TAG_NAME = 'Emji'
@@ -131,29 +132,28 @@
     """Converts a list of codepoints into a string separated with space."""
     return ' '.join([to_hex_str(x) for x in codepoints])
 
-def prepend_header_to_file(file_path):
+def prepend_header_to_file(file_path, header_path):
     """Prepends the header to the file. Used to update flatbuffer java files with header, comments
     and annotations."""
     with open(file_path, "r+") as original_file:
-        with open(FLATBUFFER_HEADER, "r") as copyright_file:
+        with open(header_path, "r") as copyright_file:
             original_content = original_file.read()
-            start_index = original_content.index("public final class")
             original_file.seek(0)
-            original_file.write(copyright_file.read() + "\n" + original_content[start_index:])
+            original_file.write(copyright_file.read() + "\n" + original_content)
 
 
-def update_flatbuffer_java_files(flatbuffer_java_dir):
+def update_flatbuffer_java_files(flatbuffer_java_dir, header_dir, target_dir):
     """Prepends headers to flatbuffer java files and copies to the final destination"""
     tmp_metadata_list = flatbuffer_java_dir + FLATBUFFER_METADATA_LIST_JAVA
     tmp_metadata_item = flatbuffer_java_dir + FLATBUFFER_METADATA_ITEM_JAVA
-    prepend_header_to_file(tmp_metadata_list)
-    prepend_header_to_file(tmp_metadata_item)
+    prepend_header_to_file(tmp_metadata_list, header_dir)
+    prepend_header_to_file(tmp_metadata_item, header_dir)
 
-    if not os.path.exists(FLATBUFFER_JAVA_TARGET):
-        os.makedirs(FLATBUFFER_JAVA_TARGET)
+    if not os.path.exists(target_dir):
+        os.makedirs(target_dir)
 
-    shutil.copy(tmp_metadata_list, FLATBUFFER_JAVA_TARGET + FLATBUFFER_METADATA_LIST_JAVA)
-    shutil.copy(tmp_metadata_item, FLATBUFFER_JAVA_TARGET + FLATBUFFER_METADATA_ITEM_JAVA)
+    shutil.copy(tmp_metadata_list, os.path.join(target_dir, FLATBUFFER_METADATA_LIST_JAVA))
+    shutil.copy(tmp_metadata_item, os.path.join(target_dir, FLATBUFFER_METADATA_ITEM_JAVA))
 
 def create_test_data(unicode_path):
     """Read all the emojis in the unicode files and update the test file"""
@@ -422,14 +422,14 @@
     if not 'meta' in ttf:
         ttf['meta'] = ttLib.getTableClass('meta')()
     meta = ttf['meta']
-    with open(flatbuffer_bin_filename) as flatbuffer_bin_file:
+    with open(flatbuffer_bin_filename, 'rb') as flatbuffer_bin_file:
         meta.data[EMOJI_META_TAG_NAME] = flatbuffer_bin_file.read()
 
     # sort meta tables for faster access
     update_ttlib_orig_sort()
 
 
-def validate_input_files(font_path, unicode_path):
+def validate_input_files(font_path, unicode_path, flatbuffer_path):
     """Validate the existence of font file and the unicode files"""
     if not os.path.isfile(font_path):
         raise ValueError("Font file does not exist: " + font_path)
@@ -445,10 +445,20 @@
         if not os.path.isfile(emoji_filename):
             raise ValueError("Unicode emoji data file does not exist: " + emoji_filename)
 
+    if not os.path.isdir(flatbuffer_path):
+        raise ValueError(
+            "Flatbuffer directory does not exist or is not a directory " + flatbuffer_path)
+
+    flatbuffer_filenames = [os.path.join(flatbuffer_path, FLATBUFFER_SCHEMA),
+                            os.path.join(flatbuffer_path, FLATBUFFER_HEADER)]
+    for flatbuffer_filename in flatbuffer_filenames:
+        if not os.path.isfile(flatbuffer_filename):
+            raise ValueError("Flatbuffer file does not exist: " + flatbuffer_filename)
+
 
 def add_file_to_sha(sha_algo, file_path):
     with open(file_path, 'rb') as input_file:
-        for data in iter(lambda: input_file.read(8192), ''):
+        for data in iter(lambda: input_file.read(8192), b''):
             sha_algo.update(data)
 
 def create_sha_from_source_files(font_paths):
@@ -463,7 +473,7 @@
     """Creates the EmojiCompat font"""
 
     def __init__(self, font_path, unicode_path):
-        validate_input_files(font_path, unicode_path)
+        validate_input_files(font_path, unicode_path, FLATBUFFER_MODULE_DIR)
 
         self.font_path = font_path
         self.unicode_path = unicode_path
@@ -491,7 +501,7 @@
         """Read image size data from CBDT."""
         cbdt = ttf['CBDT']
         for strike_data in cbdt.strikeData:
-            for key, data in strike_data.iteritems():
+            for key, data in strike_data.items():
                 data.decompile()
                 self.glyph_to_image_metrics_map[key] = data.metrics
 
@@ -501,7 +511,7 @@
         cmap = ttf['cmap']
         for table in cmap.tables:
             if table.format == 12 and table.platformID == 3 and table.platEncID == 10:
-                for codepoint, glyph_name in table.cmap.iteritems():
+                for codepoint, glyph_name in table.cmap.items():
                     glyph_to_codepoint_map[glyph_name] = codepoint
                     self.update_emoji_data([codepoint], glyph_name)
                 return table
@@ -546,7 +556,7 @@
                         glyph_names = [x["input"] for x in seq]
                         codepoints = [glyph_to_codepoint_map[x] for x in glyph_names]
                         outputs = [x["output"] for x in seq if x["output"]]
-                        nonempty_outputs = filter(lambda x: x.strip() , outputs)
+                        nonempty_outputs = list(filter(lambda x: x.strip() , outputs))
                         if len(nonempty_outputs) == 0:
                             print("Warning: no output glyph is set for " + str(glyph_names))
                             continue
@@ -561,12 +571,12 @@
     def get_substitutions(self, lookup_list, index):
         result = []
         for x in lookup_list.Lookup[index].SubTable:
-            for input, output in x.mapping.iteritems():
+            for input, output in x.mapping.items():
                 result.append({"input": input, "output": output})
         return result
 
     def add_gsub_ligature_subtable(self, subtable, glyph_to_codepoint_map):
-        for name, ligatures in subtable.ligatures.iteritems():
+        for name, ligatures in subtable.ligatures.items():
             for ligature in ligatures:
                 glyph_names = [name] + ligature.Component
                 codepoints = [glyph_to_codepoint_map[x] for x in glyph_names]
@@ -649,8 +659,14 @@
             total_emoji_count = self.write_metadata_json(output_json_file)
 
             # create the flatbuffers binary and java classes
-            sys_command = 'flatc -o {0} -b -j {1} {2}'
-            os.system(sys_command.format(tmp_dir, FLATBUFFER_SCHEMA, output_json_file))
+            flatc_command = ['flatc',
+                             '-o',
+                             tmp_dir,
+                             '-b',
+                             '-j',
+                             FLATBUFFER_SCHEMA,
+                             output_json_file]
+            subprocess.check_output(flatc_command)
 
             # inject metadata binary into font
             inject_meta_into_font(ttf, flatbuffer_bin_file)
@@ -662,7 +678,9 @@
             # save the new font
             ttf.save(FONT_PATH)
 
-            update_flatbuffer_java_files(flatbuffer_java_dir)
+            update_flatbuffer_java_files(flatbuffer_java_dir, #tmp dir
+                                         FLATBUFFER_HEADER,
+                                         FLATBUFFER_JAVA_TARGET)
 
             create_test_data(self.unicode_path)
 
@@ -678,9 +696,17 @@
     print("Please specify a path to font and unicode files.\n"
           "usage: createfont.py noto-color-emoji-path unicode-dir-path")
 
-
-if __name__ == '__main__':
-    if len(sys.argv) < 3:
+def parse_args(argv):
+    # parse manually to avoid any extra dependencies
+    if len(argv) < 3:
         print_usage()
         sys.exit(1)
-    EmojiFontCreator(sys.argv[1], sys.argv[2]).create_font()
+    return (sys.argv[1], sys.argv[2])
+
+def main():
+    font_file, unicode_dir = parse_args(sys.argv)
+    EmojiFontCreator(font_file, unicode_dir).create_font()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/emoji-compat/data/emoji_metadata.txt b/emoji-compat/data/emoji_metadata.txt
index 3c5cdf4..6bee6fa 100644
--- a/emoji-compat/data/emoji_metadata.txt
+++ b/emoji-compat/data/emoji_metadata.txt
@@ -3244,3 +3244,337 @@
 F0CDF 29 5 1F9D1 200D 1F9B3

 F0CE0 29 5 1F9D1 200D 1F9BC

 F0CE1 29 5 1F9D1 200D 1F9BD

+F0CE2 30 6 26A7

+F0CE3 30 6 1F6D6

+F0CE4 30 6 1F6D7

+F0CE5 30 6 1F6FB

+F0CE6 30 6 1F6FC

+F0CE7 30 6 1F90C

+F0CE8 30 6 1F972

+F0CE9 30 6 1F977

+F0CEA 30 6 1F978

+F0CEB 30 6 1F9A3

+F0CEC 30 6 1F9A4

+F0CED 30 6 1F9AB

+F0CEE 30 6 1F9AC

+F0CEF 30 6 1F9AD

+F0CF0 30 6 1F9CB

+F0CF1 30 6 1FA74

+F0CF2 30 6 1FA83

+F0CF3 30 6 1FA84

+F0CF4 30 6 1FA85

+F0CF5 30 6 1FA86

+F0CF6 30 6 1FA96

+F0CF7 30 6 1FA97

+F0CF8 30 6 1FA98

+F0CF9 30 6 1FA99

+F0CFA 30 6 1FA9A

+F0CFB 30 6 1FA9B

+F0CFC 30 6 1FA9C

+F0CFD 30 6 1FA9D

+F0CFE 30 6 1FA9E

+F0CFF 30 6 1FA9F

+F0D00 30 6 1FAA0

+F0D01 30 6 1FAA1

+F0D02 30 6 1FAA2

+F0D03 30 6 1FAA3

+F0D04 30 6 1FAA4

+F0D05 30 6 1FAA5

+F0D06 30 6 1FAA6

+F0D07 30 6 1FAA7

+F0D08 30 6 1FAA8

+F0D09 30 6 1FAB0

+F0D0A 30 6 1FAB1

+F0D0B 30 6 1FAB2

+F0D0C 30 6 1FAB3

+F0D0D 30 6 1FAB4

+F0D0E 30 6 1FAB5

+F0D0F 30 6 1FAB6

+F0D10 30 6 1FAC0

+F0D11 30 6 1FAC1

+F0D12 30 6 1FAC2

+F0D13 30 6 1FAD0

+F0D14 30 6 1FAD1

+F0D15 30 6 1FAD2

+F0D16 30 6 1FAD3

+F0D17 30 6 1FAD4

+F0D18 30 6 1FAD5

+F0D19 30 6 1FAD6

+F0D1A 30 6 1F3F3 200D 26A7

+F0D1B 30 6 1F408 200D 2B1B

+F0D1C 30 6 1F43B 200D 2744

+F0D1D 30 6 1F468 1F3FB 200D 1F37C

+F0D1E 30 6 1F468 1F3FC 200D 1F37C

+F0D1F 30 6 1F468 1F3FD 200D 1F37C

+F0D20 30 6 1F468 1F3FE 200D 1F37C

+F0D21 30 6 1F468 1F3FF 200D 1F37C

+F0D22 30 6 1F468 200D 1F37C

+F0D23 30 6 1F469 1F3FB 200D 1F37C

+F0D24 30 6 1F469 1F3FC 200D 1F37C

+F0D25 30 6 1F469 1F3FD 200D 1F37C

+F0D26 30 6 1F469 1F3FE 200D 1F37C

+F0D27 30 6 1F469 1F3FF 200D 1F37C

+F0D28 30 6 1F469 200D 1F37C

+F0D29 30 6 1F470 1F3FB 200D 2640

+F0D2A 30 6 1F470 1F3FB 200D 2642

+F0D2B 30 6 1F470 1F3FC 200D 2640

+F0D2C 30 6 1F470 1F3FC 200D 2642

+F0D2D 30 6 1F470 1F3FD 200D 2640

+F0D2E 30 6 1F470 1F3FD 200D 2642

+F0D2F 30 6 1F470 1F3FE 200D 2640

+F0D30 30 6 1F470 1F3FE 200D 2642

+F0D31 30 6 1F470 1F3FF 200D 2640

+F0D32 30 6 1F470 1F3FF 200D 2642

+F0D33 30 6 1F470 200D 2640

+F0D34 30 6 1F470 200D 2642

+F0D35 30 6 1F90C 1F3FB

+F0D36 30 6 1F90C 1F3FC

+F0D37 30 6 1F90C 1F3FD

+F0D38 30 6 1F90C 1F3FE

+F0D39 30 6 1F90C 1F3FF

+F0D3A 30 6 1F935 1F3FB 200D 2640

+F0D3B 30 6 1F935 1F3FB 200D 2642

+F0D3C 30 6 1F935 1F3FC 200D 2640

+F0D3D 30 6 1F935 1F3FC 200D 2642

+F0D3E 30 6 1F935 1F3FD 200D 2640

+F0D3F 30 6 1F935 1F3FD 200D 2642

+F0D40 30 6 1F935 1F3FE 200D 2640

+F0D41 30 6 1F935 1F3FE 200D 2642

+F0D42 30 6 1F935 1F3FF 200D 2640

+F0D43 30 6 1F935 1F3FF 200D 2642

+F0D44 30 6 1F935 200D 2640

+F0D45 30 6 1F935 200D 2642

+F0D46 30 6 1F977 1F3FB

+F0D47 30 6 1F977 1F3FC

+F0D48 30 6 1F977 1F3FD

+F0D49 30 6 1F977 1F3FE

+F0D4A 30 6 1F977 1F3FF

+F0D4B 30 6 1F9D1 1F3FB 200D 1F37C

+F0D4C 30 6 1F9D1 1F3FB 200D 1F384

+F0D4D 30 6 1F9D1 1F3FC 200D 1F37C

+F0D4E 30 6 1F9D1 1F3FC 200D 1F384

+F0D4F 30 6 1F9D1 1F3FD 200D 1F37C

+F0D50 30 6 1F9D1 1F3FD 200D 1F384

+F0D51 30 6 1F9D1 1F3FE 200D 1F37C

+F0D52 30 6 1F9D1 1F3FE 200D 1F384

+F0D53 30 6 1F9D1 1F3FF 200D 1F37C

+F0D54 30 6 1F9D1 1F3FF 200D 1F384

+F0D55 30 6 1F9D1 200D 1F37C

+F0D56 30 6 1F9D1 200D 1F384

+F0D57 30 7 2764 200D 1F525

+F0D58 30 7 2764 200D 1FA79

+F0D59 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D5A 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D5B 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D5C 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D5D 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D5E 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D5F 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D60 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D61 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D62 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D63 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D64 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D65 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D66 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D67 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D68 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D69 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D6A 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D6B 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D6C 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D6D 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D6E 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D6F 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D70 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D71 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D72 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FB

+F0D73 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FC

+F0D74 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FD

+F0D75 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FE

+F0D76 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FF

+F0D77 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FB

+F0D78 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FC

+F0D79 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FD

+F0D7A 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FE

+F0D7B 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FF

+F0D7C 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FB

+F0D7D 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FC

+F0D7E 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FD

+F0D7F 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FE

+F0D80 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FF

+F0D81 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FB

+F0D82 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FC

+F0D83 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FD

+F0D84 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FE

+F0D85 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FF

+F0D86 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FB

+F0D87 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FC

+F0D88 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FD

+F0D89 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FE

+F0D8A 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FF

+F0D8B 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D8C 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D8D 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D8E 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D8F 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D90 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB

+F0D91 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC

+F0D92 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD

+F0D93 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE

+F0D94 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF

+F0D95 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0D96 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0D97 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0D98 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0D99 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0D9A 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB

+F0D9B 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC

+F0D9C 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD

+F0D9D 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE

+F0D9E 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF

+F0D9F 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0DA0 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0DA1 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0DA2 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0DA3 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0DA4 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB

+F0DA5 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC

+F0DA6 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD

+F0DA7 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE

+F0DA8 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF

+F0DA9 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0DAA 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0DAB 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0DAC 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0DAD 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0DAE 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB

+F0DAF 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC

+F0DB0 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD

+F0DB1 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE

+F0DB2 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF

+F0DB3 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB

+F0DB4 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC

+F0DB5 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD

+F0DB6 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE

+F0DB7 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF

+F0DB8 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB

+F0DB9 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC

+F0DBA 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD

+F0DBB 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE

+F0DBC 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF

+F0DBD 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FB

+F0DBE 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FC

+F0DBF 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FD

+F0DC0 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FE

+F0DC1 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FF

+F0DC2 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FB

+F0DC3 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FC

+F0DC4 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FD

+F0DC5 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FE

+F0DC6 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FF

+F0DC7 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FB

+F0DC8 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FC

+F0DC9 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FD

+F0DCA 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FE

+F0DCB 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FF

+F0DCC 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FB

+F0DCD 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FC

+F0DCE 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FD

+F0DCF 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FE

+F0DD0 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FF

+F0DD1 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FB

+F0DD2 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FC

+F0DD3 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FD

+F0DD4 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FE

+F0DD5 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FF

+F0DD6 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FB

+F0DD7 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FC

+F0DD8 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FD

+F0DD9 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FE

+F0DDA 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FF

+F0DDB 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FB

+F0DDC 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FC

+F0DDD 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FD

+F0DDE 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FE

+F0DDF 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FF

+F0DE0 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FB

+F0DE1 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FC

+F0DE2 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FD

+F0DE3 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FE

+F0DE4 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FF

+F0DE5 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FB

+F0DE6 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FC

+F0DE7 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FD

+F0DE8 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FE

+F0DE9 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FF

+F0DEA 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FB

+F0DEB 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FC

+F0DEC 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FD

+F0DED 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FE

+F0DEE 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FF

+F0DEF 30 7 1F48F 1F3FB

+F0DF0 30 7 1F48F 1F3FC

+F0DF1 30 7 1F48F 1F3FD

+F0DF2 30 7 1F48F 1F3FE

+F0DF3 30 7 1F48F 1F3FF

+F0DF4 30 7 1F491 1F3FB

+F0DF5 30 7 1F491 1F3FC

+F0DF6 30 7 1F491 1F3FD

+F0DF7 30 7 1F491 1F3FE

+F0DF8 30 7 1F491 1F3FF

+F0DF9 30 7 1F62E 200D 1F4A8

+F0DFA 30 7 1F635 200D 1F4AB

+F0DFB 30 7 1F636 200D 1F32B

+F0DFC 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC

+F0DFD 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD

+F0DFE 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE

+F0DFF 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF

+F0E00 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB

+F0E01 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD

+F0E02 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE

+F0E03 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF

+F0E04 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB

+F0E05 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC

+F0E06 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE

+F0E07 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF

+F0E08 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB

+F0E09 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC

+F0E0A 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD

+F0E0B 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF

+F0E0C 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB

+F0E0D 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC

+F0E0E 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD

+F0E0F 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE

+F0E10 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC

+F0E11 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD

+F0E12 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE

+F0E13 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF

+F0E14 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB

+F0E15 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD

+F0E16 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE

+F0E17 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF

+F0E18 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB

+F0E19 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC

+F0E1A 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE

+F0E1B 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF

+F0E1C 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB

+F0E1D 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC

+F0E1E 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD

+F0E1F 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF

+F0E20 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB

+F0E21 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC

+F0E22 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD

+F0E23 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE

+F0E24 30 7 1F9D4 1F3FB 200D 2640

+F0E25 30 7 1F9D4 1F3FB 200D 2642

+F0E26 30 7 1F9D4 1F3FC 200D 2640

+F0E27 30 7 1F9D4 1F3FC 200D 2642

+F0E28 30 7 1F9D4 1F3FD 200D 2640

+F0E29 30 7 1F9D4 1F3FD 200D 2642

+F0E2A 30 7 1F9D4 1F3FE 200D 2640

+F0E2B 30 7 1F9D4 1F3FE 200D 2642

+F0E2C 30 7 1F9D4 1F3FF 200D 2640

+F0E2D 30 7 1F9D4 1F3FF 200D 2642

+F0E2E 30 7 1F9D4 200D 2640

+F0E2F 30 7 1F9D4 200D 2642

diff --git a/emoji-compat/font/NotoColorEmojiCompat.ttf b/emoji-compat/font/NotoColorEmojiCompat.ttf
index 20d32a8..9cc330f 100644
--- a/emoji-compat/font/NotoColorEmojiCompat.ttf
+++ b/emoji-compat/font/NotoColorEmojiCompat.ttf
Binary files differ
diff --git a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java
deleted file mode 100644
index 49a1e2b..0000000
--- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// CHECKSTYLE:OFF Generated code
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.text.emoji.flatbuffer;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import com.google.flatbuffers.Table;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Automatically generated by the FlatBuffers compiler, do not modify.
- */
-@SuppressWarnings("unused")
-public final class MetadataItem extends Table {
-    public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb) {
-        return getRootAsMetadataItem(_bb, new MetadataItem());
-    }
-
-    public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb, MetadataItem obj) {
-        _bb.order(ByteOrder.LITTLE_ENDIAN);
-        return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb));
-    }
-
-    public void __init(int _i, ByteBuffer _bb) {
-        bb_pos = _i;
-        bb = _bb;
-    }
-
-    public MetadataItem __assign(int _i, ByteBuffer _bb) {
-        __init(_i, _bb);
-        return this;
-    }
-
-    public int id() {
-        int o = __offset(4);
-        return o != 0 ? bb.getInt(o + bb_pos) : 0;
-    }
-
-    public boolean emojiStyle() {
-        int o = __offset(6);
-        return o != 0 ? 0 != bb.get(o + bb_pos) : false;
-    }
-
-    public short sdkAdded() {
-        int o = __offset(8);
-        return o != 0 ? bb.getShort(o + bb_pos) : 0;
-    }
-
-    public short compatAdded() {
-        int o = __offset(10);
-        return o != 0 ? bb.getShort(o + bb_pos) : 0;
-    }
-
-    public short width() {
-        int o = __offset(12);
-        return o != 0 ? bb.getShort(o + bb_pos) : 0;
-    }
-
-    public short height() {
-        int o = __offset(14);
-        return o != 0 ? bb.getShort(o + bb_pos) : 0;
-    }
-
-    public int codepoints(int j) {
-        int o = __offset(16);
-        return o != 0 ? bb.getInt(__vector(o) + j * 4) : 0;
-    }
-
-    public int codepointsLength() {
-        int o = __offset(16);
-        return o != 0 ? __vector_len(o) : 0;
-    }
-
-    public ByteBuffer codepointsAsByteBuffer() {
-        return __vector_as_bytebuffer(16, 4);
-    }
-
-    public static int createMetadataItem(FlatBufferBuilder builder,
-            int id,
-            boolean emojiStyle,
-            short sdkAdded,
-            short compatAdded,
-            short width,
-            short height,
-            int codepointsOffset) {
-        builder.startObject(7);
-        MetadataItem.addCodepoints(builder, codepointsOffset);
-        MetadataItem.addId(builder, id);
-        MetadataItem.addHeight(builder, height);
-        MetadataItem.addWidth(builder, width);
-        MetadataItem.addCompatAdded(builder, compatAdded);
-        MetadataItem.addSdkAdded(builder, sdkAdded);
-        MetadataItem.addEmojiStyle(builder, emojiStyle);
-        return MetadataItem.endMetadataItem(builder);
-    }
-
-    public static void startMetadataItem(FlatBufferBuilder builder) {
-        builder.startObject(7);
-    }
-
-    public static void addId(FlatBufferBuilder builder, int id) {
-        builder.addInt(0, id, 0);
-    }
-
-    public static void addEmojiStyle(FlatBufferBuilder builder, boolean emojiStyle) {
-        builder.addBoolean(1, emojiStyle, false);
-    }
-
-    public static void addSdkAdded(FlatBufferBuilder builder, short sdkAdded) {
-        builder.addShort(2, sdkAdded, 0);
-    }
-
-    public static void addCompatAdded(FlatBufferBuilder builder, short compatAdded) {
-        builder.addShort(3, compatAdded, 0);
-    }
-
-    public static void addWidth(FlatBufferBuilder builder, short width) {
-        builder.addShort(4, width, 0);
-    }
-
-    public static void addHeight(FlatBufferBuilder builder, short height) {
-        builder.addShort(5, height, 0);
-    }
-
-    public static void addCodepoints(FlatBufferBuilder builder, int codepointsOffset) {
-        builder.addOffset(6, codepointsOffset, 0);
-    }
-
-    public static int createCodepointsVector(FlatBufferBuilder builder, int[] data) {
-        builder.startVector(4, data.length, 4);
-        for (int i = data.length - 1; i >= 0; i--) builder.addInt(data[i]);
-        return builder.endVector();
-    }
-
-    public static void startCodepointsVector(FlatBufferBuilder builder, int numElems) {
-        builder.startVector(4, numElems, 4);
-    }
-
-    public static int endMetadataItem(FlatBufferBuilder builder) {
-        int o = builder.endObject();
-        return o;
-    }
-}
-
diff --git a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java
deleted file mode 100644
index 97b12a4..0000000
--- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// CHECKSTYLE:OFF Generated code
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.text.emoji.flatbuffer;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import com.google.flatbuffers.Table;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Automatically generated by the FlatBuffers compiler, do not modify.
- */
-@SuppressWarnings("unused")
-public final class MetadataList extends Table {
-    public static MetadataList getRootAsMetadataList(ByteBuffer _bb) {
-        return getRootAsMetadataList(_bb, new MetadataList());
-    }
-
-    public static MetadataList getRootAsMetadataList(ByteBuffer _bb, MetadataList obj) {
-        _bb.order(ByteOrder.LITTLE_ENDIAN);
-        return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb));
-    }
-
-    public void __init(int _i, ByteBuffer _bb) {
-        bb_pos = _i;
-        bb = _bb;
-    }
-
-    public MetadataList __assign(int _i, ByteBuffer _bb) {
-        __init(_i, _bb);
-        return this;
-    }
-
-    public int version() {
-        int o = __offset(4);
-        return o != 0 ? bb.getInt(o + bb_pos) : 0;
-    }
-
-    public MetadataItem list(int j) {
-        return list(new MetadataItem(), j);
-    }
-
-    public MetadataItem list(MetadataItem obj, int j) {
-        int o = __offset(6);
-        return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null;
-    }
-
-    public int listLength() {
-        int o = __offset(6);
-        return o != 0 ? __vector_len(o) : 0;
-    }
-
-    public String sourceSha() {
-        int o = __offset(8);
-        return o != 0 ? __string(o + bb_pos) : null;
-    }
-
-    public ByteBuffer sourceShaAsByteBuffer() {
-        return __vector_as_bytebuffer(8, 1);
-    }
-
-    public static int createMetadataList(FlatBufferBuilder builder,
-            int version,
-            int listOffset,
-            int sourceShaOffset) {
-        builder.startObject(3);
-        MetadataList.addSourceSha(builder, sourceShaOffset);
-        MetadataList.addList(builder, listOffset);
-        MetadataList.addVersion(builder, version);
-        return MetadataList.endMetadataList(builder);
-    }
-
-    public static void startMetadataList(FlatBufferBuilder builder) {
-        builder.startObject(3);
-    }
-
-    public static void addVersion(FlatBufferBuilder builder, int version) {
-        builder.addInt(0, version, 0);
-    }
-
-    public static void addList(FlatBufferBuilder builder, int listOffset) {
-        builder.addOffset(1, listOffset, 0);
-    }
-
-    public static int createListVector(FlatBufferBuilder builder, int[] data) {
-        builder.startVector(4, data.length, 4);
-        for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]);
-        return builder.endVector();
-    }
-
-    public static void startListVector(FlatBufferBuilder builder, int numElems) {
-        builder.startVector(4, numElems, 4);
-    }
-
-    public static void addSourceSha(FlatBufferBuilder builder, int sourceShaOffset) {
-        builder.addOffset(2, sourceShaOffset, 0);
-    }
-
-    public static int endMetadataList(FlatBufferBuilder builder) {
-        int o = builder.endObject();
-        return o;
-    }
-
-    public static void finishMetadataListBuffer(FlatBufferBuilder builder, int offset) {
-        builder.finish(offset);
-    }
-}
-
diff --git a/emoji-compat/supported-emojis/emojis.txt b/emoji-compat/supported-emojis/emojis.txt
index f39c2e2..a4818c0 100644
--- a/emoji-compat/supported-emojis/emojis.txt
+++ b/emoji-compat/supported-emojis/emojis.txt
@@ -670,6 +670,7 @@
 1F3F0
 1F3F3 FE0F
 1F3F3 FE0F 200D 1F308
+1F3F3 FE0F 200D 26A7 FE0F
 1F3F4
 1F3F4 200D 2620 FE0F
 1F3F4 E0067 E0062 E0065 E006E E0067 E007F
@@ -694,6 +695,7 @@
 1F406
 1F407
 1F408
+1F408 200D 2B1B
 1F408 FE0F
 1F409
 1F40A
@@ -750,6 +752,7 @@
 1F439
 1F43A
 1F43B
+1F43B 200D 2744 FE0F
 1F43C
 1F43D
 1F43E
@@ -882,6 +885,7 @@
 1F468 1F3FB
 1F468 1F3FB 200D 1F33E
 1F468 1F3FB 200D 1F373
+1F468 1F3FB 200D 1F37C
 1F468 1F3FB 200D 1F393
 1F468 1F3FB 200D 1F3A4
 1F468 1F3FB 200D 1F3A8
@@ -907,9 +911,20 @@
 1F468 1F3FB 200D 2695 FE0F
 1F468 1F3FB 200D 2696 FE0F
 1F468 1F3FB 200D 2708 FE0F
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
 1F468 1F3FC
 1F468 1F3FC 200D 1F33E
 1F468 1F3FC 200D 1F373
+1F468 1F3FC 200D 1F37C
 1F468 1F3FC 200D 1F393
 1F468 1F3FC 200D 1F3A4
 1F468 1F3FC 200D 1F3A8
@@ -935,9 +950,20 @@
 1F468 1F3FC 200D 2695 FE0F
 1F468 1F3FC 200D 2696 FE0F
 1F468 1F3FC 200D 2708 FE0F
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
 1F468 1F3FD
 1F468 1F3FD 200D 1F33E
 1F468 1F3FD 200D 1F373
+1F468 1F3FD 200D 1F37C
 1F468 1F3FD 200D 1F393
 1F468 1F3FD 200D 1F3A4
 1F468 1F3FD 200D 1F3A8
@@ -963,9 +989,20 @@
 1F468 1F3FD 200D 2695 FE0F
 1F468 1F3FD 200D 2696 FE0F
 1F468 1F3FD 200D 2708 FE0F
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
 1F468 1F3FE
 1F468 1F3FE 200D 1F33E
 1F468 1F3FE 200D 1F373
+1F468 1F3FE 200D 1F37C
 1F468 1F3FE 200D 1F393
 1F468 1F3FE 200D 1F3A4
 1F468 1F3FE 200D 1F3A8
@@ -991,9 +1028,20 @@
 1F468 1F3FE 200D 2695 FE0F
 1F468 1F3FE 200D 2696 FE0F
 1F468 1F3FE 200D 2708 FE0F
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
 1F468 1F3FF
 1F468 1F3FF 200D 1F33E
 1F468 1F3FF 200D 1F373
+1F468 1F3FF 200D 1F37C
 1F468 1F3FF 200D 1F393
 1F468 1F3FF 200D 1F3A4
 1F468 1F3FF 200D 1F3A8
@@ -1019,8 +1067,19 @@
 1F468 1F3FF 200D 2695 FE0F
 1F468 1F3FF 200D 2696 FE0F
 1F468 1F3FF 200D 2708 FE0F
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
 1F468 200D 1F33E
 1F468 200D 1F373
+1F468 200D 1F37C
 1F468 200D 1F393
 1F468 200D 1F3A4
 1F468 200D 1F3A8
@@ -1063,6 +1122,7 @@
 1F469 1F3FB
 1F469 1F3FB 200D 1F33E
 1F469 1F3FB 200D 1F373
+1F469 1F3FB 200D 1F37C
 1F469 1F3FB 200D 1F393
 1F469 1F3FB 200D 1F3A4
 1F469 1F3FB 200D 1F3A8
@@ -1092,9 +1152,30 @@
 1F469 1F3FB 200D 2695 FE0F
 1F469 1F3FB 200D 2696 FE0F
 1F469 1F3FB 200D 2708 FE0F
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
 1F469 1F3FC
 1F469 1F3FC 200D 1F33E
 1F469 1F3FC 200D 1F373
+1F469 1F3FC 200D 1F37C
 1F469 1F3FC 200D 1F393
 1F469 1F3FC 200D 1F3A4
 1F469 1F3FC 200D 1F3A8
@@ -1124,9 +1205,30 @@
 1F469 1F3FC 200D 2695 FE0F
 1F469 1F3FC 200D 2696 FE0F
 1F469 1F3FC 200D 2708 FE0F
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
 1F469 1F3FD
 1F469 1F3FD 200D 1F33E
 1F469 1F3FD 200D 1F373
+1F469 1F3FD 200D 1F37C
 1F469 1F3FD 200D 1F393
 1F469 1F3FD 200D 1F3A4
 1F469 1F3FD 200D 1F3A8
@@ -1156,9 +1258,30 @@
 1F469 1F3FD 200D 2695 FE0F
 1F469 1F3FD 200D 2696 FE0F
 1F469 1F3FD 200D 2708 FE0F
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
 1F469 1F3FE
 1F469 1F3FE 200D 1F33E
 1F469 1F3FE 200D 1F373
+1F469 1F3FE 200D 1F37C
 1F469 1F3FE 200D 1F393
 1F469 1F3FE 200D 1F3A4
 1F469 1F3FE 200D 1F3A8
@@ -1188,9 +1311,30 @@
 1F469 1F3FE 200D 2695 FE0F
 1F469 1F3FE 200D 2696 FE0F
 1F469 1F3FE 200D 2708 FE0F
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
 1F469 1F3FF
 1F469 1F3FF 200D 1F33E
 1F469 1F3FF 200D 1F373
+1F469 1F3FF 200D 1F37C
 1F469 1F3FF 200D 1F393
 1F469 1F3FF 200D 1F3A4
 1F469 1F3FF 200D 1F3A8
@@ -1220,8 +1364,29 @@
 1F469 1F3FF 200D 2695 FE0F
 1F469 1F3FF 200D 2696 FE0F
 1F469 1F3FF 200D 2708 FE0F
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
 1F469 200D 1F33E
 1F469 200D 1F373
+1F469 200D 1F37C
 1F469 200D 1F393
 1F469 200D 1F3A4
 1F469 200D 1F3A8
@@ -1300,10 +1465,22 @@
 1F46F 200D 2642 FE0F
 1F470
 1F470 1F3FB
+1F470 1F3FB 200D 2640 FE0F
+1F470 1F3FB 200D 2642 FE0F
 1F470 1F3FC
+1F470 1F3FC 200D 2640 FE0F
+1F470 1F3FC 200D 2642 FE0F
 1F470 1F3FD
+1F470 1F3FD 200D 2640 FE0F
+1F470 1F3FD 200D 2642 FE0F
 1F470 1F3FE
+1F470 1F3FE 200D 2640 FE0F
+1F470 1F3FE 200D 2642 FE0F
 1F470 1F3FF
+1F470 1F3FF 200D 2640 FE0F
+1F470 1F3FF 200D 2642 FE0F
+1F470 200D 2640 FE0F
+1F470 200D 2642 FE0F
 1F471
 1F471 1F3FB
 1F471 1F3FB 200D 2640 FE0F
@@ -1495,8 +1672,18 @@
 1F48D
 1F48E
 1F48F
+1F48F 1F3FB
+1F48F 1F3FC
+1F48F 1F3FD
+1F48F 1F3FE
+1F48F 1F3FF
 1F490
 1F491
+1F491 1F3FB
+1F491 1F3FC
+1F491 1F3FD
+1F491 1F3FE
+1F491 1F3FF
 1F492
 1F493
 1F494
@@ -1884,6 +2071,7 @@
 1F62C
 1F62D
 1F62E
+1F62E 200D 1F4A8
 1F62F
 1F630
 1F631
@@ -1891,7 +2079,9 @@
 1F633
 1F634
 1F635
+1F635 200D 1F4AB
 1F636
+1F636 200D 1F32B FE0F
 1F637
 1F638
 1F639
@@ -2196,6 +2386,8 @@
 1F6D1
 1F6D2
 1F6D5
+1F6D6
+1F6D7
 1F6E0 FE0F
 1F6E1 FE0F
 1F6E2 FE0F
@@ -2214,6 +2406,8 @@
 1F6F8
 1F6F9
 1F6FA
+1F6FB
+1F6FC
 1F7E0
 1F7E1
 1F7E2
@@ -2226,6 +2420,12 @@
 1F7E9
 1F7EA
 1F7EB
+1F90C
+1F90C 1F3FB
+1F90C 1F3FC
+1F90C 1F3FD
+1F90C 1F3FE
+1F90C 1F3FF
 1F90D
 1F90E
 1F90F
@@ -2355,10 +2555,22 @@
 1F934 1F3FF
 1F935
 1F935 1F3FB
+1F935 1F3FB 200D 2640 FE0F
+1F935 1F3FB 200D 2642 FE0F
 1F935 1F3FC
+1F935 1F3FC 200D 2640 FE0F
+1F935 1F3FC 200D 2642 FE0F
 1F935 1F3FD
+1F935 1F3FD 200D 2640 FE0F
+1F935 1F3FD 200D 2642 FE0F
 1F935 1F3FE
+1F935 1F3FE 200D 2640 FE0F
+1F935 1F3FE 200D 2642 FE0F
 1F935 1F3FF
+1F935 1F3FF 200D 2640 FE0F
+1F935 1F3FF 200D 2642 FE0F
+1F935 200D 2640 FE0F
+1F935 200D 2642 FE0F
 1F936
 1F936 1F3FB
 1F936 1F3FC
@@ -2524,10 +2736,18 @@
 1F96F
 1F970
 1F971
+1F972
 1F973
 1F974
 1F975
 1F976
+1F977
+1F977 1F3FB
+1F977 1F3FC
+1F977 1F3FD
+1F977 1F3FE
+1F977 1F3FF
+1F978
 1F97A
 1F97B
 1F97C
@@ -2569,12 +2789,17 @@
 1F9A0
 1F9A1
 1F9A2
+1F9A3
+1F9A4
 1F9A5
 1F9A6
 1F9A7
 1F9A8
 1F9A9
 1F9AA
+1F9AB
+1F9AC
+1F9AD
 1F9AE
 1F9AF
 1F9B0
@@ -2653,6 +2878,7 @@
 1F9C8
 1F9C9
 1F9CA
+1F9CB
 1F9CD
 1F9CD 1F3FB
 1F9CD 1F3FB 200D 2640 FE0F
@@ -2712,6 +2938,8 @@
 1F9D1 1F3FB
 1F9D1 1F3FB 200D 1F33E
 1F9D1 1F3FB 200D 1F373
+1F9D1 1F3FB 200D 1F37C
+1F9D1 1F3FB 200D 1F384
 1F9D1 1F3FB 200D 1F393
 1F9D1 1F3FB 200D 1F3A4
 1F9D1 1F3FB 200D 1F3A8
@@ -2738,9 +2966,19 @@
 1F9D1 1F3FB 200D 2695 FE0F
 1F9D1 1F3FB 200D 2696 FE0F
 1F9D1 1F3FB 200D 2708 FE0F
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF
 1F9D1 1F3FC
 1F9D1 1F3FC 200D 1F33E
 1F9D1 1F3FC 200D 1F373
+1F9D1 1F3FC 200D 1F37C
+1F9D1 1F3FC 200D 1F384
 1F9D1 1F3FC 200D 1F393
 1F9D1 1F3FC 200D 1F3A4
 1F9D1 1F3FC 200D 1F3A8
@@ -2767,9 +3005,19 @@
 1F9D1 1F3FC 200D 2695 FE0F
 1F9D1 1F3FC 200D 2696 FE0F
 1F9D1 1F3FC 200D 2708 FE0F
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF
 1F9D1 1F3FD
 1F9D1 1F3FD 200D 1F33E
 1F9D1 1F3FD 200D 1F373
+1F9D1 1F3FD 200D 1F37C
+1F9D1 1F3FD 200D 1F384
 1F9D1 1F3FD 200D 1F393
 1F9D1 1F3FD 200D 1F3A4
 1F9D1 1F3FD 200D 1F3A8
@@ -2796,9 +3044,19 @@
 1F9D1 1F3FD 200D 2695 FE0F
 1F9D1 1F3FD 200D 2696 FE0F
 1F9D1 1F3FD 200D 2708 FE0F
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF
 1F9D1 1F3FE
 1F9D1 1F3FE 200D 1F33E
 1F9D1 1F3FE 200D 1F373
+1F9D1 1F3FE 200D 1F37C
+1F9D1 1F3FE 200D 1F384
 1F9D1 1F3FE 200D 1F393
 1F9D1 1F3FE 200D 1F3A4
 1F9D1 1F3FE 200D 1F3A8
@@ -2825,9 +3083,19 @@
 1F9D1 1F3FE 200D 2695 FE0F
 1F9D1 1F3FE 200D 2696 FE0F
 1F9D1 1F3FE 200D 2708 FE0F
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF
 1F9D1 1F3FF
 1F9D1 1F3FF 200D 1F33E
 1F9D1 1F3FF 200D 1F373
+1F9D1 1F3FF 200D 1F37C
+1F9D1 1F3FF 200D 1F384
 1F9D1 1F3FF 200D 1F393
 1F9D1 1F3FF 200D 1F3A4
 1F9D1 1F3FF 200D 1F3A8
@@ -2854,8 +3122,18 @@
 1F9D1 1F3FF 200D 2695 FE0F
 1F9D1 1F3FF 200D 2696 FE0F
 1F9D1 1F3FF 200D 2708 FE0F
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE
 1F9D1 200D 1F33E
 1F9D1 200D 1F373
+1F9D1 200D 1F37C
+1F9D1 200D 1F384
 1F9D1 200D 1F393
 1F9D1 200D 1F3A4
 1F9D1 200D 1F3A8
@@ -2892,10 +3170,22 @@
 1F9D3 1F3FF
 1F9D4
 1F9D4 1F3FB
+1F9D4 1F3FB 200D 2640 FE0F
+1F9D4 1F3FB 200D 2642 FE0F
 1F9D4 1F3FC
+1F9D4 1F3FC 200D 2640 FE0F
+1F9D4 1F3FC 200D 2642 FE0F
 1F9D4 1F3FD
+1F9D4 1F3FD 200D 2640 FE0F
+1F9D4 1F3FD 200D 2642 FE0F
 1F9D4 1F3FE
+1F9D4 1F3FE 200D 2640 FE0F
+1F9D4 1F3FE 200D 2642 FE0F
 1F9D4 1F3FF
+1F9D4 1F3FF 200D 2640 FE0F
+1F9D4 1F3FF 200D 2642 FE0F
+1F9D4 200D 2640 FE0F
+1F9D4 200D 2642 FE0F
 1F9D5
 1F9D5 1F3FB
 1F9D5 1F3FC
@@ -3088,18 +3378,59 @@
 1FA71
 1FA72
 1FA73
+1FA74
 1FA78
 1FA79
 1FA7A
 1FA80
 1FA81
 1FA82
+1FA83
+1FA84
+1FA85
+1FA86
 1FA90
 1FA91
 1FA92
 1FA93
 1FA94
 1FA95
+1FA96
+1FA97
+1FA98
+1FA99
+1FA9A
+1FA9B
+1FA9C
+1FA9D
+1FA9E
+1FA9F
+1FAA0
+1FAA1
+1FAA2
+1FAA3
+1FAA4
+1FAA5
+1FAA6
+1FAA7
+1FAA8
+1FAB0
+1FAB1
+1FAB2
+1FAB3
+1FAB4
+1FAB5
+1FAB6
+1FAC0
+1FAC1
+1FAC2
+1FAD0
+1FAD1
+1FAD2
+1FAD3
+1FAD4
+1FAD5
+1FAD6
 203C FE0F
 2049 FE0F
 2122 FE0F
@@ -3234,6 +3565,7 @@
 26A0 FE0F
 26A1
 26A1 FE0F
+26A7 FE0F
 26AA
 26AA FE0F
 26AB
@@ -3343,6 +3675,8 @@
 2763 FE0F
 2764
 2764 FE0F
+2764 FE0F 200D 1F525
+2764 FE0F 200D 1FA79
 2795
 2796
 2797
diff --git a/emoji/NotoColorEmoji.ttf b/emoji/NotoColorEmoji.ttf
index 3c2688f..98fadf4 100644
--- a/emoji/NotoColorEmoji.ttf
+++ b/emoji/NotoColorEmoji.ttf
Binary files differ