<?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>157024</bug_id>
          
          <creation_ts>2016-04-25 21:58:07 -0700</creation_ts>
          <short_desc>Make FontPlatformData conceptually immutable</short_desc>
          <delta_ts>2016-04-26 21:43:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1187258</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-25 21:58:07 -0700</bug_when>
    <thetext>Make FontPlatformData immutable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187260</commentid>
    <comment_count>1</comment_count>
      <attachid>277336</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-25 22:00:26 -0700</bug_when>
    <thetext>Created attachment 277336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187287</commentid>
    <comment_count>2</comment_count>
      <attachid>277345</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-26 00:04:46 -0700</bug_when>
    <thetext>Created attachment 277345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187380</commentid>
    <comment_count>3</comment_count>
      <attachid>277345</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-26 08:52:01 -0700</bug_when>
    <thetext>Comment on attachment 277345
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=277345&amp;action=review

&gt; Source/WebCore/platform/graphics/Font.cpp:256
&gt; +        FontPlatformData verticalRightPlatformData = FontPlatformData::cloneWithOrientation(m_platformData, Horizontal);

Can we use auto here instead of naming the type twice? Maybe we don’t need a local variable at all?

&gt; Source/WebCore/platform/graphics/Font.cpp:323
&gt; +        FontPlatformData nonSyntheticItalicFontPlatformData = FontPlatformData::cloneWithSyntheticOblique(m_platformData, false);

Would say the same thing except for the #if that might change things, I guess.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:95
&gt;  const FontPlatformData&amp; FontPlatformData::operator=(const FontPlatformData&amp; other)

Too bad we can’t just let the compiler generate this. Do any of the platformDataAssign functions do something other than what the compiler default would do? Seems like the only issue may be the lack of a smart pointer for m_scaledFont for Cairo!

Same thought about the copy constructor and platformDataInit.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:233
&gt; +    // vvvv These values are common to all ports vvvv

What’s with the &quot;vvvv&quot; thing? Not very attractive. Can we find another way to make this comment clear?

&gt; Source/WebCore/platform/graphics/freetype/FontPlatformData.h:73
&gt; +    static FontPlatformData cloneWithOrientation(const FontPlatformData&amp;, FontOrientation);
&gt; +    static FontPlatformData cloneWithSyntheticOblique(const FontPlatformData&amp;, bool);
&gt; +    static FontPlatformData cloneWithSize(const FontPlatformData&amp;, float);

This seems strange. Why an entirely separate header for this one version of FontPlatformData, but not for any of the others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187446</commentid>
    <comment_count>4</comment_count>
      <attachid>277345</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-26 10:18:15 -0700</bug_when>
    <thetext>Comment on attachment 277345
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=277345&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:95
&gt;&gt;  const FontPlatformData&amp; FontPlatformData::operator=(const FontPlatformData&amp; other)
&gt; 
&gt; Too bad we can’t just let the compiler generate this. Do any of the platformDataAssign functions do something other than what the compiler default would do? Seems like the only issue may be the lack of a smart pointer for m_scaledFont for Cairo!
&gt; 
&gt; Same thought about the copy constructor and platformDataInit.

I intend to migrate the Cairo pointer to a smart pointer class in the future. That way, we can delete many of these boilerplate functions.

&gt;&gt; Source/WebCore/platform/graphics/freetype/FontPlatformData.h:73
&gt;&gt; +    static FontPlatformData cloneWithSize(const FontPlatformData&amp;, float);
&gt; 
&gt; This seems strange. Why an entirely separate header for this one version of FontPlatformData, but not for any of the others?

I don&apos;t know. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187448</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-26 10:20:04 -0700</bug_when>
    <thetext>Committed r200094: &lt;http://trac.webkit.org/changeset/200094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187645</commentid>
    <comment_count>6</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2016-04-26 21:43:38 -0700</bug_when>
    <thetext>It looks GTK and EFL layout test have been broken since this commit.

- GTK : https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Tests%29/builds/15352
- EFL : https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/builds/27735</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277336</attachid>
            <date>2016-04-25 22:00:26 -0700</date>
            <delta_ts>2016-04-26 00:04:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157024-20160425220054.patch</filename>
            <type>text/plain</type>
            <size>19714</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwMDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzllODFkMzZkYzQ1Y2Vi
