<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>35695</bug_id>
          
          <creation_ts>2010-03-03 12:22:34 -0800</creation_ts>
          <short_desc>Move files from WebCore/platform/graphics/gtk to ../cairo</short_desc>
          <delta_ts>2010-03-04 00:51:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Leandro Pereira">leandro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>195706</commentid>
    <comment_count>0</comment_count>
      <attachid>49932</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-03-03 12:22:34 -0800</bug_when>
    <thetext>Created attachment 49932
Move font code from platform/graphics/gtk to ../cairo

The attached patch moves files from WebCore/platform/graphics/gtk to WebCore/platform/graphics/cairo, since they&apos;re not really GTK+-dependent.

These files are (almost) identical to the ones used by the EFL port, so they can be shared (see bug #35539).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195707</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-03 12:23:52 -0800</bug_when>
    <thetext>Attachment 49932 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
[5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:102:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:106:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:119:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:157:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:163:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:258:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:259:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:48:  font_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:49:  text_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:101:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:126:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp&quot;
WebCore/platform/graphics/cairo/FontCacheCairo.cpp:43:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontCacheCairo.cpp:48:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontCustomPlatformData.h:27:  cairo_font_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontPlatformData.h&quot;
WebCore/platform/graphics/cairo/FontPlatformData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/cairo/FontPlatformData.h:104:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontPlatformDataGtk.cpp&quot;
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/SimpleFontDataGtk.cpp&quot;
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontCustomPlatformData.cpp&quot;
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontCacheGtk.cpp&quot;
Total errors found: 20 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195717</commentid>
    <comment_count>2</comment_count>
      <attachid>49932</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-03-03 12:48:54 -0800</bug_when>
    <thetext>Comment on attachment 49932
Move font code from platform/graphics/gtk to ../cairo

I think the move makes sense. I would like to have this change be done in two separate parts, though: one patch for the move, one patch for the efl-changes (adding the preprocessor conditionals, for instance). This will make it less likely that we are going to cause an issue we will have a hard time identifying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195734</commentid>
    <comment_count>3</comment_count>
      <attachid>49938</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-03-03 13:24:00 -0800</bug_when>
    <thetext>Created attachment 49938
Move font code from platform/graphics/gtk to ../cairo

Updated patch, so it only move files around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195735</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-03 13:25:48 -0800</bug_when>
    <thetext>Attachment 49938 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
 [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:99:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:103:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:115:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:150:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:155:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:247:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp:248:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:48:  font_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:49:  text_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:101:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp:126:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp&quot;
WebCore/platform/graphics/cairo/FontCacheCairo.cpp:43:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontCacheCairo.cpp:48:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/cairo/FontCustomPlatformData.h:27:  cairo_font_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontPlatformData.h&quot;
WebCore/platform/graphics/cairo/FontPlatformData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/cairo/FontPlatformData.h:104:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontPlatformDataGtk.cpp&quot;
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/SimpleFontDataGtk.cpp&quot;
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontCustomPlatformData.cpp&quot;
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/gtk/FontCacheGtk.cpp&quot;
Total errors found: 20 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195798</commentid>
    <comment_count>5</comment_count>
      <attachid>49938</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-03-03 15:50:53 -0800</bug_when>
    <thetext>Comment on attachment 49938
Move font code from platform/graphics/gtk to ../cairo

OK, EWS seems happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195932</commentid>
    <comment_count>6</comment_count>
      <attachid>49938</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-04 00:51:21 -0800</bug_when>
    <thetext>Comment on attachment 49938
Move font code from platform/graphics/gtk to ../cairo

Clearing flags on attachment: 49938

Committed r55510: &lt;http://trac.webkit.org/changeset/55510&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195933</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-04 00:51:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49932</attachid>
            <date>2010-03-03 12:22:34 -0800</date>
            <delta_ts>2010-03-03 13:24:00 -0800</delta_ts>
            <desc>Move font code from platform/graphics/gtk to ../cairo</desc>
            <filename>move-font-stuff-from-gtk-to-cairo.diff</filename>
            <type>text/plain</type>
            <size>63272</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDMtMDMgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJv
ZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBDYWlyby1yZWxhdGVkIGZvbnQgY29kZSBmcm9tIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ayB0bworICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlybywgc28gb3RoZXIgcG9ydHMg
bWF5IHVzZSB0aGVtLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1NTM5CisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2FjaGVDYWlyby5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRDYWNoZUd0ay5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDogQ29waWVkIGZyb20g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaDogQ29w
aWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWly
by5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0
Zm9ybURhdGFHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQ
YWdlVHJlZU5vZGVDYWlyby5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQ
bGF0Zm9ybURhdGFHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcDogUmVtb3ZlZC4KKwogMjAxMC0w
My0wMyAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDU1NDY2KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAwMywxMSArMjAw
MywxMSBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGF0aENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXR0ZXJuQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Ry
YW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWNoZUNhaXJvLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRD
YWNoZUd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5j
cHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIFwKQEAgLTIxMjksMTAgKzIxMjksMTAgQEAgd2Vi
Y29yZWd0a19jcHBmbGFncyArPSBcCiAJLURVU0VfRlJFRVRZUEU9MQogCiB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhR3RrLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdl
VHJlZU5vZGVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVG
b250RGF0YUd0ay5jcHAKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRQbGF0Zm9ybURhdGFDYWlyby5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAKIGVuZGlmICMgRU5EIFVTRV9GUkVFVFlQ
RQogCiAjIC0tLQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fj
aGVDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2FjaGVDYWlyby5jcHAJKHJldmlzaW9uIDU1NDYxKQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwOjU1NDYxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2FjaGVDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBpZiAoIUZvbnRQbGF0Zm9ybURhdGE6Omlu
aXQoKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NvbnN0IFNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyNpZiBkZWZpbmVk
KFVTRV9GUkVFVFlQRSkKKyAgICBGY1Jlc3VsdCBmcmVzdWx0OworICAgIEZvbnRQbGF0Zm9ybURh
dGEqIHByaW0gPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmZm9udC5wcmltYXJ5Rm9u
dCgpLT5wbGF0Zm9ybURhdGEoKSk7CisKKyAgICBpZiAoIXByaW0tPm1fZmFsbGJhY2tzKQorICAg
ICAgICBwcmltLT5tX2ZhbGxiYWNrcyA9IEZjRm9udFNvcnQoTlVMTCwgcHJpbS0+bV9wYXR0ZXJu
LCBGY1RydWUsIE5VTEwsICZmcmVzdWx0KTsKKworICAgIEZjRm9udFNldCogZnMgPSBwcmltLT5t
X2ZhbGxiYWNrczsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnMtPm5mb250OyBpKyspIHsK
KyAgICAgICAgRmNQYXR0ZXJuKiBmaW4gPSBGY0ZvbnRSZW5kZXJQcmVwYXJlKE5VTEwsIHByaW0t
Pm1fcGF0dGVybiwgZnMtPmZvbnRzW2ldKTsKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZv
bnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmaW4pOworICAg
ICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQoZm9udEZhY2UsIGZvbnQuZm9udERl
c2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAg
Y2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOworICAgICAgICBhbHRlcm5hdGVGb250
Lm1fcGF0dGVybiA9IGZpbjsKKyAgICAgICAgU2ltcGxlRm9udERhdGEqIHNmZCA9IGdldENhY2hl
ZEZvbnREYXRhKCZhbHRlcm5hdGVGb250KTsKKyAgICAgICAgaWYgKHNmZC0+Y29udGFpbnNDaGFy
YWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gc2ZkOworICAg
IH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCit7Cisg
ICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2Vy
J3MgZGVmYXVsdCBmb250IGhlcmUuCisgICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZh
dWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgor
ICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdGltZXNTdHIoIlRpbWVzIE5ldyBSb21hbiIpOworICAg
IHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKTsKK30K
Kwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkp
Cit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA1NTQ2MSkJ
KGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHA6NTU0NjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKQoreworICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KG1fZm9udEZh
Y2UpOworfQorCitGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQ
bGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRSZW5kZXJp
bmdNb2RlKQoreworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udEZhY2UsIHNpemUs
IGJvbGQsIGl0YWxpYyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VEYXRhKHZvaWQqIGRhdGEp
Cit7CisgICAgc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oZGF0YSktPmRlcmVmKCk7Cit9CisK
K0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hh
cmVkQnVmZmVyKiBidWZmZXIpCit7CisgICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1ZmZlcik7CisK
KyAgICBpbnQgZXJyb3I7CisKKyAgICBzdGF0aWMgRlRfTGlicmFyeSBsaWJyYXJ5ID0gMDsKKyAg
ICBpZiAoIWxpYnJhcnkpIHsKKyAgICAgICAgZXJyb3IgPSBGVF9Jbml0X0ZyZWVUeXBlKCZsaWJy
YXJ5KTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBsaWJyYXJ5ID0gMDsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgRlRfRmFjZSBmYWNl
OworICAgIGVycm9yID0gRlRfTmV3X01lbW9yeV9GYWNlKGxpYnJhcnksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRlRfQnl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5zaXplKCksIDAsICZm
YWNlKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgYnVmZmVyLT5y
ZWYoKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjYWlyb19mdF9mb250X2Zh
Y2VfY3JlYXRlX2Zvcl9mdF9mYWNlKGZhY2UsIDApOworCisgICAgc3RhdGljIGNhaXJvX3VzZXJf
ZGF0YV9rZXlfdCBidWZmZXJLZXk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3NldF91c2VyX2RhdGEo
Zm9udEZhY2UsICZidWZmZXJLZXksIGJ1ZmZlciwgcmVsZWFzZURhdGEpOworCisgICAgcmV0dXJu
IG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGZvbnRGYWNlKTsKK30KKworfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmgJKHJldmlzaW9uIDU1NDYxKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6NTU0NjEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAorI2Rl
ZmluZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKworI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9j
YWlyb19mb250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YWJsZSB7CisgICAgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UpCisgICAgOiBtX2ZvbnRGYWNl
KGZvbnRGYWNlKQorICAgIHt9CisKKyAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOworCisg
ICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwor
CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7Cit9OworCitGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVm
ZmVyKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA1NTQ2MSkJKGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oOjU1NDYxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVk
ZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQg
Rm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX2gKKyNkZWZp
bmUgRm9udFBsYXRmb3JtRGF0YV9oCisKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaWYgZGVmaW5lZChV
U0VfRlJFRVRZUEUpCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxmb250Y29uZmln
L2ZjZnJlZXR5cGUuaD4KKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorI2luY2x1ZGUgPHBhbmdv
L3BhbmdvY2Fpcm8uaD4KKyNlbHNlCisjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2Vu
ZCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xh
c3MgRm9udFBsYXRmb3JtRGF0YSB7CitwdWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisg
ICAgICAgIDogbV9wYXR0ZXJuKGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAg
LCBtX2ZhbGxiYWNrcygwKQorI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgICAgIDogbV9j
b250ZXh0KDApCisgICAgICAgICwgbV9mb250KGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkK
KyNlbHNlCisjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgorICAg
ICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURh
dGEoKQorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQorICAgICAgICA6IG1fcGF0dGVybigwKQor
ICAgICAgICAsIG1fZmFsbGJhY2tzKDApCisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICAg
ICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkKKyNlbHNlCisjZXJyb3IgIk11
c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgorICAgICAgICAsIG1fc2NhbGVkRm9u
dCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOworCisgICAgRm9udFBsYXRmb3Jt
RGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKKyAgICBGb250UGxhdGZv
cm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOworCisgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKKworICAgIHN0YXRpYyBib29sIGluaXQo
KTsKKworICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7CisgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3ludGhldGljQm9sZDsgfQorICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQorCisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCog
c2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQorCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQorICAgICAg
ICBpZiAobV9wYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIEZjUGF0dGVybkhhc2gobV9wYXR0
ZXJuKTsKKyNlbmRpZgorICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzFdID0geyByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obV9zY2FsZWRGb250KSB9OworICAgICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2Rlcyks
IHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKyAgICBGb250UGxhdGZv
cm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7CisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUp
CisgICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
OworI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgICAgIHJldHVybiBtX2ZvbnQgPT0gaGFz
aFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworI2VuZGlmCisgICAgfTsKKworI2lmbmRlZiBOREVC
VUcKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorCisjaWYgZGVmaW5l
ZChVU0VfRlJFRVRZUEUpCisgICAgRmNQYXR0ZXJuKiBtX3BhdHRlcm47CisgICAgRmNGb250U2V0
KiBtX2ZhbGxiYWNrczsKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgIHN0YXRpYyBQYW5n
b0ZvbnRNYXAqIG1fZm9udE1hcDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFibGU7
CisKKyAgICBQYW5nb0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBQYW5nb0ZvbnQqIG1fZm9udDsK
KyNlbHNlCisjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgorICAg
IGZsb2F0IG1fc2l6ZTsKKyAgICBib29sIG1fc3ludGhldGljQm9sZDsKKyAgICBib29sIG1fc3lu
dGhldGljT2JsaXF1ZTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Citw
cml2YXRlOgorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQorICAgIHN0YXRpYyBGY1BhdHRlcm4g
Kmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEZj
UGF0dGVybio+KC0xKTsgfQorI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgc3RhdGljIFBh
bmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxh
dGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NTQ2MSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0ay5jcHA6NTU0NjEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlIDxjYWlyby1mdC5o
PgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKKyAgICA6IG1fcGF0dGVy
bigwKQorICAgICwgbV9mYWxsYmFja3MoMCkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKSkKKyAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAg
IEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKKworICAgIENTdHJpbmcgZmFtaWx5TmFtZVN0cmlu
ZyA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5
ID0gZmFtaWx5TmFtZVN0cmluZy5kYXRhKCk7CisgICAgaW50IGZjc2xhbnQgPSBGQ19TTEFOVF9S
T01BTjsKKyAgICAvLyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBmb250Y29u
ZmlnIHdlaWdodHMuCisgICAgaW50IGZjd2VpZ2h0ID0gRkNfV0VJR0hUX05PUk1BTDsKKyAgICBk
b3VibGUgZmNzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CisgICAg
aWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgZmNzbGFudCA9IEZDX1NMQU5U
X0lUQUxJQzsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2
MDApCisgICAgICAgIGZjd2VpZ2h0ID0gRkNfV0VJR0hUX0JPTEQ7CisKKyAgICBpbnQgdHlwZSA9
IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCk7CisKKyAgICBGY1BhdHRlcm4qIHBhdHRl
cm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2U7
CisgICAgc3RhdGljIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBkZWZhdWx0T3B0aW9ucyA9
IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICBjb25zdCBjYWlyb19mb250X29wdGlv
bnNfdCogb3B0aW9ucyA9IE5VTEw7CisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKwor
ICAgIGlmICghRmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1pbHkpKSkKKyAgICAgICAgZ290byBmcmVlUGF0
dGVybjsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpT
ZXJpZkZhbWlseToKKyAgICAgICAgZmNmYW1pbHkgPSAic2VyaWYiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBmY2Zh
bWlseSA9ICJzYW5zLXNlcmlmIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3Jp
cHRpb246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAgICAgZmNmYW1pbHkgPSAibW9ub3NwYWNlIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5
OgorICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGRlZmF1bHQ6CisgICAgICAgIGZj
ZmFtaWx5ID0gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGZjZmFtaWx5
ICYmICFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9j
YXN0PGNvbnN0IEZjQ2hhcjgqPihmY2ZhbWlseSkpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJu
OworICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjd2Vp
Z2h0KSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsKKyAgICBpZiAoIUZjUGF0dGVybkFkZElu
dGVnZXIocGF0dGVybiwgRkNfU0xBTlQsIGZjc2xhbnQpKQorICAgICAgICBnb3RvIGZyZWVQYXR0
ZXJuOworICAgIGlmICghRmNQYXR0ZXJuQWRkRG91YmxlKHBhdHRlcm4sIEZDX1BJWEVMX1NJWkUs
IGZjc2l6ZSkpCisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisKKyAgICBGY0NvbmZpZ1N1YnN0
aXR1dGUoTlVMTCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4pOworICAgIEZjRGVmYXVsdFN1YnN0
aXR1dGUocGF0dGVybik7CisKKyAgICBGY1Jlc3VsdCBmY3Jlc3VsdDsKKyAgICBtX3BhdHRlcm4g
PSBGY0ZvbnRNYXRjaChOVUxMLCBwYXR0ZXJuLCAmZmNyZXN1bHQpOworICAgIC8vIEZJWE1FOiBz
aG91bGQgd2Ugc2V0IHNvbWUgZGVmYXVsdCBmb250PworICAgIGlmICghbV9wYXR0ZXJuKQorICAg
ICAgICBnb3RvIGZyZWVQYXR0ZXJuOworICAgIGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfcGF0dGVybihtX3BhdHRlcm4pOworICAgIGNhaXJvX21hdHJpeF90IGN0bTsK
KyAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgp
KTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKworICAgIGlmIChHZGtT
Y3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkKKyAgICAgICAgb3B0aW9u
cyA9IGdka19zY3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucyhzY3JlZW4pOworCisgICAgLy8gZ2RrX3Nj
cmVlbl9nZXRfZm9udF9vcHRpb25zKCkgcmV0dXJucyBOVUxMIGlmIG5vIGRlZmF1bHQgb3B0aW9u
cyBhcmUKKyAgICAvLyBzZXQsIHNvIHdlIGFsd2F5cyBoYXZlIHRvIGNoZWNrLgorICAgIGlmICgh
b3B0aW9ucykKKyAgICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOworCisgICAgbV9zY2Fs
ZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwg
JmN0bSwgb3B0aW9ucyk7CisgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwor
CitmcmVlUGF0dGVybjoKKyAgICBGY1BhdHRlcm5EZXN0cm95KHBhdHRlcm4pOworfQorCitGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMpCisgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAsIG1fZmFsbGJhY2tzKDApCisgICAg
LCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50
aGV0aWNPYmxpcXVlKGl0YWxpYykKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworfQorCitGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX3BhdHRlcm4oMCkK
KyAgICAsIG1fZmFsbGJhY2tzKDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc3ludGhl
dGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKKyAgICAsIG1f
c2NhbGVkRm9udCgwKQoreworICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CisgICAgY2Fp
cm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOworICAgIGNhaXJv
X21hdHJpeF90IGN0bTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAg
ICBzdGF0aWMgY29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QqIGRlZmF1bHRPcHRpb25zID0gY2Fp
cm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOworICAgIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190
KiBvcHRpb25zID0gTlVMTDsKKworICAgIGlmIChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3Jl
ZW5fZ2V0X2RlZmF1bHQoKSkKKyAgICAgICAgb3B0aW9ucyA9IGdka19zY3JlZW5fZ2V0X2ZvbnRf
b3B0aW9ucyhzY3JlZW4pOworCisgICAgLy8gZ2RrX3NjcmVlbl9nZXRfZm9udF9vcHRpb25zKCkg
cmV0dXJucyBOVUxMIGlmIG5vIGRlZmF1bHQgb3B0aW9ucyBhcmUKKyAgICAvLyBzZXQsIHNvIHdl
IGFsd2F5cyBoYXZlIHRvIGNoZWNrLgorICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgb3B0aW9u
cyA9IGRlZmF1bHRPcHRpb25zOworCisgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2Zv
bnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucyk7Cit9CisKK0Zv
bnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBvdGhlcikKK3sKKyAgICAvLyBDaGVjayBmb3Igc2VsZi1hc3NpZ25tZW50Lgor
ICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9z
aXplID0gb3RoZXIubV9zaXplOworICAgIG1fc3ludGhldGljQm9sZCA9IG90aGVyLm1fc3ludGhl
dGljQm9sZDsKKyAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSBvdGhlci5tX3N5bnRoZXRpY09ibGlx
dWU7CisKKyAgICBpZiAob3RoZXIubV9zY2FsZWRGb250KQorICAgICAgICBjYWlyb19zY2FsZWRf
Zm9udF9yZWZlcmVuY2Uob3RoZXIubV9zY2FsZWRGb250KTsKKyAgICBpZiAobV9zY2FsZWRGb250
KQorICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CisgICAg
bV9zY2FsZWRGb250ID0gb3RoZXIubV9zY2FsZWRGb250OworCisgICAgaWYgKG90aGVyLm1fcGF0
dGVybikKKyAgICAgICAgRmNQYXR0ZXJuUmVmZXJlbmNlKG90aGVyLm1fcGF0dGVybik7CisgICAg
aWYgKG1fcGF0dGVybikKKyAgICAgICAgRmNQYXR0ZXJuRGVzdHJveShtX3BhdHRlcm4pOworICAg
IG1fcGF0dGVybiA9IG90aGVyLm1fcGF0dGVybjsKKworICAgIGlmIChtX2ZhbGxiYWNrcykgewor
ICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsKKyAgICAgICAgLy8gVGhpcyB3
aWxsIGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5kLgorICAgICAgICBtX2ZhbGxiYWNrcyA9IDA7Cisg
ICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQorICAgIDogbV9wYXR0ZXJu
KDApCisgICAgLCBtX2ZhbGxiYWNrcygwKQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAg
KnRoaXMgPSBvdGhlcjsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFGY0luaXQoKSkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNhbid0IGluaXQgZm9udCBjb25maWcgbGlicmFyeVxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIHJldHVy
biB0cnVlOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7Cisg
ICAgaWYgKG1fcGF0dGVybiAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9wYXR0ZXJuKSkgeworICAg
ICAgICBGY1BhdHRlcm5EZXN0cm95KG1fcGF0dGVybik7CisgICAgICAgIG1fcGF0dGVybiA9IDA7
CisgICAgfQorCisgICAgaWYgKG1fZmFsbGJhY2tzKSB7CisgICAgICAgIEZjRm9udFNldERlc3Ry
b3kobV9mYWxsYmFja3MpOworICAgICAgICBtX2ZhbGxiYWNrcyA9IDA7CisgICAgfQorCisgICAg
aWYgKG1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3Nj
YWxlZEZvbnQpOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7
CisgICAgLy8gVE9ETzogU3VwcG9ydCBpc0ZpeGVkUGl0Y2goKSBmb3IgY3VzdG9tIGZvbnRzLgor
ICAgIGlmICghbV9wYXR0ZXJuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgc3Bh
Y2luZzsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihtX3BhdHRlcm4sIEZDX1NQQUNJTkcs
IDAsICZzcGFjaW5nKSA9PSBGY1Jlc3VsdE1hdGNoKQorICAgICAgICByZXR1cm4gc3BhY2luZyA9
PSBGQ19NT05POworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAg
IGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9wYXR0ZXJuKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAobV9wYXR0ZXJuID09IDAgfHwgbV9wYXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8
RmNQYXR0ZXJuKj4oLTEpCisgICAgICAgICAgICB8fCBvdGhlci5tX3BhdHRlcm4gPT0gMCB8fCBv
dGhlci5tX3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gRmNQYXR0ZXJuRXF1YWwobV9wYXR0ZXJuLCBv
dGhlci5tX3BhdHRlcm4pOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIEZvbnRQbGF0Zm9y
bURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cisj
ZW5kaWYKKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxh
dGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gNTU0NjEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBACiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4K
ICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgor
CisjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwOSw2ICsxMTIsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRN
YXRyaXgsIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSk7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHko
JmN0bSk7CiAKKyNpZiBQTEFURk9STShHVEspCiAgICAgaWYgKEdka1NjcmVlbiogc2NyZWVuID0g
Z2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKQogICAgICAgICBvcHRpb25zID0gZ2RrX3NjcmVlbl9n
ZXRfZm9udF9vcHRpb25zKHNjcmVlbik7CiAKQEAgLTExNiw2ICsxMjAsOSBAQCBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0CiAgICAgLy8gc2V0LCBzbyB3ZSBhbHdheXMg
aGF2ZSB0byBjaGVjay4KICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIG9wdGlvbnMgPSBkZWZh
dWx0T3B0aW9uczsKKyNlbHNlCisgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOworI2VuZGlm
CiAKICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2Us
ICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKICAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJv
eShmb250RmFjZSk7CkBAIC0xNDksNiArMTU2LDcgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShjYWlybwogICAgIHN0YXRpYyBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCog
ZGVmYXVsdE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CiAgICAgY29uc3Qg
Y2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSBOVUxMOwogCisjaWYgUExBVEZPUk0oR1RL
KQogICAgIGlmIChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkK
ICAgICAgICAgb3B0aW9ucyA9IGdka19zY3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucyhzY3JlZW4pOwog
CkBAIC0xNTYsNiArMTY0LDkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShj
YWlybwogICAgIC8vIHNldCwgc28gd2UgYWx3YXlzIGhhdmUgdG8gY2hlY2suCiAgICAgaWYgKCFv
cHRpb25zKQogICAgICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7CisjZWxzZQorICAgIG9w
dGlvbnMgPSBkZWZhdWx0T3B0aW9uczsKKyNlbmRpZgogCiAgICAgbV9zY2FsZWRGb250ID0gY2Fp
cm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9u
cyk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRy
ZWVOb2RlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHAJKHJldmlzaW9uIDU1NDYxKQkoZnJvbSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHA6NTU0
NjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5
cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBn
bHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNo
YXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYg
KGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZvbnQpOworICAgIGlmICghZmFjZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEdseXBoIGdseXBo
ID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOworICAgICAgICBpZiAoIWds
eXBoKQorICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0
ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2Uo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9udCk7CisKKyAgICByZXR1cm4gaGF2
ZUdseXBoczsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9T
aW1wbGVGb250RGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NTQ2MSkJKGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwOjU1
NDYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNh
aXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUluaXQoKQoreworICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50czsK
KyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZmb250X2V4dGVudHMp
OworICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5h
c2NlbnQpKTsKKyAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9l
eHRlbnRzLmRlc2NlbnQpKTsKKyAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsKKyAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBz
b21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UKKyAgICAvLyB1c2UgY2Fp
cm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwor
ICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2Vu
dCwgd2hpY2ggaXMKKyAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBz
eXN0ZW0uIFdvcmthcm91bmQgdGhpcworICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdz
IGdvaW5nIG9uLgorICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQp
CisgICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsKKyAgICBjYWly
b19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAi
eCIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7
CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2Nh
bGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNf
Y2FzdDxmbG9hdD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7CisgICAgbV9saW5lR2FwID0gbV9s
aW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50OworICAgIG1fc3ludGhldGljQm9sZE9m
ZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Cit9CisK
K3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9h
dmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENo
YXJXaWR0aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkK
K3sKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnRE
YXRhID0gMDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sK
KyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9u
IGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5z
ZXRDb21wdXRlZFNpemUoMC43MGYqZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKyAg
ICAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0
YShkZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICAgICAgbV9zbWFsbENhcHNGb250
RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqcGRhdGEpOworICAgIH0KKyAgICByZXR1cm4gbV9z
bWFsbENhcHNGb250RGF0YTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFy
YWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAg
IEZUX0ZhY2UgZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3BsYXRmb3Jt
RGF0YS5tX3NjYWxlZEZvbnQpOworCisgICAgaWYgKCFmYWNlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlm
IChGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGNoYXJhY3RlcnNbaV0pID09IDApIHsKKyAgICAg
ICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1f
c2NhbGVkRm9udCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5t
X3NjYWxlZEZvbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERh
dGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0
Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxh
dGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisKKyAgICBjYWlyb19nbHlwaF90IGNnbHlwaCA9IHsg
Z2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOworICAgIGNh
aXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250
LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CisKKyAgICBmbG9hdCB3ID0gKGZsb2F0KW1fc3BhY2VX
aWR0aDsKKyAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1f
c2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2Ug
IT0gMCkKKyAgICAgICAgdyA9IChmbG9hdClleHRlbnRzLnhfYWR2YW5jZTsKKyAgICByZXR1cm4g
dzsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hl
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
Q2FjaGVHdGsuY3BwCShyZXZpc2lvbiA1NTQ2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVkZSAi
Rm9udC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRDYWNoZTo6cGxhdGZv
cm1Jbml0KCkKLXsKLSAgICBpZiAoIUZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKSkKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkK
LSAgICBGY1Jlc3VsdCBmcmVzdWx0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHByaW0gPSBjb25z
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURh
dGEoKSk7Ci0KLSAgICBpZiAoIXByaW0tPm1fZmFsbGJhY2tzKQotICAgICAgICBwcmltLT5tX2Zh
bGxiYWNrcyA9IEZjRm9udFNvcnQoTlVMTCwgcHJpbS0+bV9wYXR0ZXJuLCBGY1RydWUsIE5VTEws
ICZmcmVzdWx0KTsKLQotICAgIEZjRm9udFNldCogZnMgPSBwcmltLT5tX2ZhbGxiYWNrczsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnMtPm5mb250OyBpKyspIHsKLSAgICAgICAgRmNQYXR0
ZXJuKiBmaW4gPSBGY0ZvbnRSZW5kZXJQcmVwYXJlKE5VTEwsIHByaW0tPm1fcGF0dGVybiwgZnMt
PmZvbnRzW2ldKTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9f
ZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmaW4pOwotICAgICAgICBGb250UGxhdGZv
cm1EYXRhIGFsdGVybmF0ZUZvbnQoZm9udEZhY2UsIGZvbnQuZm9udERlc2NyaXB0aW9uKCkuY29t
cHV0ZWRQaXhlbFNpemUoKSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNl
X2Rlc3Ryb3koZm9udEZhY2UpOwotICAgICAgICBhbHRlcm5hdGVGb250Lm1fcGF0dGVybiA9IGZp
bjsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIHNmZCA9IGdldENhY2hlZEZvbnREYXRhKCZhbHRl
cm5hdGVGb250KTsKLSAgICAgICAgaWYgKHNmZC0+Y29udGFpbnNDaGFyYWN0ZXJzKGNoYXJhY3Rl
cnMsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gc2ZkOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCi17Ci0gICAgLy8gRklYTUU6IFdv
dWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250
IGhlcmUuCi0gICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVz
ZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIHN0YXRpYyBBdG9t
aWNTdHJpbmcgdGltZXNTdHIoIlRpbWVzIE5ldyBSb21hbiIpOwotICAgIHJldHVybiBnZXRDYWNo
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKTsKLX0KLQotdm9pZCBGb250Q2Fj
aGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVj
dG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZv
bnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgcmV0dXJu
IG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKLX0KLQotfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDU1NDY2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0gICAgY2Fpcm9fZm9u
dF9mYWNlX2Rlc3Ryb3kobV9mb250RmFjZSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUpCi17Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9y
bURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKLX0KLQotc3RhdGljIHZvaWQg
cmVsZWFzZURhdGEodm9pZCogZGF0YSkKLXsKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIq
PihkYXRhKS0+ZGVyZWYoKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlRf
QVJHKGJ1ZmZlciwgYnVmZmVyKTsKLQotICAgIGludCBlcnJvcjsKLQotICAgIHN0YXRpYyBGVF9M
aWJyYXJ5IGxpYnJhcnkgPSAwOwotICAgIGlmICghbGlicmFyeSkgewotICAgICAgICBlcnJvciA9
IEZUX0luaXRfRnJlZVR5cGUoJmxpYnJhcnkpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgICAgIGxpYnJhcnkgPSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBGVF9GYWNlIGZhY2U7Ci0gICAgZXJyb3IgPSBGVF9OZXdfTWVtb3J5X0ZhY2Uo
bGlicmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkp
LCBidWZmZXItPnNpemUoKSwgMCwgJmZhY2UpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBidWZmZXItPnJlZigpOwotICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250
RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZmFjZSwgMCk7Ci0K
LSAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKLSAgICBjYWlyb19m
b250X2ZhY2Vfc2V0X3VzZXJfZGF0YShmb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLCByZWxl
YXNlRGF0YSk7Ci0KLSAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9udEZh
Y2UpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA1NTQ2NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFf
aAotI2RlZmluZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKLQotI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLXR5cGVkZWYgc3Ry
dWN0IF9jYWlyb19mb250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQot
c3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YWJsZSB7Ci0gICAgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UpCi0gICAgOiBtX2Zv
bnRGYWNlKGZvbnRGYWNlKQotICAgIHt9Ci0KLSAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgp
OwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01v
ZGUpOwotCi0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7Ci19OwotCi1Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZl
ciogYnVmZmVyKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDU1NDY2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGlu
dGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5
IGFueW9uZSBvdGhlciB0aGFuCi0gKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQu
Y3BwLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJp
Z2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9oCi0jZGVmaW5lIEZv
bnRQbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2lmIGRlZmluZWQoVVNFX0ZS
RUVUWVBFKQotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2Zy
ZWV0eXBlLmg+Ci0jZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKLSNpbmNsdWRlIDxwYW5nby9wYW5n
b2NhaXJvLmg+Ci0jZWxzZQotI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdHJpbmc7Ci0KLWNsYXNzIEZv
bnRQbGF0Zm9ybURhdGEgewotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQotI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQotICAgICAg
ICA6IG1fcGF0dGVybihoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCi0gICAgICAgICwgbV9m
YWxsYmFja3MoMCkKLSNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQotICAgICAgICA6IG1fY29udGV4
dCgwKQotICAgICAgICAsIG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCi0jZWxz
ZQotI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCi0jZW5kaWYKLSAgICAgICAg
LCBtX3NjYWxlZEZvbnQoMCkKLSAgICAgICAgeyB9Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKCkK
LSNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKLSAgICAgICAgOiBtX3BhdHRlcm4oMCkKLSAgICAg
ICAgLCBtX2ZhbGxiYWNrcygwKQotI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCi0gICAgICAgIDog
bV9jb250ZXh0KDApCi0gICAgICAgICwgbV9mb250KDApCi0jZWxzZQotI2Vycm9yICJNdXN0IGRl
ZmluZWQgYSBmb250IGJhY2tlbmQiCi0jZW5kaWYKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkK
LSAgICAgICAgeyB9Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEo
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0
YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wg
aXRhbGljKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsK
LQotICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0KCk7Ci0K
LSAgICBib29sIGlzRml4ZWRQaXRjaCgpOwotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KLSAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5
bnRoZXRpY0JvbGQ7IH0KLSAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVy
biBtX3N5bnRoZXRpY09ibGlxdWU7IH0KLQotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxl
ZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KLQotICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAotICAgIHsKLSNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKLSAgICAgICAgaWYg
KG1fcGF0dGVybikKLSAgICAgICAgICAgIHJldHVybiBGY1BhdHRlcm5IYXNoKG1fcGF0dGVybik7
Ci0jZW5kaWYKLSAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXpl
b2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7Ci0gICAgRm9udFBsYXRmb3JtRGF0
YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgewotI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQotICAg
ICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKLSNl
bGlmIGRlZmluZWQoVVNFX1BBTkdPKQotICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hUYWJs
ZURlbGV0ZWRGb250VmFsdWUoKTsKLSNlbmRpZgotICAgIH07Ci0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoVVNF
X0ZSRUVUWVBFKQotICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOwotICAgIEZjRm9udFNldCogbV9m
YWxsYmFja3M7Ci0jZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKLSAgICBzdGF0aWMgUGFuZ29Gb250
TWFwKiBtX2ZvbnRNYXA7Ci0gICAgc3RhdGljIEdIYXNoVGFibGUqIG1faGFzaFRhYmxlOwotCi0g
ICAgUGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgUGFuZ29Gb250KiBtX2ZvbnQ7Ci0jZWxz
ZQotI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCi0jZW5kaWYKLSAgICBmbG9h
dCBtX3NpemU7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7Ci0gICAgYm9vbCBtX3N5bnRoZXRp
Y09ibGlxdWU7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OwotcHJpdmF0
ZToKLSNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKLSAgICBzdGF0aWMgRmNQYXR0ZXJuICpoYXNo
VGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRl
cm4qPigtMSk7IH0KLSNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQotICAgIHN0YXRpYyBQYW5nb0Zv
bnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFBhbmdvRm9udCo+KC0xKTsgfQotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0
ay5jcHAJKHJldmlzaW9uIDU1NDY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udFBsYXRmb3JtRGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjYwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChD
KSAyMDA5IElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiQ1N0cmlu
Zy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCi0KLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5j
bHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSkKLSAgICA6IG1fcGF0dGVybigwKQotICAgICwgbV9mYWxsYmFja3MoMCkK
LSAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAs
IG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkK
LSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsK
LQotICAgIENTdHJpbmcgZmFtaWx5TmFtZVN0cmluZyA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRm
OCgpOwotICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5ID0gZmFtaWx5TmFtZVN0cmluZy5kYXRhKCk7
Ci0gICAgaW50IGZjc2xhbnQgPSBGQ19TTEFOVF9ST01BTjsKLSAgICAvLyBGSVhNRTogTWFwIGFs
bCBGb250V2VpZ2h0IHZhbHVlcyB0byBmb250Y29uZmlnIHdlaWdodHMuCi0gICAgaW50IGZjd2Vp
Z2h0ID0gRkNfV0VJR0hUX05PUk1BTDsKLSAgICBkb3VibGUgZmNzaXplID0gZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMo
KSkKLSAgICAgICAgZmNzbGFudCA9IEZDX1NMQU5UX0lUQUxJQzsKLSAgICBpZiAoZm9udERlc2Ny
aXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCi0gICAgICAgIGZjd2VpZ2h0ID0gRkNf
V0VJR0hUX0JPTEQ7Ci0KLSAgICBpbnQgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFt
aWx5KCk7Ci0KLSAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKLSAg
ICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2U7Ci0gICAgc3RhdGljIGNvbnN0IGNhaXJvX2Zv
bnRfb3B0aW9uc190KiBkZWZhdWx0T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUo
KTsKLSAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IE5VTEw7Ci0gICAg
Y2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLQotICAgIGlmICghRmNQYXR0ZXJuQWRkU3RyaW5n
KHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNm
YW1pbHkpKSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgZmNmYW1p
bHkgPSAic2VyaWYiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
U2Fuc1NlcmlmRmFtaWx5OgotICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAg
ICAgICAgZmNmYW1pbHkgPSAibW9ub3NwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgotICAgICAgICBmY2ZhbWlseSA9ICJzYW5z
LXNlcmlmIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFt
aWx5OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZjZmFtaWx5ID0gTlVMTDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgaWYgKGZjZmFtaWx5ICYmICFGY1BhdHRlcm5BZGRTdHJpbmcocGF0
dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmY2ZhbWls
eSkpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50
ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjd2VpZ2h0KSkKLSAgICAgICAgZ290byBmcmVlUGF0
dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfU0xBTlQsIGZj
c2xhbnQpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotICAgIGlmICghRmNQYXR0ZXJuQWRk
RG91YmxlKHBhdHRlcm4sIEZDX1BJWEVMX1NJWkUsIGZjc2l6ZSkpCi0gICAgICAgIGdvdG8gZnJl
ZVBhdHRlcm47Ci0KLSAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoTlVMTCwgcGF0dGVybiwgRmNNYXRj
aFBhdHRlcm4pOwotICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybik7Ci0KLSAgICBGY1Jl
c3VsdCBmY3Jlc3VsdDsKLSAgICBtX3BhdHRlcm4gPSBGY0ZvbnRNYXRjaChOVUxMLCBwYXR0ZXJu
LCAmZmNyZXN1bHQpOwotICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ugc2V0IHNvbWUgZGVmYXVsdCBm
b250PwotICAgIGlmICghbV9wYXR0ZXJuKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotICAg
IGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihtX3BhdHRl
cm4pOwotICAgIGNhaXJvX21hdHJpeF90IGN0bTsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2Fs
ZSgmZm9udE1hdHJpeCwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKTsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9p
ZGVudGl0eSgmY3RtKTsKLQotICAgIGlmIChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5f
Z2V0X2RlZmF1bHQoKSkKLSAgICAgICAgb3B0aW9ucyA9IGdka19zY3JlZW5fZ2V0X2ZvbnRfb3B0
aW9ucyhzY3JlZW4pOwotCi0gICAgLy8gZ2RrX3NjcmVlbl9nZXRfZm9udF9vcHRpb25zKCkgcmV0
dXJucyBOVUxMIGlmIG5vIGRlZmF1bHQgb3B0aW9ucyBhcmUKLSAgICAvLyBzZXQsIHNvIHdlIGFs
d2F5cyBoYXZlIHRvIGNoZWNrLgotICAgIGlmICghb3B0aW9ucykKLSAgICAgICAgb3B0aW9ucyA9
IGRlZmF1bHRPcHRpb25zOwotCi0gICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRf
Y3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucyk7Ci0gICAgY2Fpcm9f
Zm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwotCi1mcmVlUGF0dGVybjoKLSAgICBGY1BhdHRl
cm5EZXN0cm95KHBhdHRlcm4pOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCi0gICAgOiBtX3BhdHRlcm4o
MCkKLSAgICAsIG1fZmFsbGJhY2tzKDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3lu
dGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLSAgICAs
IG1fc2NhbGVkRm9udCgwKQotewotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMpCi0gICAgOiBtX3BhdHRlcm4oMCkKLSAgICAsIG1fZmFsbGJhY2tzKDApCi0gICAg
LCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50
aGV0aWNPYmxpcXVlKGl0YWxpYykKLSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotICAgIGNhaXJv
X21hdHJpeF90IGZvbnRNYXRyaXg7Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRN
YXRyaXgsIHNpemUsIHNpemUpOwotICAgIGNhaXJvX21hdHJpeF90IGN0bTsKLSAgICBjYWlyb19t
YXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKLSAgICBzdGF0aWMgY29uc3QgY2Fpcm9fZm9udF9v
cHRpb25zX3QqIGRlZmF1bHRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOwot
ICAgIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gTlVMTDsKLQotICAgIGlm
IChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkKLSAgICAgICAg
b3B0aW9ucyA9IGdka19zY3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucyhzY3JlZW4pOwotCi0gICAgLy8g
Z2RrX3NjcmVlbl9nZXRfZm9udF9vcHRpb25zKCkgcmV0dXJucyBOVUxMIGlmIG5vIGRlZmF1bHQg
b3B0aW9ucyBhcmUKLSAgICAvLyBzZXQsIHNvIHdlIGFsd2F5cyBoYXZlIHRvIGNoZWNrLgotICAg
IGlmICghb3B0aW9ucykKLSAgICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOwotCi0gICAg
bV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1h
dHJpeCwgJmN0bSwgb3B0aW9ucyk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9y
bURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKLXsKLSAgICAv
LyBDaGVjayBmb3Igc2VsZi1hc3NpZ25tZW50LgotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIG1f
c3ludGhldGljQm9sZCA9IG90aGVyLm1fc3ludGhldGljQm9sZDsKLSAgICBtX3N5bnRoZXRpY09i
bGlxdWUgPSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWU7Ci0KLSAgICBpZiAob3RoZXIubV9zY2Fs
ZWRGb250KQotICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uob3RoZXIubV9zY2Fs
ZWRGb250KTsKLSAgICBpZiAobV9zY2FsZWRGb250KQotICAgICAgICBjYWlyb19zY2FsZWRfZm9u
dF9kZXN0cm95KG1fc2NhbGVkRm9udCk7Ci0gICAgbV9zY2FsZWRGb250ID0gb3RoZXIubV9zY2Fs
ZWRGb250OwotCi0gICAgaWYgKG90aGVyLm1fcGF0dGVybikKLSAgICAgICAgRmNQYXR0ZXJuUmVm
ZXJlbmNlKG90aGVyLm1fcGF0dGVybik7Ci0gICAgaWYgKG1fcGF0dGVybikKLSAgICAgICAgRmNQ
YXR0ZXJuRGVzdHJveShtX3BhdHRlcm4pOwotICAgIG1fcGF0dGVybiA9IG90aGVyLm1fcGF0dGVy
bjsKLQotICAgIGlmIChtX2ZhbGxiYWNrcykgewotICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1f
ZmFsbGJhY2tzKTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5k
LgotICAgICAgICBtX2ZhbGxiYWNrcyA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKQotICAgIDogbV9wYXR0ZXJuKDApCi0gICAgLCBtX2ZhbGxiYWNrcygwKQot
ICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotYm9vbCBG
b250UGxhdGZvcm1EYXRhOjppbml0KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOwotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKCFGY0luaXQoKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGluaXQgZm9u
dCBjb25maWcgbGlicmFyeVxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
aW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Gb250UGxhdGZvcm1E
YXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKG1fcGF0dGVybiAmJiAoKEZjUGF0
dGVybiopLTEgIT0gbV9wYXR0ZXJuKSkgewotICAgICAgICBGY1BhdHRlcm5EZXN0cm95KG1fcGF0
dGVybik7Ci0gICAgICAgIG1fcGF0dGVybiA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fZmFsbGJh
Y2tzKSB7Ci0gICAgICAgIEZjRm9udFNldERlc3Ryb3kobV9mYWxsYmFja3MpOwotICAgICAgICBt
X2ZhbGxiYWNrcyA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc2NhbGVkRm9udCkKLSAgICAgICAg
Y2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOwotfQotCi1ib29sIEZvbnRQ
bGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCi17Ci0gICAgLy8gVE9ETzogU3VwcG9ydCBpc0Zp
eGVkUGl0Y2goKSBmb3IgY3VzdG9tIGZvbnRzLgotICAgIGlmICghbV9wYXR0ZXJuKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgc3BhY2luZzsKLSAgICBpZiAoRmNQYXR0ZXJuR2V0
SW50ZWdlcihtX3BhdHRlcm4sIEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9PSBGY1Jlc3VsdE1h
dGNoKQotICAgICAgICByZXR1cm4gc3BhY2luZyA9PSBGQ19NT05POwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKSBjb25zdAotewotICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9w
YXR0ZXJuKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9wYXR0ZXJuID09IDAgfHwg
bV9wYXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpCi0gICAgICAgICAg
ICB8fCBvdGhlci5tX3BhdHRlcm4gPT0gMCB8fCBvdGhlci5tX3BhdHRlcm4gPT0gcmVpbnRlcnBy
ZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gRmNQYXR0ZXJuRXF1YWwobV9wYXR0ZXJuLCBvdGhlci5tX3BhdHRlcm4pOwotfQotCi0jaWZu
ZGVmIE5ERUJVRwotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNw
cAkocmV2aXNpb24gNTU0NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlw
aFBhZ2VUcmVlTm9kZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9y
YS5jby51az4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUu
aCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQotewotICAgIC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVy
IHRoYW4gdGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBs
ZW1lbnRhcnkgY2hhcmFjdGVycy4KLSAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5v
dy4KLSAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9sb2Nr
X2ZhY2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9udCk7Ci0gICAgaWYgKCFm
YWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxz
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
R2x5cGggZ2x5cGggPSBGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGJ1ZmZlcltpXSk7Ci0gICAg
ICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQg
KyBpLCAwLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOwotICAgICAgICAgICAgaGF2ZUdseXBo
cyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91
bmxvY2tfZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9zY2FsZWRGb250KTsKLQotICAg
IHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCShyZXZpc2lvbiA1NTQ2NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250
Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQoKQotewotICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50czsKLSAgICBjYWly
b190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0
ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZmb250X2V4dGVudHMpOwotICAgIG1f
YXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5hc2NlbnQpKTsK
LSAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmRl
c2NlbnQpKTsKLSAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZv
bnRfZXh0ZW50cy5oZWlnaHQpKTsKLSAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5k
aW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UKLSAgICAvLyB1c2UgY2Fpcm8pIHdpdGgg
c29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwotICAgIC8vIGNh
aXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2gg
aXMKLSAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdv
cmthcm91bmQgdGhpcwotICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9u
LgotICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQpCi0gICAgICAg
IG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsKLSAgICBjYWlyb19zY2FsZWRf
Zm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0
X2V4dGVudHMpOwotICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7Ci0gICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwg
IiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9h
dD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7Ci0gICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2lu
ZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50OwotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1f
cGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci19Ci0KLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lk
dGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0aHMo
KTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBk
ZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKLSAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsK
LX0KLQotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
IW1fc21hbGxDYXBzRm9udERhdGEpIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgZGVzYy5zZXRDb21wdXRl
ZFNpemUoMC43MGYqZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKLSAgICAgICAgY29u
c3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShkZXNjLCBk
ZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKLSAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IG5l
dyBTaW1wbGVGb250RGF0YSgqcGRhdGEpOwotICAgIH0KLSAgICByZXR1cm4gbV9zbWFsbENhcHNG
b250RGF0YTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAgIEZUX0ZhY2Ug
ZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3Nj
YWxlZEZvbnQpOwotCi0gICAgaWYgKCFmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChGY0ZyZWVU
eXBlQ2hhckluZGV4KGZhY2UsIGNoYXJhY3RlcnNbaV0pID09IDApIHsKLSAgICAgICAgICAgIGNh
aXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9u
dCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
YWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZv
bnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVy
bWluZVBpdGNoKCkKLXsKLSAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEu
aXNGaXhlZFBpdGNoKCk7Ci19Ci0KLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRh
Lm1fc2NhbGVkRm9udCk7Ci0KLSAgICBjYWlyb19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAs
IDAgfTsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwotICAgIGNhaXJvX3NjYWxl
ZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAmY2dseXBo
LCAxLCAmZXh0ZW50cyk7Ci0KLSAgICBmbG9hdCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKLSAg
ICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9u
dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkKLSAg
ICAgICAgdyA9IChmbG9hdClleHRlbnRzLnhfYWR2YW5jZTsKLSAgICByZXR1cm4gdzsKLX0KLQot
fQo=
</data>
<flag name="review"
          id="32932"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49938</attachid>
            <date>2010-03-03 13:24:00 -0800</date>
            <delta_ts>2010-03-04 00:51:21 -0800</delta_ts>
            <desc>Move font code from platform/graphics/gtk to ../cairo</desc>
            <filename>move-font-stuff-from-gtk-to-cairo.diff</filename>
            <type>text/plain</type>
            <size>61453</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMtMDMgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJv
ZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBDYWlyby1yZWxhdGVkIGZvbnQgY29kZSBmcm9tIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ayB0bworICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlybywgc28gb3RoZXIgcG9ydHMg
bWF5IHVzZSB0aGVtLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1NTM5CisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2FjaGVDYWlyby5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRDYWNoZUd0ay5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDogQ29waWVkIGZyb20g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaDogQ29w
aWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWly
by5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0
Zm9ybURhdGFHdGsuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBo
UGFnZVRyZWVOb2RlQ2Fpcm8uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRm
b3JtRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
UGxhdGZvcm1EYXRhR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHA6IFJlbW92ZWQuCisKIDIwMTAt
MDMtMDMgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1NTQ2NikK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMDMsMTEgKzIw
MDMsMTEgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdGhDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGF0dGVybkNhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
cmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2FjaGVDYWlyby5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvQ29sb3JHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
Q2FjaGVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsu
Y3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgg
XAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCBcCkBAIC0yMTI5LDEwICsyMTI5LDEwIEBAIHdl
YmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1EVVNFX0ZSRUVUWVBFPTEKIAogd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRm
b3JtRGF0YUd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFn
ZVRyZWVOb2RlR3RrLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxl
Rm9udERhdGFHdGsuY3BwCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCiBlbmRpZiAjIEVORCBVU0VfRlJFRVRZ
UEUKIAogIyAtLS0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
Y2hlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhY2hlQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NTQ2NikJKGZyb20gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcDo1NTQ2NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUu
aCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBG
b250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgaWYgKCFGb250UGxhdGZvcm1EYXRhOjpp
bml0KCkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitjb25zdCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisjaWYgZGVmaW5l
ZChVU0VfRlJFRVRZUEUpCisgICAgRmNSZXN1bHQgZnJlc3VsdDsKKyAgICBGb250UGxhdGZvcm1E
YXRhKiBwcmltID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJmZvbnQucHJpbWFyeUZv
bnQoKS0+cGxhdGZvcm1EYXRhKCkpOworCisgICAgaWYgKCFwcmltLT5tX2ZhbGxiYWNrcykKKyAg
ICAgICAgcHJpbS0+bV9mYWxsYmFja3MgPSBGY0ZvbnRTb3J0KE5VTEwsIHByaW0tPm1fcGF0dGVy
biwgRmNUcnVlLCBOVUxMLCAmZnJlc3VsdCk7CisKKyAgICBGY0ZvbnRTZXQqIGZzID0gcHJpbS0+
bV9mYWxsYmFja3M7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZzLT5uZm9udDsgaSsrKSB7
CisgICAgICAgIEZjUGF0dGVybiogZmluID0gRmNGb250UmVuZGVyUHJlcGFyZShOVUxMLCBwcmlt
LT5tX3BhdHRlcm4sIGZzLT5mb250c1tpXSk7CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBm
b250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4oZmluKTsKKyAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KGZvbnRGYWNlLCBmb250LmZvbnRE
ZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
IGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsKKyAgICAgICAgYWx0ZXJuYXRlRm9u
dC5tX3BhdHRlcm4gPSBmaW47CisgICAgICAgIFNpbXBsZUZvbnREYXRhKiBzZmQgPSBnZXRDYWNo
ZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCk7CisgICAgICAgIGlmIChzZmQtPmNvbnRhaW5zQ2hh
cmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHNmZDsKKyAg
ICB9CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAg
IHJldHVybiAwOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorewor
ICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNl
cidzIGRlZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGljayB0aGUgZGVm
YXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4K
KyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cik7Cit9
CisKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworfQorCitGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KQoreworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZh
bWlseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gNTU0NjYp
CShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwOjU1NDY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgorCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKCkKK3sKKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRG
YWNlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250
UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVy
aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXpl
LCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRh
KQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOworfQor
CitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNo
YXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOwor
CisgICAgaW50IGVycm9yOworCisgICAgc3RhdGljIEZUX0xpYnJhcnkgbGlicmFyeSA9IDA7Cisg
ICAgaWYgKCFsaWJyYXJ5KSB7CisgICAgICAgIGVycm9yID0gRlRfSW5pdF9GcmVlVHlwZSgmbGli
cmFyeSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbGlicmFyeSA9IDA7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUX0ZhY2UgZmFj
ZTsKKyAgICBlcnJvciA9IEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVycHJldF9j
YXN0PGNvbnN0IEZUX0J5dGUqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAm
ZmFjZSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJ1ZmZlci0+
cmVmKCk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9m
YWNlX2NyZWF0ZV9mb3JfZnRfZmFjZShmYWNlLCAwKTsKKworICAgIHN0YXRpYyBjYWlyb191c2Vy
X2RhdGFfa2V5X3QgYnVmZmVyS2V5OworICAgIGNhaXJvX2ZvbnRfZmFjZV9zZXRfdXNlcl9kYXRh
KGZvbnRGYWNlLCAmYnVmZmVyS2V5LCBidWZmZXIsIHJlbGVhc2VEYXRhKTsKKworICAgIHJldHVy
biBuZXcgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShmb250RmFjZSk7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCShyZXZpc2lvbiA1NTQ2NikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOjU1NDY2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNk
ZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisKKyNpbmNsdWRlICJGb250UmVuZGVyaW5n
TW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCit0eXBlZGVmIHN0cnVjdCBf
Y2Fpcm9fZm9udF9mYWNlIGNhaXJvX2ZvbnRfZmFjZV90OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK3N0cnVj
dCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhIDogTm9uY29weWFibGUgeworICAgIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKQorICAgIDogbV9mb250RmFj
ZShmb250RmFjZSkKKyAgICB7fQorCisgICAgfkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKTsKKwor
ICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsK
KworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBtX2ZvbnRGYWNlOworfTsKKworRm9udEN1c3RvbVBs
YXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1
ZmZlcik7CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNTU0NjYpCShmcm9tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaDo1NTQ2NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1
ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5k
IEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9oCisjZGVm
aW5lIEZvbnRQbGF0Zm9ybURhdGFfaAorCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lmIGRlZmluZWQo
VVNFX0ZSRUVUWVBFKQorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Zm9udGNvbmZp
Zy9mY2ZyZWV0eXBlLmg+CisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyNpbmNsdWRlIDxwYW5n
by9wYW5nb2NhaXJvLmg+CisjZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tl
bmQiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJpbmc7CisKK2Ns
YXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQor
ICAgICAgICA6IG1fcGF0dGVybihoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCisgICAgICAg
ICwgbV9mYWxsYmFja3MoMCkKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgICAgICA6IG1f
Y29udGV4dCgwKQorICAgICAgICAsIG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkp
CisjZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5kaWYKKyAg
ICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxhdGZvcm1E
YXRhKCkKKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKKyAgICAgICAgOiBtX3BhdHRlcm4oMCkK
KyAgICAgICAgLCBtX2ZhbGxiYWNrcygwKQorI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAg
ICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KDApCisjZWxzZQorI2Vycm9yICJN
dXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5kaWYKKyAgICAgICAgLCBtX3NjYWxlZEZv
bnQoMCkKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKworICAgIEZvbnRQbGF0Zm9y
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRm
b3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKTsKKworICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpbml0
KCk7CisKKyAgICBib29sIGlzRml4ZWRQaXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KKyAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVy
biBtX3N5bnRoZXRpY0JvbGQ7IH0KKyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7
IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KKworICAgIGNhaXJvX3NjYWxlZF9mb250X3Qq
IHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KKworICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdAorICAgIHsKKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKKyAgICAg
ICAgaWYgKG1fcGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiBGY1BhdHRlcm5IYXNoKG1fcGF0
dGVybik7CisjZW5kaWYKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKKyAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMp
LCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CisgICAgRm9udFBsYXRm
b3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeworI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBF
KQorICAgICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUo
KTsKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgICAgICByZXR1cm4gbV9mb250ID09IGhh
c2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKKyNlbmRpZgorICAgIH07CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIGRlZmlu
ZWQoVVNFX0ZSRUVUWVBFKQorICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworICAgIEZjRm9udFNl
dCogbV9mYWxsYmFja3M7CisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICBzdGF0aWMgUGFu
Z29Gb250TWFwKiBtX2ZvbnRNYXA7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIG1faGFzaFRhYmxl
OworCisgICAgUGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgUGFuZ29Gb250KiBtX2ZvbnQ7
CisjZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5kaWYKKyAg
ICBmbG9hdCBtX3NpemU7CisgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CisgICAgYm9vbCBtX3N5
bnRoZXRpY09ibGlxdWU7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250Owor
cHJpdmF0ZToKKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKKyAgICBzdGF0aWMgRmNQYXR0ZXJu
ICpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxG
Y1BhdHRlcm4qPigtMSk7IH0KKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgIHN0YXRpYyBQ
YW5nb0ZvbnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFBhbmdvRm9udCo+KC0xKTsgfQorI2VuZGlmCit9OworCit9CisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhQ2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBs
YXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gNTU0NjYpCShmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwOjU1NDY2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCisjaW5jbHVkZSA8Y2Fpcm8tZnQu
aD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX3BhdHRl
cm4oMCkKKyAgICAsIG1fZmFsbGJhY2tzKDApCisgICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCkpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAg
LCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKK3sKKyAg
ICBGb250UGxhdGZvcm1EYXRhOjppbml0KCk7CisKKyAgICBDU3RyaW5nIGZhbWlseU5hbWVTdHJp
bmcgPSBmYW1pbHlOYW1lLnN0cmluZygpLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBmY2ZhbWls
eSA9IGZhbWlseU5hbWVTdHJpbmcuZGF0YSgpOworICAgIGludCBmY3NsYW50ID0gRkNfU0xBTlRf
Uk9NQU47CisgICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gZm9udGNv
bmZpZyB3ZWlnaHRzLgorICAgIGludCBmY3dlaWdodCA9IEZDX1dFSUdIVF9OT1JNQUw7CisgICAg
ZG91YmxlIGZjc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOworICAg
IGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIGZjc2xhbnQgPSBGQ19TTEFO
VF9JVEFMSUM7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0
NjAwKQorICAgICAgICBmY3dlaWdodCA9IEZDX1dFSUdIVF9CT0xEOworCisgICAgaW50IHR5cGUg
PSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOworCisgICAgRmNQYXR0ZXJuKiBwYXR0
ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNl
OworICAgIHN0YXRpYyBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogZGVmYXVsdE9wdGlvbnMg
PSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgY29uc3QgY2Fpcm9fZm9udF9vcHRp
b25zX3QqIG9wdGlvbnMgPSBOVUxMOworICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CisK
KyAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCisgICAgICAgIGdvdG8gZnJlZVBh
dHRlcm47CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
U2VyaWZGYW1pbHk6CisgICAgICAgIGZjZmFtaWx5ID0gInNlcmlmIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKKyAgICAgICAgZmNm
YW1pbHkgPSAic2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgIGZjZmFtaWx5ID0gIm1vbm9zcGFjZSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWls
eToKKyAgICAgICAgZmNmYW1pbHkgPSAic2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBm
Y2ZhbWlseSA9IE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChmY2ZhbWls
eSAmJiAhRmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1pbHkpKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVy
bjsKKyAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJR0hULCBmY3dl
aWdodCkpCisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGRJ
bnRlZ2VyKHBhdHRlcm4sIEZDX1NMQU5ULCBmY3NsYW50KSkKKyAgICAgICAgZ290byBmcmVlUGF0
dGVybjsKKyAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLCBGQ19QSVhFTF9TSVpF
LCBmY3NpemUpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworCisgICAgRmNDb25maWdTdWJz
dGl0dXRlKE5VTEwsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJz
dGl0dXRlKHBhdHRlcm4pOworCisgICAgRmNSZXN1bHQgZmNyZXN1bHQ7CisgICAgbV9wYXR0ZXJu
ID0gRmNGb250TWF0Y2goTlVMTCwgcGF0dGVybiwgJmZjcmVzdWx0KTsKKyAgICAvLyBGSVhNRTog
c2hvdWxkIHdlIHNldCBzb21lIGRlZmF1bHQgZm9udD8KKyAgICBpZiAoIW1fcGF0dGVybikKKyAg
ICAgICAgZ290byBmcmVlUGF0dGVybjsKKyAgICBmb250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFj
ZV9jcmVhdGVfZm9yX3BhdHRlcm4obV9wYXR0ZXJuKTsKKyAgICBjYWlyb19tYXRyaXhfdCBjdG07
CisgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSk7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisKKyAgICBpZiAoR2Rr
U2NyZWVuKiBzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpCisgICAgICAgIG9wdGlv
bnMgPSBnZGtfc2NyZWVuX2dldF9mb250X29wdGlvbnMoc2NyZWVuKTsKKworICAgIC8vIGdka19z
Y3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucygpIHJldHVybnMgTlVMTCBpZiBubyBkZWZhdWx0IG9wdGlv
bnMgYXJlCisgICAgLy8gc2V0LCBzbyB3ZSBhbHdheXMgaGF2ZSB0byBjaGVjay4KKyAgICBpZiAo
IW9wdGlvbnMpCisgICAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9uczsKKworICAgIG1fc2Nh
bGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgs
ICZjdG0sIG9wdGlvbnMpOworICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsK
KworZnJlZVBhdHRlcm46CisgICAgRmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKK30KKworRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgaXRhbGljKQorICAgIDogbV9wYXR0ZXJuKDApCisgICAgLCBtX2ZhbGxiYWNrcygwKQorICAg
ICwgbV9zaXplKHNpemUpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShpdGFsaWMpCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKK3sKK30KKworRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZh
Y2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDogbV9wYXR0ZXJuKDAp
CisgICAgLCBtX2ZhbGxiYWNrcygwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3N5bnRo
ZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShpdGFsaWMpCisgICAgLCBt
X3NjYWxlZEZvbnQoMCkKK3sKKyAgICBjYWlyb19tYXRyaXhfdCBmb250TWF0cml4OworICAgIGNh
aXJvX21hdHJpeF9pbml0X3NjYWxlKCZmb250TWF0cml4LCBzaXplLCBzaXplKTsKKyAgICBjYWly
b19tYXRyaXhfdCBjdG07CisgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Cisg
ICAgc3RhdGljIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBkZWZhdWx0T3B0aW9ucyA9IGNh
aXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNf
dCogb3B0aW9ucyA9IE5VTEw7CisKKyAgICBpZiAoR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfc2Ny
ZWVuX2dldF9kZWZhdWx0KCkpCisgICAgICAgIG9wdGlvbnMgPSBnZGtfc2NyZWVuX2dldF9mb250
X29wdGlvbnMoc2NyZWVuKTsKKworICAgIC8vIGdka19zY3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucygp
IHJldHVybnMgTlVMTCBpZiBubyBkZWZhdWx0IG9wdGlvbnMgYXJlCisgICAgLy8gc2V0LCBzbyB3
ZSBhbHdheXMgaGF2ZSB0byBjaGVjay4KKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIG9wdGlv
bnMgPSBkZWZhdWx0T3B0aW9uczsKKworICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9m
b250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOworfQorCitG
b250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgLy8gQ2hlY2sgZm9yIHNlbGYtYXNzaWdubWVudC4K
KyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1f
c2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX3N5bnRoZXRpY0JvbGQgPSBvdGhlci5tX3N5bnRo
ZXRpY0JvbGQ7CisgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50aGV0aWNPYmxp
cXVlOworCisgICAgaWYgKG90aGVyLm1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7CisgICAgaWYgKG1fc2NhbGVkRm9u
dCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOworICAg
IG1fc2NhbGVkRm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKKworICAgIGlmIChvdGhlci5tX3Bh
dHRlcm4pCisgICAgICAgIEZjUGF0dGVyblJlZmVyZW5jZShvdGhlci5tX3BhdHRlcm4pOworICAg
IGlmIChtX3BhdHRlcm4pCisgICAgICAgIEZjUGF0dGVybkRlc3Ryb3kobV9wYXR0ZXJuKTsKKyAg
ICBtX3BhdHRlcm4gPSBvdGhlci5tX3BhdHRlcm47CisKKyAgICBpZiAobV9mYWxsYmFja3MpIHsK
KyAgICAgICAgRmNGb250U2V0RGVzdHJveShtX2ZhbGxiYWNrcyk7CisgICAgICAgIC8vIFRoaXMg
d2lsbCBiZSByZS1jcmVhdGVkIG9uIGRlbWFuZC4KKyAgICAgICAgbV9mYWxsYmFja3MgPSAwOwor
ICAgIH0KKworICAgIHJldHVybiAqdGhpczsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKKyAgICA6IG1fcGF0dGVy
bigwKQorICAgICwgbV9mYWxsYmFja3MoMCkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAg
ICp0aGlzID0gb3RoZXI7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpCit7Cisg
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghRmNJbml0KCkpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDYW4ndCBpbml0IGZvbnQgY29uZmlnIGxpYnJhcnlcbiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQorewor
ICAgIGlmIChtX3BhdHRlcm4gJiYgKChGY1BhdHRlcm4qKS0xICE9IG1fcGF0dGVybikpIHsKKyAg
ICAgICAgRmNQYXR0ZXJuRGVzdHJveShtX3BhdHRlcm4pOworICAgICAgICBtX3BhdHRlcm4gPSAw
OworICAgIH0KKworICAgIGlmIChtX2ZhbGxiYWNrcykgeworICAgICAgICBGY0ZvbnRTZXREZXN0
cm95KG1fZmFsbGJhY2tzKTsKKyAgICAgICAgbV9mYWxsYmFja3MgPSAwOworICAgIH0KKworICAg
IGlmIChtX3NjYWxlZEZvbnQpCisgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9z
Y2FsZWRGb250KTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQor
eworICAgIC8vIFRPRE86IFN1cHBvcnQgaXNGaXhlZFBpdGNoKCkgZm9yIGN1c3RvbSBmb250cy4K
KyAgICBpZiAoIW1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IHNw
YWNpbmc7CisgICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIobV9wYXR0ZXJuLCBGQ19TUEFDSU5H
LCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgcmV0dXJuIHNwYWNpbmcg
PT0gRkNfTU9OTzsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0
YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAobV9wYXR0ZXJuID09IG90aGVyLm1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKG1fcGF0dGVybiA9PSAwIHx8IG1fcGF0dGVybiA9PSByZWludGVycHJldF9jYXN0
PEZjUGF0dGVybio+KC0xKQorICAgICAgICAgICAgfHwgb3RoZXIubV9wYXR0ZXJuID09IDAgfHwg
b3RoZXIubV9wYXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEZjUGF0dGVybkVxdWFsKG1fcGF0dGVybiwg
b3RoZXIubV9wYXR0ZXJuKTsKK30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250UGxhdGZv
cm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
I2VuZGlmCisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQ
YWdlVHJlZU5vZGVDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvLmNwcAkocmV2aXNpb24gNTU0NjYpCShm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNw
cDo1NTQ2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJl
ZU5vZGVDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51
az4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKwor
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQoreworICAgIC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4g
dGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1lbnRh
cnkgY2hhcmFjdGVycy4KKyAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KKyAg
ICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2Uo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9udCk7CisgICAgaWYgKCFmYWNlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgR2x5cGgg
Z2x5cGggPSBGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGJ1ZmZlcltpXSk7CisgICAgICAgIGlm
ICghZ2x5cGgpCisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAw
LCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChv
ZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tf
ZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9zY2FsZWRGb250KTsKKworICAgIHJldHVy
biBoYXZlR2x5cGhzOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAJKHJldmlzaW9uIDU1NDY2
KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5j
cHA6NTU0NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnRE
YXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9leHRl
bnRzOworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsKKyAgICBjYWlyb19z
Y2FsZWRfZm9udF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0
ZW50cyk7CisgICAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRl
bnRzLmFzY2VudCkpOworICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4obHJvdW5kZihm
b250X2V4dGVudHMuZGVzY2VudCkpOworICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxp
bnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmhlaWdodCkpOworICAgIC8vIFRoZXJlIHNlZW1zIHRv
IGJlIHNvbWUgcm91bmRpbmcgZXJyb3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3ZQorICAgIC8vIHVz
ZSBjYWlybykgd2l0aCBzb21lIGZvbnRzLCBsaWtlIERlamFWdSBTYW5zIE1vbm8sIHdoaWNoIG1h
a2VzCisgICAgLy8gY2Fpcm8gcmVwb3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhhbiBhc2NlbnQgKyBk
ZXNjZW50LCB3aGljaCBpcworICAgIC8vIHdyb25nIGFuZCBjb25mdXNlcyBXZWJDb3JlJ3MgbGF5
b3V0IHN5c3RlbS4gV29ya2Fyb3VuZCB0aGlzCisgICAgLy8gd2hpbGUgd2UgZmlndXJlIG91dCB3
aGF0J3MgZ29pbmcgb24uCisgICAgaWYgKG1fbGluZVNwYWNpbmcgPCBtX2FzY2VudCArIG1fZGVz
Y2VudCkKKyAgICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50OworICAg
IGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZv
bnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7CisgICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhl
aWdodDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEu
bV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1fc3BhY2VXaWR0aCA9IHN0
YXRpY19jYXN0PGZsb2F0Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKKyAgICBtX2xpbmVHYXAg
PSBtX2xpbmVTcGFjaW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7CisgICAgbV9zeW50aGV0aWNC
b2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsK
K30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAg
ICBtX2F2Z0NoYXJXaWR0aCA9IDAuZjsKKyAgICBtX21heENoYXJXaWR0aCA9IDAuZjsKKyAgICBp
bml0Q2hhcldpZHRocygpOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQoreworICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworICAgIG1fc21hbGxDYXBz
Rm9udERhdGEgPSAwOworfQorCitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxs
Q2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAoreworICAgIGlmICghbV9zbWFsbENhcHNGb250RGF0YSkgeworICAgICAgICBGb250RGVzY3Jp
cHRpb24gZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBk
ZXNjLnNldENvbXB1dGVkU2l6ZSgwLjcwZipmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkp
OworICAgICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZv
cm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fw
c0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVy
biBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7
CisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fcGxh
dGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgaWYgKEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgY2hhcmFjdGVyc1tpXSkgPT0gMCkgewor
ICAgICAgICAgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURh
dGEubV9zY2FsZWRGb250KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fcGxhdGZvcm1E
YXRhLm1fc2NhbGVkRm9udCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVG
b250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBt
X3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKK30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKworICAgIGNhaXJvX2dseXBoX3QgY2dseXBo
ID0geyBnbHlwaCwgMCwgMCB9OworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7Cisg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxl
ZEZvbnQsICZjZ2x5cGgsIDEsICZleHRlbnRzKTsKKworICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9z
cGFjZVdpZHRoOworICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9wbGF0Zm9ybURh
dGEubV9zY2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2
YW5jZSAhPSAwKQorICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOworICAgIHJl
dHVybiB3OworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
Q2FjaGVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ZvbnRDYWNoZUd0ay5jcHAJKHJldmlzaW9uIDU1NDY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0KLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQotewotICAgIGlmICghRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotI2lmIGRlZmluZWQoVVNFX0ZSRUVU
WVBFKQotICAgIEZjUmVzdWx0IGZyZXN1bHQ7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcHJpbSA9
IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZmb250LnByaW1hcnlGb250KCktPnBsYXRm
b3JtRGF0YSgpKTsKLQotICAgIGlmICghcHJpbS0+bV9mYWxsYmFja3MpCi0gICAgICAgIHByaW0t
Pm1fZmFsbGJhY2tzID0gRmNGb250U29ydChOVUxMLCBwcmltLT5tX3BhdHRlcm4sIEZjVHJ1ZSwg
TlVMTCwgJmZyZXN1bHQpOwotCi0gICAgRmNGb250U2V0KiBmcyA9IHByaW0tPm1fZmFsbGJhY2tz
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+bmZvbnQ7IGkrKykgewotICAgICAgICBG
Y1BhdHRlcm4qIGZpbiA9IEZjRm9udFJlbmRlclByZXBhcmUoTlVMTCwgcHJpbS0+bV9wYXR0ZXJu
LCBmcy0+Zm9udHNbaV0pOwotICAgICAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBj
YWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKGZpbik7Ci0gICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEgYWx0ZXJuYXRlRm9udChmb250RmFjZSwgZm9udC5mb250RGVzY3JpcHRpb24o
KS5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBjYWlyb19mb250
X2ZhY2VfZGVzdHJveShmb250RmFjZSk7Ci0gICAgICAgIGFsdGVybmF0ZUZvbnQubV9wYXR0ZXJu
ID0gZmluOwotICAgICAgICBTaW1wbGVGb250RGF0YSogc2ZkID0gZ2V0Q2FjaGVkRm9udERhdGEo
JmFsdGVybmF0ZUZvbnQpOwotICAgICAgICBpZiAoc2ZkLT5jb250YWluc0NoYXJhY3RlcnMoY2hh
cmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBzZmQ7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2lt
aWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLXsKLSAgICAvLyBGSVhN
RTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0
IGZvbnQgaGVyZS4KLSAgICAvLyBGb3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRlZmF1bHQgdGhhdCB0
aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgc3RhdGlj
IEF0b21pY1N0cmluZyB0aW1lc1N0cigiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgcmV0dXJuIGdl
dENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIpOwotfQotCi12b2lkIEZv
bnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1l
LCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLX0KLQotRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBy
ZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOwotfQot
Ci19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gNTU0NjYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZvbnRD
dXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKLXsKLSAgICBjYWly
b19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRm9udFBs
YXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOwotfQotCi1zdGF0aWMg
dm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRhKQotewotICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1
ZmZlcio+KGRhdGEpLT5kZXJlZigpOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVh
dGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQotewotICAgIEFT
U0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOwotCi0gICAgaW50IGVycm9yOwotCi0gICAgc3RhdGlj
IEZUX0xpYnJhcnkgbGlicmFyeSA9IDA7Ci0gICAgaWYgKCFsaWJyYXJ5KSB7Ci0gICAgICAgIGVy
cm9yID0gRlRfSW5pdF9GcmVlVHlwZSgmbGlicmFyeSk7Ci0gICAgICAgIGlmIChlcnJvcikgewot
ICAgICAgICAgICAgbGlicmFyeSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEZUX0ZhY2UgZmFjZTsKLSAgICBlcnJvciA9IEZUX05ld19NZW1vcnlf
RmFjZShsaWJyYXJ5LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZUX0J5dGUqPihidWZmZXItPmRh
dGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAmZmFjZSk7Ci0gICAgaWYgKGVycm9yKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGJ1ZmZlci0+cmVmKCk7Ci0gICAgY2Fpcm9fZm9udF9mYWNlX3Qq
IGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfZnRfZmFjZShmYWNlLCAw
KTsKLQotICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3QgYnVmZmVyS2V5OwotICAgIGNh
aXJvX2ZvbnRfZmFjZV9zZXRfdXNlcl9kYXRhKGZvbnRGYWNlLCAmYnVmZmVyS2V5LCBidWZmZXIs
IHJlbGVhc2VEYXRhKTsKLQotICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShm
b250RmFjZSk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDU1NDY2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YV9oCi0jZGVmaW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9u
dFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotdHlwZWRl
ZiBzdHJ1Y3QgX2NhaXJvX2ZvbnRfZmFjZSBjYWlyb19mb250X2ZhY2VfdDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgU2hhcmVkQnVmZmVy
OwotCi1zdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSA6IE5vbmNvcHlhYmxlIHsKLSAgICBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSkKLSAgICA6
IG1fZm9udEZhY2UoZm9udEZhY2UpCi0gICAge30KLQotICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhKCk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVy
aW5nTW9kZSk7Ci0KLSAgICBjYWlyb19mb250X2ZhY2VfdCogbV9mb250RmFjZTsKLX07Ci0KLUZv
bnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVk
QnVmZmVyKiBidWZmZXIpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNTU0NjYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVk
ZWQgYnkgYW55b25lIG90aGVyIHRoYW4KLSAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQg
Rm9udC5jcHAuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX2gKLSNkZWZp
bmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaWYgZGVmaW5lZChV
U0VfRlJFRVRZUEUpCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxmb250Y29uZmln
L2ZjZnJlZXR5cGUuaD4KLSNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQotI2luY2x1ZGUgPHBhbmdv
L3BhbmdvY2Fpcm8uaD4KLSNlbHNlCi0jZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2Vu
ZCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFN0cmluZzsKLQotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRm9udFBsYXRmb3JtRGF0YShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0jaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCi0g
ICAgICAgIDogbV9wYXR0ZXJuKGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKLSAgICAgICAg
LCBtX2ZhbGxiYWNrcygwKQotI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCi0gICAgICAgIDogbV9j
b250ZXh0KDApCi0gICAgICAgICwgbV9mb250KGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkK
LSNlbHNlCi0jZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKLSNlbmRpZgotICAg
ICAgICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoKQotI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQotICAgICAgICA6IG1fcGF0dGVybigwKQot
ICAgICAgICAsIG1fZmFsbGJhY2tzKDApCi0jZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKLSAgICAg
ICAgOiBtX2NvbnRleHQoMCkKLSAgICAgICAgLCBtX2ZvbnQoMCkKLSNlbHNlCi0jZXJyb3IgIk11
c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKLSNlbmRpZgotICAgICAgICAsIG1fc2NhbGVkRm9u
dCgwKQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwotCi0gICAgRm9udFBsYXRmb3Jt
RGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKLSAgICBGb250UGxhdGZv
cm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBpdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOwotCi0gICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKLQotICAgIHN0YXRpYyBib29sIGluaXQo
KTsKLQotICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQotICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3ludGhldGljQm9sZDsgfQotICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCog
c2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQotCi0gICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQotICAgICAg
ICBpZiAobV9wYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIEZjUGF0dGVybkhhc2gobV9wYXR0
ZXJuKTsKLSNlbmRpZgotICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzFdID0geyByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obV9zY2FsZWRGb250KSB9OwotICAgICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2Rlcyks
IHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKLSAgICBGb250UGxhdGZv
cm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7Ci0jaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUp
Ci0gICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
OwotI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCi0gICAgICAgIHJldHVybiBtX2ZvbnQgPT0gaGFz
aFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOwotI2VuZGlmCi0gICAgfTsKLQotI2lmbmRlZiBOREVC
VUcKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChVU0VfRlJFRVRZUEUpCi0gICAgRmNQYXR0ZXJuKiBtX3BhdHRlcm47Ci0gICAgRmNGb250U2V0
KiBtX2ZhbGxiYWNrczsKLSNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQotICAgIHN0YXRpYyBQYW5n
b0ZvbnRNYXAqIG1fZm9udE1hcDsKLSAgICBzdGF0aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFibGU7
Ci0KLSAgICBQYW5nb0NvbnRleHQqIG1fY29udGV4dDsKLSAgICBQYW5nb0ZvbnQqIG1fZm9udDsK
LSNlbHNlCi0jZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKLSNlbmRpZgotICAg
IGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1fc3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3lu
dGhldGljT2JsaXF1ZTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci1w
cml2YXRlOgotI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQotICAgIHN0YXRpYyBGY1BhdHRlcm4g
Kmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEZj
UGF0dGVybio+KC0xKTsgfQotI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCi0gICAgc3RhdGljIFBh
bmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1E
YXRhR3RrLmNwcAkocmV2aXNpb24gNTU0NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJD
U3RyaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKLQotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LSNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHlOYW1lKQotICAgIDogbV9wYXR0ZXJuKDApCi0gICAgLCBtX2ZhbGxiYWNr
cygwKQotICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQot
ICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZh
bHNlKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YTo6aW5p
dCgpOwotCi0gICAgQ1N0cmluZyBmYW1pbHlOYW1lU3RyaW5nID0gZmFtaWx5TmFtZS5zdHJpbmco
KS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogZmNmYW1pbHkgPSBmYW1pbHlOYW1lU3RyaW5nLmRh
dGEoKTsKLSAgICBpbnQgZmNzbGFudCA9IEZDX1NMQU5UX1JPTUFOOwotICAgIC8vIEZJWE1FOiBN
YXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIGZvbnRjb25maWcgd2VpZ2h0cy4KLSAgICBpbnQg
ZmN3ZWlnaHQgPSBGQ19XRUlHSFRfTk9STUFMOwotICAgIGRvdWJsZSBmY3NpemUgPSBmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0
YWxpYygpKQotICAgICAgICBmY3NsYW50ID0gRkNfU0xBTlRfSVRBTElDOwotICAgIGlmIChmb250
RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdlaWdodDYwMCkKLSAgICAgICAgZmN3ZWlnaHQg
PSBGQ19XRUlHSFRfQk9MRDsKLQotICAgIGludCB0eXBlID0gZm9udERlc2NyaXB0aW9uLmdlbmVy
aWNGYW1pbHkoKTsKLQotICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgp
OwotICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZTsKLSAgICBzdGF0aWMgY29uc3QgY2Fp
cm9fZm9udF9vcHRpb25zX3QqIGRlZmF1bHRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2Ny
ZWF0ZSgpOwotICAgIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gTlVMTDsK
LSAgICBjYWlyb19tYXRyaXhfdCBmb250TWF0cml4OwotCi0gICAgaWYgKCFGY1BhdHRlcm5BZGRT
dHJpbmcocGF0dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgq
PihmY2ZhbWlseSkpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotCi0gICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgotICAgICAgICBm
Y2ZhbWlseSA9ICJzZXJpZiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpTYW5zU2VyaWZGYW1pbHk6Ci0gICAgICAgIGZjZmFtaWx5ID0gInNhbnMtc2VyaWYiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5
OgotICAgICAgICBmY2ZhbWlseSA9ICJtb25vc3BhY2UiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6Ci0gICAgICAgIGZjZmFtaWx5ID0g
InNhbnMtc2VyaWYiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
Tm9GYW1pbHk6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZmNmYW1pbHkgPSBOVUxMOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoZmNmYW1pbHkgJiYgIUZjUGF0dGVybkFkZFN0cmlu
ZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZj
ZmFtaWx5KSkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgaWYgKCFGY1BhdHRlcm5B
ZGRJbnRlZ2VyKHBhdHRlcm4sIEZDX1dFSUdIVCwgZmN3ZWlnaHQpKQotICAgICAgICBnb3RvIGZy
ZWVQYXR0ZXJuOwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19TTEFO
VCwgZmNzbGFudCkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgaWYgKCFGY1BhdHRl
cm5BZGREb3VibGUocGF0dGVybiwgRkNfUElYRUxfU0laRSwgZmNzaXplKSkKLSAgICAgICAgZ290
byBmcmVlUGF0dGVybjsKLQotICAgIEZjQ29uZmlnU3Vic3RpdHV0ZShOVUxMLCBwYXR0ZXJuLCBG
Y01hdGNoUGF0dGVybik7Ci0gICAgRmNEZWZhdWx0U3Vic3RpdHV0ZShwYXR0ZXJuKTsKLQotICAg
IEZjUmVzdWx0IGZjcmVzdWx0OwotICAgIG1fcGF0dGVybiA9IEZjRm9udE1hdGNoKE5VTEwsIHBh
dHRlcm4sICZmY3Jlc3VsdCk7Ci0gICAgLy8gRklYTUU6IHNob3VsZCB3ZSBzZXQgc29tZSBkZWZh
dWx0IGZvbnQ/Ci0gICAgaWYgKCFtX3BhdHRlcm4pCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47
Ci0gICAgZm9udEZhY2UgPSBjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1f
cGF0dGVybik7Ci0gICAgY2Fpcm9fbWF0cml4X3QgY3RtOwotICAgIGNhaXJvX21hdHJpeF9pbml0
X3NjYWxlKCZmb250TWF0cml4LCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwg
Zm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpOwotICAgIGNhaXJvX21hdHJpeF9p
bml0X2lkZW50aXR5KCZjdG0pOwotCi0gICAgaWYgKEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3Nj
cmVlbl9nZXRfZGVmYXVsdCgpKQotICAgICAgICBvcHRpb25zID0gZ2RrX3NjcmVlbl9nZXRfZm9u
dF9vcHRpb25zKHNjcmVlbik7Ci0KLSAgICAvLyBnZGtfc2NyZWVuX2dldF9mb250X29wdGlvbnMo
KSByZXR1cm5zIE5VTEwgaWYgbm8gZGVmYXVsdCBvcHRpb25zIGFyZQotICAgIC8vIHNldCwgc28g
d2UgYWx3YXlzIGhhdmUgdG8gY2hlY2suCi0gICAgaWYgKCFvcHRpb25zKQotICAgICAgICBvcHRp
b25zID0gZGVmYXVsdE9wdGlvbnM7Ci0KLSAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRf
Zm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLSAgICBj
YWlyb19mb250X2ZhY2VfZGVzdHJveShmb250RmFjZSk7Ci0KLWZyZWVQYXR0ZXJuOgotICAgIEZj
UGF0dGVybkRlc3Ryb3kocGF0dGVybik7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fcGF0
dGVybigwKQotICAgICwgbV9mYWxsYmFja3MoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwg
bV9zeW50aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQot
ICAgICwgbV9zY2FsZWRGb250KDApCi17Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBpbnQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIGl0YWxpYykKLSAgICA6IG1fcGF0dGVybigwKQotICAgICwgbV9mYWxsYmFja3MoMCkK
LSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAg
Y2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgm
Zm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7Ci0gICAgY2Fpcm9fbWF0cml4X3QgY3RtOwotICAgIGNh
aXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwotICAgIHN0YXRpYyBjb25zdCBjYWlyb19m
b250X29wdGlvbnNfdCogZGVmYXVsdE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRl
KCk7Ci0gICAgY29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSBOVUxMOwotCi0g
ICAgaWYgKEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKQotICAg
ICAgICBvcHRpb25zID0gZ2RrX3NjcmVlbl9nZXRfZm9udF9vcHRpb25zKHNjcmVlbik7Ci0KLSAg
ICAvLyBnZGtfc2NyZWVuX2dldF9mb250X29wdGlvbnMoKSByZXR1cm5zIE5VTEwgaWYgbm8gZGVm
YXVsdCBvcHRpb25zIGFyZQotICAgIC8vIHNldCwgc28gd2UgYWx3YXlzIGhhdmUgdG8gY2hlY2su
Ci0gICAgaWYgKCFvcHRpb25zKQotICAgICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7Ci0K
LSAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2UsICZm
b250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSYgRm9udFBs
YXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQotewot
ICAgIC8vIENoZWNrIGZvciBzZWxmLWFzc2lnbm1lbnQuCi0gICAgaWYgKHRoaXMgPT0gJm90aGVy
KQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0g
ICAgbV9zeW50aGV0aWNCb2xkID0gb3RoZXIubV9zeW50aGV0aWNCb2xkOwotICAgIG1fc3ludGhl
dGljT2JsaXF1ZSA9IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZTsKLQotICAgIGlmIChvdGhlci5t
X3NjYWxlZEZvbnQpCi0gICAgICAgIGNhaXJvX3NjYWxlZF9mb250X3JlZmVyZW5jZShvdGhlci5t
X3NjYWxlZEZvbnQpOwotICAgIGlmIChtX3NjYWxlZEZvbnQpCi0gICAgICAgIGNhaXJvX3NjYWxl
ZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsKLSAgICBtX3NjYWxlZEZvbnQgPSBvdGhlci5t
X3NjYWxlZEZvbnQ7Ci0KLSAgICBpZiAob3RoZXIubV9wYXR0ZXJuKQotICAgICAgICBGY1BhdHRl
cm5SZWZlcmVuY2Uob3RoZXIubV9wYXR0ZXJuKTsKLSAgICBpZiAobV9wYXR0ZXJuKQotICAgICAg
ICBGY1BhdHRlcm5EZXN0cm95KG1fcGF0dGVybik7Ci0gICAgbV9wYXR0ZXJuID0gb3RoZXIubV9w
YXR0ZXJuOwotCi0gICAgaWYgKG1fZmFsbGJhY2tzKSB7Ci0gICAgICAgIEZjRm9udFNldERlc3Ry
b3kobV9mYWxsYmFja3MpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYmUgcmUtY3JlYXRlZCBvbiBk
ZW1hbmQuCi0gICAgICAgIG1fZmFsbGJhY2tzID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpCi0gICAgOiBtX3BhdHRlcm4oMCkKLSAgICAsIG1fZmFsbGJhY2tz
KDApCi0gICAgLCBtX3NjYWxlZEZvbnQoMCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1i
b29sIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkID0gZmFsc2U7Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoIUZjSW5pdCgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgaW5p
dCBmb250IGNvbmZpZyBsaWJyYXJ5XG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZvbnRQbGF0
Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLSAgICBpZiAobV9wYXR0ZXJuICYmICgo
RmNQYXR0ZXJuKiktMSAhPSBtX3BhdHRlcm4pKSB7Ci0gICAgICAgIEZjUGF0dGVybkRlc3Ryb3ko
bV9wYXR0ZXJuKTsKLSAgICAgICAgbV9wYXR0ZXJuID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9m
YWxsYmFja3MpIHsKLSAgICAgICAgRmNGb250U2V0RGVzdHJveShtX2ZhbGxiYWNrcyk7Ci0gICAg
ICAgIG1fZmFsbGJhY2tzID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9zY2FsZWRGb250KQotICAg
ICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7Ci19Ci0KLWJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKLXsKLSAgICAvLyBUT0RPOiBTdXBwb3J0
IGlzRml4ZWRQaXRjaCgpIGZvciBjdXN0b20gZm9udHMuCi0gICAgaWYgKCFtX3BhdHRlcm4pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBzcGFjaW5nOwotICAgIGlmIChGY1BhdHRl
cm5HZXRJbnRlZ2VyKG1fcGF0dGVybiwgRkNfU1BBQ0lORywgMCwgJnNwYWNpbmcpID09IEZjUmVz
dWx0TWF0Y2gpCi0gICAgICAgIHJldHVybiBzcGFjaW5nID09IEZDX01PTk87Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGF0dGVybiA9PSBvdGhl
ci5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX3BhdHRlcm4gPT0g
MCB8fCBtX3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkKLSAgICAg
ICAgICAgIHx8IG90aGVyLm1fcGF0dGVybiA9PSAwIHx8IG90aGVyLm1fcGF0dGVybiA9PSByZWlu
dGVycHJldF9jYXN0PEZjUGF0dGVybio+KC0xKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBGY1BhdHRlcm5FcXVhbChtX3BhdHRlcm4sIG90aGVyLm1fcGF0dGVybik7Ci19Ci0K
LSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi19CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVH
dGsuY3BwCShyZXZpc2lvbiA1NTQ2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29s
bGFib3JhLmNvLnVrPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2VUcmVl
Tm9kZS5oIgotCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEpCi17Ci0gICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdy
ZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUg
c3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgotICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBm
b3Igbm93LgotICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEZUX0ZhY2UgZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250
X2xvY2tfZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9zY2FsZWRGb250KTsKLSAgICBp
ZiAoIWZhY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGF2ZUdseXBocyA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICBHbHlwaCBnbHlwaCA9IEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgYnVmZmVyW2ldKTsK
LSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9m
ZnNldCArIGksIDAsIDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7Ci0gICAgICAgICAgICBoYXZl
R2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhaXJvX2Z0X3NjYWxlZF9m
b250X3VubG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZvbnQpOwot
Ci0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAJKHJldmlzaW9uIDU1
NDY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkds
eXBoQnVmZmVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCi17Ci0gICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9leHRlbnRzOwotICAg
IGNhaXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsKLSAgICBjYWlyb19zY2FsZWRfZm9u
dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0ZW50cyk7Ci0g
ICAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmFzY2Vu
dCkpOwotICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4obHJvdW5kZihmb250X2V4dGVu
dHMuZGVzY2VudCkpOwotICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3Vu
ZGYoZm9udF9leHRlbnRzLmhlaWdodCkpOwotICAgIC8vIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUg
cm91bmRpbmcgZXJyb3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3ZQotICAgIC8vIHVzZSBjYWlybykg
d2l0aCBzb21lIGZvbnRzLCBsaWtlIERlamFWdSBTYW5zIE1vbm8sIHdoaWNoIG1ha2VzCi0gICAg
Ly8gY2Fpcm8gcmVwb3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhhbiBhc2NlbnQgKyBkZXNjZW50LCB3
aGljaCBpcwotICAgIC8vIHdyb25nIGFuZCBjb25mdXNlcyBXZWJDb3JlJ3MgbGF5b3V0IHN5c3Rl
bS4gV29ya2Fyb3VuZCB0aGlzCi0gICAgLy8gd2hpbGUgd2UgZmlndXJlIG91dCB3aGF0J3MgZ29p
bmcgb24uCi0gICAgaWYgKG1fbGluZVNwYWNpbmcgPCBtX2FzY2VudCArIG1fZGVzY2VudCkKLSAg
ICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50OwotICAgIGNhaXJvX3Nj
YWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICJ4Iiwg
JnRleHRfZXh0ZW50cyk7Ci0gICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKLSAg
ICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRG
b250LCAiICIsICZ0ZXh0X2V4dGVudHMpOwotICAgIG1fc3BhY2VXaWR0aCA9IHN0YXRpY19jYXN0
PGZsb2F0Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKLSAgICBtX2xpbmVHYXAgPSBtX2xpbmVT
cGFjaW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0
ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLX0KLQotdm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0No
YXJXaWR0aCA9IDAuZjsKLSAgICBtX21heENoYXJXaWR0aCA9IDAuZjsKLSAgICBpbml0Q2hhcldp
ZHRocygpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQotewot
ICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwotICAgIG1fc21hbGxDYXBzRm9udERhdGEg
PSAwOwotfQotCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAg
IGlmICghbV9zbWFsbENhcHNGb250RGF0YSkgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZGVz
YyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICBkZXNjLnNldENv
bXB1dGVkU2l6ZSgwLjcwZipmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwotICAgICAg
ICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRl
c2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRh
ID0gbmV3IFNpbXBsZUZvbnREYXRhKCpwZGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBtX3NtYWxs
Q2Fwc0ZvbnREYXRhOwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgRlRf
RmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fcGxhdGZvcm1EYXRh
Lm1fc2NhbGVkRm9udCk7Ci0KLSAgICBpZiAoIWZhY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKEZj
RnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgY2hhcmFjdGVyc1tpXSkgPT0gMCkgewotICAgICAgICAg
ICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2Fs
ZWRGb250KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2Nh
bGVkRm9udCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6
ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3Jt
RGF0YS5pc0ZpeGVkUGl0Y2goKTsKLX0KLQotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9wbGF0Zm9y
bURhdGEubV9zY2FsZWRGb250KTsKLQotICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlw
aCwgMCwgMCB9OwotICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7Ci0gICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZj
Z2x5cGgsIDEsICZleHRlbnRzKTsKLQotICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9zcGFjZVdpZHRo
OwotICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9wbGF0Zm9ybURhdGEubV9zY2Fs
ZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAhPSAw
KQotICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOwotICAgIHJldHVybiB3Owot
fQotCi19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>