<?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>140081</bug_id>
          
          <creation_ts>2015-01-05 08:28:00 -0800</creation_ts>
          <short_desc>Font::primaryFontData() should return a reference</short_desc>
          <delta_ts>2022-07-27 14:28:16 -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>Layout and Rendering</component>
          <version>528+ (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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>kling</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058708</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-05 08:28:00 -0800</bug_when>
    <thetext>It is not null</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058711</commentid>
    <comment_count>1</comment_count>
      <attachid>243977</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-05 09:23:07 -0800</bug_when>
    <thetext>Created attachment 243977
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058713</commentid>
    <comment_count>2</comment_count>
      <attachid>243978</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-05 09:27:11 -0800</bug_when>
    <thetext>Created attachment 243978
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058716</commentid>
    <comment_count>3</comment_count>
      <attachid>243978</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-05 09:37:35 -0800</bug_when>
    <thetext>Comment on attachment 243978
patch2

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

A tiny bit sad that something used this often got a little longer, but I suppose it’s strange that a font has a function that returns “a font”.

&gt; Source/WebCore/platform/graphics/FontGlyphs.h:77
&gt; +    const FontData&amp; primaryFontData(const FontDescription&amp; description) { return *realizeFontDataAt(description, 0); }

Do we even need a function for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058717</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-05 09:46:02 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 243978 [details]
&gt; patch2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243978&amp;action=review
&gt; 
&gt; A tiny bit sad that something used this often got a little longer, but I
&gt; suppose it’s strange that a font has a function that returns “a font”.

Yeah. We might even want to rename Font to something like StyleFont (since it is essentially CSS font definition) and FontData to Font.

&gt; Do we even need a function for this?

Not really. I&apos;ll get rid of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058787</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-01-05 13:28:16 -0800</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=135290</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058790</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-01-05 13:31:44 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Comment on attachment 243978 [details]
&gt; &gt; patch2
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=243978&amp;action=review
&gt; &gt; 
&gt; &gt; A tiny bit sad that something used this often got a little longer, but I
&gt; &gt; suppose it’s strange that a font has a function that returns “a font”.
&gt; 
&gt; Yeah. We might even want to rename Font to something like StyleFont (since
&gt; it is essentially CSS font definition) and FontData to Font.
&gt; 
&gt; &gt; Do we even need a function for this?
&gt; 
&gt; Not really. I&apos;ll get rid of it.

I actually think that this is a good function to have. It lightens the cognitive load of code that calls this function, and I don&apos;t think there is any information lost between just using the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058969</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-06 03:37:11 -0800</bug_when>
    <thetext>https://trac.webkit.org/r177955</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058970</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-06 03:39:03 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I actually think that this is a good function to have. It lightens the
&gt; cognitive load of code that calls this function, and I don&apos;t think there is
&gt; any information lost between just using the name.

There were two functions with similar names. This one was used only in a few places internally in FontGlyphs and was really just creating confusion. Now &quot;primary font data&quot; is always a SimpleFontData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1887134</commentid>
    <comment_count>9</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-07-27 12:49:52 -0700</bug_when>
    <thetext>As per Comment 07, I did landed and there was no backout, I searched with bug number on Webkit Github.

Can this be marked as &quot;RESOLVED FIXED&quot;? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1887167</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-07-27 14:27:25 -0700</bug_when>
    <thetext>Yup, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1887168</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-07-27 14:28:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/97684797&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243977</attachid>
            <date>2015-01-05 09:23:07 -0800</date>
            <delta_ts>2015-01-05 09:27:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>primary-font-reference.patch</filename>
            <type>text/plain</type>
            <size>66180</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNS0wMS0wNSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRm9udDo6cHJpbWFyeUZvbnRE
YXRhKCkgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMDgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgbm90IG51bGwuCisKKyAgICAgICAgQWxzbyBy
ZW5hbWUgcHJpbWFyeUZvbnQoKSAtPiBwcmltYXJ5Rm9udERhdGEoKS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAg
ICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChBWEF0
dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToK
KyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0pOgorICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdlYkNvcmU6OmVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0
YXJ0KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZhc3RBdmVyYWdlQ2hh
cldpZHRoSWZBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnRNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnNwYWNlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dGFiV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cHJpbWFyeUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnByaW1hcnlGb250KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cHJpbWFyeUZv
bnRIYXNHbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRj
aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRHbHlwaHM6OnByaW1hcnlGb250RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250R2x5cGhzOjpwcmltYXJ5U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVy
YXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Zm9udERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3Jl
VGV4dC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmg6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6
cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RU
ZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50
TG9naWNhbFdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
Y2FuVXNlRm9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlw
aEFzc2VtYmx5RmFsbEJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0
b3I6OmdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcik6CisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpzdHJldGNoVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290
Ojp1cGRhdGVTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OmNhbGN1
bGF0ZVNWR0tlcm5pbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1pc3NpbmdHbHlwaEZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisKIDIw
MTUtMDEtMDUgIHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAg
ICAgW1dpbkNhaXJvXSBDcmFzaCB3aGVuIGZvbnQgZGF0YSBwb2ludGVyIGlzIG51bGwuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMTc3OTA4
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NTgsNyArMTc1OCw3IEBAIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBSZW5kZXJTdHlsZSYg
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgZm9udCBp
bmZvCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnQo
KS5wcmltYXJ5Rm9udCgpLT5nZXRDVEZvbnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3Ry
aW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
Q1RGb250KCksIHJhbmdlKTsKICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3IgPSBzdHls
ZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4dERlY29y
YXRpb25VbmRlcmxpbmUgfCBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE3Nzkw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNyArODQ4LDcgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBm
b250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5n
ZXROU0ZvbnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3Ry
aW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2lj
IGNvbG9ycwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2Njks
NyBAQCAtIChOU0ZvbnQgKilfZm9udAogICAgIGF1dG8gcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
cmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQo
KTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOwogfQogI2Vsc2UKIC0gKENURm9udFJlZilfZm9udApAQCAtNjc3LDcgKzY3
Nyw3IEBAIC0gKENURm9udFJlZilfZm9udAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
b3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgp
LT5nZXRDVEZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3NzkwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTExNCw3ICsxMTE0LDcgQEAgc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQo
RWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOworICAgIHJldHVy
biByZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7
CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVudCkK
QEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQm
IGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQg
KilyZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0Q1RGb250KCk7Cisg
ICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CiB9CiAjZW5kaWYKIApAQCAtMjU5NCwxMCArMjU5NCwx
MCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyCiAgICAgICAgICAg
ICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1Vu
ZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVd
OwogICAgICAgICBpZiAoc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNv
cmF0aW9uTGluZVRocm91Z2gpCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltO
U051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6
TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKE5TRm9udCAq
Zm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKKyAgICAgICAg
aWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0Zv
bnQoKSkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQo
KSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9T
aXplOnN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZv
cktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJl
dmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjExLDkgKzIxMSw5IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwogICAgICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiByZXN1bHQgPSAwOworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcmVz
dWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVzdWx0ID0g
c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxl
LT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkg
ewogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTIzNSwxMCArMjM1LDEwIEBAIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhN
RTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0
IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOwor
ICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXIt
PnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250
KQotICAgICAgICAgICAgICAgIGZvbnQgPSBwcmltYXJ5Rm9udDsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGZvbnQgIT0gcHJpbWFyeUZvbnQpIHsKKyAgICAgICAgICAgICAgICBmb250ID0gJnByaW1h
cnlGb250OworICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAg
ICAgICAgICAgICAgICBoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBOU0RpY3Rpb25hcnkqIEVk
aXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1
bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKICAgICAKLSAgICBDVEZvbnRS
ZWYgZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0Q1RGb250KCk7CisgICAg
Q1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9u
dCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMyw5IEBA
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgTm9kZSog
bm9kZVRvUmVtb3ZlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQog
Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiByZXN1bHQgPSAwOworICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQot
ICAgICAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAgICAg
ICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAg
ICAgaWYgKG5vZGVUb1JlbW92ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKEFT
U0VSVF9OT19FWENFUFRJT04pOwpAQCAtMTM1LDEwICsxMzUsMTAgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUg
YW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJl
IHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7CisgICAgICAgICAgICBj
b25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAg
ICAgICAgZm9udCA9IHByaW1hcnlGb250OwotICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSBw
cmltYXJ5Rm9udCkgeworICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CisgICAg
ICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewogICAgICAgICAgICAgICAg
IGhhc011bHRpcGxlRm9udHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0
cmlidXRlc0ZvclMKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0Zv
bnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9u
dCgpLT5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKHN0
eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAgICAgIFtyZXN1
bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkg
Zm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNrKQogICAgICAg
ICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlz
aW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MDYsNyArNTA2LDcgQEAgYm9vbCBGb250OjpmYXN0QXZlcmFn
ZUNoYXJXaWR0aElmQXZhaWxhYgogewogICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihw
cmltYXJ5Rm9udCgpLT5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udCgpIG1p
Z2h0IG5vdCBjb3JyZXNwb25kIHRvIGZpcnN0RmFtaWx5KCkuCisgICAgICAgIHdpZHRoID0gcm91
bmRmKHByaW1hcnlGb250RGF0YSgpLmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlG
b250RGF0YSgpIG1pZ2h0IG5vdCBjb3JyZXNwb25kIHRvIGZpcnN0RmFtaWx5KCkuCiAgICAgcmV0
dXJuIHN1Y2Nlc3M7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmgJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDEwICsxNzIsMTAgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0Zv
clBsYXRmb3JtRm9udCgpOyB9CiAKLSAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3Mo
KSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLT5mb250TWV0cmljcygpOyB9Ci0gICAgZmxv
YXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCktPnNwYWNlV2lkdGgo
KSArIG1fbGV0dGVyU3BhY2luZzsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmlj
cygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KKyAg
ICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3Bh
Y2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9CiAgICAgZmxvYXQgdGFiV2lkdGgoY29uc3Qg
U2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7
Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNv
bnN0IHsgcmV0dXJuIHRhYldpZHRoKCpwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBwb3NpdGlvbik7
IH0KKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikg
Y29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZvbnREYXRhKCksIHRhYlNpemUsIHBvc2l0
aW9uKTsgfQogICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3Q7CiAgICAg
Ym9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7
IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCiAKQEAgLTE4Myw3ICsxODMsNyBAQCBwdWJsaWM6
CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsK
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCgpIGNvbnN0OworICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKICAgICBjb25zdCBG
b250RGF0YSogZm9udERhdGFBdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQg
dmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25zdAogICAgIHsKQEAgLTE5Miw3ICsxOTIsNiBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3Qg
bGVuZ3RoLCBGb250RGF0YVZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCi0gICAgYm9vbCBwcmltYXJ5
Rm9udEhhc0dseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogCiAgICAgc3RhdGljIGJv
b2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7CiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3Jh
cGhPclN5bWJvbChVQ2hhcjMyKTsKQEAgLTM1Nyw3ICszNTYsNyBAQCBpbmxpbmUgRm9udDo6fkZv
bnQoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6OnByaW1hcnlG
b250KCkgY29uc3QKK2lubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udDo6cHJpbWFyeUZv
bnREYXRhKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2ds
eXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAko
cmV2aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBGb250Ojpwcmlt
YXJ5Rm9udEhhc0dseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewot
ICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5nbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwot
fQotCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBtYXkgbm90IHdvcmsgaWYgdGhlIGVtcGhhc2lz
IG1hcmsgdXNlcyBhIGNvbXBsZXggc2NyaXB0LCBidXQgbm9uZSBvZiB0aGUKIC8vIHN0YW5kYXJk
IGVtcGhhc2lzIG1hcmtzIGRvIHNvLgogYm9vbCBGb250OjpnZXRFbXBoYXNpc01hcmtHbHlwaERh
dGEoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBHbHlwaERhdGEmIGdseXBoRGF0YSkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMu
Y3BwCShyZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDExIEBAIHZvaWQg
Rm9udEdseXBoczo6cmVsZWFzZUZvbnREYXRhKCkKIAogdm9pZCBGb250R2x5cGhzOjpkZXRlcm1p
bmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAgIGNvbnN0
IEZvbnREYXRhKiBmb250RGF0YSA9IHByaW1hcnlGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAg
aWYgKGlzPFNpbXBsZUZvbnREYXRhPigqZm9udERhdGEpKQotICAgICAgICBtX3BpdGNoID0gZG93
bmNhc3Q8U2ltcGxlRm9udERhdGE+KCpmb250RGF0YSkucGl0Y2goKTsKKyAgICBjb25zdCBGb250
RGF0YSYgZm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoZGVzY3JpcHRpb24pOworICAgIGlmIChp
czxTaW1wbGVGb250RGF0YT4oZm9udERhdGEpKQorICAgICAgICBtX3BpdGNoID0gZG93bmNhc3Q8
U2ltcGxlRm9udERhdGE+KGZvbnREYXRhKS5waXRjaCgpOwogICAgIGVsc2UgewotICAgICAgICBj
b25zdCBTZWdtZW50ZWRGb250RGF0YSYgc2VnbWVudGVkRm9udERhdGEgPSBkb3duY2FzdDxTZWdt
ZW50ZWRGb250RGF0YT4oKmZvbnREYXRhKTsKKyAgICAgICAgY29uc3QgU2VnbWVudGVkRm9udERh
dGEmIHNlZ21lbnRlZEZvbnREYXRhID0gZG93bmNhc3Q8U2VnbWVudGVkRm9udERhdGE+KGZvbnRE
YXRhKTsKICAgICAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gc2VnbWVudGVkRm9udERhdGEubnVt
UmFuZ2VzKCk7CiAgICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkKICAgICAgICAgICAgIG1fcGl0
Y2ggPSBzZWdtZW50ZWRGb250RGF0YS5yYW5nZUF0KDApLmZvbnREYXRhKCktPnBpdGNoKCk7CkBA
IC0yNDUsOSArMjQ1LDkgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFy
YQogR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFy
MzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50
IHZhcmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRl
bnQuCi0gICAgYXV0byogb3JpZ2luYWxGb250RGF0YSA9IHByaW1hcnlGb250RGF0YShkZXNjcmlw
dGlvbiktPnNpbXBsZUZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgIGF1dG8qIG9yaWdpbmFs
Rm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoZGVzY3JpcHRpb24pLnNpbXBsZUZvbnREYXRhRm9y
Q2hhcmFjdGVyKGMpOwogICAgIGlmICghb3JpZ2luYWxGb250RGF0YSkKLSAgICAgICAgb3JpZ2lu
YWxGb250RGF0YSA9ICZwcmltYXJ5Rm9udERhdGEoZGVzY3JpcHRpb24pLT5zaW1wbGVGb250RGF0
YUZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgb3JpZ2luYWxGb250RGF0YSA9ICZwcmltYXJ5Rm9u
dERhdGEoZGVzY3JpcHRpb24pLnNpbXBsZUZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOwogCiAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvbnREYXRhID0gb3JpZ2luYWxG
b250RGF0YS0+c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihjLCBkZXNjcmlwdGlv
biwgbV9pc0ZvclBsYXRmb3JtRm9udCk7CiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRh
KQpAQCAtMzY0LDcgKzM2NCw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JD
aGFyYWMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0g
QXV0b1ZhcmlhbnQpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFw
cmltYXJ5U2ltcGxlRm9udERhdGEoZGVzY3JpcHRpb24pLT5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICBpZiAoZGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlTaW1wbGVGb250RGF0YShk
ZXNjcmlwdGlvbikuaXNTVkdGb250KCkpIHsKICAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0g
dV90b3VwcGVyKGMpOwogICAgICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7CiAgICAgICAgICAg
ICAgICAgYyA9IHVwcGVyQzsKQEAgLTM4NSw3ICszODUsNyBAQCBHbHlwaERhdGEgRm9udEdseXBo
czo6Z2x5cGhEYXRhRm9yQ2hhcmFjCiAKICAgICBSZWZQdHI8R2x5cGhQYWdlPiYgY2FjaGVkUGFn
ZSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWUgOiBtX2NhY2hlZFBhZ2VaZXJvOwogICAgIGlmICghY2FjaGVkUGFnZSkK
LSAgICAgICAgY2FjaGVkUGFnZSA9IGdseXBoUGFnZUZyb21Gb250RGF0YShwYWdlTnVtYmVyLCAq
cHJpbWFyeUZvbnREYXRhKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGNhY2hlZFBhZ2UgPSBnbHlw
aFBhZ2VGcm9tRm9udERhdGEocGFnZU51bWJlciwgcHJpbWFyeUZvbnREYXRhKGRlc2NyaXB0aW9u
KSk7CiAKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gY2FjaGVkUGFnZSA/IGNhY2hlZFBhZ2Ut
PmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwogICAgIGlmICghZ2x5cGhE
YXRhLmdseXBoKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdseXBocy5oCShyZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE0ICs2NywxNSBA
QCBwdWJsaWM6CiAgICAgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhD
YWNoZTsgfQogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoQ2FjaGU7IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5U2lt
cGxlRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgY29uc3QgRm9udERhdGEq
IHByaW1hcnlGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKSB7IHJl
dHVybiByZWFsaXplRm9udERhdGFBdChkZXNjcmlwdGlvbiwgMCk7IH0KKyAgICBjb25zdCBTaW1w
bGVGb250RGF0YSYgcHJpbWFyeVNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnREYXRhKiByZWFsaXplRm9udERhdGFBdChj
b25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBpbmRleCk7CiAKIHByaXZhdGU6CiAgICAg
Rm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogICAgIEZvbnRHbHlwaHMoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCisgICAgY29uc3QgRm9udERhdGEmIHByaW1hcnlGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKSB7IHJldHVybiAqcmVhbGl6
ZUZvbnREYXRhQXQoZGVzY3JpcHRpb24sIDApOyB9CisKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERh
dGFWYXJpYW50KTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
VmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQs
IHVuc2lnbmVkIGZhbGxiYWNrTGV2ZWwpOwpAQCAtMTA2LDE2ICsxMDcsMTYgQEAgaW5saW5lIGJv
b2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZp
eGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRHbHlwaHM6
OnByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQoraW5saW5lIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250R2x5cGhzOjpwcmltYXJ5U2ltcGxl
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERh
dGEpIHsKLSAgICAgICAgYXV0byogZm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoZGVzY3JpcHRp
b24pOwotICAgICAgICBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSA9IGZvbnREYXRhLT5z
aW1wbGVGb250RGF0YUZvckNoYXJhY3RlcignICcpOworICAgICAgICBhdXRvJiBmb250RGF0YSA9
IHByaW1hcnlGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIG1fY2FjaGVkUHJpbWFyeVNp
bXBsZUZvbnREYXRhID0gZm9udERhdGEuc2ltcGxlRm9udERhdGFGb3JDaGFyYWN0ZXIoJyAnKTsK
ICAgICAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSkKLSAgICAgICAgICAg
IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gJmZvbnREYXRhLT5zaW1wbGVGb250RGF0
YUZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnRE
YXRhID0gJmZvbnREYXRhLnNpbXBsZUZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOwogICAgIH0KLSAg
ICByZXR1cm4gbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuICptX2Nh
Y2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3
NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9m
aW5hbFJvdW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKLSAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZvbnQ7CisgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0YSA9IG1fZm9udC0+cHJpbWFyeUZvbnRE
YXRhKCk7CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5
Rm9udERhdGE7CiAgICAgaW50IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1
ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKQEAgLTIxMSwx
NCArMjExLDE0IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udERhdGE7Ci0gICAg
ICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICE9IHByaW1hcnlGb250KSB7
CisgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICE9ICZwcmltYXJ5
Rm9udERhdGEpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxl
IGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8g
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkgcmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2Ug
YSBzbWFsbCBjYXBzIGZvbnQuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxD
YXBzKCkgfHwgY2hhcmFjdGVyID09IHVfdG91cHBlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAg
ICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CiAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgdXBwZXJjYXNlR2x5
cGhEYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodV90b3VwcGVyKGNoYXJhY3Rl
ciksIHJ0bCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cHBlcmNhc2VHbHlwaERhdGEuZm9u
dERhdGEgIT0gcHJpbWFyeUZvbnQpCisgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlcmNhc2VH
bHlwaERhdGEuZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKHVwcGVyY2FzZUdseXBoRGF0YS5mb250RGF0YSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OTQsOCArNDk0LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5z
aQogICAgICAgICBzaXplX3QgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQo
KTsKICAgICAgICAgdW5zaWduZWQgZyA9IGx0ciA/IG1fZ2x5cGhJbkN1cnJlbnRSdW4gOiBnbHlw
aENvdW50IC0gMSAtIG1fZ2x5cGhJbkN1cnJlbnRSdW47CiAgICAgICAgIHVuc2lnbmVkIGsgPSBs
ZWZ0bW9zdEdseXBoICsgZzsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYgY29tcGxleFRl
eHRSdW4uZm9udERhdGEoKSAhPSBtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIGZh
bGxiYWNrRm9udHMtPmFkZChjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpKTsKKyAgICAgICAgaWYg
KGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCkgIT0gJm1fZm9udC5w
cmltYXJ5Rm9udERhdGEoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZCgmY29tcGxl
eFRleHRSdW4uZm9udERhdGEoKSk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0aGUgaW5p
dGlhbCBhZHZhbmNlIGZvciB0aGUgZmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRvIGRyYXcuCiAg
ICAgICAgIC8vIFdoZW4gbGVmdG1vc3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRzIHRoZSBmaXJz
dCBnbHlwaCB0byBkcmF3LCB0YWtpbmcgaW50bwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhbV9jaGFyYWN0ZXJJbkN1cnJlbnRH
bHlwaCkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNb
a10sIGNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCksIGFkanVzdGVkQWR2YW5jZSwgY29tcGxleFRl
eHRSdW4uaW5kZXhBdChtX2dseXBoSW5DdXJyZW50UnVuKSk7CisgICAgICAgICAgICAgICAgZ2x5
cGhCdWZmZXItPmFkZChtX2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udERh
dGEoKSwgYWRqdXN0ZWRBZHZhbmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5cGhJbkN1
cnJlbnRSdW4pKTsKIAogICAgICAgICAgICAgdW5zaWduZWQgb2xkQ2hhcmFjdGVySW5DdXJyZW50
R2x5cGggPSBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoOwogICAgICAgICAgICAgbV9jaGFyYWN0
ZXJJbkN1cnJlbnRHbHlwaCA9IHN0ZDo6bWluKG1fY3VycmVudENoYXJhY3RlciAtIGNvbXBsZXhU
ZXh0UnVuLnN0cmluZ0xvY2F0aW9uKCksIGdseXBoRW5kT2Zmc2V0KSAtIGdseXBoU3RhcnRPZmZz
ZXQ7CkBAIC01NjYsOSArNTY2LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVz
dEdseXBocwogICAgIGZvciAoc2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7ICsrcikgewogICAg
ICAgICBDb21wbGV4VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9jb21wbGV4VGV4dFJ1bnNb
cl07CiAgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENv
dW50KCk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGNvbXBsZXhU
ZXh0UnVuLmZvbnREYXRhKCk7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0
YSA9IGNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCk7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAg
ICBib29sIGlzRW1vamkgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9pc0Vtb2ppOworICAg
ICAgICBib29sIGlzRW1vamkgPSBmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7CiAj
ZW5kaWYKIAogICAgICAgICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgYSB0
ZXh0IHJ1biBieSBhZGp1c3RpbmcgdGhlIGFkdmFuY2UKQEAgLTU4OCw4ICs1ODgsOCBAQCB2b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgIGNvbnN0IENHU2l6
ZSogYWR2YW5jZXMgPSBjb21wbGV4VGV4dFJ1bi5hZHZhbmNlcygpOwogCiAgICAgICAgIGJvb2wg
bGFzdFJ1biA9IHIgKyAxID09IHJ1bkNvdW50OwotICAgICAgICBib29sIHJvdW5kc0FkdmFuY2Vz
ID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnJv
dW5kc0dseXBoQWR2YW5jZXMoKTsKLSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnREYXRh
LT5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOworICAgICAg
ICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udERh
dGEucGxhdGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNlcygpOworICAgICAgICBmbG9hdCBz
cGFjZVdpZHRoID0gZm9udERhdGEuc3BhY2VXaWR0aCgpIC0gZm9udERhdGEuc3ludGhldGljQm9s
ZE9mZnNldCgpOwogICAgICAgICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zs
b2F0KHNwYWNlV2lkdGgpOwogICAgICAgICBjb25zdCBVQ2hhciogY3AgPSBjb21wbGV4VGV4dFJ1
bi5jaGFyYWN0ZXJzKCk7CiAgICAgICAgIENHUG9pbnQgZ2x5cGhPcmlnaW4gPSBDR1BvaW50WmVy
bzsKQEAgLTYxNiw3ICs2MTYsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0
R2x5cGhzCiAgICAgICAgICAgICAgICAgbmV4dENoID0gKihtX2NvbXBsZXhUZXh0UnVuc1tyICsg
MV0tPmNoYXJhY3RlcnMoKSArIG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7
CiAKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNo
KTsKLSAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0YS0+
c3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOworICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRy
ZWF0QXNTcGFjZSA/IGZvbnREYXRhLnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAg
ICAgIENHU2l6ZSBhZHZhbmNlID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRo
LCBhZHZhbmNlc1tpXS5oZWlnaHQpIDogYWR2YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICAgICAgICAgaWYgKGlzRW1vamkgJiYgYWR2YW5jZS53aWR0aCkKQEAgLTYyNCwyNSArNjI0
LDI1IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICNlbmRpZgog
CiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gbV9mb250LnRhYldpZHRoKCpmb250RGF0YSwgbV9y
dW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFz
dENvbW1pdCk7CisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0
aChmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGgg
KyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7CiAgICAgICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVh
dEFzWmVyb1dpZHRoU3BhY2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAgICAgICAg
ICBhZHZhbmNlLndpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnREYXRhLT5z
cGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGggPSBmb250RGF0YS5zcGFjZUdseXBo
KCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsb2F0IHJvdW5kZWRBZHZhbmNlV2lk
dGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7CiAgICAgICAgICAgICBpZiAocm91bmRzQWR2YW5j
ZXMpCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IHJvdW5kZWRBZHZhbmNlV2lkdGg7
CiAKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKTsKKyAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udERhdGEuc3ludGhldGlj
Qm9sZE9mZnNldCgpOwogCiAgCiAgICAgICAgICAgICAvLyBXZSBzcGVjaWFsIGNhc2Ugc3BhY2Vz
IGluIHR3byB3YXlzIHdoZW4gYXBwbHlpbmcgd29yZCByb3VuZGluZy4gCiAgICAgICAgICAgICAv
LyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250
cy4gCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3Vy
ZSB0aGF0IGFsbCBnbHlwaHMgdGhhdCAKICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBv
ZiB0aGUgc3BhY2UgZ2x5cGggaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgZ2x5cGgu
IAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFk
dmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0g
Rml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAg
ICAgICAgICBhZHZhbmNlLndpZHRoID0gZm9udERhdGEtPmFkanVzdGVkU3BhY2VXaWR0aCgpOwor
ICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFu
Y2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEucGl0Y2goKSA9PSBGaXhl
ZFBpdGNoIHx8IGdseXBoID09IGZvbnREYXRhLnNwYWNlR2x5cGgoKSkpCisgICAgICAgICAgICAg
ICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLmFkanVzdGVkU3BhY2VXaWR0aCgpOwogCiAgICAg
ICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2Un
cmUgYSBnbHlwaCB3aXRoIGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNw
YWNpbmcuCkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFk
anVzdEdseXBocwogICAgICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZhbmNl
KTsKICAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5k
c0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZv
bnREYXRhLmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRzLm1v
dmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhPcmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkdseXBo
Qm91bmRpbmdCb3hYID0gc3RkOjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3Vu
ZHMueCgpKTsKICAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heCht
X21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxOCArNzMsMTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBDb21wbGV4
VGV4dFJ1biA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBsZXhUZXh0UnVuPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RS
dW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdl
IHJ1blJhbmdlKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RS
dW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3Ro
LCBDRlJhbmdlIHJ1blJhbmdlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udERhdGEsIGNoYXJhY3RlcnMsIHN0cmlu
Z0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1blJhbmdlKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRp
b24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQorICAgICAgICBzdGF0aWMgUmVmPENv
bXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJp
bmdMZW5ndGgsIGJvb2wgbHRyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250RGF0YSwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRp
b24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CiAgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCBn
bHlwaENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaENvdW50OyB9Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGE7IH0K
KyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGF0YTsgfQogICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhcmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nTG9jYXRpb247IH0KICAgICAgICAgc2l6ZV90IHN0cmlu
Z0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nTGVuZ3RoOyB9CkBAIC0xMDAsMTEgKzEw
MCwxMSBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRp
b24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwotICAgICAgICBDb21w
bGV4VGV4dFJ1bihjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIp
OworICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxlRm9udERhdGEm
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVf
dCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOworICAgICAgICBDb21wbGV4VGV4dFJ1
bihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOwogCiAgICAg
ICAgIHVuc2lnbmVkIG1fZ2x5cGhDb3VudDsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBtX2ZvbnREYXRhOwog
ICAgICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwogICAgICAgICB1bnNpZ25lZCBtX3N0
cmluZ0xvY2F0aW9uOwogICAgICAgICBzaXplX3QgbV9zdHJpbmdMZW5ndGg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29y
ZVRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzc5MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgLSAoaWQpb2Jq
ZWN0QXRJbmRleDooTlNVSW50ZWdlcilpbmRleAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVu
UmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwg
Q0ZSYW5nZSBydW5SYW5nZSkKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46
OkNvbXBsZXhUZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9u
dERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwg
c2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKICAgICA6IG1fZm9udERhdGEo
Zm9udERhdGEpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAsIG1fc3RyaW5n
TG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCkBAIC0xMzAsNyArMTMwLDcgQEAgQ29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6QwogCiAvLyBNaXNzaW5nIGdseXBocyBydW4gY29u
c3RydWN0b3IuIENvcmUgVGV4dCB3aWxsIG5vdCBnZW5lcmF0ZSBhIHJ1biBvZiBtaXNzaW5nIGds
eXBocywgaW5zdGVhZCBmYWxsaW5nIGJhY2sgb24KIC8vIGdseXBocyBmcm9tIExhc3RSZXNvcnQu
IFdlIHdhbnQgdG8gdXNlIHRoZSBwcmltYXJ5IGZvbnQncyBtaXNzaW5nIGdseXBoIGluIG9yZGVy
IHRvIG1hdGNoIHRoZSBmYXN0IHRleHQgY29kZSBwYXRoLgotQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnRE
YXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQogICAgIDogbV9mb250RGF0YShmb250RGF0YSkK
ICAgICAsIG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihz
dHJpbmdMb2NhdGlvbikKQEAgLTE2Myw3ICsxNjMsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OkNvbXBsZXhUZXh0UnVuOjpDCiAgICAgLy8gU3ludGhlc2l6ZSBhIHJ1biBvZiBtaXNzaW5nIGds
eXBocy4KICAgICBtX2dseXBoc1ZlY3Rvci5maWxsKDAsIG1fZ2x5cGhDb3VudCk7CiAgICAgbV9n
bHlwaHMgPSBtX2dseXBoc1ZlY3Rvci5kYXRhKCk7Ci0gICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxs
KENHU2l6ZU1ha2UobV9mb250RGF0YS0+d2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5cGhDb3Vu
dCk7CisgICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250RGF0YS53aWR0
aEZvckdseXBoKDApLCAwKSwgbV9nbHlwaENvdW50KTsKICAgICBtX2FkdmFuY2VzID0gbV9hZHZh
bmNlc1ZlY3Rvci5kYXRhKCk7CiB9CiAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiB7CiAgICAgaWYgKCFmb250RGF0YSkgewogICAg
ICAgICAvLyBDcmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBm
b250LgotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNy
ZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIG1f
cnVuLmx0cigpKSk7CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4
dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0cmluZ0xvY2F0aW9u
LCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI3
Myw3ICsyNzMsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAg
ICAgICAgICAgICAgICAgICAgIC8vIE5TRm9udFJlbmRlcmluZ01vZGUuCiAgICAgICAgICAgICAg
ICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdENGKENURm9udENv
cHlQb3N0U2NyaXB0TmFtZShydW5Gb250KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChDRkVx
dWFsKGZvbnROYW1lLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVh
dGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxv
Y2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZSht
X2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxv
Y2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKG1fZm9udC5m
b250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlLCBGb250Q2FjaGU6OkRvTm90
UmV0YWluKS5nZXQoKTsKQEAgLTI4OSwxNCArMjg5LDE0IEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bkZvbnRE
YXRhKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9m
YWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9IG1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAg
ICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9u
dC5wcmltYXJ5Rm9udERhdGEoKSkKICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRz
LT5hZGQocnVuRm9udERhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gbV9mb250LnByaW1hcnlGb250KCkp
CisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5w
cmltYXJ5Rm9udERhdGEoKSkKICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnRE
YXRhKTsKIAotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46
OmNyZWF0ZShjdFJ1biwgcnVuRm9udERhdGEsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBy
dW5SYW5nZSkpOworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRS
dW46OmNyZWF0ZShjdFJ1biwgKnJ1bkZvbnREYXRhLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0
aCwgcnVuUmFuZ2UpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCShyZXZpc2lvbiAxNzc5MDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTkzLDggKzU5Myw4IEBAIERhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRlcnNlY3Rp
b25zV2kKIGJvb2wgRm9udDo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKIHsK
ICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAx
MDkwCi0gICAgY29uc3QgYXV0byogZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOwotICAgIHJldHVy
biAhZm9udERhdGEtPmlzU1ZHRm9udCgpICYmIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9u
dChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuY3RGb250KCkpKS5nZXQoKSk7CisgICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5
Rm9udERhdGEoKTsKKyAgICByZXR1cm4gIWZvbnREYXRhLmlzU1ZHRm9udCgpICYmIENURm9udERl
c2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihm
b250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKICNlbHNlCiAgICAgLy8g
U3lzdGVtIGZvbnRzIGFyZSBoaWRkZW4gYnkgaGF2aW5nIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRo
IGEgcGVyaW9kLCBzbyBzaW1wbHkgc2VhcmNoCiAgICAgLy8gZm9yIHRoYXQgaGVyZSByYXRoZXIg
dGhhbiB0cnkgdG8ga2VlcCB0aGUgbGlzdCB1cCB0byBkYXRlLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVNYXRoRGF0YS5jcHAJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjUsNyArMjY1LDcgQEAgT3BlblR5cGVNYXRoRGF0YTo6fk9wZW5UeXBlTWF0aERhdGEo
KQogfQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgpCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRh
OjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIE1hdGhDb25zdGFu
dCBjb25zdGFudCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFu
dChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBjb25z
dAogewogICAgIGludDMyX3QgdmFsdWUgPSAwOwogCkBAIC0yODYsOSArMjg2LDkgQEAgZmxvYXQg
T3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAogICAgIGlmIChjb25zdGFudCA9PSBT
Y3JpcHRQZXJjZW50U2NhbGVEb3duIHx8IGNvbnN0YW50ID09IFNjcmlwdFNjcmlwdFBlcmNlbnRT
Y2FsZURvd24gfHwgY29uc3RhbnQgPT0gUmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCkK
ICAgICAgICAgcmV0dXJuIHZhbHVlIC8gMTAwLjA7CiAKLSAgICByZXR1cm4gdmFsdWUgKiBmb250
LT5zaXplUGVyVW5pdCgpOworICAgIHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsK
ICNlbHNlCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2lt
cGxlRm9udERhdGEqLCBNYXRoQ29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRh
OjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmLCBNYXRoQ29uc3RhbnQpIGNv
bnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0yOTYs
NyArMjk2LDcgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAogfQog
CiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgpCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJ
dGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBHbHlwaCBnbHlwaCkg
Y29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGNvbnN0IE9w
ZW5UeXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJsZTxPcGVuVHlw
ZTo6TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIEFTU0VSVChtYXRoKTsKQEAgLTMwOCw5
ICszMDgsOSBAQCBmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0CiAgICAg
aWYgKCFtYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpt
X21hdGhCdWZmZXIsIGdseXBoKSAqIGZvbnQtPnNpemVQZXJVbml0KCk7CisgICAgcmV0dXJuIG1h
dGhJdGFsaWNzQ29ycmVjdGlvbkluZm8tPmdldEl0YWxpY0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZl
ciwgZ2x5cGgpICogZm9udC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0
aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaCkg
Y29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3Qg
U2ltcGxlRm9udERhdGEmLCBHbHlwaCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHJldmlzaW9u
IDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlTWF0aERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDggKzExMyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgYm9vbCBpc0V4dGVuZGVyOwogICAgIH07CiAKLSAgICBmbG9hdCBnZXRNYXRo
Q29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEqLCBNYXRoQ29uc3RhbnQpIGNvbnN0OwotICAg
IGZsb2F0IGdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaCkg
Y29uc3Q7CisgICAgZmxvYXQgZ2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwg
TWF0aENvbnN0YW50KSBjb25zdDsKKyAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0
IFNpbXBsZUZvbnREYXRhJiwgR2x5cGgpIGNvbnN0OwogICAgIHZvaWQgZ2V0TWF0aFZhcmlhbnRz
KEdseXBoLCBib29sIGlzVmVydGljYWwsIFZlY3RvcjxHbHlwaD4mIHNpemVWYXJpYW50cywgVmVj
dG9yPEFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjph
ZHZhbmNlKHVuc2lnbgogICAgICAgICAgICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltpbmRleF0gPSBm
b3JjZVNtYWxsQ2FwcyA/IGMgOiBuZXdDOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZmFs
bGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEgIT0gbV9m
b250LnByaW1hcnlGb250KCkpCisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZv
bnREYXRhICE9IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRh
KCkpCiAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CiAKICAgICAg
ICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNT
bWFsbENhcHMpIHsKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6
OmFkdmFuY2UodW5zaWduCiAgICAgCiAgICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/
IGluZGV4T2ZGb250VHJhbnNpdGlvbiArIDEgOiBsZW5ndGggLSBpbmRleE9mRm9udFRyYW5zaXRp
b247CiAgICAgaWYgKGl0ZW1MZW5ndGgpIHsKLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAm
JiBuZXh0Rm9udERhdGEgIT0gbV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAgIGlmIChtX2Zh
bGxiYWNrRm9udHMgJiYgbmV4dEZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkp
CiAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChuZXh0Rm9udERhdGEpOwogCiAgICAg
ICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IDAgOiBpbmRleE9mRm9udFRyYW5zaXRp
b247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShy
ZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29sIElubGluZUZsb3dC
b3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0
eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5mb250RGVzY3JpcHRp
b24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVw
cmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0
aWNhbEdseXBocygpKQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0
YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9y
IChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dE9uTGluZSgpKSB7CkBAIC00NjAsNyArNDYwLDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpy
ZXF1aXJlc0lkZW9ncmFwaGljQgogICAgICAgICAgICAgaWYgKGRvd25jYXN0PElubGluZUZsb3dC
b3g+KCpjaGlsZCkucmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM4OCw3ICsxMzg4LDcgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0
UnVuKAogCiAgICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBl
eHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5y
dGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250
Q29kZVBhdGgoKSk7CiAgICAgcnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFj
ZSgpLCBzdHlsZS50YWJTaXplKCkpOwotICAgIGlmIChmb250LnByaW1hcnlGb250KCktPmlzU1ZH
Rm9udCgpKQorICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAg
ICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWF4aW11bSBsZW5n
dGggb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyIHRvIHRoZSBUZXh0UnVuLCBldmVuIHdoZW4gd2Un
cmUgb25seSBwcm9jZXNzaW5nIGEgc3Vic3RyaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIwLDcgKzIz
MjAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGVmCiAgICAgICAg
IHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3BhY2luZyBhcHBs
eT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0IHRoZSBlZGdl
PwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udCgpLT5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5l
R3JpZC0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CiAg
ICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiBsZWZ0OwogCkBAIC0yMzYwLDcg
KzIzNjAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmlnCiAgICAg
ICAgIHJldHVybiByaWdodDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcg
YXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUg
ZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnQoKS0+bWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0g
bGluZUdyaWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgp
OwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKQEAgLTM2
OTQsNyArMzY5NCw3IEBAIHN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4K
ICAgICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IFZp
c3VhbE9yZGVyOwogCiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCBl
eHBhbnNpb24sIHRleHREaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOwotICAgIGlmIChm
b250LnByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZvbnQucHJpbWFyeUZv
bnREYXRhKCkuaXNTVkdGb250KCkpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQpOyAvLyBGSVhN
RTogVGhyZWFkIGEgUmVuZGVyT2JqZWN0JiB0byB0aGlzIHBvaW50IHNvIHdlIGRvbid0IGhhdmUg
dG8gZGVyZWZlcmVuY2UgYW55dGhpbmcuCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0
KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKmNvbnRleHQpKTsKICAgICB9CkBA
IC0zNzE0LDcgKzM3MTQsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bkluCiAgICAgICAgICAgICBkaXJlY3Rpb25hbE92ZXJyaWRlIHw9IGlzT3ZlcnJpZGUoc3R5bGUu
dW5pY29kZUJpZGkoKSk7CiAgICAgfQogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0
aCwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsK
LSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKSkgeworICAgIGlmIChmb250
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0
KTsgLy8gRklYTUU6IFRocmVhZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBk
b24ndCBoYXZlIHRvIGRlcmVmZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVy
aW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAg
ICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKICAgICBlbHNlIGlmIChzdHls
ZSgpLmZvbnQoKS5oYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSkKLSAgICAgICAgbWF4Q2hhcldp
ZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0aCgp
KTsKKyAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpLm1heENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5w
dXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4MCw3
ICs1ODAsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsCiAgICAg
Rm9udCBmb250ID0gc3R5bGUuZm9udCgpOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgp
LT5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCisgICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
Rm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzc5
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFu
ZERlc2NlbnRGb3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94
LmxpbmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgp
ICYmIChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZl
KCkgJiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZChib3hM
aW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkpOworICAgICAgICB1c2VkRm9udHMtPmFwcGVu
ZCgmYm94TGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1l
dHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFz
Y2VudChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwx
MCArMTc4LDEwIEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUuZm9udCgpLnByaW1h
cnlGb250KCktPmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250KCkucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBXZSBhc3N1
bWUgdGhhdCBhbGwgbGluZXMgaGF2ZSBtZXRyaWNzIGJhc2VkIHB1cmVseSBvbiB0aGUgcHJpbWFy
eSBmb250LgotICAgIGF1dG8mIHByaW1hcnlGb250RGF0YSA9ICpzdHlsZS5mb250KCkucHJpbWFy
eUZvbnQoKTsKKyAgICBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCk7CiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5pc0xvYWRpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hp
bGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShy
ZXZpc2lvbiAxNzc5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyMiw3ICsxNTIyLDcgQEAg
Ym9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbQogICAgIGlmICghYm90dG9t
LmdseXBoKQogICAgICAgICBib3R0b20uZ2x5cGggPSBleHRlbnNpb24uZ2x5cGg7CiAKLSAgICB0
b3AuZm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAgIHRvcC5mb250
RGF0YSA9ICZzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBleHRlbnNpb24u
Zm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZvbnRE
YXRhOwogICAgIGlmIChtaWRkbGUuZ2x5cGgpCkBAIC0xNTM5LDI0ICsxNTM5LDI0IEBAIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKIAogICAgIEFTU0VSVChtX2lzVmVy
dGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7CiAKLSAgICBjb25zdCBh
dXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250
RGF0YSgpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpOwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhIHx8ICFwcmltYXJ5Rm9udERhdGEtPm1hdGhE
YXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9IHByaW1hcnlGb250RGF0YSkKKyAgICBpZiAo
IXByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpIHx8IGJhc2VHbHlwaC5mb250RGF0YSAhPSAmcHJp
bWFyeUZvbnREYXRhKQogICAgICAgICByZXR1cm4gZGF0YTsKIAogICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOwogICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
IGFzc2VtYmx5UGFydHM7CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWlu
SGVpZ2h0IGlzIHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0
IGxlYXN0IFxzcXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgotICAgIGZs
b2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250RGF0
YS0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zs
b2F0LCBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOwor
ICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlwaC5m
b250RGF0YS0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRP
ZlR3b0Zsb2F0LCBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0
KSk7CiAKLSAgICBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhi
YXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAg
cHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5
cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CiAKICAgICAvLyBXZSBjaG9v
c2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3Rl
ZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUg
bGFyZ2VzdCB2YXJpYW50LgogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IHNpemVWYXJpYW50cykg
ewogICAgICAgICBHbHlwaERhdGEgc2l6ZVZhcmlhbnQ7CiAgICAgICAgIHNpemVWYXJpYW50Lmds
eXBoID0gdmFyaWFudDsKLSAgICAgICAgc2l6ZVZhcmlhbnQuZm9udERhdGEgPSBwcmltYXJ5Rm9u
dERhdGE7CisgICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsK
ICAgICAgICAgZGF0YS5zZXRTaXplVmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwogICAgICAgICBp
ZiAoYm91bmRzRm9yR2x5cGgoc2l6ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MSwxOCArMTU3MSwx
OCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRj
aHlEYXRhIGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0
IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7Cisg
ICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udCgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7CiAgICAgCi0gICAgaWYgKHByaW1hcnlGb250RGF0YSAmJiBwcmltYXJ5Rm9udERhdGEt
Pm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09IHByaW1hcnlGb250RGF0YSkgewor
ICAgIGlmIChwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udERhdGEg
PT0gJnByaW1hcnlGb250RGF0YSkgewogICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50
czsKICAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1i
bHlQYXJ0czsKLSAgICAgICAgcHJpbWFyeUZvbnREYXRhLT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFy
aWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1i
bHlQYXJ0cyk7CisgICAgICAgIHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFy
aWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1i
bHlQYXJ0cyk7CiAgICAgICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KICAgICAg
ICAgZm9yIChhdXRvJiB2YXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgICAgICBHbHlw
aERhdGEgc2l6ZVZhcmlhbnQ7CiAgICAgICAgICAgICBzaXplVmFyaWFudC5nbHlwaCA9IHZhcmlh
bnQ7Ci0gICAgICAgICAgICBzaXplVmFyaWFudC5mb250RGF0YSA9IHByaW1hcnlGb250RGF0YTsK
KyAgICAgICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKICAg
ICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKICAgICAgICAgICAgICAgICAqbWF4aW11
bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VGb3JHbHlw
aChzaXplVmFyaWFudCkpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0xOTgzLDggKzE5ODMsOCBA
QCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuCiAKIExheW91dFVuaXQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcigpCiB7Ci0gICAgY29uc3Qg
YXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKTsKLSAg
ICBpZiAoIXByaW1hcnlGb250RGF0YSB8fCAhcHJpbWFyeUZvbnREYXRhLT5tYXRoRGF0YSgpKQor
ICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpOworICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgLy8gRm9yIE9wZW5UeXBlIE1BVEggZm9udCwgdGhlIGxheW91dCBp
cyBiYXNlZCBvbiBSZW5kZXJNYXRoT3BlcmF0b3IgZm9yIHdoaWNoIHRoZSBwcmVmZXJyZWQgd2lk
dGggaXMgc29tZXRpbWVzIG92ZXJlc3RpbWF0ZWQgKGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRv
ci5jcHAJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
OCArNjMsNyBAQCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OlJlbmRlck1hdGhNCiAKIHZv
aWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpzdHJldGNoVG8oTGF5b3V0VW5pdCBoZWln
aHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0IGRlcHRoQmVsb3dCYXNlbGluZSkKIHsKLSAgICBj
b25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgp
OwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhIHx8ICFwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRh
KCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRh
KCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250
LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNhbCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUg
dGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2lu
dExvd2VyOwogICAgIH0KQEAgLTg0LDggKzgzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2Fs
T3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHkoKSk7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQo
KS5wcmltYXJ5Rm9udCgpOwotICAgIGlmIChwcmltYXJ5Rm9udERhdGEgJiYgcHJpbWFyeUZvbnRE
YXRhLT5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0
YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05OCw4
ICs5Niw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXQKIAogdm9p
ZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7Ci0gICAgaWYg
KHByaW1hcnlGb250RGF0YSAmJiBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCkpIHsKKyAgICBp
ZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAg
ICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdo
dCwgbG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTE0LDggKzExMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWlu
dCgKICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFz
ZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJ
QkxFKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEg
PSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOwotICAgIGlmIChwcmltYXJ5Rm9udERhdGEg
JiYgcHJpbWFyeUZvbnREYXRhLT5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE3
ICsyMDgsMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHlsZSgpCiAgICAgTGF5
b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAx
ODsKICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IDAuNmY7CiAKLSAgICBjb25zdCBh
dXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOwotICAg
IGlmIChwcmltYXJ5Rm9udERhdGEgJiYgcHJpbWFyeUZvbnREYXRhLT5tYXRoRGF0YSgpKSB7Cisg
ICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCk7CisgICAgaWYgKGF1dG8qIG1hdGhEYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBGSVhNRTogbV92ZXJ0aWNhbEdh
cCBzaG91bGQgdXNlIFJhZGljYWxEaXNwbGF5U3R5bGVWZXJ0aWNhbCBpbiBkaXNwbGF5IG1vZGUg
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgotICAgICAg
ICBtX3ZlcnRpY2FsR2FwID0gcHJpbWFyeUZvbnREYXRhLT5tYXRoRGF0YSgpLT5nZXRNYXRoQ29u
c3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsVmVydGljYWxH
YXApOwotICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRh
KCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJh
ZGljYWxSdWxlVGhpY2tuZXNzKTsKLSAgICAgICAgbV9leHRyYUFzY2VuZGVyID0gcHJpbWFyeUZv
bnREYXRhLT5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVu
VHlwZU1hdGhEYXRhOjpSYWRpY2FsRXh0cmFBc2NlbmRlcik7CisgICAgICAgIG1fdmVydGljYWxH
YXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVN
YXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKKyAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0g
bWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERh
dGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9leHRyYUFzY2VuZGVyID0gbWF0
aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6
OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKIAogICAgICAgICBpZiAoIWlzUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdCgpKSB7Ci0gICAgICAgICAgICBrZXJuQmVmb3JlRGVncmVlID0gcHJpbWFyeUZvbnRE
YXRhLT5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlw
ZU1hdGhEYXRhOjpSYWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7Ci0gICAgICAgICAgICBrZXJuQWZ0
ZXJEZWdyZWUgPSBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChw
cmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxLZXJuQWZ0ZXJEZWdyZWUp
OwotICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQgPSBwcmltYXJ5Rm9udERh
dGEtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBl
TWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQpOworICAgICAgICAgICAg
a2VybkJlZm9yZURlZ3JlZSA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnRE
YXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7CisgICAgICAg
ICAgICBrZXJuQWZ0ZXJEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlG
b250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7CisgICAg
ICAgICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29u
c3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsRGVncmVlQm90
dG9tUmFpc2VQZXJjZW50KTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAxNzc5MDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTg0LDcgKzExODQsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRl
clN0eWxlOjpoeXBoZW5TCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRlcGVuZCBvbiBsb2Nh
bGUuCiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlw
aGVuTWludXNTdHJpbmcsICgmaHlwaGVuTWludXMsIDEpKTsKICAgICBERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5TdHJpbmcsICgmaHlwaGVuLCAxKSk7
Ci0gICAgcmV0dXJuIGZvbnQoKS5wcmltYXJ5Rm9udEhhc0dseXBoRm9yQ2hhcmFjdGVyKGh5cGhl
bikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKKyAgICByZXR1cm4gZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJp
bmcgOiBoeXBoZW5NaW51c1N0cmluZzsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJT
dHlsZTo6dGV4dEVtcGhhc2lzTWFya1N0cmluZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3
NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMiw3ICs0MjIsNyBAQCBUZXh0UnVuIFNWR0lubGluZVRl
eHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAgLCBkaXJlY3Rpb24oKQogICAg
ICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRsT3JkZXJpbmcoKSA9PSBW
aXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS0+
Zm9udCgpLnByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS0+Zm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5n
Q29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsK
IAogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zy5jcHAJKHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNiAr
NDEsMTYgQEAgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdQogZmxvYXQg
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OmNhbGN1bGF0ZVNWR0tlcm5pbmcoYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgY29uc3QgU1ZHVGV4dE1ldHJpY3M6OkdseXBoJiBjdXJyZW50R2x5cGgpCiB7
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEgPSBtX2ZvbnQucHJpbWFyeUZvbnQoKTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NWR0ZvbnQo
KSkgeworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IG1fZm9udC5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICBpZiAoIWZvbnREYXRhLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIG1f
bGFzdEdseXBoLmlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRh
LT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnREYXRhLmlzQ3VzdG9tRm9udCgpKTsKKyAg
ICBBU1NFUlQoZm9udERhdGEuaXNTVkdGb250KCkpOwogCi0gICAgY29uc3QgU1ZHRm9udERhdGEq
IHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+
Zm9udERhdGEoKSk7CisgICAgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS5mb250RGF0YSgpKTsKICAgICBTVkdG
b250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxl
bWVudCgpOwogICAgIEFTU0VSVChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzc5MDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25z
dHJ1Y3RUZXh0UnVuCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAg
ICAgICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25h
bE92ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS0+aXNT
VkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3Mo
KTsKQEAgLTkxLDcgKzkxLDcgQEAgU1ZHVGV4dE1ldHJpY3MgU1ZHVGV4dE1ldHJpY3M6Om1lYXN1
cmVDaAogCiBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3MoUmVuZGVyU1ZHSW5saW5lVGV4
dCYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgd2lkdGgs
IGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lKQogewotICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4
dC5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsKKyAgICBib29sIG5l
ZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCk7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHQuc2NhbGluZ0ZhY3RvcigpOwog
ICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDE3NzkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTMgKzI5Miwx
MyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHCiAKIHN0YXRpYyBH
bHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb25zdCBGb250JiBmb250KQogewotICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250KCk7
Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEtPmlzU1ZHRm9udCgpKQorICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOworICAg
IGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gR2x5cGhE
YXRhKCk7CiAgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50OwogICAgIFNWR0ZvbnRGYWNl
RWxlbWVudCogZm9udEZhY2VFbGVtZW50OwotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRG
b3JGb250RGF0YShwcmltYXJ5Rm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQp
OwotICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCBwcmlt
YXJ5Rm9udERhdGEpOworICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YSgm
cHJpbWFyeUZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICByZXR1
cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250RGF0
YSk7CiB9CiAKIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBV
Q2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNp
Z25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUp
CkBAIC0zMTQsNyArMzE0LDcgQEAgR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpnbAogICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5kZXJFbGVtZW50Pihy
ZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpIDogKnJlbmRl
cmVyKCkucGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5kZXJlckVsZW1l
bnQgPSBlbGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZH
QWx0R2x5cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJFbGVtZW50KSkKLSAgICAgICAgICAgICAg
ICBnbHlwaERhdGEuZm9udERhdGEgPSBmb250LnByaW1hcnlGb250KCk7CisgICAgICAgICAgICAg
ICAgZ2x5cGhEYXRhLmZvbnREYXRhID0gJmZvbnQucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgICAg
IH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0JKHJldmlzaW9u
IDE3NzkwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYlBvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB2b2lk
IFdlYlBvcHVwTWVudTo6c2V0VXBQbGF0Zm9ybURhdGEoY29uCiB7CiAjaWYgVVNFKEFQUEtJVCkK
ICAgICAvLyBGSVhNRTogZm9udCB3aWxsIGJlIG5pbCBoZXJlIGZvciBjdXN0b20gZm9udHMsIHdl
IHNob3VsZCBmaXggdGhhdC4KLSAgICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51
U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CisgICAgTlNGb250ICpm
b250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOwogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuOwogICAgIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDAsNyArODAwLDcgQEAgRWRpdG9yU3RhdGUgV2Vi
UGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7
CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBz
dHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmZnJhbWUsIG5vZGVUb1JlbW92
ZSkpIHsKLSAgICAgICAgICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5
Rm9udCgpLT5nZXRDVEZvbnQoKTsKKyAgICAgICAgICAgIENURm9udFJlZiBmb250ID0gc3R5bGUt
PmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKICAgICAgICAgICAgIENURm9u
dFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IGZvbnQgPyBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhm
b250KSA6IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0cmFpdHMgJiBrQ1RGb250
VHJhaXRCb2xkKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBN
ZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc3OTA4KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MSw5ICs4
MSw5IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAgICAgICAgIFBvcHVwTWVudVN0
eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1TdHlsZShpKTsKICAgICAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOwogICAgICAgICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnQoKSkg
ewotICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkt
PmdldE5TRm9udCgpOworICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KSB7Ci0g
ICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXplID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkt
PnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKKyAgICAgICAgICAgICAgICBDR0Zsb2F0IHNpemUgPSBz
dHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpOwogICAg
ICAgICAgICAgICAgIGZvbnQgPSBzdHlsZS5mb250KCkud2VpZ2h0KCkgPCBGb250V2VpZ2h0Qm9s
ZCA/IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpzaXplXSA6IFtOU0ZvbnQgYm9sZFN5c3RlbUZv
bnRPZlNpemU6c2l6ZV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbYXR0cmlidXRlcyBz
ZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CkBAIC0xNDgsNyArMTQ4
LDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgcgogICAgIE5TTWVu
dSogbWVudSA9IFttX3BvcHVwIG1lbnVdOwogICAgIAogICAgIE5TUG9pbnQgbG9jYXRpb247Ci0g
ICAgTlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9u
dCgpLT5nZXROU0ZvbnQoKTsKKyAgICBOU0ZvbnQqIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxl
KCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogCiAgICAgLy8gVGhlc2Ug
dmFsdWVzIHdlcmUgYm9ycm93ZWQgZnJvbSBBcHBLaXQgdG8gbWF0Y2ggdGhlaXIgcGxhY2VtZW50
IG9mIHRoZSBtZW51LgogICAgIGNvbnN0IGludCBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA9IC0x
MDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243978</attachid>
            <date>2015-01-05 09:27:11 -0800</date>
            <delta_ts>2015-01-05 09:37:35 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>primary-font-reference-2.patch</filename>
            <type>text/plain</type>
            <size>66218</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNS0wMS0wNSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRm9udDo6cHJpbWFyeUZvbnRE
YXRhKCkgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMDgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgbm90IG51bGwuCisKKyAgICAgICAgQWxzbyBy
ZW5hbWUgcHJpbWFyeUZvbnQoKSAtPiBwcmltYXJ5Rm9udERhdGEoKS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAg
ICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChBWEF0
dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToK
KyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0pOgorICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdlYkNvcmU6OmVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0
YXJ0KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZhc3RBdmVyYWdlQ2hh
cldpZHRoSWZBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnRNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnNwYWNlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dGFiV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cHJpbWFyeUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnByaW1hcnlGb250KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cHJpbWFyeUZv
bnRIYXNHbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRj
aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRHbHlwaHM6OnByaW1hcnlGb250RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250R2x5cGhzOjpwcmltYXJ5U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVy
YXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Zm9udERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3Jl
VGV4dC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmg6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6
cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RU
ZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50
TG9naWNhbFdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
Y2FuVXNlRm9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlw
aEFzc2VtYmx5RmFsbEJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0
b3I6OmdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcik6CisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpzdHJldGNoVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290
Ojp1cGRhdGVTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OmNhbGN1
bGF0ZVNWR0tlcm5pbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1pc3NpbmdHbHlwaEZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisKIDIw
MTUtMDEtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVy
bml6ZSBhbmQgc3RyZWFtbGluZSBIVE1MU3RhY2tJdGVtCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE3NTgsNyArMTc1OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmli
dXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5n
ZXRDVEZvbnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3Ry
aW5nLCBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCksIHJhbmdlKTsK
ICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3IgPSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4dERlY29yYXRpb25VbmRlcmxpbmUgfCBU
ZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNyArODQ4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8KLSAgICBBWEF0
dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRB
dHRyaWJ1dGUsIHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSwgcmFuZ2Up
OworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxp
dHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5T
Rm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNvbG9ycwogICAgIEFYQXR0
cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9yZWdyb3Vu
ZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTS5tbQkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChOU0ZvbnQgKilf
Zm9udAogICAgIGF1dG8gcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogfQog
I2Vsc2UKIC0gKENURm9udFJlZilfZm9udApAQCAtNjc3LDcgKzY3Nyw3IEBAIC0gKENURm9udFJl
ZilfZm9udAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJl
cigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJu
IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXRDVEZvbnQoKTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENU
Rm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTExNCw3
ICsxMTE0LDcgQEAgc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAg
IGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGlj
IFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3
IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJl
bmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0Q1RGb250KCk7CisgICAgcmV0dXJuIChQbGF0Zm9y
bUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RG
b250KCk7CiB9CiAjZW5kaWYKIApAQCAtMjU5NCwxMCArMjU5NCwxMCBAQCBOU0F0dHJpYnV0ZWRT
dHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xl
XSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoc3R5
bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gp
CiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
SW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5
bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQo
KS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKKyAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9
IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkKICAgICAgICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRN
YW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnQoKS5w
cmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2Vy
IGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0Nv
bG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5
Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9uIDE3NzkxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjExLDkgKzIxMSw5IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JT
ZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBz
ZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiByZXN1bHQg
PSAwOworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVzdWx0ID0gc3R5bGUtPmZvbnQoKS5wcmlt
YXJ5Rm9udCgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZv
bnREYXRhKCk7CiAKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkgewogICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKQEAgLTIzNSwxMCArMjM1LDEwIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBu
b2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lw
cGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IHJl
bmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAgICAg
IGZvbnQgPSBwcmltYXJ5Rm9udDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gcHJpbWFy
eUZvbnQpIHsKKyAgICAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OworICAgICAgICAg
ICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICBoYXNN
dWx0aXBsZUZvbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0
ZXNGb3JTCiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNNdXRhYmxlRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5XTsKICAgICAKLSAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5m
b250KCkucHJpbWFyeUZvbnQoKS0+Z2V0Q1RGb250KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBz
dHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAgIGlmIChmb250
KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0J
KHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMyw5IEBAIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwogICAg
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1l
LCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiByZXN1bHQgPSAwOworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
cmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVzdWx0
ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0
eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04p
OwpAQCAtMTM1LDEwICsxMzUsMTAgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9u
dEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhh
dCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxl
KCkuZm9udCgpLnByaW1hcnlGb250KCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRh
KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICAgICAgZm9udCA9IHByaW1h
cnlGb250OwotICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSBwcmltYXJ5Rm9udCkgeworICAg
ICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CisgICAgICAgICAgICBlbHNlIGlmIChm
b250ICE9ICZwcmltYXJ5Rm9udCkgewogICAgICAgICAgICAgICAgIGhhc011bHRpcGxlRm9udHMg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTYwLDgg
KzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKICAgICBp
ZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6
bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAKLSAgICBp
ZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKLSAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxl
LT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwogCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNrKQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikp
IGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDYsNyArNTA2LDcgQEAgYm9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YgogewogICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAg
IGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLT5hdmdD
aGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udCgpIG1pZ2h0IG5vdCBjb3JyZXNwb25k
IHRvIGZpcnN0RmFtaWx5KCkuCisgICAgICAgIHdpZHRoID0gcm91bmRmKHByaW1hcnlGb250RGF0
YSgpLmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250RGF0YSgpIG1pZ2h0IG5v
dCBjb3JyZXNwb25kIHRvIGZpcnN0RmFtaWx5KCkuCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE3
NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcyLDEwICsxNzIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1BsYXRm
b3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9
CiAKLSAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBw
cmltYXJ5Rm9udCgpLT5mb250TWV0cmljcygpOyB9Ci0gICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCktPnNwYWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2lu
ZzsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJu
IHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0
ZXJTcGFjaW5nOyB9CiAgICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1
bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lk
dGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldp
ZHRoKCpwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBmbG9hdCB0YWJX
aWR0aCh1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFi
V2lkdGgocHJpbWFyeUZvbnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQogICAgIGJvb2wg
aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3Q7CiAgICAgYm9vbCBmYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBv
biBzdWNjZXNzCiAKQEAgLTE4Myw3ICsxODMsNyBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lz
TWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgaW50IGVtcGhhc2lz
TWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKIAotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBwcmltYXJ5Rm9udCgpIGNvbnN0OworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
JiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGFB
dCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCA9IEF1dG9WYXJp
YW50KSBjb25zdAogICAgIHsKQEAgLTE5Miw3ICsxOTIsNiBAQCBwdWJsaWM6CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZh
cmlhbnQpIGNvbnN0OwogI2VuZGlmCi0gICAgYm9vbCBwcmltYXJ5Rm9udEhhc0dseXBoRm9yQ2hh
cmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgo
VUNoYXIzMik7CiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMy
KTsKQEAgLTM1Nyw3ICszNTYsNyBAQCBpbmxpbmUgRm9udDo6fkZvbnQoKQogewogfQogCi1pbmxp
bmUgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6OnByaW1hcnlGb250KCkgY29uc3QKK2lubGlu
ZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBs
ZUZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkocmV2aXNpb24gMTc3OTEwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBGb250OjpwcmltYXJ5Rm9udEhhc0dseXBoRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIHJldHVybiBwcmltYXJ5
Rm9udCgpLT5nbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotfQotCiAvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBtYXkgbm90IHdvcmsgaWYgdGhlIGVtcGhhc2lzIG1hcmsgdXNlcyBhIGNvbXBs
ZXggc2NyaXB0LCBidXQgbm9uZSBvZiB0aGUKIC8vIHN0YW5kYXJkIGVtcGhhc2lzIG1hcmtzIGRv
IHNvLgogYm9vbCBGb250OjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBHbHlwaERhdGEmIGdseXBoRGF0YSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCShyZXZpc2lvbiAxNzc5
MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDExIEBAIHZvaWQgRm9udEdseXBoczo6cmVsZWFz
ZUZvbnREYXRhKCkKIAogdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSA9IHByaW1hcnlGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgaWYgKGlzPFNpbXBsZUZvbnRE
YXRhPigqZm9udERhdGEpKQotICAgICAgICBtX3BpdGNoID0gZG93bmNhc3Q8U2ltcGxlRm9udERh
dGE+KCpmb250RGF0YSkucGl0Y2goKTsKKyAgICBjb25zdCBGb250RGF0YSYgZm9udERhdGEgPSBw
cmltYXJ5Rm9udERhdGEoZGVzY3JpcHRpb24pOworICAgIGlmIChpczxTaW1wbGVGb250RGF0YT4o
Zm9udERhdGEpKQorICAgICAgICBtX3BpdGNoID0gZG93bmNhc3Q8U2ltcGxlRm9udERhdGE+KGZv
bnREYXRhKS5waXRjaCgpOwogICAgIGVsc2UgewotICAgICAgICBjb25zdCBTZWdtZW50ZWRGb250
RGF0YSYgc2VnbWVudGVkRm9udERhdGEgPSBkb3duY2FzdDxTZWdtZW50ZWRGb250RGF0YT4oKmZv
bnREYXRhKTsKKyAgICAgICAgY29uc3QgU2VnbWVudGVkRm9udERhdGEmIHNlZ21lbnRlZEZvbnRE
YXRhID0gZG93bmNhc3Q8U2VnbWVudGVkRm9udERhdGE+KGZvbnREYXRhKTsKICAgICAgICAgdW5z
aWduZWQgbnVtUmFuZ2VzID0gc2VnbWVudGVkRm9udERhdGEubnVtUmFuZ2VzKCk7CiAgICAgICAg
IGlmIChudW1SYW5nZXMgPT0gMSkKICAgICAgICAgICAgIG1fcGl0Y2ggPSBzZWdtZW50ZWRGb250
RGF0YS5yYW5nZUF0KDApLmZvbnREYXRhKCktPnBpdGNoKCk7CkBAIC0yNDUsOSArMjQ1LDkgQEAg
c3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYQogR2x5cGhEYXRhIEZvbnRH
bHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpCiB7CiAgICAg
Ly8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCi0gICAgYXV0byogb3Jp
Z2luYWxGb250RGF0YSA9IHByaW1hcnlGb250RGF0YShkZXNjcmlwdGlvbiktPnNpbXBsZUZvbnRE
YXRhRm9yQ2hhcmFjdGVyKGMpOworICAgIGF1dG8qIG9yaWdpbmFsRm9udERhdGEgPSBwcmltYXJ5
Rm9udERhdGEoZGVzY3JpcHRpb24pLnNpbXBsZUZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpOwogICAg
IGlmICghb3JpZ2luYWxGb250RGF0YSkKLSAgICAgICAgb3JpZ2luYWxGb250RGF0YSA9ICZwcmlt
YXJ5Rm9udERhdGEoZGVzY3JpcHRpb24pLT5zaW1wbGVGb250RGF0YUZvckZpcnN0UmFuZ2UoKTsK
KyAgICAgICAgb3JpZ2luYWxGb250RGF0YSA9ICZwcmltYXJ5Rm9udERhdGEoZGVzY3JpcHRpb24p
LnNpbXBsZUZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOwogCiAgICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBzeXN0ZW1GYWxsYmFja0ZvbnREYXRhID0gb3JpZ2luYWxGb250RGF0YS0+c3lzdGVtRmFs
bGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihjLCBkZXNjcmlwdGlvbiwgbV9pc0ZvclBsYXRmb3Jt
Rm9udCk7CiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhKQpAQCAtMzY0LDcgKzM2NCw3
IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWMKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKLSAg
ICAgICAgaWYgKGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFwcmltYXJ5U2ltcGxlRm9udERh
dGEoZGVzY3JpcHRpb24pLT5pc1NWR0ZvbnQoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRpb24u
c21hbGxDYXBzKCkgJiYgIXByaW1hcnlTaW1wbGVGb250RGF0YShkZXNjcmlwdGlvbikuaXNTVkdG
b250KCkpIHsKICAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gdV90b3VwcGVyKGMpOwogICAg
ICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7CiAgICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsK
QEAgLTM4NSw3ICszODUsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yQ2hh
cmFjCiAKICAgICBSZWZQdHI8R2x5cGhQYWdlPiYgY2FjaGVkUGFnZSA9IHBhZ2VOdW1iZXIgPyBt
X2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUgOiBt
X2NhY2hlZFBhZ2VaZXJvOwogICAgIGlmICghY2FjaGVkUGFnZSkKLSAgICAgICAgY2FjaGVkUGFn
ZSA9IGdseXBoUGFnZUZyb21Gb250RGF0YShwYWdlTnVtYmVyLCAqcHJpbWFyeUZvbnREYXRhKGRl
c2NyaXB0aW9uKSk7CisgICAgICAgIGNhY2hlZFBhZ2UgPSBnbHlwaFBhZ2VGcm9tRm9udERhdGEo
cGFnZU51bWJlciwgcHJpbWFyeUZvbnREYXRhKGRlc2NyaXB0aW9uKSk7CiAKICAgICBHbHlwaERh
dGEgZ2x5cGhEYXRhID0gY2FjaGVkUGFnZSA/IGNhY2hlZFBhZ2UtPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjKSA6IEdseXBoRGF0YSgpOwogICAgIGlmICghZ2x5cGhEYXRhLmdseXBoKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZp
c2lvbiAxNzc5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5
cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE0ICs2NywxNSBAQCBwdWJsaWM6CiAgICAgV2lk
dGhDYWNoZSYgd2lkdGhDYWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogICAgIGNvbnN0
IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0K
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5U2ltcGxlRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7Ci0gICAgY29uc3QgRm9udERhdGEqIHByaW1hcnlGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKSB7IHJldHVybiByZWFsaXplRm9udERh
dGFBdChkZXNjcmlwdGlvbiwgMCk7IH0KKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFy
eVNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IEZvbnREYXRhKiByZWFsaXplRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRp
b24mLCB1bnNpZ25lZCBpbmRleCk7CiAKIHByaXZhdGU6CiAgICAgRm9udEdseXBocyhQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4pOwogICAgIEZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOwogCisgICAgY29uc3QgRm9udERhdGEmIHByaW1hcnlGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKSB7IHJldHVybiAqcmVhbGl6ZUZvbnREYXRhQXQoZGVzY3Jp
cHRpb24sIDApOyB9CisKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2so
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKICAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNr
TGV2ZWwpOwpAQCAtMTA2LDE2ICsxMDcsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNG
aXhlZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1p
bmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBGb250R2x5cGhzOjpwcmltYXJ5U2ltcGxlRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEpIHsKLSAgICAgICAgYXV0
byogZm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoZGVzY3JpcHRpb24pOwotICAgICAgICBtX2Nh
Y2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSA9IGZvbnREYXRhLT5zaW1wbGVGb250RGF0YUZvckNo
YXJhY3RlcignICcpOworICAgICAgICBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250RGF0YShk
ZXNjcmlwdGlvbik7CisgICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gZm9u
dERhdGEuc2ltcGxlRm9udERhdGFGb3JDaGFyYWN0ZXIoJyAnKTsKICAgICAgICAgaWYgKCFtX2Nh
Y2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSkKLSAgICAgICAgICAgIG1fY2FjaGVkUHJpbWFyeVNp
bXBsZUZvbnREYXRhID0gJmZvbnREYXRhLT5zaW1wbGVGb250RGF0YUZvckZpcnN0UmFuZ2UoKTsK
KyAgICAgICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gJmZvbnREYXRhLnNp
bXBsZUZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOwogICAgIH0KLSAgICByZXR1cm4gbV9jYWNoZWRQ
cmltYXJ5U2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVG
b250RGF0YTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9maW5hbFJvdW5kaW5nV2lkdGg7
CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmlt
YXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZvbnQ7CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEm
IHByaW1hcnlGb250RGF0YSA9IG1fZm9udC0+cHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udERhdGE7CiAgICAgaW50
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsK
IAogICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKQEAgLTIxMSwxNCArMjExLDE0IEBAIGlubGlu
ZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udERhdGE7Ci0gICAgICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzICYmIGZvbnREYXRhICE9IHByaW1hcnlGb250KSB7CisgICAgICAgICAgICBpZiAo
bV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpIHsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBj
b3VsZCBiZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKCkgcmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQu
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVy
ID09IHVfdG91cHBlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNr
Rm9udHMtPmFkZChmb250RGF0YSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgdXBwZXJjYXNlR2x5cGhEYXRhID0gbV9mb250LT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIodV90b3VwcGVyKGNoYXJhY3RlciksIHJ0bCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh1cHBlcmNhc2VHbHlwaERhdGEuZm9udERhdGEgIT0gcHJpbWFyeUZv
bnQpCisgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlcmNhc2VHbHlwaERhdGEuZm9udERhdGEg
IT0gJnByaW1hcnlGb250RGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tG
b250cy0+YWRkKHVwcGVyY2FzZUdseXBoRGF0YS5mb250RGF0YSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsOCArNDk0LDggQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaQogICAgICAgICBzaXplX3Qg
Z2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKICAgICAgICAgdW5zaWdu
ZWQgZyA9IGx0ciA/IG1fZ2x5cGhJbkN1cnJlbnRSdW4gOiBnbHlwaENvdW50IC0gMSAtIG1fZ2x5
cGhJbkN1cnJlbnRSdW47CiAgICAgICAgIHVuc2lnbmVkIGsgPSBsZWZ0bW9zdEdseXBoICsgZzsK
LSAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYgY29tcGxleFRleHRSdW4uZm9udERhdGEoKSAh
PSBtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZChj
b21wbGV4VGV4dFJ1bi5mb250RGF0YSgpKTsKKyAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYg
JmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCkgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkK
KyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9udERhdGEo
KSk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciB0
aGUgZmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRvIGRyYXcuCiAgICAgICAgIC8vIFdoZW4gbGVm
dG1vc3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRzIHRoZSBmaXJzdCBnbHlwaCB0byBkcmF3LCB0
YWtpbmcgaW50bwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
OjphZHZhbmNlKHVuc2kKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlm
IChnbHlwaEJ1ZmZlciAmJiAhbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCkKLSAgICAgICAgICAg
ICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNba10sIGNvbXBsZXhUZXh0UnVu
LmZvbnREYXRhKCksIGFkanVzdGVkQWR2YW5jZSwgY29tcGxleFRleHRSdW4uaW5kZXhBdChtX2ds
eXBoSW5DdXJyZW50UnVuKSk7CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChtX2Fk
anVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udERhdGEoKSwgYWRqdXN0ZWRBZHZh
bmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5cGhJbkN1cnJlbnRSdW4pKTsKIAogICAg
ICAgICAgICAgdW5zaWduZWQgb2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSBtX2NoYXJhY3Rl
ckluQ3VycmVudEdseXBoOwogICAgICAgICAgICAgbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9
IHN0ZDo6bWluKG1fY3VycmVudENoYXJhY3RlciAtIGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0
aW9uKCksIGdseXBoRW5kT2Zmc2V0KSAtIGdseXBoU3RhcnRPZmZzZXQ7CkBAIC01NjYsOSArNTY2
LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgIGZvciAo
c2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7ICsrcikgewogICAgICAgICBDb21wbGV4VGV4dFJ1
biYgY29tcGxleFRleHRSdW4gPSAqbV9jb21wbGV4VGV4dFJ1bnNbcl07CiAgICAgICAgIHVuc2ln
bmVkIGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7Ci0gICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCk7
CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IGNvbXBsZXhUZXh0UnVu
LmZvbnREYXRhKCk7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBib29sIGlzRW1vamkgPSBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9pc0Vtb2ppOworICAgICAgICBib29sIGlzRW1vamkg
PSBmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7CiAjZW5kaWYKIAogICAgICAgICAv
LyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1c3Rp
bmcgdGhlIGFkdmFuY2UKQEAgLTU4OCw4ICs1ODgsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMgPSBjb21w
bGV4VGV4dFJ1bi5hZHZhbmNlcygpOwogCiAgICAgICAgIGJvb2wgbGFzdFJ1biA9IHIgKyAxID09
IHJ1bkNvdW50OwotICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50
ZXJGb250KCkgJiYgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5jZXMo
KTsKLSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkgLSBm
b250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOworICAgICAgICBib29sIHJvdW5kc0FkdmFu
Y2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udERhdGEucGxhdGZvcm1EYXRhKCku
cm91bmRzR2x5cGhBZHZhbmNlcygpOworICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERh
dGEuc3BhY2VXaWR0aCgpIC0gZm9udERhdGEuc3ludGhldGljQm9sZE9mZnNldCgpOwogICAgICAg
ICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zsb2F0KHNwYWNlV2lkdGgpOwog
ICAgICAgICBjb25zdCBVQ2hhciogY3AgPSBjb21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJzKCk7CiAg
ICAgICAgIENHUG9pbnQgZ2x5cGhPcmlnaW4gPSBDR1BvaW50WmVybzsKQEAgLTYxNiw3ICs2MTYs
NyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAg
ICAgICAgbmV4dENoID0gKihtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSAr
IG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7CiAKICAgICAgICAgICAgIGJv
b2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgICAgIENH
R2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0YS0+c3BhY2VHbHlwaCgpIDogZ2x5
cGhzW2ldOworICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnRE
YXRhLnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAgICAgIENHU2l6ZSBhZHZhbmNl
ID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRoLCBhZHZhbmNlc1tpXS5oZWln
aHQpIDogYWR2YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgaWYgKGlz
RW1vamkgJiYgYWR2YW5jZS53aWR0aCkKQEAgLTYyNCwyNSArNjI0LDI1IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICNlbmRpZgogCiAgICAgICAgICAgICBpZiAo
Y2ggPT0gJ1x0JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNl
LndpZHRoID0gbV9mb250LnRhYldpZHRoKCpmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1
bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7CisgICAgICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aChmb250RGF0YSwgbV9ydW4u
dGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENv
bW1pdCk7CiAgICAgICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2Uo
Y2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0g
MDsKLSAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnREYXRhLT5zcGFjZUdseXBoKCk7CisgICAg
ICAgICAgICAgICAgZ2x5cGggPSBmb250RGF0YS5zcGFjZUdseXBoKCk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGZsb2F0IHJvdW5kZWRBZHZhbmNlV2lkdGggPSByb3VuZGYoYWR2YW5j
ZS53aWR0aCk7CiAgICAgICAgICAgICBpZiAocm91bmRzQWR2YW5jZXMpCiAgICAgICAgICAgICAg
ICAgYWR2YW5jZS53aWR0aCA9IHJvdW5kZWRBZHZhbmNlV2lkdGg7CiAKLSAgICAgICAgICAgIGFk
dmFuY2Uud2lkdGggKz0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICAgICAg
ICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udERhdGEuc3ludGhldGljQm9sZE9mZnNldCgpOwogCiAg
CiAgICAgICAgICAgICAvLyBXZSBzcGVjaWFsIGNhc2Ugc3BhY2VzIGluIHR3byB3YXlzIHdoZW4g
YXBwbHlpbmcgd29yZCByb3VuZGluZy4gCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugcm91bmQg
c3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4gCiAgICAgICAgICAgICAv
LyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBnbHlwaHMg
dGhhdCAKICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2UgZ2x5cGgg
aGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgZ2x5cGguIAotICAgICAgICAgICAgaWYg
KG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9PSByb3Vu
ZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlw
aCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlLndp
ZHRoID0gZm9udERhdGEtPmFkanVzdGVkU3BhY2VXaWR0aCgpOworICAgICAgICAgICAgaWYgKG1f
cnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9PSByb3VuZGVk
U3BhY2VXaWR0aCAmJiAoZm9udERhdGEucGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09
IGZvbnREYXRhLnNwYWNlR2x5cGgoKSkpCisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9
IGZvbnREYXRhLmFkanVzdGVkU3BhY2VXaWR0aCgpOwogCiAgICAgICAgICAgICBpZiAoaGFzRXh0
cmFTcGFjaW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRoIGFu
IGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcuCkBAIC03MTYsNyAr
NzE2LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAg
ICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZhbmNlKTsKICAgICAgICAgICAgIG1f
YWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
RmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsK
KyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLmJvdW5kc0Zvckds
eXBoKGdseXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRzLm1vdmUoZ2x5cGhPcmlnaW4ueCwg
Z2x5cGhPcmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gc3Rk
OjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKICAgICAgICAg
ICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdC
b3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxOCArNzMsMTgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBDb21wbGV4VGV4dFJ1biA6IHB1YmxpYyBS
ZWZDb3VudGVkPENvbXBsZXhUZXh0UnVuPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmlu
Z0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQorICAgICAg
ICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdl
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4
dFJ1bihjdFJ1biwgZm9udERhdGEsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdM
ZW5ndGgsIHJ1blJhbmdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUmVmPENvbXBs
ZXhUZXh0UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdM
ZW5ndGgsIGJvb2wgbHRyKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVh
dGUoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRy
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4
dFJ1bihmb250RGF0YSwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwg
bHRyKSk7CiAgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9nbHlwaENvdW50OyB9Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGE7IH0KKyAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YTsgfQogICAg
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVy
czsgfQogICAgICAgICB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nTG9jYXRpb247IH0KICAgICAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nTGVuZ3RoOyB9CkBAIC0xMDAsMTEgKzEwMCwxMSBAQCBwcml2YXRlOgog
ICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdM
ZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwotICAgICAgICBDb21wbGV4VGV4dFJ1bihjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOworICAgICAgICBDb21wbGV4
VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENG
UmFuZ2UgcnVuUmFuZ2UpOworICAgICAgICBDb21wbGV4VGV4dFJ1bihjb25zdCBTaW1wbGVGb250
RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwg
c2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOwogCiAgICAgICAgIHVuc2lnbmVkIG1fZ2x5
cGhDb3VudDsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBtX2ZvbnREYXRhOwogICAgICAgICBjb25zdCBVQ2hh
ciogbV9jaGFyYWN0ZXJzOwogICAgICAgICB1bnNpZ25lZCBtX3N0cmluZ0xvY2F0aW9uOwogICAg
ICAgICBzaXplX3QgbV9zdHJpbmdMZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzc5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgLSAoaWQpb2JqZWN0QXRJbmRleDooTlNVSW50
ZWdlcilpbmRleAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkK
K0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENU
UnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0
aCwgQ0ZSYW5nZSBydW5SYW5nZSkKICAgICA6IG1fZm9udERhdGEoZm9udERhdGEpCiAgICAgLCBt
X2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9j
YXRpb24pCkBAIC0xMzAsNyArMTMwLDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bjo6QwogCiAvLyBNaXNzaW5nIGdseXBocyBydW4gY29uc3RydWN0b3IuIENvcmUgVGV4
dCB3aWxsIG5vdCBnZW5lcmF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocywgaW5zdGVhZCBmYWxs
aW5nIGJhY2sgb24KIC8vIGdseXBocyBmcm9tIExhc3RSZXNvcnQuIFdlIHdhbnQgdG8gdXNlIHRo
ZSBwcmltYXJ5IGZvbnQncyBtaXNzaW5nIGdseXBoIGluIG9yZGVyIHRvIG1hdGNoIHRoZSBmYXN0
IHRleHQgY29kZSBwYXRoLgotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5n
dGgsIGJvb2wgbHRyKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29t
cGxleFRleHRSdW4oY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgs
IGJvb2wgbHRyKQogICAgIDogbV9mb250RGF0YShmb250RGF0YSkKICAgICAsIG1fY2hhcmFjdGVy
cyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJpbmdMb2NhdGlvbikKQEAg
LTE2Myw3ICsxNjMsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpD
CiAgICAgLy8gU3ludGhlc2l6ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocy4KICAgICBtX2dseXBo
c1ZlY3Rvci5maWxsKDAsIG1fZ2x5cGhDb3VudCk7CiAgICAgbV9nbHlwaHMgPSBtX2dseXBoc1Zl
Y3Rvci5kYXRhKCk7Ci0gICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250
RGF0YS0+d2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5cGhDb3VudCk7CisgICAgbV9hZHZhbmNl
c1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250RGF0YS53aWR0aEZvckdseXBoKDApLCAwKSwg
bV9nbHlwaENvdW50KTsKICAgICBtX2FkdmFuY2VzID0gbV9hZHZhbmNlc1ZlY3Rvci5kYXRhKCk7
CiB9CiAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29s
bGVjdENvbXBsCiB7CiAgICAgaWYgKCFmb250RGF0YSkgewogICAgICAgICAvLyBDcmVhdGUgYSBy
dW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgotICAgICAgICBtX2Nv
bXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFy
eUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAg
ICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9u
dC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIG1fcnVuLmx0
cigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgICAgICAgICAgICAg
IC8vIE5TRm9udFJlbmRlcmluZ01vZGUuCiAgICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShy
dW5Gb250KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChDRkVxdWFsKGZvbnROYW1lLmdldCgp
LCBDRlNUUigiTGFzdFJlc29ydCIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21w
bGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlG
b250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5s
ZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBsZXhU
ZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnRE
YXRhKCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5s
ZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9
IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwg
Zm9udE5hbWUuZ2V0KCksIGZhbHNlLCBGb250Q2FjaGU6OkRvTm90UmV0YWluKS5nZXQoKTsKQEAg
LTI4OSwxNCArMjg5LDE0IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29t
cGwKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bkZvbnREYXRhKTsKICNlbmRpZgogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1
bkZvbnREYXRhICE9IG1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAgICAgICAgICAgICAgIGlmICht
X2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEo
KSkKICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQocnVuRm9udERhdGEp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMg
JiYgcnVuRm9udERhdGEgIT0gbV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAgIGlmIChtX2Zh
bGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkK
ICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKIAotICAgICAgICBt
X2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgcnVu
Rm9udERhdGEsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5SYW5nZSkpOworICAgICAg
ICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwg
KnJ1bkZvbnREYXRhLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tCShyZXZpc2lvbiAxNzc5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTkzLDggKzU5Myw4
IEBAIERhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2kKIGJvb2wgRm9udDo6
cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1Mp
IHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgY29uc3QgYXV0
byogZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOwotICAgIHJldHVybiAhZm9udERhdGEtPmlzU1ZH
Rm9udCgpICYmIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENv
cHlGb250RGVzY3JpcHRvcihmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQo
KSk7CisgICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoKTsKKyAgICBy
ZXR1cm4gIWZvbnREYXRhLmlzU1ZHRm9udCgpICYmIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJ
Rm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250RGF0YS5wbGF0Zm9ybURh
dGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKICNlbHNlCiAgICAgLy8gU3lzdGVtIGZvbnRzIGFyZSBo
aWRkZW4gYnkgaGF2aW5nIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRoIGEgcGVyaW9kLCBzbyBzaW1w
bHkgc2VhcmNoCiAgICAgLy8gZm9yIHRoYXQgaGVyZSByYXRoZXIgdGhhbiB0cnkgdG8ga2VlcCB0
aGUgbGlzdCB1cCB0byBkYXRlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAJKHJl
dmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNyArMjY1LDcg
QEAgT3BlblR5cGVNYXRoRGF0YTo6fk9wZW5UeXBlTWF0aERhdGEoKQogfQogCiAjaWYgRU5BQkxF
KE9QRU5UWVBFX01BVEgpCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQo
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QK
K2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250
RGF0YSYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBjb25zdAogewogICAgIGludDMyX3Qg
dmFsdWUgPSAwOwogCkBAIC0yODYsOSArMjg2LDkgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6
Z2V0TWF0aENvbnN0YW50KAogICAgIGlmIChjb25zdGFudCA9PSBTY3JpcHRQZXJjZW50U2NhbGVE
b3duIHx8IGNvbnN0YW50ID09IFNjcmlwdFNjcmlwdFBlcmNlbnRTY2FsZURvd24gfHwgY29uc3Rh
bnQgPT0gUmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCkKICAgICAgICAgcmV0dXJuIHZh
bHVlIC8gMTAwLjA7CiAKLSAgICByZXR1cm4gdmFsdWUgKiBmb250LT5zaXplUGVyVW5pdCgpOwor
ICAgIHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNlCi1mbG9hdCBPcGVu
VHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEqLCBNYXRo
Q29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQo
Y29uc3QgU2ltcGxlRm9udERhdGEmLCBNYXRoQ29uc3RhbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0yOTYsNyArMjk2LDcgQEAgZmxvYXQg
T3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAogfQogCiAjaWYgRU5BQkxFKE9QRU5U
WVBFX01BVEgpCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5U
eXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEmIGZv
bnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGNvbnN0IE9wZW5UeXBlOjpNQVRIVGFibGUq
IG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJsZTxPcGVuVHlwZTo6TUFUSFRhYmxlPihtX21h
dGhCdWZmZXIpOwogICAgIEFTU0VSVChtYXRoKTsKQEAgLTMwOCw5ICszMDgsOSBAQCBmbG9hdCBP
cGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0CiAgICAgaWYgKCFtYXRoSXRhbGljc0Nv
cnJlY3Rpb25JbmZvKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtYXRoSXRhbGlj
c0NvcnJlY3Rpb25JbmZvLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCptX21hdGhCdWZmZXIsIGdseXBo
KSAqIGZvbnQtPnNpemVQZXJVbml0KCk7CisgICAgcmV0dXJuIG1hdGhJdGFsaWNzQ29ycmVjdGlv
bkluZm8tPmdldEl0YWxpY0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZlciwgZ2x5cGgpICogZm9udC5z
aXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0Nv
cnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5U
eXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEmLCBH
bHlwaCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
TWF0aERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEzLDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBp
c0V4dGVuZGVyOwogICAgIH07CiAKLSAgICBmbG9hdCBnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2lt
cGxlRm9udERhdGEqLCBNYXRoQ29uc3RhbnQpIGNvbnN0OwotICAgIGZsb2F0IGdldEl0YWxpY0Nv
cnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaCkgY29uc3Q7CisgICAgZmxvYXQg
Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0aENvbnN0YW50KSBjb25z
dDsKKyAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwg
R2x5cGgpIGNvbnN0OwogICAgIHZvaWQgZ2V0TWF0aFZhcmlhbnRzKEdseXBoLCBib29sIGlzVmVy
dGljYWwsIFZlY3RvcjxHbHlwaD4mIHNpemVWYXJpYW50cywgVmVjdG9yPEFzc2VtYmx5UGFydD4m
IGFzc2VtYmx5UGFydHMpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUs
NyArMTY1LDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAg
ICAgICAgICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltpbmRleF0gPSBmb3JjZVNtYWxsQ2FwcyA/IGMg
OiBuZXdDOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBmb250
RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEgIT0gbV9mb250LnBy
aW1hcnlGb250KCkpCisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYg
bmV4dEZvbnREYXRhICE9IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZv
bnREYXRhKCkpCiAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CiAK
ICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMg
IT0gaXNTbWFsbENhcHMpIHsKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFVuaXNjcmliZUNvbnRy
b2xsZXI6OmFkdmFuY2UodW5zaWduCiAgICAgCiAgICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5y
dGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiArIDEgOiBsZW5ndGggLSBpbmRleE9mRm9udFRy
YW5zaXRpb247CiAgICAgaWYgKGl0ZW1MZW5ndGgpIHsKLSAgICAgICAgaWYgKG1fZmFsbGJhY2tG
b250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZvbnREYXRhICE9IG1fZm9udC5wcmltYXJ5Rm9u
dCgpKQorICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIG5leHRGb250RGF0YSAmJiBuZXh0
Rm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkKICAgICAgICAgICAgIG1fZmFs
bGJhY2tGb250cy0+YWRkKG5leHRGb250RGF0YSk7CiAKICAgICAgICAgaW50IGl0ZW1TdGFydCA9
IG1fcnVuLnJ0bCgpID8gMCA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3Jh
cGhpY0IKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5
bGUoKTsKICAgICBpZiAobGluZVN0eWxlLmZvbnREZXNjcmlwdGlvbigpLm5vbkNKS0dseXBoT3Jp
ZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodAotICAgICAgICB8fCBs
aW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250KCktPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAg
ICAgIHx8IGxpbmVTdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlw
aHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAg
LTQ2MCw3ICs0NjAsNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNC
CiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKS5yZXF1aXJl
c0lkZW9ncmFwaGljQmFzZWxpbmUodGV4dEJveERhdGFNYXApKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5saW5l
U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS0+aGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAg
ICAgICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmhh
c1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1
c2VkRm9udHMgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg4LDcgKzEzODgsNyBA
QCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAKICAgICBUZXh0UnVu
IHJ1bihzdHJpbmcsIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCks
IGRpcmVjdGlvbigpLCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlz
dWFsT3JkZXIsICFyZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpKTsKICAgICBy
dW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUo
KSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCisgICAgaWYgKGZv
bnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJp
bmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkp
OwogCiAgICAgLy8gUHJvcGFnYXRlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY2hhcmFjdGVy
cyBidWZmZXIgdG8gdGhlIFRleHRSdW4sIGV2ZW4gd2hlbiB3ZSdyZSBvbmx5IHByb2Nlc3Npbmcg
YSBzdWJzdHJpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjAsNyArMjMyMCw3IEBAIExheW91dFVuaXQg
UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMZWYKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNh
dGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hh
cldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJX
aWR0aCgpOworICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0
aCkKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKQEAgLTIzNjAsNyArMjM2MCw3IEBAIExheW91dFVu
aXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxSaWcKICAgICAgICAgcmV0dXJuIHJpZ2h0Owog
CiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21w
bGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1h
eENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5tYXhD
aGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFy
V2lkdGgpCiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzY5NCw3ICszNjk0LDcgQEAgc3Rh
dGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIGJvb2wgZGlyZWN0aW9u
YWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CiAKICAgICBU
ZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERpcmVj
dGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS0+
aXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQo
KSkgewogICAgICAgICBBU1NFUlQoY29udGV4dCk7IC8vIEZJWE1FOiBUaHJlYWQgYSBSZW5kZXJP
YmplY3QmIHRvIHRoaXMgcG9pbnQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXJlZmVyZW5jZSBhbnl0
aGluZy4KICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZSgqY29udGV4dCkpOwogICAgIH0KQEAgLTM3MTQsNyArMzcxNCw3IEBA
IHN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICAgICAgICAgIGRp
cmVjdGlvbmFsT3ZlcnJpZGUgfD0gaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKTsKICAg
ICB9CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCBleHBhbnNpb24s
IHRleHREaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOwotICAgIGlmIChmb250LnByaW1h
cnlGb250KCktPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCku
aXNTVkdGb250KCkpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQpOyAvLyBGSVhNRTogVGhyZWFk
IGEgUmVuZGVyT2JqZWN0JiB0byB0aGlzIHBvaW50IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVyZWZl
cmVuY2UgYW55dGhpbmcuCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKmNvbnRleHQpKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw3
ICszNDYsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6CiAgICAg
aWYgKGZhbWlseSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAgIG1heENoYXJXaWR0aCA9IHNj
YWxlRW1Ub1VuaXRzKDQwMjcpOwogICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udCgpLmhhc1ZhbGlk
QXZlcmFnZUNoYXJXaWR0aCgpKQotICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnQoKS0+bWF4Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhDaGFy
V2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldp
ZHRoKCkpOwogI2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBl
eHRyYSB3aWR0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0JKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRpYyB2
b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICBGb250IGZvbnQgPSBzdHlsZS5m
b250KCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0RWxlbWVudC5y
ZW5kZXJlcigpOwotICAgIGlmIChmb250LnByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpICYmICFy
ZW5kZXJlcikKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAh
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBGb250Q2FjaGVQdXJnZVByZXZl
bnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDcg
KzkwMSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBib3hMaW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAg
aWYgKHVzZWRGb250cyAmJiAhdXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8
IChib3hMaW5lU3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGlu
ZykpKSB7Ci0gICAgICAgIHVzZWRGb250cy0+YXBwZW5kKGJveExpbmVTdHlsZS5mb250KCkucHJp
bWFyeUZvbnQoKSk7CisgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1
c2VkRm9udHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYg
Zm9udE1ldHJpY3MgPSB1c2VkRm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAgICAg
ICAgaW50IHVzZWRGb250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5j
cHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDEwICsxNzgsMTAgQEAgYm9vbCBj
YW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQotICAgIGlmIChzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS0+aXNTVkdGb250
KCkpCisgICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBo
YXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAgYXV0byYg
cHJpbWFyeUZvbnREYXRhID0gKnN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpOworICAgIGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBp
ZiAocHJpbWFyeUZvbnREYXRhLmlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJU
ZXh0PihmbG93KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIyLDcgKzE1MjIsNyBAQCBib29sIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpnZXRHbHlwaEFzc2VtCiAgICAgaWYgKCFib3R0b20uZ2x5cGgpCiAgICAgICAgIGJv
dHRvbS5nbHlwaCA9IGV4dGVuc2lvbi5nbHlwaDsKIAotICAgIHRvcC5mb250RGF0YSA9IHN0eWxl
KCkuZm9udCgpLnByaW1hcnlGb250KCk7CisgICAgdG9wLmZvbnREYXRhID0gJnN0eWxlKCkuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGV4dGVuc2lvbi5mb250RGF0YSA9IHRvcC5mb250
RGF0YTsKICAgICBib3R0b20uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgaWYgKG1pZGRs
ZS5nbHlwaCkKQEAgLTE1MzksMjQgKzE1MzksMjQgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0
cmV0Y2h5RGF0YSBSZW5kZQogCiAgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCAmJiBpc0xhcmdlT3Bl
cmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0
YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFy
eUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgR2x5cGhE
YXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Ci0gICAgaWYgKCFwcmlt
YXJ5Rm9udERhdGEgfHwgIXByaW1hcnlGb250RGF0YS0+bWF0aERhdGEoKSB8fCBiYXNlR2x5cGgu
Zm9udERhdGEgIT0gcHJpbWFyeUZvbnREYXRhKQorICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1h
dGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCiAgICAg
ICAgIHJldHVybiBkYXRhOwogCiAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAg
VmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKIAog
ICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVz
IHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGlt
ZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlzcGxheU9wZXJhdG9y
TWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChi
YXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlGb250RGF0
YS0+bWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVN
YXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CisgICAgZmxvYXQgZGlzcGxheU9w
ZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnREYXRhLT5ib3VuZHNGb3JH
bHlwaChiYXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlG
b250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVu
VHlwZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpKTsKIAotICAgIHByaW1hcnlG
b250RGF0YS0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1
ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICBwcmltYXJ5Rm9udERhdGEubWF0
aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlh
bnRzLCBhc3NlbWJseVBhcnRzKTsKIAogICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2
YXJpYW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1p
bkhlaWdodCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCiAg
ICAgZm9yIChhdXRvJiB2YXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgIEdseXBoRGF0
YSBzaXplVmFyaWFudDsKICAgICAgICAgc2l6ZVZhcmlhbnQuZ2x5cGggPSB2YXJpYW50OwotICAg
ICAgICBzaXplVmFyaWFudC5mb250RGF0YSA9IHByaW1hcnlGb250RGF0YTsKKyAgICAgICAgc2l6
ZVZhcmlhbnQuZm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOwogICAgICAgICBkYXRhLnNldFNp
emVWYXJpYW50TW9kZShzaXplVmFyaWFudCk7CiAgICAgICAgIGlmIChib3VuZHNGb3JHbHlwaChz
aXplVmFyaWFudCkuaGVpZ2h0KCkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQogICAgICAg
ICAgICAgcmV0dXJuIGRhdGE7CkBAIC0xNTcxLDE4ICsxNTcxLDE4IEBAIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBT
dHJldGNoeURhdGEgYXNzZW1ibHlEYXRhOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnRE
YXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKTsKKyAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBHbHlw
aERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKLSAgICBp
ZiAocHJpbWFyeUZvbnREYXRhICYmIHByaW1hcnlGb250RGF0YS0+bWF0aERhdGEoKSAmJiBiYXNl
R2x5cGguZm9udERhdGEgPT0gcHJpbWFyeUZvbnREYXRhKSB7CisgICAgaWYgKHByaW1hcnlGb250
RGF0YS5tYXRoRGF0YSgpICYmIGJhc2VHbHlwaC5mb250RGF0YSA9PSAmcHJpbWFyeUZvbnREYXRh
KSB7CiAgICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8
T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBw
cmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5
cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAg
cHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5
cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAg
Ly8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHZhcmlh
bnQgOiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBzaXplVmFyaWFudDsK
ICAgICAgICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgICAgIHNp
emVWYXJpYW50LmZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhOworICAgICAgICAgICAgc2l6ZVZh
cmlhbnQuZm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOwogICAgICAgICAgICAgaWYgKG1heGlt
dW1HbHlwaFdpZHRoKQogICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6
bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZUZvckdseXBoKHNpemVWYXJpYW50KSk7CiAg
ICAgICAgICAgICBlbHNlIHsKQEAgLTE5ODMsOCArMTk4Myw4IEBAIHZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERh
dGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpOwotICAgIGlmICghcHJpbWFyeUZvbnRE
YXRhIHx8ICFwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCkpCisgICAgY29uc3QgYXV0byYgcHJp
bWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgaWYg
KCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAv
LyBGb3IgT3BlblR5cGUgTUFUSCBmb250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9uIFJlbmRlck1h
dGhPcGVyYXRvciBmb3Igd2hpY2ggdGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21ldGltZXMgb3Zl
cmVzdGltYXRlZCAoYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzAzMjYpLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSYWRpY2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc3
OTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw3IEBAIFJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExh
eW91dFVuaXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlG
b250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7Ci0gICAgaWYgKCFwcmltYXJ5
Rm9udERhdGEgfHwgIXByaW1hcnlGb250RGF0YS0+bWF0aERhdGEoKSkgeworICAgIGlmICghc3R5
bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBJ
ZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRIIGZvbnQsIHdlIGFsd2F5cyBtYWtlIHRo
ZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFuIHRoZSB0YXJnZXQuCiAgICAgICAgIGRl
cHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRvbVBvaW50TG93ZXI7CiAgICAgfQpAQCAt
ODQsOCArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiB7
CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAotICAgIGNvbnN0
IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7Ci0g
ICAgaWYgKHByaW1hcnlGb250RGF0YSAmJiBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCkpIHsK
KyAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewog
ICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0
aHMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk4LDggKzk2LDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGlj
YWxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29t
cHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKTsKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhICYm
IHByaW1hcnlGb250RGF0YS0+bWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21w
dXRlZFZhbHVlcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTQsOCArMTExLDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OnBhaW50KAogICAgIGlmIChpbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnBy
aW1hcnlGb250KCk7Ci0gICAgaWYgKHByaW1hcnlGb250RGF0YSAmJiBwcmltYXJ5Rm9udERhdGEt
Pm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCku
bWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoaW5mbywg
cGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZp
c2lvbiAxNzc5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTcgKzIwOCwxNyBAQCB2b2lkIFJl
bmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKICAgICBMYXlvdXRVbml0IGtlcm5BZnRlckRl
Z3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OwogICAgIG1fZGVncmVlQm90
dG9tUmFpc2VQZXJjZW50ID0gMC42ZjsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0
YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCk7Ci0gICAgaWYgKHByaW1hcnlGb250RGF0
YSAmJiBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBpZiAo
YXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0
YSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBtX3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNh
bERpc3BsYXlTdHlsZVZlcnRpY2FsIGluIGRpc3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExODczNykuCi0gICAgICAgIG1fdmVydGljYWxHYXAgPSBw
cmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERh
dGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7Ci0gICAgICAgIG1fcnVs
ZVRoaWNrbmVzcyA9IHByaW1hcnlGb250RGF0YS0+bWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50
KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlja25lc3Mp
OwotICAgICAgICBtX2V4dHJhQXNjZW5kZXIgPSBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCkt
PmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGlj
YWxFeHRyYUFzY2VuZGVyKTsKKyAgICAgICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRN
YXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsVmVy
dGljYWxHYXApOworICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRoRGF0YS0+Z2V0TWF0aENv
bnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlj
a25lc3MpOworICAgICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0
YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEV4dHJhQXNjZW5k
ZXIpOwogCiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxTcXVhcmVSb290KCkpIHsKLSAgICAg
ICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBwcmltYXJ5Rm9udERhdGEtPm1hdGhEYXRhKCktPmdl
dE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxL
ZXJuQmVmb3JlRGVncmVlKTsKLSAgICAgICAgICAgIGtlcm5BZnRlckRlZ3JlZSA9IHByaW1hcnlG
b250RGF0YS0+bWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3Bl
blR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7Ci0gICAgICAgICAgICBtX2Rl
Z3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IHByaW1hcnlGb250RGF0YS0+bWF0aERhdGEoKS0+Z2V0
TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbERl
Z3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CisgICAgICAgICAgICBrZXJuQmVmb3JlRGVncmVlID0g
bWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERh
dGE6OlJhZGljYWxLZXJuQmVmb3JlRGVncmVlKTsKKyAgICAgICAgICAgIGtlcm5BZnRlckRlZ3Jl
ZSA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1h
dGhEYXRhOjpSYWRpY2FsS2VybkFmdGVyRGVncmVlKTsKKyAgICAgICAgICAgIG1fZGVncmVlQm90
dG9tUmFpc2VQZXJjZW50ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERh
dGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQpOwog
ICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODQs
NyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5cGhlblMKICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0cmluZywgKCZo
eXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1cm4gZm9udCgp
LnByaW1hcnlGb250SGFzR2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6
IGh5cGhlbk1pbnVzU3RyaW5nOworICAgIHJldHVybiBmb250KCkucHJpbWFyeUZvbnREYXRhKCku
Z2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1pbnVzU3Ry
aW5nOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNN
YXJrU3RyaW5nKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIyLDcgKzQyMiw3IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4
dFIKICAgICAgICAgICAgICAgICAsIGRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBkaXJP
dmVycmlkZSgpIHx8IHN0eWxlLT5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyIC8qIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQo
KS0+aXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCku
aXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkpOwogCiAgICAgcnVuLmRpc2FibGVS
b3VuZGluZ0hhY2tzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMTc3
OTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
U3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE2ICs0MSwxNiBAQCBTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91CiBmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5l
U3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBT
VkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCkKIHsKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IG1fZm9udC5wcmltYXJ5
Rm9udCgpOwotICAgIGlmICghZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgY29uc3QgU2lt
cGxlRm9udERhdGEmIGZvbnREYXRhID0gbV9mb250LnByaW1hcnlGb250RGF0YSgpOworICAgIGlm
ICghZm9udERhdGEuaXNTVkdGb250KCkpIHsKICAgICAgICAgbV9sYXN0R2x5cGguaXNWYWxpZCA9
IGZhbHNlOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBBU1NFUlQoZm9udERhdGEt
PmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKKyAg
ICBBU1NFUlQoZm9udERhdGEuaXNDdXN0b21Gb250KCkpOworICAgIEFTU0VSVChmb250RGF0YS5p
c1NWR0ZvbnQoKSk7CiAKLSAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5mb250RGF0YSgpKTsKKyAgICBj
b25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250
RGF0YSo+KGZvbnREYXRhLmZvbnREYXRhKCkpOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3Zn
Rm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJU
KHN2Z0ZvbnRGYWNlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDE3NzkxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3
ICs3MCw3IEBAIFRleHRSdW4gU1ZHVGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4KICAgICAg
ICAgICAgICAgICAsIHN0eWxlLmRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBpc092ZXJy
aWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0g
ICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKSkKKyAgICBpZiAo
c3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4u
c2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHRl
eHQpKTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtOTEsNyArOTEsNyBA
QCBTVkdUZXh0TWV0cmljcyBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoCiAKIFNWR1RleHRNZXRy
aWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25lZCBw
b3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCwgY29uc3QgU3RyaW5nJiBnbHlw
aE5hbWUpCiB7Ci0gICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udCgpLnBy
aW1hcnlGb250KCktPmlzU1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5z
dHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBz
Y2FsaW5nRmFjdG9yID0gdGV4dC5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdG
YWN0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc3OTEwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQgU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5
cGhGb3JGb250KGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IHByaW1hcnlGb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnQoKTsKLSAgICBpZiAoIXByaW1hcnlG
b250RGF0YS0+aXNTVkdGb250KCkpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlG
b250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnREYXRhKCk7CisgICAgaWYgKCFwcmltYXJ5Rm9udERh
dGEuaXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAgICBTVkdGb250
RWxlbWVudCogZm9udEVsZW1lbnQ7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVs
ZW1lbnQ7Ci0gICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHByaW1hcnlG
b250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7Ci0gICAgcmV0dXJuIEdseXBo
RGF0YShmb250RWxlbWVudC0+bWlzc2luZ0dseXBoKCksIHByaW1hcnlGb250RGF0YSk7CisgICAg
c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZwcmltYXJ5Rm9udERhdGEsIGZv
bnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVs
ZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRhKTsKIH0KIAogR2x5cGhEYXRh
IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3Qg
Rm9udCYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBi
b29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3Ro
LCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkKQEAgLTMxNCw3ICszMTQsNyBA
QCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgICAgIGF1dG8m
IGVsZW1lbnRSZW5kZXJlciA9IGlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIoKSkgOiAqcmVuZGVyZXIoKS5wYXJlbnQoKTsKICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudFJlbmRlcmVyRWxlbWVudCA9IGVsZW1lbnRSZW5kZXJl
ci5lbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdBbHRHbHlwaEVsZW1lbnQ+KCpw
YXJlbnRSZW5kZXJlckVsZW1lbnQpKQotICAgICAgICAgICAgICAgIGdseXBoRGF0YS5mb250RGF0
YSA9IGZvbnQucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udERh
dGEgPSAmZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc3OTEwKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRV
cFBsYXRmb3JtRGF0YShjb24KIHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8vIEZJWE1FOiBmb250
IHdpbGwgYmUgbmlsIGhlcmUgZm9yIGN1c3RvbSBmb250cywgd2Ugc2hvdWxkIGZpeCB0aGF0Lgot
ICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udCgpLT5nZXROU0ZvbnQoKTsKKyAgICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50
LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiAgICAg
aWYgKCFmb250KQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNzc5MTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwMCw3ICs4MDAsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgp
IGNvbnN0CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKICAgICAgICAgTm9kZSogbm9k
ZVRvUmVtb3ZlOwogICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRpdG9yOjpzdHls
ZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewotICAgICAgICAgICAg
Q1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldENURm9udCgp
OworICAgICAgICAgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250
RGF0YSgpLmdldENURm9udCgpOwogICAgICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJh
aXRzID0gZm9udCA/IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCShy
ZXZpc2lvbiAxNzc5MTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBQb3B1cE1l
bnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgUG9wdXBNZW51U3R5bGUgc3R5bGUgPSBtX2NsaWVu
dC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
YXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7
CiAgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udCgpKSB7Ci0gICAgICAgICAgICBOU0Zv
bnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CisgICAg
ICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgICAgICAgICBDR0Zs
b2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2l6
ZSgpOworICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9udCA9
IHN0eWxlLmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkID8gW05TRm9udCBzeXN0ZW1G
b250T2ZTaXplOnNpemVdIDogW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpzaXplXTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFBvcHVwTWVu
dU1hYzo6c2hvdyhjb25zdCBJbnRSZWN0JiByCiAgICAgTlNNZW51KiBtZW51ID0gW21fcG9wdXAg
bWVudV07CiAgICAgCiAgICAgTlNQb2ludCBsb2NhdGlvbjsKLSAgICBOU0ZvbnQqIGZvbnQgPSBt
X2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOwor
ICAgIE5TRm9udCogZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0TlNGb250KCk7CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBib3Jyb3dl
ZCBmcm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUuCiAgICAg
Y29uc3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEwOwo=
</data>
<flag name="review"
          id="268896"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>