ZjJiZGZhYWRlZTJiZjc2MjMwYmYwNTJkMS4uNjdjM2Y0ZmNkZTI3ZjlhZDZkNzkyYmRmNjM1NDBi
MWEzZTA3ZWY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDE2LTA0LTI1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgTWFrZSBGb250
UGxhdGZvcm1EYXRhIGltbXV0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU3MDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkZWxldGVzIGFsbCBmdW5jdGlvbnMgd2hpY2ggbW9k
aWZ5IGEgRm9udFBsYXRmb3JtRGF0YSBvbmNlCisgICAgICAgIGl0IGhhcyBiZWVuIGNyZWF0ZWQu
IFRoaXMgbWFrZXMgZm9yIGEgY2xlYW5lciBkZXNpZ24uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp2ZXJ0aWNhbFJp
Z2h0T3JpZW50YXRpb25Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om5vblN5bnRoZXRp
Y0l0YWxpY0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmll
bnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhT
eW50aGV0aWNPYmxpcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRJc1N5c3Rl
bUZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0
U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRP
cmllbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpzZXRTeW50aGV0aWNPYmxpcXVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybUluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZURlcml2YXRpdmVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmNyZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisKKzIwMTYtMDQtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwogICAgICAgICBbQ29jb2FdIEd1YXJh
bnRlZSBGb250UGxhdGZvcm1EYXRhJ3MgbV9jZ0ZvbnQgaXMgbmV2ZXIgbnVsbHB0cgogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2OTI5CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggZWY0NDI1OGNlNDVmNjc5
YjhjNjllYjUwMjM3ZGM2YWViNWIxZGViYi4uZDdlNDlkODg3NDI2ZDg3MDE2ZjZmNmY0Zjg2MzJk
YTViYzUwYjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
QEAgLTI1Myw4ICsyNTMsNyBAQCBjb25zdCBGb250JiBGb250Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50
YXRpb25Gb250KCkgY29uc3QKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1
c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9y
aWVudGF0aW9uKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgdmVydGljYWxSaWdodFBsYXRm
b3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURh
dGEuc2V0T3JpZW50YXRpb24oSG9yaXpvbnRhbCk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEg
dmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGE6OmNsb25lV2l0aE9y
aWVudGF0aW9uKG1fcGxhdGZvcm1EYXRhLCBIb3Jpem9udGFsKTsKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZSh2ZXJ0aWNhbFJpZ2h0
UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KICAgICBB
U1NFUlQobV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiAhPSB0aGlz
KTsKQEAgLTMyMCw5ICszMTksMTAgQEAgY29uc3QgRm9udCYgRm9udDo6bm9uU3ludGhldGljSXRh
bGljRm9udCgpIGNvbnN0CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9k
ZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0
b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxp
YykgewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0FJ
Uk8pCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEuc2V0U3ludGhl
dGljT2JsaXF1ZShmYWxzZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGlj
SXRhbGljRm9udFBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGE6OmNsb25lV2l0aFN5bnRo
ZXRpY09ibGlxdWUobV9wbGF0Zm9ybURhdGEsIGZhbHNlKTsKKyNlbHNlCisgICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3Jt
RGF0YSk7CiAjZW5kaWYKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0
YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3Rv
bUZvbnQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCBlYWIxY2NmZGRmN2YzYjUzOTM2NTgwYWI1
YjViM2EwYTZmOTFkOTI0Li43NThkMzFiZTkxMzQ0Y2I1MzRhNDdkNDhkMmU1NWQ1OGM4OGUxNjkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmNwcApAQCAtNDQsMTIgKzQ0LDEyIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoKQogfQogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZs
b2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBU
ZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKLSAgICA6IG1fc3ludGhldGljQm9s
ZChzeW50aGV0aWNCb2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlx
dWUpCisgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24p
Ci0gICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkK
ICAgICAsIG1fdGV4dFJlbmRlcmluZ01vZGUodGV4dFJlbmRlcmluZ01vZGUpCisgICAgLCBtX3N5
bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50
aGV0aWNPYmxpcXVlKQogewogfQogCkBAIC03MSw2ICs3MSwyMCBAQCBGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSkKICAgICBw
bGF0Zm9ybURhdGFJbml0KHNvdXJjZSk7CiB9CiAKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udFBsYXRm
b3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc291
cmNlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgRm9udFBsYXRmb3JtRGF0
YSBjb3B5KHNvdXJjZSk7CisgICAgY29weS5tX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247Cisg
ICAgcmV0dXJuIGNvcHk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udFBsYXRmb3JtRGF0YTo6
Y2xvbmVXaXRoU3ludGhldGljT2JsaXF1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2Us
IGJvb2wgc3ludGhldGljT2JsaXF1ZSkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhIGNvcHkoc291
cmNlKTsKKyAgICBjb3B5Lm1fc3ludGhldGljT2JsaXF1ZSA9IHN5bnRoZXRpY09ibGlxdWU7Cisg
ICAgcmV0dXJuIGNvcHk7Cit9CisKIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9y
bURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKIHsKICAgICAv
LyBDaGVjayBmb3Igc2VsZi1hc3NpZ25tZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGI5NWI0OWQxMjc1MTg1YTM3
MTgxYTlmMDFkMmFiMDY5ZTFlZTdiNjcuLmViZWVmNWM0OGE4N2JmOGFkMjRmOWUwMmJjNGFmNDE0
OThmNjU5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmgKQEAgLTg3LDYgKzg3LDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRo
ZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmll
bnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIFRl
eHRSZW5kZXJpbmdNb2RlID0gQXV0b1RleHRSZW5kZXJpbmcpOwogI2VuZGlmCiAKKyAgICBzdGF0
aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhPcmllbnRhdGlvbihjb25zdCBGb250UGxhdGZv
cm1EYXRhJiwgRm9udE9yaWVudGF0aW9uKTsKKyAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBj
bG9uZVdpdGhTeW50aGV0aWNPYmxpcXVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sKTsK
KwogI2lmIFVTRShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUpOwogI2VuZGlmCkBAIC0x
MjQsNyArMTI3LDYgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShD
T0NPQSkKICAgICBib29sIGlzU3lzdGVtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1G
b250OyB9Ci0gICAgdm9pZCBzZXRJc1N5c3RlbUZvbnQoYm9vbCBpc1N5c3RlbUZvbnQpIHsgbV9p
c1N5c3RlbUZvbnQgPSBpc1N5c3RlbUZvbnQ7IH0KICNlbmRpZgogCiAjaWYgVVNFKENHKQpAQCAt
MTMzLDcgKzEzNSw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7
CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0
U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KICAgICBib29sIHN5bnRoZXRpY0Jv
bGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KICAgICBib29sIHN5bnRoZXRp
Y09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KICAgICBib29s
IGlzQ29sb3JCaXRtYXBGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbG9yQml0bWFwRm9udDsg
fQpAQCAtMTQyLDkgKzE0Myw2IEBAIHB1YmxpYzoKICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0
UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFJlbmRlcmluZ01vZGU7IH0KICAg
ICBib29sIGlzRm9yVGV4dENvbWJpbmUoKSBjb25zdCB7IHJldHVybiB3aWR0aFZhcmlhbnQoKSAh
PSBSZWd1bGFyV2lkdGg7IH0gLy8gS2VlcCBpbiBzeW5jIHdpdGggY2FsbGVycyBvZiBGb250RGVz
Y3JpcHRpb246OnNldFdpZHRoVmFyaWFudCgpLgogCi0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihG
b250T3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9u
OyB9Ci0gICAgdm9pZCBzZXRTeW50aGV0aWNPYmxpcXVlKGJvb2wgc3ludGhldGljT2JsaXF1ZSkg
eyBtX3N5bnRoZXRpY09ibGlxdWUgPSBzeW50aGV0aWNPYmxpcXVlOyB9Ci0KICNpZiBVU0UoQ0FJ
Uk8pCiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NhbGVkRm9udDsgfQogI2VuZGlmCkBAIC0xOTcsNyArMTk1LDcgQEAgcHVibGljOgogICAg
IH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pCi0gICAgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IG9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0OworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0
OwogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yMTUsMTUgKzIxMyw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05ULCBmbG9hdCBzaXplLCBIREMsIFdDSEFS
KiBmYWNlTmFtZSk7CiAjZW5kaWYKIAotcHVibGljOgotICAgIGJvb2wgbV9zeW50aGV0aWNCb2xk
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZSB7IGZhbHNlIH07Ci0gICAg
Rm9udE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBIb3Jpem9udGFsIH07Ci0gICAgZmxvYXQg
bV9zaXplIHsgMCB9OwotICAgIEZvbnRXaWR0aFZhcmlhbnQgbV93aWR0aFZhcmlhbnQgeyBSZWd1
bGFyV2lkdGggfTsKLSAgICBUZXh0UmVuZGVyaW5nTW9kZSBtX3RleHRSZW5kZXJpbmdNb2RlIHsg
QXV0b1RleHRSZW5kZXJpbmcgfTsKLQotcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAvLyBGSVhNRTogR2V0IHJpZCBvZiBvbmUgb2YgdGhlc2UuIFRoZXNlIHR3byBmb250cyBhcmUg
c3VidGx5IGRpZmZlcmVudCwgYW5kIGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIG9uZSB0byB1c2Ug
d2hlcmUuCiAgICAgUmV0YWluUHRyPENURm9udFJlZj4gbV9mb250OwpAQCAtMjM5LDkgKzIyOCwy
MSBAQCBwcml2YXRlOgogICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udCB7IG51
bGxwdHIgfTsKICNlbmRpZgogCisgICAgLy8gdnZ2diBUaGVzZSB2YWx1ZXMgYXJlIGNvbW1vbiB0
byBhbGwgcG9ydHMgdnZ2dgorICAgIC8vIEZJWE1FOiBJZiB0aGV5J3JlIGNvbW1vbiB0byBhbGwg
cG9ydHMsIHRoZXkgc2hvdWxkIG1vdmUgdG8gRm9udAorICAgIGZsb2F0IG1fc2l6ZSB7IDAgfTsK
KworICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgSG9yaXpvbnRhbCB9OworICAg
IEZvbnRXaWR0aFZhcmlhbnQgbV93aWR0aFZhcmlhbnQgeyBSZWd1bGFyV2lkdGggfTsKKyAgICBU
ZXh0UmVuZGVyaW5nTW9kZSBtX3RleHRSZW5kZXJpbmdNb2RlIHsgQXV0b1RleHRSZW5kZXJpbmcg
fTsKKworICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3lu
dGhldGljT2JsaXF1ZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ29sb3JCaXRtYXBGb250IHsg
ZmFsc2UgfTsKICAgICBib29sIG1faXNIYXNoVGFibGVEZWxldGVkVmFsdWUgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc1N5c3RlbUZvbnQgeyBmYWxzZSB9OworICAgIC8vIF5eXl4gVGhvc2UgdmFs
dWVzIGFyZSBjb21tb24gdG8gYWxsIHBvcnRzIF5eXl4KKwogI2lmIFBMQVRGT1JNKElPUykKICAg
ICBib29sIG1faXNFbW9qaSB7IGZhbHNlIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNw
cAppbmRleCA0ZTRlODMwZTU5NmQ4MDE2YzI4YTY0OGEwZGY1NThlYzQwMDIyZmRmLi5jMDhhMzk4
MWM3ZDUyMDlhOWExODViMTk0YjU0Y2MxODViYjYzMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQu
Y3BwCkBAIC03OTEsNyArNzkxLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICBib29s
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWU7CiAgICAgc3RkOjp0aWUoc3ludGhldGlj
Qm9sZCwgc3ludGhldGljT2JsaXF1ZSkgPSBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKHN1YnN0
aXR1dGVGb250LCBkZXNjcmlwdGlvbiwgaXNQbGF0Zm9ybUZvbnQpLmJvbGRPYmxpcXVlUGFpcigp
OwogCi0gICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KHN1YnN0aXR1dGVGb250LCBw
bGF0Zm9ybURhdGEuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0
Zm9ybURhdGEubV9vcmllbnRhdGlvbiwgcGxhdGZvcm1EYXRhLm1fd2lkdGhWYXJpYW50LCBwbGF0
Zm9ybURhdGEubV90ZXh0UmVuZGVyaW5nTW9kZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRl
cm5hdGVGb250KHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBzeW50aGV0aWNC
b2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgcGxhdGZv
cm1EYXRhLndpZHRoVmFyaWFudCgpLCBwbGF0Zm9ybURhdGEudGV4dFJlbmRlcmluZ01vZGUoKSk7
CiAKICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNj
YWRlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FzY2FkZUNvY29hLm1tCmluZGV4IDA1MTBkMWY3MDdiOThiYTQ4ZDA5ZTM3ZjE4OGQ0ZDMwM2M0
ZGQ4YTAuLmMzYmVhOWMxYTk0MmFkMWJjZjc5YjQyNmQ5ZWNjOTVkMThjNDUwMWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
CiAgICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9udCgpKTsK
ICAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKICAgICBtYXRyaXguZCA9IC1tYXRyaXguZDsKLSAg
ICBpZiAocGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSkgeworICAgIGlmIChwbGF0Zm9y
bURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CiAgICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVl
U2tldyA9IHRhbmYoU1lOVEhFVElDX09CTElRVUVfQU5HTEUgKiBwaUZsb2F0IC8gMTgwKTsKICAg
ICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAgICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQppbmRleCAxY2Iy
NzY0ODMzNDQ5NjM0YWUyNjdhZTYyNjlhNDMzOGU1NWE0NTgwLi43ZmUwYzJlMThiNGQyZDY2M2Zj
NmJhZjE5YzU0ZGZlNDk0YTM2MzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgRm9u
dDo6cGxhdGZvcm1Jbml0KCkKIHsKICAgICAvLyBGSVhNRTogVW5pZnkgdGhlc2UgdHdvIGNvZGVw
YXRocwogI2lmIFVTRShBUFBLSVQpCi0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKKyAgICBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOwog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwg
MTAxMTAwCiAgICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgpAQCAt
MTA5LDcgKzEwOSw3IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIAogICAgIC8vIFNvbWUg
Zm9udHMgZXJyb25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2YWx1ZS4gV2Ug
Zm9sbG93IENvcmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0CiAgICAgLy8gc3VjaCBmb250cyBtZWFu
dCB0aGUgc2FtZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KLSAgICBm
bG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgZmxvYXQgcG9pbnRT
aXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1U
b1VuaXRzKENHRm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwogICAgIGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHMoLWFi
cyhDR0ZvbnRHZXREZXNjZW50KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSksIHVuaXRzUGVyRW0p
ICogcG9pbnRTaXplOwogICAgIGZsb2F0IGNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9u
dEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIAog
I2Vsc2UKIAotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3lu
dGhldGljQm9sZCA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7
CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9s
ZCgpID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKIAogICAg
IENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CiAgICAgRm9udFNlcnZp
Y2VzSU9TIGZvbnRTZXJ2aWNlKGN0Rm9udCk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBGb250
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRM
ZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKICAgICAgICAgY29uc3QgVUludDgqIG9zMiA9
IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOwogICAgICAgICBTSW50MTYgb3MyQXZn
Q2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOwotICAgICAgICBtX2F2Z0NoYXJXaWR0
aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1Bl
ckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOworICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9
IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVt
KCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ0dGb250Q29weVRhYmxlRm9yVGFnKG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpLCAnaGVhZCcpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEZvbnQ6
OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiAgICAgICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nh
c3Q8U0ludDE2Pih1eE1pbik7CiAgICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0lu
dDE2Pih1eE1heCk7CiAgICAgICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1h
eCAtIHhNaW4pOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYs
IG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKKyAg
ICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNz
LnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CiAgICAgfQogI2VuZGlmCiAK
QEAgLTM2MywxNiArMzYzLDE2IEBAIHN0YXRpYyBSZWZQdHI8Rm9udD4gY3JlYXRlRGVyaXZhdGl2
ZUZvbnQoQ1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIEZvbnRPcmllbnRhCiAgICAgaWYgKCFm
b250KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2Nh
bGVkRm9udERhdGEoZm9udCwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBvcmllbnRhdGlvbik7Ci0KICAg
ICBpZiAoc3ludGhldGljQm9sZCkKICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRy
YWl0OwogICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCiAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NU
Rm9udEl0YWxpY1RyYWl0OwogCi0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRy
YWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7Ci0g
ICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250
Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKLSAg
ICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIGtDVEZv
bnRJdGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0SXRhbGlj
KTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMoZm9udCk7CisKKyAgICBib29sIHVzZWRTeW50aGV0aWNCb2xkID0gKGZv
bnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RG
b250VHJhaXRCb2xkKTsKKyAgICBib29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFp
dHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRU
cmFpdEl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShmb250LCBz
aXplLCB1c2VkU3ludGhldGljQm9sZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9u
KTsKIAogICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOwogfQpAQCAtNTEy
LDcgKzUxMiw3IEBAIFJlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNp
emFibGVGZWF0dXJlcygpIGNvbnN0CiAgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNp
emUoKTsKICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3lt
Ym9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKICAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0
Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0
cywgbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkLCBtX3BsYXRmb3JtRGF0YS5tX3N5bnRo
ZXRpY09ibGlxdWUpOworICAgIHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChjdEZvbnQuZ2V0
KCksIHNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1
ZSgpKTsKIH0KIAogUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKQEAgLTUyMiw3
ICs1MjIsNyBAQCBSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRgogICAgIFJldGFpblB0cjxDVEZvbnRE
ZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+
IHNjYWxlZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250
RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOwogCi0gICAgcmV0dXJuIGNyZWF0ZURl
cml2YXRpdmVGb250KHNjYWxlZEZvbnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVu
dGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCwgbV9w
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKTsKKyAgICByZXR1cm4gY3JlYXRlRGVyaXZh
dGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRm
b3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOwogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBp
dGNoKCkKQEAgLTYyOCwxNCArNjI4LDE0IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7CiAgICAgYm9vbCBwb3B1bGF0ZWRBZHZh
bmNlID0gZmFsc2U7CiAgICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhG
YWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcih0aGlzLT5wbGF0Zm9ybURh
dGEoKSwgZ2x5cGgsIGFkdmFuY2UsIHBvcHVsYXRlZEFkdmFuY2UpKSB7Ci0gICAgICAgIGZsb2F0
IHBvaW50U2l6ZSA9IHBsYXRmb3JtRGF0YSgpLm1fc2l6ZTsKKyAgICAgICAgZmxvYXQgcG9pbnRT
aXplID0gcGxhdGZvcm1EYXRhKCkuc2l6ZSgpOwogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwogICAg
ICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5j
Z0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0eWxlKHBsYXRmb3JtRGF0YSgpKSwgJmdseXBoLCAxLCAm
YWR2YW5jZSkpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUg
PSBhZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOwog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAl
QCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOwogICAgICAgICAgICAgYWR2YW5jZS53
aWR0aCA9IDA7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlICYm
IHBsYXRmb3JtRGF0YSgpLm1fc2l6ZSkKKyAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNl
ICYmIHBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JH
bHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6b250YWwgPyBrQ1RGb250T3JpZW50
YXRpb25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWwsICZnbHlwaCwgJmFk
dmFuY2UsIDEpOwogCiAgICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggODViZWI1N2E3ZDQzNGUy
NDIwZTc4OGE1ZjlkOTc2Y2M0NTYxZTdjMi4uNjc0M2FiYTVhNWE0OTJkMjMwNWZkMDcxZTU0ZjZi
ZWQ4ZWNiYTI2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMTg4LDcgKzE4
OCw3IEBAIFJldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVx
dWFsaXR5Q2hlY2soKSBjb25zdAogICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNoZWNrKGN0
Rm9udCgpKTsKIH0KIAotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6
Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVmZmVy
PiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlKSBjb25zdAog
ewogICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDR0ZvbnRDb3B5
VGFibGVGb3JUYWcoY2dGb250KCksIHRhYmxlKSkpCiAgICAgICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OndyYXBDRkRhdGEoZGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4u
Y3BwCmluZGV4IGM5MWRiMWIwYzBjZWEyZDJlMWY0OTljMjFmOWZmNDI1YjUyZDU1MTEuLjJjYjNk
N2FlYTUzNDcwZDYzNTZjMTc1ZTkyMThkOGZmYmM4NzliYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUioK
ICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKICAgICBjYWlyb19tYXRyaXhf
aW5pdF9zY2FsZSgmc2l6ZU1hdHJpeCwgc2l6ZSwgc2l6ZSk7CiAKLSAgICBzdGF0aWMgY2Fpcm9f
Zm9udF9vcHRpb25zX3QqIGZvbnRPcHRpb25zID0gMDsKKyAgICBzdGF0aWMgY2Fpcm9fZm9udF9v
cHRpb25zX3QqIGZvbnRPcHRpb25zID0gbnVsbHB0cjsKICAgICBpZiAoIWZvbnRPcHRpb25zKSB7
CiAgICAgICAgZm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CiAgICAg
ICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMoZm9udE9wdGlvbnMsIENBSVJPX0FO
VElBTElBU19TVUJQSVhFTCk7CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBGb250UGxhdGZvcm1E
YXRhOjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSkKIHsK
ICAgICBtX2ZvbnQgPSBzb3VyY2UubV9mb250OwogICAgIG1fdXNlR0RJID0gc291cmNlLm1fdXNl
R0RJOwotICAgIG1fc2NhbGVkRm9udCA9IDA7CisgICAgbV9zY2FsZWRGb250ID0gbnVsbHB0cjsK
IAogICAgIGlmIChzb3VyY2UubV9zY2FsZWRGb250KQogICAgICAgICBtX3NjYWxlZEZvbnQgPSBj
YWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uoc291cmNlLm1fc2NhbGVkRm9udCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277345</attachid>
            <date>2016-04-26 00:04:46 -0700</date>
            <delta_ts>2016-04-26 08:52:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157024-20160426000514.patch</filename>
            <type>text/plain</type>
            <size>23925</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwMDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzlmMTVjNjM2MGVlOTk0
