From 7a2968942574ebefa33927caa17b01461e0e9438 Mon Sep 17 00:00:00 2001 From: lancer <591320480@qq.com> Date: Thu, 16 Dec 2021 17:15:40 +0800 Subject: [PATCH] =?UTF-8?q?Description:harfbuzz=E7=89=88=E6=9C=AC=E9=99=8D?= =?UTF-8?q?=E4=BD=8E=E5=88=B02.7.2=20Sig:harfbuzz=20Feature=20or=20Bugfix:?= =?UTF-8?q?Feature=20Binary=20Source:No?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lancer --- .github/workflows/coverity-scan.yml | 39 + .github/workflows/linux-ci.yml | 54 ++ .github/workflows/msvc-ci.yml | 50 + .github/workflows/msys2-ci.yml | 59 ++ meson-cc-tests/intel-atomic-primitives-test.c | 6 + meson-cc-tests/solaris-atomic-operations.c | 8 + src/dump-indic-data.cc | 43 + src/dump-khmer-data.cc | 41 + src/dump-myanmar-data.cc | 43 + src/dump-use-data.cc | 38 + src/hb-ot-shape-complex-use-table.cc | 873 ++++++++++++++++++ src/hb-ot-shape-complex-use.hh | 105 +++ subprojects/fontconfig.wrap | 6 + ...inimized-hb-subset-fuzzer-5741295280848896 | Bin 0 -> 98822 bytes ...es_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2140 bytes ...rules_f1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 2028 bytes ...rules_f1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2048 bytes ...subrules_f1.keep-layout-retain-gids.41.otf | Bin 0 -> 1916 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3756 bytes ...tiple_subrules_f1.keep-layout.41,42,43.otf | Bin 0 -> 1440 bytes ...multiple_subrules_f1.keep-layout.41,42.otf | Bin 0 -> 1324 bytes ...multiple_subrules_f1.keep-layout.41,43.otf | Bin 0 -> 1332 bytes ...t1_multiple_subrules_f1.keep-layout.41.otf | Bin 0 -> 1216 bytes ...es_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3756 bytes ...es_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2156 bytes ...rules_f1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 2040 bytes ...rules_f1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2048 bytes ...subrules_f1.keep-layout-retain-gids.41.otf | Bin 0 -> 1916 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3772 bytes ...tiple_subrules_f1.keep-layout.41,42,43.otf | Bin 0 -> 1456 bytes ...multiple_subrules_f1.keep-layout.41,42.otf | Bin 0 -> 1336 bytes ...multiple_subrules_f1.keep-layout.41,43.otf | Bin 0 -> 1332 bytes ...t2_multiple_subrules_f1.keep-layout.41.otf | Bin 0 -> 1216 bytes ...es_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3772 bytes ...le_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2120 bytes ...imple_f1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 1912 bytes ...imple_f1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2028 bytes ...3_simple_f1.keep-layout-retain-gids.41.otf | Bin 0 -> 1896 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3736 bytes ...ontext3_simple_f1.keep-layout.41,42,43.otf | Bin 0 -> 1420 bytes ...s_context3_simple_f1.keep-layout.41,42.otf | Bin 0 -> 1208 bytes ...s_context3_simple_f1.keep-layout.41,43.otf | Bin 0 -> 1312 bytes ...gpos_context3_simple_f1.keep-layout.41.otf | Bin 0 -> 1196 bytes ...le_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3736 bytes ...1_2_font.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2068 bytes ...1_2_font.keep-layout-retain-gids.41,46.otf | Bin 0 -> 2232 bytes ...pos1_2_font.keep-layout-retain-gids.41.otf | Bin 0 -> 1932 bytes ...1_2_font.keep-layout-retain-gids.42,44.otf | Bin 0 -> 1992 bytes ...1_2_font.keep-layout-retain-gids.43,46.otf | Bin 0 -> 2096 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3668 bytes .../gpos1_2_font.keep-layout.41,43.otf | Bin 0 -> 1352 bytes .../gpos1_2_font.keep-layout.41,46.otf | Bin 0 -> 1484 bytes .../gpos1_2_font.keep-layout.41.otf | Bin 0 -> 1232 bytes .../gpos1_2_font.keep-layout.42,44.otf | Bin 0 -> 1268 bytes .../gpos1_2_font.keep-layout.43,46.otf | Bin 0 -> 1348 bytes ..._font.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3668 bytes ...font7.keep-layout-retain-gids.21,23,25.otf | Bin 0 -> 1764 bytes ..._1_font7.keep-layout-retain-gids.21,23.otf | Bin 0 -> 1632 bytes ...font7.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 1988 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3688 bytes .../gpos2_1_font7.keep-layout.21,23,25.otf | Bin 0 -> 1428 bytes .../gpos2_1_font7.keep-layout.21,23.otf | Bin 0 -> 1308 bytes .../gpos2_1_font7.keep-layout.41,42,43.otf | Bin 0 -> 1288 bytes ...font7.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3688 bytes ...font5.keep-layout-retain-gids.21,23,25.otf | Bin 0 -> 1776 bytes ..._2_font5.keep-layout-retain-gids.21,23.otf | Bin 0 -> 1644 bytes ...font5.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 1988 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3684 bytes .../gpos2_2_font5.keep-layout.21,23,25.otf | Bin 0 -> 1440 bytes .../gpos2_2_font5.keep-layout.21,23.otf | Bin 0 -> 1320 bytes .../gpos2_2_font5.keep-layout.41,42,43.otf | Bin 0 -> 1288 bytes ...font5.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3684 bytes ...s3_font3.keep-layout-retain-gids.28,29.otf | Bin 0 -> 1712 bytes ...s3_font3.keep-layout-retain-gids.28,2B.otf | Bin 0 -> 1860 bytes ...s3_font3.keep-layout-retain-gids.29,2B.otf | Bin 0 -> 1772 bytes ...font3.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 1984 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3692 bytes .../gpos3_font3.keep-layout.28,29.otf | Bin 0 -> 1328 bytes .../gpos3_font3.keep-layout.28,2B.otf | Bin 0 -> 1456 bytes .../gpos3_font3.keep-layout.29,2B.otf | Bin 0 -> 1368 bytes .../gpos3_font3.keep-layout.41,42,43.otf | Bin 0 -> 1284 bytes ...font3.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3692 bytes ..._1.keep-layout-retain-gids.41,42,43,44.otf | Bin 0 -> 2344 bytes ..._1.keep-layout-retain-gids.41,42,43,45.otf | Bin 0 -> 2352 bytes ...ors_1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2104 bytes ...nchors_1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 1912 bytes ...keep-layout-retain-gids.41,43,44,45,46.otf | Bin 0 -> 2712 bytes ...ors_1.keep-layout-retain-gids.41,43,44.otf | Bin 0 -> 2348 bytes ...ors_1.keep-layout-retain-gids.41,43,45.otf | Bin 0 -> 2360 bytes ...nchors_1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2116 bytes ...e_anchors_1.keep-layout-retain-gids.41.otf | Bin 0 -> 1896 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3772 bytes ...iple_anchors_1.keep-layout.41,42,43,44.otf | Bin 0 -> 1640 bytes ...iple_anchors_1.keep-layout.41,42,43,45.otf | Bin 0 -> 1632 bytes ...ultiple_anchors_1.keep-layout.41,42,43.otf | Bin 0 -> 1404 bytes ...4_multiple_anchors_1.keep-layout.41,42.otf | Bin 0 -> 1208 bytes ...e_anchors_1.keep-layout.41,43,44,45,46.otf | Bin 0 -> 1992 bytes ...ultiple_anchors_1.keep-layout.41,43,44.otf | Bin 0 -> 1632 bytes ...ultiple_anchors_1.keep-layout.41,43,45.otf | Bin 0 -> 1632 bytes ...4_multiple_anchors_1.keep-layout.41,43.otf | Bin 0 -> 1400 bytes ...pos4_multiple_anchors_1.keep-layout.41.otf | Bin 0 -> 1196 bytes ...ors_1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3772 bytes ...t1.keep-layout-retain-gids.41,42,43,44.otf | Bin 0 -> 2320 bytes ...t1.keep-layout-retain-gids.41,42,43,45.otf | Bin 0 -> 2328 bytes ...font1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2080 bytes ...s6_font1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 1888 bytes ...keep-layout-retain-gids.41,43,44,45,46.otf | Bin 0 -> 2688 bytes ...font1.keep-layout-retain-gids.41,43,44.otf | Bin 0 -> 2324 bytes ...font1.keep-layout-retain-gids.41,43,45.otf | Bin 0 -> 2336 bytes ...s6_font1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2092 bytes ...gpos6_font1.keep-layout-retain-gids.41.otf | Bin 0 -> 1872 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3748 bytes .../gpos6_font1.keep-layout.41,42,43,44.otf | Bin 0 -> 1616 bytes .../gpos6_font1.keep-layout.41,42,43,45.otf | Bin 0 -> 1608 bytes .../gpos6_font1.keep-layout.41,42,43.otf | Bin 0 -> 1380 bytes .../gpos6_font1.keep-layout.41,42.otf | Bin 0 -> 1184 bytes ...gpos6_font1.keep-layout.41,43,44,45,46.otf | Bin 0 -> 1968 bytes .../gpos6_font1.keep-layout.41,43,44.otf | Bin 0 -> 1608 bytes .../gpos6_font1.keep-layout.41,43,45.otf | Bin 0 -> 1608 bytes .../gpos6_font1.keep-layout.41,43.otf | Bin 0 -> 1376 bytes .../gpos6_font1.keep-layout.41.otf | Bin 0 -> 1172 bytes ...font1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3748 bytes ...f1.keep-layout-retain-gids.30,31,32,33.otf | Bin 0 -> 2408 bytes ...es_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2032 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3776 bytes ...le_subrules_f1.keep-layout.30,31,32,33.otf | Bin 0 -> 1944 bytes ...tiple_subrules_f1.keep-layout.41,42,43.otf | Bin 0 -> 1332 bytes ...es_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3776 bytes ...f1.keep-layout-retain-gids.30,31,32,33.otf | Bin 0 -> 2428 bytes ...es_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2032 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3808 bytes ...le_subrules_f1.keep-layout.30,31,32,33.otf | Bin 0 -> 1964 bytes ...tiple_subrules_f1.keep-layout.41,42,43.otf | Bin 0 -> 1332 bytes ...es_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3808 bytes ...f1.keep-layout-retain-gids.30,31,32,33.otf | Bin 0 -> 2400 bytes ...le_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2008 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3744 bytes ...ing3_simple_f1.keep-layout.30,31,32,33.otf | Bin 0 -> 1936 bytes ...aining3_simple_f1.keep-layout.41,42,43.otf | Bin 0 -> 1308 bytes ...le_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3744 bytes ...tion.keep-layout-retain-gids.53A9,53F1.otf | Bin 0 -> 5108 bytes ...stitution.keep-layout-retain-gids.53A9.otf | Bin 0 -> 4676 bytes ...stitution.keep-layout-retain-gids.53F1.otf | Bin 0 -> 3012 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 6820 bytes ...ate_substitution.keep-layout.53A9,53F1.otf | Bin 0 -> 4984 bytes ...lternate_substitution.keep-layout.53A9.otf | Bin 0 -> 4524 bytes ...lternate_substitution.keep-layout.53F1.otf | Bin 0 -> 2816 bytes ...ution.keep-layout.retain-all-codepoint.otf | Bin 0 -> 6728 bytes ...f1.keep-layout-retain-gids.30,31,32,33.otf | Bin 0 -> 2380 bytes ...es_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2044 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3748 bytes ...le_subrules_f1.keep-layout.30,31,32,33.otf | Bin 0 -> 1916 bytes ...tiple_subrules_f1.keep-layout.41,42,43.otf | Bin 0 -> 1344 bytes ...es_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3748 bytes ...f1.keep-layout-retain-gids.30,31,32,33.otf | Bin 0 -> 2408 bytes ...es_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2044 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3780 bytes ...le_subrules_f1.keep-layout.30,31,32,33.otf | Bin 0 -> 1944 bytes ...tiple_subrules_f1.keep-layout.41,42,43.otf | Bin 0 -> 1344 bytes ...es_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3780 bytes ...f2.keep-layout-retain-gids.30,31,32,33.otf | Bin 0 -> 2368 bytes ...le_f2.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2020 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3716 bytes ...ing3_simple_f2.keep-layout.30,31,32,33.otf | Bin 0 -> 1904 bytes ...aining3_simple_f2.keep-layout.41,42,43.otf | Bin 0 -> 1320 bytes ...le_f2.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3716 bytes ...lcaps.keep-layout-retain-gids.41,42,43.ttf | Bin 0 -> 6780 bytes ...mallcaps.keep-layout-retain-gids.41,43.ttf | Bin 0 -> 6396 bytes ...r.smallcaps.keep-layout-retain-gids.41.ttf | Bin 0 -> 6032 bytes ...r.smallcaps.keep-layout-retain-gids.43.ttf | Bin 0 -> 6088 bytes ...mallcaps.keep-layout-retain-gids.CA,CB.ttf | Bin 0 -> 7932 bytes ...Regular.smallcaps.keep-layout.41,42,43.ttf | Bin 0 -> 2972 bytes ...to-Regular.smallcaps.keep-layout.41,43.ttf | Bin 0 -> 2572 bytes ...oboto-Regular.smallcaps.keep-layout.41.ttf | Bin 0 -> 2196 bytes ...oboto-Regular.smallcaps.keep-layout.43.ttf | Bin 0 -> 2268 bytes ...to-Regular.smallcaps.keep-layout.CA,CB.ttf | Bin 0 -> 2612 bytes .../data/profiles/keep-layout-retain-gids.txt | 2 + test/subset/data/profiles/keep-layout.txt | 1 + 178 files changed, 1368 insertions(+) create mode 100644 .github/workflows/coverity-scan.yml create mode 100644 .github/workflows/linux-ci.yml create mode 100644 .github/workflows/msvc-ci.yml create mode 100644 .github/workflows/msys2-ci.yml create mode 100644 meson-cc-tests/intel-atomic-primitives-test.c create mode 100644 meson-cc-tests/solaris-atomic-operations.c create mode 100644 src/dump-indic-data.cc create mode 100644 src/dump-khmer-data.cc create mode 100644 src/dump-myanmar-data.cc create mode 100644 src/dump-use-data.cc create mode 100644 src/hb-ot-shape-complex-use-table.cc create mode 100644 src/hb-ot-shape-complex-use.hh create mode 100644 subprojects/fontconfig.wrap create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5741295280848896 create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41,46.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.42,44.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.43,46.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41,46.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.42,44.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.43,46.otf create mode 100644 test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.21,23,25.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.21,23.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.21,23,25.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.21,23.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.21,23,25.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.21,23.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.21,23,25.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.21,23.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.28,29.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.28,2B.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.29,2B.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.28,29.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.28,2B.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.29,2B.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,44,45,46.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,44,45,46.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44,45,46.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44,45,46.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout-retain-gids.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout.30,31,32,33.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41,42,43.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41,43.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.43.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.CA,CB.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41,42,43.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41,43.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.43.ttf create mode 100644 test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.CA,CB.ttf create mode 100644 test/subset/data/profiles/keep-layout-retain-gids.txt create mode 100644 test/subset/data/profiles/keep-layout.txt diff --git a/.github/workflows/coverity-scan.yml b/.github/workflows/coverity-scan.yml new file mode 100644 index 00000000..a2c311f9 --- /dev/null +++ b/.github/workflows/coverity-scan.yml @@ -0,0 +1,39 @@ +name: coverity-scan + +on: + schedule: + - cron: '0 10 * * *' # Daily at 10:00 UTC + +jobs: + latest: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - run: sudo apt-get install gcc clang wget git curl pkg-config libfreetype6-dev libglib2.0-dev libicu-dev libgraphite2-dev + + - name: Download Coverity + run: | + wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=$TOKEN&project=behdad/harfbuzz" -O cov-analysis-linux64.tar.gz + mkdir cov-analysis-linux64 + tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64 + env: + TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + + # ideally we should've used meson and ninja here but it complains about coverage or something + - run: cov-analysis-linux64/bin/cov-build --dir cov-int clang src/hb-*.cc -DHAVE_FREETYPE -DHAVE_GRAPHITE2 -DHAVE_GLIB -DHAVE_ICU `pkg-config --cflags freetype2 graphite2 glib-2.0 icu-uc` -DHAVE_INTEL_ATOMIC_PRIMITIVES -DHAVE_ROUNDF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H -DHAVE_GETPAGESIZE -DHB_EXPERIMENTAL_API -c + + - run: tar czvf harfbuzz.tgz cov-int + + - name: submit to coverity + run: | + curl \ + --form project=behdad/harfbuzz \ + --form token=$TOKEN \ + --form email=harfbuzz-bots-chatter@googlegroups.com \ + --form file=@harfbuzz.tgz \ + --form version=trunk \ + --form description="`git rev-parse --short HEAD`" \ + https://scan.coverity.com/builds?project=behdad-harfbuzz + env: + TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} diff --git a/.github/workflows/linux-ci.yml b/.github/workflows/linux-ci.yml new file mode 100644 index 00000000..80572f81 --- /dev/null +++ b/.github/workflows/linux-ci.yml @@ -0,0 +1,54 @@ +name: linux-ci + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: install dependencies + run: sudo apt-get install pkg-config gcc ragel gcovr gtk-doc-tools libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python3 python3-setuptools ninja-build gobject-introspection libgirepository1.0-dev + - run: sudo pip3 install fonttools + - run: sudo pip3 install git+https://github.com/mesonbuild/meson + - name: run + run: meson build -Db_coverage=true --auto-features=enabled -Dgraphite=enabled -Doptimization=2 + - name: ci + run: meson test --print-errorlogs -Cbuild + + - name: generate documentations + run: ninja -Cbuild harfbuzz-doc + - name: deploy documentations + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + run: .ci/deploy-docs.sh + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + REVISION: ${{ github.sha }} + + # waiting for https://github.com/rhysd/github-action-benchmark/issues/36 to happen + # - name: benchmark + # run: build/perf/perf --benchmark_format=json > perf/result.json + # - name: store benchmark result + # uses: rhysd/github-action-benchmark@b2ee598 + # if: github.event_name != 'pull_request' + # with: + # name: C++ Benchmark + # tool: 'googlecpp' + # output-file-path: perf/result.json + # gh-pages-branch: gh-pages + # github-token: ${{ secrets.PERSONAL_GITHUB_TOKEN }} + # auto-push: true + # alert-threshold: '150%' + # comment-on-alert: true + # fail-on-alert: true + + - name: cov + run: ninja -Cbuild coverage + - uses: codecov/codecov-action@v1 + with: + file: build/meson-logs/coverage.xml diff --git a/.github/workflows/msvc-ci.yml b/.github/workflows/msvc-ci.yml new file mode 100644 index 00000000..4fae289a --- /dev/null +++ b/.github/workflows/msvc-ci.yml @@ -0,0 +1,50 @@ +name: msvc + +on: + push: + pull_request: + +jobs: + msvc: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [windows-2016, windows-latest] + include: + - name: msvc-2017-x86 + os: windows-2016 + ARCH: x86 + - name: msvc-2019-amd64 + os: windows-latest + ARCH: amd64 + name: ${{ matrix.name }} + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: '3.x' + - uses: ilammy/msvc-dev-cmd@v1 + with: + arch : ${{ matrix.ARCH }} + - name: Install Dependencies + run: | + pip install --upgrade meson ninja fonttools + - name: Build + run: | + # This dir contains a pkg-config which meson will happily use and later fail, so remove it + $env:path = ($env:path.Split(';') | Where-Object { $_ -ne 'C:\Strawberry\perl\bin' }) -join ';' + + meson setup build ` + --wrap-mode=default ` + --buildtype=release ` + -Dglib=enabled ` + -Dfreetype=enabled ` + -Dgdi=enabled ` + -Ddirectwrite=enabled + + meson compile -C build + - name: Test + run: | + meson test --print-errorlogs --suite=harfbuzz -C build diff --git a/.github/workflows/msys2-ci.yml b/.github/workflows/msys2-ci.yml new file mode 100644 index 00000000..ea4f15f0 --- /dev/null +++ b/.github/workflows/msys2-ci.yml @@ -0,0 +1,59 @@ +name: msys2 + +on: + push: + pull_request: + +jobs: + msys2: + runs-on: windows-latest + + strategy: + matrix: + include: + - MSYSTEM: MINGW32 + MSYS2_ARCH: i686 + - MSYSTEM: MINGW64 + MSYS2_ARCH: x86_64 + name: ${{ matrix.MSYSTEM }} + + defaults: + run: + shell: msys2 {0} + steps: + - uses: actions/checkout@v2 + - uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.MSYSTEM }} + update: true + install: >- + mingw-w64-${{ matrix.MSYS2_ARCH }}-cairo + mingw-w64-${{ matrix.MSYS2_ARCH }}-freetype + mingw-w64-${{ matrix.MSYS2_ARCH }}-gcc + mingw-w64-${{ matrix.MSYS2_ARCH }}-gcc-libs + mingw-w64-${{ matrix.MSYS2_ARCH }}-gettext + mingw-w64-${{ matrix.MSYS2_ARCH }}-glib2 + mingw-w64-${{ matrix.MSYS2_ARCH }}-gobject-introspection + mingw-w64-${{ matrix.MSYS2_ARCH }}-graphite2 + mingw-w64-${{ matrix.MSYS2_ARCH }}-icu + mingw-w64-${{ matrix.MSYS2_ARCH }}-meson + mingw-w64-${{ matrix.MSYS2_ARCH }}-ninja + mingw-w64-${{ matrix.MSYS2_ARCH }}-pkg-config + mingw-w64-${{ matrix.MSYS2_ARCH }}-python-fonttools + mingw-w64-${{ matrix.MSYS2_ARCH }}-python3 + mingw-w64-${{ matrix.MSYS2_ARCH }}-ragel + - name: Build + run: | + meson build \ + --wrap-mode=nodownload \ + --auto-features=enabled \ + -Ddirectwrite=enabled \ + -Dgdi=enabled \ + -Dgraphite=enabled + ninja -C build + - name: Test + run: | + meson test \ + --print-errorlogs \ + --suite=harfbuzz \ + -C build diff --git a/meson-cc-tests/intel-atomic-primitives-test.c b/meson-cc-tests/intel-atomic-primitives-test.c new file mode 100644 index 00000000..a5c80409 --- /dev/null +++ b/meson-cc-tests/intel-atomic-primitives-test.c @@ -0,0 +1,6 @@ +void memory_barrier (void) { __sync_synchronize (); } +int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); } +int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); } +void mutex_unlock (int *m) { __sync_lock_release (m); } + +int main(void) { return 0;} diff --git a/meson-cc-tests/solaris-atomic-operations.c b/meson-cc-tests/solaris-atomic-operations.c new file mode 100644 index 00000000..fae0acd8 --- /dev/null +++ b/meson-cc-tests/solaris-atomic-operations.c @@ -0,0 +1,8 @@ +#include +/* This requires Solaris Studio 12.2 or newer: */ +#include +void memory_barrier (void) { __machine_rw_barrier (); } +int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); } +void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); } + +int main(void) { return 0; } diff --git a/src/dump-indic-data.cc b/src/dump-indic-data.cc new file mode 100644 index 00000000..8ddc9d5a --- /dev/null +++ b/src/dump-indic-data.cc @@ -0,0 +1,43 @@ +/* + * Copyright © 2018 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-ot-shape-complex-indic.hh" + +int +main () +{ + for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++) + { + hb_glyph_info_t info; + info.codepoint = u; + set_indic_properties (info); + if (info.indic_category() != INDIC_SYLLABIC_CATEGORY_OTHER || + info.indic_position() != INDIC_MATRA_CATEGORY_NOT_APPLICABLE) + printf("U+%04X %u %u\n", u, + info.indic_category(), + info.indic_position()); + } +} diff --git a/src/dump-khmer-data.cc b/src/dump-khmer-data.cc new file mode 100644 index 00000000..cffbb92d --- /dev/null +++ b/src/dump-khmer-data.cc @@ -0,0 +1,41 @@ +/* + * Copyright © 2018 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-ot-shape-complex-khmer.hh" + +int +main () +{ + for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++) + { + hb_glyph_info_t info; + info.codepoint = u; + set_khmer_properties (info); + if (info.khmer_category() != INDIC_SYLLABIC_CATEGORY_OTHER) + printf("U+%04X %u\n", u, + info.khmer_category()); + } +} diff --git a/src/dump-myanmar-data.cc b/src/dump-myanmar-data.cc new file mode 100644 index 00000000..c1a303f8 --- /dev/null +++ b/src/dump-myanmar-data.cc @@ -0,0 +1,43 @@ +/* + * Copyright © 2018 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-ot-shape-complex-myanmar.hh" + +int +main () +{ + for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++) + { + hb_glyph_info_t info; + info.codepoint = u; + set_myanmar_properties (info); + if (info.myanmar_category() != INDIC_SYLLABIC_CATEGORY_OTHER || + info.myanmar_position() != INDIC_MATRA_CATEGORY_NOT_APPLICABLE) + printf("U+%04X %u %u\n", u, + info.myanmar_category(), + info.myanmar_position()); + } +} diff --git a/src/dump-use-data.cc b/src/dump-use-data.cc new file mode 100644 index 00000000..d639426b --- /dev/null +++ b/src/dump-use-data.cc @@ -0,0 +1,38 @@ +/* + * Copyright © 2018 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-ot-shape-complex-use.hh" + +int +main () +{ + for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++) + { + unsigned int category = hb_use_get_category (u); + if (category != USE_O) + printf("U+%04X %u\n", u, category); + } +} diff --git a/src/hb-ot-shape-complex-use-table.cc b/src/hb-ot-shape-complex-use-table.cc new file mode 100644 index 00000000..aa9c3508 --- /dev/null +++ b/src/hb-ot-shape-complex-use-table.cc @@ -0,0 +1,873 @@ +/* == Start of generated table == */ +/* + * The following table is generated by running: + * + * ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt Blocks.txt + * + * on files with these headers: + * + * # IndicSyllabicCategory-13.0.0.txt + * # Date: 2019-07-22, 19:55:00 GMT [KW, RP] + * # IndicPositionalCategory-13.0.0.txt + * # Date: 2019-07-23, 00:01:00 GMT [KW, RP] + * # Blocks-13.0.0.txt + * # Date: 2019-07-10, 19:06:00 GMT [KW] + * UnicodeData.txt does not have a header. + */ + +#include "hb.hh" + +#ifndef HB_NO_OT_SHAPE + +#include "hb-ot-shape-complex-use.hh" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-macros" +#define B USE_B /* BASE */ +#define CGJ USE_CGJ /* CGJ */ +#define CS USE_CS /* CONS_WITH_STACKER */ +#define GB USE_GB /* BASE_OTHER */ +#define H USE_H /* HALANT */ +#define HN USE_HN /* HALANT_NUM */ +#define HVM USE_HVM /* HALANT_OR_VOWEL_MODIFIER */ +#define IND USE_IND /* BASE_IND */ +#define N USE_N /* BASE_NUM */ +#define O USE_O /* OTHER */ +#define R USE_R /* REPHA */ +#define Rsv USE_Rsv /* Reserved */ +#define S USE_S /* SYM */ +#define SUB USE_SUB /* CONS_SUB */ +#define Sk USE_Sk /* SAKOT */ +#define VS USE_VS /* VARIATION_SELECTOR */ +#define WJ USE_WJ /* Word_Joiner */ +#define ZWJ USE_ZWJ /* ZWJ */ +#define ZWNJ USE_ZWNJ /* ZWNJ */ +#define CMAbv USE_CMAbv +#define CMBlw USE_CMBlw +#define FAbv USE_FAbv +#define FBlw USE_FBlw +#define FPst USE_FPst +#define FMAbv USE_FMAbv +#define FMBlw USE_FMBlw +#define FMPst USE_FMPst +#define MAbv USE_MAbv +#define MBlw USE_MBlw +#define MPst USE_MPst +#define MPre USE_MPre +#define SMAbv USE_SMAbv +#define SMBlw USE_SMBlw +#define VAbv USE_VAbv +#define VBlw USE_VBlw +#define VPst USE_VPst +#define VPre USE_VPre +#define VMAbv USE_VMAbv +#define VMBlw USE_VMBlw +#define VMPst USE_VMPst +#define VMPre USE_VMPre +#pragma GCC diagnostic pop + +static const USE_TABLE_ELEMENT_TYPE use_table[] = { + + +#define use_offset_0x0028u 0 + + + /* Basic Latin */ + O, O, O, O, O, GB, O, O, + /* 0030 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0x00a0u 24 + + + /* Latin-1 Supplement */ + + /* 00A0 */ GB, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 00B0 */ O, O, FMPst, FMPst, O, O, O, O, O, O, O, O, O, O, O, O, + /* 00C0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 00D0 */ O, O, O, O, O, O, O, GB, + +#define use_offset_0x0348u 80 + + + /* Combining Diacritical Marks */ + O, O, O, O, O, O, O, CGJ, + +#define use_offset_0x0900u 88 + + + /* Devanagari */ + + /* 0900 */ VMAbv, VMAbv, VMAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0920 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0930 */ B, B, B, B, B, B, B, B, B, B, VAbv, VPst, CMBlw, B, VPst, VPre, + /* 0940 */ VPst, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VPst, VPst, VPst, VPst, H, VPre, VPst, + /* 0950 */ O, VMAbv, VMBlw, O, O, VAbv, VBlw, VBlw, B, B, B, B, B, B, B, B, + /* 0960 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0970 */ O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + + /* Bengali */ + + /* 0980 */ GB, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, O, B, + /* 0990 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 09A0 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 09B0 */ B, O, B, O, O, O, B, B, B, B, O, O, CMBlw, B, VPst, VPre, + /* 09C0 */ VPst, VBlw, VBlw, VBlw, VBlw, O, O, VPre, VPre, O, O, VPst, VPst, H, IND, O, + /* 09D0 */ O, O, O, O, O, O, O, VPst, O, O, O, O, B, B, O, B, + /* 09E0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, FMAbv, O, + + /* Gurmukhi */ + + /* 0A00 */ O, VMAbv, VMAbv, VMPst, O, B, B, B, B, B, B, O, O, O, O, B, + /* 0A10 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0A20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 0A30 */ B, O, B, B, O, B, B, O, B, B, O, O, CMBlw, O, VPst, VPre, + /* 0A40 */ VPst, VBlw, VBlw, O, O, O, O, VAbv, VAbv, O, O, VAbv, VAbv, H, O, O, + /* 0A50 */ O, VMBlw, O, O, O, O, O, O, O, B, B, B, B, O, B, O, + /* 0A60 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0A70 */ VMAbv, CMAbv, GB, GB, O, MBlw, O, O, O, O, O, O, O, O, O, O, + + /* Gujarati */ + + /* 0A80 */ O, VMAbv, VMAbv, VMPst, O, B, B, B, B, B, B, B, B, B, O, B, + /* 0A90 */ B, B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0AA0 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 0AB0 */ B, O, B, B, O, B, B, B, B, B, O, O, CMBlw, B, VPst, VPre, + /* 0AC0 */ VPst, VBlw, VBlw, VBlw, VBlw, VAbv, O, VAbv, VAbv, VAbv, O, VPst, VPst, H, O, O, + /* 0AD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 0AE0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0AF0 */ O, O, O, O, O, O, O, O, O, B, VMAbv, VMAbv, VMAbv, CMAbv, CMAbv, CMAbv, + + /* Oriya */ + + /* 0B00 */ O, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, O, B, + /* 0B10 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0B20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 0B30 */ B, O, B, B, O, B, B, B, B, B, O, O, CMBlw, B, VPst, VAbv, + /* 0B40 */ VPst, VBlw, VBlw, VBlw, VBlw, O, O, VPre, VPst, O, O, VPst, VPst, H, O, O, + /* 0B50 */ O, O, O, O, O, VAbv, VAbv, VAbv, O, O, O, O, B, B, O, B, + /* 0B60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0B70 */ O, B, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Tamil */ + + /* 0B80 */ O, O, VMAbv, IND, O, B, B, B, B, B, B, O, O, O, B, B, + /* 0B90 */ B, O, B, B, B, B, O, O, O, B, B, O, B, O, B, B, + /* 0BA0 */ O, O, O, B, B, O, O, O, B, B, B, O, O, O, B, B, + /* 0BB0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, VPst, VPst, + /* 0BC0 */ VAbv, VPst, VPst, O, O, O, VPre, VPre, VPre, O, VPst, VPst, VPst, H, O, O, + /* 0BD0 */ O, O, O, O, O, O, O, VPst, O, O, O, O, O, O, O, O, + /* 0BE0 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0BF0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Telugu */ + + /* 0C00 */ VMAbv, VMPst, VMPst, VMPst, VMAbv, B, B, B, B, B, B, B, B, O, B, B, + /* 0C10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0C20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, VAbv, VAbv, + /* 0C40 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O, + /* 0C50 */ O, O, O, O, O, VAbv, VBlw, O, B, B, B, O, O, O, O, O, + /* 0C60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0C70 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Kannada */ + + /* 0C80 */ B, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, B, B, + /* 0C90 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0CA0 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 0CB0 */ B, B, B, B, O, B, B, B, B, B, O, O, CMBlw, B, VPst, VAbv, + /* 0CC0 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O, + /* 0CD0 */ O, O, O, O, O, VPst, VPst, O, O, O, O, O, O, O, B, O, + /* 0CE0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0CF0 */ O, CS, CS, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Malayalam */ + + /* 0D00 */ VMAbv, VMAbv, VMPst, VMPst, B, B, B, B, B, B, B, B, B, O, B, B, + /* 0D10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0D30 */ B, B, B, B, B, B, B, B, B, B, B, VAbv, VAbv, B, VPst, VPst, + /* 0D40 */ VPst, VPst, VPst, VBlw, VBlw, O, VPre, VPre, VPre, O, VPst, VPst, VPst, H, R, O, + /* 0D50 */ O, O, O, O, IND, IND, IND, VPst, O, O, O, O, O, O, O, B, + /* 0D60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0D70 */ O, O, O, O, O, O, O, O, O, O, IND, IND, IND, IND, IND, IND, + + /* Sinhala */ + + /* 0D80 */ O, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, B, B, B, + /* 0D90 */ B, B, B, B, B, B, B, O, O, O, B, B, B, B, B, B, + /* 0DA0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0DB0 */ B, B, O, B, B, B, B, B, B, B, B, B, O, B, O, O, + /* 0DC0 */ B, B, B, B, B, B, B, O, O, O, H, O, O, O, O, VPst, + /* 0DD0 */ VPst, VPst, VAbv, VAbv, VBlw, O, VBlw, O, VPst, VPre, VPst, VPre, VPst, VPst, VPst, VPst, + /* 0DE0 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0DF0 */ O, O, VPst, VPst, O, O, O, O, + +#define use_offset_0x0f18u 1360 + + + /* Tibetan */ + VBlw, VBlw, O, O, O, O, O, O, + /* 0F20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0F30 */ B, B, B, B, O, FMBlw, O, FMBlw, O, CMAbv, O, O, O, O, VPst, VPre, + /* 0F40 */ B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, B, + /* 0F50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0F60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, + /* 0F70 */ O, VBlw, VBlw, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VMAbv, VMPst, + /* 0F80 */ VBlw, VAbv, VMAbv, VMAbv, VBlw, IND, VMAbv, VMAbv, B, B, B, B, B, SUB, SUB, SUB, + /* 0F90 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 0FA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 0FB0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, O, O, + /* 0FC0 */ O, O, O, O, O, O, FMBlw, O, + +#define use_offset_0x1000u 1536 + + + /* Myanmar */ + + /* 1000 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1020 */ B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VAbv, VAbv, VBlw, + /* 1030 */ VBlw, VPre, VAbv, VAbv, VAbv, VAbv, VMAbv, VMBlw, VMPst, H, VAbv, MPst, MPre, MBlw, MBlw, B, + /* 1040 */ B, B, B, B, B, B, B, B, B, B, O, GB, O, O, GB, O, + /* 1050 */ B, B, B, B, B, B, VPst, VPst, VBlw, VBlw, B, B, B, B, MBlw, MBlw, + /* 1060 */ MBlw, B, VPst, VMPst, VMPst, B, B, VPst, VPst, VMPst, VMPst, VMPst, VMPst, VMPst, B, B, + /* 1070 */ B, VAbv, VAbv, VAbv, VAbv, B, B, B, B, B, B, B, B, B, B, B, + /* 1080 */ B, B, MBlw, VPst, VPre, VAbv, VAbv, VMPst, VMPst, VMPst, VMPst, VMPst, VMPst, VMBlw, B, VMPst, + /* 1090 */ B, B, B, B, B, B, B, B, B, B, VMPst, VMPst, VPst, VAbv, O, O, + +#define use_offset_0x1700u 1696 + + + /* Tagalog */ + + /* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, B, + /* 1710 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O, + + /* Hanunoo */ + + /* 1720 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1730 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O, + + /* Buhid */ + + /* 1740 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1750 */ B, B, VAbv, VBlw, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Tagbanwa */ + + /* 1760 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, B, + /* 1770 */ B, O, VAbv, VBlw, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Khmer */ + + /* 1780 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1790 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 17A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 17B0 */ B, B, B, B, O, O, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VPst, VPst, + /* 17C0 */ VPst, VPre, VPre, VPre, VPst, VPst, VMAbv, VMPst, VPst, VMAbv, VMAbv, FMAbv, FAbv, CMAbv, FMAbv, FMAbv, + /* 17D0 */ FMAbv, VAbv, H, FMAbv, O, O, O, O, O, O, O, O, B, FMAbv, O, O, + /* 17E0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0x1900u 1936 + + + /* Limbu */ + + /* 1900 */ GB, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, + /* 1920 */ VAbv, VAbv, VBlw, VPst, VPst, VAbv, VAbv, VAbv, VAbv, SUB, SUB, SUB, O, O, O, O, + /* 1930 */ FPst, FPst, VMBlw, FPst, FPst, FPst, FPst, FPst, FPst, FBlw, VAbv, FMBlw, O, O, O, O, + /* 1940 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, + + /* Tai Le */ + + /* 1950 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1960 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, + /* 1970 */ B, B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, + + /* New Tai Lue */ + + /* 1980 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1990 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 19A0 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, + /* 19B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 19C0 */ B, B, B, B, B, B, B, B, VMPst, VMPst, O, O, O, O, O, O, + /* 19D0 */ B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, + /* 19E0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 19F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Buginese */ + + /* 1A00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1A10 */ B, B, B, B, B, B, B, VAbv, VBlw, VPre, VPst, VAbv, O, O, O, O, + + /* Tai Tham */ + + /* 1A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1A30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1A40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1A50 */ B, B, B, B, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, SUB, SUB, SUB, O, + /* 1A60 */ Sk, VPst, VAbv, VPst, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VAbv, VBlw, VPst, VPre, VPre, + /* 1A70 */ VPre, VPre, VPre, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VAbv, FMAbv, FMAbv, O, O, FMBlw, + /* 1A80 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 1A90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0x1b00u 2352 + + + /* Balinese */ + + /* 1B00 */ VMAbv, VMAbv, VMAbv, FAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, + /* 1B10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1B30 */ B, B, B, B, CMAbv, VPst, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VPre, + /* 1B40 */ VPst, VPst, VAbv, VAbv, H, B, B, B, B, B, B, B, O, O, O, O, + /* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, GB, GB, O, O, GB, + /* 1B60 */ O, S, GB, S, S, S, S, S, GB, S, S, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv, + /* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Sundanese */ + + /* 1B80 */ VMAbv, FAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1B90 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1BA0 */ B, SUB, SUB, SUB, VAbv, VBlw, VPre, VPst, VAbv, VAbv, VPst, H, SUB, SUB, B, B, + /* 1BB0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + + /* Batak */ + + /* 1BC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1BD0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1BE0 */ B, B, B, B, B, B, CMAbv, VPst, VAbv, VAbv, VPst, VPst, VPst, VAbv, VPst, VAbv, + /* 1BF0 */ FAbv, FAbv, CMBlw, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Lepcha */ + + /* 1C00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1C10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1C20 */ B, B, B, B, SUB, SUB, VPst, VPre, VPre, VPre, VPst, VPst, VBlw, FAbv, FAbv, FAbv, + /* 1C30 */ FAbv, FAbv, FAbv, FAbv, VMPre, VMPre, FMAbv, CMBlw, O, O, O, O, O, O, O, O, + /* 1C40 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, B, B, + +#define use_offset_0x1cd0u 2688 + + + /* Vedic Extensions */ + + /* 1CD0 */ VMAbv, VMAbv, VMAbv, O, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMAbv, VMAbv, VMBlw, VMBlw, VMBlw, VMBlw, + /* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, O, O, O, O, VMBlw, O, O, + /* 1CF0 */ O, O, IND, IND, VMAbv, CS, CS, VMPst, VMAbv, VMAbv, GB, O, O, O, O, O, + +#define use_offset_0x1df8u 2736 + + + /* Combining Diacritical Marks Supplement */ + O, O, O, FMAbv, O, O, O, O, + +#define use_offset_0x2008u 2744 + + + /* General Punctuation */ + O, O, O, O, ZWNJ, ZWJ, O, O, + /* 2010 */ GB, GB, GB, GB, GB, O, O, O, + +#define use_offset_0x2060u 2760 + + /* 2060 */ WJ, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Superscripts and Subscripts */ + + /* 2070 */ O, O, O, O, FMPst, O, O, O, O, O, O, O, O, O, O, O, + /* 2080 */ O, O, FMPst, FMPst, FMPst, O, O, O, + +#define use_offset_0x20f0u 2800 + + + /* Combining Diacritical Marks for Symbols */ + + /* 20F0 */ VMAbv, O, O, O, O, O, O, O, + +#define use_offset_0x25c8u 2808 + + + /* Geometric Shapes */ + O, O, O, O, GB, O, O, O, + +#define use_offset_0xa800u 2816 + + + /* Syloti Nagri */ + + /* A800 */ B, B, VAbv, B, B, B, H, B, B, B, B, VMAbv, B, B, B, B, + /* A810 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A820 */ B, B, B, VPst, VPst, VBlw, VAbv, VPst, O, O, O, O, VBlw, O, O, O, + /* A830 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Phags-pa */ + + /* A840 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A850 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A860 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A870 */ B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Saurashtra */ + + /* A880 */ VMPst, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A890 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A8A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A8B0 */ B, B, B, B, MPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, + /* A8C0 */ VPst, VPst, VPst, VPst, H, VMAbv, O, O, O, O, O, O, O, O, O, O, + /* A8D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + + /* Devanagari Extended */ + + /* A8E0 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, + /* A8F0 */ VMAbv, VMAbv, B, B, O, O, O, O, O, O, O, O, O, O, B, VAbv, + + /* Kayah Li */ + + /* A900 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A920 */ B, B, B, B, B, B, VAbv, VAbv, VAbv, VAbv, VAbv, VMBlw, VMBlw, VMBlw, O, O, + + /* Rejang */ + + /* A930 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A940 */ B, B, B, B, B, B, B, VBlw, VBlw, VBlw, VAbv, VBlw, VBlw, VBlw, VBlw, FAbv, + /* A950 */ FAbv, FAbv, FPst, VPst, O, O, O, O, O, O, O, O, O, O, O, O, + /* A960 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* A970 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Javanese */ + + /* A980 */ VMAbv, VMAbv, FAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, + /* A990 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A9A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* A9B0 */ B, B, B, CMAbv, VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VPre, VAbv, MBlw, MBlw, MBlw, + /* A9C0 */ H, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* A9D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + + /* Myanmar Extended-B */ + + /* A9E0 */ B, B, B, B, B, VAbv, O, B, B, B, B, B, B, B, B, B, + /* A9F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, + + /* Cham */ + + /* AA00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* AA10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* AA20 */ B, B, B, B, B, B, B, B, B, VMAbv, VAbv, VAbv, VAbv, VBlw, VAbv, VPre, + /* AA30 */ VPre, VAbv, VBlw, MPst, MPre, MBlw, MBlw, O, O, O, O, O, O, O, O, O, + /* AA40 */ B, B, B, FAbv, B, B, B, B, B, B, B, B, FAbv, FPst, O, O, + /* AA50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + + /* Myanmar Extended-A */ + + /* AA60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* AA70 */ O, B, B, B, GB, GB, GB, O, O, O, B, VMPst, VMAbv, VMPst, B, B, + + /* Tai Viet */ + + /* AA80 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* AA90 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* AAA0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* AAB0 */ VAbv, B, VAbv, VAbv, VBlw, B, B, VAbv, VAbv, B, B, B, B, B, VAbv, VMAbv, + /* AAC0 */ B, VMAbv, B, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* AAD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Meetei Mayek Extensions */ + + /* AAE0 */ B, B, B, B, B, B, B, B, B, B, B, VPre, VBlw, VAbv, VPre, VPst, + /* AAF0 */ O, O, O, O, O, VMPst, H, O, + +#define use_offset_0xabc0u 3576 + + + /* Meetei Mayek */ + + /* ABC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* ABD0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* ABE0 */ B, B, B, VPst, VPst, VAbv, VPst, VPst, VBlw, VPst, VPst, O, VMPst, VBlw, O, O, + /* ABF0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0xfe00u 3640 + + + /* Variation Selectors */ + + /* FE00 */ VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, + +#define use_offset_0x10a00u 3656 + + + /* Kharoshthi */ + + /* 10A00 */ B, VBlw, VBlw, VBlw, O, VAbv, VBlw, O, O, O, O, O, VBlw, VBlw, VMBlw, VMAbv, + /* 10A10 */ B, B, B, B, O, B, B, B, O, B, B, B, B, B, B, B, + /* 10A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 10A30 */ B, B, B, B, B, B, O, O, CMAbv, CMBlw, CMBlw, O, O, O, O, H, + /* 10A40 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, + +#define use_offset_0x11000u 3736 + + + /* Brahmi */ + + /* 11000 */ VMPst, VMAbv, VMPst, CS, CS, B, B, B, B, B, B, B, B, B, B, B, + /* 11010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11020 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11030 */ B, B, B, B, B, B, B, B, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, + /* 11040 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, HVM, O, O, O, O, O, O, O, O, O, + /* 11050 */ O, O, N, N, N, N, N, N, N, N, N, N, N, N, N, N, + /* 11060 */ N, N, N, N, N, N, B, B, B, B, B, B, B, B, B, B, + /* 11070 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, HN, + + /* Kaithi */ + + /* 11080 */ VMAbv, VMAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11090 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 110A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 110B0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VPst, VPst, H, CMBlw, O, O, O, O, O, + +#define use_offset_0x11100u 3928 + + + /* Chakma */ + + /* 11100 */ VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11110 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11120 */ B, B, B, B, B, B, B, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VBlw, VAbv, VAbv, + /* 11130 */ VBlw, VAbv, VAbv, H, CMBlw, O, B, B, B, B, B, B, B, B, B, B, + /* 11140 */ O, O, O, O, B, VPst, VPst, B, O, O, O, O, O, O, O, O, + + /* Mahajani */ + + /* 11150 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11160 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11170 */ B, B, B, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Sharada */ + + /* 11180 */ VMAbv, VMAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11190 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 111A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 111B0 */ B, B, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, + /* 111C0 */ H, B, R, R, O, O, O, O, GB, FMBlw, CMBlw, VAbv, VBlw, O, VPre, VMAbv, + /* 111D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + + /* Sinhala Archaic Numbers */ + + /* 111E0 */ O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 111F0 */ B, B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, + + /* Khojki */ + + /* 11200 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11210 */ B, B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VBlw, + /* 11230 */ VAbv, VAbv, VAbv, VAbv, VMAbv, H, CMAbv, CMAbv, O, O, O, O, O, O, VMAbv, O, + +#define use_offset_0x11280u 4248 + + + /* Multani */ + + /* 11280 */ B, B, B, B, B, B, B, O, B, O, B, B, B, B, O, B, + /* 11290 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, + /* 112A0 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, + + /* Khudawadi */ + + /* 112B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 112C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 112D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, + /* 112E0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, CMBlw, VBlw, O, O, O, O, O, + /* 112F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + + /* Grantha */ + + /* 11300 */ VMAbv, VMAbv, VMAbv, VMAbv, O, B, B, B, B, B, B, B, B, O, O, B, + /* 11310 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11320 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 11330 */ B, O, B, B, O, B, B, B, B, B, O, CMBlw, CMBlw, B, VPst, VPst, + /* 11340 */ VAbv, VPst, VPst, VPst, VPst, O, O, VPre, VPre, O, O, VPst, VPst, HVM, O, O, + /* 11350 */ O, O, O, O, O, O, O, VPst, O, O, O, O, O, O, B, B, + /* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, + /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, + +#define use_offset_0x11400u 4496 + + + /* Newa */ + + /* 11400 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11410 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11420 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11430 */ B, B, B, B, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, + /* 11440 */ VPst, VPst, H, VMAbv, VMAbv, VMPst, CMBlw, B, O, O, O, O, O, O, O, O, + /* 11450 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, FMAbv, B, + /* 11460 */ CS, CS, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11470 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Tirhuta */ + + /* 11480 */ O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11490 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 114A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 114B0 */ VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VPre, VAbv, VPst, VPst, VPst, VPst, VMAbv, + /* 114C0 */ VMAbv, VMAbv, H, CMBlw, B, O, O, O, O, O, O, O, O, O, O, O, + /* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0x11580u 4720 + + + /* Siddham */ + + /* 11580 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11590 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 115A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, VPst, + /* 115B0 */ VPre, VPst, VBlw, VBlw, VBlw, VBlw, O, O, VPre, VPst, VPst, VPst, VMAbv, VMAbv, VMPst, H, + /* 115C0 */ CMBlw, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 115D0 */ O, O, O, O, O, O, O, O, B, B, B, B, VBlw, VBlw, O, O, + /* 115E0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 115F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Modi */ + + /* 11600 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11610 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11620 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11630 */ VPst, VPst, VPst, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VPst, VPst, VMAbv, VMPst, H, + /* 11640 */ VAbv, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11650 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 11660 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11670 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Takri */ + + /* 11680 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11690 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 116A0 */ B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMPst, VAbv, VPre, VPst, + /* 116B0 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, H, CMBlw, B, O, O, O, O, O, O, O, + /* 116C0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 116D0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 116E0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 116F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Ahom */ + + /* 11700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11710 */ B, B, B, B, B, B, B, B, B, B, B, O, O, MBlw, MPre, MAbv, + /* 11720 */ VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VBlw, VAbv, VAbv, VAbv, O, O, O, O, + /* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, + +#define use_offset_0x11800u 5168 + + + /* Dogra */ + + /* 11800 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11810 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11820 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPre, VPst, VBlw, + /* 11830 */ VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VMAbv, VMPst, H, CMBlw, O, O, O, O, O, + +#define use_offset_0x11900u 5232 + + + /* Dives Akuru */ + + /* 11900 */ B, B, B, B, B, B, B, O, O, B, O, O, B, B, B, B, + /* 11910 */ B, B, B, B, O, B, B, O, B, B, B, B, B, B, B, B, + /* 11920 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11930 */ VPst, VPst, VPst, VPst, VPst, VPre, O, VPre, VPst, O, O, VMAbv, VMAbv, VPst, H, R, + /* 11940 */ MPst, R, MBlw, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0x119a0u 5328 + + + /* Nandinagari */ + + /* 119A0 */ B, B, B, B, B, B, B, B, O, O, B, B, B, B, B, B, + /* 119B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 119C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 119D0 */ B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, O, O, VAbv, VAbv, VPst, VPst, VMPst, VMPst, + /* 119E0 */ H, B, O, O, VPre, O, O, O, O, O, O, O, O, O, O, O, + /* 119F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + + /* Zanabazar Square */ + + /* 11A00 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, B, B, B, B, B, + /* 11A10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A30 */ B, B, B, FMBlw, VBlw, VMAbv, VMAbv, VMAbv, VMAbv, VMPst, R, MBlw, MBlw, MBlw, MBlw, GB, + /* 11A40 */ O, O, O, O, O, GB, O, H, O, O, O, O, O, O, O, O, + + /* Soyombo */ + + /* 11A50 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VBlw, VBlw, VBlw, B, B, B, B, + /* 11A60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A80 */ B, B, B, B, R, R, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, + /* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, B, O, O, + +#define use_offset_0x11c00u 5584 + + + /* Bhaiksuki */ + + /* 11C00 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 11C10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11C20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, VPst, + /* 11C30 */ VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VBlw, O, VAbv, VAbv, VAbv, VAbv, VMAbv, VMAbv, VMPst, H, + /* 11C40 */ B, O, O, O, GB, GB, O, O, O, O, O, O, O, O, O, O, + /* 11C50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11C60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, + + /* Marchen */ + + /* 11C70 */ O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11C80 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11C90 */ O, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O, + +#define use_offset_0x11d00u 5768 + + + /* Masaram Gondi */ + + /* 11D00 */ B, B, B, B, B, B, B, O, B, B, O, B, B, B, B, B, + /* 11D10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11D30 */ B, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, O, O, O, VAbv, O, VAbv, VAbv, O, VAbv, + /* 11D40 */ VMAbv, VMAbv, CMBlw, VAbv, VBlw, H, R, MBlw, O, O, O, O, O, O, O, O, + /* 11D50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + + /* Gunjala Gondi */ + + /* 11D60 */ B, B, B, B, B, B, O, B, B, O, B, B, B, B, B, B, + /* 11D70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11D80 */ B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VPst, VPst, O, + /* 11D90 */ VAbv, VAbv, O, VPst, VPst, VMAbv, VMPst, H, O, O, O, O, O, O, O, O, + /* 11DA0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +#define use_offset_0x11ee0u 5944 + + + /* Makasar */ + + /* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O, + +}; /* Table items: 5968; occupancy: 74% */ + +USE_TABLE_ELEMENT_TYPE +hb_use_get_category (hb_codepoint_t u) +{ + switch (u >> 12) + { + case 0x0u: + if (hb_in_range (u, 0x0028u, 0x003Fu)) return use_table[u - 0x0028u + use_offset_0x0028u]; + if (hb_in_range (u, 0x00A0u, 0x00D7u)) return use_table[u - 0x00A0u + use_offset_0x00a0u]; + if (hb_in_range (u, 0x0348u, 0x034Fu)) return use_table[u - 0x0348u + use_offset_0x0348u]; + if (hb_in_range (u, 0x0900u, 0x0DF7u)) return use_table[u - 0x0900u + use_offset_0x0900u]; + if (hb_in_range (u, 0x0F18u, 0x0FC7u)) return use_table[u - 0x0F18u + use_offset_0x0f18u]; + break; + + case 0x1u: + if (hb_in_range (u, 0x1000u, 0x109Fu)) return use_table[u - 0x1000u + use_offset_0x1000u]; + if (hb_in_range (u, 0x1700u, 0x17EFu)) return use_table[u - 0x1700u + use_offset_0x1700u]; + if (hb_in_range (u, 0x1900u, 0x1A9Fu)) return use_table[u - 0x1900u + use_offset_0x1900u]; + if (hb_in_range (u, 0x1B00u, 0x1C4Fu)) return use_table[u - 0x1B00u + use_offset_0x1b00u]; + if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return use_table[u - 0x1CD0u + use_offset_0x1cd0u]; + if (hb_in_range (u, 0x1DF8u, 0x1DFFu)) return use_table[u - 0x1DF8u + use_offset_0x1df8u]; + break; + + case 0x2u: + if (hb_in_range (u, 0x2008u, 0x2017u)) return use_table[u - 0x2008u + use_offset_0x2008u]; + if (hb_in_range (u, 0x2060u, 0x2087u)) return use_table[u - 0x2060u + use_offset_0x2060u]; + if (hb_in_range (u, 0x20F0u, 0x20F7u)) return use_table[u - 0x20F0u + use_offset_0x20f0u]; + if (hb_in_range (u, 0x25C8u, 0x25CFu)) return use_table[u - 0x25C8u + use_offset_0x25c8u]; + break; + + case 0xAu: + if (hb_in_range (u, 0xA800u, 0xAAF7u)) return use_table[u - 0xA800u + use_offset_0xa800u]; + if (hb_in_range (u, 0xABC0u, 0xABFFu)) return use_table[u - 0xABC0u + use_offset_0xabc0u]; + break; + + case 0xFu: + if (hb_in_range (u, 0xFE00u, 0xFE0Fu)) return use_table[u - 0xFE00u + use_offset_0xfe00u]; + break; + + case 0x10u: + if (hb_in_range (u, 0x10A00u, 0x10A4Fu)) return use_table[u - 0x10A00u + use_offset_0x10a00u]; + break; + + case 0x11u: + if (hb_in_range (u, 0x11000u, 0x110BFu)) return use_table[u - 0x11000u + use_offset_0x11000u]; + if (hb_in_range (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u]; + if (hb_in_range (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u]; + if (hb_in_range (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u]; + if (hb_in_range (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u]; + if (hb_in_range (u, 0x11800u, 0x1183Fu)) return use_table[u - 0x11800u + use_offset_0x11800u]; + if (hb_in_range (u, 0x11900u, 0x1195Fu)) return use_table[u - 0x11900u + use_offset_0x11900u]; + if (hb_in_range (u, 0x119A0u, 0x11A9Fu)) return use_table[u - 0x119A0u + use_offset_0x119a0u]; + if (hb_in_range (u, 0x11C00u, 0x11CB7u)) return use_table[u - 0x11C00u + use_offset_0x11c00u]; + if (hb_in_range (u, 0x11D00u, 0x11DAFu)) return use_table[u - 0x11D00u + use_offset_0x11d00u]; + if (hb_in_range (u, 0x11EE0u, 0x11EF7u)) return use_table[u - 0x11EE0u + use_offset_0x11ee0u]; + break; + + default: + break; + } + return USE_O; +} + +#undef B +#undef CGJ +#undef CS +#undef GB +#undef H +#undef HN +#undef HVM +#undef IND +#undef N +#undef O +#undef R +#undef Rsv +#undef S +#undef SUB +#undef Sk +#undef VS +#undef WJ +#undef ZWJ +#undef ZWNJ +#undef CMAbv +#undef CMBlw +#undef FAbv +#undef FBlw +#undef FPst +#undef FMAbv +#undef FMBlw +#undef FMPst +#undef MAbv +#undef MBlw +#undef MPst +#undef MPre +#undef SMAbv +#undef SMBlw +#undef VAbv +#undef VBlw +#undef VPst +#undef VPre +#undef VMAbv +#undef VMBlw +#undef VMPst +#undef VMPre + + +#endif +/* == End of generated table == */ diff --git a/src/hb-ot-shape-complex-use.hh b/src/hb-ot-shape-complex-use.hh new file mode 100644 index 00000000..ce6645ec --- /dev/null +++ b/src/hb-ot-shape-complex-use.hh @@ -0,0 +1,105 @@ +/* + * Copyright © 2015 Mozilla Foundation. + * Copyright © 2015 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Mozilla Author(s): Jonathan Kew + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_OT_SHAPE_COMPLEX_USE_HH +#define HB_OT_SHAPE_COMPLEX_USE_HH + +#include "hb.hh" + + +#include "hb-ot-shape-complex.hh" + + +#define USE_TABLE_ELEMENT_TYPE uint8_t + +/* Cateories used in the Universal Shaping Engine spec: + * https://docs.microsoft.com/en-us/typography/script-development/use + */ +/* Note: This enum is duplicated in the -machine.rl source file. + * Not sure how to avoid duplication. */ +enum use_category_t { + USE_O = 0, /* OTHER */ + + USE_B = 1, /* BASE */ + USE_IND = 3, /* BASE_IND */ + USE_N = 4, /* BASE_NUM */ + USE_GB = 5, /* BASE_OTHER */ + USE_CGJ = 6, /* CGJ */ +// USE_F = 7, /* CONS_FINAL */ + USE_FM = 8, /* CONS_FINAL_MOD */ +// USE_M = 9, /* CONS_MED */ +// USE_CM = 10, /* CONS_MOD */ + USE_SUB = 11, /* CONS_SUB */ + USE_H = 12, /* HALANT */ + + USE_HN = 13, /* HALANT_NUM */ + USE_ZWNJ = 14, /* Zero width non-joiner */ + USE_ZWJ = 15, /* Zero width joiner */ + USE_WJ = 16, /* Word joiner */ + USE_Rsv = 17, /* Reserved characters */ + USE_R = 18, /* REPHA */ + USE_S = 19, /* SYM */ +// USE_SM = 20, /* SYM_MOD */ + USE_VS = 21, /* VARIATION_SELECTOR */ +// USE_V = 36, /* VOWEL */ +// USE_VM = 40, /* VOWEL_MOD */ + USE_CS = 43, /* CONS_WITH_STACKER */ + + /* https://github.com/harfbuzz/harfbuzz/issues/1102 */ + USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */ + + USE_Sk = 48, /* SAKOT */ + + USE_FAbv = 24, /* CONS_FINAL_ABOVE */ + USE_FBlw = 25, /* CONS_FINAL_BELOW */ + USE_FPst = 26, /* CONS_FINAL_POST */ + USE_MAbv = 27, /* CONS_MED_ABOVE */ + USE_MBlw = 28, /* CONS_MED_BELOW */ + USE_MPst = 29, /* CONS_MED_POST */ + USE_MPre = 30, /* CONS_MED_PRE */ + USE_CMAbv = 31, /* CONS_MOD_ABOVE */ + USE_CMBlw = 32, /* CONS_MOD_BELOW */ + USE_VAbv = 33, /* VOWEL_ABOVE / VOWEL_ABOVE_BELOW / VOWEL_ABOVE_BELOW_POST / VOWEL_ABOVE_POST */ + USE_VBlw = 34, /* VOWEL_BELOW / VOWEL_BELOW_POST */ + USE_VPst = 35, /* VOWEL_POST UIPC = Right */ + USE_VPre = 22, /* VOWEL_PRE / VOWEL_PRE_ABOVE / VOWEL_PRE_ABOVE_POST / VOWEL_PRE_POST */ + USE_VMAbv = 37, /* VOWEL_MOD_ABOVE */ + USE_VMBlw = 38, /* VOWEL_MOD_BELOW */ + USE_VMPst = 39, /* VOWEL_MOD_POST */ + USE_VMPre = 23, /* VOWEL_MOD_PRE */ + USE_SMAbv = 41, /* SYM_MOD_ABOVE */ + USE_SMBlw = 42, /* SYM_MOD_BELOW */ + USE_FMAbv = 45, /* CONS_FINAL_MOD UIPC = Top */ + USE_FMBlw = 46, /* CONS_FINAL_MOD UIPC = Bottom */ + USE_FMPst = 47, /* CONS_FINAL_MOD UIPC = Not_Applicable */ +}; + +HB_INTERNAL USE_TABLE_ELEMENT_TYPE +hb_use_get_category (hb_codepoint_t u); + +#endif /* HB_OT_SHAPE_COMPLEX_USE_HH */ diff --git a/subprojects/fontconfig.wrap b/subprojects/fontconfig.wrap new file mode 100644 index 00000000..6b18b2b4 --- /dev/null +++ b/subprojects/fontconfig.wrap @@ -0,0 +1,6 @@ +[wrap-git] +directory=fontconfig +url=https://github.com/centricular/fontconfig.git +depth=1 +push-url=git@github.com:centricular/fontconfig.git +revision=meson diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5741295280848896 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5741295280848896 new file mode 100644 index 0000000000000000000000000000000000000000..0c5c73481c9e3df2a4e4dd80644a1e4252b53252 GIT binary patch literal 98822 zcmeFa1z1(v);GQ>5m8W5Q9|jKZZ_Q@0t$$9N_UrpbW4|XcejXufP{3n0-KW9bo>{b zd+#~-yyxEc-tT+=&-c9NuFbPIE9ROp)|fHI{Eaan2oMMa9pVW=f;@eu$jIzNYW*Gp zLEr?gYU!G3TS9I_3W4)X;GEUa)X9LS7$X}vp9jvL8tH56VWvey0LP8Mm)!`saN`Im z1UTLYzGOybwvK3lkX|5t9B_Wy)IwJq$nQRIJ`SAUG}CspM7)8F2%H1gASCA6X8JT= zg?b&3{bKsm8f_Pj8xvD$xb@}O0sfo!8hae%X zUZoy#)fl<@Kgqj|2B8OX%0e6fPH#YflCD3%Gf1y5Z6RNP^z;yV#H{O_fLoV;`2eL} z<&6Y9@yjz;XV)J@2-4;C0TN;&LO28kf`Ax^r~+J({^dV{22drs>lA-`=C8S5Uxnxy zTa!QpASw{mU+REtjbIGi!MeJOuzy`slIxb}Aud385nHcXa9xWlO5psZW;hUJ2nleG z4E$Y{qk4H&D;1#ndA}*`iq?n_-oH@*NXdf0i}>cM5X5WByuU8*`Z_(L;q?gw74qt; z6l63YM{D5w%P|6k3OM`a7!iU2N%+e#5|DrHUyhL>oRH3Knx*95L=)H%#f$RA18361YFSv{tH3uAm+e*{p&M%AhiX=7&z9wPA>@D zwFOdI0M~7R)Km~Xh&IF?$WafVsUDEh8o~giwSbsGsDGE&Rr#jZPm(|sfE*2hyi9?o zt$%mM1mtj4tEUj2zvM^)9R0Rlzve{$yJvr!isZV*e_Z14Yw!}N&sB@w0QEBm+V$Hy z$U_wWc7^Am0F?}Yc9;S=>Hv2bAZ*uPuIqOF zwwC|6Emv>;pMMapdF_f%0FJ+b4uN0-eg9z!Ff=`1&@ufy;x=$y5P$P63CYqXNG!FI3AyNPbaYT15QFY?VWs2GYNM07LeLwL!yIJ z?yF9?Tju7^=tV`l2;@HwHZ^Uzud3?t^eyM5$GMI!3DU=XCMJ1=U;<|2n{Iayz9U$( zw(XalU7iOmb#AJ`mY0d;8E&i@W{No>LUuZMGU;!!1NDJGBt_*!iiNbiu8#jfEA9Zd zFt1wyB^7l5`kekRt&okBmQj3u_uWd8%hVJe&3kcrU!gbVPPq@&S8vIZeJj;!{}hcL zuw6PD-Qmmht%~XGeSC_9`y7Q5Pwz23FTH`Bs6(&w*oPx;{K=bb8(y0N$!FF!eb7q| zN|qH2X?Ri+1AWowxL_@l+pv@Vu=W)G7Uav(-GM5~y0HwT*Mb63Z^c6l^f$$`r^dU- zEHOP_AX4d95XzTTem8wRH-Xmusm8ZoUXe3Oom&}_|3n*ANH~@z$|vT*d$+|$Day** zQ#a7i^iq*M41R=N5)t!=qxp8#7#`$c{_JR_ZHuAro;*isjtO7wu`Ic* zPTbYx?4*6%@!fFr?GJd>BYW3HFK=Z((dx%pr_P;Ff2l~bJ4aPj7&)JhFFEF32Xz^d zMy77@oW64u5EsH{ z(TZwv4f&yugt-W@mv^b)Ra$G@;}o9CFJh+`e)R6H`+tS|9a?zcbWS)EXLEn{PTIkRdt6N=_rZk;K}L&#e|-J0a1=j@ohGUo$j&Z9lhCR5_kZ)fTToc5-b7 z>v1bn#{+S7n<;{it&B7+xrea9Uyuo_*~S&p7=u- z7(CtSJ3PUAgkX6aQc+onil`kU{XlvQTjXc){5_5bV(;VQ5UJWEHGQb6yeP;n+q>nl z8ok~4Ofh_B?sg=W#v=ATSKjoPc`1x`Yuezxi!+^^^=t83ax@9XcRvz8HBYvo=I}Pd zPev|Iq6|B43VZq^H!jU>%&(?(6&fwvm$1-@8Eu$Y@9*rTdO12B?;1K8&u4-NOH%*)& z8?1c`bUxj3+Q}%r5Jly}Lz*ms;D4_W8SX6V=XPv#UhhMRc}bhjuvG$^{yI`f#Zq$j z!rn9-A2WE*D+WhpQN!KI{$%pqL26f(+1b|qPA8)XO{XWm{r0{CCSwZc?r;^|ZfciW zN6v1subCS>iB2XSr~mmpx>~f@sqk}jm{4ytY9v&m(c%vKB(*&?k;&ljfK+W=YqK3) z{6jHJ{AW}7#r_DmTy6fAJ?VmkXtLpPJlXnz#UX5D4mq!+Jw$@z1!su0yl*DE$)wf) z9ea`dZFt`WhV~K&1nr*qA=rT59lq@1zQvW~w1 z^X`TxyO_ri{kj*r@C>orzG#Vf3i&hw;rsf-bL~3b@8RB1?4W4UHi1&4$?}aLhI|;4 z_9sH^7FTgL&rp1rE0I&y@~n$Sxq)6e8q-aC0he%hSeNvOzdF?VE06>O7v@ey0KJHr zroAW$wX-7`N7&4AtKrIAZa&RE;(Ug;`t*}~9&P>MEUisRqjkhdOp)wWQN8U%_>^3+ znnce@4=K-x;zeqaCQps}RFpZ`*BfneP+h+wZNHi zpVHOIEV^wiJE_=^|% z#oTA4$OlVT67ePsdNr2ElEn^QsOdAaU7W)wo>mj#fotCo0Y;Mr=f$vTlKBF=oWWB$V|l^;lzF_M9_mrY*l{eZ;5(l5 zat&q2B_rRlqI&cBtKXe(d~G3mk?og_XREQOm_~i~%#6xpAIgd~^H6S1PS2%Rt5!S4 z%4GbuUwR_)`l(dz_6CJ8cS+>DZIs#L{tb>GZXtHn{ox9dX`;6uCF{V&YoWQUc6LRgd5 z^Vu2^3W*)?UM@UWTwux+N+H_cCmq};9XhL8(Clkrqu8PQhB+0bH8&gAp|a8|Cr)(2 znii_%$IehZ_fb|7>2yxx@Enu8n)87`ZQJaYeDJ)USyG}9906_gy%=McncSQ)49jdy zzu;LgoF9JE3fInzf1GQh<6&;l+>yja?`8komL`ikn}vqW3Mc9ku}%-_Se7G1eSpP$OPZX;3bxB({Y=W(8$OiBKt@vh8xm{$J8Q&AO)i>6 z=FaRn$e#8RRojWld@dI`M|qU)68y0Hw}eWCUGSiear=($gE-19?wH2fJBs%pMo^^& zB5U~Osr;d2f8!DnQ=r$~je&cg?>yR|ZCpPvL_}~3GlmG9rcJ`1)z3OFp>L&;dMSBp z`C)w4b1)6wo;~j4TTh8~Pa_J|^QBDH&^<+|Q5!et=@F@N z3jz)@G7sy$t@^{&#Ra~=*&1(}pNC~vj=lJ67T@YbgY`i=q&f!82s%-6v z=~D{nHd8`^9PqQ%x=Y_F*R+h@-&eSEccauqhQbQRzTjcG&M}g9iL0a_M62XgM!;*6 za+PlQ!F?c)8XumDA=P4nSep@tN6dF1E|MQ<@i8=>diYkDa0CK`vnN)2S$+G$smple zOOhDSkP@GI4@`~Pd1>X6S#72veSjNhoU7v6Rj2t_^|~Ud1xu#IfpYrMPM3pPgWR15 zM+##7#7lv)!mRAKHK0aakyE4y@mDm#d@A{d>IwchGjsR81;mT+fXc<)U6hK>5Pf|U zqUGSnjpn$#*t++Fz9KtQ9+;g=S5%Ya9@J`G?0PEqeIS68o+9&EcYfS%xg;s}@R0qA zcMB27q$654rgqj%Z@`Nfdeiwk!YxEd0|Qo!D$)-(k7s9|2ph_%K&oaS2@;Y=l0!w8 zj(!s%WP`xsDT!exd|g?RTA;M88QsC{R2gMmXhmAYIQIr*Bk6-O1HsSULh?o$fGP)d z?iGd%w~m(|eal6GY=ryYgKcd?*VmP&h5dr!RucqE+xUMFu?wBJvz>32Y7&J%g+n}J z-f>s7m6gr~zp1J7+g`~5*ePv9;yxGmwBh7Rjanp@!FmWTgye?o*<0gFRkVx_rK_oZ z;N;Ux98!-EZk0!vPi7Lp-7KH5&`_2mXH#8S{d9ni^0Hvr`*5W|3+QB2kMj{AA$jZy zpAekV#{9OQNpbI6UQy*$2{6D$5)n6^T9eU*86gmLBYw0HN~X|}m3%e4*HmL6!M{j# z<0DX`J3bAhm-iW*Ry-UgZJ3)we=?&$&ImSy6bOrp`8kePp+#5Bm)0wByi}IRW^t|` z;c2>j+XNz?#z1m1S)Uk`;^9Ow0&uXI+?aUk$*f-NI%|m|ngfKJZsg+4w_X_yT6cIB zS{`Mx6tKDxo{F;HeWS2{CLQ$^V^5?vqazO(X$iwG%6<4Km;BQ4Q(6S8f|8KXfjPpy zcAb5vj)ySWCP&0bN zLycI>JhDrB7Ik~rSEQH>Nh&BwHIucRPItW@sm_@&3aVLc;kF4k%5_-at8 zBzDdi{hlVCQbzV!R$+lbq84eOc&)-tFy2DWa`wGd-`qO&O<>?~VD95q_H97jvbSB^ zCkObpa$SBU;#Sa&O(C0)hn+IJW0Ib- zAFt{fD&7ScYv#3g~lxW@Ln6v2bNhLs2#Dtjn{fH${Gu}PlIY*Vv01_dn zwapyI7RvE#eR1(ZSO_$G|bEw~WM`>Mhiiv{IiZLFOA-#YjE;i{nqVf`$ z0E<*bu*(b#Wa(>n-dRmt)te{9A=3mQuZe>%Eh+awOmrbzaYUB+t0vX*lXzv$^d_dh zx^<72r7zEOLc{KmF5;5^&o=(X3~)J&gazc~mr3;Yv8- z>&s+Nk9s31qL*}Hj*Ws)+HlmgtFz2vBm)m&fJv zVyGro;1|vj&M{!=#X|sVByy_J`;^hImtvDLwqdJ)4dm%Yy*A%gm4cmmA;Z=;widz) zsZ<)EU3ca?-Jgj!OsyDPwv@l(KsWct4X-1uP9C(T^z-i}+;RwuyXgRVC1648b+2wV zA%=Ts*|L0%3*hL2Hy<`Jx;Qt3cQqKBj*LFiR^;9ER7vYwig0n^J@~>CfJ%gw{sd@q z5ySLE`$V0VB*_zw07+vYm4VQV3pqBC6YJha%L}z>^FUx+9Uy3j6W`rB-;Ywu(cSVoKv_5Q4>xk_{lf0w}7e{x<0}oAbKSpOCgz; zNqurBjX7aE<^Tp@R-bw&a!lyH(daS$s0tP~^(~;SYC1h#A^QnG$5;5nUiV+v3v}Y` z2bKH>3IFxhSx_?N{En6sW5{M0K`lMZdEIPmMe}l7>YSAT==zl_VsqQE<~6gsZ$6S< zW)TSR=tjzukX?4SEX+w$UyXp`Mu&tLT@4G+!S6p3iEcZ8=b}NZBsTuYUfly9YsqnH zy6X2INV_h#L(=*;P)l)hzSf4yXrGrBs;x?dzis_NH}&Jx>Eci7o?Z~MNRHL$0$}dztmg*U z9HUn+QqCbXwy}Vb*rI&G3kTWA#G3`puW?uF0?Oz_{j0uz6jchgZK1kfQRw85P(R0d zL)geVoG|oD14YpB;}OHXn=xAWiEQNLM%5E37-h2X2`VFMHOJo0R#4rWrKGugGBJrPtD)>3 z_O*|HbNL~#?8tZr$WE{5w&yO3`uXI#p3jqrY9(do=n>2U(|e5;gYB31>{JnFI<_UCB~D$mK+q31%44+}We5oK>3>*-$j zuJ8@OTmA4SnVG3?wibUkRh=08K8rfGdXwOcHRN{F8$)TzeuDU*Gudk;_X$40w_3E(RgBD(c4A&ztOG z#HKaUy^&evyH#N$+u!feB^X&`glSQ(q*(3RIbGJ(iFr)io9beC|G}yHD_sjc>3RGI zif4&&+O69bBn=W1H9?uXe!j+34@}+nbk2`WsOSRRoF)1$+AC))f#D6l1zUfIO=s1^SxT&3$8q58z2i<5Z|=G1dE;P9RN1HmecBO1+zjPGR=8SWB$H0K-qzSNME8XV zy2(3y!*zQ@WG-KymgQu1%uaq@2-i~eH9gw5$y2XWr7J8D#`fahSyp##^km;exHq8osIJ292a`Y)g_IAn$+r5G1$A*Fz z>omhV!QNUmr{m=|S$oM2ZmO1R?U*;tKRMYRZH8oWSJI;^ORs&kAbYKx!w`3$#UWof zXnj!9`tqqz;SPJ~BjH5+Tfh=kOcEB3pu=3FrJgLTsazv7>b4tQ7R0m;8&JyKb6!3_ zYe};AnC!}_s6uNsf9BKh$isCzrT?^Tm#o76NERt`PSQY@-Hl5*e}&O}A`b_)owL75 z&V_nA=mt-$E2vHQh>KOR(aC`5mB(_lfwcD8&?L zDn5P)O?})t7&v}9<=d9eBBPwVNEOg8#atZ#nfyvl9Gdbu(qa6503&Sh=TTLBYcSX3 zcO`d@XHqT4)b%r%W>oH-&!Tbda5k}A;8Iil4w zUAM5PFAa)eM?$^CT-p7rd3^&jMM2Aiyv!&2G2-P$q@NHXlAs%uZ@f%CXguId=G!)Dxesioc zc;`xi;id@}Axey|(-~s!H{4xU`!H^rZ}W&mH3N06MSoQk_nE)whURCRL}Cfo^tCT+4rMGMp>qL3WCA z&GhthKL{p{CRlfhW*6^Ruv$GGX`h_@ zY#wWAmTa2BuW0P9LHUxBO$57FOMvXK(S~@#xt~w7LX)u7Jk=7j#M z1Imi!szPupegFdxR1}r2GWv*c$u=OIH`;2^s$`0}LUmE3bjqRdLA=7z$8#3z3;RA! zwn?oBN_Q8BypH^hM3fF4E8S=Be+;%{bBk9*XF%7=c9YCZNfr zN>BevS((M7%=E}L+sC-6gFtEiFimdm&6Dj)MRO}#+T!#l$PI49TM9$xTr0^uk|FFA zOu&np*2>35A9d7U!q=3Z8T|fahl!}`U7LvRlhRLBi4v9_2i zVAjw0*W~Qp%8^bljP=O|_Z1dvqrVqWZHv(DeV&}f_E>Ni11hmtt{{RgFSg;5&}|ty zEV5?1-@5ok!ouA%y<&>&wI*X?bKK(*>9JBx!UXdzuP3U8NmdTubi>?qWqUpVqv2@V zM3F>bildIxkF}h+4-CUqO2|`#{ZU0pEizIqXRn^5S?;NQVD<0mjcFtmt3bK+svRPF zxlGLUYFeF}Ry?(`tG})ttFHc!@zK)`NUu&dg^!OAR3CjZLH#+7- zNiN-bXRKENA2yROtDAz-!mf3Kr+HEOzV}41`fH*^Qq%;UEXyck)}2+_2N^dA8cvZ; zrM@smGNq?xViM*S_uwTVty@dY027$ii7DFf$>*=8gamAX9i-z<6P?5kQRI*FQm$45 z+f^`2l!`E(g9%UZ6hku{_ivUoz9ofX?5_O6t_5QR$(noXo2 z<^DQDnOdkVH%v?SJjY#~-61(>i25QVtK7Ytbtl^V9xX8F4v(`@B{IwL?$mEZQ4~4g z;VRzsQeXd0w?VJ3aq(r6=jg8B3vcvJ}#2bpBl zoIm8t>eaEn_+iKt>fCxiAlj==LFN_g?fA@?%45a2`{w@z1U6jQ~$Q!)t<%#Y9+oc z*vU5CENAO*Du2a^!{nK6 zU>rZPd}2=edm-01d}^J-8WvTVNG{j#%sXqs2xU`ij4PZ&k(oa$m)avzCcT2j_2@DS zlHkcot}Oz-LLvAR1DWB<{8A5CPKqtn`PN}K?Kg$D^HSZi#As_^-gxPe~{ z_1g@GvfSHgbZagQ)>gV+eH}cmB_&T&Gn|cV-$J*84VKqG8vO1;3>u{V`qnpHeD zN#3J3dI zxJ$X@{T))Odk214g?S-OD1qM)Iv*_bMI-^cT3dA(W-q(AjNX%BZj6=7=eT=(C=?oP zzKlPjF-}hl{f=;So|Pr(c2=q#yPtdvzXfb`m?)b*cra*j!14CztvAD1BeP$imfFcu zLH&z$J#QFU)w>$4L<@RStk_iAV{yVlue1;h+y)$&4117X=zY364_+Cvaj&srdOWn# zv+{%Fuq^Xl=W4dr14_2DUA>lx3jQ=K+$**A9UG`)aFG)S8SlaDT*_&?LyjP_@ zHd-w9I9ABN}+RjOhg+;CDwl=b6o zd0+3m&)aYr27Oof<_)mFG}i394*NXPbo5q2fMR_NirdP_k=bp1k^f5dbT(&^k)C6e zsfucv&@Gn?*Dk=^8?lmXSd}hvy1@@8#XVgj*Y_c5K2)(rr>gK`&d>PnBFha@0n&Rr zTtW4kgO@p}F^adn)cv%q8uUL#rjmvht1|}p=rQ27mNc2|-_Ndp@ldb5$3jvfRrF2k zg*{%5V&J8HJ((@N7BGf&KhhX{6?@N+krWM?Ky86X+JXt>VdXXm;Zm zy_8Wm=u~%aM3ao$aU#VO=UU>}){D5Q3bU1()edccos2fogVRQdvK-tBx;LuSX<9v% zwVoPw&+ruun@B|(L!EMfE%a20DP^XHY&fq~bbKjFzrTgyB9Q*%AW2|I_PL6?we6a1 z+7Gw_&<@l)4n3o;8SZteZmvp5Ew;@k-;x&m%Q%~CyKMvFWa*vbKSd-{x34786yF}L z{E#Pa82z4~FW5wcZgjQTpT72fm6rU=W^Pqp6AqDQ;(7}AWvc}hjQhJT_5|3d*cv#Q zgSE!AEs$k_70F@#+r0)DkNt8-$$6gY+&Bx#I`mYb+7+t#gx(4M^bwx2Mkr3QTRta% z0+52Hj+?X0y3=zX1{-}CdR5w}jA;jpWdp!jZb&aLZG5;{dkuTL8;$4lLxQN<`L}qU z+|$S~x%0!mPv%Z^w5+n`fgW%0T!>eD%zZ{t4?f9hQC}TnNk7vve~TrGW2Z&hMcM)! zjo8icw7x}aiH?D{3YL>rPf}u_j|L0_$65~aOwX*dMfUOOjN(g^A7^zLoX!ovKBiK) zH+KfB(=r*^y~$!D-4hzIE}z8+*&5W6ZK6xwPZ*}xoJfzQ-jC-ol&db|&XWo9_rC0|%!X^3ne})jT&TSCZAigSB@LKqsHVG{PUy=W#W@(6xi0AuX^Oj% z>5iI!Yv=Z&|59?){i$drNg774x{-pmq$Hp2&v#NWSobyt^jwU~f|XlbsS0a^GlGQ4 zsBk+5(WqboB zFAF2}u{9&YWAWkNrawFv8V%k*yir8WC&)&DjOIm{V3z1Dc-(B#N9>h_YY|@y zTif$Ka_^Fc-NCh|gg#1@ra76`WcF0VOO02jT%p^3$lOP?a0jF7yp5`hU(bVSP0@^J zu(`k_-~L!im3!v}E^OTUHk0>^jo*|l6VVcm3Z5yfCfQM3S z&A*FpK;MsVi1Fh&@Aoxc*MsvAOSd0FVRzX4>T23CUP2c~$Ra0OVr?&m7IdU#pU;We zyJnkDNU5ICvDg_s&)ws^wY#;-W3i(WG)0*G1es^U(-Mw%oc7G>rKRvOPL!~-;yqL7 zw7z85vBy0%9iblf6tfR+?&T%zc^95q1|D^rw43H6nPt2E4B#AE%9)1-ZL>SRTN|UL< zCj)svrnZN*y4s&{6=&vSp|6LW1(K`&_wucCYK5J)^i^tfw(8kxK&0CDvaQYG5udoZOt6c5=QBO`&<1(-+(~ykjF4TrIjM zk;TWj8Qg4x@2=PLHJt(=ZoX4{^7O3!x<>Wqu5ZSbaxB4{`xj4M*4%P1Od^qNk_wg$ zRBNBqeZZoyO1FL)>#}%mbgsR*pi7!Og4JN>DJ#v z=)7S*a4ADVQZRcV(QR-^@`~zXHHW_>x<6yF!=ayxD<_=W#hl2c5No59=V+`j#us%X zc3rc|D*u)PxhZqd<_(1N`+2pFU0iyZ%ef?4WZs1FO)LRr{mCVjGVIST#ZWxAMfcEI z98XCGeD?)nwW5O~gvoTjK&%Y({U;29E_w;g8t4snluaXElr+(^^(Y77-3|z#huy1? zmEU|Tp3U9xJ>{w8#ECJmifr4u?NIQtJKekU(VBXhJFsW?z=y|_1IGtW@+15`f4hPs zY)8kMQ%P$4?OXe{rTTCv$*kSF{$8*}md=(C8tMpC`8?w$vI~2hpHg^r1AS!K+}*B6 z+yal{*L2FJGFn~44cGQlvu@d?01Kaqy^^4k#z7V3E*ZjC_hF;l-1>yWr$Hq#T(=so za9s8-wQ6Nw>-Q_8E)@@F4wd5xfq`!iK@jTuafV#8KG`arlX>uk&dsgy2%VD*p7Wi; zG1}&kEQO01Uh34n3?JC1j)#?|5#xOAVjHYpmfTA~wf#-brg z?_k-``1YxtP(@6eg?A44i@TBJCi^!fY1SwXmPN{H3E16d;stUl)I@?i2eusLFeOu~7wH)FI+oEcL&}=%nLXCCEQT|y6-SBAm zScKtT@Zlq&Z%=c?*_0z?v7`gZ@-kHx_iTbExO8>jxWN=Joi?Nr3rn(;pi#X;hFw1x z4T5S4h0gEB$+lzo)sI;DCWo$HjPmR)o?w2s>gV(+D9}k|4ck_Dm1h6o*pyWYosQpa zKGoGQ1C}9jldpHX2-se`E#d5-+B3+nqF2*>TfVz<8sdqcUx4rN9WPJ4?3Hm$2~Phz zW;6~N41%d*Hsq#*`|QCduqd;I)iGyLdUm(%Iyy-@8l|*)Md5I192W&IrV5HznG2X3 zpITH>CG95LYYdVLFSYWO=ryR*USU!OXc-Er>%X>&Eof+AI*zY(_u&R`BlV(wTd5ky z6Z?jyR@S#G?2V{pzjLakOJgr z$&zxBwpj6k#T22l`civz@|z^&#qKUFajEigtZA|Eid@Z*ll$wBs?-ycr=(E!B+Qyj z6PTpCTh5=4I95bpbMYbbd}9!qZu5h_IQo(i+j-~ya@y6bg=9DPHS)U$Pl3zKr&LYF zg<|Le27Mo0nvuM%u66k4^wPwfUt>|23B2Tm)@_$YtinTy@%8BN z6NlCHeb?w0SozNpO0)YMnS`M}8hghtR?+Xztv{qNNz)AbHh5qi^7W4PU^-O6K5itI zqO83$fV__!&rf|L0Ifq;$;CR7Qz0sZL#5Zgq3mtxj#Xztrs28WONPdWm+1SQ#WWIQ z^cpk|`I9NwdR`XX-3;p++!>{{KT3H~lP7MFO~m|TI3-n1O&Cz$j{Ct@+-ZCIPu9_@ z(D9&!pVTpcCOvcbR>MrsP(fx-A71(RoLu)OBtisNg10$Y^W&V}fXPjlsYl+pJI5k> z>w*kaub!R+ysInSsoHTFzI^A8H>1auzByxLXnZs0q~v6jiQ5gz6*WR*P|$wU!2q{( zpASh^t%jT_`)B35r!|QN->b8>4RbDLnqQdc?TyWK#kA7~PsrFK-n zr&rucP2l9yUN$lY#&&*82b<=yl6qM8<*-buRdhRp9E}%Yw}bPAJXd!L79*N(GFg^~ zg`_gEq%FtS`OP$eDm$@~h0j5nDJ>VfcETkUy^N<%&MpiPrbiWtpG>(EPPjdGbZJ%5 z49h`O*J?A+Er{^U%wwQ^wrA?YE`LOe-IN6_= zmu~(`uQM4=3_o7fqs~G?`&_fJz35x0ZxfvJ;u=(pm5ZY2(PJf~=29Z_`LmZluin-$ z;vmM(dxHag`N4)eSkuj94A^mkO28vuD73gIBd@2g9AUvqrE5NDk~w|-;=nVJ`=l3Nt;WW! z%QH^rP=tNT`6ijyE$X;KUX3xFsOJA*jH!=a&otkBh351`EUu!S3ftap{)74V(yz8S z%d=}l&6@NmZz!QJiQ20f?J8PgzT;~+y3RBnV@@rR#S$~xzhNad9iQg>#(<{IEv+D_ zEV(f&ySQsDviSO&nZmv*FGHnzj)iJ^NoqwLnbOM#GYmggz5{y*(Zd#0Y(&wCTsim+ zEW=KEz6}=rdkwRf^Y1@U}Osd3+Es_2f% zkrN(whDd74v}BoYVYY8r_|3$~?!O*385{~5<-aP$RDk3iF-f6w#?#QuWV-``<>{~y?J{-?n>v3}fFxw`?O zO75JYq{#7ZT6w~|mz%LK}t^&V#@L$gS*Gm4{x__Mc@6%k@>eovCrUKU&|0wg{r}?$X z*O?2L=wu;7CTILd46v=ZL_bX)cto9?c5EYg+JD9g5XnUxm~Xi4ko;1an32Nx+sifC zgcq1*7;5{8o7L_V-w*}SoLo<0jVhp)@C;k-GvNYPxj=-cx~LzTLSDX*KzDHy(=zGW zCLcxsiWMl3b3kT?5Mnc4nR@@r1pY%BTwnaPDZgQj{{tFav)FG~;|~ek8hYhJ=zqG_ zrOI(s2p`?h0f6*D>oYXSmfBz6*FYdLHNwCTWGV!ptqBT6{P(&cl@CtNyE9aPB&=P+ z0Fpk5KnkdlXZA2QUNL|D#V`_mk{-X5gg$uT+MS4lWE2dP{lEsjyaSc}{l$Qj-{)X9ti;LWJ!X?L)Qc;`T>OH!8j4@!7Z9R3-h01apz9 zy&v$9ymOjC?>k`BJoW5)9H4|WuAC=lr(!?WJ-ieK&6}!V1R%%)LqI+{mY5HB3RPr@ zML#8pA#7B<#t-LKv+r2);RbkSBQhOdBWiz0u4$SqW`brKVSFl$fljb2K{Je)bCn_g ziXiHvn-j6@*~#|1RZm8pe0a1<-qnW_C^aS94+gB@wJ^tf0c@gG;YJbjRVq0v?Y{gSZhOVpy10@WMMcV2zU4 zBl4ErcN`R>2eW}F_MZZ6`st`#7T~8M=#Naxr6S{U(Mr{rlPR<-hMHRwA`kTzSJP_j zT`pb(A_7%xy1UhP8l>cQ*6#btY~p)D=iG$eJxT=3@d*(_Ugx6FxQz{J-O-scI|qvlVoN;?_lM52B5JTMtLEP2)(RiuAvjmJKKIS|(51~d z^rX0p3qP4BO>2X%hw3iSsV05kHFI<(TlYBzenff?*Px1dwLXpzcq)j(%eT5_k!6wG z&tkS0Vdjo9DQ0T|!@k$6SA!zUK4lF*e*!<|U5&o9tB38DpCwx47+-b5DR$_EKiz5P zW!AX*pt9SPrrWJyN_zs)vzTD>wen18H+^w4R zte$l~x?L1=w&CfzmvrO%+t(v5V5bL#CZL)H;_`a~L*j3JcKokq@xOSdy98MrWbuE@ z;vib>Uqq{cpdS$Q1A=})(9gdN`T;RM{~g8$6!Sna4;1r2G4KDimjM`hX8{CfWZL%?O*^PA{RvD z{tl4~dgBGX@&0cJ#RI~)K^XUM0qB2(GX4cY{6`pZ0M-ZK!vBv5 z{8wl+K+E3|?_Vb{2;&A}+#rk_gmHr~?tcQ~21B5LAyED}1PU0k1Pod7595`BLJ}w> zfkF~!>-wva?B7}Fg0`-ptt)8j3fj81VJ%!(pw9O%VX8r)3lzFQ|AxQy&H0Ns3F>@7|AwG{!#}Zq z!~Y?_h@fl8|4`SEpu7sotDwBvuin~&1t`;t;>c&|A9!%lj_;*1k8ZV$MXjmJo#^Nr>{+%uGdK5@&jCcfWec& z;K~0{!IQy|)nLf#KT*hPaM1@Y`u=9pa;;1GZ%o+1MIX560~dYZqVGRy(f5Xe1p(9O zO`KwCDeN7rm*JEqip9ymvk1^EB4{ij{ORb1ZId_~fakD}>@rp}mbILF_)QOY1XB7; zD48P7zxP~djK?BA&ZW17`sPjhkA2-2E71y$+cT*~qeoWxR`BQdATAsud9MvaQYY-D zH!=0qt?T@}uKb*&f8AqvZ;m;`!DMRBmr0T z8VJp}kYf`$vF>fOfYCs~XrS=1mK>)h93(&wLfUn?9g+raQG;95;1>07^kM(XHa%z- z0jo%128?q)PzMok--4J4id4?yUDn_r0@6_ka?g5fzDlPX0%#Tinni$S5ujPbKhc(e z%MWn*0WLql7MT8C^PQBv;8moiC{KE#C-Y$cHg$eU>^wV1A%=Yunz?G9T|P3tpFfHb8 zp8%vOVwj$2pQzK4BzeLSAZZK&`#@k{BGGNkg>a8Sb;Pt zP{}f}nKcos-g=`Q)cGdjAQ=S%0^b80^zsf=_V*Vbh#LVShJ|_His8?_VgRAJAT$?*=7P{%5Sj}@b3thCKQs{r z)wH0R7K~5=MkoQbC7`zC|6W@HLUTcAE(py9p}F8@4Y*kYZq`5((*Z~JS|w^uJ5Ce0 z7EK^D7lh`5&|DCj3qo@@JlVxOhUnM5(1mA+-S$OG#8b$p5eVPcAD(O1@qQ2YhGGXr zlePg+ut^Y_3qo^$#ZCU9$As&Pzor49xxb;n@5ll|bN_+Ygx}HWFAg_AXf6oNEs~Jn z&30U=6E0{hk-t4(1GvkqCWRkCp*mKbW?G{dMxsyB<9R$TK>~ zbN~JHyzTcsWgbxezf{V>I(brng3A9>`ybx-)@0)-b8yf2F3Wdv_e1+jPoIqr@*sNP zqk}x?12`RI3t4p`-jXrdrhzN1HeqXo-o^JBF6G1~kn`&UxDXSDe-+WZ)8eo)^07~RZ0 zx|w@)Gxz9b?$OQMqno)$H*=3}=4ODb&%@U7M7l`}&$`gjg?*z7`$iY`HG#G#ZExM3 xDY<<97k)wMhkQ4z7oJSN%Q5nhJnJU84*8=H0vhYNRdf0|0BMK4ky^ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..41f4ff45ad714da25558235605f89d7f0ca20edf GIT binary patch literal 2140 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,43.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..47fe5d0801c9c547db3a06cc46109946004e1c61 GIT binary patch literal 2048 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ξh1{nH*j1FHX#t_J@HkW zIkJ*{6zAORdzw*zeOu!BL~iJIenwraD(g(v7S;+3u(3AqFUGrKySy)B7_qM*k127P bI4Kv~iK$PpV{gX3S^qL(87!P3E#dnU*ubui literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..eff7821adf7280124efe0228577f1593c4207c8e GIT binary patch literal 3756 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..b1a0b3c8f65b5235dc6d7dbc85533834e5d2da25 GIT binary patch literal 1440 zcmZuxeN0mL&kqJSSW&I~efYBXD%(U1lI(!|8zg1)lLQqO$_oyPle&pE%}Irp4% z@4N5i6&2-y2F`*41XE6qaO()^0f1=$uJLewUg1xkU-AJ|0&*e->hc6^YF&>X#7LB7WFv_tx@RTrpxBVvXHg>jEXF z2N=hxc9`v=W;yjE^sgbFb~!!X(3^nyR4hio5?Bg=fRY13h`OxCZm(n3-e3#_6GjHXj?$ae&cF@_65|^ zWMFMBa5M09AmYD1{vTiDm}V(zOsie;Yd7JxBIjdesat$NJ{M?*5Gf+ZrdQ*1T^(JW zo$<}x&HmQJft>7=g%dZ9NtK^prhM<|bDs8^MjBgerP>y;Gq<&R!ZBLu9ISk=_?GWl z_ig|8BcFWB2PS=&`(}o3o}4v*nEMTV)P3OX)3YDUwS2wY|9k75&Z$>@GuA#zx+v$T zaE9;f^7*>r-Qy>!heSU3$i3aVs9@^qcAcfW{55M6&8RA*+sbLYmBwAACMnr0WxgOK zNUt1`V##D1Vm#<54l6r_A^S{$HwqA;-gLF-IWnN0ZF+;iW zJ^SfVsv1wf^MQrA$&t4jE>(5#Eytg0dOjh$`^kYrXG$9ei>J@? zLBqYBxR-XHE(&iV3C{u3uNO;V_Wc1wwTKMVr%jz@`o~Yt4?$e$oKnxdk5B;|WAPR* zl8o?!0CPmnqh4SvjH(`&v$C*_L4b>#Cw{#ATCze`;4bK84QQi4K+N2{Sjp(uFpmswmFDK6t)%j@yh#b6~scp zdW>4;E#Lwtc%TGIQ9Hm3BGjVXg^V3)z=n1O#@LWA!MGYY1#X!am zEFw4hD&%~-U`1S4+tv-MNaA_jO!mf@3PyEow^ zm_r_+3+zAhKZ9k|Kq6!Sv6;ON;MpGt0BbN0@roWVax4?RFFa2n%p*tS8H<|r%esz` W<2F3e$Zo9K`gaV5U@VJg`Qb0Zb&R0^ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,42.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..b070e2bc9a3a19f7692e01e52f33098531fcad85 GIT binary patch literal 1324 zcmZuxZ){Ul6hHU9*VotAvVpdX8LoL7&ag;uRGAABvD+LG#V#F~X#%6HZ|z3^x0BU? zVi;qz9aNnQ6NW6QA9T|Z-B5vufdz@tXuwD`iP z)zvkIBgt5o&!13Mcho43+FFO=^oDn} zw;EStuOM0M37a}hfX5!q%d6xnxujB7n5dLXV!6fY96g-VnvP$}(czq^P3G=i&Rx%K z$r=Calm7LY#^pKlxWzJ;wJgKKm}acHw9VcRJl+NjK!FHTi)FUVkxVL8-Z$8n?YF<% z+*EaS=e3u#?yt{NX=v}!_(0EV)Y|5!mP2Z4Yk%~k&{%i)ME56cKc%k>{+hjU`oa%V zZZds-c>2`!U1vR?Z~dM=7Tfgx-m{-wKJ?xE$gTd{sWWe-r~Si}WGI)V@T!!`q|=%5 z*u>80s4C?j`E$L^oL{xL+U6VVe8+!~uG!N{D>`YppO#&sjasEgtKFfk)ZTnfEA{@o zXJErfH0#?Rf5W#goQy_K&3~hnY2v6fp8fFP_);l}o}hPa7iYAZYtxjQc;YF#of;-; zJ_y}Dc5|q2BsDT5<*VsMEIW|4nej!z+tAmIw*9x-OE>-j#4yX~ebr|UF#XGyZ;wJ* z;i%x?K1Ij_$5;TvELp=Q+i#jd;wocc%W0o`I*q2@S;>OwMg0g+hTNQ53$@rI$Eu>XqLxuV4gx5s1)Pj;V5bBp9`>uHTVa0! zfCqJ1yeW4223+|46xqT__7C`6Tan1>|Pcmg?=37;34UBmzY literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,43.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..a2715ef0d0b0b5c021f13d31d996be656e6aeca1 GIT binary patch literal 1332 zcmZuxeN0wQZ)rtEDQMvws6Z$xDG?$kyCVQF1Hk$Y9xE+}hd~dZ*@j$7Y57iL!?(w$0aPKx z)in;Y8>}q4>M>LnyJ)t2X6i9wJQs0+9f_1R?iIv##M|r+UsD3lRwAxO%sb3YZcrUV z7bdWAPP0SQu4aFV@!t{8xLsaf>}|mDG-|{G0OqOy7*MmoFbrq$I~>i_+Z#=WXa*C_ zWTTm?=tF9RW- zdnQgbj);8p(Yw11x@h)#uEEx8eZ$^Hw%3=F3@b^ule8X9+v8XCFCEG!uE3 zoVWUZ>u( zpeQ~E)hqj%SS&_oMP$N{3J1?(ZHzh*`xhgQ`z$0Oiu#l)G@xILISt5HVV)mOgGb>-rI!^m%P?kBI5WncL*&6&tuo#& z*a7)iBTHvRn~GM8wh+`n-xm%o?ipP*U1!|JzKqS^+Z%kjP-rd{`bX$4&_>5A+Guoq UMPhH!x8{F@W^3^sOp3?;0a;0erT_o{ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.keep-layout.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..c94a78f60124a5a4c10c22918e3189d332b7d6bd GIT binary patch literal 1216 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..520a37393bf9e8674f66719c7618bce47b993df7 GIT binary patch literal 2156 zcmd^Adr*{B6hGgxyX-Ct_+Uvy;&Wle)C@&t zx%b@rom;qKMIo5rC5QoQenEltS6gu$0Q3TAXD(P;xcrAjKmP&{dyTLih0AAfm7f)z z0MHkczPilku7Op|A+lGJzSQe+m!Hl%w~prCBwg|nFzUAcLmDrTKE>+`)|-EfX#&t? z0WfBtyS@foOUVS?)b&+vpT~4F<1~r=r1#cT2ZF!tp*r|(U;fx zd<}|}8%>002@@^VL`!3$N=140G(pauf40UBU4ya=yAGqgYmcEB#!4SQi99Du`c1m1z8wCNr=34PEH zXW$%s#Aq2KvdAHi0*WZ19dpoutPNQfSq@nqSpiuQSqWJ?vN^~)kh392b2#L9$BEZfT2Y@F3u zUcJU+UEUA~dVB%v!m6@re@(UD9rTn>w>m2;t;>|*0qZhPz~kRQ;K-rUscy>y7aek} z!Dxyz$0sC?8a-xgk|p_(apO}aOq`TD*_xJ~F(vcS$Fi~?pE~V{=`(CB#|xrl&vE3= zoHcvS+AaOc|zx|Ju?_R#QTnDNP~irUZX@C^IZ?3rAdUTnNj1!um*0 z`0mB<)$pQl>_2UWziq~2rWb?S3`e4bGm63{%&&Y<|8+Qa+>RynOioLSA+0(jYYwhu>u8QjY6(@_o z30-Qx-tq0>vtJs*J)tvu`VL-QeahXxW4!r`{7SanX#SEDN@;ecii7p0<9uJZY_*;+2yx$oY{p zcf|I5WI|-u;z(lock5enJ8L_zG4L{Ou5PHUJ$UnSBsro#U^v$C?v`WsLmA}#@?FdM zfk^h1K3UUkpCcE^y6)_wRkwEjw7aRZwR5*2nkk>R#Qhfi({j1Bk4cgBN=aA894FdbA@&CG4) zHrxSDB^f=CDsY~BQX?uV=gm1Jgh_|%}Jlq^zbyD z52H2Ge0mk`%Nj@^Z3K^b2-iL&>mZ2=_sAH%iX#>6YAV~MP)588g5ZIAq8uSUsDnz9 z*U^|t!b@pf9jpPrihI;qYw3AdMmAJ2H`$&c%}=&o^m{mGar6ZYglAKT7Nj}sz{HF3o{!3Flm>?DC#46pvDlkwKYUEw9 zFhNfsNSNZ4p_S>uI)W3%s6B~z48_T#c(Lj@1C2Ao81=76B`ZT#r7OEq_NI6l^FX61 KgeVpz9{dGNiR)be literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,42.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..b9e8c99f14aa2bfe86966c8d2ca129a5dbcfa47c GIT binary patch literal 2040 zcmd^AYiv|i5dQAIy4@}9z~~{{=j?xz_35?2NSpI#(;Bu90)ivx zZ)-+rC7W=9o2}6w3^?viyTBs*;7oH>v(t)?{?Y}cjY zL29kcu>nLIyH17C9J?NtlW} zT1aXUdEDd?$s>_RCXYfMUazOLskuE=N3{{xjOv*#$?cY0zM7_u0oTg*a3l~6yOuUq zH-(y;LjFjgX12@M(BN93yN6vX0^vYt3xmn?S7@aw0Y*u#8 zW8=n8m^f+jl&P-VylK<(AAe%T%qM3RJT-fcTa;u)^>_=5is#OozhL1aUrA}%;__vc zd5%0s`hTTdhs%+k>&SJahhoF|F>QA&UiS8tn06p$i=T`=xEi|=dpef#Pn-R3Tk3Jg zowVal=bawsD87iP16f9&eS0j-`t|F?h+sK0oRi)CdUsdXgdKZ!^z52)u)Hj9uXyN-?&wYAz=ht`pe%p1g>(m?3v$Y2_p<6TcXn4`y)g6s?PY9i; zYUvNy6SMwMv(pmOhG%5co=tDozNQsyUa3vqq)n*Ra;|8l@mzo0y)Hg6zJFOfqvqD; z&f>n79@-Xug*uwrTUrj^{W6{txAohP_k8%;@xMaZwL{v2?8^i3nb*&1rW4);+G@>u zV&<{Nd;5Or-O<<8*K1GYYnM4}XEZyFe{#--(X7(8!1|1NzeBLz*5Qu)Q`>d^!{x!7 z$QjvdkxZYkYKBQixx(BQ3X;31tG_rEkI@ieRqlqbjDRn^T;j-rx zhJ+#9hh%WD%o1R7*vvL-n#pA0VfvXoBwty{VlII`lq6&5{hfuv$jFEul{FuKI@$0n zpO0Wkz^G?-D+v*L6UD`M^&_l61_+t;FEwBslVp{)YVv>D~@ZK>>sYf20w1j>5#V>lPsr x2uB#x^DpqqZ0u>^j0r}|GH^Z#e!O%qJ9{}X#`q^Du`cjh^rqJsy;&Yg_!FCTyMO=y literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..52fcc8c62af1a03132503441d82fdbf2bb4f8a51 GIT binary patch literal 2048 zcmd^Adr*{B6hGgxEW69{QkE273rInl?)O~4C$M0qhJiMi1+K811z8@upx|Ixf+7ow zMH(6gxi({9I0oiuqmwd5R+FPWriL-6fBL6s$f0)e)1mV%zNYEF{_K8p?>Xmp&bjA1 z=iWItXWhCS(8Ep$0#jyow&~}HHNODB0D#)EVr@ zys5}(tAgXIOQbI+x!7U16`#wvP)fePkt{g~h#b?9UL%k^*Ws+Gi|Pn!1PGoBz(hK2 zbyZ+pODgE2sj09z?fTJ#bHtt{d7!G&T{H0>aJ2t5l1%_)Yb8%mtAJq`O>wQ$S+8(u z{s{0FF#bZ7zc9!@O)Wn zut6~(lz|hfzztiW9va{^cmtZC89cBL4nPMSg2T`S-Ea&(fD@E-Kb(d^I1A_D0({1( z86C37A&&xzD4_*YFcn!dvMjP3vOKZ^vLdn)vKC}hkWEF-j2!uJ$nnSt$ce~F$XSp} zK`s?}Gx99*v?Y(cfV_yjguDg$6y#G;Fr&btz@b191r$USBor(tq@a+Bq8UXNMGi$C zMfxETMF~X^PjCo?(^w=3QXU(2tii=N}oA~5YNy$&ooBzy$g=UuH1yQo3q^2!eykzOJ z<>?uj)~xJRt6xaaC+Nff>xk2vXp=a7yguCJ9Z&Sid%QmDJD0rjL9fQw@4b83d&B#j zH{_o>?IWG8SAQ$C*I>BSZV03Ms2hq7tj3Y4feTIdWP(}8Y#11iF}Ch)ZE1;ZY-?=a zJ^OIBHGa6@`UYRw=jUZ@$F_a$=Gs@~=zNE4XtKAg*$%AZnpo> z{pmHWx8HOA;Na04o6gwIuK7mhUCWMdJM+oqrmsgk|JZ%I<Mpz1KkuGs4D~0BCmFG=c~*%W>yTqE$(g=5o6r1;Z-(!{ zDqlqLk6W74I;-1phx>JGsI0H9K012U7vs}(X?xp0+|_$OlvX|>-!)zw@+Ds%lvRC} zrSf_?xG(uc#qIsSb~JXjbarU{iSk8b=tLdk&pE>P!93mw3|`e{#q>e7V2-*p3rh_G+76erean8P>LE4`*#J+HoX* z;4Q6Ry0?&WY4#XHmBta6me{V)!idFx0uww!2s9*~+Nsc=E)IVSF%$dLoa$o|gFvOA z)U8IC`IFrLcYRQU0Hr$WhNu?90jVc=QJ}Jq7sm=J-4N4GZPmbxF=KECxBvy>i33pS zH9?x-P?bteZpyhl9O>4KENZdokU1GcS#K?4CMG77s3fJ+rwk1|PiMrab>vU4!hK!^ z;UrDsL670;$M|4~rp7&KqY2p!s0mjoSu1%y qq>pN2AQS?&3RP~VQiTUIllaLQL>!HYca?YZUxpH0Pj7nor0#Di<>6xh literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..ae6325f7da799953a199706fe159cb00f7fcbd0b GIT binary patch literal 1916 zcmd^AZBUd|6n@_QVp$dt1ycN4Q3}#<->+T3&jrLx4Fhdx%#Rh;1IV(l3o4D3B`UF~ z*pP*$>9jRtkUA#jh?9*n=JY+<)YLHLzxrto%`Uzco!xcHY5LdC?#?~uJkL4zp7);n z?s>~suP%oLJE4cIq^!(#aPpu7z&Sww<cao1cd{-_Qxv@>?pGBIw%^fAW|F`iZHZP}i5L0858OMqbZy0 zconurl#MUhlQ zo)seNbdh!X$V7vdX4OwSjswA9Tv`*R0;fijPiUsQ*G88bBfiw(QT_NxAPptF6(8P+ z1SBE}$w);SCLog!J_XZ}jU41+Hu51tffGeofW;_58J1xM%29zesKQ#ThZ{8@)WeG= z1h5rt*nt=EGIpZ_LF~st^x$cVlcyr@ZSvSE+X5{fZ@{*!vD)Wv^7-8@ zo|=4{tD(VG5e*O6Dm(#?e=C#mtK_@fyBNiMwF%}#OOiD?C3Rfd_zCG5nGa2zlr?$E z)M?XgGqPvS%6a&a+`LC;&v`6=u3eO5MRhm}3XA5=U$Ah|VpnlV>5{VL*_Lce%6}a* zEH+DuKQx*X()NbJrEgpbX@^3l@afRKtD&2rCqfDT^qK$mCH7fvCG}aYx4Ny#{Prad zrN?B(@C4|i?_3AQ1jD(}%#5yAx;i_v+V{10@0oVEtTg-j`Ww%L>pvOP%st!o2Rd3` z(9)}FHS2Cq=gK|J?>C;P_Z_J}TlH=5+P)vVzdL^EYjfyyaPZK;v6~yuyDzN#N|XJI z-r08k!>hZ$xZV5fo;#gqUJVY^9@2y^P1mjAIdf-MFxZvl?_b}1)MJj!{$0&Tip(6% z&7ggoU#s1v&Dm0^P2H?z)oPhnw36@)ci6rzJUM)Dc{sJ^`z;+sz0KY9eBdS8;cIJd zK6d-laAw$a)ZEwo-mbp;sm$6D?Ow*^p>W=f0ZrHMT&S(ljQx2h8}A(Wxu?Civ$w|_ z$`26Xq&+<2<&i@U9ahMtG$T_n!s(-kA{TpPC?Keoe4;bp9i?ZBR zhJ`tC>;EfbHQ@RsMmy~F7&>8`7pv%lMJa|ZaY*RqHfI$^gc00@6w_dvEkI{6=}pEY zozB3^qWAIFaFrG>;g;uuE1n}NZ!HqW#>S#q8L=l8Y{HX#H-aIN*OxLAw{=Ki6u0#c z@P-F$BhtB%#$!w|p16tnxQ%W=HS0#Sz=Q29C1$*6MFZP)9Mi!3299gRCir8#C$?%c zx9bY_QH*o5?`cMU_SMDq6S<+=`5AT5tgO>nTUaYFz{c9ZzbNmDp7OqoVnn}&Jf_5C byizW<<5M4J$KH&7v;Jj7cd+mdDRJMQiA=AJ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..339bfe8cc896fd31466e8f5425de5b5856503cca GIT binary patch literal 3772 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,42.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..5f0ded38042ba23a46501d0366d6b1d01e062c70 GIT binary patch literal 1336 zcmZuxeN05QBfsKXJjlvO81HeI>dW@6A2u{C?-0 zd(OS@qhZgU1~9`B;6bjbtCOqmOuqsElK@=F&c=r3-`@NEDFERLa=i`Bk2wS1?VSMN zs}Ub)3wk23p6o;aZp4j##p9iJf7OAxw-8tPkyyPXzKQWR#E)^8w33QE>cU*vzsZ?HCjU@n|F0C4+;=Sw3I}KWO;k?$gR@=S?1VRMkt_EM# zR$o+ty#^2W9b*;!fXlwIENK}Bxvi6@j`Tz)>(7LG;2F;7DAZkAnvfZW8w z<8qS{S7NUsnePdkI!=Jc9xbcO%w^_+QnSoNsktDgE|;tHxT@8jx~kG)Rn#Wb``6T) z>MqszU!U}^&opLUu#8!)3mNMwJdA19rc3+$I^gj(U;uJNm|QNhr{7K|lf`|5eVKm8 z>AKpox&1d@);hnrOr@d2C*lKLZ%|u{pIVP8$@>22C!x{K@R`ofT7F7hAN)0Q`@)qU zC3PZod3fsl%>$P_U)KLXACK+$@bINCt{wY+apaHwyUC01rl$PEl%y$_q41iNOs7)m z;@J59=s88oKKj>IyCu6}d86Go*#5r%DBX0ZnU=KEVm~dqN^7)Ik5;))Td%$If>!AL z`Ov_&k!Z&Edi*V4Z@4EKJ-_&^R-}pNq_ND$N5@u5N%Rc8Z=adfDsD_sZv4q-=w50V zulOi*_vD?SzLDg}kd!T_Ggx*YWw+pqg14cs+hyzOTMM`U3B)kZ=-%>+N0|O)X6_ag zvj(W_BAi$YsNd^pHB}-%p?txR+fHqqA z1(-!%G*~!Jzzo*UKf_h)eh!`m7r65^m|WOFa=9Fknp%vOthadq8bfa`46ND}ZpxuEn0pwdTt_u!AOy?Cn zs~xuBjtcm6&V#;}5XI2fq3^c^HbW)$$g!%ZZK%ztp8x@5)B;Y%yV)thg@^rmQNF}R#=OYb;PprlYL)o3A$t!{0$j`UBmzY literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..5c14c1b8d96b1a59fe52c01337c12b20c7bdab35 GIT binary patch literal 1332 zcmZuxeN0dnn=b)pHmXFfX76%LH z4B!12RT0P75cK)SEC^9Rvl%giOq?3c=0`MS;XnT|1{d5byIbnHuVgO9^K#EQzu!6c z-gED}_m-5Gmw*;dg9-#oaj_6N)*AtUX#m!@|8PkeJPLXM%@*WRO3Jny8@@d<1)vHd zuBvug-B81#s~$yVbBI>krNS?2F`kRqnrT%*+~YFDx^Vf+uo({7j77kd|sIKLXP0D!qF00z`7Fbu=lnw`#8>g|puLo|bl zX0p*tRrC=x*{D}#jzWJR5ZC&I41kYTH;fVP&egU38u`iOCAst=xnLux8AhFOpu}$4 zX*cb%xZJItTD!w1YHo@G`Ae7Q{ zuTUy_Mb9fp#%sc&dKge)jk=Uw9+(HHGc%-q-DIuGXfek(Fz5n#^6`BjFD_BI{G}WSHDF%q_@y*JlVjzH1LTLNw!f z7aMQ&|31(;Gp!+j=+i-2@>$Y$D__6nbp|QujbuD7EXd-!gNL~vu_t(t! zyfZN(KlPKGb5qWmSdbRyCr96JzgXYLcO84N;GO<{U&Wgy49~BM`VQq{$5&IV*j{7VmA&UE|2YB@Zz6MgEbUlYtcssbk z1zxCxYP5~u0})zK8oB)r)i%PE=*nuO8U{^RR#$G_=!C0*_ z-VWFX`B)=MXGNQeR*SX()Ii@C4lV8(T{T^2+{V6)&E4M{e7R6)E*1Jm=q}Jk$Fr{eQX zilLOcyM=|+hRQ>lj6bvm8g0>lu?8A!j79^5hiOdz`L~jq*>W-KxwBP?@lNKP^L^)e zZ|+Rp&Yg82!y({7t*WU}H{KI20Kg~!x45>xt`VLB1wa@_&EvhY^_y1AokYCekHo@R@jZ-}5I^k?#yj#Pg1J0G5QCnM2ypex z9%eY?32O4piYw?(As&r{WAW_A;KKT8#45JH(f|Ym4hSKlw>=o_WY(rk0c4hvObM4M z;WJMPbdka@I}gW`$(&U3N&qg-E*PZZ!y9w8Hgj#klv%sj+^`6ELWJ7wzV+*>!jVqB z)#s0^E1SzzS7oJ3b$i46G_|oa7T1C?bz7)8tVhDSC$4!{sqR2PZD8RswLyz%`ddim z=D`7v0*B){O65{Hf4Qv6`MNPzX3(RCS$*o7LHiBSyktDOZrn0nHuC=Klm7MDhvaF; zkfKbdl?Av1`$VB7ol{Q$k4FGKkR`(CT#+;NK`N0b?&|GIcQ5;>rn+=;&&}7(w(qV| zsqetCSWo-Av~ahdDo3=$j_&A%&|q8mblc~taiIJ1ZF@HZLDaxfOye%bC$z-ZnAKnu^t4Wz>{#@sD zWLC_rbozQ*KJ*`^75f`$NeeCZ)1qs%%3SU-E8jGim?vH_3%vLD_iP%7rhV_k-uE30 zcSfVY4S(0nV2o~DnS;}d52%`wUiZ+MaJqPF4kPeTum|JK(vkQnHb zGG%le+x8@#4!j*C_nz9=@LW^D3x5EyO(6pZ%SH|{{mb~|Z79kf6I|RE2zhpo*s@KL z3U(t|zI_7qBx7LE_PkY*h5Wq;aP|q31{)}3mdwIKa9JAAMhmZ|Eb^kw!EpknuzCJj z?&_^C!4`0XJJ*BB>CGgY&9bhD&|?LQ@G8zm1Uu$eBa^c^$VZg3`Nw$SG1~@(&@dk( zTD%V;5QZ2uK{M(Q#6g1&lrCg~&<+8#TQMepd=tjC!#>b0UbC`VU^Q0Mz-MtD^u2~i zM_;Q|Z#ArfN}Q2nT~QaJmQk+-0aVliK8$y>T{4;dcK%cp!~jbznL8=Ad-f8nVXf>L R_TB%_VijflC*|jSe*wLrQO*DW literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..339bfe8cc896fd31466e8f5425de5b5856503cca GIT binary patch literal 3772 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.41,43.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout-retain-gids.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..58c9bf42e841f43498f487d12d19b6a483a044ea GIT binary patch literal 2028 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 Q*5ZegHH#9C#3a`C7f=g`r2qf` literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,42.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..2ee02fe34632a94694dbe741967a242ed82e5fa8 GIT binary patch literal 1208 zcmZuxZ){Ul6hHU9*SFW#vJGt)9Bz4=E@6@2C^8pZ#CCH;40hSTOcNM&eQO!(zxO)X z3@T=0)V70a=E6iKGtWfbbVL{$Fqwe`(P%JWG@5Dl4L>58c^wy1&utea#(Q(mIltdI z=bm$K-hJMkJG~&oA>cu2YH3j#Zk&G}0L}t%728_9?QkF10fY~bEA_TN?CSk?*9-vP zfOv0L$QOmRWH6_k}_O%-WJIfouiI zR&v=&KD$PstL=Q{DL9r&6{NkW0^pOSRg+Y_eR+AC#cU{9Fx&1i8&`ush)}fM8>rtL zsIPB|Ly>grsI+aGyBRoVyixEj)xr@~zkEgI2$an-*;argErZ7f_@ z+EiWDUPQ9c6E<~(0FOP|N~`5+xwuMJn5dGAHDkHPphpa|`S?YHjv1mkW8Ar9TsO8G zMgR3l|N5*`@}h0ZZePsUSK(o-^Nzf9F5C+|-UcKfM})J>WzO{L>148eXk;ieT={lO zbM=)y*Pb(bzPdoA(E~^IMBgja(GjHf!)kKJaO~soWKZNo&!-(frY?{Cmig(_7vD?9 zOzOhe?8NoG=X{^j9$MCJ>={Hle!7)nGl*>?fNlKz8k?{B9S-LyPN%P!I;v&v`I?Kan%Z#-?5_&lPjei2MEHL_D&FMo-|1$UWAe7~f z3NG#pLLNBA0$3KvdNx_UbsmW;jDbnZWBDEPF)M-qXPqY*uz;N`ktMhduDk}c(ZUxX zi@a#Dah!k|te<~|yV>(3JOOU-6lyTJxRvB`IaU>s8z&ngJcGRv!HW4C5EpC?iV+oT z{w`j)%eH_68dqY(JRg84L_mj5=t3QaIH=H%auYH-?1K>cdy(seZrBKIXa%4T86Rly zEFvu*#WFYIes%f&I935I2WlDhBOri+TENM84?7XK@nB!B+yHy^0Qcu*;a1p5J-G0# V6xiH5?7jcbU^~kAFDfqh{szjDPtO1V literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,43.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..6e881ee476c0262d808c45b077c7d1bfe615d0b8 GIT binary patch literal 1312 zcmZuxeN0k&WSy&gUPqAVdK_X2LSaWK%P6imism?+#A_aDK!! zwKkIj>R5DD6q~J*$^6yc*$o)aMOk%{N1aorE2Br6U`Jb-05*GCGo~*N-XPmudpY3Dmu3?I4>QDo92hNw<=;E2K!-WK!~9RW>Sbzn~1XGayqnX69oxB^946|qyo*hD z`hOef9P$ng2$38ztJnS!`CET|=vv#ieM0DhKM;D{UEd-#O9dovH_2-u#{RmQo-^Yk z$}>MIIk%Op@p*Y+ZesMq_KOXDLf6rkJ6_pX9N2$u-^tqc;i{>3g-F5ut+l+RpW`J>;t)6$;mK_!w^i2iU<4 z)liGJ2|OS{3+nC2xZyb1Fy4qT09@RL%OH9jb4tjI-I9`Tb_z z%)FPkTeo|69msGPcu=cqYShPn63zp_WdLqzZGBxMJPZneFpS*dy2i&mZQty<0Kiuu z-rpSZMPWI43F8dc2Q{Dnv+a}1aP2hWO+h3U&xvnhzJz#nFcj~|lL+SW2tf?_I-DrT{W4NT!6# zl<=8l0$rl;E6>33WHP6fyb^#5bBji)c<;u1t;5<-Fk{s&wKgvSo)Dq-*}$faRgq|? zejpHxt81FeRZnH5NA>z6uV`vxrxDjehPor%9MPi@-51yVYgKPso7%wA4YfftH2qa1 zbMxSUM}fofT%~fUoWDv|<$T?oFEi;;)2cpk&7^~-Xk9e#UpH@?&zO1tjY;fpe!+eDDLU+N%yXNzoxo$df%-Vt=2EE zQfc7OF{7{j4O+N2NR=a6VpnhMe0a1qaqox5GxU4!-NdDLlM}%~N>Y?dQ+Q2Eq>{;0u|B>pc1n{nkN&yQ z?aDkdzs4QtZ+S1+O)CyI(vlWh9Hd3pXqC0fXH~vzEw|p;X%+Z?KG?TqD3%VqZoC!f zigdGiY)PzG?xCbdu*YVL{HND?#U^u{MH2J#y3An_fW@p`3K><$A25>8A=Qd zNSQJ^iEaCmZWrDTl6!~0e}QW%*!l+$#|$#iRd(qxv%gG!)eS}2V}ghK7$MK@5fjG@ zsbDvft#?kLon{P-I-amAvXsAt0Oy<{X>fo-=Exk}1CMP1ef02Z$|5g1TpTCh5;o62 z;;r8PG&}`f@aB3jJ-dx$vsu;^5k~A}5uU@@h~UKaYmv$M9ONU)`TPUC@PO}tLfE>H zBieibq7VTCnxGkN7~-Ho2kQ067;peW7;i(a30hzsG@uuNc4T~@!}ExAJBzJchxID$ z`8d`Ay+X7y+6^FpidMjf@m{tgrn6rxoPdHDV1=!7r^0s1UV=4j$qut`{C|X1l=1(Q HpNstk)#*#r literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..5588fd3bbe51704a9667c98f9db021fc97381a79 GIT binary patch literal 3736 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 E0S4ybX8-^I literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41,46.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.41,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..eebb3e158975d281cfd5420154217afdf84efa08 GIT binary patch literal 2232 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.42,44.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout-retain-gids.42,44.otf new file mode 100644 index 0000000000000000000000000000000000000000..eb8f88ca28f66c9c13028930673a36628635d3a0 GIT binary patch literal 1992 zcmd^AX-rgC6h3b@hGE#0p)P^Z52|jmByw?O_kQhrax@^qo$-aM$#FQ7hps9qiQxOhJFDGwp4s!j(fC8e%>WdePd!1S0)}C9WqVz&1_fmX zq9IVi1WHwbQgvW~MvgVAlP*ASS68Sth9v@gFcmp0>z;f$y-6E57(F?iFfY&?3k5V3 zZC(pu5DpO#3DFP>^C6x#o&ZZA8B!q)R={dtK>#ac!aCRpxljO`VG9&O5p0JYuoK<@ zJCp&!Zg4?0)ImKoKqDN2W@v*B=z<>T2QQp}Q*ah8zzAG~OSI`La1F-c27C&i!RIi+ zgfT{BkwYE@6j4Ge+AsrI3$iS-9I`yJ0O2ltoq2QBE_ZFUyVmY;l&v;rJDuhtCA`jDMEZqGMv`&5tw1Keu4vqQwb`NlVO2lb5BWKEFII{e=}PSFK)SVL4t9C95qXb8XhT z^&2*3=j7()7i`+{N>Q>Q*%0-g#cVLsC}zV_LsYGAI@Kq)`}}!Bw|w$(pU!{9H*?$f zo$n=I*gt*xXTI=J!-I%XqwztXF_Nxj_(WW=HBHV3wQ?EvGg(Y_VA*t<3A@YRsc4Z` z?kScN%jHECa{Mhh*T2;6x4iCO?C*csA6<5TPe~`t>#WQ`Th(Je|DT4B-6biVb zPkdAoo%JU$+DWoNW9ro=Mc?0@_7LJ{do-NtBcf_hDORdXlg!Ex`hT~7=OL&mkKq%P zkFSDkSi3fu-MID6sA-hW1jk5ly`q`f8H6>AE6;WlT5jMLOilTG7LZ}E|I-tMGK(|`Tjd2{bMzjM#I z=iHBXZtjK+xuA!=5Co=->}=EOo{!%HfQta?teo|^`6DSm-USH$fplwf^A~aDUlm*c z(0T}ODRSB?VL)|<#0KPGOGQI?AH^XTk7;wM|KA_0B8gN zW|q@lT?skL5DZe&R@j{mZAEM>iMI*2R=V7tiMN5H`G*Lb0LV6nJVC7jhGDeDJDtuN zMN0EUfX~kOwyJzvgM8D~a-<slN6| zSVdFO;x!NqArJ~-5CM@e4WeNN%z`+GheSw%`LGaJ5Wos)uoPB624ur(SOd9`2L-SZ zHp44mhhjk34o;{9H|&BMsD;(+?3dmZJ6_K?fn~JOrIWuzP!y(5b zCm?4*PDIX%Tq<%lCF7Asm((PBfMLu(uY@h#}d7A zlUK^@x#pD*d$rP8@A!4^civ~c!T%i7JsArb(2s-;7z`s_hA_IMAwyCA-Z(tXf6HMX z_?Wd!o|HJYz?ifradY4#d6T#3&)(-c7IrQ zzf~Ie`RktU<1I%!+uJ+n>uu?2IZPgPiwej%NAY# zJMA6)aqjKaj-3usPF^M_SIg<0C6}9yoH-%c?nsH>OYvuhyf?3(?K@d_s;ouV_|l8@ zn`1INRvpcHt*GwU#*2q^KJm{*w3g;JV<;6A`tkkkOifxrVZ@T(fzb>r>e|F}dli0n zd(u6Kp4hMER8;e*NT?JoRj*+tB_RFZPu>f^OnVxlRO_35)UR3W-{r|0l>@4fA*PE; zu7Me4M&TiFehws)1fbGugS47Zl}b%+${9VT^vso6f$|%Oq4XomnTd%BB`TqG`V`W_ zIyx^#9YX#y2?t~qgcAzLL6h|ANwNl_sNe@|w0=EOL3dF}XQ7bZqCzMkQ~@5sdElUu zzZ1%-_*cR6gsRAHn}3|8C&TQ|MWxI}QWSAL@g<<92uhA>(yNrmM9Kd#f3ju+X~A!+ zaOL)8OlsLA2U-wGL=$f*Z{@#`5?v3mkOEA(-BSTNicCaNl@Z3{aC=A>h)a)aKua1G P7?cbj-F{U0ccy;Lel2+^e^apXYPCVzW00U z<>TF@ue`DpBA^O_LA-GBV(}-JcdG!PA0XoLvo9}Qek2xr3nsQY3K@_Mc~A%?PzDvS8LGhs4yc2A@Iw=9gEr`ZPS^!+!fv+j zJ~#k}U;vK62{;L7;2d0pD{vLA!AEcd2H_UmhR@-z@Fjc$-@!fL;YYYnfCQ5;5>BE> zG5b=sxnfwf~u8N&4yG{wT7y-RIQ_GJyjd1+DJ7Ds!>vn zifY)58miG!jgD&cRAZnTBh@OXR!Oxgs#Q}hTacD&byTaTS_9P@sZK$4N~%*)oto-2 zRL9n$SHEO6)ON}~e)Keon4CBJwyt0A~G`&bHOO=aN3WZ9XoR<5# zS-iZgu*jTUD1JUCHMbxyx4=|nPJ2?EoRuYBhTRLr%glx5f)ZvN^E>8v_SYc|ohOXB z%|sBv6y`1oAZM9|p%stkDnYl(T6fw7`gc{}&9%x|h&<hHi;?Am_-fn9khiD1_~i9E)xI-bbLOrj!sGKVCS#pFfu zGFd@hBPr+tB!?7|Qeq+1#7^AAPnt=9bdop79@0np$q{mboF?bV74iZ3m<*D?kT1xW zFBuGe*kRTyJLV|<@2?-JsBqT`0BN2~8JQDFp#3K=pL_8AlNW>!%k3<3z2}mR$ zk$^-35(!8oAd!GX0ul*GNRf~tAw@!pgcJ!W5>h0jNJx>8B9VwhA`*#6BqEWBL?RN2 zNF*YWh(sb1Nk}9ik%UAN5=lrTA(4bc5)w&BBq1R~LWYD42^kVHBxFd)kdPrELqdjx z90@rRawOzP$dQmEAxA=vgd7Pu5(VAE(r&@t%`a*>)h#r4hw**gBd5Esb-&O(?!Vi( z|FnhoM0^_A6BYHTFKRsdl7^p|G%7`dk3b~;MQni{GMVfRnjds7`03!rkd>j)p_6#& z@Jvzix?EwlZT=QvVyBSD%Tl+YGIBut2x`3<=f(`-CBFR;@!sM?#u2g^_SiI z8|n_FH*;}L0jy%Lv!kZN(;ndC_-&`I^5NI`3D5BoL6N%BvL=63X{sf#s=txrhevuv zk#~l!i(33G4Xxgj0sbX-(`wM z^Tn^9?z6ic9=oT#A<)#e?fUu5ALblX92Le@D^j_$CZ5ywxtwW^>r>)0{3$oUmzRhN!94-`dm?*tP#ed)Ki`$1fbe z@Rr0a1la|msTO`!xq1gT6f5M4BKwCYi`?uuTvMzbtFJb;ZSf+>`L!Rc<}=P66S$_0 z^@Wb&N@3EfbRo)Sb}gyR-<#8wksHW3uL3FY8Ld7K~*R|8_>6%uUQEDzW>je4Jg1l5n_O3r{-?n!_2>~Vt;w|N9a%m-Zcu5I=fS5wU!Wi4iZ?yiJ& zGli%?eA@zE{K?Hdy)RW+9)6X`v!;4Y#`^3Hx=S_vRi{7Xr@mj*=xDSx z*gRR@EKfGaFCX!-`-mQn7Of7f>0ap<=I+cC8V6@wnOE-p%E|eg@SD=vxjhhQZ+yY~ zf^CUCqk2WE<@utyM_24fZ7E&7zx2qaflUMDd#d(s>+$@x}4_Y{vlX<+;QeRPRFX8wVBgfdf9d)8e_Nl}NEzFv5;$lkl zobTCx`9WrZ3hDkTEN^7UZo}jU^&zUDgG>#EAhfcl>mZr&|B=~d*#5)Mu<|_a3c5m{ z8a)-<=Ff>hQ1}_*V{h~*a*y0&Z(!AE39Qa)06`I9!C|41K|vu5!884LN?x?!8TMW$ zkUBO8%1`H!2M-?LtV~O08B-Yinw>8R31@w$Fnz2Z1QVDxRuBG#J>(blP?*Fbgt0zh zqjt(7fLs;>C?SQ#FDbB|X*ular)1HBnZ*djkj0{f0`@R8Gg$~5M%$I_;iwp0OAwC6 zYLi$Q!AcE;fS8pbETcUYR}X9xDA|vNSfg_4s2sD6_G3E6Hlyi5JH}G~BVo@7h=mzI uvP?xez_D3aVxwaVDKZxpG273hj;(+&3!V)d{ej`1AO16Mbe?34i~a?7TV<^P literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41,43.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..5277309e99ae8b6c911eab34546803eef7ca3204 GIT binary patch literal 1352 zcmZuxeN0ys*pw2(LVW{CATArL8Jm-ARv4SpjRlxtItP_L+5!EbEdmSZ z4Bu@TRS{)41bzN73qlld$xK)VnK(6?&5taSh4_d5qh>DXE4$3+xhpUbm`E~D*)Uoa!(hRZZ+3^d1Mkm z6GB{B<+OUBnnjmuLS=JER@?dCOpO@NMx5tBV*N7zGGYhfha66SQ-Z*jBd$a&IIT?{ z&>Th=#&Ga1t5f1#CKJYgMI7+BeSY;FFk}5i#3BIZY5*AESYQ~2w>3DO&D7f!O@?SX z6E(3>lP3BAM>ZHVrV;212IJb0kPh(S^14yN-@d%EPpj-qUQ|l%Q}Qt7bLN?+2@y>KJiIcmD}rad#!%Swnenm)rloE z-6xhvKFRwclJTCfsV)XI*rR@ZrY=*Lv`HsYm7z=W$}3qi>5`Sgw=T(KK<1SRd38>{ zCLfR!{u>kijU`5OOZtexuoO0|!_6elr^K{z@&4G`fNoHkGUn*iN~$r`6AA><+I!o> zou)HIg&7OSuO3xuKD$7K{>Ib3?uM60O1Xm=I;6nC&iZlJXpMWQ=A-iOgO_`6gntP&Ph(3I0yHOv_T*)@td#m4Yw2{rVr6j$Yq&Z0HB~qYlvMRaHD;t$ppHh-- z*K50X4c3S4t-e?6E$-&}`r(^blvIU3D@4K{v_;mI637r)HO|f}Iaj9%JGNstIYP8! zIp?S!)#L`zi z)Ai=~u=414O4bb}V|-p-n41`Ruk~DQkI-@K*|z647WVExv-f0G>rnaB>q0c|&Q{z@ zchIQELq`uDs6SpDu1L=R6BsQ$lhBeid5YTWHQ7Hws(P9;vmYbW0KFC{+C^qFedyf8 zc_bDn1Ebo=-_%_%Axv^eYS`EDvv^uo;z~KtC zM-F+G?uPasx9UZ8_U@hy$U-caTKcBx?&zTP3f2a#9~1R$`VaXZq1iex0e+o2tKS6z iu8e}K(g@?1e17EORq>}2XOUsSfIh44{QFyK>G%hRONXZb literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41,46.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..5a74887dc7014eae60bbd63f8f473a37c5cb2eba GIT binary patch literal 1484 zcmZuxdrVVT82|3=gG*ZhCnXDpdR0guV~QB@Mbu8L&P_3(8}1==^wJ9SL0bkWCB2^^Ga^k0>D`S_Q~cQx%m^@e>njlt4Hq5-2A1P<=^f)10an< zTvTk<+n}74Af7>NFbR6Yg-4ny0Lc*IEE5uOQ}Tm|A0kdRnVr>999w|+XT+RYUu^@) z4m5%K%Po4dAh&2V7|({-ZL>O@p-&(a^A{oJ0nit-F(74uVHmlg(rm7w)|y}}1e2Jc zh7D>Y!I!0Eu1ccmgI13xvZ|tz0KS--(@*42uT5{3iK}AA#k`lq?71Li7-`hjTw~S> zQ;XC1%#4goUTd&^An^G$4yRyt@UL5nt#+H$u6GKCCA_x0oX?}~ z4n9wC2=)(=jMRihH8UW=8kKR$ieyF1BE>>Q%wh$vh_MHzQv#$pAm(&j36S=HTpSL} zTn*d}Yz;*HcaQsbFM3chp&V4HCj6>7*i7_Te0Wul&jT5L4LHPb%t7XR=AM``{i<49 zWF>2wHXI^xeZ(fF7IO6?XO5kofAsi~*472Lub&?9O?uD!N1I0*AM6&*%P%-OEMDue zgYJgrrpEoQ{VfL?I5B3o`k`)sxNG?X>H4)qGW2%0`O5w;%O1JK!QXCmwDq{UTD@K$ zj!svHs~u0&%@DQn>~w+-tYiH*KS|6xs+E@#n=J$H7CrPnVKuC3~bqowiyi7zk_ zRg>V}cDUk{rN7kLU3$9UN6$6ieg98=mu_=`Vb8_(bG>(qM)eoA-6G5F>p!m=J%6?7 zyT_e>9G-NK9P^wrwG+lmSU-V%oZIX1coXeIdn$SaF8Io`6>4R0@pP)%=qov4Y9Q%l z`6Q`?B$`OV6|zxWs24Nd7w3yd-w4Gp7uWRO zI}Pv7&+%>P+O)5@uDjsuaW0tkY$^8A;!!K{1~8Gi^y2D-!r1ITfsu_P1GOn5^;F+0 zO??0fp(D~v7VjwD6qd4hd&Ze`I_UZ6F(htK2Kr@d!x6(ivkL=k^cdp@8K{^kW(uA{ zW>^E-XyL1%kW1t;CCf_j1g+<}XmeiM1RFpLx=0SXPON7_p%BfANQ;At9JXU^j5He0 zCnAp6EW{v+*pe4`=?k_D;vsd`M;_*lU;`^SU>OwRJ5dNFh%DeloCg9Jp%ThL4|aG9 zksbZ^hWD4j637VG!qRAH#iLfB&IT!FpfyU7XK6RI{)i5J6}t4iXBDy#_NAJBY1$o~ zG@fpD()eKseN5l6{}Jk~01e>ZDc3tKz+q+-%u06{r{HiR_s_qlRZ*M6j4IS@Xw_df Hs_Fb22o%b4 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.keep-layout.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..1caeeab35bb31f929cbabcdada1f172659264040 GIT binary patch literal 1232 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.21,23,25.otf new file mode 100644 index 0000000000000000000000000000000000000000..49039feeb61b24f4061b8261e1bf6c70507672d1 GIT binary patch literal 1764 zcmc&#eNa?Y6hCjjc>4hevZ$c&_*jyW(S2`$1v6y>F-yZiZ73UbgY~Y+vg_`mz_^Yn zvh0^`q==va`O)U2JlbISrC3!<&IX6+)bd1!qP zfK-KiQ-j551GlIHc?5Zz*<@_|xbWh;0Fv3rOU-DQF)a%r{}Fk<+2U-QWs{5`UxU2Q zVr;WPfdF9$Mb=`pm}D(k`8Z!Qa<9$ma7Nz%4qZ0n3;@O!08k(i0Yy==##W1^T|kQ? z$q=caA_h^!AdbwI@F^;B)(JS^^To9)VIIKg>BK=^cJK1t71Ho%@12Y@lzF*)hk!k)UL1FP;YD`?++7}a70InNeL+>dQwKp z39BV6OIVJuI>HtcwuG>ygw+$ajIiZ|(-IEHaD>wlu9$EogexVSo^WM^Dwhx zc`@8{Wt686?%40>Zr#PF)tPzKK9hHK*S1qFgH6_frVr}A^IZ;12ERY?$=7sf*f-jH z?)ddh=Zzn&{)*Sxm%Y8?{D+tJefjH=-@0ylM|ync%)LD2=S4vtI%u!o=ksUShw8T- zGtrR+4@%U^Um|zZ*N$A>`GtobeA6Eo%yu-jnOaSyeBn~Qu#Gny*nHl7_|)-m`L|)s zWH|TKSZMsx@QJrv?``$a`(A!&?}p5(z%%{JI~rUAb!T6vBc%@(sg;p#pIV8R4KG4!P|t;hYy z$1tbym~~M4WNe3zCs_a@`4|-hDX6GvY8vhV7wZ8rA^?#>CYDK+B9R1#3HAA_8LFOM z4i%6Cn)n)mo?1plqfud1WCr|%CWGg(R+L1J<1>)Qu?Uio#j*G?yW}w}g*2G|XN)Xn zCtw3BIPiVk2rSBGWG&zXJ=B5;2(&^o7{LxNAhToKmYAP~g`kb)A`)gpl!mg~CiI$cvWYI`9Y1fN} zDf@0$0!Rzh)~p&+ERFP`#b~6YMH8d3iBdxdzpN&jXoF?x#o*js+Y)2qPv_>GnQvy! znK^UrnVLO&YCs7`K@3b~bv5%t$SDSZ%K)MW+jiCLUbuhP3?NgZuC`|PlU(cA-T;7P z6mdhN*=Pk5nF5fy5H~fOj7=YJ`RqLa@g>9s&8S$nD0>_I4KI-7XYi42P`EXg0~(QgrCQg4koV*d42H0f+nlf|vn7U$hdCh=33xYic)}y9B8u zq=C>@5-Jmg%EY1d5zdS+I3E}K_a@^pD+_4XY#wR`Jct~UnXr!3{Df#%VCT0jeF5iO>y zp0X@uIm#L+n@8Dv$`(+zkg`RTEvB5Fa=3=0oPlzAl*^}F0p$uQS46pDYS2>yOAWZC zfg19tA-~dM?Xn%9%?>83aSOxg^&C^tWO>EJ?C!EVOlCW?y{*w=vs!FMhp8!-sc3Cw zY6W*YQ){xDY#peKlmqMGOa~p7CrYkRs?^ajnsu>p@d?_*C)RIBO5V6BC6!4_&(LLV z&dy=emFdcu{~|`opcA7^Q^weW%b7vm8CrW3-mb}k;oc$F|rQi<+vXjVJ?`f&g0Q=gA4?eGnh_76WZ=vjvoo*WFP+d| z=cA748|7B}+5O}F@=(sotX6e-IZ^Aw*q)?be{Y~K{coSHGS9z3-mqQor{~^AJybyePoKVY$cW_4<-*WAz8mn&hGEKl8P!kjtx8 z;VU4K;hyTq+ovi01Bi4EHE<;J(ouomdH2gWNL)QB;Y1S%#UK*2_=4t0PDJ|u=7%|i zIi5o?jk(N((Rt}p;ghXRP6r~zGzowd)MSw?!UN#K98g9HJCsr;mPu72kp!0sb$LV; zRnI&N<&Xv$kr=|fP)1f)SB0pED)19X1}|WZh(v+wlMqK_5yT*h$l^76$r@P-36S-- zk1VXGU27RP=>ZQy`Hs09;HXoprXf(>3oWJA9LVLJ=CpbzIF5_Ur=0l5-+ zDM&DakfQ|kBH=Vb{*Ug-sNUPD& p26Bvygi!?xahU85)IIzMCE-W}H3Zb*3<<;`Cm5Yzu0hm literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..597223417bb1fb5ceecf2ec830c9c9259c9cfd47 GIT binary patch literal 1988 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 P_lF{4mHm)-@AZEHrNU~d literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.21,23,25.otf new file mode 100644 index 0000000000000000000000000000000000000000..47fea1ac694d2ae6e27847b48d557d969ec17f57 GIT binary patch literal 1428 zcmZuxdrX^E6hHUtgO9f3C0z_Ce86f(BpWLmbCYb~81scJfChD8)bdfr=wodek5HWB z(f6nbjK_wc^_B5h9H5RxqmaR7jK;;u5`x4(T>L|$1Zml~rJk>ah{k(z9=~(WJ@?$3 zdv8H;aREr+3I@(} ziY5#ri*+h3E7m1!!+MV(b{O;~bKq@I;`$6?WXu%;5D-#82oaapXtnjcwcj5J{siJr zr2L5j|HDEqS|&&sgm$MhBxPZb0*tO~8REqEuCE;t`LZGxe8*yZ+0h^(L>MN?FVtjY zXfpO_GWH(Q8|sZGG?iv%yE>Iorl%{JoO1nZEK^i(GP7C}^NdcdHyZRtm6Rqm3NL5%`f_`|@^al? zv2VZ$YzcKosSokH$lJt^Hw&am*!EJ@l#0I5&;i2HUKo3bIW>SCGKQHfj zv!|oC{mXve^RCYQt|nWP&2qMsi?XPiX}jI!h_{Dn8$Ie#>ulQ%>(#QwY!0}%eYM#Q zkNu*u)HJu$cb#_I-FBC~>y2((mz#FG9j^HPmOi9m%dlm%Wx0Og*Qq<7FFyC%fibJg z=C-;obo6)jou8jOxtet){VErBHeF2{OcyK0I%t2|{du``d~K`Tg=;(FTHGz3wuHXC z+~m2^?_c&+%}#N2XYDzYt)_{KEve*Wt*j%z?bL{Fs7l{o^>N8<=XLj@=f}Zo-_hPN z=T!H^z^$@L)u;L2av8>h@6}FzGTr*kAH9FJEjuoEI43H*IpX3d4+jmj!{v0k;*7(k zr!KOz|M3TVLA?dv(>pkD(9(1Quz^KsaP zT!BajX4ngbz=8&9pc+(QgqIK*G4Dh$z6*9hdaxIYuZC7EY6kmjJ}OKAq;j(&_h6mjQ<$KAcu$wJb~-L-}{-Fm;e9( literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.21,23.otf new file mode 100644 index 0000000000000000000000000000000000000000..99e813fc5dd0909daf51047ec70670bc2e1dbe49 GIT binary patch literal 1308 zcmZuxdu&rx82`?_x9we9wlP;?MyPjV7>Em&P84y4cIxP-S>C{)E{R-lc+vWA;-UTD({}8bNfW9mM0geGeh|<>SaCB2`bG8Vwt4LPQ zWc6(JQBGQ}W%cLaWH_APwW?JBlj&s>lJeg5#chhrrlMrVT#~6-4jdtzYP+eey1K1; z<5riu+q1vT?i1Ep*9k_0!6?+(T(65lQ@7VAI=sTmPOHn~c6ls5(Y9Ww>*x^7)ZHtX zMX%^Nh-AJeY|2l7#U3@q73vCgp`aG%R<17e#244ZC4W3qKl)W%8i^}2Q}O%P;&yDs?%uy`9VN**JXce3-k(YHqjPo4a7JhL-0 zv^mln=neGrwMfN1mScP{7zwQmsvJjR)=B@3fv^2nTNi32kjkFzsy+Pp&z7FfWBuL3 z2cyAgFcKVoYa}on<)hJ1WaW7O7|ujbqGz)IZg=vRncJT)?D+MCDSspo^+!(+jt`B! zGe7snpEVZ^S0z=S!OFY6XZB4E^4Y5U^E%C?#TB{;)((~RNBd&~`mu)kin*5WU(2-L zn34FQt`pusXRlP+Y?rjh#n7&S10Ojj+Fj%AA2?U2z}?V=!SJ+wL?RK1iAivn4@JV^NSP_KY%Ebls>ZN!ci)3zyD1MtjL|P$Wqe zoix5+7Ku5^z=YyCIiu{ev=LwmW=RYbpe1RNhI?R?C7_NPej#clt5j$hhQkQj&x27{ z|Kdwf3+1pnUxV(cEhLxA(W;2*aMGcKSFkt26<~ZB;=Im4A)>s_KE!hm=?W-?wM#xq znQsF(xWJ3w+FsazYab#f_~02Zg9vTV2_0Yo54?)VgMRyE`vzDK2Dul8W<#wMr5a@o za9Dx%$RW?r)6o9&GMCEz^x(`|WI^_&lHPRr(xUlRFD;s19=X%>fABwpdaFSX_;flf oJ}2;483$IS7UC1VKIHy+_MBXaAVWYacSxWFWqvZbO;`v12BQ^bz5oCK literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..852808e453f59d71253f68cf396be093d55ebe23 GIT binary patch literal 1288 zcmZuxeN0=`aT?FfJ?H#>=e~2# zxq0^%m6a6%2WLSAyrrOkzj>JI1Au7&`plu?qEdJSbO34@xrCz9oyNNFj!XflE+Rfz z>9D#Xg{r`KH{xQuV6FPXF!v$Ga}k^DNF=N>uOef#5rQ|eP zPE*MbtI1}aDs=?<0)eR3#cT!mcy-e#VeVa9JEW2J#xG09w@3#zgNCBiF})O#yYhL`b;j9i%aKtMWrh$gNyTsYgr=c5~cjNuZmcVZU|Fl)Y0j+Bz>?a==UeL z_qK;RQ!fB+Tp5@dzHxHa`g!3GUKX!k&UMpv=W$SId)ofy1x^9 z=?>_%_$N})X@C4!b4C2#KY-FKBLgj2Q)d->>w~2&kQ6?rHqxIWQ~|B90GefLdvqYc z9I*>%7ZnypHBUvdD$D*B3h3AcDg+wPQLEG{+yi680{ZCT4doaWqtVhd-id#IZO(uC zARGWQSfYCDA6L{9KQ9+ZFpHfVr4u!09(K;*%7ry}uPumf@;wa`j7^b*l>Xmjzd y^JvvL6yBm#4`yuQtBr2)WkPv0qN69EbY;OwVUCD|FDmcH|A>;2!?!Ii8v6^O6L_)! literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..8f18b89c6eafb66b9c388bcff406a362b5caa48d GIT binary patch literal 3688 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 P_lF{4mHm)-@AZEHrNU~d literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.21,23,25.otf new file mode 100644 index 0000000000000000000000000000000000000000..b34a49fa011689689137f23264e67276a469fb7f GIT binary patch literal 1776 zcmc&#dr(wW82|3RxcdM^Swv8{JeFi+bnjhQ#7x;l%+hdB8_EXVU_FQ|yY4Q^GOlBa zEc?=p6cN;*wq{ZkCm)qGH63Iz&(4|e@%tX< zeCM2d&aGOrrV3QB6QsZ_sjOuBDBl zDAkF{Dbvzs%*@W!&7L!tEiPT~MER1+yPl`6F+F)4XU%G7D8+O+BEGcqz~&dSPW za&q(Xbp>;ZSgtfrm8VMjug0ht3}RF{BF|MNIU=`p5#Ae#R`h%l;kzS>=uqVDg~*l2 z(~*RK`sjx~<#E+@^>K~ndRUW)C!-um6}fh7ns~I(LuFGg%6%htRonAQPuHP+ANNI9 z1otlp?&#dn>Dg7wPw|*{(>`C&pXp1mZV%U;^j_+?>^;9>yqpIv7d&oeK`KiFN=n}!OoC3bhxW; zfA7JoqnmFnJgq;^C+yPK(RSyNjYC~@tmy7lt@_OEG;I*)_Gh$*+QS`Ly_FTYqqSc@ zA8oue%+vd~?R9px?BG*t8hFhfi+^RumJ`hbjkdnVcWS;3Tnvqezw7_tD>^b1816oM z^vZ^F=J!^9$r~Jt-`sZY-3xoZ`0dc|9XI`_x&mh#x_K(dOTs*~(f(i{5X^84)^0gs zp<{FIm1xz!#%^gpJ9K&b=RSJi^{tZ}!o9UVLHqy3C5uQ@u;u>O6flXI`aa#(VR$>R4w$tH#TQmrSI) z$LyEZColX1D7o-1z;@lKor1jf)~BtIHn~^ENlqh_f<&<5%^jnP;@bbmAJp(SiR)30 zU`?ZxN)d=7zMUrbF-P71RkGGP~*0-nXaqGU?U&p;g4C6I(Du1g=W%O26?kP5T!$0$TQ z0Xx{hiSOfjkv1Y~1{ah-HCTW^3p9Zl9Pk_>2gYp@{VdD{y;zGx7!9>llq!@JAQL?_ z(Bf(4KpyCX72vuaXhPz{l?#6XfMSsgYY`$J629Y@7bhLcI0;eMCJzhm`oA<`bQNSl y5l~HLS2NZk>^5K>f`@WhoG!G*tH2+DSSck|oGwOWVXoxC*NC%F*mLd^j_@a((!hQI literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout-retain-gids.21,23.otf new file mode 100644 index 0000000000000000000000000000000000000000..2ad1d293d19c034e40e42b9129f0eff255039698 GIT binary patch literal 1644 zcmc&!YfKzf6h1TiU|+CMSftRx082vy!JS#&VgXxes;xB88jJ~Lh3%!tvfJIIKvPI< zDZA{WT?rrss>Q4(rU*p((9)RLVv9eF#wOYtLh2u@MiXsN76yZ7W^GH1i9bD)bIh7Qi^*b^wFP&FXNjy#*ZZ|1)9+0Auw46i8{HC`#VYYO!<( zUU5hZp>0&Cln#|jLJ3knMk7f+4`;mI@TiH{3^1`6ImXLZZZ7YXElq3ZL)r~XS7IQ8 zq9n2ir8-g@6C1yAQ%YJ!W>yZHTTuLT+4hQEyDO{q*SuV73cg2J!Vx3MC3z&D6p%tv zL|6l1S;BIJH4-+Luz7^dCu{*>3kh39I0NBu4M#X5;c^L=N4R{#6%ekFa7DyuAV!uL zaZ4jH<`QGxcB`$!euy+WnaujF3}-NKOnHO#6*E)a;c%KQ4rW(Nz142B+D%S#Lk?5k z+{{!7;SQ$C>@eGpAQ`?6ybo6z=<#|Y6iSs^6B(tAj@b|!r;C3gVPj&_rp?JIOln%X zK4VK(Hk+nOQ$_ukFe(Ov7*(n&${t+K2=cDr(vG3)L4GhOUz!ZA-U!|fJ{OGm=bYm4 zobrO|p8A4Db1$HY#5bXwjT1-Rd@M-tRl*RJLh0{^?&yYIAL=`M=97`7-M;=}UzfYf z-Fc#xkM1;`RP^@xJW0I~mSchX3D>Qj&sm7J)&^_Q+`28MV(n$9(KI5I^ofF*;I_7_zx%=_L^S^AHbotzVmw&Wxq<{F0J9Dr8 zQ8I0~%14|q)GKU`a|b8;6rt?ZJ395n<#?SBb9)lI{oR3{+w-y|mPHYlc_! zx1DylTf6wUnnqr8%Iw+GbNKz1u_o(C(+4$QdvE#|0^gj!_N5{?>75z8^ycll%cc+a ze8C&-rSG&|zH;N#=f9r)t>=Mfs?U3=age8cJRRWSsKVp(dVPuZ@!G@Z%!*LfpLsfU z$nDjs@h_ml>b}<1a6nt~J5aKDWZ+oF)N#SyefQILh+jJ`<>+aI5}*YZ|Dbs)JM8^` zwh1!RI@>YCazms3-loJQgW!ku+)Z^QI);K+Y3VH1S_phyg;RlqQerlQg1YF4D| zU>pQXm|&?YSQ-(Wt(M~r5y=B^z~>8dL)3hL_a=zEC^tMY*+!S!47$_7M_ND*Z@UP44a_@ z%Af)es=)6MERU>!tca|HtOeODWUa`Vk)t&nay)VZaw2jPau(#W zkh3ChMxI5UT=K{Z$cxBJ$Xk%lLf(pk83h&v4h4!Rpdg|kp>2wWUFw$=rk2J zdmEfCuW4;ydU7ejtZQX4> zdySPAIOD4eid(^?T}1*A7;@k5->8{@!<``&Q2n z10Q{>^^f?*4vikWvE_W(h4tUayl2%rJI;S_x&7-qeZTIx+j-_S-)Pk#ndy>MJu>Xn zc6RxET}htdlKOt9Hn`}4Xp9b~O=TFdyYh{y-SXmXh4TDLIjKrcyd>KLDP;lk3xTrm~vQbk=1JBU?FlrsGPa+(a zRS-)kEJr+~S3e|2LIM@_@ElD@k5shXRJJ)N4fRSwwa@?}6?i9=^+u?n0`Gxm33+JV z){vd0Z^0bei%RiEQUZ;78U;{;iAFUwMQ>Mj54I3jFetw&(Yz23XTV0Xow|*DglPIL Q3v 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.21,23.otf new file mode 100644 index 0000000000000000000000000000000000000000..d10d3621bcfaaa01116c5ad599a9583ede331bae GIT binary patch literal 1320 zcmZuxeQZ-z6hHU9*Y>ULKG2nr5$f9j198FHIU_h_lQ|-aB^#Rghhuenw9J03?bu4_ z#4*-yD9bj-HjpLNm{2z&A0jg*%7poc(MX~rY3BS#qKS!;YC9gLp8Gm+G2WYd&iVb$ zIrp4<--l`MUK6O{2(TdRXlM}nde1Ziz(oM&>79E_O+RkE{R;p$hg^%P=~1IC`Ene9 zr7^8-cC!l_NGtm55w}}KbNk1eX9_Vljra*G5+!Nnn;8E%;tf{2w@1Y@n9Eio=I!Pl z7qENKgd{Gd!)zCo4*h!cUqKvpIX&LoJ7C29-$yI}U@QwjfMb9VqHOQ7+kMp9mMw3HSuh$5Mxn0V`MM}H`8;0H?h&4Mv^m`_r`zlm+qVdHHk;5$ z!#zTy=n>rqk<9mmO$7+B*rTSTLS3OQ64U|}QWB^i?;!z0;)~5?E{QAsvAR3GXViSYo zLt}5x&%N~0%N!4d)<6WN9`=RuaZj+TS1N6`O4?&$c=tf(2ad@O=Xl45&EG|?#}?w>pZ(+;J~17c8M$=k zX6t41mEB)URqpNYc3=MJ+Oe;GJN5g(o$&d=$R+EDM4}QCm*5Z|jz%KUGIz42^R&ok zANi|Vr^yB*It{)^cw6!^&ArySuejz9Ac_>F4{tnwgz8)GebED}bH_O&a{(a>3}pcn zDN;!%%`ccmVvaH}sd!4>QI1&_1ek(Z5(fonNt&eLE*NDEXrqN+h+4@i6&i-&FoX7U zf7I1K`yA9lIjqmupmK3L$>nmiDxx}^bSU8^?2T{*m|uoCZ!=JYC~vbXcy5KQfKu4B z9HW$Z3%I}u9{kq!$!k9%2Y8_x8bJgLbb$@b;D%QaxiRj5?0*clfI;qsp}V0~idv1j z1~{xhd*qO3=xJ#Gd7WF#{c!)xT4X_vrJCM!`SPOs;lDs$bboo|Cg}g*e+G?KgC6kd r*vwuB@K_lKR;3=|6+K?${(1JCT!|pVz#2J1kGYJ@(yR&OR!;aE+9+kd literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..83e2e61dacdf93e40bde603aec565b14f1a36713 GIT binary patch literal 1288 zcmZuxeN0rSZ zhVQnFP7!5n2>LXcfDi@LU@|js;?!uiI9);({_{UG7xX=LS?YN$#%Vk^_nhV8r~tAm(ukbO9(((?C%aV{3LgTNH1noC0zdC2yhS zEh_l|HQA(7WsO3AC=}Pagv|gSttO2T=Fa7{{TgXk%CdC$K56eJ&`^{*fh(=Bn~Llv zlijq#;`X$7kJ%l5KEKw$8w(1IyxHb{S>P*Me15^{8iWV|jcteXZk)~QX^=W@ARayG{+DqB%GT(VbO%M(erC>6hbNhE_JBTb3x z3*t5LSux?iG4`KW;yAaW9oOkrBDy4OD{(O`ruEDB$Ib+OAYZ#vq^)`m*5xsGHwNctsWk+Q8)!Anx6bmoAR zV!P4Mvva5^VsG=kW^Z-3G&POfx+0}Z%z1V^@?rb<##SsDChPi(i<05$ETJcM>?Q|^ zX2Nj6b-Vx9fsUcz&;Tpvk&AlmZ}Ok|D?{J3e%s5Ay&LWu+v2Ma2+e|t7;D;ip00HdK42@s~FFcRPi|dZX;*Y^LD2UZUE7{OXL(8Ep#JkR; wRpU^2i&8z9v57A?y2Y0X<)N64pMcVp1t*0$ViG;4ydVD~N=6Rfw&Zy1FUYxgvH$=8 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..88e60461ce4a37fd398b4f2aa9f212408acd875e GIT binary patch literal 3684 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 QJ1a3|N7azbI*OAbM8I& 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 E12@KXwEzGB literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.28,2B.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.28,2B.otf new file mode 100644 index 0000000000000000000000000000000000000000..2a8114ad6c552edbe2993802101ce50084994975 GIT binary patch literal 1456 zcmZuxeN0nV6hHU%>(N%gNtqi1-%uAeQCT6&25bXAFmualz z0J8fOS6GZTFc24j{CmWvYO~RFC9~@ej<+Iyts05MW#w_iUnAa9ZE+q|vCPMarx3Fi z<53&PXlfY6uB;PGiDpvhYT^v|cMqI|qTz&Y0G!QUNY5uRAX(AAh^DPa(dZuqYNkBj&FMIU#b@ zenVAGR#i^+ZmX@qez>aI$z@c$%;~eT^jx9I`l*>KX>d5r76$goCD;%4<`b$q&-qv}Ose9b^9;iyKidX-2f#rEcvy+)Ug|QdH{}H$+bZ+Q>#SLdM0dE8BI2 z<4bja6kU*fOel%>k*?6Vqp-&un@I$cg3_lbQ1V6Sx zKFAN?jOJBIr}-^BuM74Bdj|v4!{U2FU#`&NZSgj@ACeNAjU6n{3%(RyWohcJxahfc zV$O55{9b_s((`Y8R&ea4UyaT69j=D{BYxh`3w(dufVbbz`u#p3W!N=@ZM1o``J(Gl z!{YDP7H-^o_u*S(9>MGP_)qr^_YIwzpRM^jea8qCcebq*zFp0-8G5H!+-YkWqg^hJYbye@=pp=er#+{Pp8nmY4W6d z+UR9@ua8d&h$&w2xlhCme3uvNbN6%v+I_6s?e%yz@jfc7bZj+K*EiTR*cTlBeEi1g z^Ve=)pSwQyMYFC*xhZF4P^=We*sY}A_GlZ z$6Kjg_;N50k|SMmJu`t&1`K8KMl6y{+UVT486;*Y1LqZa(TvfUHAR4ln<3qx04-T2 z%kUWVQ48p!hc{iVlqnS&hLPh8TF(*QR(%U2wiO^LM6=I{Jg!i#F zB9FuQ$%tb<1M!GrzU(Pp{*pX^tQEahWDPnr6( z(|p_3I?W%I$Z7g6{g2RSHKYN4nOdW>4p>|n1y`jb#A$Xok&9);hYa)KTZRn5vtn@n XFW^`@BFfTkf&tXC_|*t}2dn=8C8x57 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.29,2B.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.keep-layout.29,2B.otf new file mode 100644 index 0000000000000000000000000000000000000000..1426d50af5c31725db2d1b4570c7740fe9659bbe GIT binary patch literal 1368 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..2fed45d31783595e44f0c0a9fb3e24780779e5e4 GIT binary patch literal 2352 zcmd@WYfx0z`MV3dT$YuU$Wo(G7nD{a(Y=qo%lZuRu$ovL6r(j&x3GQ-^4>&KpnSbN5RgI#{M=6z!DEl1v}U9 ze#eS+-$#0RUZoUYk(z|;P{#2W#~HlJ2PtO^*0 z(UjCxR5U2m+K3(^2bqXX6|u!c7RJg+x|pRw==S;Mpe}9+z^|s~4a=IZZqIB{M^5Oc zW>!5C@g%_(+KQ4_Lmb3I0?Y$FB*6kmfk)vnSO#g34l7|5tOgE5u)tc_08c^=g|QW$ zh5{&rBG?1_U_aQP1Q5!g0;<6Y_0RxK@N+m0Ezkx&=z<>Th0`zqgAj!C@B&<*q{rb3 zT!R}h0XN~dFbS_ST1Jl?@+hE)W|Yu^S!hMhgdB$)kDP#kgg#oTEuv^(v! z^(34-UOHb-F67g3$FcF+1l_zu{rsdy79<-|zPIqvMT;L>vUHg-HEsEd^zZ**Wya&H zGM`wz#>DZ0XqGHl*0t-_Z`io$$?VNJxq10d?I_y4Z-sV+Ht~NQsam5pF;$zYfHc}J zRl8i9SR0y256PZTIQPtJA-ON436F>F-wM4K+7^oYPaXT6E`C&dFJV-tyXV)(YVz+_XFU-`yK7dwoJ?dyjNE z+v`r z?b2lE&aLs_`Q{6U+u4?9e|%!!;@r+34&*f!HwX4yJ;g?(uh&p6`Wd}pZ(v{OnI3t= z$YJ@^ROVZoj&}dOo$cxE>h4|^3=RbXXHRYG-qy0+Q+B+lxOuBzQVXrgkYW>iJ(NQ48_nChS$Tu@4~aHA9V^|0dEX&W6p=Xq0T`ljIJ3OzUB2VW_qD J5p=`Fe*+a5RUQBU literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..00076157a5f332b4aed08550620dc0010493fc0b GIT binary patch literal 2104 zcmd^Adu)_N5dVGG>-Bm)T7h1b^12qPtsva@yq5R1rHH5{Kur;)p6xM5>HDtG5>S-# z>a|c6!Gb_5ClM)@C{zqaR2r?XXf$dxgb+2Fm}roocjbfB`L0BX@jw4`H#TUZ_8;O}fcR`cuvdGV z>QK0tRp{Yisqt3(tbG}GF?*WjuDaSlaOe;u_Wu&gP7VPS@=BOZ5Cp+e(O6yGY;ZH8 zDTuBVqGhINSzPosvp&)uH=zr=LZM-5PZ$rpa%DufZn^s2;DY#QbISR_F{7dzM`Av^ z;={)y0f|V$2&7;nMk5VlFb)%ui7aGe3Z_AX0yk!0Hs+xKMOcV?QH&)hK`B;XCA_Er zp%T@oLjY^hj171kPhtzUBZQrJ3cIlv`)~kVIE*7W%7^a7t2l+zID@zFj$jrNNhFD6 zQb;9@+>}dsB)UixNt8&GNmNKwNz_PmlbB0l9!V~ec#TAoOp-#9N|HvBo1|Ql@7|Uq{^i7hE!5D zQr)EHlA1@Fi!_lmi8Prsg*4u;Mw+{zwywEhHTi?i?D8C^D)Subm5j5xys! z@K2rfZ(ZUs+r^|~cKgK+`v`uMiT$ZD>Nr0-_Ne)-3<=AGJ&y4*1L#dUqJpWE`urOw~BUT!_{bm)|Sk1n+7rVbtJ zt*vdLP+NLK&&v7(K5KN!b=8p+oiv#3p!QYI`Zw!S*DTe?uhP@~dfK~sK_tT)aXlOv z8+mF`B&Fh;HQQ%&)_2gxz!S8gwz#>fPHy^tZ%Bt_zuQ|^4M{+(t zrJH)(bMz8Dz9;8s&E;J`?QZF8?c8mRX6a`gNxw$_aD3SL!G@1^Si4_nYww;IsBH2z z`ZPUfj-Jz`dv>kr+qU=k!ARbhk*o`m%;WvxfpfiGhc_Nwv%|XOp$9jw7+ctW_rCe- z%Qx;XJ^73^s$HMXXW1TdaA^~`lJI!+=!%cZQfB=QA^tog*pPK%lQDl=)^r4ELp#lq z=`|MPU@}mySm%YQ!`%Ou8aXh!k-x-#&ci?~E8X!kV_Cg9G5Ihh_6r?cR_($S;R>!o zip^l2IlyGI#988#OeQlgGw$TC<|)jd&n4D_g5ekjy*O7G8X7X9vgF}zGz;$M`w`5E zyxzs~FmFOKOT&EJO}P0cJ|3x?9DcTF zV4E`j3YIWVF*`3~53potRpLn8!zfgoeUUikx!X$3|E mjyj5II&Nnwa5RD6ya)L_8#xv*fFBvLu${nP+#aS)c==DE8RuaD literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..8eb6ace1982a6bbd89ebc84d7d4cce4c43959538 GIT binary patch literal 1912 zcmd^AeNa?Y6#wlf%d&tdkmA>ZQjm)KzIMUyWf3zo7|@2s5!_%sE3zyssL)th`9Uly zHe{h;IBm`t6po46*kq%OIZaNDHZ?X(<223muQ@oo_-yFB#VM!hzy9pJx#ynqJLjHr z@44@tSGHk88LZd?1MHsCQu}dF+gSkT0K=^{npy#b%)eD)$1*$4ei!IsvE_aJiqr&zah3c$lFVbnvX)0yjb1On}vv?P{_ z*k)aAHAk-s( zCbVED+OZq2;5F<+2f{dnBj~}~IEFs-<9(dMX+HE2&SDrBa1mc<=OKYal1L_noaCZH zDk8x_f>ybnStOY=$|Nf!J4tqtTu5>eDGpKuQbbZDQg}lODNa&cq!f}; zL{0}e1#*hyl*lQQllSZN1e@AJ+sNN)&#TS1iw=iqch?19@YyTdTUvdA7W>-9+F+I&@ch6a0u=H6nj@U{3tI~kn3PrlFtZg{vJ36?}_k}WwUbxPXQY3Ui6k4>ME zHFMVNIdkpVIrHY{KK?{r{*wz9E-F~;5JX8-qq>EY(*KuhHHcS%YnV8~b+{I<%1P7GcvT-QOfmF{Bf4&Gdp6yeZVdM! z#%Hk15}>!54Q5l4UT@@O+MWDG?vmow+ydPwp3I@~+beYw6BAli*4+GPWX7|6KRRO~ zuXnIMDeIBK+N5lF1UEh+n~;tb4}HvWoVck5xvk2m;Rd?{4QRzS#v0&b#EVAM!p|Nd z_Nn1kUBNiT{k)7l$C_r@#vYAqEr`d|YZ-W7={#F`mSKdQXCprvUaXx6?l{+UXn#Vc gS#dsD6*tSpJlq^3P808H|Eqr?ErOLJq)giW1Z&o;jQ{`u literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,44,45,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..73315f3ed5395d3f6eca3e95836e963e5cb3927a GIT binary patch literal 2712 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,44.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,44.otf new file mode 100644 index 0000000000000000000000000000000000000000..4005a0d77cf504b194899df1ba038c9fc89c508d GIT binary patch literal 2348 zcmd@WYfx0@_1uMBF3T!DSZYvlL1?7D_C9w}qrnA|G)YN8GqkqC7S?aUeE_>4STxF; zeZT@+6^O`|jWY%;)&fn&Ow$TYOwvx9q>pK9t&>TbADzjh4((lX&Cqj~q;Wd^*PlIi zzVrURbH4L^^PO9A=uio0;S3~z!BSjo_;cp83IJvR)bwM|l$5>i|C<|tzJ|J!C1tx= z$1e{55Flv>%9T}4YaLux&7)nBtL-*x^~>+M_Tt=EP!{c|ShJ|PiT*UoId-SFdEHMF zI?%odK&^9Ho9m$H88pEZ4vov|w9#`}JJCOY@_3!w<6XW4EUq6y*#LmPMK}`@RX|ac zrn=GTY*Dy9u~djvP_ar?tTG|CAyHndOUN9De!qVO>ykDD{9tiaMAm%r+R|g{*y+^U zONMo^wzW`A4Mb^!xCm|zb)0*`_Pis1=( z3QC|94nsK{fumrBY9LSxPN)M9G(iir!gJ6DozMe*=z{?W!+98ii!croa2c-Prl;XL z%)(1>1AYQOg9R#y(h-KRgd;o=h)7JtO!5h1Bn(3smM|P)c)|#T5eZ`=jF~X`gf$Wt z=dgt32+I>zAgoAO6JgDS%_p3Za17yaNse$l;RM2ogfkJ&Ot^f)8wt-4o+Ug+o^%qOtWD9aTAjLP?Yi}8`t&btcqn7zrp=jK3|ZM*b8^4@@V30K zY~QhS*KQ-ja=aj#%=vrv?t5hafkz7tS_+GbpM2`;&*o@zw5$JD$kG~ckt}Vt7SUGi z>W1i2ZdC4$N`)70M&)x+jWiv-KOcQJ`qgOCf7<9TY{`?_yD5`8-QAFG6<*Ecg|s-< z-(C-Dm1o%Y{2H#_!j<(&1Ur++1L4F_I0 zG56#7&R>2!{P(VVzH5X2S^GJe3dpLE3@2${!0!)aG)x_>zi6Xl+dmcbDY30f+w>%O z?0fchdB^cGdGj$j!!D=alr2)0RWg2C+9(Y?DWz8b;dsxU;rb9clrZH+cj&f72NHOmG4$L6}vUmcV3e=FtQk+QEYL~qSc zk58Psa=e%B{MI+yk8CUqK0Z=(vg*`m`OFX<6F=RpPmyMq%zEy8_QM^5&wI8$+!$^e z@?JPG&_2`=?y|Nz>YGX(<{3Hj{hDao#CIeJ-Tw35iPMp`Nc*Lh zk=D_U!M6UkzP=EC19N|Adavh$&PykUPW7A(pBXwGpr5-B`e1L+*XKLmeZd!Qf1%}q zZNNQ|Q@K;tjcy$|C>j2A=f$Z=@9f}M_gLTagY=|St`8n*J5qbhStGvHK67UNH`1oJ zy+b`ior9f0N53QJq@}X^Av}*Bzdi-;iSihN_oK+Yiqw7o07`uuHPD)S?TkYISkZhL z(wF-ZS=EnFOaSF&M^N9Ul=u4o8a}UqLgUrIIwmh*Np8h05%u19bswxzA*hlUs1UXa z9koa;!Y9DSDIkv=fJ&=L(5O>XszjWooXx+XpzvT3wv7TPT#2FJy9cP{cxs6m|r zY^bq<3#!159u4SIf$gmn^(5|RMcuO~DV7@aaG`Zqd`*=S0rN^jsztgF60tohc_*S? zrR-4I6H-f@eo+SOV literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..c9f261ce9d72d8dbd9b40eca89b9b49b910ec1b8 GIT binary patch literal 2360 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..f50cc90bc860508a22ecb4021252f767f4d23649 GIT binary patch literal 1896 zcmd^AZA?>V6n<`7N+|_Ifhm3!lnth0?^g@>$%i=S90qh@af%((QxPb%_`%{fHxU^{ z#f7<{(_z+`IG7qI&IJ<}CC)7SiY8mOki{%Zwx7ndQy9vERSEibnpo<8gZZ~-uWxpHkq6{f)k#8)#nsiJD3)bRQGGeF!g zj5pUdx|^{Y+*M0nB(;~ps&e-W?V$zuT6ZRirJlEUUx-0RLfn%921A?W| zy{j1|YuSWBp5`WZqsMYFYXPfIFz#>m1zIQGfyDU>7~44oP{KQ5GC&XnbKUmF#x`9m ziliX&oDkV)h-@@Qrkb==n{ie@4h4fTX^Wo;oEb|xshRIxA72?4@uiH88z)BssVL=8 zeE2xTBLRs>LJCqb1sQzs8JLZ1gYHYwJxKRf} zJsQ!B0Cu1ayYVt!#XfW*h=VwcUc8B;IF5e2i&Hqwhdzt*7{VnC;}5||B1t5ZLMl1Q zMFmtyqJu<{M2SS1M1@3^L??+Z5(`KyB*{S%?~zE7Nm58sNph0pBB_9+LXsUMizIVM znPi1zm1HN$E|LpKE+oZ4ib#q?3TISEQAu%<;v%JhltNM+q>7|Uq{^i71F57sNp+E0 zKx!d59pn_rDUnkqr$SD()YshR-%8$Adv0x>U2-@idvTrbd5^uSEzs&|4A@sS)%yI+ zKEJ!wQh1x1r6=I=?_e@^m3)``m!pKQHr|q8O|&H?r%XznJS8nX&GNS`VZeGjalmG~-D6AQ zw=ZENEh^JTr@*McbDfwFOc%y8(z{>l?&`{HKhWOOG3#h~S@w-hH=hmHe>$vLdUqZS zbZ&o1ORM&3wtb$iH61MU?Y#KWwS8aQ>HD?gZr8cjgG1gUn$WEodNjOX>FN#!yEFZRn_7;0ERlJ?tLcf6 zIpewMbYROH-o4uVZB^RLEn22m%ebnQhO^vZ$HwsV@Zr_rl)CS>br$ut^w5ieS7^7d zt)=C}ozKDa9K@B(5?Px$NwldcM4>N8wp%z~D@Uu@1x8_RbDeC8D z?ioh9Wh;9$u{A#$)1YVI=St(%%Buns?7W)zr}M@7i5^HDL;v#em=Tq+suZ&xo5mPB S@wWbb`j??cuyTatnC(xa0I8Dz literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..d4f9fc081b8747ed521a8110364a07248cb09a97 GIT binary patch literal 3772 zcmds)iC2?X7QpWdiyw<(TSHs18UlgDYD@OSx@+y~=xD84XT%invF{)tK@165NJs+6 z7En;yQw7CQv@WAPE_HWm>rAUt#&$eyZKun$j_n8Y(c|0)?M%;{`3vT~^WFFEeed_y zOL%wLOD`>haHxhLkStoVMDpR4-6{YW00_VG%<^R`@3j2=5r7H!!OmqXpHyYLS6u^$ zd;|3jDLJNmh#|=U(bFM@m}Z_>~BRqK0T+nY<}^qR%}0l z`lTFGSw5sL$13#U7n*CzN#hR3&cyLJ)VuQYii+>=09?=bA=D)}1wbkQfnX63LPAqZ za&pR9ZO%{>3{{b#Eux_45_@N0}pdC7)3wFWlup9T? z4+r279D(C-5>CNcI1iWLDqMr>@IKsxLHG!6!>8~$d1wUKI)s76UO zDyqR5HB_Ue8XeW>sm4GxMygGsS|!!0s8&t2xF9Xn>Zn#vwFas+Qe6_&DXC6Hb!w{9 zP#vyUM|FCtGfXWEmN%bnKS5v))>a|pl+tE|Kf$ELakVFkiYEV&wni@3Jprr;K zHQ;Uy)L^8>Bx+Prqly~U)Tp6GEj8+>QBRF{7{*0;`Q?QfG`(0NPfXpcvhv3Tn_LJkWsd&;i}(3cau& z-QXC!g)VRr{(#qi1O9?ne+Rz8YySZRyz&qdj@LbjJc?HxN91HCQ4u|vO%{+PakPGB0d5?TR2FYK^XXH!r zE%|q8LdFOgBV>$7U_=5V5*U%d zhy+F?Fd~5w35-Z!L;@oc8Ij0{L`EbsB9Re^j7VfeA|nzRk;n)+Bjk*bGeXV?IV0qZ zkTXKg2stCuVR^`?q&mn>wBCUbowWxy{+?Y(~O7B8VgSMZ*fQTgdVYStz}xQ}vz!7oTn8GhKXE z^*&RbbtA{${852D;o=z7T_%ywos=lHUHTYa_LYEM+Y z-FU)%#eKE@ihF-U-J$emF4if4RpNDa)^vJ00(>mra{3w{cAcN_EH4$3QdXPS6|5;s zF$dNRG;;j#NS`?3&d?2UtG~6O&3h`qzvyn7<*ss6In0*z!bG#FhI2aIt{CUIoJwEH zKKuFFi}qt1Zp{}!m~7lMzarr?lewhETE4B+gI^rKdGgi^U(fBgyB!|8r=uaz)ZTLALe>wn4<;QG##xe5xcs8djr|SW(2S8A zcmkgcj}tGPIp@izr)RBCO?9sHZ1!2(tRJNE(Sh%_Ig_2qt_@=+=sx1X%=!IwZr`+l zM%yWqgL67u&KNHrwFY+W zKiScJ{PKy5CoaArbqgZ9Kr|NN;i|PexS^>+o;YG)I9lw+<8V#3daS|0;ZnZ^x0 z{-ahLF%&l}7gNv1ZRs__jI5QyV;hCZ=|c2rVG$o|;*);M$MF6a_^8yIS&mt41wLvn z+Da?)$_om%e|w3K=0iKVUf-UY-k+x8gn%$2e(Nl+c<+!P>eJ5^RtX_}iru+)y?2_d zZLYQ^Zb&A)C64%J=m+towu_aQom}@$x2JnrQD#|MNt#Yj%oP-6!UFHc!}gZF+j--k zc-bvpy7z3)g){wKyUe?@oSf}9uhguIS?qbX{ppIIoNq|?s6O*Y ze#*PWjgCfJgUyre&GzJQ{K^p@-bd7Mlz44mUC(O2FlT3$&^S2b>b%X~ubiB}iT$Q@ zb!`s>IvSt%K5tuU&$O&cF+W#4=h&(pDXnE|_m>^5I8t$B^PcLxExn$9`0Mx;_KTdW zzZSD|r+t@WXY0v|9otX(0`^u*V|#Pm&P@SskzVY{@TU9H9cA{-Hfvc)$)?g$v)f!( z>3;d`jB}kI`MTOWwsm$jbOpK{1GT>^J80%yPV{)ExxUh3FXi}EBgb*wjyiD!{#3FD zEj*kVwmdm%_V@T-eh@8CDcfJo%0DNUy$;d$>w{IIgQy09h*|OJI!I>xe`MSY?mz4- zmKWHrpgZKL(NkgD{5cU2g`Fine4|H_d*mLzfmNd=U>$1!qVUk5(2xj`C>RlTrvFY0 z7B74n-|GZY#^zx1<9X!%{rhZI)D~c7DHMK%=Szaaux}FTV|5WsKy9oZ^b33NFX|yM z3FiLPCv?5t{+mH3`dbEHw}e5-fu;GkXf#5#Yv{#1F%+Q8{H)j@d^0q0Zu+ z(R9Cq#aI6$v7X^D6=nd*HWlXrhqGY9(OC;APAe)#+s~u2HLyB|UnE9OA|#(hNk-!& z)*`}FUO3w8LDX10ITg!z{4T&}C@+G zeL$fd@=&CsnkYD(12&_Hi!jB<;?zB|%{XJ`{AXF5!QJA;bmz8gGt0g&-|suW-#Pc3 z^WB^KWo_G*1rn$M0nqC=ZlrHWo>T+C0DxfYrtGZT2fE*k0HQmnd9rdBEA-d5e*z%X zBi~hE(3HX~LW6#uXX_YE;o1AfRp=KYSL#rhJ|^Ced^7SioxxT?EfqMBuSPC2XevrU zl#M3z;}RP+28J3+S&07Y$a_jnR$Jrx1#_w8Lnn$Ne~;Feg{9^Eta*>K%gk2?OS zf9yKl>K@d!afF8>eH`qiTpqXElVs`NX+F$Q;g_E+lS{+%#^=km-l7k6c5cD$Ty9Pg zm!#toFLLYI6b+mC9y^O|d6SJV{9(6qWrx|Pt+pP}R+%cz=I%#V*+f=+nCkPLu=h=t zqPQ+@LVjU{&A2tlk^RfpaN9Xif5vg+rKUhYL5o7Qa6ww{fMhk$Hhy`MilqC7vgYW5|p;EuL z0oH*E)Ug^o-djsVA`!kSG8ImKh+!-CM+oEa`Ap<7n}lh|Vz%HpUHF_Wf&^GI86%GB zS||k*SYavTg8|Aw4>l-9O%Dtz8Zbfu=rF>9G5PQcU1lW#zV9AI`7V{e5&sTvo7Iie$Sh`%HMXYd&% zkPHie&}(c)ps)%KtigK-8)LPh7R!p4YSc@hLVyfAB(bUjZN6u|JN`x?aq>9{n2u`{ eenq?j4^fq%l88?bPzY^^M(9DTfD?$dFz^>m*!NKY literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..e6c891b2e7a23a1e833d2c803f8dc148fa2ca447 GIT binary patch literal 1632 zcmZux4NOy46h80uhexTR8zl=)eV`<=F=b3^{1^H0XK@%1r*jj#wzT}Tg|=>UC0iEf*k18zx^oLUv+TaybI^ z-mTOr%AtgoV4Pr;R;^H-`%%9F_l6M5wMfhu7r%@7D-qAv>dY2qv7jDt8e*wVVJQdE z7IdK>r&zDhshQ!#moR<_aiH8_GKY^qI@TXS%mQGp2!H}14HQL*Rh2qj4e^$TVj(n_ z3bAyE6@;D>@-wA^IRWsxT$5HBH5=fA@o7E0_`%hQ^&)O<>=;+{43{+%#1tirl1$rD zpph@p$mJUOQjL6BrlGvXSgg^S*#*iJHa#sZoy|}g-d3~uH72uKXJR+%l?G$E!Kg5+ zRSVgSvNAT0q?_10wMlKPLUK|Yin9qogj!=}$P(sD=1Zn0N?2kNiAf@6o@BZ)IFTIW zZ9y)p{c@0R3yQhH;KM7yTft4isQ<>8e`C>ok~=YdQt2I^bQ(4oJrWnOvax4Dgl`D! z5T>@$QhMglM7+%Ha66p|^`3fPT%v+YdyAXJHNVQms=h0=FYl=EX{@IAG_n_=hks}A^=5umZzzx}2 zbo>2>TQ+$&HEgz(>?=@OH=0*{TyR9$ZrO3ta<2Al?b$si_6{8C^ZeQD;___Q80TOk zK8{}7QG0Luh1w(C7kqwO`@WXWHdk-8pUGS*^AvlvKCRti+tW~QsjRH7sOmQ!}5= zDU4nD7f_-xWS}njo-QFK7L4zXmT@02@5@<6_Kiu zyeUHg9X&$%@YYJHacUeMKzd{a^w9&LC1QbC6hqTO+(9%w85vpYvSBS`K=$Mr#NJs$ zg~MTTDxwU0$PmM8sE-mx<9_m8ne=Ixj%d;sJjDy2@PCQec>duj@?Ze)ZHlW*n!43aH@ zIgkoenZm3G1{L7IQ%Qs}t4(I)9{(qVktl@>1yWQ^!Sh&`C>3CYtYi{3q?;LtM&T#4 T*Wnjr#khw86||wXz=?kVnT_#M literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..127f798f3666520c79b23c440e620895282224b6 GIT binary patch literal 1404 zcmZux4NO~A6h8O$hezpPo0J%E@BlF*;)V!a+z4AOW9otsV20@&tMt(V{i7|eEHG#I zZ_B8PC}Ts=YO(=B6i_phnL#E_jb_ss4OxgLniyl|g1)lLQqOHMPUF3~=bZ05=bdxz zZSO6sswx8&oB$aJ`jQgi+J4dx05bsG@qOiGl|L5$QUIV(Bj+fq+@5Fo{J=DT>@?yd zwN`@zQb-MeoZ)h_XfS^GgKZc3^AT&!NNikDK9AUg_+GQs?cwveYQz@ADyzZc0C_o@ zFo8>HGgw7_F8u-YuOS|F*j?`M>yU@}e?=@{2{Zu+$T=W{D2>flYYVe>h7ur@N6@>JlEa)!Lm7yVKwnjoSpB#UfO& zaFW1n#wHJPeRReZWiU?QD~3{|`{xSAED-9f4NwTnSI7*tAA z!L|9|)!^g7nE(3te|)jys^z$GwR$W;IFU@AZ4V z$sK(ifv(h3CB+$whp!xz8a_Es`GKP+T|LdmX=1gRsyjt*X;;&vZLGmQ-0*JoHQ%Ma z>w#}aKl+LfPWjFc&W>C?GH3Xp^h^4XbN5?E=iZ<1{Nl#Y?_D>&(=YjE&4ZNqDHot{ zjQ9F|K7X=v;&9U$kq_N}yFe2c%3R&5G4<8GVs587jg@pu9ZfdVq>EH9r5mK&XQUMA z#r;x(@w>*JokL9lQ=97rQ>(qDscGcKWhqHgp5ey>=i0~DOYwA=u4yhTNZD6rDL1jB zh#sJdiR`nsoBclzbPRci2KZ1Gy`YKvE%c}6^3bQPpY`%%Z}|Jh(p(K5v02p8>>`@& zp}PLMx$ajdN2G_pk+QB!8Iuda#rdhxH`~rO_VS&Fo@#$OrMU0WQ+toqwhdR$yv&ER zx3}Y7dVHEV{3nv=8vZ)7uqL7K4VOAB94ksH*cmn$)@>u*n7je|)ARbZFmfgY2@30k+2u15L z$_Q@)2iU;{`A`E^Xa)?;wq3Uxl-e*v`|C*$>ON1(%veY}1G?4<&@CnBS#!gi|1MKDKXgio_K<$ngt zsDf0;0b((@ZNRhF1^{a?4{?hwH*(Re_y|S31Q`Nq*o-n6?nBAy;BU9S*clU8grAU6 OVjKY@45IYFxxWB1mWrbQ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..6cafcb8313c29d5d0c60adb3f3e39fec07c15dca GIT binary patch literal 1208 zcmZuxeQXp(6o0e3x82)2+M;)j7Tau#O=v`{C)5TAcx^2a#cNtH)db4fTW(wK`>xU& zR1BpYcUL$}ZK!;;$!gSAOO)0ROfb+OF&YgR4W==T|L`x8n!PfZ^UYqP#5j|A@BM!7 z&3kVqJL}oL-2*Zl03MX4mKLSq=9e!4z zhZ!p-;to6AP$W@SB zC6}w@a}Nk~xt*^ZgJbD*LE4Kd06tz=HcrJmR~ENejE0gqqwPLp<8lxP5sJ2Y{PpYn z_4Q5RNPn!`uO*aKUA2mnec_i?rM*9%P=j&hnNU|a7753^3DvhoaR&lQ8w-ys zZE9SNy@F(+Cv5640Ump_l~&8ua&eWcFi|BJ$MnS-ogUVW<`b86I--lllz#WJeqG_kCmi=Yys~;tO zDt%#O`pos+Gv3d){Xn0HZGLy(%x9MmeSd58kHOoib8n@mwGm1(l*>|hRZ3;j=}dWS za#!@UD&-#eYn{`UTe-N(=^xtjwsw%N-rG(q_Rw;TmR+JvMwQp7+i9#Yjz4RZ_-^b? zt{;tN{jbH}^zRS%N26zMeQT5%;%R9j`{BWfrBV_-N$)x@&KkAXrYSf1tY(w#x6UGQl`$}G*APaB@T&4!J(ZUxX zi@a#Dah!lVSU>*^cXQ*@@D#YAu~37_`OPGs&$FtC+&I|~;d$(h2v*!*hqz#KP>iTx z^Y`$=J+=iLuxTkqG3!M;zUI;(}x{(Wjii{UR&;=Ss#4x549)~vM{brmO zxfc*IPd7${(7VRW$*~I9mjktodMyZ`pcZg4zLA{>+<36Bmu`T)dVq&aS-2H;(nehP VRtjwX6npRgGgw9$|3$?G-``1>PS5}V literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,44,45,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..5f4754268bf33dcd62f6d57751b5912ee5141369 GIT binary patch literal 1992 zcmZuy3rw5W6+XXT{1^w)mLF9~OH2~Fu#uLLg``QFltO8mDN6*Ug=H(a;Mjm4fDM?3 zdD+JHZyOuz5`zQS;8rS-CQE=O%hXH>&2wEJ={9XcX%wx^Hf2+nW&2Gp6+6G_+G^Ul zy65qobI&>VzxKTcUwrW(NTC~qATKB?l2`7!F$Dm#0HVP2hYpr}_T9U801|d0<~vyO zM6TvnrKbVJ=!eQGt)d=k1VR7_Z&$08it4ksb-U5O5A8fP0&DL}y3qEay;-d_ni4C8 zR}Pe@%o)zPPmXyqGIYS>);; z0{F5jnWLBZQ|Kxo@GjtH%aBvOyWxY&r=~pj+;98l?eo^#<(zig8ADL#)(>{E7Q4;b?re8- zT4*l0oVi;xMc58`XSQND5zf3E(q3pkTlY7XoBr$j!N90<#Oro@a11+x&LLc3UM5V^ z>{1%zcDh-1oz-LY^`(y#6>hxp%17l~?d5ZX4z%~ZQmYTu zo+|sT>yqcD?|0!}d_YG}xXumDjoql6SDZQUKH1i|_w|`+WExefQXtgRVLC z5TV>e;3LpRvu>Bmy{>WQm4;Cz9sAyw+nJ=;rll>6%5&s3wS{EYm5@h|kacR3c7YUd z8451vr`&pO;D=mF_3!H(yM`NlDzl+S)uC@~Xc+ta8kfdNM(Jtalx6y>QZxyXW#;?> zm-W#c5zOq^LrRHwChJYzJ@1`>b(kFv(6LN%o=N(9?BC3_;j10jopfZv?TKtK)S8q{ z$~=;_hh&*ZzW2zy{pj&A?#bV9nK!wO#}}ekE}jTan%}H*(zc)c*m8J%p=aO7b8S`T zP}!`Xj^%y%1e3(gE$w8s9o_gH>vq=I(-3G1H2aOgmH~_38t7AWXd0S}H9KcX`k!i| zy_4;4xIgvS`aV2MUq02xi7oFsCp#m(5zBb%NJq#z*z4`>@Au&tnE#~tw&PRVc$?qs z=m~WDJKc2GGB6&ehwW#N+JkJs@_K7fIiR21T)CCVLYqdO<>Y_7IW-e;&JB*)$NG;A z($icS<2l@Wxb}#)Chxjsw)^78+#??v{SLov(B{#2H6AU^l`Q-4JW`fYnDWr!=*t7- z>4`exU(9}QZ@c%dlO720Kgw`;EEGEC-|yXTJ7BNvEv+)YV0`-LrQ=mWQ~62L*|sxn zXWFN_j~|`({Byv?72B`U?1?@c&I$XZVmM0%O|*pQf*p*f#;f+J z9VUCb&1!0DYH4mZyUnf+_e<~ATpInv7alqG+Guz%9Evz*`+jCRZKheLlVzRe{*GRI zGtHGQpToW#E+z^8WBkPgT{*A*x+3MNe*q<4LV24;7|2AZ?{zlqtsg;!#zA9SzICzr4kFZBdl!)td&|cLAkc`%< zF8mfQ`j#$+RM_)Xj3kb$pdR#KfFD2wXrT!-V1ydPG@wL80XnDxHAXaIOa*)&iV;`E z;}nR!gck3q!3Z6CACKo0@D;GHRFqPbPk{)w#QPQ@F5q{_?+IlAZtj;W=fD0AGDIOB z%S-+g_#N|;&sTu62q&LEPAkXw_vil*A1#G+$OcNIFzSHD4v?@a@1cxJgAuXStoUHX zy%Zu8$RG{#KZ14mn^}P8$Vc&m&+s5h{1j literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,44.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.41,43,44.otf new file mode 100644 index 0000000000000000000000000000000000000000..8fe4d63eb220a9a18c2b0266421e7cec6e477efa GIT binary patch literal 1632 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 H!hGy61+7fe literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..d4f9fc081b8747ed521a8110364a07248cb09a97 GIT binary patch literal 3772 zcmds)iC2?X7QpWdiyw<(TSHs18UlgDYD@OSx@+y~=xD84XT%invF{)tK@165NJs+6 z7En;yQw7CQv@WAPE_HWm>rAUt#&$eyZKun$j_n8Y(c|0)?M%;{`3vT~^WFFEeed_y zOL%wLOD`>haHxhLkStoVMDpR4-6{YW00_VG%<^R`@3j2=5r7H!!OmqXpHyYLS6u^$ zd;|3jDLJNmh#|=U(bFM@m}Z_>~BRqK0T+nY<}^qR%}0l z`lTFGSw5sL$13#U7n*CzN#hR3&cyLJ)VuQYii+>=09?=bA=D)}1wbkQfnX63LPAqZ za&pR9ZO%{>3{{b#Eux_45_@N0}pdC7)3wFWlup9T? z4+r279D(C-5>CNcI1iWLDqMr>@IKsxLHG!6!>8~$d1wUKI)s76UO zDyqR5HB_Ue8XeW>sm4GxMygGsS|!!0s8&t2xF9Xn>Zn#vwFas+Qe6_&DXC6Hb!w{9 zP#vyUM|FCtGfXWEmN%bnKS5v))>a|pl+tE|Kf$ELakVFkiYEV&wni@3Jprr;K zHQ;Uy)L^8>Bx+Prqly~U)Tp6GEj8+>QBRF{7{*0;`Q?QfG`(0NPfXpcvhv3Tn_LJkWsd&;i}(3cau& z-QXC!g)VRr{(#qi1O9?ne+Rz8YySZRyz&qdj@LbjJc?HxN91HCQ4u|vO%{+PakPGB0d5?TR2FYK^XXH!r zE%|q8LdFOgBV>$7U_=5V5*U%d zhy+F?Fd~5w35-Z!L;@oc8Ij0{L`EbsB9Re^j7VfeA|nzRk;n)+Bjk*bGeXV?IV0qZ zkTXKg2stCuVR^`?q&mn>wBCUbowWxy{+?Y(~O7B8VgSMZ*fQTgdVYStz}xQ}vz!7oTn8GhKXE z^*&RbbtA{${852D;o=z7T_%ywos=lHUHTYa_LYEM+Y z-FU)%#eKE@ihF-U-J$emF4if4RpNDa)^vJ00(>mra{3w{cAcN_EH4$3QdXPS6|5;s zF$dNRG;;j#NS`?3&d?2UtG~6O&3h`qzvyn7<*ss6In0*z!bG#FhI2aIt{CUIoJwEH zKKuFFi}qt1Zp{}!m~7lMzarr?lewhETE4B+gI^rKdGgi^U(fBgyB!|8r=uaz)ZTLALe>wn4<;QG##xe5xcs8djr|SW(2S8A zcmkgcj}tGPIp@izr)RBCO?9sHZ1!2(tRJNE(Sh%_Ig_2qt_@=+=sx1X%=!IwZr`+l zM%yWqgL67u&KNHrwFY+W zKiScJ{PKy5CoaArbqgZ9Kr|NN;i|PexS^>+o;YG)I9lw+<8V#3daS|0;ZnZ^x0 z{-ahLF%&l}7gNv1ZRs__jI5QyV;hCZ=|c2rVG$o|;*);M$MF6a_^8yIS&mt41wLvn z+Da?)$_om%e|w3K=0iKVUf-UY-k+x8gn%$2e(Nl+c<+!P>eJ5^RtX_}iru+)y?2_d zZLYQ^Zb&A)C64%J=m+towu_aQom}@$x2JnrQD#|MNt#Yj%oP-6!UFHc!}gZF+j--k zc-bvpy7z3)g){wKyUe?@oSf}9uhguIS?qbX{ppIIoNq|?s6O*Y ze#*PWjgCfJgUyre&GzJQ{K^p@-bd7Mlz44mUC(O2FlT3$&^S2b>b%X~ubiB}iT$Q@ zb!`s>IvSt%K5tuU&$O&cF+W#4=h&(pDXnE|_m>^5I8t$B^PcLxExn$9`0Mx;_KTdW zzZSD|r+t@WXY0v|9otX(0`^u*V|#Pm&P@SskzVY{@TU9H9cA{-Hfvc)$)?g$v)f!( z>3;d`jB}kI`MTOWwsm$jbOpK{1GT>^J80%yPV{)ExxUh3FXi}EBgb*wjyiD!{#3FD zEj*kVwmdm%_V@T-eh@8CDcfJo%0DNUy$;d$>w{IIgQy09h*|OJI!I>xe`MSY?mz4- zmKWHrpgZKL(NkgD{5cU2g`Fine4|H_d*mLzfmNd=U>$1!qVUk5(2xj`C>RlTrvFY0 z7B74n-|GZY#^zx1<9X!%{rhZI)D~c7DHMK%=Szaaux}FTV|5WsKy9oZ^b33NFX|yM z3FiLPCv?5t{+mH3`dbEHw}e5-fu;GkXf#5#Yv{#1F%+Q8{H)j@d^0q0Zu+ z(R9Cq#aI6$v7X^D6=nd*HWlXrhqGY9(OC;APAe)#+s~u2HLyB|UnE9OA|#(hNk-!& z)*`}FUO3w8LDX10ITg!z{4T&}C@r zl1TVwKVX4v62OqGtj;75V^c_VVzo7>@uSnKRY%Rl_>nr(b{uQdzQq?y&s&@^)A2w5 z^xnDWoZq?ko^$WHZ{DwD`}PvhLK`H2p|H5v@b|*stpR{(0JZM!Z6#$_|MrhB0O(Hi z1xm^`vW_=){2Cx>J>tsUPFp=xP!XI@N4%}ZZmW9s(|>)6dw-8utU<@(YZ|nZXvDcS zPH%JS;slJPjsZ}qPFr(56m7#Pn8Kl{vpMaWq|A?TeE@NHz02dBKMpL$uR?6V6aYoI z6B1QGQIw{t(dleatWB{ri0z_cm8w`}LTp*0yhN9fbpi(b{spN^$^>}o+MigN z1%*%y_rm>90;RA6%Ao>wf(@#GKrJ|-9z4(lEzk;&LOXOpFZiJ!1|bYbU=)tQ37CK< z;Ur%A44j1-cm~eH^Y90lrIIKeVF*h&!V`gr#6--bfG|eFFoa{?L}KHE2__ zwb_cuQN(I(syjND7nOUWlJ)3|QTcFGBb|v}zYu*p`qOCA|Ig9i%_UE2ucS=sbXP*U zMfiCp&!)$v{?bxVD<5Sq%v0M{%T$@ua~b+TU%=;E-Wlu+b!UwhTXQb%eCy{@?JMVH zI=rvn)7yAZPA{*KbzOGf1Kka$>ms$TvD&lc@A_X3UJku?;<-Q5(KG(@hiAs$t~_UZ z=7B%SoO{a?`_BFLLf0R^9QkMWSH7o*{4+I&Whx-6LNe^9eF48eu-rYhv*DPXj;;Gf z(5J*!&#l#yVD+zRI^^|x%jC>zd3lYT@uFNPW!oggr#dFTO-0LN@^$?Svr_(BGqP&Rv{~LEtEci$)_pbbdAM`L zHxi~}dGZVTlrLic(Z4qGYU}HLbmZ|sFtW;1+iY*Ni*o*EIlo!93{;=%IdXbjDtJfA zyDa6Lo{e6-aOT9sfs=dt=&pw!>Zn*@4c;?aw14-3vGVC*IwpRzQJ*5s%$fDvk(@Q1 zg3o)XA>0^l8ulLDH`p=U8Sb{VIvScv9p-5{>$5%4_K9CU8Mqqk>VETC`jxZYlDgxi zzKMg8_DIL^meJO+&Y|{!_Wu45_Q7)>HGR^1wd?r);RC&g!fnF`1N5WUK_Bc3`ucrG zdXDbz`eXw@QW&FQ1x<^vw*7_l);HHbhTK<@#Vndqr)vbC39X z$8_6;zep?J^bYq9cMWv~9RrS_la|V^hwwdm{rVLAPLv-a*iCKE?@GJl-$1D^p$A&? zo^Dh02bKSQ5HjZb6Is=75GH_1@!}u&5~cjZf7DH>!9vF}U=5RJQD2N#CZfJQUfCP# zvlUdyvs4JFLPuSruEE#9#x6eS3U;KaMsOfux#4Gs+_+{>e4as?Gse%MQX-+1j#`VFheR--PQyVBqXogcL H+hO{D(dtko literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..28d5cb4955433aedeeaa403e83d43dee5cecb39d GIT binary patch literal 2328 zcmd^BeNa@_6+drbm&dZQ5?Nw2=z`EnrMmCEeQ#OgN01MziNQg!T3h25*0Um?y9+J| ztyN)Rmyab96jpG-ZD$k>)~Gc#qti%@G0C)(OxtP8BxaIHGSf~bO=x$?Go|M(HgP)r zuYdOL-1B|!Ip^Lt_qQe6x0iqx4nrIm3yO=4eHZ`y2>@IMP$z8MTC(kf7ydF1z@8#o zOUbrXeAOFemjDt>r0*@Sw$;H|)f?nrNP30CZmW3d{m}lX>{}$4X02EtH zD z&QjA8a0#x!HMkBp;8!pSuQFOjj~wzSpczG!(1LkrMb3mAha8WbfSegQ5jhDt3vzkL zS&=s(PiuJO1?0`hi^xmJTaeE~-im?=1r7z;Qb56sf{22If(3;<6s%}Ap_xN7k7mkf zMze@!3C$KX=b_n(q6tL~MIJ=~MJh-{Q9{vzVjhZCluRgbDDfx>D49{BdL@)BDCMDK zEvT()a_&cm+qk?u$H<#ZyfMF`_J?-kwkDU`UhOh&swuB^*3~*~ZhOT_V}4bYu~Z3n z8B6UhyR(subJt7v>n((0y6yxvQJbWjm#m+k^2mZzL)xPYA6vBe@$@B2jTxECva-MN z&E+}YT9Nzhm8(n~FPKHil4o80#G1A1)<2oQp`fs+_^GXBJ9cMjv$V&Va=waFRU z425LUb{X1b+GJ;VCOa&9!;!+1uY~1+uqHAQzJDwHc6f6*;Xi%s*S^GY?Y*RNo$g*h zH;=y3#L3hcHB2o4weoFtz$~*}rBkI`o=G!wb$0oDi;i_43$!m8DlW{tv*)c{k;+%E z%WVI_9#==hkL1*y4q4Y`_ibsfzfdz;SsSdpwDb4=+uiR3{t$Zkw`_RAe|_M}$lH6b z+OBQ+jVw6V|McM1U)*YY^V7ky$ftKBX%WpZJ03W9bo@aoRu0Pd4L2tvId5H&Rp%}1uLVTo{R1 ze;3JqCz5$#GJNOOMCeTG*#n(y+xNeBbob)I?(Ym0HJ7&rcV0fuMx`%TQ7`%#yDhJB^HTG*=4*$}9lmg4y!-P$f27p=8ta>Ar(fro_e{sw$s5h5M{Wdy-jhd;4-NRo z4hGo*i=lgeuOr~-@OTfk9rH9a9BgcC?P~S6bnW={{@cUv20}xpo*xc97YdGcTyFol z=fzgm*V*awb+-1j9Pu`?k+S>OsqPNHAxU`%V^hAl&i<@^&EJ7h-d1|3vo9W2_@DOv z^BG8+?TP1AFOnJuD#c2#?-Y|eC;k6Y4bj&m}4PO8s<3KV=04l8}PNPmzsp4swaz9^<{K5@I1ReQMG?zo6_trDBv$IN8 z((>u23=KR(cg4gf()u*g=VTQmlQt*EJ!Fr6NLE8CWIc${#Oz35R7-Fq!LzWBq#AG& zkd=a+psE3?2(+BAgES|_?2q|5f;t7=sTE}>;;F>7#MeMPL7`G#JlRzQf<;R0N=GsN zb-xPQLo8O|%2%g!R`7rq5uclJB+-~XrC|Jj8A^67EP-5Ls%-8WU@0>V%BFZ2x83C? z+gx7yQ$Up|GD}lORWk(OJkeOCF`f?_V$~?!%qPno_>kyb_?WC3TEh^84-oahxqkuC CpimAAV*{LZ=eo^$WH zH|Lhlom&bU)*u1SqLLEl_pY)O04D(RxT&*B=iIpPT|JO=jBT~0bH+%OAI@WJDPw){ zk}7X476^NJd@}2^{625_n>T*G!E0}_uKC%}`bSOJcPsCE!EyCpCxJVR}4?HzP`3580y{&iT$^+?&J_aF|UN#1VIoi<@HrnjRqPU zOG9j-5L;x5ElP;>H|u@u2}AZ_OE}!a?MZ`y*KYOd&@I1R=$e`sYfQV^HK1>7bstP& zSA6(HBq13o=!G=&K|f?*00vcBOB~oQlc|$6x z8mVql^GPir%|)6>nnapRnnD`yS0l|`R8!j+c#`}fXYP_br{r=;PEUEw6F%ph#$d=- z6?9IkUQ!dNtqFKTzVgvdPi3WZwlO{Eob3zx0?XOhbE$l*8wyd(mz-oxwx!s6rKa`n z)3;x`BjcX_12P8=8a!mEGb?-8@SG9%=H}fua@75!$GAjER#eTMUodvu_z4pyP4*NP z6;COdK5O1E+b~<|f2Ay&)0UcL%Q9HDEj1A7%8BS3BGKX(&qeg@5li%FFH&D-M-G(JY#*`k?M|$nq3vg%RUQVXua0< z`M$S4u||%D&ul-r=gQ(!-qSNa*5$yYS5};Qh98qK*D%|6l@xp@BQzWu8YEZbyV_t>Lr7YrOucsZsfpdM*fmJIS&`(S?Nd|7tiY5i7A9Bxl?H4vT7G@3AgYY zq__lQMu5p?Nw6fQm`r9~X57hNaVKO{1N@rzu7J?tY+ z-7gvc-oKFH!GphB~AJNU6wbtKwrtAGwOUPE&Bhwdw*FP4-HWe9=e@Xct^fM7^X@(8{Lb?{=RD^; z?|Yt-b?ZuC#~zsA^cEL8k9%9s0yqblZmujXDaSN8fVfh&O)4p0DAs+segLpU8E@WF zU)6{WhF-ur!nm}?S5^J-tzT~e<`84Gh7FTOt)KDyZyC?6sc&g@{A{e?@oRv=USHMP z2(RuM{rp-Rs_K2#xS2n(%5%`(=x=Tre+weVcQJNy2*ArLVK%~GFj%X1)YrG^T0t}! z(T#>^r7>D*icU3aDGt-DlQ{mS{`z@L1C1Xln|J*cB&l zK^)?dfJ7uC1yhjDiO;}nWFZ?ln1=-rAj6FUEWvW#L@`$3DU_fL>rsIXs6-X2L8wJN z8qtiMXv1#2h?lV+9SGtOj-VT_;~08z5^v*OoaUqla2A8OfQ$H4&xZsONg|mPQprtu zluv?-1c3yR1c?Nh1cd~Z1UCtJB;=FmB9YgKBuXU8Bq}7TB)Un=BQc*O7fAw1>{230 zCP^VlCCN=v9!dEmyGRyD7D?uaGRX?bD#>n=^GMDo#YKuhib#q?3U5duMJ2^eN**cs zq`F8INEJzyNR>(D{iCMhEU$ZZ;lZ_MS$p?DC125Mj&K7S^a3m%rPfD3QB{ePmk*U)% zrq7r;Yqm2pYtG#4M<2_{eSF^hCl)Mp38Ew`syi>gVA0|wOP4M86ncwR6t6DLvS-PCl zRTtKLtx17p@9aAN(UtvQ-R`;5ez)_?tHHsVqne>hGln!gXY1?=2D>r>{gq9u)|+dB$+nnLt^ z^Gmeb-`3Q0;`SGj^oX_B))#tjZ{LGZHto1}Kkd>`B=`EDX6$z_)z)j4{@l|IcMt#4 zy|1UUr`s0I)-G|_j$m2>|Kwba*n7i$XZoh(#lOK|8P?6av(N0&}wOR@H|KQwU@HkRilv&tVufjN%@| zm;~#r0Yh^pUGe3DJopSEzpC)i5NN`S!Ng?AJ?NY^6;aR6>Ir?4CZ)V zpU!wfHzJAAgl>AsZhlC&AQf{T%(2Go#7))DZB@l4Y-OzhE!>dH;NzCN19jYd19+NI zfah$BjSJke^;?5e(LJ$DWoc(A!we@&Ge5e$P~SN`F|K3iHy+cB7@x@A!+IgV9`+HV T@i+B*>0e0qU}q0W6Jvh@RIH|x literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44,45,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..d944ebf9281785cfc2a72d8be86c095bcb1005df GIT binary patch literal 2688 zcmd@WX;f6_^}Ydy$AI8A)VSb?V5FkX`Ucz)#3eBr3`Rq%j4*x!GOPo#Dgwjo%&-Ip zMsScxP86(GfoRP!r;2-XVwSe2jmOxmZI9`(#`X<)r1ZWao_KotuRr^J=ezs6_kPPe z_ilUTm2Dt`dI$nZYI?fF|4C;H01N>LU)#8S+m5gF-{=6s9-+*&ZO3wX!EZ9p1JF&# zXXofO#qgHk8tMy>&(&!)xfehG_H%&HsmL=r6ij_0yn^=G$j9mQhRPWagU_OV695&h z*Hjk6#_gzrL0rN@jb1AZo%biS{{s2u;-WIc#Bq?L|GUUb0MK?LehI+>peRb1Tdvnv z@ze@`6!nagPWavRv5g^qbJV>tX1d=# z4K|@G+)AOj_+VFj#)b&v|_uo+&2ZIA(( zunV$a4`?742;_qvilGcDpbBc?Ff@P>%wU5SXoU_q3f<5HUg(E6;UsSQ44i{uxB!>n zGW;4w;Rf8Mrcl#~jL3nnUk`tAJs4yWFQ87fNCaNT&N+yhyFfzi(38Ns4k}#Mr zLl`w-k_eMb)Y8#V>k(al%iRBraXHTq=_*lqyD@l)Pf)s?}@Ou1i^;nzkYRg%@AmnU%dr zv`7^Bzm8bZ0(259S|~yg$AfrLe{R?BY}Xz4UBCCfbC>p=v0dsM?)@lxL~~*5`<$Y5?HdP2-o9#l z?@`y^n;%=xw%LYtog8K71TGG$X{+64v(GLa+*8t{rTt63SBb;@3&$3ViDUokx<)SX zzz%NSer~poi@w68vI{h<^ylmxw)F)zD)$cu%qzM|T%@k-2&pZqDkr~^w520wz!;OpI9c2?f9OeXr>NQ*@7c!V|vhcC<>yD-_YgY&DkLTVMhyTt0Px0-p zTeWvAbl(ZPqi=p$exKSi;-N^$M z+W52A8nfo4IW~1~sLrYL>>6sP{ml2v#o_GmSdv(AH1_!>mDO;hq@%o}qTS#=*xK0M z)X}V|EhwqTC`cOOV!p`pHT2iKY5&q;Z2sUPedAm+8`5~q(toJ0p|A0HRd=nYsjb1; z(9+_<**fxR#b@R(jmN9o>&!e~<5>BHk7c32$N7VA-y+uG6iMwMIJTGStxy_Ada zEbLy-N>N7Pu9c(*6Z_i8J*`osaQ{a)gGYipbjEp%%K|0uoQUXSNk`xfUG<5p9C zLuO9hX2a@VWggFQSMEMrd9nIJ^@W;K^{0;xIKFMQu^FaYwDn9gPRj{Xzxjmwa`o}v z%Px<}-O%3MX*+SyL#L|6jy$K%r88HWYK%>l<>dz}D(dWYwp#nnYkAjuK6QD!kGDAmkpEI7$8g!l!4zn{_NC5~$!XRNtxIhp*>F>vnQ_|LNz;c`d>60;d z_+TwHF)_hMMJ@#=KZNiS-W3%bhS8&upQHs4iQFU|^o%_C89D@JLfj8F!hoD$fiJ=m z&%j>Tk5nNTusO&8EtdasD8NRb6m}w4iZ*!xy$st2X&?^)?+K}yh((B3K`^!#e15?w z7w|jbb4Q#Sz?1J01rWi5fGv;tSI6({=}JX99ak#)4UCCneBbn61|MAnF^~vUfyPh> zG)BgO(RdAI(3Tlc_Vhmp#>{w{#ub6P7hqGAj*tqpK)i;+9C#1Yk(z}#25}s&oA4FF bTkti)+wfrI> zK45{3@=%npamIilv0#%i)1*QZleE(&>0{bjYn!C`(V0$~(%vQ4l%BgJjnnDB{Oq~& zo%i>h^PTUT@7$t2dx}5@#~}`k*1|&L?=z-o0GI~QFb_OlRPtf)FD?LP5OqyOCEGa1 zPxih9kgx^ivV%@r4Vle`{{ZK{in3IRiWT$PtLV?5oK@-cHmrI* zt_|(;0Msg{t)T`A9!C>Q;?P#xoOW$O`XA9hfO1ET%i~=<3mmTBfU*$)eG70V#M3}g zl(xLi>1kGzJ(Uz4^h)dz-HIM*_kOa#h8CJq-NQFCK9ju2;$c9a@8MXoo0+?Yt+z0oA6$;@& zcm#@|81_Ob?1TMagK{8H1x}~|57a{=G{e)-0`1TRe&~Td2*W8DhBI&u#^F3%z)erV zC76Mi;R^f^egtz=0;MM`;RsIzA`*$1iG}16)kt|kM zO{4n|sq`8*9n3LuCKG4OD|da@ZY*i^cL|)*CluZp_NQ^R7)f zcW>Tu&(>`wmg5CcGFx)D-@D_!oxASO+ilG+D17*lC!WmGW$BiGUD%*A;vyS#nL0!p zb<5q6h3tsZ8Ikh`uSS%U5v@EGxiuSkKk`r{;lFLnSGL3n-OZ#4z5ZrMzYMQt;#^7$ z8?LVgjd~%wV3FEGuc6bY7g7y@?tssi))s6Fbz}?|=4W2p|K7LcsyDAFO!!ETr>pLm zl2Tf!=-chSM>}dSR*zM=Myf8A{>uMG@J8s@=U)9e6PfZ~IXN@>e%WQ)%a8s{;oZBQ zJ97C4v+Y0qWaw`lpZZ?x_s>+GRH%SLhZJaHd;z~dkmjD;Uwg*RL^ppf8j_+L7d9D4 zu;Q7@R%OfK5+%JtNvl*+uPRn~gH1L)C9jqH9+s2Ke{;BN`%rC&9QB+a&927U+R;zm zmQ!Wz8D=8%eCxy)p%`UExn+25PR@C6MxiIoJC(hPW-{kO^{2fbhuemHLt!SGt-NMP z`fK!`hPQ{_YJR7i8GAMm99!?HYOvSYB_(I4lGC8%^;TT&JautY&i$pFeM8Q?I2XA# zJ9TdS=!L`GO#64f-MVjWe(;;a1x*K!j+9OhFj49AZH6RyX2D|MPi5ZKCi=W5YQuHm z`T_6Yk-pY}ws427*-=|x?66EL86O^sw2Xi6eBh&Cd&j%4FmGP!kTtD8?jAoj)-u+5 zwsE+5q^-ZDx22~igkRs~Kh*!J>!bFwO#?@}PK1vS91Ac{-vUFhJLv22o$4I)g7lhj+`y-`#kAa;$r%f3$P7=X5_aA(tA0`&#x@RX7hx@3c-IpZ$fr z?p^Od*FbxJd(hGA2s#mJqswnd!h51VhR{@S=JbK&9sdAIa~(C%oc-c)mHxKu zUyniRVoy9re;>s-P+xWg&2>tBzyGh{%NnRORt>CU;vAObTFf%0xi?nb+iR2$bmANp z!d9WD=Bau347eBta5@;uCRxD#}Yd4a-ql;^S`9$KS?lAO*6%@X^Nf1RIeHTag3@paQvS@M04y z20ON?I&fgaa>J7-xzXoP%+6w)GsW_t)s>J-L8?Q#1LCm_s`q6F=8n`FqhIY; zk6MWNs#Lvk>dw9#R^;<>SaIDLES^^T`~Ltnx(+g63s4T5w;C9XjDXQp3+1(Yyr^4> zi$4UInaVRb^q4gbX}A+LQ!B=!@XL$kqC;*4j%)B|#BagJh_yI_!sdMvaWyt)_%~Ro BPbB~V literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..f7727d4fd8205b2fafd02b2c5ce2ce116b8af18b GIT binary patch literal 2336 zcmd^BeQ*=k5#Q67&$2)`SPn4(gs~GGT+p3PCyNA#;|~f6abj=+Atk7`SYiAr$woGI zLov2&Nw($S7;Ir98?`gU5K{uw2^}&G4k5HmJIS=2c04Jabec}5)1e8iWRBF`lS4y0 z{jYy^Z{FMe?e5#R``+nRCEK=@fEEsd5{w1K#m2V4jrRfIJb+rc@wt+%zhC&L8vyKS z(z!~uuHmbGT6PW~DVOl>@@jh>e5SlZ_B6s?r^8C|)VHizCLv?kNEUk^}A-->Uo;NCK?p&SO zsE)Vkr)M60Anr?rjTDNCS3?pcLki3TJ*2`yNQZ~uVOR#4kPRzg6|4ph1hB$dSO-r+ z0j04Co`Di5g)-OKY3BQGFtL0&}OihLgOHZ+^i%%Pb=n$awv*@9*f%~mw$q1lFl2?Y)X9tGM_ zK*557h=LV`JQQqbF`s&o@3-qCf=A|QTuI&ach&?iyq2Y{P2>c%Z$r2S7c>B z^61K($5!QjWAz#n$D0L&ef)`a>o+`^|5QO?QSsByJYV`^mNrW}|9_?BS|bHn zuFXu$E41@n(V6V1BNB zLzAb{60>1?A*ki|vJ+;RZ3>+t_54h_A=nl4`!f!A9}aaa9V#x&yteD39kI#}E=g?v z{vLN{!*`^#?M_M8?(lEvs6SIPT3H*eJh%Oqfver0gnkwI(a+iFMBviEg^`bUU$jqd z`I%&PZTQ~)i$A>5e&g2QUpqecpM5QG!8sr?K}ivkpqcdt1A$-4VrVFw#u^`*s- z5??X1(tzE2UU#-hx%;+COZG?^PAUC8sUWu89y5I_wm8=JbWC6I>wTST2kS%F>i#aa z)Hc=EkKDQ*OOI)W+40aDZR1~U#Y$o6uHoIOSk6ZmB*kg#dZ|oOpUyc|^Lg)Q{f7tr zgZ*qgTYA@!@|XDE4c7-hZ23tSJ31EZ9$n_H^g0?GqLi~<%JEA1y?ZYDj-DBb*?tkr z{v?)pW-5B^%0%R3>#2QRZ2QYEwe4J7*!|6+qUQ3}@b>dZ*tq!R8mdJuuQTNA^!g68ANDph>~Cyr4Ymeaf-k(k_v-L(Ly@85uMbCFi-boz&v*R5`&KLK z@9OgVyIOl%4*43{SlQi6ly_&qkRpEs6C>-u%l23FPy7uS^)zXqCHw3_ng3?@Kc0p3 z*&Y?Ic#EJC6tb4Sywi;Q?f$=}duQ-(oX#_uIu%??Xh+qLCrRm@CgnilLVm9YLpsvibA2HW%B*}i}DMfDx$WL4@Gl($n(t&%Q`Y+*bOw}*6d xSK;Gf|+O(p;U literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..7e564d5d0702b63e2fb21c5d6df37bde5e7a45af GIT binary patch literal 2092 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 Ap#T5? literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,44.otf new file mode 100644 index 0000000000000000000000000000000000000000..106c55abc738fe07439482046b1904e5dd6fdd35 GIT binary patch literal 1616 zcmZuxdrVVT82|3=gG*aQH%bf&UJ)|MoMP4LoKeyG*cOEVE^KZ}2bUJ?1KNV%K#|f? z`hY?^oZmEGhxuy|HNlPW79L@MiF(VAOwo)W5#yUde4~uS|B^E1QNJj2?~+qkQyf5a9`d z115#G8;?ucbxh{BadB5)d_;V_F(sj0VpzCJdp!%b&*SMvowMX|1emG?N?0)-i z_6N>WEv^A=D@V9F(#yeK%IS8w-0`Nqou!8vD)j8*<#K6g{`dm9##8vV*2*p1oy{c_ za`9R&?mV}Fou_8g-e705%`dYt1>fv;tZFayYO2i#G*!mR($cQ`m)SU0e39=G;R zrJ}e_ZbE);m`%Mgz>$3`)^OW7QD5pY!-J-K{ZbIrvSOc|r(QrB>)6l zn62_`>Dah8zq&KG-$#X%j~C0O?7;X+`OPV`?#^CdpP??EwzDGZrwu*(0<{6_k;;y$&bpS`rrO3vFZSla z@5_I5+_fFq>#KGg@YneExvBjVAonzQoQ=+d^=(eS^=M@q(`@WX&U=oNbCcJoqWyBaU29H1yo&jyN07!{gAQnkUl7Bt;n*M3& zs`VRT9i)RQl7q+FYl+FpNj@vGbnJW+!#1ps5JuzoamXV!3Dc29Y{3({@CjQ4v5-8q zMjX~PPy$9UgA#T@AzB8oz!Jy;1~gCxI#7cNUO{HUHAP|n5?BOj;W|h@5?Zl1OK@HW zLZERLV&`=gUpb`X20oeEsSG*5oG?aq&+kZugTNT!HhGAD3;(C_5haia3xUw7Ee4=4 z3pUKbdk70-wxAY?ijOCr5^qyDWLP1ISrusWHS^W+F9(U8k4eA`93${E;w89;ssxod V{DOc2Xhk$YH(~`GN34bZzX0Lc^Hl%< literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..ba37625a1bf85359bccae5a4ffd4607cad333e98 GIT binary patch literal 1608 zcmZuxeN0nV6hH5^eLPAP-6&ab>JuT6jVQ8Nqw@>-@MBR7h|{?#9W5;%rO*~ANH?cI zziAOfpn?VK9|{bo=yWb>lsR;oEt+lFLY#}swq(oVl=iGD8 zxi9x-Z{C~@QrHb5;L@|QxcFPnBLFZ2AX>d1v3zG#CxR z*;J6DgPbV%f>@X?6V392$LXAqvWS@gAB;`u5txTp#@9&rRnen-;d6Y(bYLh-93h>u zDNmzVq){j|ip3hml5~A}jiE@RHF5I_lDO2AlvFNFrGH1w<<=NYYMqf=S5}}mlW6ERmh)esm@ z3<%Z$pV59PAhZP-elYOpa^O~AeIVk$KK5TZ zV?$%bKv_?*-dB8L>(|aJ?%UpP{GWWu1_qty+D>)f%0I0TZO6@LYtPi4*>!C9z=1yZgJvh6W4+2c z1{?9S_gW9zdfU&}9_l{t^;z5Zv~;#Pd#inH`eM1e$fNaYZD#APhI(^lWp!1R#bt5U zxwd>-bfxQiufOx){x1JMzpuwO)cB$Kq=j|Z?GA_C(p0y{TE+5tkIrG;Hm5uaZxb~! zB}X6M+Zny=PoN~D$Ut4<@!dp!m;d)hhz&J~Q|XfkML-i4uiq$@{Ny7!B8QP2AuRMr zUJGXp$4v?f=*VHpi?>!rjZtIp5K_Y$&_)Y@mNFtn5=GNuTtRAjI?^&$XTmB-gUpFN zh`h6s3WY*sS43&}k-@-5td9~$;`&&`6E+P~5lz^lXL#{5wgh4zVKRmZ^BO1zJs3d& zJE0J*GBCkH$N@EIpb|Oxd8irGcn**b znWT2o5jJr#bm3{gGGrkfOEfuY(pfrAk}q>|iZO3^gbtE7@qY%1mclGZ2C7tPDgzdG z#(}#M4`ostO~^g@_hPJ!*ep&NR!zZ+n3q&4nyi@Eq#DxAH1v$XPbja!FUT^uh5{9| Jp)|v>e*p5J?o|K) literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..8a6aa87e93b049e281d7c8f33f11bbd50bbaa8c8 GIT binary patch literal 1380 zcmZuxeN0eyUcoCi*Xw7%{}M$JLkUh zaoc-KD=SMu0jEF$oW8i2yK#W@0l*Xhb8>%KX~k0U&xHWeWwbd;E4FDYUmThQkeo$c zQ)@LiAeB_3za4p*nKu|eTKa7X{RPOiW;Co{mcNMHgM5?O>h`b&Ocinqa)s64ae%Z8 zA&lXY+YDA-9+&nb`d5*6I_xfY*c4@&6gG)_@cZqgQ- zv|5vPhu-dJb{;dC-Q4EdTuzgpuiP~3lg>_5KvQN^NiRHa%BsMcXy@pDO0sa|*>dM?ln5mHGGPpu@Y{XKrK zH>JI|Je!1VC-ni<1~C124;oO|9mKJ&qB$CtMUf9<^EoqWYNZ62V+PniIP z6Rg+o^Z8SpV@Dg$@oad@y+XAzoV~JHZR)Li&D=)w8Y*a79ZfOQ*JGQ;WU1v2pnJRUuiBpJPV@7urVGQn7T1uBtE13Axv%DKoZX zH$6mUW4Y&Tclv(nZy)py_Osy}dP%MPCH#l_>fmQBpZBoAxBR`q3|GB}Z{oEycQ?)T zP+ec$OxNq^DOreqkr6aW5N zSM>Nk*b6$)$8v~raSw?^B4So#I-KH=!$GW%NaOMQWaKf-KmxKDmfUBT-iKw71e@0O z$fI@>IKU1r&_XrTA+muRwnI7aV1g#FfB~HFG%_ddITrPAhpmtwt%DIGAxc86KwW_M zoI@?eDcbd7<)Fg`K3VHjg&g3asElL z0GLDc5I65~qb(K{9~(R+5wo~dun}bnJd9GzgTK+*63>#rJlsNy9QP40!T?GST=)xW CtcIrm literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..1b8a1cab122f03d590ed97d8e1646615e7578a9d GIT binary patch literal 1184 zcmZuxeQZ-z6hHU9*VotAvJGt;9d>z}EMbx0s8SasVz)UW2D)rOrU|gRzO{_?>$MYR zP%-;pwjC5R7si(?dB*4lBgpUr6AUa!j79@Sqgl)hfABBj% z-1G6$Ti=!~K9FHQ@Srp_H7RwsK6?oO&I53+4b8q*co=K|LKe9)U+d%U?yt8_0q}K* z+dIPk7%U^((XSwG4ypdYr#FAUiFdz8>Ety}R1qA#mTYi}Z{h7-#3k&dVqi)#L)8d#-xyStSZ7M@UA z)P$Nd9 z|Mf}#`YaRjoOQxxo6Fjk;4qdMdqFy89|Ru11`I)-2e`O$FB)B6UZm2@p4X|pEktbtYHHJ9{B&fzD|)Q!T-y)ntHZx!e?0a1calDp zzBoF4@<#gw|0kQirB7(<-`jKH<0}K-+#dUF@J{ON+v(}hC?y%nWhuNWr84Psrd*rc z5kH|yxySxoZ2=nw^COpEe}!WW!hj=`iVT2F6WK7cv%N76k#$GDEUp0vnkp^Kcj31r2DUg)cxB zdC_F$I00|4e*RhB#`@>rS@1%Au?CZK>q$PJXH^k-akC}DX6%g!7QF97T(mhTK~%K) z`*`6#+XQx4z8E7G_#ng}3JLJQPUu7{0!dg6EucaWdY~Kppusjo8piA@_*cU!s4eut zu}o;$QOl^G1OXJ(0&d3Fv(CYb1AMVKDSO=jj}&BadNxr#9()r;Hh-MG>;G9Sqm2JK HB}L!gfVfH3 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44,45,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..09e27e695b1392be4bda060b6e3a7889fe671d9d GIT binary patch literal 1968 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..c151b9d8a8f5132b982b60fe28e71163831c7d46 GIT binary patch literal 1172 zcmZuxeQXnD7=PZo>+O0yHa^-$2PMa335yGi3L~Ns>gEIYz9TYPcCxXnJiMsI-WvGD!0t+riqk%*|vX~kE@LxVguH!}P^IoSC<8!&^d49j= z^KITz*iz} zX$|{hFrU1NaVO%&kme73d-Lv1tQ|*O9YSLEl(-A?CB%zE;pC1YiC`^{5X7*5M+~?| z=8rHO@rO0B$nzV#2^;T7RRbL?bx~4XFC6Zb=p*|mJjq0(e?oVogrK+!^Lv3Q|3AIT}X!;vS z7WTmf_W_6NIm+ZRxpiac&_2}83CF4Z;%)sc8D=nw} z->mzIKB2Gqbo=SAFYf*E*5K`)JE@cJrAI>plw>HErSPVd%B0hoQhj7|{IDkF9{*#d z%aMC*dWkF8*Y7|#aZO1u-? z8SRS4kKFp+berN~X*m1Ep5d8M5@jhF%1cupF8|gCKN52lzpUml5fhv(<_(how+u?ZL55=sD5KXjgy$ vDp~;_#{1ajOy|$foK!&!u)xxV)3Xz?mtYS|@*lDP^8X0yDC2jgxDfjbV$w(0 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..f63634252cf6c7c2086f994ef8c357a67215ebb4 GIT binary patch literal 3748 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 Ap#T5? literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..61f41df1048db11e615cf1953f23eaf6acdcc75f GIT binary patch literal 2408 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..3fabe7185ad2b296665645878a8d378c750466e9 GIT binary patch literal 3776 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..34966da1d51ce4bb7d1f9bcd195de407c743e092 GIT binary patch literal 1944 zcmZuy3rt(}8vjmT97+dMIlI?Q*>Mlulx+yiJEwDFn=CGwTVS~1l0k*81zHMic@`Ke zE$ulyebJ5;%Ai0sW=w}0LngY!Jzdo3t~b}{B|42J#%SVW=CmFR_dD(Mnj60_|L^hp zUjP5UC;#rBr5p0~vt>~L zc^Li5DucQKmJ#a#6qD%h(`nSzZ!~MY7|%ohF&zSnZ!3R&R}UJ3#E4Sb?B=M z>edF3??V$#<5JYC4VsJ%D=%R@j{bCm(QH{5fqa}V=Fm6-LjVNGBtQ^^qPodoXcMi? z@hpfhC*rguPD|r|mkD>Nq&ZRWx!ozLO1mH6)!U0k1;ww|61(L5wyZh+$ld(TyFft@ zvNYwQeP!ChP1?f8wHx!a8z0?aY-lspXmu8PP1RaDKQAwzE~+-ZprK3K%odHoOg~d! zWi&MyO=^p#dOcmF*V83px|uG~m^G$m1XFv%%{iqY$Gv7Orj|aad{CLWLb*y5tCg86 zm9!`xP-dE9iPbT|8RK_`FU5rZn1VkOo4*|UD7HJ6_Wv>Rf3frl<*kefmFkvXwFnQG zekD68skwU~4Q~jJ!36OXaaF=di=@T;>cl##sM08Gc5FK)ERG5d{F(}~d-7c0*=2#C z*XLXQ;q|kpJU?--`=_1L_AkqML&1zWT+bQ%jMd!RgW$-%^Ybj2s3kY>6ed@Qp zo+*~sJNR0buj_tQ?Y18w`A>dZibDQrKd$DNM1DNZ zR4^56WvZT=@gS3dfSdC#p9(tOR=Y^X#WKr${4y7R@ALdUjMwF1JdQw*&&HAths)_) z&afhpLi>C!6&eT(gu;>W$%{jyv+urja$!r!{eN62`NV5Bmp5=$tK z;aGO5-DCIn<_s3^T=CA~f0pyL*JlMX)Z#U}n!1GSgE~Rw(6D=Y8(*m(tu;n!&mR1@ z`YNDIw3fh`~Fs|?>mMJgv75f8Xb;AhJw3&yB&L+wYIXV&SxxJ-Y6TX z3b&R|wq9tTX`iv4>VDx8YaFPijCL zEdYs9AyvpTBoY}`h)8n!_m6r^T|^43;jVPQd>ie3@2ND6os_eaRmvA!7n zlr4cw^isC;Pq^$)wj8oy|D7B~64ycl7{Lq`Pz5?rLk-j?mlhsH%m7WG2MZz%s5OX~ z5qSYjNnDexJA#=d7}F*(HO8Jp&xElW>|Br0^>`+cB;sV$*{GGM3qb}nY8kSK7lEOx>2)sQ?#&J(9FAB>vC*1&JM%kOR3u=+%~bAaM#3&JZJnMPs%g nCU(N#4DXaq;fN8*m5rzv6RT2rzeh5YxEK}pEmn)?O4;yVw8oO^ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..206062b21dea465c1b975c75c4fbaa896888b9fa GIT binary patch literal 1332 zcmZuxeM}rx5TD)KJC?mGAIcF03k#H_#HQd$udz05&!be^AOxtPiltXr_V~E(qlE@) z4c~VMoEA|^i=gKp6%e9;#+tMNQn6|@ZLHCdhX4G})QaxWM{~~Zp*F^Oc{B6-&Fq_b zFK=IQd3iB#a1K z-NTm(9>IMI$!K5LST_v}_Nh(KXK`6vTn5L>DnnM8T%0?!o*g3HA*tYyTiYA-Sf@7>7TO>5h_6FAb~Ti zFW~nFQrwfrU6%wl{N#gOdTlsseY;-lt9{GbPIfeuk*&2P#Y&PFh*`?8NO`YHsnQ!q zr1+Yj8hZ8&yMkhy=XJ5w(c*HA-n}6uOPWjUMDWA*iOo_h86g|`t4mVO%{f9(?%qd^ z67^)xW&6E>Uj{pdeZzxnIGbG6Ykv*@slPG&RqNNi?D%_uzVUQVeY4Oc7)j1PlG98~ z1GV$rZ%>U%&-@@|-;pw>mO{&m(_` zxR)NkUW+%8iq6W!$hE5Yy?+3uUO@(0vuDo9_UGSS>yRAjXAJZw2vtDKEZ*W3YDaV+ zz%^o*&@Rg?jH{njR+ZEK77FOtB`OGN&{1pD8r%niVgY^h@DJrQDver8)AHXT_wJf^ VH57?ll;4{F5qU)p-@&+O>@TPfgQoxh literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..3fabe7185ad2b296665645878a8d378c750466e9 GIT binary patch literal 3776 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..4c3af1350bb105127da276a3b29095bc94e1fc07 GIT binary patch literal 2428 zcmdT`du&tZ6+hQboEs-3JmR!G8r(oAj{x@dbrR?p1ZY~&Xi$Kb42|F>=5rp7gYCQ@ z1jml;>vx=j69V{f`T4|a(sVz)5=}ncLYga0o_Rs#@ zIr`4ycfRkO@0@%6DBZog6y(qiQc!LwDN(-CY%T?Wae!p+%R5VVJ)-}94}ks_F|Ksi zTBh#Go)Lf)1NsLljk*TdPW=Ys-RSQ$=yg@^H5q6C*(UT03<%7AB0G!wx1zt)V6?Vm z%$C|Q-h%$0jJlQvV0WSkXK=~tbw+)fYRNU+e+T`E29w1)GYkyozmL8WO8~F{6eLN2 zq9|EaqtVzZTI(k>Ve(aKvQ#ozDxG{bNtlx^%^87!$CHrhDbE4C^JLbjAp7Cg)XT~I z&2xEv4rnP#nw*lFHY;<^yzKdl7U$+IU$sWf7Ovm0X-mnrUzL{a*}HGQu8Pzc z8!Sz&9fxfWm&YIa^mC#n4ABslXh{JnBt>K$QLBhrP1FogYlxa9YAsP05OpC@7ZLS3 z!l(#?XBfh02*VOaOPB(}6cVP0Fzbj$MKo%n!IT=JVTnddGzCOcNHj%6vyQMT!m0_& z5Ed)4gw+zZfUt#xEh6kXqE!*CdW)%{)m%*sR^{@_6-q{>VwA;IrZ@D;U9A?Y-e^&7 ztFJVf8%$=MRbRD6SzK4AEEBg|lx2F0-rR&>Vw^ZnCj%^wH-%1>r=`!z$ecZA?z}8T z_A}4UU$Ah|b2*EZ&*v^#nz!tQdy;KgUwX9mx>4TAO&9;I09qTFR7anx3pMV!skt`RumsF3F{r3jtH|yga&?j1>Jq_ zLf`p?p|C#?SbYEX`P07dz3&DmoD=p(<-AdI$r7pen)(iNJx+(c-QDi$>Y@3Ja>X|# zrvCU<7>O$(Ru6#Y5wycSK!XCrcxA}S8rJR(#qQXRaNd?zV@Jf z!2VekpB??~O?QR6f;*5n@4e(hrb8i*H@J8_?D#u2+ya1&Xx^&vca! z(~~)ZNs%@_m96l)y&Si|?z0Dba|TPc=HA)==W@R0_7#EdZ}wYUja@?4UW1VC&~rO_ z54~MKT4RdVoZtHw&n@2;0ZP*XOxtI4V$BKPW&O&3Qc@?*j9g{fCb0>B&_;YH>0br-~GsW4SNbwVd_Hq5j7H zrm!{A9O?<%`+IdAb%&bD>WapNoUf{5wo~oD^?vPh^nQGqzJ0!zPwu(tKGij98|@ix z9qfqO`)mQ5-ycK{O?=t($n~{jxGmi2I?~@A?())yr$K>pi#92q$gjShvk z2evzQIBRTsDm%AXH@vrJxH8gGey-(m+oiTk?WeonJ~rli9P;pG&bu^swinrb(s{~t zGIF(T_{7y<)ETjb2akGAHb?0#g$iGFzz{UJTAb|;drMa$? zM+S%9JU-Gl5*>Ao_x_>fLMP3+@hx$8`a5jSCYs+feFg9B@+i{qLnVG8!|!^Q&#lP( z#lL_`et-yc zi5jAOxRIKfnGvg^SBxx@3|__gQc0;;y#)P)ErAU561MayJn1Pr8M0vaPkUr>oInGZ zzycLe2?o$XHPpu!!C&JFFhV2LffbPk)OtiLh`a&jIIfSMI|ynh!x)KUI*h%Bo*84+ zn7JOKYp^GgBw}UMS*YcxSx5pU>Lg?l*NB~hDlSDIAU!S@#btc@@k|=@RhT1AGehG4 zhW|oh207$FK2UW!Ydz3d1qri@5z4B!SP>JmQg|~NWG8UMD9FW?^;49_=v-J7=S0nw bh*08lil0`+Z!h*Hb|Ee?pV(=_#!deQpzP7W literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..4a10c7683f6bba71dbf7990cd31cddb5a6ac0403 GIT binary patch literal 2032 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..b64fb14cea2e14d2d1bcbad7d29295b626770541 GIT binary patch literal 1332 zcmZuxeM}rx5TD)KJC?mGQ00h%g#}7dV$3AOxtPiltXr?)bP5ZjTlk zs5N}w9pzM{rL+jT{!sxT3TUiJ4UmepM$^U`4Qcq#|4gmu9(~kvb`P~N&dZyb-*4W| z%zN4Q3QJ21frB%k0p6OQ&)+^o^#Q;%0DbyEQDF%@4h8`2X5z~Fi)atOAn&rUd4jOQXYJCI0N(Y=Pa3Grr!)7Ql2(q)M25pzyklLwe0 zbYUE)&Si57`kc%;jISY{^|(b}Y$5cU8K*9=F%#6RNiHmil_W zSXnOe#eyh!PaqlX3mfaAfx$lY3C2t=lZ#8|ctxcvDuavjN~>8C>5}BU^K%jzkaY5- zv^Fo@l3tKv{u^Wejm3^}%la{cVL4>jfZK{)NL00P=~4Aupc^7oDRpFeHOUz43HtrX z?Y-@x&eRL}c^QjGZyu3rzq~@&{*!0L?#9z3vCKgX9fH50vthzDTI(LF{iy7A;9BpU z&<`V@f5%Fbfhz+u!?%vj+CDA#mOSm<`~JzA8uu5K~fd#m4ew2`fKC1g`INp_H=IbxO5ZF0`5a*F)M zAvwP4$GYxagAE~jtN6OT#ogS{FnssAoFwZmv16eR+Q!yPv1Ev>8LuwL**9khJ-%}f zIZU+U*_U1S`hM_P0<#$1YGI(1L+lp;q8Nm{besqlY(?(`j^CJxwdOL+R-s zvE)6sANGL-tkD{ZUfxSZA`zu3A`1>hbnqhfM=`PZeLmu-PeUA{sIPg5XCCskkO-yg zYji4a2M@SGgbJtx2iTwnTT zdkK*jV>OuBh0$%0qxMZJmC;K?%c0H1cY#OC;81w0vQx0&hQC-p8GOZ1o=|o4w3HLD Y;-oN#Dv^uITk}7nWaRK2jElzp0zNo`r~m)} literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..53dccf98201d273443fec9ed19e79f4aac075cff GIT binary patch literal 3808 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 M;Yr{#NgD6{H??fc#Q*>R literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..66b19412b3204b0a58e96799736328eb7ad5d38c GIT binary patch literal 2008 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..55f3f66554961e11877fc52ab9f46c4654f4011a GIT binary patch literal 1936 zcmZuy3rt&882)cxTuKLG^|w|Fu5-*!G?Jb%uA{_p!A=Rc=6 zr@J11d>1I83#34AD=egQM?xF`OaRC%5AWVp{N>m;7Jw8IImfQzyK;5YB~bu*7;$-p zUR@7MiFE)95%1P&)RnI^RcE0;2l3rnBo%Mpf#Fr6q zS`w$F@f&5rB9$~N3O=_xsZ}Yr0K9m0!LXqC{rv31a(+w348Q+6e)}R&5QHp6xnOrm zRsP1R{Clf5Cf|=mMRNE)v5{bdkoSF*YHY>{l(o1E!wMOlWH6 zdPu<=f`c$dJV>0AFwz2PA-`&NEmcr%5bm>YIVdcQ3ibT$Wn|a*iJs$213|CPx9r^u z$B%e^=3e$sIwx&kmGb($DO0$PGxQu_yPbBMg|WCgyGcI1l=`mlh`_efo!RR91?kZz zBlb59e%LyB@luc3)*BQ|z($ZGE9J zna@pmP{=^Q&H0y21nsY@T_odTnWa8{sf)kqDgJuK>+&!jd!XBAWl6i;<#aA%SaFa- z+gvsk>I?LR!jaMO(*wiPZ@qT$wTsU$=LCsUAo8uk4V|S!WIRhSP-zphiz$xbSaylc zWAi(*`U|%&e{`q6+3w6UahDgovJs-Nydp`Gn z6n*twGIq>8-FtHI{qjlm)XsN=JmcnPn_5 zc5_RNNB1=x){yZ#|JZ;xb8>bgm3L_QZMF@p`Cvn+G1L?^hnoZ4L0ib7Zr3$573nrk z2w7iO$E>54=eR2#yW`R+^1^WkFYi9bjCKxNhr5Sb``aV79;?sl_4-i)lV3D_<+@@Y zY72I_4u-mdog8^!4k)}g*2^AphS^Z}v#nuGz%aV9e6660tmxm$)1Q5Q>iy@=h2gV@tmJZi)YMcP^FQ* zu_pt4JA6CrJDoMwl8TN;&6{2+8L9}kl#aKY zYMW}CvK;Ap;n0}pmw=lua$Y3aV-6H%#5w9337>8o8a(ZfIK$Rpf3JI_IYMr`hw@bW zw0^Ct#c8qIS{fUho0>Yf4tG2E#JTG8hrjSg`v;ym9PNolhFuemms(DAkSv2=3Deq0hzGQA1`*yjhH1Y9C%qt)N_Cs051HS?xpFsxNSB-ax>!-h%7+5^-mE}rKAe4ec zWbxUWA+rAxu}11yB;OQS7?$6ksG5korU;Ovo+bSF+Np@E#8vnmauX|{jTV4JsgNq< zX%dMHGsK?$9tGRCJ_K7J2lA48i2CwoVt#&J+!av)iZ~ST81_fVQZZkAuamX}(h((X z>A!f{zic^V!h_dh6bZfx>cIdeD1!>nf*Pu!E-|Yh4>=RsdW_J42GM?44@GEIK_fD1 zFv1gvjEN`%=B_JlLgcH=sfcaC1T@Z$&&; z9!>&lB*y%J_e literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..5f69d873a82f99e24ea86b320c9ecf59038c0493 GIT binary patch literal 1308 zcmZuxYfKzf6h3$M!7#f8sw`2kFn}Z_HZ9%KZLAILx|CKMga9>EYv~HZE{|m&11&UA zYk2Piwu&gFMbPm_1%xP|u_iTzRID0J8*4PA;h%qusffn)U9x>;zHoHJwj4DhZ zX&bB#fpw=JM*lkEQI}I}48ILV%>N5w9!sDKKtRm^Aw*l%DA&hq0r+5b(-_s>yS{cvBkzk}l8-+mAJ_~ULew!_VTsMO+h#J^ zOnWR&SBs~{W^d%TR%Y|YoE#%>u5!LC@TDzcqu>zvXBsM<9+%T&Z4|1u^XB?`zC;NZ z`4T}CJg3kY?F$?0WJki@TqYNn&hZLMS6BuY=aJU3B-$;>`EOm5=%A#Pr=<0H z>6Y}Y6!Tvn`;RYnoLkn7>-Eb){U#hMb|Eps4NDJ4&INiPOv=cynYAQ?zt`{eCU*on zf?cT>3i2}+Pux5v*M4z@vID34#Ga`J z`I9{pC)}3=HuS{(-3DDKb8V}^7N~y1-cGmGmC`NMG}%s*u2GAeZk2Ohl2hdKN96db zAM1Md4!MK2Ht|(ktFy)J9=Ur%PLj2k*zw@|?c*DzSUODC4ObWB?3=Tcnb?y@k5bJ< z_T`3^{+|arhP*=qY$%IfHRyf~{b{%{^kwT;z3kXK{=it8SlcW#2_~AIN3)x$xxad@ z`_0J_`N{9)tUGeX+ z8Fct3k|Ng)JEnbgeqVZE8e0dvMst1V2;=Y zl#7ZL#xzewvMOPJF9J;L0ttc!^kkK+!aXoXB%qEO-cU}f(rR=JgLmTJUz_uvJ_rZE z43=mOg)i?X;c!@~ipY#xSz34w`y=XD{5}V9RA(R#QB+qwU{^n&YakKwHe$39yA536 z1Q9Br66|1w8fb`+4R)bTMBRZA^&lXshMiD?nhl!JVg(O8kH`~=a^iP8VS6Meqg24Y z5>av}bMgN3DAl+XyG5A@%sANR8z-Q=Q~-}fc=S}1Ni9eOb3|77qVlHv&r&jS_};}u GeSZPD#C@#* literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..e7cc68d1596eecd5bafecf0aaee05aa0ed865d0a GIT binary patch literal 3744 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf new file mode 100644 index 0000000000000000000000000000000000000000..1d67ee49575190233a88abac605469c63d230db4 GIT binary patch literal 5108 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 SU#K+$yv1iwgL(7QneK@=jt%MMNbkPeoor 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 Wbl{i&pjG5f08jB*!XsJ($>F~$f1#xS literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf new file mode 100644 index 0000000000000000000000000000000000000000..2fd89a4ade6865bebc9bfcaf876ed15761d5faa9 GIT binary patch literal 3012 zcmbtWdvH|M8UN1SeX-eWAjx6~uzQJ-LL|F+kW>v51AzoW%0@O~C!;nu*=09mUv4gW zSjI_(I!-|wtWi*=VqYU|^&iUAj@2?&N5(p1mN@93wK|S%P|=35JsWQz{hhm;2q|r6 z%DHpC_xZl>ob#P?uCKk_M-Cb$i8>pbn&j5^Ht!{(FNvg~<~E;yV}I*zB5NyTa{eV4e6!nW&7=}^m3MV8PaYkU1ZeC?9#EDzv`SiYdY}Qa(Za*DTk|= ze0KM8qL~?c2|t&YHra2Odcj_rUbu)XjF}xn2cLfF{q=!(S8z)p7*l)Hp~iS(DA^MV zt8!IE<=Qm@*2ubr>>uh=gV8>DORPJdOvICl8Vty*!m66M#p@jy81N{#`v+E0OY1reP3H^~r`Y6OG}%WNeA0zGP+JD9KTNUu1z38p z5*cYf9iWHkVfrDB&_QNq7G`A&n2qHyJIiI?b2uDrZ}Iw6+B?SH8Rw;M@!Q_!KN>IG z!+$qb?ws~&rD?B)N5`DniHpVKpYo`gk7@PJ&b^~Ay7_SnH=g12@%x`P{=R5i{ml*4 zEmnT<*6AvXFW?K`mN>HKr}sSm-QPTQ;wLA5Zq>VcU|*nfDH0K_<1|;s(zz*iHpQz?^O`gK*)b$@YO2OLovT%+b1nSdlv6u7{dwv` zey^E7uPM$u?;m~1&Cgr-`45KP)ZVQ#@$m-jV~bW5IMT#dJZI9*T1uXYf8ydz=D!_1 z$vva){)4eYgNLkI@%Q)j+&vrGamQ)ih1g>vcJ25VXZT-I2>qw2Y7x3tguV~!@XGY1 z)CGQ@neWrOoVO1@{<51Nw(#rT=GUK}IM@C{(fWGLUai?SS<^Q*TpYG&>{rnXF5YFH zeEN^P@-cV+Nc7O)VXNlacYkQdQU@6rTd*iC+gBc&O68|l2>eC9_V9ibys2rw`MB+P z&hdBccJ$l>_C;UqDg3ANYwfGH*K=Nd!VN3>h&Vf3&Fg^_Ttg+v3ZlAG~x@_vE5w z(iUS~Ex2fLf1rjZ+r|LHjYP5B5Qd0?V|8V$=<7 z68;2KbX@?NRk~jl@>|G@Z$SS%u$cAc(MLw1TTLF?hVd%8h@rr%@ZLx*v=z7o*Ro98 z5j8}+DFS_R9#;tu75LUt9W`TreSmdyK4(2<{Ov+c<@3hZVU`;)Y6ESe9f*@e{2pWz zL)^=Kw;{VLC1E{pu?8{fpVN8hCah*1R!N~=_!D#6i5w&F+69e=YS3$`8W~pr&(8jT zXNocqHHZBq>=TLy9q*Pd3yWRW5i>Cue3d@Yng-dbUGLv`mNM*@I1{ z!;=HjN_2xm_|zSd12=T0tpZ}Yc^2mjxyTA_X0Ld2uhPV58{)Z$ZER|7C##-6UdODh zu4g+9Pmo2|ujw92Mrd6q8SJIjuo4T=oq#=bq*sY4G!aqM7%Q3cA)@Ed}JHqTd?o(tAa&t(A>(v3RJ#2!J$NdK1rcKz3p zHgbyU&_}qlSkB@VRIVryl`Xs$xGV9^o7m!OfsuH3ge}uyi4Ir&f09_FyO(*c1)^#) zRn2tF^eV6Gwi si#KMjfnGny%p;&%H&1j03w=4Ug~YzRgp&-ej8;l7!z44GS=)kt0gVU0vH$=8 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..e737ed1ff83bcc313f2635e2c22106fa9b3d5fe3 GIT binary patch literal 6820 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 IJbSGE2Rn~?00000 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf new file mode 100644 index 0000000000000000000000000000000000000000..685c2c90cb16a6074f60e284082be25e668f8825 GIT binary patch literal 4984 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 S#2dnV@DZO8){51{!~8cU>|!SX literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf new file mode 100644 index 0000000000000000000000000000000000000000..fc1f61bb94547c69bd57676bb2a301f9abb327f2 GIT binary patch literal 4524 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 HObi9mcVFlRNH0?#s(d zLM-E;qz)}s0gZw%qV{8CD*lsV>)1Ms)t0f&G$9Ul@S}D*wy}yDM%{~VApUmm5>tk8 z9NC?BpMAc5`|R$syRW~k%}-9+MGCbyH8-m(78jQg(dR_U4Zc=?U`_9a?L@Xykg2}F z?W?a2)OCO#BQm}34^&qFzPykTnIDC|eY1a)Pq`aC$`SVV&X|@gEBNFE*gL=es%dVfg&OGZ(L=EwbzQtOkxC{~njQ+OOCq|Syt%TnudmOm2_SE0B38N7 ztBTmwt{zoW^^_J2#k5qnn%JuP5{Ym$Brv?vLQGG^{M43KH9Nse<(FNB3STH5N_BN! zUWwTx!YM5o=@F}C;dRzrs;V11b^Z>8Ojv42vCv|b!TyXcvXry+P2Mn)t{i6n80BSe z^4s3xkBrXW$zPnPa7|VkW$8*Aj}5zw6Bmj`KjJYfA2u3X?Yjs6&$E_|JJNj2% zKj_)MFLtQ!u-zzsU?A9D?A&siYs2Zh5q5Tj*PQ0HXZZ19gmG%3)-{=D)THxl{GJh) zadPsLk$>@fto#p#=DPF#!IwS!oQsfX)~N>4)S;l^Etd7f(v5n-(f>NK`0h z3Ipya+ea3h@t>Q11o`?5Wp`0ETMKC}R5Qgs(GyeDMeirrU>a6?-;&ncrB+Dv}~qdi{2`%OM*Hmgnj^CJ+Kc^3{<6c6sJyTQ@|6g zCUrq*mPlM3@|&p=wNF+rET+-C(lZ9#Qu5M9`0Mz@7#dIodK0zKde9bJi7IWvsA1Yp zQRq{baLa*Eg}Q?3$tU;Fhu$>iG-3vC8)B-s#J?W1Tm!$=w3aqwoD|0ILNsxVI~%(d z(fz+9BI6co5U1W5otJLJYSv?wH0lPPnA=vw7zJtvG+wI3S4TC7xC->UM~XBMIfwlu z?2~*cuD5XjakS8<5N?a_PM#)e0D%fv{1G(>jUG$0z5-z5$2AR zbP7xfL{40pnX&|gWlS?v1SF#Znc6MhyUP^eorCe*#MU%#Xd^o!LlJSwBK2&m=?St) z{j$#fRFqbRQ=x9!5Yggcx)W^|9qHEM8jVFYJCZn-s}Qq`7Q+f?kAh(bYi(zUWLRxKa4izUbCsw^$Mtbaq+-$HZgx~#vI=F!zS z2?E)S(_BDB$n^|oryo!;m0yBYE@Q#k$ynyle7autnb;%97|C}W)cviVIph-AAw4`< zs%B{kRcKmNXLGNl-Il!JMz-Ke+GwIP$`;DDRJKdLpClgb>}K98X^}OVtY(tpW|tC? znM|HF@qb`NUX&rLGc{vjhrS%29eVMO2o%9F?AvV43dwXOB`IGO!i}>M_YgdA7(c&= SlZY3noE9suNE9?Pg?$Z?G_Sw_ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..c55b233596460b2605385f86f5168e80bc331c93 GIT binary patch literal 6728 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..e10d863c069ce71861f6c1542fb47241f44d047d GIT binary patch literal 2380 zcmdT`dr(tn7C$%PaR~@o4Xux2M6p^?lY4If?YfFmx;nLVL0Vb2LJINY6@nqWA7V(z z`$Z@Qf;=?sbi`Iyk>av-#`@k)r*_-fjo6kZoz>A1t5cNkb+`Qe!k*Y&4vO1m;{J*Jy%q``>%idyApu@27SLR zDB8-@&J>RU#8)CNE7xi2VITDh#=8-}SgF-iT+Sw=o|VOx5cfj0>Z{VEwy@71#oR1E3&A z0u)8XRW#~!t)jJkHU(y1pk@msvjx)GCt`#pNz$}2@H(AQnG}zQdi&v`aUt%9n{&^_ z^53W2pKX4O=a+z*qNK6$35knRmMl$OzG`)P#)eH>R9yD<9lQ4A?|r_Yu=wDi!IfUCr)JmdO?a|k_8mdU8QL&+Xqk>T?8AWb|{#C7_sI|eU)io&g z)|KlG^?HNGsIAzd$gQna6pHB$ib8FJ*3g8`=s0nnRt7j6Z##SHf(%)Q|9I^Ta_w?<<#4E=IvcCTQ5ugA1Ph7PL`Z5 z%aA3nl_^BAMwV;{&t-%KYnaaqz84k-!g2h$@cgy#$Kie9`2UR2KgSX#WDgQ2l9C?y zk{017o^X9xM9S|kg?M~q;5bZBzoc$R?9yCmKA$nSS)N;_7q(k=9Tygl3HAJjQo8&6 z#l8zG{Q-~HyZY{}3uoNlx!&EI{+@nNw4qdUu)s39ehpq+Zw0&2+iO7aU*7aITtVAy?MvhXP>S)Tv1^!a<}`; zgXT{w_|(w1uh~oOrH-=be%G`cnfCjgF5l|OfaR*jM%!%;`${jr(#9|U4ZqaxvAOMT zi@(Qfa?low&1zk3cZfs_ZS$G({z3m>e=v0V{FUMHnfKql^X{ED(_MnZDo~tBc)Y7* zl%7o!^zy{Xxm3B!?s7O*nB8VyZ`x3PUi$6Be=6atZ_NmFf3v5-*4QO1J6I_sS+tJ* zy+_}w8?V-fsxKV;v-76=GvB9Uf4EDB&pBrXE{%L#Hl>-~|DnJdcD~*`_0BcR2j2{S z+xwm4e4q1D<$yq8f1dztw8Q0ex>gv@9zJ?fOV4ilQH_(iG?yc1PozI(Ry&NxkM=kA zHwBErW`9q>+~2F|s6E&i9@NujkvyLrW5K09-E+`?xQF8gL3yF)1m4kx~i=AdnUWDeZsH$$QZB% zEPWPtt+&>#qxqtFpFD9kWiCZt5;_!q*)QxkRU-uMXMV7=-TSqj_V(nC^Q_{ z=iO)7Z>=^Jmv`Sh6bFcnnU!SY`MG2Tj{H`wOHFN=9b3B=BB1jSEsYX_0o;1nJ>FF?8n`pjxeg@BNbIKF(OC|mw!;F@V=Z`X;AMc-V9rf+V zt;S=YiA?3ui>W}8aGml&EF@76sfX|bFcA%CqXi(5#Yy906D5+EXuY2|=jQEx7IuLW z*k}(?KG;buEG&p!5#=I_6bCQhe5sfO?4FM}YD*v)QPh?`;*WX6j)i4#;HR9ph@U_M zG{UP;3gu7<8mNN0$ReOZpAKWSU_?(nYAt%A*@lQ;i>MTiU}ho4NW`ZB1H6RDfUzpj zV>K0Q!8?g05j&$^hFXT2gBVbtjzJdvtawvUMx=-Vk|J_dL`J3`sl*~yVvPtb42$m# z|AoW~GDw3=plUV7I-s!&5>^)@lu_GYL|?QjzG&c7MVtO|%t%ZW8Q50gDTF F{~LZg(7^xz literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..30e98e022de529ed1ce3d74fb09d31fdbbdfa5bf GIT binary patch literal 2044 zcmd^AYf#ix6hHrES@s2pvZVN0Knl`y|IY<{E-aXt;qYiM6I@|AEAre01qXTwiYzD= zX=p0s){KGSn2=?YFUH7fYILe`hH?DROrL7Zp?2}FL+8Kiq|@}RkKH@>obx;9+;i_e z_s+Sw1qHdFhu0ts%vm`(=3gyE1^_q;gQ-JPyN(!;3)n@!e&|mz)mwktpbK&G-VA{RZWVN z5r~FBF%u|J1xmsKGu3j8F>GER?Du*@)EGgV`e-7uU)J2aI=MPL&=fsBIcs{LB?hu7 z6dgVsB0vWQh=gc}ff*17vtSO)heSw*6j%t0fdv7qkO9kK6=XpUtbykt7xJJGieMuY zg9FL{p#rL)7Cf*WnxGk8g*TuL+QAF^-~jZ%Avg?2p$|^L2XK-OJp^Z97|y|Y_yR65 zYDR}Fa>%2AB1&k*G)za5f zr6HG&yajm{c?!uRFCZ@>FClM5J`MSF6f7vPC~zpyiUJBE3K9xd6w**gN6~^Jiz0_2 zk0NbIL{UP~ieegy=_pxHVo~By;!zS%qWwxJS+iN&MJ?2O?7FFySB#dsCSkvHrpyI&3THu$DHT%INjSx8M;)u)jgSDr%R5|>huO< zWK{IDnCUZOO>s}moE1NN&fIzP%?XJ~3zDCFDkb&lg^Qk9yu`wCydX-}wDgRn%a*TL zxyqKAWzWu8yS^|wjkmjvk@O~Yqp?A18lMq-)bv)Sm;z?Q*~vIl=ibhaj`-HD z*6!W&4(Het$BM6S@K=0!Ue@;P*ym|)ctwsaa>>RvXUDqTb*HNPD{78ZoGJRzd$sFU z_fLJFf3NiodCwmlK6YdCh~wP4?_}P+^8FnnpImAC_D=8byYF_Ke$zYbIw&)pvZ`B# zo!X90ueUSaJy=|K)Ts?Dd?1<(fuzY46Lyuq?b;P; z`wy)3N0;5))}GN@*NrWn*Ri>#sjlwWoooI$zvifRp!>sJ0}q$d%17k;rVFF~)a%2t zYS6kuE|kLuQ%_dk-TzBZYi~zyk2a7jUoaVd3;b!i*85fS*L$`7?{#+d&-YX`Ivbpl zoVr3zZIo^M%SZMcI(5vS{)0dHmOt^-sBi4bP~VA`liT)c+g^TY*T&iQu4fNt?<{RO zQgrq$Z9sakgwE3LHBo6}sFKiF*W&)HBzoB&z=V&J2AY#kzozh;mo~LS+|)ibr}~&+ z7^oC2RjhGlQAqm#QY8mUSMsMDr96xUv(g{FG?>-L6O#!l-6+#dW!1<`FcWYOxF83T zNdi#mHDQ`?gG!~QY091a-E8*EY$~xf$O^5Y(Az7Ssi`StRYErEO4Gm#bU%z*NAq(C zhh!B*5ems+kLlHq$>9(S1rL2RK|NB*Zh$RN0;S-hQoa?cg9EATmrzM>fJ&$*O)YUJ zX+qxapx#NS1j@-Xk8Bv!Ilv7s5^|GmE7VXlmc9^6aNjCrWs+iv>xm1X1~YLrbw!`0 xoD^(9s$c+Pkj@FxP_}F&XVI`xj9{C3SNSLZr702g^qtKFrqWSg4cbROe*sYn;bi~- literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..1f9075403adbb3e63dfb60cb13f3b92605417519 GIT binary patch literal 3748 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..bdaa8059f59f89fedd26d3ded9ea00c2861aef20 GIT binary patch literal 1916 zcmZuy3rt&O6h5~vE~SI%cBgL2?q2GYO$JQoV{UAS*^;>hh8s=?6*>yEl(pqqV63#X z_xAQhJ60%z0@awY2W||R=#sg2jM1sl7>UlQi7}e^n7PG^!E@XBi1D2K=kcBMpL71d zH-ES9+_@c;&<;|dH|OWmSwle%0LB1hmS+o#HhuNLcbNc5G-5AqFMK3RH(3+`kcZGO zEz_%OVG*$!KrxE`4y{IAem1Z0K8)iYcvOqP+*^tR=$p}BuGO0x$sDN-eJ%Pby}Gd$ zzhRDiC7xM z785aA5~HQDyJf;1DrtHIye?Nls*-T16Sw9J3X0z^Pd_W?H>OST`|jlP?f?Zr$dZ(E zb`(|QtgFa*ykc!;#o9HS4Yf_i$_lNSez0sMot2rHMdy|qUe?fsO(wHOZ=$!U4C0m~NsAG$xI)9>K(HIGjTYa-20~F17G}<^9UkrOM@^SfNZ^rldu& zM44)gPOpdxjwqiOdM7G$M-}|Z=*)%aN71d(r2odqe`3ia${Q&oD%B02Y7QPS`QrSz zq^9OU65bFTgc0It;*x}s=1TMV71OJz+){(^gni>dVQxgI$4|Jp&HK6b%5<~*liZZ;%w_6`P5?Shy0@g+d{WxsGk(1 z$99GF?^w=O|H$$q-@hLU9$|XD9Op*vVM0td?r5D6s1$zl^h$~os{KMWO0W97$34dK zIy+y*^40Ap)GpgTlKbP}~`)%r)Cd8m4Cc{x+)w)kv4wol9X1>v6$F(ph1 zTbkIYHny7Ts^VveIeVp;gyE*H!j%U`>E&W&R^KkF4q}tw?JTjp8(Ay z%eh?KLgTT$`;TbI*u#IU#hW=Zy^hL0yz~LvTGo7Uf3PlCA25d+{2c*Xuv6Wl+h1Rx zTQ?@8e^VK?4qIO3zIEF>ub(Baoa*G|9haElwn6J)$3RnWOW4+B^;$h1AF_Y^%lezn zZ|wukfmY|iV0)mABM-~~h4;pK*u#zx8|-+cDWvfmhL@MF5>(-3y_}hU-Hx&L3m^0MUN;Av0ehF-t@G;KdXg`k@lh$UwCOae zIJ_si%P*`SsuluM8Sibdcz<9>e^C4iBa!}axG%8PyVbtUQDrSEYu#dA|7OuZS*Wpi zwDD~7MDv8@X#4TQBko`QF22BVjbu-DA~QpdVdqfjT=PKxIbYZjvIcs)T|*6Fa`R)9 zyV9%mX`PJ@i`~{(SJzNq-^#VRTDa#gRbD>wr7zOkcj!o@D-s@bj&;7?c)FEj8T?9^ zR!@u7QBU$kGm|*C(?z9-k57Dkee>?}lC-CO142F}K29wwM%zXG+4+~8uwd3B%aWW% zR|*ml#b;}Z$oPxJ8p#(CyegtFD1S0uHJ*1{5FkmuNcixzQxUg_Tktz%#WkRf7Jx*l zkSgRU5{V3Vh%^07xp|wOfsK#}*@+&ays?3pot+iCqL+&-k^-K?`3PAu?$1X*VM`zt zy@W0O7cTpkErfmK4filp78Y-bCzA9i1VtS0}z>G*OY7HWZY-1eP zpjQI>FtY$-6>&@rMtB}QBgQJhfYsK(YCMxj60tMt`KXnsb3g_(Y8kSKXNxC=Og!-Q z+c%>^AK>1&Ox%`ODH|7oHR3eeC;rd;4~Z3(kPaC@=+x#KAh8P)_7Ee4Sz|IImZ*w< ZOn9rJP2OIqsPVVNCC(;V;_L|<{sf^zkL>^e literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..e87cfff7d9932e2047ec03c4c4b262c591b35b93 GIT binary patch literal 1344 zcmZuxeM}Tr5TCdA!LoOPwj41~VF5`bHHud}qc!Szh^>ZV_-L?I@r30LxG(OG3I?nV z-*<;xE2Tx0Lc2|BfkIlKZERvI#8TU)jixpx#PDDLYpkK&!-u)f?$K(R&dZyb-*0AT z=DqB0QE6!raBvP(z*`Cm_&bM5F91vdFlP^zlJCx2PM{>lefNHF&J}xgStD*2wv@<9=d&U#`;C!PxLwO-VaaDd_LR$#2U*-by#umCy~3nB=NZR>}lzmUi9G?^CXD5a~Xt`3?&9)zVrS;X+{GJys9yn9kGFU!!fsL3R zZN;;61r0iU6G?2hf3$P7B60VhKr{=;Ky&uwIoaO*=6Dw*N6)K`%x4Hyz{o7V#S3I} zY$3oJ@pEYBWfn#>&ns2sw10#E6F*17paDHuB1`ZPjEV*H(Zes4)2g%@9mB|9hdk52 zV$R=x0QP|yEU_N4UffHf(Wu-Nkr|gPT6hWPBkFj3z5sE|XCMJl%vU|ZtDo>SkOZZx zIa-Ccfe#ws6jVSZ*ue@l;8L~?wjt-lm;?OCc+d*S#In5#FCeObYRoLgm`&lV;DwhF zc`;T4ZmhNqwm_~jHzRjOF9|J&HV^*`JX$p_nYYL%1v4J_>(!glBL;Xz(Xrc-Z@_|^ cU=2m0m*juV|A<_XgJf6_#9{TjfPI|vH{N}PrT_o{ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..1f9075403adbb3e63dfb60cb13f3b92605417519 GIT binary patch literal 3748 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..856249e7291e8bd06e36e88c215be4411d7d32c9 GIT binary patch literal 2408 zcmdT`X-r#J7Cz5rc^Cs(Fl`bFE(vKClK4G8v!s(r2$VKaQz{5;n5Y34oNE?iVw-&l zF*e>eOo_pSCAgyzqz#i0N=h3k%|2DtbXrXn4Qex0D~(1SsY^x=`ly)u>`IMB^Jjj} zIl5>0&b{Z{d)~F*D?WO(7(~zmLXZ{|6-i%c(G>&0EI_pL`O>n3f4lYf836J-jI|b* z?xE`!%Ekd=)!47B(kL6@F!36W_hA2JwMtoiwXl=|h&h1$Y&8bfJc_x9=NDpsi&|r7 zO#>FQjtzDn8AvHZCbKB0{6qB=e-+_XnLoXJWlpQ;MLRpP! zHI4e_w$9T=v(@4Def9uRh(>b6AO*@sIVcz9AxefQ3Q;toN$A z%Mgv%(1?~JnnAPz(bk69A|?+hWJp03XdByfHArocZmZfZrDZZ&nqRGbT_r7T(;HM8z4TB+ zl~&iN)hP|C>fO@(`g&;zKV2^^QR!8>W(-E!iTi1xfx+#KCF4Z#;)KMcHEY+cPnM)S z@#Kb$n^K=jOP4;Kv3X18)@QbD-?1}m*X}(sik35qz55FfZ53@5CH{|;A=)BJ%n)UY z5;u#aym(ras0%G;hB!-zEew1R;s!%8?8VT^jnJo|!=c#!jFG>_;-*CpqhhA|4 ze&TUAlfzQ7xE^Bhm4P!bP5hR)C9nzeg+*-U@-9h!rIy=kK5&LxGtM=#+bYPOnall` zHu?N+k0<^9ol8@$ADr)a=PYxkugY1Cd|n@DaBBNc+j}i$Q-`g?+TBaCiRF@Si>5ex zr?fju`79^A@M=)=LC4j)f7;pUe|#JmIA@87Uh*edLmk@e1b7iQAub2z=}vwrh+rIoZ~f04X>;1`8%-{gw=ZqDs4(O1i9eUKwRaXca-hYnw>EWi$;Z^3*sQW2={xmS z!$hq%SbOQ%UmUkxUwA(sfA2mSy69LKyfXS}<(zW<$j6*qxBtzSxp!`uKl*Oy`@SFS zGyRS$>Oqdc^}QUllXj=W;oPXZaN^WC6}hzYX9e!emE~NC{A|WECWYN_=F~vbK(pTv zXz}&>O#^+(&iYf$CH1+pT-w()A>(An@15Vc%zd9+CGTA7W21X-*(SRuj1#?MZNr^G zQ@_z;bi2KneRE$ne`Wo~Jl5{-vYr{}@pn7P(<>mseY3mmXDtEyK<}Gv0hLcXxutR! zCk}2NKFCV{`o+|R3EP$aQOl@%q@SE-k4ap|jmK+GYHG4S?49ko@fn-?iNSC6oBPeK zdQZJeL$akSUP=5?(sGidJa|0xs*l@uzK-)RW_`53!}G0;^bPR0aD03;7##5*_8c}J zvD6yNs=5vt_Ptv+RuyP1pJ~0?KHomyG1c?d*=g60J_lQ3xkuVB_F=Z2w@g~k2d=e` zjb8HxEdir{c+hdaB}f+JNL)1@wO4IzwRD(GtxZiW&COlTE=Q;Hm0LBp&wc3~A0Bz* z+<5w zxSv>EUFEA{FCQ~cG4K-ZFA)`os~2HEVhbP{xSAYh`>cN1KMyypBiOkl8aTWF|;3QB`f@3I*DM1IXU{8l*HK4`W zDA7}uuKihaQDNRmW7EkqSF7Lhw%|9G8Xn Q%AbVaGe3x5&K0rY-_CW>zyJUM literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..90634d6fb219c260dd6f74955b11e8d8362f5c9d GIT binary patch literal 2044 zcmd^AYfRHu6hHq`N?QtuQl|JSARA1l{Xa|bStvN?9EQh&bAlDhsmQYh1qXWxiWC$b z)8P|lx5R^FEZL_m&ak!k*Rb<1W}0Q+_Hp;-o^yWZ+&XQDG&Gft3TJpi;s}Ws2oF_Pd1@z50!RKY6E;x@06VP&wF(%9(UjCxR5U13 zS|ADng-oDG6(|Y`%v8(KhLCwZu;1&QqK2@!03VM>^vat1*C$qo1{$J9CuU6#G(|%u zxuU~|LKx^E93mhJqG1Na!Yr5r^C1C}AQ=|IVqif43#7qvSOpo71#93%$c7xqhXU9L zh2Ve^Kq!L>s0I&ghX!bbH{fk(fmZOsJ~#kfa2Srjap-|l@FAS0Ll3|?7=#OO5x#&c zjGECQiyZPOpokJ$Fcq!HnvrFZ<&fo(6_6E?m5{X{n~JOzIWuy!hC_}=PC!mXPD0Lt zTq<%_#G5c?o$7@~OyMQ81&xqQId*5d{=P6eJWZD5RobMbV5Riz0_2 zk0NbIL{UP~f?_I)R+P*ru_$pU@hAx>(S9YAEE!eR4eqVzsx>7Sry zxecCLXNAYKrn0!oU0vmN)H+KRn{4IfrW|Fu$CTsrINjSxId!RYt9#PHPL~{})#<|x z5s^{TqNmS@F~&YMb5`8!IdkXDH^nC;E=YR%ndFpb7cP2k@e(u3@q#E>QmtuAmn~nh za+NJT!=9P7c71-LK2aa}Ut7H1q>qf($15a3AL;f@B>Ch$KEM6Ft3LUVPval(J-Ft( z<$J*w_D`Gku}#;f9}Dj@7{)pc5%eZ?!!bc>9Gww-)bv&+nLK90`H5I#``-4pwz%ew z=FZ*oj%3*rMhb6k@RxmgQPy_t*ym}jdtHtxaLI-iXWP2nHD@Y&%c_o+oh$g!d%fdM z=TAMKf3NiocrP9rJaKFDkmJI-?_}P+@`D{ipI&SE_HOs@yYID~J?I^D9g>-LS=A}S zPHkJe*V`WF?k}u4?$ibrJ`|1Nfy9YqBX*R&>)ItR+LkNNEtTV3a_m((!yoVPn>YDq z`wy)3N0r>()|%E`(}_)1}(pEw8?^YvXKt$MZ)rcNRAt zEja&=Jg^sOcCMPGAsDy0Pm8OB0=zbWrj@D-p zo|07%NoYzAc|xy#LJox($a^$L6VxM>>^j&2MNkYbD&tvhPa-%0BSH1S5sH? y8Olk)7NiOWFa+tGAf3vVjpPg(Hu4c{lgE^Q@?V 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..e76439392d45cb000c44101d63ebbde58864f303 GIT binary patch literal 3780 zcmds)iBptE7QkO~`Ee*Faoj|V4g&)-Mw7V@ z(Y<`ts^t&?)esEg#Y>lpKfJPA1pos85m%mGnY8GWp|36jOi-Y$dHKpGR9Wt%YXDJi zpuQm`+mr_}BpG1*pHP1>&1_0Nx@4siAhH^DT^brD-U-``{jI3Sr)3wFE-0GaitR^G zzm#n%&4bhzu?l_o3(GNOn(;XGV|t8fjj!~1X(2H_+46h4Qq;A{8}et5b=sxnfwf~u8NjYF!bT0_-Zs@74po~jL0ZKN6n)hMY( zMKw61hHA7_qoW!<)flM8NVN*8RZ^{rYSmPW3(``pj%xK(YoJ;q)hVb>Np&i!Q&XLW z>Tta}s?$@Qf$EG@ub_G*)vKspP4yb8*HS%hM^E(zsy9-Df*O?6prQsfHE5_oOAR_| zz}*_C!AOk?YE)9AiW=3_sG&wJHR`BQPmOpO#>KgLWd-Rptw=0Ok&9Idg-X0IHTPAs zcx72(kvY3i{A^B2Zb4pdfvL!x`nY&uR+e}L>s}~cVJNp}Jvxti5$sDqfEG5sA7fBL% znIy9iAUULvloAW6A$H;>e$qk$q>H>p_Kr$cRKn$QU7Ggp3g~M#vZ;V}y(m zGDgT4A!CG`5pqVz86jtcoDp(H$QdDLgq#s_Milf6OM3)+55J`KbdS)|6UO)VjGXDY z-t%0~xc_eB{?iuT8}V^uZ&cLBzNqo|B@I72X;g{^AA(5s7qJC;$z-xOXhG2V;CaDK zA*(~9Lnral;aQ@E8*+u&wgp>+iCsb-FH7dC_aAIL5aVxZ@Or0TJAYu0=eGMz-(mY< z>!)k^Z1s`C)*N?k<7QW_-Da(DRye9^Iex-g(Kk!?2(C(T)lAcqLU7;eK=$d1qnY2j z_}+iK)7sqWZ1=j|9?WgdR%Z(mmJvY|$uAz3i`+t{U&uu1HJxhk47m6#8=v9gGpqNR z>a80&{^ngd_KX|q6P@e6aNu&oO<%)|%ysjHaG`5ejWEZV)spSY@@?_eZLK>|`F7I@ z_Z9cmhAZy;&CMJeWDZzuxVeKG0-4 zWpZ#%hszn`QTZ ze8&0X0@u8$q0muWB}`hACPdlHu4Q%kdvm%oaswF$*1TVT&U4H6LDwIzaXtO@$6F3< zzrNwH>BzEo1a-mu*ESt~^Nj84_iaDa-FA(+Q6M}X`LwW@k2Ud%SNIs-|2!X^dNb28yDi^GErnZX zWo}u1{`T)L@ss(mPOjItr?&V0RGbhHMnrF&<>l`k5`y~l^MoWJv`@Y}=eGCDW^0?P zt(hB=3U7%bzZ?2VbgAuPXKo?e(yYA!bG1o=EcUMei~Zai$?ws$*k{3|cL z#Y^^{?YVHKziXFecczoG{r=_Jbumjk&$K^Pen0qzba$UXFCQ8iFEYqrA!D*wS3xRORM2kAMhcz}4W|W^Z*h*S=QP zYWC;uir+9xhzi8DFXF`?-rCdG?L5@D-M+n{qmk?7*N8mpYSv|J%ud%`t{td8^A~>V zyG2coCR?M;ljY6wWOMw=5g+;^dN^9NHn6T|wO^RKGgD|9oOyMAh4&jL=Wk};l&-Gr zfj~#obKd7{%j_97Nhy|Ri{>6n+L6*)x^{o*(efkZM=JJI@7>nx`KQ00Utzzr6}De7bOAeeyKSUvbx_K;uILtzrE zy5A>k)K2mKUktB8GNeEnz6;VJXY@z$HIt0*gJQ_Si(opw6SDAHn0&u?!KmGgS~6_J z*TxELqoXzx6yPP&jIt1^TpUe_mrTXzx`WuvSet}p1eO{I0Wp>#n3+9=?G$jsOyUop zW218Fs2sD6_CuY$gGST64)*T)ABpvhfN3xjNS3K62RNJs6OPVWNRhd)2yMTN8iJ?F z>Kw-HgZP?ad29v+S_tkyH`=biw-@>t+d|OCVWpXrzrBqa3D=7a1KvXWqnJR2p|0rq-`xjuGrqbwJ z*OGUz^O%dFNIAL-S+;;n#jEjB>;H^jN#<{2;?kqna z$$p=(xYY6l%WeQUK?ozGV`A4OY}lBzd0R?q`mVkEWlYw=L%I2dM}JXNTzaznl%g8d zY8rISZJlQgCX3zW{p10XAqvrmL2{IdvQRe4K{6?l$&idfG8)MkB$FdqCX!_#SvHd8 zAWDiT977?BMihf6IifNVm4&EmMCBk_if9?4aY`D|45H5}ik%9r+zfpjIu?rl&o%O=wU|lK!`R8VxQCv& zb@++L+)4~f@#02^##aW;!6fl4aa&*&<_Qbg^yPixyh<&1(3E?QTOZ^a*j*K5&-9i4 znXO)*%k572@b1hd=XZ{`J#*$c;}>PDhMw2?>mAzuv$kHd$=G4-uyps5Y%vQ% zty9vSp?HQ9UVb^CdAH+Q-8VLN^6ww`2QFBL-42Hn^N`hV9mEk`E1Wo%&0pRvc5roG zt`1AL;)csPYh%?Ww${eh^}MC98&8w$gCBQe&o7sw#YgrXI`G_{x>MEF))Hrj$2esC zw3NI(K z-3A+JGFi;#6swIVl51bd5DyG_hX(wCiRtSj;|uS-bN`+DZ=^anfte#11NUTi*%-N$ z%xT53v&%_hht*-TZ818Hp1$Pa!h+O$r~X*R*4|y<$blA@&eGJ)C7x7qaVDkhc;A^f z>&I)gf!djqf3n|ke&+c!_}dT3(3E{)@apKtm2-;u;~#Kzpx#TZvLWYTs*BxIuO?@9-Bk#`iv5~#EtrOkjhVkC9w&Biz zvESe}xLh90-nq}4zp#8|8f*7;Sp0(H#`}jm++SNs?*M-bgTc{2V8nOKeav*+ zTx%$;>N=`F^qbPLDt~L)bnCVD`S$saOFeI%pLBljwX?J?5uICJSt18xx-{^ZE9+1Ztik)**hIC-LAQF;d4)Lc;wX! z!Tw-i+%ntu>((n>q|J(NiM7ksX)rgFZ0X7Z-nYdrj>SJJ{tp?ZW^y-IB>e23KtwKL z3v{MW_we(B8>h1%Y1I`$39eu$1OacwZ=2l>GkJ81EmSKjs#m?}bk_9{EhT zD~}&c27;Jdga;xaj(9{of**hi&wzET0SH71at9(_A@-Xuh1t)NSiHI0nU5fFVE`WH9)^y=x_K3&yNJxZd|LqeMwjJ~2Lc+~bXeCw1E@iX(P{jKF2)+d5o+w)2rpsO81~ZQI2r5@=M?Z2@V*l9 zEW$Gb5g@^H1ZLh&^CtpnSn?PkE-bf&Ww^`XJT%7qiNdrx!haw97veLBAQ>`%P%HHH zK;kNxaCUx$&?|L%Y+K8UKPYhbc%8&~1+WRn2_OyjU<*HZA~4IsQW}<2SknIjF(u5! literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..d87455d0705e834b0ab2fa459a3e8c384d393605 GIT binary patch literal 2020 zcmd^AZBUd|6h7~=yX-Cth_a;kwSW|)>As%}sOZ9inJErPgHhlL%UO}-V;2-0C`(Xe zL9s|fQz5q|1H~~l8=FjJjLfD+ry6G%#~;n~tHvB^7hfGZ@8YD>^sk@YJNKOPoO{ka z_nv#_+`M(`^1uMwAq>pfxw+EiPW7I9VA3r_)P ziwJKhb31CGm^n)G3SR4SI?6w@7hfmeyM!edDW;5Rza)Es@I05hzR~z|SSx@g1%NTS z9gVeMUrSRkNJCrga65J732R6^Pq?qP##=ve6gXP{Bf@410bnOjP^*Ap7;Slj+ufu{ z8Np}>mN3CmRj@QHI9)Br7{liD!Cs$lk{ZKj1DqU-?3cCoua2+K1e>Bq$7f6pw!}aV zEk%ddKse|j0wN(AVqhA?!3>xMb0HCuAqD2cLSR7vD`db@SPt2c3oGG8$b)<+gd!-0 z5^z8{AXI`IYQYOzpb47cb$AonpdEa$2lhb^9Dsvx82aECdn1<=dT99Rt<&fo(6_6E?m5{X}n}%#Uau(#sheM7>PC!mXPD0L# zTpDue$Xk$Sk*6hj-$fqHnj)DaR76lFkiYTBUq9CDQMIjA^bQCQpvM6#W z@+i`VL=+_ytth6Un2wSKB^D(PB_1UKCEBlqk~O=gw#l;zUG?UavQ#r?v2bQvdCf+r zxuD5g?{s_3E33Lrq1jedWzJX3z2Rh};T(Ra1$ zcK1(xpMS6O5BVGzD^wxD_i}wv|u4$^PJ9770ATFRitQ+Y5c*nq_P&)aL{J?Z^IFNed ztgITeX3B-KW-#@5^}W5n^tASN^!Dh2$?`>0#BaerP1kzAZvJMsuK)ecuKu~+%0_2{ zQ<76N<5x$i z7zQduOBHLBSuiR6f2ooKr7QW<4^tjSLRsn8EDmM$$;4!VN25p#D6QNS6$xXSFznjgTl|v=g2HBG_6nbYFGchrtL?vXSt~4#Iq5EOfdh)jr zo|IJ(MQBnEdqS^%Le@YmWInRdhV)1!y8$*rDU^YWO8F+J4h;mJbY7B`vR(yFLKXBQ z<&%WuQAM^Mc!`iFWK~0cEPWQrepE^X;<3aH#05};nYfy|qR&=N1hx=WFn}>cXNBlw kR%|3^)3DJRp*HcJ@*n<7Q&uq0w>2G@Do1@a=pNhr1#b%6Y5)KL literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..737f85a4610751c01754268c4384e71cd502b3bd GIT binary patch literal 3716 zcmds)iC2`@6~ONs7C#onB#t#=bQl;j!;R(&qH^FX(&cyYJomz295! zd~@HbS6*2Kp-=+>AX&Czh2-NayVU?N2oQSZnKkiCZ%e=Y1Hhzd%$B)o&6DbESNt`A z@VA)0F*zqGA0kO2z(mwvPESorIl4UI3P4y5)Ai}hF!^5aX4c-q^qBOV;*AO(Oxpa=*d z!6_v8MIiRR*du zQk99Sl~m0bHC1bcsxeZHiE5Qp ztD;&p)v^(_RI8&}J=Geh)=0G`s#8*(it5xW21~oNks6k5&I%;6cF;Ih%8cfuvq(&7rs;N;!jaq8d zQKOz3*=mi{Xrd-1HL0jcO-&kV(o&O-n)K9UpeD8%re%5g<%JnEy;veoR!G!JrCPEi zCGYiA$(r(_;?$fX$#c2Md4>6Tg-OM!DNjh2WM@lOWAh@(>eQmt!ct}&_dDizw$~vA zohO*N&14Y6bmlHGpkS_|0V8vhrSJ@Mkzd2B%snV+|b0_p%Z$T zEA+vB<_5>$9p(ZT;g9V2Z@^#J(SHG7vt$1e1a{;>B$OTZ6!IuL>S!V-bBUT5$b7Pd ztROFtmq|Q%jU=KAkX%wk%7~fN5*u+5A893i(oNnVd&mG8BuB|fa)w+WSIGzDBQiw( zNr!gG3AxF-XK9AwxojgbWE85;7!YNXU?oAt6IThD0n9u}H)s5sO4D z60u0cA`y#3EE2Iu#32!fL>v-vNW>u#heR9_aY)1=5r>2v2{{sSB;-iQk&q)HM?#K- z90@rR3M3RrD3DMfp+G``gaQc#5(*>~NEG&t$a)1^FTcF)bg$6b8_W;%j-Khg-ury- zg#UiW{pVdsU+AY{ec|Dsdc!BOFKNixDPvMR^azCEFJcSyk*Q>_XtC&gz`}s$z_mdU zK~s3y$XxM~jd{X6>*6iKeTlq{UpH;Ijslk%Q z@i*@)Sj*_)e(|}U3kNPY-t;!k&PrG$gb3ZQ)C%(**{wO=Z0{Ct{nq*uRqr;Ra9wd- zZM@>z-_&p@y_Jh{2w;(T99?x??oK}+#cw-(jSsobPkNS@3d-cQ=7fTEWyxm$y1{0S z9~tczhkY@8L)_+TYijqL^7AjcTIRW`?bUX3?FM18IjN3wI9$$1$Ap|JZ}L9d`TC2t zV;gTR7C@M8+O)VL_VXljNu8y9YpL7ecDNi{x3t=~x;eMo>5BAQI#}*E_nY@w?v@Yz z?fA`;w_f;W;egF$ciY^ZP5zdSZ8t7t{W$-i@|ZB8R+-G@7j>l#G;zaoMsKhk_-tf? zcER>o{G+e&k2o6bY<^Z>ou}5xS*>=PZI;7{i4!VD=ZIU{eeEr6{$2Y|cJ>^< zeB$DXi*HF?g2*NiZLRRD>h(Lg;h937IBalas@TQ0!#UmJws`AjcC1(~y|Cef^?c^} z;{w;Rsj+tKYSMUw_v*evATP<9h|D;GC|82G{h${tX3Psoe16_jTg1 z;ph>$n7Y%prq>B`vepQXr3us1g{h~7Wqec;uly|^$@^a5BT{Z=+2^$vc&WK)3$4m4 zFDTgl-6ei1AKbZQceb~1 z!!qF=aoD%RKZ-B4U#z<9;Cgnt+GRsm+QuTsjp`a)emUz+*+qUi9&YS+s%Wm<~ zy=QwboEhleW!|0T;H)PgCSP5%rKLWpD!ZU`b+&O(nE6>oZ|$ziH(ht!*82C4a_0}!^Fej*I(Aj})b`Zv zDDSB9TbgP;wT+ElmVJjmDZOpKW8G2FY_@M{scEiuahpd$%zVJv=-g&&bGFpIQQns7 z%i9&Rajp>VkM3B?OFq7}r@zN>sA;=xdt+x4*T=6DyAx^?GShN0^q1=fYtH0S&Ld(ZLcHFe(7V?z`-q3%Dxi z33_U5S8$m>Cjz37v&73{^l);I++#7YdaMLiXEgv(XmCJqP?$&*$PnDqf2SqOmp;wn zbppxbW1#$W5qa?70glSFB`jkKhL_m>lE4twR>}17x(FsQZM+`v3wz)%>On9C7XH*G zc+5^&{9gjELn0(YI=dHSKSzwsR-erv45wclGmvDrZS1G z@))OL;UvySgd?zW3M)fdsf9q0uriQkv?t?=fGrFqd)T#WOwJgSJOOvn4qSbETj z_pASruw^LBggHR6lZtbJW23OdddD}UIJKyl*?#UdknJAUIo7WTrZG;$0^!-rf)6GZ Tzp|B}RE|kClOnboT7Z86WkYAF literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.keep-layout.30,31,32,33.otf new file mode 100644 index 0000000000000000000000000000000000000000..fbd9a4461a481ddd6eca863499e3b57b5453f985 GIT binary patch literal 1904 zcmZuy3rt&O6h5~vE~SG_cc*U3u6w9cHWApv$K2SEWlQ!5hz^$wIw%xqDQnBKz*uQ% z@9pi2cC1ha1*$P)58N1I;+D+4T-4~)XpBUs(PS~2_?Wq6mj%x)^AY1Y`Okm8bN=)A zPj3FZ^W~R!f)d(53iRgOTsmVg$N|78fXuQbzhKk1-dp2v5Yt!!T>u2gBtQ^^qO?}8ZxprXVkrx#iQZaWVldVi zjB2x{bQPVg)6se2aTA@VF=>o-Xq@d0n{!A(j=d($r4~M>d`y|VM7c~9%azGXm9!`x zRVEvwQ_G`*Bg*H5-i-=fQ3Zc8I(;enX>?mO;lDoeA7A3I@@CSoN_Eqxnu8ZiygWZH zsmc2x0Vf0pVVHQ4xFTVs+0tBo`P51(yVxK+XWw{Gm>Usl_$P|Uwvp4Frxy7G9gNUN zu~)tb-PgdU%G$o_>CRube++52?W;n3D88c zoXf>6G#=Z#|A>Z+J#}|APUg(iIx6$b`US zVDE1Vv^Wn2+XAf|d0-kSoEz(54?99^u>JMMkj8HqT2{PLP=%NFY~ty!zCL_R+RWpYadhFbA9gd#By4^XlAslFy&^QAx3ssT8U( zyeImqUsyj_B?KnZKHOmO{=|^}p!gL=B7Na-Z(y5un|-^Z(ppf`vemr)?SlT2P($HJ z!?~vMrg6*Bw&RC~-M{-?e4gVv$)4;$W(FNY&cV=yrvAPQzOW-?4fJ%m2J6G*=Czc& z!mIUZoed6)-PTZBTVGe#!nL@XxmT`KTs`uQFVfR{=t!h95*~1lcD&Vax`kvJ{7RS> zPqWogNAd;J6WF)YMJ0)kPki0tl5Q2HyzmDQ@=3Hn^YW24asTpS*;-gIO0w8DV=`FPg&xqE^DN#bR~hp(NAxJ}%KJCG6I0d>>>Bua%; zAy1M>WEdg#^fzVaYHnKzuR33WZxfDSZ>%J4VXuOKqUPZ==o8CVt1DG@7RU-NNS;+_REpmCQWi}pUQBmh%c5I$Z|*t2-?`_W zbMDPMucW-Z1UNVY3gAseMf{!pq!$3D0GQKz%PMx;gT8hEl@@I&C1qRm_L~)x0E!F9 zk5xO&Zb&6n07{u3v-!TxvCJ zvlKtC5o2%!I7T0lsFKhDp1c#S@#aZq0xLqEzPq1v}jdnX< zD!Y66Qo$>D-auolE-b8*0VUR{S*y$9vbcl{j+aG-EHb$SkGPyI(oRt-eE*tA`$e@h zA+F4dx5a&8+<*7j$9wUk+@fYwt6dCf*Wk6{=aQmQxA1iIU7!mhq?{a@T29slyMumz zN?T7`s3YxsQDNr%(OZY4+HbE=w(sOwZ&$-7m=lX3Sp{|46rbc7Akn=JVP1AMOwQ(ec1P`A%Tk)=x>0G9e15 zSbs1O2&Q<(j@Dlk*zj|Yw&^tCtmTb5YfsI)wpO~Su8eM|p(!?+e2to<46~H`x|Axt zyxb^&kdh_!MRqjwaqH-6DwYn?72VZ2Dd*NSWybOg zXa!Y`|?=>4^?ZNNX!$A+`%Rh{Pd@L#$c1K%}&-_4GE5bPOA_trKF4T6E@6wsVT zYV56<>3nZ|NP6*SDf^z3IX)-O&rS?~*mAk9n{7YxTI=D|!k(AU?>SZ7GFUlvjtv_g zZNa;A1#}wx5=m?YGM~RxmAKlcs!qrJcb!aKo-M_C+x~6unLl(VAV$* zwOhdp4R9Q)pc-soh7;h7E-P$Bn-{SI++YU*Sq*k|DIzPLu%oXBUPb1Kdb#l23$QsF zlaVuET}h}p)OpzdJZdFQ*=~|=1V+5r*Q+m}MGo*xRK{LKzNrZp!5GmIxgh^j{%6P$ RIY@@}K;j!;R(&qH^FX(&cyYJomz295! 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 Tzp|B}RE|kClOnboT7Z86WkYAF literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41,42,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41,42,43.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aa007bac5ca2a8a46925124da8c4467e3b147e5b GIT binary patch literal 6780 zcmeHLeNa@_6+idAw{JfnvTPO>cKLYg3aIP~0-_-_LghnCA{)STH&gk@@+AS;vI~MS zlr}LTTZ#3L##W>0^ux$x#@yZ75gMJ+8LH!?O{7g`OsCVNon*9W6+2@`EAY1GzFib; zn|3njEx?gvPnN3B#{zwPsJs!Klt zFsGs1Tw9-4;NSe!s{jT+lRZ5xUf4)}2#};f+2tAVOS#9@M*vbfQEq7WcJ%DJ+58%| zHv^E<9W6dDXyAT~e+}E?JGzJ3`%-3Vunpt$S36sK295D?8!-Mm09;XLTTAPF*DrSi zX!oFfaVIKtKUSZ^b|=a!I(z(sQYDA|X-@)ZUheMow9Iq!Hvm+29FVi8WzZ{pk=LRe zkM`2emYz1lQ;w$*-)ZdA=P=gK{ zLb|y4M8gAAr>DXNpit?eLY^fkWIW_n1P%qx5EVoeL=-|Afn!dZydV&&%XL{VTCTf8 zIz^kmmRNZkDI_+m`Clv?ec>!;Kh8ORw(tmWJYZS z#o~2(YZj}DvTfFJ@|!EO{?>sPw~Fx zi8Sp3CQlS>5+trGGOQ>p0Fx~{+qRrbN-`P>3yRkZ7cKJduFA4}{s7Uvewn10ewzB~ zOA|9^L*IEVjl6Yfj`We@eQ%PYAIJ+Iop@QkHaB)fzI@;$B5e*|6Y_;4h;(a+PtU-l zEdiVs{lNbjV9~am0WK~sEJ%(37S&0{WCd`(aen3l`Oi;X`qs~H+&^g;8~*mIczWS1IdG1c=tpG79E6V=@se)rL7kgqEh-KijmjU7=r^pRuN8xOSA>rW1O$nucfmHT43SjzL z;u==JOX{xQvMju-&DZ!))Z#{@6n-E3&+_Ristu4P%)z*79qjsaA&a4jWgwP;SO#Jl zh-Dy_f&WDYggwwKI3XbH#Sc2tV{83RKi-ohv_$k!$`}+;qZrw zj5nDmGy6zkHs$zk!Z(Y8y@qO?t{@>Vx+h3@FMT#WsO6g)9hBH5sd7gJCCv`X*(q6V zbx__eRZ%{xs?KF|O93gcr8OW`Nu4dNRLD|lY-kI(^CSxOt{q4lTvl4TY?0z`csHr3%bI zH*Ss4UJ_qUZ*iYl_pEF7BDutr5HU_d)?r zDbw9&)W>T@#w{x?$Vp3NTtZpVs&vIy?<|j?f{-CjjRS~$x6np2@r9Zg`3fU>X5tUk zGSbV)enwtrB+N*rne;P{e&*57Jo-Zk8O)cFSw=E5(5{J*{fxZLNSKk08ED+gNS=gt zy-08&z-l-GBY0mq2=CzObt^m$&qFgj21Q&coQ4p*2-9d~l$*iG9R`WFLYzrmGL{pi<%7LO@*KJ@R!sI1R5*kd8AhX)mjAy|Kx zzvG?=YzM;mZ0ojIvj5Xkcz5@8&I$OU@H3?3qtVK;iw-1L1{O8 zhWfg}+|k$eB$&Hf{5!#X+k@E>Pl3;aQ6iosx?d93A7-29vbij71xDo|3p1YcHy=~W A=>Px# literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41,43.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f3be30c5bf8ed5cc5d5a77c0cea4a380d1f7a5b0 GIT binary patch literal 6396 zcmeHLeQaCR6+idA=g)-3ah zn~uW5fDtT0*MBxfKd2A`CM3AAkeZHG%A~Fcu|c~HsYsL9q@s2bgG^#tmlAuw`|M^Z z+J`i45)!^o_k7)R&OP_s`|f-95+kBw0EH}_{;nS1zPl!f)=ojHcJ_SjE5_elJ_P;* z`1`wh>KhZ=ANiQbatVAWG8T?eQaVnwdJ_C-WM4w9d)aV|sPrT7y@Ro#vHe#=ub>_J z?DSAL9wQ^IhQ9>b3x`Gz41QzcnGeubP9%kf`^P3%6&5rhARqYV;el}fXCuG<4v|6l zYZ->X{4>Lw=zku3)$mwivUHJ+5E-jbkB&wo;Uhpywf?HD2^-i$&v!%oz0}o?g)&8y|>0Ke+f7QOOCk?;wc~m##v`$v|f6O_>V{ zi>t~5^b6voB(eY_8W!9t( zH#4W~Vol5iEdOfh_><=(_sf#!7fW}uPp-0q>Bn?@(J$GhpAw_}nU9oGuwFq zx+u8bxeP`YoflYm(RsjG>p!~VvSqgH29}qfN9TIQrBd-N&DN@>Mq1;lsd25BN=j_j zrpA^n%0)-|49-Cu^J`bw+BH8fd+CRB7tWst(tlKD zuEp7_Yza#YtGt#DQ7QG3PH-rzAS0=Y^f_J={trM0bPZu3a@0l8maj+(AL|T!b65q%#R?*!mzRmbL z-$MJpSdrzU$!8#+fqVw?8OUcKpMn2J29$#o5`LA(ael+8$uOEO#P7DKeg(!+xH=>pUV*O~?4D7>Q+y-Dh zFvH@+>dR!nYdCW$b4k;NfUxROgsv!J8E?(iYT#|TTFc43lbig3S;n3Y&auqn{IQBz zlf1jn!QmtV$3?zf~ zDyN>n9>Cs!lY4`XWpW@GZ1r$OxPb+z89htPky3n~m1s=K4(@Zp?b<32?82Q!tqn{(1r~C!b0t z9Z8JfIzN9SKga0v0`E!zGSEK9ru=XP$@^GS<;aw*B_aP8-ORQegY78#GGp z-qu`QDr8FE-EDPcg3`6P*OwIuO8@O|b~HK!WjMV5{#KWuj1Ld_Z?g-^)Z5-tqj@p! z3+-&F5VC?t`*&sa3g1s9BW*%KZm0<{~mA)0_)7#jC#dU4oC;Z^jx z89g@97P?*IL~e9){<#^sG!jw{76!bR0U3= HYO4J^(HM{J literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.41.ttf new file mode 100644 index 0000000000000000000000000000000000000000..44c329eb1e928c5c3458efe47487f5804a9802cb GIT binary patch literal 6032 zcmeHLTWph69RHuMU%y^fwr-AFyN$1uaa+sAm|VsJn{*wM%j!DuE77sq-N233wSys` zGhCdF+~SKt!NdoGF_E*rFbpO6_+k_j6L`RcOt<>tWklog17k4UQN?Fx7PvFqE{h?MtWzp@ts>u09x(D#8~ z(A%FFn$b+}LVttE{6Swd688K3N8!5>3kvjyhhp*z1`GJbuvd47`@4$vdk-SNTbQpn z7L6y;{nSY`3u_`ZHqaIOsC)cNqGGITdp!$v+HkQ~y-$OUziWAZUQm!@gcmppcQOJ;h@KTq$Uc(D6( z_QN@L>+-}kcIrBtJ^71#?DshPlue)US>3WL*3#pPWEq3rhJ)GShkc+EiFw{PYu+d&?Hf}>9j;Du@8k> zuEiNv#bW>iFUez359qx@(j4~b}Z%C&z znEp}camxc<*k_t<1F`|VoReo0w*<6N#*T-^So#P*Tsmqo>}dCL=26wgoj%Swyj=2d zw$$b229N6JhH`(a<_@VzHQC&mRQ+mixRcA}`Upi=GE}K@3TiunZJLYMhn!PnS145L z<+2C^4_GHd2(T*~0HZFdobYm^XOqee3j^A78XxvKdA%>>bh*?k-s zaf}TI5DJ6a7!Lkv8oTEjHYVg`C`tWYv)|JL;B|iB-<<@cNN4m9}f6OUUQEL`w{Je308JI8{)J z*`*4WDrCTmg|$`XPCJ<^=px&=cA2XfP!A=r=U!y_P$u_7L@t*p1>N1pe${TD;Mffta~~(tt=I?yhEK^Gj_Jysbr*1 z$YvDVZ5BmP`E}KcN(u#4P+zm8RQI(98Zuc?swmHd1!O+A)OrVtr*;TQgWCs;X?~`h9QJ!2&#kdQ!V_z>; z=Fm)bjtZ44l&{>zZCs|A5C?CojQdY&N6*jnLZkrpDajIVNpAhCTOFO_fZ$PX4*{=S_Y~Cl0J;BQ(keM>!LU; z2WStl6PB&;ei=Q1-U?X{4Z<%Bi*34H9R5*66>~1bj4Nmrt<^b^!K#P+y^ll?I~ZDe z*WcU`F#NolNx~jhpzmH*thbDq&%e11a{UKW-`_+KhHk~G*O9F29g%$ledOpF=z4`5 iec{Aza!h#$TNbH~M-V0B$+G(;gM^VHF(9LIqCWwxBVz6V literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.43.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b0a1ea3dced025ae7d9ba1888062ff847797a0e1 GIT binary patch literal 6088 zcmeHLeQZ-z6#w16*VlF%tSjAM?HI3=ZH%>SY;))sFkH9EhiqEO_6H<)1&0D*EMrFi+d7i9;HHRLw%@c5$UR1KM{l@qX!EaK2dMurz>f6=M#3;- z8pZQbe^%e%*4}|1g9hp=pxV*jJ+#G=m01c{J%FL2zbDXrY2f2~0Obp^ujwa6#v7)0 z=>Gdjp3^@R*)nA@TLhTwfcc5RP%zMOU=4K{9;X4V8VYO)%WEVH$pXK+F)-9)yVtu7 z$g|S@?BUQzBr$|;!ZSzohlhK@FZEt{53rLxTMmZJiEri8#uF$&GdLPGo>}gk$Shpq z*9D0L$woq^m1loMbi&4XMw#Y1?fl8lCF?}~H6kzgsA2(AWVec(8>(${swy$vU0m#* zZOF~F+o~#S7Rslc@vqLss1f_gVET z@yp*Fd@g?e;`n#*vwIE`(yqjLxkBDYNLR4j&gaY*%xA3arwh)@pIIu*BP3dA5z>qFsQ4!QJB#rKZ2os5OQT9>Af179 z2GSWwXCR${e=-B|edrSZGN!?J7X79yzu=6ouvA>XSE5~&BtOC)r(G3{dyQ4JgPoOZ zrBmn?zc#7gnH+VRk=kjvNqc(A=sHshJ z`_-r#UEUp4o7Db5Hid(hYG`_><1<(Wr>muDM-&M>Oh;(g^;Lk6$ZKGF-2yzgj^VXq;p_S}7DYZkJOi z+%C6^5c+*yZt<*a*BS|;iy&rr_}oS>&-Cz8YO*{NC2UNMwrfZ0>3Ibw%^2&@j$*EK zHtctDH-S~hCasjWlunFtiig*aO{%zEn<$0Pc@(A6Ss&@M$~ejpV^%{Mi{&t)M{;T_ zikw!M%W#C$6-q(7QLvWUk#+qV1O2($Hl{GVkE^}x1>ZD!P=doz8PUxoCtyvaDa8v6l zOA2xXmt9|7I#c(xwk}JeLd=$Fq5&kITWqO=jl|Xqa=#$u4i<^E2oe%xw;+cENeD8_ z!A6D0sPGsS9;31BLg6dO_kzqSB)j#3>=xuhK@x&2EhOWRAmu9Ag@}lGF%SE&15s?j zr?g{TjoYz{z7%UwZK%UB#PAqSkd-~&1-s!{sFDkraxLugIIOg$+m#u}Wv?PfIgY8y z=XCm(EGCLWvsI>ZQ*=^I@{DF=XNot_iQPbom#)&wSMf#^6RxDMLi6}}n!6!{u@%GE zfIjpiLMuQeDzJbqmCjc~boF5nJtQs1Mg%dRxMidnq_*vf*N86lV1z7(v59CmS+DHVDxD< z!$50Tw!V60(0B{Md`+u5NUwh^_4Q2zVN^3{)Jq`i{f^+);Xye1hI{UUV=xfe2*(u< bVatM*BSDIi^kk{^l97f%VV8+AlmNd2VUe$~ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.CA,CB.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout-retain-gids.CA,CB.ttf new file mode 100644 index 0000000000000000000000000000000000000000..16ad9d515278563a9b4358327dda2455f0627f4e GIT binary patch literal 7932 zcmeHMU2I%O6+Ux+cfD@B>uf^owbysMu@lF;S=%vA>bkCzuI+}TwQHO9ZXk)5_1ccR zjyL{`11f|PAYHXhfwm~El0sBfrAY1Uf)oe!!4KwvC_=j)q zx~?6GpC%M&yEB?I=bSm`%$YNHX6~I!jEGzS3OU<4+PlIN`^SmAr@%GZx<0$dcJ`kIQzdv!JPuAbKfVL7M>C`~)(4@=mMEgecFXs=$qrLNkZ+(%- zJ_Gss0Wk7@V*4K2LDJ@dp|MHhg7Q_g&%>OQ7>-5h+pHA2(?psw6rD_}HL@KvbjUaw z9f}uzDfk#sX&8OFlf$E9OGDHPe@xMy9Em3{^xgOwk>_Q!?fXF z{JVuGq~FZPdXKD%Udc_-;~0V?l=-cL9n6#g+;R*bS@@&$==`r`@4}0c zTUxjH#CMga&MszXX(>C8`W~r*D&d$;=jmCthuo{Y!kng^+FW(binP8WJxDW<{?tv< zg~}ZF%vRS3`_@P`uT&xVU|*y2yS;0yW6Wu%lC^Hhs=r^69X#e;V_V3sm*#khu#G5^ z%;*dr`EF7Lg|tpQ7Sd+YmT8Om9|U{of1Qufe<#00xtxo@Cp`l1(1(%##@xC5p+{gF zP9||GNdCf(=TF%V7c~Bvifq&bb?&g}3e1HoU8m9fyaNj`ox zz}Yrmkjnw1mCNO=ou)rxq>R+w-jva53`BdmQf}2~h^HbUgHxAz1hCum@#ctU1&v1{ z4MDC5Gthu^Dgpz8%LY(etk6P`tATw6mn%BVhfIDl?BUJfh{xwMTKIH_$*02}UnCOb z+KP|x^|2$HvfkCC$(uc#BB_+H*Jb*B{A4QSNnr%<(bH?`Dg2^XBQV99 zS2GZSmMM0!1Ex^Y$aMn0IWd?Eew8s z6{jl7FsD?-GA;&q(bZ60?s1Z>iY~JI@80fn1HCAj_wU+jVRGkvb>$lcPdW5JV^xvB z)cU}kMFj%WjvZ{R^$1M=*746b_yuPBa(~BN#R9W;x71fyR`Mo#_SKgPp5tr14`$`^ zuVzxQM!~zo?aa4p0$bNuyQRb>u!82g%2G?$*|9t86=ez?ItGxPx6Hl8Y&3INfUgJ; zDrRGub^(S3I3vIt0xStoR?NnQ#<1TrmR=-7_K`zr zAUFPEIdNXOwN12vy+ST+n$~Go@dqZGblAaaRqP-Sp=5D}6?teGm+;qSa2c0Z@s(A$ zN)_-ctE*uhpQrn1n38mYM(7Cj(*TWO2dJfLszElW4XwlACvZPx&|W%9G1?AnH#iB@ zohw?S78R#aNRH41U@s&)q5TDvF_cd5`e__`QAj*&$&EsP7*<7}+tK3=+DUg?l<;8Z z8vWo+7Q_yQv^4k+?id+f8*C(D4=b>CuRM&`ODx>FzZ-mOBeeE6VT7UNVbo2eSnb8J u6C(*K?jMOiO2vuj*ikB8(GapMRy!Jlm8>RP-Y*$A3^Vp4KuOv!J@9wO!<63u literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41,42,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41,42,43.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d0d9d5a288e34361e8dea71a784c53ed1b33e0dc GIT binary patch literal 2972 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 Oj(W%=0gKyK68(RGbygVw literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.keep-layout.41.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9e6dd28f54332c366709ebed5c3dfbcb81153122 GIT binary patch literal 2196 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 PlEK69#Uw}xU0wSYaB@c= literal 0 HcmV?d00001 diff --git a/test/subset/data/profiles/keep-layout-retain-gids.txt b/test/subset/data/profiles/keep-layout-retain-gids.txt new file mode 100644 index 00000000..f4787ade --- /dev/null +++ b/test/subset/data/profiles/keep-layout-retain-gids.txt @@ -0,0 +1,2 @@ +--drop-tables-=GSUB,GPOS +--retain-gids diff --git a/test/subset/data/profiles/keep-layout.txt b/test/subset/data/profiles/keep-layout.txt new file mode 100644 index 00000000..56da0ffe --- /dev/null +++ b/test/subset/data/profiles/keep-layout.txt @@ -0,0 +1 @@ +--drop-tables-=GSUB,GPOS -- GitLab