NTU2ODZmZjRhNGUwYjE5N2QxOTliYzZhNy4uZjc3YWZlN2M2ZGVhMmU3MjI3MDQwMzhiYTYwOWEx
ZDFiZDA4Y2I1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE2LTA0LTI1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBGb250
UGxhdGZvcm1EYXRhIGltbXV0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU3MDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkZWxldGVzIGFsbCBmdW5jdGlvbnMgd2hpY2ggbW9k
aWZ5IGEgRm9udFBsYXRmb3JtRGF0YSBvbmNlCisgICAgICAgIGl0IGhhcyBiZWVuIGNyZWF0ZWQu
IFRoaXMgbWFrZXMgZm9yIGEgY2xlYW5lciBkZXNpZ24uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp2ZXJ0aWNhbFJp
Z2h0T3JpZW50YXRpb25Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om5vblN5bnRoZXRp
Y0l0YWxpY0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmll
bnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhT
eW50aGV0aWNPYmxpcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRJc1N5c3Rl
bUZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0
U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRP
cmllbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpzZXRTeW50aGV0aWNPYmxpcXVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybUluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZURlcml2YXRpdmVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmNyZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisKIDIwMTYtMDQtMjUgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBidWlsZCBmbGFn
IGZvciB0ZW1wbGF0ZSBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCBlZjQ0MjU4Y2U0NWY2NzliOGM2OWViNTAyMzdkYzZhZWI1YjFkZWJiLi5k
N2U0OWQ4ODc0MjZkODcwMTZmNmY2ZjRmODYzMmRhNWJjNTBiNjlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMjUzLDggKzI1Myw3IEBAIGNvbnN0IEZv
bnQmIEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24pIHsKLSAgICAgICAgRm9udFBs
YXRmb3JtRGF0YSB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhKTsKLSAg
ICAgICAgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YS5zZXRPcmllbnRhdGlvbihIb3Jpem9udGFs
KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhID0g
Rm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24obV9wbGF0Zm9ybURhdGEsIEhv
cml6b250YWwpOwogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgp
LCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogICAgIEFTU0VSVChtX2Rlcml2ZWRGb250RGF0YS0+dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uICE9IHRoaXMpOwpAQCAtMzIwLDkgKzMxOSwxMCBAQCBjb25z
dCBGb250JiBGb250Ojpub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3QKICAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDQUlSTykKLSAgICAgICAgbm9uU3ludGhldGljSXRh
bGljRm9udFBsYXRmb3JtRGF0YS5zZXRTeW50aGV0aWNPYmxpcXVlKGZhbHNlKTsKKyAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhID0gRm9u
dFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoU3ludGhldGljT2JsaXF1ZShtX3BsYXRmb3JtRGF0YSwg
ZmFsc2UpOworI2Vsc2UKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBub25TeW50aGV0aWNJdGFs
aWNGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhKTsKICNlbmRpZgogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljID0gY3JlYXRlKG5vblN5bnRoZXRpY0l0
YWxpY0ZvbnRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCmlu
ZGV4IGVhYjFjY2ZkZGY3ZjNiNTM5MzY1ODBhYjViNWIzYTBhNmY5MWQ5MjQuLmE1YTIxODg0NTE4
NTRiYzQ3MzY5Nzk2ODg5OTczOGYzYjgxY2EwZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCkBAIC00NCwxMiArNDQs
MTIgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSgpCiB9CiAKIEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9u
dFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJp
bmdNb2RlKQotICAgIDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRpY0JvbGQpCi0gICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1ZSkKKyAgICA6IG1fc2l6ZShzaXplKQogICAg
ICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKLSAgICAsIG1fc2l6ZShzaXplKQogICAgICwg
bV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQogICAgICwgbV90ZXh0UmVuZGVyaW5nTW9kZSh0
ZXh0UmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQor
ICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlxdWUpCiB7CiB9CiAKQEAgLTcx
LDYgKzcxLDI3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgc291cmNlKQogICAgIHBsYXRmb3JtRGF0YUluaXQoc291cmNlKTsKIH0K
IAorRm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlv
bihjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhIGNvcHkoc291cmNlKTsKKyAgICBjb3B5Lm1f
b3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKKyAgICByZXR1cm4gY29weTsKK30KKworRm9udFBs
YXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTeW50aGV0aWNPYmxpcXVlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlKQorewor
ICAgIEZvbnRQbGF0Zm9ybURhdGEgY29weShzb3VyY2UpOworICAgIGNvcHkubV9zeW50aGV0aWNP
YmxpcXVlID0gc3ludGhldGljT2JsaXF1ZTsKKyAgICByZXR1cm4gY29weTsKK30KKworRm9udFBs
YXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHNvdXJjZSwgZmxvYXQgc2l6ZSkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhIGNv
cHkoc291cmNlKTsKKyAgICBjb3B5Lm1fc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGNvcHk7Cit9
CisKIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKIHsKICAgICAvLyBDaGVjayBmb3Igc2VsZi1h
c3NpZ25tZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5oCmluZGV4IGI5NWI0OWQxMjc1MTg1YTM3MTgxYTlmMDFkMmFiMDY5ZTFl
ZTdiNjcuLmMwY2VkMDBiMzZjNjY5OTE2ODBmMWU4MzU5NWVhOWExM2YzYWE1YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
QEAgLTc0LDYgKzc0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRm9udERlc2NyaXB0
aW9uOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCisvLyBUaGlzIGNsYXNzIGlzIGNvbmNlcHR1YWxs
eSBpbW11dGFibGUuIE9uY2UgY3JlYXRlZCwgbm8gaW5zdGFuY2VzIHNob3VsZCBldmVyIGNoYW5n
ZSAoaW4gYW4gb2JzZXJ2YWJsZSB3YXkpLgogY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC04Nyw2ICs4OCwxMCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0
IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUg
PSBmYWxzZSwgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9
IFJlZ3VsYXJXaWR0aCwgVGV4dFJlbmRlcmluZ01vZGUgPSBBdXRvVGV4dFJlbmRlcmluZyk7CiAj
ZW5kaWYKIAorICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhIGNsb25lV2l0aE9yaWVudGF0aW9u
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBGb250T3JpZW50YXRpb24pOworICAgIHN0YXRpYyBG
b250UGxhdGZvcm1EYXRhIGNsb25lV2l0aFN5bnRoZXRpY09ibGlxdWUoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYsIGJvb2wpOworICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhIGNsb25lV2l0aFNp
emUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGZsb2F0KTsKKwogI2lmIFVTRShDRykKICAgICBG
b250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFu
dCwgVGV4dFJlbmRlcmluZ01vZGUpOwogI2VuZGlmCkBAIC0xMjQsNyArMTI5LDYgQEAgcHVibGlj
OgogCiAjaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShDT0NPQSkKICAgICBib29sIGlzU3lz
dGVtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1Gb250OyB9Ci0gICAgdm9pZCBzZXRJ
c1N5c3RlbUZvbnQoYm9vbCBpc1N5c3RlbUZvbnQpIHsgbV9pc1N5c3RlbUZvbnQgPSBpc1N5c3Rl
bUZvbnQ7IH0KICNlbmRpZgogCiAjaWYgVVNFKENHKQpAQCAtMTMzLDcgKzEzNyw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CiAgICAgZmxvYXQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7IG1f
c2l6ZSA9IHNpemU7IH0KICAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBt
X3N5bnRoZXRpY0JvbGQ7IH0KICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJl
dHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KICAgICBib29sIGlzQ29sb3JCaXRtYXBGb250KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0NvbG9yQml0bWFwRm9udDsgfQpAQCAtMTQyLDkgKzE0NSw2IEBA
IHB1YmxpYzoKICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dFJlbmRlcmluZ01vZGU7IH0KICAgICBib29sIGlzRm9yVGV4dENvbWJp
bmUoKSBjb25zdCB7IHJldHVybiB3aWR0aFZhcmlhbnQoKSAhPSBSZWd1bGFyV2lkdGg7IH0gLy8g
S2VlcCBpbiBzeW5jIHdpdGggY2FsbGVycyBvZiBGb250RGVzY3JpcHRpb246OnNldFdpZHRoVmFy
aWFudCgpLgogCi0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRTeW50
aGV0aWNPYmxpcXVlKGJvb2wgc3ludGhldGljT2JsaXF1ZSkgeyBtX3N5bnRoZXRpY09ibGlxdWUg
PSBzeW50aGV0aWNPYmxpcXVlOyB9Ci0KICNpZiBVU0UoQ0FJUk8pCiAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQogI2Vu
ZGlmCkBAIC0xOTcsNyArMTk3LDcgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBQTEFURk9STShXSU4pCi0gICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IG9wZW5U
eXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0OwogI2VuZGlmCiAKICNpZm5kZWYg
TkRFQlVHCkBAIC0yMTUsMTUgKzIxNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybURh
dGFJbml0KEhGT05ULCBmbG9hdCBzaXplLCBIREMsIFdDSEFSKiBmYWNlTmFtZSk7CiAjZW5kaWYK
IAotcHVibGljOgotICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fc3ludGhldGljT2JsaXF1ZSB7IGZhbHNlIH07Ci0gICAgRm9udE9yaWVudGF0aW9uIG1fb3Jp
ZW50YXRpb24geyBIb3Jpem9udGFsIH07Ci0gICAgZmxvYXQgbV9zaXplIHsgMCB9OwotICAgIEZv
bnRXaWR0aFZhcmlhbnQgbV93aWR0aFZhcmlhbnQgeyBSZWd1bGFyV2lkdGggfTsKLSAgICBUZXh0
UmVuZGVyaW5nTW9kZSBtX3RleHRSZW5kZXJpbmdNb2RlIHsgQXV0b1RleHRSZW5kZXJpbmcgfTsK
LQotcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBGSVhNRTogR2V0IHJpZCBv
ZiBvbmUgb2YgdGhlc2UuIFRoZXNlIHR3byBmb250cyBhcmUgc3VidGx5IGRpZmZlcmVudCwgYW5k
IGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIG9uZSB0byB1c2Ugd2hlcmUuCiAgICAgUmV0YWluUHRy
PENURm9udFJlZj4gbV9mb250OwpAQCAtMjM5LDkgKzIzMCwyMSBAQCBwcml2YXRlOgogICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udCB7IG51bGxwdHIgfTsKICNlbmRpZgogCisg
ICAgLy8gdnZ2diBUaGVzZSB2YWx1ZXMgYXJlIGNvbW1vbiB0byBhbGwgcG9ydHMgdnZ2dgorICAg
IC8vIEZJWE1FOiBJZiB0aGV5J3JlIGNvbW1vbiB0byBhbGwgcG9ydHMsIHRoZXkgc2hvdWxkIG1v
dmUgdG8gRm9udAorICAgIGZsb2F0IG1fc2l6ZSB7IDAgfTsKKworICAgIEZvbnRPcmllbnRhdGlv
biBtX29yaWVudGF0aW9uIHsgSG9yaXpvbnRhbCB9OworICAgIEZvbnRXaWR0aFZhcmlhbnQgbV93
aWR0aFZhcmlhbnQgeyBSZWd1bGFyV2lkdGggfTsKKyAgICBUZXh0UmVuZGVyaW5nTW9kZSBtX3Rl
eHRSZW5kZXJpbmdNb2RlIHsgQXV0b1RleHRSZW5kZXJpbmcgfTsKKworICAgIGJvb2wgbV9zeW50
aGV0aWNCb2xkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZSB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2lzQ29sb3JCaXRtYXBGb250IHsgZmFsc2UgfTsKICAgICBib29sIG1f
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1N5c3RlbUZv
bnQgeyBmYWxzZSB9OworICAgIC8vIF5eXl4gVGhvc2UgdmFsdWVzIGFyZSBjb21tb24gdG8gYWxs
IHBvcnRzIF5eXl4KKwogI2lmIFBMQVRGT1JNKElPUykKICAgICBib29sIG1faXNFbW9qaSB7IGZh
bHNlIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCA0ZTRlODMwZTU5NmQ4
MDE2YzI4YTY0OGEwZGY1NThlYzQwMDIyZmRmLi5jMDhhMzk4MWM3ZDUyMDlhOWExODViMTk0YjU0
Y2MxODViYjYzMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC03OTEsNyArNzkxLDcg
QEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICBib29sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY09ibGlxdWU7CiAgICAgc3RkOjp0aWUoc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1
ZSkgPSBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKHN1YnN0aXR1dGVGb250LCBkZXNjcmlwdGlv
biwgaXNQbGF0Zm9ybUZvbnQpLmJvbGRPYmxpcXVlUGFpcigpOwogCi0gICAgRm9udFBsYXRmb3Jt
RGF0YSBhbHRlcm5hdGVGb250KHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEubV9vcmllbnRhdGlv
biwgcGxhdGZvcm1EYXRhLm1fd2lkdGhWYXJpYW50LCBwbGF0Zm9ybURhdGEubV90ZXh0UmVuZGVy
aW5nTW9kZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KHN1YnN0aXR1dGVG
b250LCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVl
LCBwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgcGxhdGZvcm1EYXRhLndpZHRoVmFyaWFudCgp
LCBwbGF0Zm9ybURhdGEudGV4dFJlbmRlcmluZ01vZGUoKSk7CiAKICAgICByZXR1cm4gZm9udEZv
clBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCmluZGV4
IDA1MTBkMWY3MDdiOThiYTQ4ZDA5ZTM3ZjE4OGQ0ZDMwM2M0ZGQ4YTAuLmMzYmVhOWMxYTk0MmFk
MWJjZjc5YjQyNmQ5ZWNjOTVkMThjNDUwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQpAQCAtMjgw
LDcgKzI4MCw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgICAgIG1hdHJpeCA9IENU
Rm9udEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9udCgpKTsKICAgICBtYXRyaXguYiA9IC1tYXRy
aXguYjsKICAgICBtYXRyaXguZCA9IC1tYXRyaXguZDsKLSAgICBpZiAocGxhdGZvcm1EYXRhLm1f
c3ludGhldGljT2JsaXF1ZSkgeworICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1
ZSgpKSB7CiAgICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVlU2tldyA9IHRhbmYoU1lOVEhFVElD
X09CTElRVUVfQU5HTEUgKiBwaUZsb2F0IC8gMTgwKTsKICAgICAgICAgaWYgKHBsYXRmb3JtRGF0
YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZp
bmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgb2JsaXF1
ZVNrZXcsIDAsIDEsIDAsIDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQppbmRleCAxY2IyNzY0ODMzNDQ5NjM0YWUyNjdhZTYy
NjlhNDMzOGU1NWE0NTgwLi43ZmUwYzJlMThiNGQyZDY2M2ZjNmJhZjE5YzU0ZGZlNDk0YTM2MzQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIHsK
ICAgICAvLyBGSVhNRTogVW5pZnkgdGhlc2UgdHdvIGNvZGVwYXRocwogI2lmIFVTRShBUFBLSVQp
Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNC
b2xkID8gMS4wZiA6IDAuZjsKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3Jt
RGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOwogCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMTAwCiAgICAgLy8gV29yayBh
cm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQg
Rm9udDo6cGxhdGZvcm1Jbml0KCkKIAogICAgIC8vIFNvbWUgZm9udHMgZXJyb25lb3VzbHkgc3Bl
Y2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2YWx1ZS4gV2UgZm9sbG93IENvcmUgVGV4dCBpbiBh
c3N1bWluZyB0aGF0CiAgICAgLy8gc3VjaCBmb250cyBtZWFudCB0aGUgc2FtZSBkaXN0YW5jZSwg
YnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3Bs
YXRmb3JtRGF0YS5tX3NpemU7CisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOwogICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldEFzY2Vu
dChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwogICAg
IGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHMoLWFicyhDR0ZvbnRHZXREZXNjZW50KG1f
cGxhdGZvcm1EYXRhLmNnRm9udCgpKSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwogICAgIGZs
b2F0IGNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldENhcEhlaWdodChtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwpAQCAtMTc0LDcgKzE3
NCw3IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIAogI2Vsc2UKIAotICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1f
cGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CisgICAgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gY2VpbGYobV9wbGF0Zm9y
bURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKIAogICAgIENURm9udFJlZiBjdEZvbnQgPSBt
X3BsYXRmb3JtRGF0YS5mb250KCk7CiAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNlKGN0
Rm9udCk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQogICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkp
ID49IDQpIHsKICAgICAgICAgY29uc3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3My
VGFibGUuZ2V0KCkpOwogICAgICAgICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICog
MjU2ICsgb3MyWzNdOwotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9z
MkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURh
dGEubV9zaXplOworICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2
Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFk
b3B0Q0YoQ0dGb250Q29weVRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnaGVh
ZCcpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5p
dCgpCiAgICAgICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1pbik7CiAg
ICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7CiAgICAgICAg
IGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAtIHhNaW4pOwotICAgICAgICBt
X21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1fZm9udE1ldHJpY3MudW5pdHNQ
ZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGgg
PSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTM2MywxNiArMzYzLDE2IEBA
IHN0YXRpYyBSZWZQdHI8Rm9udD4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoQ1RGb250UmVmIGZvbnQs
IGZsb2F0IHNpemUsIEZvbnRPcmllbnRhCiAgICAgaWYgKCFmb250KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoZm9udCwgc2l6
ZSwgZmFsc2UsIGZhbHNlLCBvcmllbnRhdGlvbik7Ci0KICAgICBpZiAoc3ludGhldGljQm9sZCkK
ICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OwogICAgIGlmIChzeW50aGV0
aWNJdGFsaWMpCiAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OwogCi0g
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJv
bGljVHJhaXRzKHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7Ci0gICAgc2NhbGVkRm9udERhdGEubV9z
eW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxl
ZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKLSAgICBzY2FsZWRGb250RGF0YS5tX3N5
bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCkgJiYgIShz
Y2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBDVEZvbnRTeW1ib2xp
Y1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7
CisKKyAgICBib29sIHVzZWRTeW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9s
ZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICBi
b29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJh
aXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgRm9u
dFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShmb250LCBzaXplLCB1c2VkU3ludGhldGljQm9s
ZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9uKTsKIAogICAgIHJldHVybiBGb250
OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOwogfQpAQCAtNTEyLDcgKzUxMiw3IEBAIFJlZlB0cjxG
b250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0
CiAgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKICAgICBDVEZvbnRTeW1i
b2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9y
bURhdGEuZm9udCgpKTsKICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZvbnQgPSBjcmVhdGVD
VEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7
Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9w
bGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEubV9z
eW50aGV0aWNCb2xkLCBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUpOworICAgIHJl
dHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChjdEZvbnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0Jv
bGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKTsKIH0KIAogUmVmUHRyPEZv
bnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKQEAgLTUyMiw3ICs1MjIsNyBAQCBSZWZQdHI8Rm9u
dD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGZsb2F0IHNjYWxlRgogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVz
Y3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSkpOwogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENG
KENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6
ZSwgbnVsbHB0cikpOwogCi0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KHNjYWxlZEZv
bnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMs
IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCwgbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNPYmxpcXVlKTsKKyAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5n
ZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9w
bGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxp
cXVlKCkpOwogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKQEAgLTYyOCwxNCArNjI4
LDE0IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWw7CiAgICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFsc2U7CiAgICAgaWYg
KChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNlRmFz
dEdseXBoQWR2YW5jZUdldHRlcih0aGlzLT5wbGF0Zm9ybURhdGEoKSwgZ2x5cGgsIGFkdmFuY2Us
IHBvcHVsYXRlZEFkdmFuY2UpKSB7Ci0gICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IHBsYXRmb3Jt
RGF0YSgpLm1fc2l6ZTsKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCku
c2l6ZSgpOwogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwogICAgICAgICBpZiAoIUNHRm9udEdldEds
eXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmlu
Z1N0eWxlKHBsYXRmb3JtRGF0YSgpKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKICAgICAgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENHRm9udENvcHlG
dWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOwogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgp
LCBwb2ludFNpemUpOwogICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CiAgICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlICYmIHBsYXRmb3JtRGF0YSgpLm1fc2l6
ZSkKKyAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlICYmIHBsYXRmb3JtRGF0YSgpLnNp
emUoKSkKICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIGhvcml6b250YWwgPyBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsIDoga0NU
Rm9udE9yaWVudGF0aW9uVmVydGljYWwsICZnbHlwaCwgJmFkdmFuY2UsIDEpOwogCiAgICAgcmV0
dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZv
cm1EYXRhQ29jb2EubW0KaW5kZXggODViZWI1N2E3ZDQzNGUyNDIwZTc4OGE1ZjlkOTc2Y2M0NTYx
ZTdjMi4uNjc0M2FiYTVhNWE0OTJkMjMwNWZkMDcxZTU0ZjZiZWQ4ZWNiYTI2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0
YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMTg4LDcgKzE4OCw3IEBAIFJldGFpblB0cjxDRlR5
cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2soKSBjb25zdAog
ICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNoZWNrKGN0Rm9udCgpKTsKIH0KIAotUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMy
X3QgdGFibGUpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRhOjpv
cGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlKSBjb25zdAogewogICAgIGlmIChSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDR0ZvbnRDb3B5VGFibGVGb3JUYWcoY2dGb250KCks
IHRhYmxlKSkpCiAgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggYzliOTVlNjljNGRkNjUzMGM4YWFm
ZmRmMzEyZTA3ZjRlNzI5NjNjNC4uYjEyYzJhMjVkYmNhZGZjYTVkNjgwMzMyNjQ0ZDljYTcyMDQy
NjU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtNjgsNiArNjgsMTAgQEAgcHVibGlj
OgogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogICAgIEZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGZsb2F0IHNpemUpOwogCisg
ICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgY2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYsIEZvbnRPcmllbnRhdGlvbik7CisgICAgc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGEgY2xvbmVXaXRoU3ludGhldGljT2JsaXF1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCk7CisgICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgY2xvbmVXaXRoU2l6ZShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgZmxvYXQpOworCiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIAog
ICAgIEhhcmZCdXp6RmFjZSogaGFyZkJ1enpGYWNlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJl
ZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAppbmRleCBiOWNiZmI4MDdmZTE1OTY5NzQ2NGE2MjQ4
OWFkMGE2NGViYzc0YTA5Li4zNzg3OTZlNjZjZGM5NzI0ZWFkYWU0ZWQyNWY0ZTczNWU0OGQ4NTYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKQEAgLTI2NSw2
ICsyNjUsMjcgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogICAgICAg
ICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiB9CiAKK0ZvbnRQbGF0
Zm9ybURhdGEgRm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgc291cmNlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgRm9udFBsYXRmb3JtRGF0YSBjb3B5KHNvdXJjZSk7CisgICAgY29weS5tX29yaWVudGF0aW9u
ID0gb3JpZW50YXRpb247CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEg
Rm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoU3ludGhldGljT2JsaXF1ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBzb3VyY2UsIGJvb2wgc3ludGhldGljT2JsaXF1ZSkKK3sKKyAgICBGb250UGxh
dGZvcm1EYXRhIGNvcHkoc291cmNlKTsKKyAgICBjb3B5Lm1fc3ludGhldGljT2JsaXF1ZSA9IHN5
bnRoZXRpY09ibGlxdWU7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEg
Rm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoU2l6ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBz
b3VyY2UsIGZsb2F0IHNpemUpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSBjb3B5KHNvdXJjZSk7
CisgICAgY29weS5tX3NpemUgPSBzaXplOworICAgIHJldHVybiBjb3B5OworfQorCiBIYXJmQnV6
ekZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2hhcmZCdXp6RmFjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKaW5kZXgg
YzkxZGIxYjBjMGNlYTJkMmUxZjQ5OWMyMWY5ZmY0MjViNTJkNTUxMS4uMmNiM2Q3YWVhNTM0NzBk
NjM1NmMxNzVlOTIxOGQ4ZmZiYzg3OWJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dp
bi5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURh
dGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKgogICAgIGNhaXJv
X21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwogICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxl
KCZzaXplTWF0cml4LCBzaXplLCBzaXplKTsKIAotICAgIHN0YXRpYyBjYWlyb19mb250X29wdGlv
bnNfdCogZm9udE9wdGlvbnMgPSAwOworICAgIHN0YXRpYyBjYWlyb19mb250X29wdGlvbnNfdCog
Zm9udE9wdGlvbnMgPSBudWxscHRyOwogICAgIGlmICghZm9udE9wdGlvbnMpIHsKICAgICAgICBm
b250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKICAgICAgICBjYWlyb19m
b250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhmb250T3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX1NV
QlBJWEVMKTsKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc291cmNlKQogewogICAgIG1fZm9u
dCA9IHNvdXJjZS5tX2ZvbnQ7CiAgICAgbV91c2VHREkgPSBzb3VyY2UubV91c2VHREk7Ci0gICAg
bV9zY2FsZWRGb250ID0gMDsKKyAgICBtX3NjYWxlZEZvbnQgPSBudWxscHRyOwogCiAgICAgaWYg
KHNvdXJjZS5tX3NjYWxlZEZvbnQpCiAgICAgICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxl
ZF9mb250X3JlZmVyZW5jZShzb3VyY2UubV9zY2FsZWRGb250KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2lu
LmNwcAppbmRleCA0ODhmYzk2MGFmNGRmNDY0ZWJjZGRmNTRhODBkODZjYTc1YWFkNmVlLi5iNTcw
YmIxMWVmZTk5YmU1M2JkNzZmY2QwNWJhMWFhZDQ4ZDk2ODY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFX
aW4uY3BwCkBAIC03NCw3ICs3NCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoR0RJT2JqZWN0PEhGT05UPiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsCiAgICAgUmVz
dG9yZURDKGhkYywgLTEpOwogfQogCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRm
b3JtRGF0YTo6b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKK1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUp
IGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxl
Y3RPYmplY3QoaGRjLCBoZm9udCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCmluZGV4IGY3NmIwZjZi
NjU5NDY4YjhiYTQzMmRkZTU2YmUwZDM0ODk1ZjBkNDAuLmRjZTM5NzE2MjQ0ODIxMzBiYzhmOTc3
NmMxNWRjMjU0MmEzN2RjMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcApAQCAtMTM1LDExICsxMzUs
OCBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiBSZWZQdHI8Rm9udD4gRm9udDo6cGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBmbG9hdCBzY2FsZWRTaXplID0g
c2NhbGVGYWN0b3IgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgaWYgKGlzQ3VzdG9tRm9u
dCgpKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udChtX3BsYXRmb3JtRGF0
YSk7Ci0gICAgICAgIHNjYWxlZEZvbnQuc2V0U2l6ZShzY2FsZWRTaXplKTsKLSAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSk7Ci0gICAgfQorICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShGb250UGxhdGZv
cm1EYXRhOjpjbG9uZVdpdGhTaXplKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgdHJ1ZSwg
ZmFsc2UpOwogCiAgICAgTE9HRk9OVCB3aW5mb250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3Jt
RGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5mb250KTsK
</data>
<flag name="review"
          id="301569"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>