<?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>15741</bug_id>
          
          <creation_ts>2007-10-28 18:40:18 -0700</creation_ts>
          <short_desc>REGRESSION: svg/W3C-SVG-1.1/fonts-elem-03-b.svg shows worse behavior on TOT</short_desc>
          <delta_ts>2008-01-07 15:17:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>ap</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59750</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-28 18:40:18 -0700</bug_when>
    <thetext>svg/W3C-SVG-1.1/fonts-elem-03-b.svg
has never been correct, and wont&apos; be until we implement SVG fonts, but at least the font size used to be correct before. Now it just spews about how it couldn&apos;t create a font.  We should recognize .svg urls and not try to load them using the standard font-face stuff.

ERROR: unable to initialize with font (null) at not known
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:147 void WebCore::FontData::platformInit())
ERROR: Corrupt font detected, using (null) in place of (null) located at &quot;not known&quot;.
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:154 void WebCore::FontData::platformInit())
ERROR: failed to set up font, using system font ?;}?
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:161 void WebCore::FontData::platformInit())
ERROR: unable to initialize with font (null) at not known
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:147 void WebCore::FontData::platformInit())
ERROR: Corrupt font detected, using (null) in place of (null) located at &quot;not known&quot;.
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:154 void WebCore::FontData::platformInit())
ERROR: failed to set up font, using system font ?;}??i??
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:161 void WebCore::FontData::platformInit())
ERROR: unable to initialize with font (null) at not known
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:147 void WebCore::FontData::platformInit())
ERROR: Corrupt font detected, using (null) in place of (null) located at &quot;not known&quot;.
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:154 void WebCore::FontData::platformInit())
ERROR: failed to set up font, using system font ?;}??i??
(/Stuff/Projects/WebKit/WebCore/platform/mac/FontDataMac.mm:161 void WebCore::FontData::platformInit())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59752</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-28 18:58:55 -0700</bug_when>
    <thetext>This seems to be a very recent regression... maybe it came from my &lt;font-face&gt; support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66401</commentid>
    <comment_count>2</comment_count>
      <attachid>18305</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-06 15:00:25 -0800</bug_when>
    <thetext>Created attachment 18305
SVG Fonts support

Uploading SVG Fonts support follow-up patch here, as it fixes this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66402</commentid>
    <comment_count>3</comment_count>
      <attachid>18305</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-06 15:03:19 -0800</bug_when>
    <thetext>Comment on attachment 18305
SVG Fonts support

Leave the ENABLE(SVG_FONTS) checks in, and just change the build-webkit script to have it on by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66403</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-06 15:04:15 -0800</bug_when>
    <thetext>Hmm, that may only effect a few header include barriers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66404</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-06 15:07:56 -0800</bug_when>
    <thetext>in FontData* CSSFontSelector::getFontData there are a set of 3 &quot;if (!face &amp;&amp; !...)&quot; checks -- i can&apos;t see how these are being made to only effect svg fonts...
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66405</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-06 15:18:18 -0800</bug_when>
    <thetext>Whyfore the CString.h include in SVGfonts?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66407</commentid>
    <comment_count>7</comment_count>
      <attachid>18305</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-06 15:30:03 -0800</bug_when>
    <thetext>Comment on attachment 18305
SVG Fonts support

Other than my prior comments this looks good to me.  However I would very much prefer it if you could get Dan to look over the arabic form-fu

Am going to do a code style check now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66408</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-06 15:37:34 -0800</bug_when>
    <thetext>+        virtual ~SVGGlyphElement() { }

Constructors and destructors of polymorphic classes should not be inline, as they cause significant binary size bloat otherwise (for the same reason, they should be explicitly defined).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66409</commentid>
    <comment_count>9</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-06 15:39:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 18305 [edit])
&gt; Other than my prior comments this looks good to me.  However I would very much
&gt; prefer it if you could get Dan to look over the arabic form-fu
&gt; 
&gt; Am going to do a code style check now.
Dan, already okayed the arabic-fu :-)

CString.h include removed.

CSSFontSelector: Indeed need to find a way to only do this for SVG fonts. hmmm

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66410</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-06 15:40:21 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 18305 [edit])
&gt; Leave the ENABLE(SVG_FONTS) checks in, and just change the build-webkit script
&gt; to have it on by default
Yeah, I did that.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66411</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-06 15:40:43 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; +        virtual ~SVGGlyphElement() { }
&gt; 
&gt; Constructors and destructors of polymorphic classes should not be inline, as
&gt; they cause significant binary size bloat otherwise (for the same reason, they
&gt; should be explicitly defined).
Interessting, didn&apos;t know that. Fixed.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66414</commentid>
    <comment_count>12</comment_count>
      <attachid>18305</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-06 16:16:09 -0800</bug_when>
    <thetext>Comment on attachment 18305
SVG Fonts support

&quot;CSSFontSelector: Indeed need to find a way to only do this for SVG fonts.&quot;
It causes no regressions despite this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66460</commentid>
    <comment_count>13</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-07 09:42:36 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 18305 [edit])
&gt; &quot;CSSFontSelector: Indeed need to find a way to only do this for SVG fonts.&quot;
&gt; It causes no regressions despite this?
&gt; 
Right, no regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66491</commentid>
    <comment_count>14</comment_count>
      <attachid>18305</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-07 13:42:51 -0800</bug_when>
    <thetext>Comment on attachment 18305
SVG Fonts support

Based on comments from hyatt and others, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66495</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-07 15:17:40 -0800</bug_when>
    <thetext>Landed in r29246.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18305</attachid>
            <date>2008-01-06 15:00:25 -0800</date>
            <delta_ts>2008-01-07 13:42:51 -0800</delta_ts>
            <desc>SVG Fonts support</desc>
            <filename>SVGFonts.patch</filename>
            <type>text/plain</type>
            <size>73583</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI5MjE2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI5IEBACisyMDA4LTAx
LTA2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXM6IGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzQxIChSRUdSRVNTSU9OOiBzdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wMy1iLnN2ZyBzaG93cyB3b3JzZSBiZWhhdmlvciBvbiBUT1QpCisK
KyAgICAgICAgUmVtb3ZlZCBkcmF3R2x5cGhzV2l0aFNWR0ZvbnQgLSBjcmVhdGUgYSBuZXcgZnVu
Y3Rpb24gZHJhd1RleHRXaXRoU1ZHRm9udCBpbnN0ZWFkLgorICAgICAgICBUaGlzIGRvZXNuJ3Qg
aW52b2x2ZSBjcmVhdGluZy91c2luZyBhICdHbHlwaEJ1ZmZlcicgb2JqZWN0IGFueW1vcmUsIHdo
aWNoIGlzIG5vdAorICAgICAgICByZXF1aXJlZCBmb3IgU1ZHIEZvbnRzIGFueXdheSAod2UgYWxy
ZWFkeSBrbm93IGFsbCBvdXIgb2Zmc2V0cy9hZHZhbmNlcy9ldGMuLikKKworICAgICAgICBEb24n
dCBjYWxsIGl0IGZyb20gZHJhd1NpbXBsZVRleHQgYW55bW9yZSwgYnV0IGRpcmVjdGx5IGluIGRy
YXdUZXh0IC0gYXMgRGFuIHN1Z2dlc3RlZC4KKworICAgICAgICA8Z2x5cGg+IGVsZW1lbnRzIG5v
dyByZWdpc3RlciB0aGVtc2VsdmVzIGluIHRoZSBTVkdGb250RWxlbWVudCdzIGdseXBoIGNhY2hl
LgorICAgICAgICAoaW5zZXJ0ZWRJbnRvRG9jdW1lbnQgLyByZW1vdmVkRnJvbURvY3VtZW50IHRh
a2UgY2FyZSBvZiB0aGlzKQorCisgICAgICAgIFRoZSBjYWNoZSBpcyBidWlsdCBvbmNlIG5vdywg
YW5kIGlzIGtlcHQgdXBkYXRlZCAtIGl0J3Mgbm90IHJlYnVpbGQgYW55bW9yZQorICAgICAgICBv
biBwYWludGluZyAoISkgLSB3aGljaCB3YXMgYSBjcnVkZSBoYWNrIGZvciB0ZXN0aW5nLgorCisg
ICAgICAgIEltcGxlbWVudCBmbG9hdFdpZHRoL3NlbGVjdGlvblJlY3RGb3JUZXh0IGZvciBTVkcg
Rm9udHMsIGZpeGluZyB0ZXh0IHNlbGVjdGlvbi4KKworICAgICAgICBTdXBwb3J0IGhvcml6LW9y
aWdpbi14L3ksIGhvcml6LWFkdi14LCB2ZXJ0LWFkdi15LCB2ZXJ0LW9yaWdpbi14L3kgJiBhcmFi
aWMtZm9ybS4KKyAgICAgICAgSW1wbGVtZW50IHNpbXBsZSBhbGdvcml0aG0gdG8gZGV0ZXJtaW5l
IHRoZSBhcmFiaWMgZm9ybXMgZm9yIGEgc3RyaW5nIChpbml0aWFsLCBpc29sYXRlZCwgbWVkaWFs
LCB0ZXJtaW5hbCkuCisKKyAgICAgICAgVzNDIHRlc3RjYXNlIHdoaWNoIGluY2x1ZGUgU1ZHIEZv
bnRzOgorICAgICAgICBzdmcvVzNDLVNWRy0xLjEvYW5pbWF0ZS1lbGVtLTAzLXQuc3ZnIChGaXhl
ZCwgb2YgY291cnNlIG5vdCB0aGUgYW5pbSBpdHNlbGYsIGJ1dCBpdCdzIFNWRyBGb250cyB1c2Fn
ZSkKKyAgICAgICAgc3ZnL1czQy1TVkctMS4xL2FuaW1hdGUtZWxlbS0yNC10LnN2ZyAoRGl0dG8p
CisgICAgICAgIHN2Zy9XM0MtU1ZHLTEuMS9hbmltYXRlLWVsZW0tMzYtdC5zdmcgKERpdHRvKQor
ICAgICAgICBzdmcvVzNDLVNWRy0xLjEvYW5pbWF0ZS1lbGVtLTQwLXQuc3ZnIChEaXR0bykKKyAg
ICAgICAgc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWtlcm4tMDEtdC5zdmcgKG1pc3NpbmcgPHZrZXJu
Pi88aGtlcm4+IHN1cHBvcnQpCisgICAgICAgIHN2Zy9XM0MtU1ZHLTEuMS9mb250cy1kZXNjLTAy
LXQuc3ZnIChGaXhlZCwgdGVzdHMgQ1NTIGZvbnQgbWF0Y2hpbmcgYmFzZWQgb24gZm9udC12YXJp
YW50IGF0dHJpYnV0ZSkKKyAgICAgICAgc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDEtdC5z
dmcgKEZpeGVkLCBiYXNpYyBTVkcgZm9udCB0ZXN0KQorICAgICAgICBzdmcvVzNDLVNWRy0xLjEv
Zm9udHMtZWxlbS0wMi10LnN2ZyAoRml4ZWQsIGFjY3VyYWN5IHRlc3QgZm9yIGVtYmVkZGVkIFNW
RyBmb250KQorICAgICAgICBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNS10LnN2ZyAoRml4
ZWQsIGNoZWNrcyBob3Jpei1vcmlnaW4teCBzdXBwb3J0LCBub3RlOiBXM0MgcmVmZXJlbmNlIGlt
YWdlIGlzIHdyb25nKQorICAgICAgICBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNi10LnN2
ZyAoRml4ZWQsIGNoZWNrcyBob3Jpei1hZHYteCBzdXBwb3J0KQorICAgICAgICBzdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZ2x5cGgtMDItdC5zdmcgKEZpeGVkLCBjaGVja3MgYXJhYmljLWZvcm0gc3Vw
cG9ydCkKKyAgICAgICAgc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWdseXBoLTAzLXQuc3ZnIChGaXhl
ZCwgY2hlY2tzIGdseXBoIG1hdGNoaW5nIGJhc2VkIG9uIHhtbDpsYW5nKQorICAgICAgICBzdmcv
VzNDLVNWRy0xLjEvbWFza2luZy1tYXNrLTAxLWIuc3ZnIChGaXhlZCwgU1ZHIEZvbnRzICYgbWFz
a2luZykKKyAgICAgICAgc3ZnL1czQy1TVkctMS4xL3BzZXJ2ZXJzLWdyYWQtMDgtYi5zdmcgKEZp
eGVkLCBTVkcgRm9udHMgJiBncmFkaWVudCBvbiBmaWxsL3N0cm9rZSkKKyAgICAgICAgc3ZnL1cz
Qy1TVkctMS4xL3JlbmRlci1lbGVtcy0wNi10LnN2ZyAoRml4ZWQsIHNpbXBsZSAnZmlsbCcgcHJv
cGVydHkgdGVzdCkKKyAgICAgICAgc3ZnL1czQy1TVkctMS4xL3JlbmRlci1lbGVtcy0wNy10LnN2
ZyAoRml4ZWQsIHNpbXBsZSAnc3Ryb2tlJyBwcm9wZXJ0eSB0ZXN0IC0gc2hvd3MgU1ZHIEZvbnQg
aW50ZXJwcmV0cyBzdHJva2Utd2lkdGggaW4gZ2x5cGggY29vcmRpbmF0ZSBzeXN0ZW0sIGFzIGRl
bWFuZGVkIGJ5IHNwZWMpCisgICAgICAgIHN2Zy9XM0MtU1ZHLTEuMS9yZW5kZXItZWxlbXMtMDgt
dC5zdmcgKEZpeGVkLCBzaW1wbGUgJ2ZpbGwnICYgJ3N0cm9rZScgcHJvcGVydHkgdGVzdCkKKyAg
ICAgICAgc3ZnL1czQy1TVkctMS4xL3JlbmRlci1ncm91cHMtMDEtYi5zdmcgKG1pc3NpbmcgPHZr
ZXJuPi88aGtlcm4+IHN1cHBvcnQpCisgICAgICAgIHN2Zy9XM0MtU1ZHLTEuMS9yZW5kZXItZ3Jv
dXBzLTAzLXQuc3ZnIChEaXR0bykKKyAgICAgICAgc3ZnL1czQy1TVkctMS4xL3RleHQtYWx0Z2x5
cGgtMDEtYi5zdmcgKG5vIDxhbHRHbHlwaD4gc3VwcG9ydCB5ZXQpCisgICAgICAgIHN2Zy9XM0Mt
U1ZHLTEuMS90ZXh0LXRleHQtMDQtdC5zdmcgKEZpeGVkLCBhYnNvbHV0ZSBwbGFjaW5nIG9mIGNo
YXJhY3RlcnMgcGl4ZWwgcGVyZmVjdCBub3cpCisgICAgICAgIHN2Zy9XM0MtU1ZHLTEuMS90ZXh0
LXRleHQtMDUtdC5zdmcgKEZJWE1FOiBwcm9ibGVtIHdpdGggdGV4dC1hbmNob3IpCisgICAgICAg
IHN2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC5zdmcgKGhpZ2hsaWdodHMgcHJvYmxlbSB3
aXRoIGxpZ2F0dXJlcyAmIGFic29sdXRlIHBvc2l0aW9uZWQgY2hhcmFjdGVycykKKworICAgICAg
ICBRdWVzdGlvbmFibGUgdGVzdGNhc2VzOgorICAgICAgICBzdmcvVzNDLVNWRy0xLjEvZm9udHMt
Z2x5cGgtMDQtdC5zdmcgKHRlc3RzIHRoYXQgZ2x5cGggc2VsZWN0aW9uIGlzIGRvbmUgaW4gdGhl
IG9yZGVyIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmb250IGVsZW1lbnQuKQorICAgICAgICBJ
IGFtIG5vdCBzdXJlIHdoeSB0aGlzIGJlaGF2aW91ciBpcyBkZXNpcmVkLCBubyBjb21tZW50IGdp
dmVuIGluIHNwZWMgLSBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byBtZSwgaWdub3JpbmcgaXQg
Zm9yIG5vdy4KKworICAgICAgICBTZXZlcmFsIG90aGVyIGJhdGlrIHRlc3RjYXNlcyBmaXhlZCwg
d2hpY2ggdXNlIFNWRyBGb250cyBpbiBjb21iaW5hdGlvbiB3aXRoIGdyYWRpZW50cyAmIGZpbHRl
cnMuCisKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGluZVNwYWNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6eEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpj
YW5Vc2VHbHlwaENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpmbG9hdFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJl
Y3RGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46
OmFjdGl2ZVBhaW50U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldEFjdGl2
ZVBhaW50U2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YTo6bGluZVNwYWNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udERhdGE6OmxpbmVHYXApOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OnhI
ZWlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbmxpbmVUZXh0Qm94OjpwYWludENoYXJhY3RlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveFBhaW50V2Fsa2VyOjpjaHVu
a1BvcnRpb25DYWxsYmFjayk6CisgICAgICAgICogc3ZnL1NWR0ZvbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NBcmFiaWNGb3JtRGV0ZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlcnNXaXRoQXJhYmljRm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjppc0NvbXBhdGlibGVBcmFiaWNGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
Q29tcGF0aWJsZUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OnN2Z0ZvbnRBbmRGb250RmFjZUVs
ZW1lbnRGb3JGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuV2Fsa2VyOjpT
VkdUZXh0UnVuV2Fsa2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5XYWxrZXI6Ondh
bGspOgorICAgICAgICAoV2ViQ29yZTo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmRy
YXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d1RleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVj
dEZvclRleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RWxlbWVudDo6U1ZHRm9udEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRm9udEVsZW1lbnQ6OmFkZEdseXBoVG9DYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RWxlbWVudDo6cmVtb3ZlR2x5cGhGcm9tQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRm9udEVsZW1lbnQ6OmZpcnN0TWlzc2luZ0dseXBoRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RWxlbWVudDo6Z2x5cGhJZGVudGlmaWVyc0ZvclN0cmlu
Zyk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGb250RWxlbWVudDo6bWF4aW11bUhhc2hLZXlMZW5ndGgpOgorICAgICAgICAqIHN2Zy9TVkdG
b250RmFjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50
OjpjcmVhdGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6
OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6
OmFzc29jaWF0ZWRGb250RWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHR2x5cGhFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdHbHlwaEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VBcmFiaWNGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoRWxlbWVu
dDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdH
bHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKToKKyAgICAgICAgKiBzdmcvU1ZHR2x5
cGhFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaElkZW50aWZpZXI6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaElkZW50aWZpZXI6OlNWR0dseXBoSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoSWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6On5TVkdHbHlwaEVsZW1lbnQpOgorCiAyMDA4
LTAxLTA2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgT2xpdmVyLgpJbmRleDogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDI5MjE0KQorKysg
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE1ICs0MywxMiBA
QAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRGYW1pbHlWYWx1ZS5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi0jaWYgRU5BQkxFKFNWR19GT05U
UykKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlNWR0NTU0ZvbnRGYWNlLmgiCiAj
aW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMywxMCArMTAwLDExIEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KIAogICAgIC8vIENyZWF0ZSBhIEZv
bnREZXNjcmlwdGlvbiBmb3IgdGhpcyBmb250IGFuZCBzZXQgdXAgYm9sZC9pdGFsaWMgaW5mbyBw
cm9wZXJseS4KICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19Q
Uk9QX0ZPTlRfV0VJR0hUKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHlsZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX0ZPTlRfU1RZTEUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJdGFsaWMoZm9udFN0eWxlLmdldCgpICYmIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oZm9udFN0eWxlLmdldCgpKS0+Z2V0SWRlbnQoKSAhPSBDU1NfVkFMX05PUk1B
TCk7Ci0gICAgaWYgKGZvbnRXZWlnaHQpIHsKKworICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZv
bnRTdHlsZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX0ZPTlRfU1RZTEUp
KQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oZm9udFN0eWxlLmdldCgpKS0+Z2V0SWRlbnQoKSAhPSBDU1NfVkFMX05PUk1B
TCk7CisKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250V2VpZ2h0ID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfRk9OVF9XRUlHSFQpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHN1cHBvcnQgd2VpZ2h0cyBmb3IgcmVhbCwgc2luY2Ugd2UncmUgZWZmZWN0aXZl
bHkgbGltaXRpbmcgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgd2VpZ2h0cyB0byB0d28uCiAgICAg
ICAgIC8vIFRoaXMgYmVoYXZpb3IgY291bGQgYWxzbyByZXN1bHQgaW4gdGhlICJsYXN0IGtpbmRh
IGJvbGQgdmFyaWFudCIgZGVzY3JpYmVkIHdpbm5pbmcgZXZlbiBpZiBpdCBpc24ndCB0aGUgYmVz
dCBtYXRjaCBmb3IgYm9sZC4KICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGZvbnRXZWlnaHQuZ2V0KCkpLT5nZXRJZGVudCgpKSB7CkBAIC0xMjIsNiArMTIw
LDkgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwogICAgICAgICB9
CiAgICAgfQogCisgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9udFZhcmlhbnQgPSBzdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJPUF9GT05UX1ZBUklBTlQpKQorICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0U21hbGxDYXBzKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
Zm9udFZhcmlhbnQuZ2V0KCkpLT5nZXRJZGVudCgpID09IENTU19WQUxfU01BTExfQ0FQUyk7CisK
ICAgICAvLyBFYWNoIGl0ZW0gaW4gdGhlIHNyYyBwcm9wZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUg
Q1NTRm9udEZhY2VTb3VyY2UuIFB1dCB0aGVtIGFsbCBpbnRvIGEgQ1NTRm9udEZhY2UuCiAgICAg
Q1NTRm9udEZhY2UqIGZvbnRGYWNlID0gMDsKIApAQCAtMTM5LDEzICsxNDAsNiBAQCB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAgICAgIENTU0ZvbnRGYWNlU3Jj
VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlKj4oc3JjTGlzdC0+
aXRlbShpKSk7CiAgICAgICAgIENTU0ZvbnRGYWNlU291cmNlKiBzb3VyY2UgPSAwOwogCi0jaWYg
RU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgLy8gU1ZHIEZvbnRzIHN1cHBvcnQgKGludGVybmFs
IGZvbnRzLCBsaXZpbmcgd2l0aGluIHRoZSBkb2N1bWVudCkKLSAgICAgICAgc3ZnRm9udEZhY2VF
bGVtZW50ID0gaXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzdmdGb250
RmFjZUVsZW1lbnQpCi0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCiAgICAgICAgIGlmICgh
aXRlbS0+aXNMb2NhbCgpKSB7CiAgICAgICAgICAgICBpZiAoaXRlbS0+aXNTdXBwb3J0ZWRGb3Jt
YXQoKSkgewogICAgICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBtX2RvY3Vt
ZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdEZvbnQoaXRlbS0+cmVzb3VyY2UoKSk7CkBAIC0xNTMs
MzEgKzE0Nyw0MyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBDU1NGb250RmFjZVNvdXJjZShpdGVtLT5y
ZXNvdXJjZSgpLCBjYWNoZWRGb250KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFN0cmluZyBmYW1pbHkgPSBpdGVtLT5yZXNvdXJjZSgpOworCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyAgICAgICAgICAgIC8vIFNWRyBGb250cyBzdXBwb3J0IChpbnRlcm5h
bCBmb250cywgbGl2aW5nIHdpdGhpbiB0aGUgZG9jdW1lbnQpCisgICAgICAgICAgICBzdmdGb250
RmFjZUVsZW1lbnQgPSBpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlm
IChzdmdGb250RmFjZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBuZXcgQ1NT
Rm9udEZhY2VTb3VyY2UoZmFtaWx5KTsKKyAgICAgICAgICAgICAgICBmb3VuZExvY2FsID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgICAgICAvLyBUZXN0IHRoZSB2YWxp
ZGl0eSBvZiB0aGUgbG9jYWwgZm9udCBub3cuICBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhp
cyBmb250IGlmIGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICAvLyBvbiB0aGUgc3lzdGVt
LiAgSWYgaXQgKmRvZXMqIGV4aXN0IG9uIHRoZSBzeXN0ZW0sIHRoZW4gd2UgZG9uJ3QgbmVlZCB0
byBsb29rIGFueSBmdXJ0aGVyLgotICAgICAgICAgICAgU3RyaW5nIGZhbWlseSA9IGl0ZW0tPnJl
c291cmNlKCk7Ci0gICAgICAgICAgICBpZiAoRm9udENhY2hlOjpmb250RXhpc3RzKGZvbnREZXNj
cmlwdGlvbiwgZmFtaWx5KSkgeworICAgICAgICAgICAgaWYgKEZvbnRDYWNoZTo6Zm9udEV4aXN0
cyhmb250RGVzY3JpcHRpb24sIGZhbWlseSkgJiYgIWZvdW5kTG9jYWwpIHsKICAgICAgICAgICAg
ICAgICBzb3VyY2UgPSBuZXcgQ1NTRm9udEZhY2VTb3VyY2UoZmFtaWx5KTsKICAgICAgICAgICAg
ICAgICBmb3VuZExvY2FsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghZm9udEZhY2UpCi0gICAgICAgICAgICBmb250RmFjZSA9IG5ldyBDU1NGb250RmFj
ZSh0aGlzKTsKKyAgICAgICAgaWYgKCFmb250RmFjZSkgeworI2lmIEVOQUJMRShTVkdfRk9OVFMp
CisgICAgICAgICAgICBpZiAoc3ZnRm9udEZhY2VFbGVtZW50KQorICAgICAgICAgICAgICAgIGZv
bnRGYWNlID0gbmV3IFNWR0NTU0ZvbnRGYWNlKHRoaXMsIHN2Z0ZvbnRGYWNlRWxlbWVudCk7Cisg
ICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICBmb250RmFjZSA9IG5ldyBD
U1NGb250RmFjZSh0aGlzKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChzb3VyY2UpCiAgICAg
ICAgICAgICBmb250RmFjZS0+YWRkU291cmNlKHNvdXJjZSk7Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIFdlIGNhbiBqdXN0IGJyZWFrIGlmIHdlIHNlZSBhIGxvY2FsIGZvbnQgdGhhdCBpcyB2YWxp
ZC4KICAgICAgICAgaWYgKGZvdW5kTG9jYWwpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAK
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIEFTU0VSVChmb250RmFjZSB8fCBzdmdGb250RmFj
ZUVsZW1lbnQpOwotI2Vsc2UKICAgICBBU1NFUlQoZm9udEZhY2UpOwotI2VuZGlmCiAKICAgICBp
ZiAoZm9udEZhY2UgJiYgIWZvbnRGYWNlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgZGVsZXRlIGZv
bnRGYWNlOwpAQCAtMjIwLDEwICsyMjYsMTAgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZv
bnRGYWNlUnVsZShjbwogICAgICAgICAgICAgY29udGludWU7CiAKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgICAgICBpZiAoc3ZnRm9udEZhY2VFbGVtZW50KSB7Ci0gICAgICAgICAgICBBU1NF
UlQoc3ZnRm9udEZhY2VFbGVtZW50LT5mb250RmFtaWx5KCkgPT0gZmFtaWx5TmFtZSk7Ci0gICAg
ICAgICAgICBmb250RmFjZSA9IG5ldyBTVkdDU1NGb250RmFjZSh0aGlzLCBzdmdGb250RmFjZUVs
ZW1lbnQpOwotICAgICAgICB9CisgICAgICAgIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCA8Zm9udD4g
ZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBmb250LWZhbWlseSwgZGlmZmVyaW5nIG9ubHkKKyAgICAg
ICAgLy8gaW4gaWUuIGZvbnQtdmFyaWFudC4gQmUgc3VyZSB0byBwaWNrIHVwIHRoZSByaWdodCBv
bmUgLSBpbiBnZXRGb250RGF0YSBiZWxvdy4KKyAgICAgICAgaWYgKHN2Z0ZvbnRGYWNlRWxlbWVu
dCAmJiBmb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkpCisgICAgICAgICAgICBmYW1pbHlOYW1l
ICs9ICItd2Via2l0LXN2Zy1zbWFsbC1jYXBzIjsKICNlbmRpZgogCiAgICAgICAgIG1fZm9udHMu
c2V0KGhhc2hGb3JGb250KGZhbWlseU5hbWUubG93ZXIoKSwgZm9udERlc2NyaXB0aW9uLmJvbGQo
KSwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpKSwgZm9udEZhY2UpOwpAQCAtMjUwLDggKzI1Niwx
OSBAQCBGb250RGF0YSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YShjCiAgICAgYm9vbCBz
eW50aGV0aWNJdGFsaWMgPSBmYWxzZTsKIAogICAgIFN0cmluZyBmYW1pbHkgPSBmYW1pbHlOYW1l
LmRvbVN0cmluZygpLmxvd2VyKCk7Ci0gICAgCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAg
IFJlZlB0cjxDU1NGb250RmFjZT4gZmFjZTsKKworICAgIGlmIChmb250RGVzY3JpcHRpb24uc21h
bGxDYXBzKCkpIHsKKyAgICAgICAgU3RyaW5nIHRlc3RGYW1pbHkgPSBmYW1pbHkgKyAiLXdlYmtp
dC1zdmctc21hbGwtY2FwcyI7CisgICAgICAgIGZhY2UgPSBtX2ZvbnRzLmdldChoYXNoRm9yRm9u
dCh0ZXN0RmFtaWx5LCBib2xkLCBpdGFsaWMpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZmFjZSA9
IG1fZm9udHMuZ2V0KGhhc2hGb3JGb250KGZhbWlseSwgYm9sZCwgaXRhbGljKSk7CisjZWxzZQog
ICAgIFJlZlB0cjxDU1NGb250RmFjZT4gZmFjZSA9IG1fZm9udHMuZ2V0KGhhc2hGb3JGb250KGZh
bWlseSwgYm9sZCwgaXRhbGljKSk7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIGRvbid0IGZpbmQg
YSBmYWNlLCBhbmQgaWYgYm9sZC9pdGFsaWMgYXJlIHNldCwgd2Ugc2hvdWxkIHRyeSBvdGhlciB2
YXJpYW50cy4KICAgICAvLyBCb2xkL2l0YWxpYyBzaG91bGQgdHJ5IGJvbGQgZmlyc3QsIHRoZW4g
aXRhbGljLCB0aGVuIG5vcm1hbCAob24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBhcmUgYmV0dGVy
IGF0IHN5bnRoZXNpemluZyBpdGFsaWMgdGhhbiB3ZSBhcmUKICAgICAvLyBhdCBzeW50aGVzaXpp
bmcgYm9sZCkuCkBAIC0yNzMsNyArMjkwLDIyIEBAIEZvbnREYXRhKiBDU1NGb250U2VsZWN0b3I6
OmdldEZvbnREYXRhKGMKICAgICAgICAgICAgIGZhY2UgPSBtX2ZvbnRzLmdldChoYXNoRm9yRm9u
dChmYW1pbHksIGZhbHNlLCBmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyAgICAvLyBJZiBubyBmYWNlIHdhcyBmb3VuZCwgYW5kIGlmIHdl
J3JlIGEgU1ZHIEZvbnQgd2UgbWF5IGhhdmUgaGl0IGZvbGxvd2luZyBjYXNlOgorICAgIC8vIDxm
b250LWZhY2U+IHNwZWNpZmllZCBmb250LXdlaWdodCBhbmQvb3IgZm9udC1zdHlsZSB0byBiZSBp
ZS4gYm9sZCBhbmQgaXRhbGljLgorICAgIC8vIEFuZCB0aGUgZm9udC1mYW1pbHkgcmVxdWVzdGVk
IGlzIG5vbi1ib2xkICYgbm9uLWl0YWxpYy4gRm9yIFNWRyBGb250cyB3ZSBzdGlsbAorICAgIC8v
IGhhdmUgdG8gcmV0dXJuIHRoZSBkZWZpbmVkIGZvbnQsIGFuZCBub3QgZmFsbGJhY2sgdG8gdGhl
IHN5c3RlbSBkZWZhdWx0LgorICAgIGlmICghZmFjZSAmJiAhYm9sZCkKKyAgICAgICAgZmFjZSA9
IG1fZm9udHMuZ2V0KGhhc2hGb3JGb250KGZhbWlseSwgdHJ1ZSwgaXRhbGljKSk7CisKKyAgICBp
ZiAoIWZhY2UgJiYgIWl0YWxpYykKKyAgICAgICAgZmFjZSA9IG1fZm9udHMuZ2V0KGhhc2hGb3JG
b250KGZhbWlseSwgYm9sZCwgdHJ1ZSkpOworCisgICAgaWYgKCFmYWNlICYmICFib2xkICYmICFp
dGFsaWMpCisgICAgICAgIGZhY2UgPSBtX2ZvbnRzLmdldChoYXNoRm9yRm9udChmYW1pbHksIHRy
dWUsIHRydWUpKTsKKyNlbmRpZgorCiAgICAgLy8gSWYgbm8gZmFjZSB3YXMgZm91bmQsIHRoZW4g
cmV0dXJuIDAgYW5kIGxldCB0aGUgT1MgY29tZSB1cCB3aXRoIGl0cyBiZXN0IG1hdGNoIGZvciB0
aGUgbmFtZS4KICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgLy8gSWYgd2Ugd2VyZSBoYW5kZWQg
YSBnZW5lcmljIGZhbWlseSwgYnV0IHRoZXJlIHdhcyBubyBtYXRjaCwgZ28gYWhlYWQgYW5kIHJl
dHVybiB0aGUgY29ycmVjdCBmb250IGJhc2VkIG9mZiBvdXIKSW5kZXg6IHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShy
ZXZpc2lvbiAyOTIxNCkKKysrIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MTcsMTIgKzUxNywxMiBAQCBpbnQgRm9udDo6ZGVzY2VudCgpIGNvbnN0CiAKIGlu
dCBGb250OjpsaW5lU3BhY2luZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHByaW1hcnlGb250KCkt
PmxpbmVTcGFjaW5nKCk7CisgICAgcmV0dXJuIHByaW1hcnlGb250KCktPmxpbmVTcGFjaW5nKHNp
emUoKSk7CiB9CiAKIGZsb2F0IEZvbnQ6OnhIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBw
cmltYXJ5Rm9udCgpLT54SGVpZ2h0KCk7CisgICAgcmV0dXJuIHByaW1hcnlGb250KCktPnhIZWln
aHQoc2l6ZSgpKTsKIH0KIAogdW5zaWduZWQgRm9udDo6dW5pdHNQZXJFbSgpIGNvbnN0CkBAIC01
NDgsMTMgKzU0OCw2IEBAIHZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKIAogYm9v
bCBGb250OjpjYW5Vc2VHbHlwaENhY2hlKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKIHsKLSNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIC8vIFNWRyBmb250cyBkb24ndCBzdXBwb3J0IGFueSBj
YWNoaW5nIGZvciBub3csIHdlIHByZXRlbmQgaXQgaGVyZSB0byBhc3N1cmUgU1ZHCi0gICAgLy8g
Zm9udCBkcmF3aW5nIGFsd2F5cyBlbmRzIHVwIGluIHRoZSAnc2ltcGxlIGNvZGUgcGF0aCcsIHdo
ZW4gU1ZHIGZvbnRzIGFyZSB1c2VkLgotICAgIGlmIChwcmltYXJ5Rm9udCgpICYmIHByaW1hcnlG
b250KCktPmlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotCiAgICAg
c3dpdGNoIChjb2RlUGF0aCkgewogICAgICAgICBjYXNlIEF1dG86CiAgICAgICAgICAgICBicmVh
azsKQEAgLTY2MSwxMSArNjU0LDYgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhp
Y3NDb250ZQogICAgICAgICBjb25zdCBGb250RGF0YSogbmV4dEZvbnREYXRhID0gZ2x5cGhCdWZm
ZXIuZm9udERhdGFBdChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9
IGdseXBoQnVmZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7CiAgICAgICAgIGlmIChuZXh0Rm9udERh
dGEgIT0gZm9udERhdGEgfHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKLSNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotICAgICAgICAgICAgaWYgKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKLSAgICAgICAg
ICAgICAgICBkcmF3R2x5cGhzV2l0aFNWR0ZvbnQoY29udGV4dCwgcnVuLnJlZmVyZW5jaW5nUmVu
ZGVyT2JqZWN0KCksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAt
IGxhc3RGcm9tLCBzdGFydFBvaW50KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgogICAgICAg
ICAgICAgZHJhd0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9t
LCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CiAKICAgICAgICAgICAgIGxhc3RG
cm9tID0gbmV4dEdseXBoOwpAQCAtNjc3LDExICs2NjUsNiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlw
aEJ1ZmZlcihHcmFwaGljc0NvbnRlCiAgICAgICAgIG5leHRHbHlwaCsrOwogICAgIH0KIAotI2lm
IEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKLSAgICAg
ICAgZHJhd0dseXBoc1dpdGhTVkdGb250KGNvbnRleHQsIHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9i
amVjdCgpLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0
RnJvbSwgc3RhcnRQb2ludCk7Ci0gICAgZWxzZQotI2VuZGlmCiAgICAgZHJhd0dseXBocyhjb250
ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJv
bSwgc3RhcnRQb2ludCk7CiB9CiAKQEAgLTY5Miw2ICs2NzUsMTQgQEAgdm9pZCBGb250OjpkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgdG8g
PSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorICAgIGlmIChwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKSkgeworICAgICAgICBkcmF3VGV4
dFVzaW5nU1ZHRm9udChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCiAg
ICAgICAgIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKICAg
ICBlbHNlCkBAIC03MDAsNiArNjkxLDExIEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3ND
b250ZXh0KiBjb24KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aChjb25zdCBUZXh0UnVuJiBydW4p
IGNvbnN0CiB7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAocHJpbWFyeUZvbnQoKS0+
aXNTVkdGb250KCkpCisgICAgICAgIHJldHVybiBmbG9hdFdpZHRoVXNpbmdTVkdGb250KHJ1bik7
CisjZW5kaWYKKwogICAgIGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCiAgICAgICAgIHJldHVy
biBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIDApOwogICAgIHJldHVybiBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQocnVuKTsKQEAgLTcxNCw2ICs3MTAsMTEgQEAgZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvclNpbXBsZVRleHQoY29ucwogCiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCBo
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogeworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAg
aWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQorICAgICAgICByZXR1cm4gc2VsZWN0aW9u
UmVjdEZvclRleHRVc2luZ1NWR0ZvbnQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pOworI2VuZGlm
CisKICAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKICAgICBpZiAoY2Fu
VXNlR2x5cGhDYWNoZShydW4pKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pOwpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24g
MjkyMTQpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAgY2xhc3MgR2x5cGhQYWdlVHJlZU5vZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFNWR1BhaW50
U2VydmVyOwogCiBzdHJ1Y3QgR2x5cGhEYXRhOwogCkBAIC02Niw2ICs2Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNlKQogI2lmIEVOQUJMRShTVkdfRk9OVFMp
CiAgICAgICAgICwgbV9yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgwKQorICAgICAgICAsIG1fYWN0
aXZlUGFpbnRTZXJ2ZXIoMCkKICNlbmRpZgogICAgIHsKICAgICB9CkBAIC04NCw2ICs4Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNlKQogI2lmIEVOQUJMRShT
VkdfRk9OVFMpCiAgICAgICAgICwgbV9yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgwKQorICAgICAg
ICAsIG1fYWN0aXZlUGFpbnRTZXJ2ZXIoMCkKICNlbmRpZgogICAgIHsKICAgICB9CkBAIC0xMTQs
NiArMTE3LDkgQEAgcHVibGljOgogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNp
bmdSZW5kZXJPYmplY3Q7IH0KICAgICB2b2lkIHNldFJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KFJl
bmRlck9iamVjdCogb2JqZWN0KSB7IG1fcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QgPSBvYmplY3Q7
IH0KKworICAgIFNWR1BhaW50U2VydmVyKiBhY3RpdmVQYWludFNlcnZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZlUGFpbnRTZXJ2ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2ZVBhaW50U2VydmVy
KFNWR1BhaW50U2VydmVyKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludFNlcnZlciA9IG9iamVjdDsg
fQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMzEsNiArMTM3LDcgQEAgcHJpdmF0ZToKIAogI2lm
IEVOQUJMRShTVkdfRk9OVFMpCiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0OworICAgIFNWR1BhaW50U2VydmVyKiBtX2FjdGl2ZVBhaW50U2VydmVyOwogI2VuZGlm
CiB9OwogCkBAIC0yMTQsMTAgKzIyMSwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wg
Y2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnVuJikgY29uc3Q7CiAgICAgdm9pZCBkcmF3U2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgdm9pZCBkcmF3R2x5cGhzV2l0aFNWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVy
T2JqZWN0KiwgY29uc3QgRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdUZXh0VXNpbmdT
VkdGb250KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udChjb25zdCBUZXh0UnVuJikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RG
b3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCBo
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICNlbmRpZgorICAgIHZvaWQgZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50
IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mLCBHbHlwaEJ1ZmZlciopIGNvbnN0OwpJbmRleDogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRE
YXRhLmNwcAkocmV2aXNpb24gMjkyMTQpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMzYgQEAgaW50IEZvbnREYXRhOjpkZXNj
ZW50KGZsb2F0IGZvbnRTaXplKSBjbwogICAgIHJldHVybiBtX2Rlc2NlbnQ7CiB9CiAKK2ludCBG
b250RGF0YTo6bGluZVNwYWNpbmcoZmxvYXQgZm9udFNpemUpIGNvbnN0Cit7CisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyAgICBpZiAobV9zdmdGb250RGF0YSkKKyAgICAgICAgcmV0dXJuIChpbnQp
IGNlaWxmKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0
c1BlckVtLCBtX2xpbmVTcGFjaW5nKSk7CisjZW5kaWYKKworICAgIHJldHVybiBtX2xpbmVTcGFj
aW5nOworfQorCitpbnQgRm9udERhdGE6OmxpbmVHYXAoZmxvYXQgZm9udFNpemUpIGNvbnN0Cit7
CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAobV9zdmdGb250RGF0YSkKKyAgICAgICAg
cmV0dXJuIFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0
c1BlckVtLCBtX2xpbmVHYXApOworI2VuZGlmCisKKyAgICByZXR1cm4gbV9saW5lR2FwOworfQor
CitmbG9hdCBGb250RGF0YTo6eEhlaWdodChmbG9hdCBmb250U2l6ZSkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChtX3N2Z0ZvbnREYXRhKQorICAgICAgICByZXR1cm4g
U1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3VuaXRzUGVyRW0s
IG1feEhlaWdodCk7CisjZW5kaWYKKworICAgIHJldHVybiBtX3hIZWlnaHQ7Cit9CisKIGZsb2F0
IEZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGZsb2F0
IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAud2lkdGhGb3JHbHlwaChnbHlwaCk7CkluZGV4OiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnREYXRhLmgJKHJldmlzaW9uIDI5MjE0KQorKysgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOSArODIsOSBAQCBwdWJsaWM6CiAgICAgLy8g
dmVydGljYWwgbWV0cmljcwogICAgIGludCBhc2NlbnQoZmxvYXQgZm9udFNpemUpIGNvbnN0Owog
ICAgIGludCBkZXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAgICBpbnQgbGluZVNwYWNp
bmcoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTcGFjaW5nOyB9Ci0gICAgaW50IGxpbmVHYXAoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVHYXA7IH0KLSAgICBmbG9hdCB4SGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV94SGVpZ2h0OyB9CisgICAgaW50IGxpbmVTcGFjaW5nKGZsb2F0IGZvbnRTaXplKSBj
b25zdDsKKyAgICBpbnQgbGluZUdhcChmbG9hdCBmb250U2l6ZSkgY29uc3Q7CisgICAgZmxvYXQg
eEhlaWdodChmbG9hdCBmb250U2l6ZSkgY29uc3Q7CiAgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgp
IGNvbnN0IHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsgfQogCiAgICAgZmxvYXQgd2lkdGhGb3JHbHlw
aChHbHlwaCkgY29uc3Q7CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCShyZXZpc2lv
biAyOTIxNCkKKysrIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBnCiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBwdXQgc2xvcCBpbnRvIHRoaXMgcmVj
dCwgc2luY2UgZ2x5cGhzIGNhbiBvdmVyZmxvdyB0aGUgYXNjZW50L2Rlc2NlbnQgYm91bmRzIGFu
ZCB0aGUgbGVmdC9yaWdodCBlZGdlcy4KLSAgICAgICAgSW50UmVjdCB0ZXh0UmVjdChwb2ludC54
KCkgLSBmb250LT5saW5lR2FwKCksIHBvaW50LnkoKSAtIGZvbnQtPmFzY2VudChzaXplKCkpIC0g
Zm9udC0+bGluZUdhcCgpLCB0b3RhbFdpZHRoICsgMiAqIGZvbnQtPmxpbmVHYXAoKSwgZm9udC0+
bGluZVNwYWNpbmcoKSk7CisgICAgICAgIGludCBsaW5lR2FwID0gZm9udC0+bGluZUdhcChzaXpl
KCkpOworICAgICAgICBJbnRSZWN0IHRleHRSZWN0KHBvaW50LngoKSAtIGxpbmVHYXAsIHBvaW50
LnkoKSAtIGZvbnQtPmFzY2VudChzaXplKCkpIC0gbGluZUdhcCwgdG90YWxXaWR0aCArIDIgKiBs
aW5lR2FwLCBmb250LT5saW5lU3BhY2luZyhzaXplKCkpKTsKICAgICAgICAgSERDIGhkYyA9IGdy
YXBoaWNzQ29udGV4dC0+Z2V0V2luZG93c0NvbnRleHQodGV4dFJlY3QpOwogICAgICAgICBTZWxl
Y3RPYmplY3QoaGRjLCBmb250LT5tX2ZvbnQuaGZvbnQoKSk7CiAKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHJldmlzaW9uIDI5MjE0KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgog
CiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVs
ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCkBAIC0xODgsOCArMTg5LDIxIEBAIEZs
b2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZWxhdGl2ZUJCb3goYm8KICAgICB9CiAKICAgICAvLyBT
VkcgbmVlZHMgdG8gaW5jbHVkZSB0aGUgc3Ryb2tlV2lkdGgoKSwgbm90IHRoZSB0ZXh0U3Ryb2tl
V2lkdGgoKS4KLSAgICBpZiAoaW5jbHVkZVN0cm9rZSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKSkKLSAgICAgICAgcmVwYWludFJlY3QuaW5mbGF0ZShTVkdSZW5kZXJTdHlsZTo6
Y3NzUHJpbWl0aXZlVG9MZW5ndGgodGhpcywgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lk
dGgoKSwgMC4wZikpOworICAgIGlmIChpbmNsdWRlU3Ryb2tlICYmIHN0eWxlKCktPnN2Z1N0eWxl
KCktPmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gU1ZHUmVuZGVy
U3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0
cm9rZVdpZHRoKCksIDAuMGYpOworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgY29u
c3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKKyAgICAgICAgaWYgKGZvbnQucHJpbWFy
eUZvbnQoKS0+aXNTVkdGb250KCkpIHsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gU1ZHRm9u
dERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnQuc2l6ZSgpLCBmb250LnVuaXRzUGVyRW0o
KSwgMS4wZik7CisKKyAgICAgICAgICAgIGlmIChzY2FsZSAhPSAwLjBmKQorICAgICAgICAgICAg
ICAgIHN0cm9rZVdpZHRoIC89IHNjYWxlOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBy
ZXBhaW50UmVjdC5pbmZsYXRlKHN0cm9rZVdpZHRoKTsKKyAgICB9CiAKICAgICByZXBhaW50UmVj
dC5tb3ZlKHhQb3MoKSwgeVBvcygpKTsKICAgICByZXR1cm4gcmVwYWludFJlY3Q7CkluZGV4OiBy
ZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1NW
R0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyOTIxNCkKKysrIHJlbmRlcmluZy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIEludFJlY3Qg
U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdCgKICAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdCh3YWxrZXJDYWxsYmFjay5zZWxlY3Rpb25SZWN0KCkpOwogfQogCi12b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50Q2hhcmFjdGVycyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSwgY29uc3QgU1ZHQ2hhciYgc3ZnQ2hhciwgY29uc3QgVUNoYXIq
IGNoYXJzLCBpbnQgbGVuZ3RoKQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludENoYXJhY3Rl
cnMoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGNv
bnN0IFNWR0NoYXImIHN2Z0NoYXIsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aCwgU1ZH
UGFpbnRTZXJ2ZXIqIGFjdGl2ZVBhaW50U2VydmVyKQogewogICAgIGlmIChvYmplY3QoKS0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VPdXRsaW5lKQogICAgICAgICByZXR1cm47CkBAIC0zODgsNiArMzg4LDEyIEBAIHZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRDaGFyYWN0ZXJzKFIKICAgICBJbnRQb2ludCBvcmlnaW4o
KGludCkgc3ZnQ2hhci54LCAoaW50KSBzdmdDaGFyLnkpOwogICAgIFRleHRSdW4gcnVuID0gc3Zn
VGV4dFJ1bkZvcklubGluZVRleHRCb3goY2hhcnMsIGxlbmd0aCwgc3R5bGVUb1VzZSwgdGhpcywg
c3ZnQ2hhci54KTsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgLy8gU1ZHIEZvbnRzIG5l
ZWQgYWNjZXNzIHRvIHRoZSBwYWludCBzZXJ2ZXIgdXNlZCB0byBkcmF3IHRoZSBjdXJyZW50IHRl
eHQgY2h1bmsuCisgICAgLy8gVGhleSBuZWVkIHRvIGJlIGFibGUgdG8gY2FsbCByZW5kZXJQYXRo
KCkgb24gYSBTVkdQYWludFNlcnZlciBvYmplY3QuCisgICAgcnVuLnNldEFjdGl2ZVBhaW50U2Vy
dmVyKGFjdGl2ZVBhaW50U2VydmVyKTsKKyNlbmRpZgorCiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdUZXh0KHJ1biwgb3JpZ2luKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZVNlbGVjdGlvbikgewpJbmRleDogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAyOTIx
NCkKKysrIHJlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEludFJlY3Qg
c2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBvcywgaW50IGVuZFBv
cyk7CiAKICAgICAgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgdGV4dCBtZXRob2QKLSAgICAgICAg
dm9pZCBwYWludENoYXJhY3RlcnMoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSwgY29uc3QgU1ZHQ2hhciYsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aCk7Cisg
ICAgICAgIHZvaWQgcGFpbnRDaGFyYWN0ZXJzKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHksIGNvbnN0IFNWR0NoYXImLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5n
dGgsIFNWR1BhaW50U2VydmVyKik7CiAKICAgICAgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgc2Vs
ZWN0aW9uIG1ldGhvZAogICAgICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKGludCBib3hTdGFydE9m
ZnNldCwgY29uc3QgU1ZHQ2hhciYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgR3JhcGhpY3ND
b250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Kik7CkluZGV4OiByZW5kZXJpbmcvU1ZH
Um9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVC
b3guY3BwCShyZXZpc2lvbiAyOTIxNCkKKysrIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDcgKzUzMCwxMiBAQCBzdHJ1Y3QgU1ZHUm9vdElubGlu
ZUJveFBhaW50V2Fsa2VyIHsKICAgICAgICAgICAgICAgICB0ZXh0Qm94LT5wYWludERlY29yYXRp
b24oT1ZFUkxJTkUsIG1fcGFpbnRJbmZvLmNvbnRleHQsIGRlY29yYXRpb25PcmlnaW4ueCgpLCBk
ZWNvcmF0aW9uT3JpZ2luLnkoKSwgdGV4dFdpZHRoLCAqaXQsIGluZm8pOwogCiAgICAgICAgICAg
ICAvLyBQYWludCB0ZXh0Ci0gICAgICAgICAgICB0ZXh0Qm94LT5wYWludENoYXJhY3RlcnMobV9w
YWludEluZm8sIG1fdHgsIG1fdHksICppdCwgc3RyaW5nU3RhcnQsIHN0cmluZ0xlbmd0aCk7Cisg
ICAgICAgICAgICBTVkdQYWludFNlcnZlciogYWN0aXZlUGFpbnRTZXJ2ZXIgPSBtX2ZpbGxQYWlu
dFNlcnZlcjsKKyAgICAgICAgICAgIGlmICghYWN0aXZlUGFpbnRTZXJ2ZXIpCisgICAgICAgICAg
ICAgICAgYWN0aXZlUGFpbnRTZXJ2ZXIgPSBtX3N0cm9rZVBhaW50U2VydmVyOworCisgICAgICAg
ICAgICBBU1NFUlQoYWN0aXZlUGFpbnRTZXJ2ZXIpOworICAgICAgICAgICAgdGV4dEJveC0+cGFp
bnRDaGFyYWN0ZXJzKG1fcGFpbnRJbmZvLCBtX3R4LCBtX3R5LCAqaXQsIHN0cmluZ1N0YXJ0LCBz
dHJpbmdMZW5ndGgsIGFjdGl2ZVBhaW50U2VydmVyKTsKIAogICAgICAgICAgICAgLy8gUGFpbnQg
ZGVjb3JhdGlvbnMsIHRoYXQgaGF2ZSB0byBiZSBkcmF3biBhZnRlcndhcmRzCiAgICAgICAgICAg
ICBpZiAodGV4dERlY29yYXRpb25zICYgTElORV9USFJPVUdIICYmIHRleHRXaWR0aCAhPSAwLjBm
KQpJbmRleDogc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGb250LmNwcAko
cmV2aXNpb24gMjkyMTQpCisrKyBzdmcvU1ZHRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
LDcgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KKyNpbmNsdWRlICJDU3Ry
aW5nLmgiIC8vIEZJWE1FIQogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5jbHVkZSAiRm9udC5o
IgogCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgor
I2luY2x1ZGUgIlhNTE5hbWVzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsODMgKzQxLDQ2NCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlCiAgICAgcmV0dXJuIHN0eWxlLT53cml0aW5nTW9k
ZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV01fVEI7IAogfQogCi12
b2lkIEZvbnQ6OmRyYXdHbHlwaHNXaXRoU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRv
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKy8vIEhlbHBlciBmdW5jdGlvbnMgdG8g
ZGV0ZXJtaW5lIHRoZSBhcmFiaWMgY2hhcmFjdGVyIGZvcm1zIChpbml0aWFsLCBtZWRpYWwsIHRl
cm1pbmFsLCBpc29sYXRlZCkKK2VudW0gQXJhYmljQ2hhclNoYXBpbmdNb2RlIHsKKyAgICBTTm9u
ZSA9IDAsCisgICAgU1JpZ2h0ID0gMSwKKyAgICBTRHVhbCA9IDIKK307CisKK3N0YXRpYyBjb25z
dCBBcmFiaWNDaGFyU2hhcGluZ01vZGUgc19hcmFiaWNDaGFyU2hhcGluZ01vZGVbMjIyXSA9IHsK
KyAgICBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNEdWFsICwgU1JpZ2h0LCBTRHVh
bCAsIFNSaWdodCwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNSaWdo
dCwgICAgICAgICAgICAgICAgIC8qIDB4MDYyMiAtIDB4MDYyRiAqLworICAgIFNSaWdodCwgU1Jp
Z2h0LCBTUmlnaHQsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVh
bCAsIFNEdWFsICwgU0R1YWwgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25l
ICwgLyogMHgwNjMwIC0gMHgwNjNGICovCisgICAgU05vbmUgLCBTRHVhbCAsIFNEdWFsICwgU0R1
YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTUmlnaHQsIFNEdWFsICwgU0R1YWwgLCBTTm9u
ZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCAvKiAweDA2NDAgLSAw
eDA2NEYgKi8KKyAgICBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05v
bmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9u
ZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIC8qIDB4MDY1MCAtIDB4MDY1RiAqLworICAgIFNO
b25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05v
bmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9u
ZSAsIFNOb25lICwgLyogMHgwNjYwIC0gMHgwNjZGICovCisgICAgU05vbmUgLCBTUmlnaHQsIFNS
aWdodCwgU1JpZ2h0LCBTTm9uZSAsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNEdWFsICwgU0R1
YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCAvKiAw
eDA2NzAgLSAweDA2N0YgKi8KKyAgICBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNE
dWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1Jp
Z2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIC8qIDB4MDY4MCAtIDB4MDY4RiAq
LworICAgIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNS
aWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1
YWwgLCBTRHVhbCAsIFNEdWFsICwgLyogMHgwNjkwIC0gMHgwNjlGICovCisgICAgU0R1YWwgLCBT
RHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNE
dWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1
YWwgLCAvKiAweDA2QTAgLSAweDA2QUYgKi8KKyAgICBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBT
RHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNE
dWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIC8qIDB4MDZCMCAt
IDB4MDZCRiAqLworICAgIFNSaWdodCwgU0R1YWwgLCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBT
UmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNE
dWFsICwgU1JpZ2h0LCBTRHVhbCAsIFNSaWdodCwgLyogMHgwNkMwIC0gMHgwNkNGICovCisgICAg
U0R1YWwgLCBTRHVhbCAsIFNSaWdodCwgU1JpZ2h0LCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBT
Tm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNO
b25lICwgU05vbmUgLCAvKiAweDA2RDAgLSAweDA2REYgKi8KKyAgICBTTm9uZSAsIFNOb25lICwg
U05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBT
Tm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIC8q
IDB4MDZFMCAtIDB4MDZFRiAqLworICAgIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwg
U05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU0R1YWwgLCBT
RHVhbCAsIFNEdWFsICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICAgLyogMHgwNkYwIC0gMHgwNkZG
ICovCit9OworCitzdGF0aWMgaW5saW5lIFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybSBw
cm9jZXNzQXJhYmljRm9ybURldGVjdGlvbihjb25zdCBVQ2hhciYgY3VyQ2hhciwgYm9vbCYgbGFz
dENoYXJTaGFwZXNSaWdodCwgU1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtKiBwcmV2Rm9y
bSkKK3sKKyAgICBTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0gY3VyRm9ybTsKKworICAg
IEFyYWJpY0NoYXJTaGFwaW5nTW9kZSBzaGFwaW5nTW9kZSA9IFNOb25lOworICAgIGlmIChjdXJD
aGFyID49IDB4MDYyMiAmJiBjdXJDaGFyIDw9IDB4MDZGRikKKyAgICAgICAgc2hhcGluZ01vZGUg
PSBzX2FyYWJpY0NoYXJTaGFwaW5nTW9kZVtjdXJDaGFyIC0gMHgwNjIyXTsKKworICAgIC8vIFVz
ZSBhIHNpbXBsZSBzdGF0ZSBtYWNoaW5lIHRvIGlkZW50aWZ5IHRoZSBhY3R1YWwgYXJhYmljIGZv
cm0KKyAgICAvLyBJdCBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiB0aGUgYXJhYmljIGZvcm0gZW51
bToKKyAgICAvLyBlbnVtIEFyYWJpY0Zvcm0geyBOb25lID0gMCwgSXNvbGF0ZWQsIFRlcm1pbmFs
LCBJbml0aWFsLCBNZWRpYWwgfTsKKworICAgIGlmIChsYXN0Q2hhclNoYXBlc1JpZ2h0ICYmIHNo
YXBpbmdNb2RlID09IFNEdWFsKSB7CisgICAgICAgIGlmIChwcmV2Rm9ybSkgeworICAgICAgICAg
ICAgaW50IGNvcnJlY3RlZEZvcm0gPSAoaW50KSAqcHJldkZvcm0gKyAxOworICAgICAgICAgICAg
QVNTRVJUKGNvcnJlY3RlZEZvcm0gPj0gU1ZHR2x5cGhJZGVudGlmaWVyOjpOb25lICYmIGNvcnJl
Y3RlZEZvcm0gPD0gU1ZHR2x5cGhJZGVudGlmaWVyOjpNZWRpYWwpOworICAgICAgICAgICAgKnBy
ZXZGb3JtID0gc3RhdGljX2Nhc3Q8U1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtPihjb3Jy
ZWN0ZWRGb3JtKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ckZvcm0gPSBTVkdHbHlwaElkZW50
aWZpZXI6OkluaXRpYWw7CisgICAgfSBlbHNlCisgICAgICAgIGN1ckZvcm0gPSBzaGFwaW5nTW9k
ZSA9PSBTTm9uZSA/IFNWR0dseXBoSWRlbnRpZmllcjo6Tm9uZSA6IFNWR0dseXBoSWRlbnRpZmll
cjo6SXNvbGF0ZWQ7CisKKyAgICBsYXN0Q2hhclNoYXBlc1JpZ2h0ID0gc2hhcGluZ01vZGUgIT0g
U05vbmU7CisgICAgcmV0dXJuIGN1ckZvcm07Cit9CisKK3N0YXRpYyBWZWN0b3I8U1ZHR2x5cGhJ
ZGVudGlmaWVyOjpBcmFiaWNGb3JtPiBjaGFyYWN0ZXJzV2l0aEFyYWJpY0Zvcm0oY29uc3QgU3Ry
aW5nJiBpbnB1dCwgYm9vbCBydGwpCit7CisgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6
QXJhYmljRm9ybT4gZm9ybXM7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IGlucHV0Lmxlbmd0
aCgpOworCisgICAgYm9vbCBjb250YWluc0FyYWJpYyA9IGZhbHNlOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlzQXJhYmljQ2hh
cihpbnB1dFtpXSkpIHsKKyAgICAgICAgICAgIGNvbnRhaW5zQXJhYmljID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjb250YWluc0FyYWJp
YykKKyAgICAgICAgcmV0dXJuIGZvcm1zOworCisgICAgYm9vbCBsYXN0Q2hhclNoYXBlc1JpZ2h0
ID0gZmFsc2U7CisKKyAgICAvLyBTdGFydCBpZGVudGlmeWluZyBhcmFiaWMgZm9ybXMKKyAgICBp
ZiAocnRsKQorICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpCisg
ICAgICAgICAgICBmb3Jtcy5wcmVwZW5kKHByb2Nlc3NBcmFiaWNGb3JtRGV0ZWN0aW9uKGlucHV0
W2ldLCBsYXN0Q2hhclNoYXBlc1JpZ2h0LCBmb3Jtcy5pc0VtcHR5KCkgPyAwIDogJmZvcm1zLmZp
cnN0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBmb3Jtcy5hcHBlbmQocHJvY2Vzc0FyYWJpY0Zvcm1E
ZXRlY3Rpb24oaW5wdXRbaV0sIGxhc3RDaGFyU2hhcGVzUmlnaHQsIGZvcm1zLmlzRW1wdHkoKSA/
IDAgOiAmZm9ybXMubGFzdCgpKSk7CisKKyAgICByZXR1cm4gZm9ybXM7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc0NvbXBhdGlibGVBcmFiaWNGb3JtKGNvbnN0IFNWR0dseXBoSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9y
bT4mIGNoYXJzLCB1bnNpZ25lZCBpbnQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgaW50IGVuZFBv
c2l0aW9uKQogewotICAgIEFTU0VSVChyZW5kZXJPYmplY3QpOworICAgIGlmIChjaGFycy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRp
Zmllcjo6QXJhYmljRm9ybT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnMuYmVnaW4oKSArIHN0
YXJ0UG9zaXRpb247CisgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzLmJlZ2luKCkgKyBlbmRQb3NpdGlvbjsKIAorICAg
IEFTU0VSVChlbmQgPD0gY2hhcnMuZW5kKCkpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKCgqaXQpICE9IGlkZW50aWZpZXIuYXJhYmljRm9ybSAmJiAoKml0KSAh
PSBTVkdHbHlwaElkZW50aWZpZXI6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbXBh
dGlibGVHbHlwaChjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIGJvb2wgaXNW
ZXJ0aWNhbFRleHQsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmlj
Rm9ybT4mIGNoYXJzLCB1bnNpZ25lZCBpbnQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgaW50IGVu
ZFBvc2l0aW9uKQoreworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworCisgICAgLy8gQ2hlY2sgd2hl
dGVyIG9yaWVudGF0aW9uIGlmIGdseXBoIGZpdHMgd2l0aGluIHRoZSByZXF1ZXN0CisgICAgc3dp
dGNoIChpZGVudGlmaWVyLm9yaWVudGF0aW9uKSB7CisgICAgY2FzZSBTVkdHbHlwaElkZW50aWZp
ZXI6OlZlcnRpY2FsOgorICAgICAgICB2YWxpZCA9IGlzVmVydGljYWxUZXh0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNWR0dseXBoSWRlbnRpZmllcjo6SG9yaXpvbnRhbDoKKyAgICAgICAg
dmFsaWQgPSAhaXNWZXJ0aWNhbFRleHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1ZHR2x5
cGhJZGVudGlmaWVyOjpCb3RoOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXZh
bGlkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayB3aGV0ZXIgbGFuZ3Vh
Z2VzIGFyZSBjb21wYXRpYmxlCisgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlkZW50
aWZpZXIubGFuZ3VhZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBTcGxpdCBzdWJjb2RlIGZy
b20gbGFuZ3VhZ2UsIGlmIGV4aXN0YW50LgorICAgICAgICBTdHJpbmcgbGFuZ3VhZ2VQcmVmaXg7
CisKKyAgICAgICAgaW50IHN1YkNvZGVTZXBhcmF0b3IgPSBsYW5ndWFnZS5maW5kKCctJyk7Cisg
ICAgICAgIGlmIChzdWJDb2RlU2VwYXJhdG9yICE9IC0xKQorICAgICAgICAgICAgbGFuZ3VhZ2VQ
cmVmaXggPSBsYW5ndWFnZS5sZWZ0KHN1YkNvZGVTZXBhcmF0b3IpOworCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGlkZW50aWZpZXIubGFuZ3VhZ2VzLmJlZ2lu
KCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpZGVudGlm
aWVyLmxhbmd1YWdlcy5lbmQoKTsKKworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFN0cmluZyBjdXIgPSAo
Kml0KTsKKworICAgICAgICAgICAgaWYgKGN1ciA9PSBsYW5ndWFnZSB8fCBjdXIgPT0gbGFuZ3Vh
Z2VQcmVmaXgpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5k
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENoZWNrIHdoZXRl
ciBhcmFiaWMgZm9ybSBpcyBjb21wYXRpYmxlCisgICAgcmV0dXJuIGlzQ29tcGF0aWJsZUFyYWJp
Y0Zvcm0oaWRlbnRpZmllciwgY2hhcnMsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKK30K
Kworc3RhdGljIGlubGluZSBTVkdGb250RGF0YSogc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZv
ckZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYg
Zm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50KiYgZm9udCkKK3sKICAgICBBU1NFUlQoIWZvbnREYXRh
LT5pc0N1c3RvbUZvbnQoKSk7CiAgICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7CiAK
ICAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBmb250RGF0YS0+c3ZnRm9udERhdGEoKTsK
ICAgICBBU1NFUlQoc3ZnRm9udERhdGEpOwogCi0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250
RmFjZSA9IHN2Z0ZvbnREYXRhLT5mb250RmFjZUVsZW1lbnQuZ2V0KCk7CisgICAgZm9udEZhY2Ug
PSBzdmdGb250RGF0YS0+Zm9udEZhY2VFbGVtZW50LmdldCgpOwogICAgIEFTU0VSVChmb250RmFj
ZSk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7Ci0g
ICAgQVNTRVJUKHN0eWxlKTsKKyAgICBmb250ID0gZm9udEZhY2UtPmFzc29jaWF0ZWRGb250RWxl
bWVudCgpOworICAgIHJldHVybiBzdmdGb250RGF0YTsKK30KKworLy8gSGVscGVyIGNsYXNzIHRv
IHdhbGsgYSB0ZXh0IHJ1bi4gTG9va3VwIGEgU1ZHR2x5cGhJZGVudGlmaWVyIGZvciBlYWNoIGNo
YXJhY3RlcgorLy8gLSBhbHNvIHJlc3BlY3RpbmcgcG9zc2libHkgZGVmaW5lZCBsaWdhdHVyZXMg
LSBhbmQgaW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggZm91bmQgZ2x5cGguCit0ZW1wbGF0ZTx0
eXBlbmFtZSBTVkdUZXh0UnVuRGF0YT4KK3N0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsKKyAgICB0
eXBlZGVmIGJvb2wgKCpTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2spKGNvbnN0IFNWR0dseXBoSWRl
bnRpZmllciYsIFNWR1RleHRSdW5EYXRhJik7CisgICAgdHlwZWRlZiB2b2lkICgqU1ZHVGV4dFJ1
bldhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgaW50
LCBTVkdUZXh0UnVuRGF0YSYpOworCisgICAgU1ZHVGV4dFJ1bldhbGtlcihTVkdGb250RGF0YSog
Zm9udERhdGEsIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgU1ZHVGV4dFJ1bkRhdGEmIGRh
dGEsCisgICAgICAgICAgICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2sgY2FsbGJh
Y2ssIFNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjayBtaXNzaW5nR2x5cGhDYWxs
YmFjaykKKyAgICAgICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorICAgICAgICAsIG1fZm9udEVs
ZW1lbnQoZm9udEVsZW1lbnQpCisgICAgICAgICwgbV93YWxrZXJEYXRhKGRhdGEpCisgICAgICAg
ICwgbV93YWxrZXJDYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgLCBtX3dhbGtlck1pc3NpbmdH
bHlwaENhbGxiYWNrKG1pc3NpbmdHbHlwaENhbGxiYWNrKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIHdhbGsoY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBT
dHJpbmcmIGxhbmd1YWdlLCBpbnQgZnJvbSwgaW50IHRvKQorICAgIHsKKyAgICAgICAgLy8gU2hv
dWxkIGhvbGQgdHJ1ZSBmb3IgU1ZHIHRleHQsIG90aGVyd2hpc2Ugc3RoLiBpcyB3cm9uZworICAg
ICAgICBBU1NFUlQodG8gLSBmcm9tID09IHJ1bi5sZW5ndGgoKSk7CisKKyAgICAgICAgaW50IG1h
eGltdW1IYXNoS2V5TGVuZ3RoID0gbV9mb250RWxlbWVudC0+bWF4aW11bUhhc2hLZXlMZW5ndGgo
KTsKKyAgICAgICAgQVNTRVJUKG1heGltdW1IYXNoS2V5TGVuZ3RoID49IDApOworCisgICAgICAg
IFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0+IGNoYXJzKGNoYXJhY3RlcnNX
aXRoQXJhYmljRm9ybShTdHJpbmcocnVuLmRhdGEoZnJvbSksIHJ1bi5sZW5ndGgoKSksIHJ1bi5y
dGwoKSkpOworCisgICAgICAgIFNWR0dseXBoSWRlbnRpZmllciBpZGVudGlmaWVyOworICAgICAg
ICBib29sIGZvdW5kR2x5cGggPSBmYWxzZTsKKyAgICAgICAgaW50IGNoYXJhY3Rlckxvb2t1cFJh
bmdlOworCisgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkgeworICAgICAg
ICAgICAgLy8gSWYgY2hhcmFjdGVyTG9va3VwUmFuZ2UgaXMgPiAwLCB0aGVuIHRoZSBmb250IGRl
ZmluZWQgbGlnYXR1cmVzIChsZW5ndGggb2YgdW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSA+IDEpLgor
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayB3aGV0ZXIgdGhlIGN1cnJlbnQgY2hhcmFj
dGVyICYgdGhlIG5leHQgY2hhcmFjdGVyIGRlZmluZSBhIGxpZ2F0dXJlLiBUaGlzIG5lZWRzIHRv
IGJlCisgICAgICAgICAgICAvLyBleHRlbmRlZCB0byB0aGUgbi10aCBuZXh0IGNoYXJhY3RlciAo
d2hlcmUgbiBpcyAnY2hhcmFjdGVyTG9va3VwUmFuZ2UnKSwgdG8gY2hlY2sgZm9yIGFueSBwb3Nz
aWJsZSBsaWdhdHVyZS4KKyAgICAgICAgICAgIGNoYXJhY3Rlckxvb2t1cFJhbmdlID0gbWF4aW11
bUhhc2hLZXlMZW5ndGggKyBpID49IHRvID8gdG8gLSBpIDogbWF4aW11bUhhc2hLZXlMZW5ndGg7
CisKKyAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJMb29rdXBSYW5nZSA+IDAgJiYgIWZvdW5k
R2x5cGgpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbG9va3VwU3RyaW5nKHJ1bi5kYXRhKHJ1
bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSAtIChpICsgY2hhcmFjdGVyTG9va3VwUmFuZ2UpIDogaSks
IGNoYXJhY3Rlckxvb2t1cFJhbmdlKTsKKworICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdHbHlw
aElkZW50aWZpZXI+IGdseXBocyA9IG1fZm9udEVsZW1lbnQtPmdseXBoSWRlbnRpZmllcnNGb3JT
dHJpbmcobG9va3VwU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHR2x5cGhJZGVu
dGlmaWVyPjo6aXRlcmF0b3IgaXQgPSBnbHlwaHMuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyPjo6aXRlcmF0b3IgZW5kID0gZ2x5cGhzLmVuZCgpOwor
CisgICAgICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyID0gKml0OworCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzdGFydFBvc2l0aW9uID0gcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIC0gKGkgKyBsb29r
dXBTdHJpbmcubGVuZ3RoKCkpIDogaTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGxvb2t1cFN0cmluZy5sZW5ndGgoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkICYmIGlzQ29tcGF0aWJs
ZUdseXBoKGlkZW50aWZpZXIsIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgY2hhcnMsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGNoYXJhY3Rlckxvb2t1cFJhbmdlID4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpICs9
IGNoYXJhY3Rlckxvb2t1cFJhbmdlIC0gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmRHbHlwaCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBTVkdHbHlwaEVsZW1lbnQ6
OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoaWRlbnRpZmllciwgbV9mb250RGF0YSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNoYXJhY3Rlckxvb2t1cFJhbmdlLS07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm91bmRHbHlwaCkgeworICAgICAg
ICAgICAgICAgICgqbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykocnVuLCBpLCBtX3dhbGtl
ckRhdGEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoISgqbV93YWxrZXJDYWxsYmFjaykoaWRlbnRpZmllciwgbV93YWxrZXJEYXRh
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIC8vIFRPRE86IFRoaXMgaXMgcmlkaWN1
bG91cy4gR2x5cGhzIHNob3VsZG4ndCBiZSBjb2xsZWN0ZWQgd2hlbiBwYWludGVkLiBUaGUgcHJv
YmxlbSBpcwotICAgIC8vIHRoYXQgd2UgbmVlZCB0byBjYWNoZSAnR2x5cGgnIGluc3RlYWQgb2Yg
J1N0cmluZycgaW4gdGhlIEdseXBoSGFzaE1hcCwgdG8gb2J0YWluCi0gICAgLy8gYSBzZXQgb2Yg
J0dseXBoJ3MgZnJvbSBhICdTdHJpbmcnIHdlIG5lZWQgdGhlIGxvY2FsIGZ1bmN0aW9uIGdseXBo
RGF0YUZvckNoYXJhY3Rlci4KLSAgICAvLyBTb21laG93IHRoZSBkZXNpZ24gbmVlZHMgdG8gYmUg
Y2hhbmdlZC4gTm90IHlldCBzdXJlIGhvdywgbmVlZHMgZGlzY3Vzc2lvbi4KLSAgICBpZiAoZm9u
dEZhY2UtPnBhcmVudE5vZGUoKSAmJiBmb250RmFjZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpmb250VGFnKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQq
Pihmb250RmFjZS0+cGFyZW50Tm9kZSgpKS0+Y29sbGVjdEdseXBocygqdGhpcyk7Ci0KLSAgICBm
bG9hdCBmb250U2l6ZSA9IHNpemUoKTsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gZm9udEZh
Y2UtPnVuaXRzUGVyRW0oKTsKLSAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdy
aXRpbmdNb2RlKHN0eWxlLT5zdmdTdHlsZSgpKTsKLSAgICBmbG9hdCBzY2FsZSA9IFNWR0ZvbnRE
YXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgdW5pdHNQZXJFbSwgMS4wZik7Cisg
ICAgICAgICAgICBmb3VuZEdseXBoID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZh
dGU6CisgICAgU1ZHRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgU1ZHRm9udEVsZW1lbnQqIG1f
Zm9udEVsZW1lbnQ7CisgICAgU1ZHVGV4dFJ1bkRhdGEmIG1fd2Fsa2VyRGF0YTsKKyAgICBTVkdU
ZXh0UnVuV2Fsa2VyQ2FsbGJhY2sgbV93YWxrZXJDYWxsYmFjazsKKyAgICBTVkdUZXh0UnVuV2Fs
a2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sgbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjazsKK307
CisKKy8vIENhbGxiYWNrICYgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNvbXB1dGUgdGhlIHdpZHRoIG9m
IHRleHQgdXNpbmcgU1ZHIEZvbnRzCitzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVu
Z3RoRGF0YSB7CisgICAgaW50IGF0OworICAgIGludCBmcm9tOworICAgIGludCB0bzsKKworICAg
IGZsb2F0IGxlbmd0aDsKKyAgICBmbG9hdCBmb250U2l6ZTsKKyAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtOworICAgIGNvbnN0IEZvbnQqIGZvbnQ7Cit9OworCitib29sIGZsb2F0V2lkdGhVc2luZ1NW
R0ZvbnRDYWxsYmFjayhjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIFNWR1Rl
eHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCit7CisgICAgaWYgKGRhdGEuYXQg
Pj0gZGF0YS5mcm9tICYmIGRhdGEuYXQgPCBkYXRhLnRvKQorICAgICAgICBkYXRhLmxlbmd0aCAr
PSBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51
bml0c1BlckVtLCBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCk7CisKKyAgICBkYXRhLmF0
Kys7CisgICAgcmV0dXJuIGRhdGEuYXQgPCBkYXRhLnRvOworfQorCit2b2lkIGZsb2F0V2lkdGhN
aXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGludCBwb3Np
dGlvbiwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YSYgZGF0YSkKK3sKKyAgICAv
LyBDb25zdHJ1Y3QgYSBjb3B5IG9mIHRoZSBjdXJyZW50IFNWRyBGb250IHRoYXQgaW4gaXMgdXNl
LiBEaXNhYmxlIHRoZSBTVkcgRm9udCBmdW5jdGlvbmFsaXR5CisgICAgLy8gaW4gdGhhdCBjb3B5
IG9mIHRoZSBGb250IG9iamVjdCwgc28gZHJhd1RleHQvZmxvYXRXaWR0aCBlbmQgdXAgaW4gdGhl
ICJzaW1wbGUiIGNvZGUgcGF0aHMuCisgICAgRm9udERhdGEqIGZvbnREYXRhID0gY29uc3RfY2Fz
dDxGb250RGF0YSo+KGRhdGEuZm9udC0+cHJpbWFyeUZvbnQoKSk7CisgICAgU1ZHRm9udERhdGEq
IHN2Z0ZvbnREYXRhID0gZm9udERhdGEtPm1fc3ZnRm9udERhdGEucmVsZWFzZSgpOworCisgICAg
Ly8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCisgICAgVGV4dFJ1biBzdWJSdW4ocnVuKTsK
KyAgICBzdWJSdW4uc2V0VGV4dChzdWJSdW4uZGF0YShwb3NpdGlvbiksIDEpOworCisgICAgZGF0
YS5sZW5ndGggKz0gZGF0YS5mb250LT5mbG9hdFdpZHRoKHN1YlJ1bik7CisKKyAgICAvLyBTd2l0
Y2ggYmFjayB0byBTVkcgRm9udCBjb2RlIHBhdGgKKyAgICBmb250RGF0YS0+bV9zdmdGb250RGF0
YS5zZXQoc3ZnRm9udERhdGEpOworfQogCi0gICAgU1ZHUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNl
cnZlciA9IFNWR1BhaW50U2VydmVyOjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUsIHJlbmRlck9iamVj
dCk7Ci0gICAgU1ZHUGFpbnRTZXJ2ZXIqIHN0cm9rZVBhaW50U2VydmVyID0gU1ZHUGFpbnRTZXJ2
ZXI6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlLCByZW5kZXJPYmplY3QpOworc3RhdGljIGZsb2F0
IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChjb25zdCBGb250KiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8pCit7CisgICAgaW50IG5ld0Zyb20gPSB0
byA+IGZyb20gPyBmcm9tIDogdG87CisgICAgaW50IG5ld1RvID0gdG8gPiBmcm9tID8gdG8gOiBm
cm9tOworCisgICAgZnJvbSA9IG5ld0Zyb207CisgICAgdG8gPSBuZXdUbzsKKworICAgIFNWR0Zv
bnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250
RmFjZUVsZW1lbnQgPSAwOworCisgICAgaWYgKFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0Zv
bnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5Rm9udCgpLCBmb250
RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICAgICAgU1ZHVGV4dFJ1bldhbGtlck1lYXN1
cmVkTGVuZ3RoRGF0YSBkYXRhOworCisgICAgICAgIGRhdGEuZm9udCA9IGZvbnQ7CisgICAgICAg
IGRhdGEuYXQgPSBmcm9tOworICAgICAgICBkYXRhLmZyb20gPSBmcm9tOworICAgICAgICBkYXRh
LnRvID0gdG87CisgICAgICAgIGRhdGEubGVuZ3RoID0gMC4wZjsKKyAgICAgICAgZGF0YS5mb250
U2l6ZSA9IGZvbnQtPnNpemUoKTsKKyAgICAgICAgZGF0YS51bml0c1BlckVtID0gZm9udEZhY2VF
bGVtZW50LT51bml0c1BlckVtKCk7CisKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGJv
b2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5zdmdTdHlsZSgpKTsKKworICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlOworICAg
ICAgICAgICAgaWYgKHJlbmRlck9iamVjdC0+ZWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGxh
bmd1YWdlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHJlbmRlck9iamVjdC0+ZWxlbWVudCgpKS0+
Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7CisKKyAgICAgICAgICAgIFNWR1RleHRS
dW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YT4gcnVuV2Fsa2VyKGZv
bnREYXRhLCBmb250RWxlbWVudCwgZGF0YSwgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNr
LCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOworICAgICAgICAgICAgcnVuV2Fsa2Vy
LndhbGsocnVuLCBpc1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIDAsIHJ1bi5sZW5ndGgoKSk7Cisg
ICAgICAgIH0KIAotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHBvaW50OworICAgICAgICBy
ZXR1cm4gZGF0YS5sZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Zsb2F0
IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdAor
eworICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVu
LCAwLCBydW4ubGVuZ3RoKCkpOworfQogCisvLyBDYWxsYmFjayAmIGRhdGEgc3RydWN0dXJlcyB0
byBkcmF3IHRleHQgdXNpbmcgU1ZHIEZvbnRzCitzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlckRyYXdU
ZXh0RGF0YSB7CisgICAgZmxvYXQgZm9udFNpemU7CisgICAgZmxvYXQgc2NhbGU7CisgICAgdW5z
aWduZWQgdW5pdHNQZXJFbTsKKyAgICBib29sIGlzVmVydGljYWxUZXh0OworCisgICAgZmxvYXQg
eFN0YXJ0T2Zmc2V0OworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50OwogICAgIEZsb2F0UG9p
bnQgZ2x5cGhPcmlnaW47Ci0gICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkgewotICAgICAgICBnbHlw
aE9yaWdpbi5zZXRYKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwg
dW5pdHNQZXJFbSwgc3ZnRm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKSk7Ci0gICAgICAgIGds
eXBoT3JpZ2luLnNldFkoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXpl
LCB1bml0c1BlckVtLCBzdmdGb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblkpKTsKKworICAgIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dDsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdDsK
KworICAgIFNWR1BhaW50U2VydmVyKiBhY3RpdmVQYWludFNlcnZlcjsKK307CisKK2Jvb2wgZHJh
d1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50
aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEmIGRhdGEpCit7CisgICAgLy8gVE9E
TzogU3VwcG9ydCBhcmJpdGFyeSBTVkcgY29udGVudCBhcyBnbHlwaCAoY3VycmVudGx5IGxpbWl0
ZWQgdG8gPGdseXBoIGQ9Ii4uLiI+IHNpdHVhdGlvbnMpCisgICAgaWYgKCFpZGVudGlmaWVyLnBh
dGhEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhLmNvbnRleHQtPnNhdmUoKTsKKworICAg
ICAgICBpZiAoZGF0YS5pc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICAgICAgZGF0YS5nbHlwaE9y
aWdpbi5zZXRYKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChkYXRhLmZvbnRTaXpl
LCBkYXRhLnVuaXRzUGVyRW0sIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YKSk7CisgICAgICAg
ICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFkoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgaWRlbnRpZmllci52ZXJ0aWNhbE9y
aWdpblkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGEuY29udGV4dC0+dHJhbnNsYXRlKGRh
dGEueFN0YXJ0T2Zmc2V0ICsgZGF0YS5jdXJyZW50UG9pbnQueCgpICsgZGF0YS5nbHlwaE9yaWdp
bi54KCksIGRhdGEuY3VycmVudFBvaW50LnkoKSArIGRhdGEuZ2x5cGhPcmlnaW4ueSgpKTsKKyAg
ICAgICAgZGF0YS5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoZGF0YS5zY2FsZSwgLWRhdGEuc2Nh
bGUpKTsKKworICAgICAgICBkYXRhLmNvbnRleHQtPmJlZ2luUGF0aCgpOworICAgICAgICBkYXRh
LmNvbnRleHQtPmFkZFBhdGgoaWRlbnRpZmllci5wYXRoRGF0YSk7CisKKyAgICAgICAgU1ZHUGFp
bnRUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBkYXRhLmNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgp
ID09IGNUZXh0U3Ryb2tlID8gQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUgOiBBcHBseVRvRmlsbFRh
cmdldFR5cGU7CisgICAgICAgIGlmIChkYXRhLmFjdGl2ZVBhaW50U2VydmVyLT5zZXR1cChkYXRh
LmNvbnRleHQsIGRhdGEucmVuZGVyT2JqZWN0LCB0YXJnZXRUeXBlKSkgeworICAgICAgICAgICAg
Ly8gU3BlYzogQW55IHByb3BlcnRpZXMgc3BlY2lmaWVkIG9uIGEgdGV4dCBlbGVtZW50cyB3aGlj
aCByZXByZXNlbnRzIGEgbGVuZ3RoLCBzdWNoIGFzIHRoZQorICAgICAgICAgICAgLy8gJ3N0cm9r
ZS13aWR0aCcgcHJvcGVydHksIG1pZ2h0IHByb2R1Y2Ugc3VycHJpc2luZyByZXN1bHRzIHNpbmNl
IHRoZSBsZW5ndGggdmFsdWUgd2lsbCBiZQorICAgICAgICAgICAgLy8gcHJvY2Vzc2VkIGluIHRo
ZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgZ2x5cGguIChUT0RPOiBXaGF0IG90aGVyIGxlbmd0
aHM/IG1pdGVyLWxpbWl0PyBkYXNoLW9mZnNldD8pCisgICAgICAgICAgICBpZiAodGFyZ2V0VHlw
ZSA9PSBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSAmJiBkYXRhLnNjYWxlICE9IDAuMGYpCisgICAg
ICAgICAgICAgICAgZGF0YS5jb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoZGF0YS5jb250ZXh0
LT5zdHJva2VUaGlja25lc3MoKSAvIGRhdGEuc2NhbGUpOworCisgICAgICAgICAgICBkYXRhLmFj
dGl2ZVBhaW50U2VydmVyLT5yZW5kZXJQYXRoKGRhdGEuY29udGV4dCwgZGF0YS5yZW5kZXJPYmpl
Y3QsIHRhcmdldFR5cGUpOworICAgICAgICAgICAgZGF0YS5hY3RpdmVQYWludFNlcnZlci0+dGVh
cmRvd24oZGF0YS5jb250ZXh0LCBkYXRhLnJlbmRlck9iamVjdCwgdGFyZ2V0VHlwZSk7CisgICAg
ICAgIH0KKworICAgICAgICBkYXRhLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiAKLSAgICBm
b3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsKLSAgICAgICAgU1ZHR2x5cGhJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBmb250RmFjZS0+Z2x5cGhJZGVudGlmaWVyRm9yR2x5cGhDb2RlKGds
eXBoQnVmZmVyLmdseXBoQXQoaSkpOwotCi0gICAgICAgIC8vIFRPRE86IFN1cHBvcnQgYXJiaXRh
cnkgU1ZHIGNvbnRlbnQgYXMgZ2x5cGggKGN1cnJlbnRseSBsaW1pdGVkIHRvIDxnbHlwaCBkPSIu
Li4iPiBzaXR1YXRpb25zKQotICAgICAgICBpZiAoIWlkZW50aWZpZXIucGF0aERhdGEuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgICAg
ICBnbHlwaE9yaWdpbi5zZXRYKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250
U2l6ZSwgdW5pdHNQZXJFbSwgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblgpKTsKLSAgICAgICAg
ICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhl
bChmb250U2l6ZSwgdW5pdHNQZXJFbSwgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkpKTsKLSAg
ICAgICAgICAgIH0KKyAgICBpZiAoZGF0YS5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgZGF0YS5j
dXJyZW50UG9pbnQubW92ZSgwLjBmLCBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwo
ZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5j
ZVkpKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoU1ZHRm9udERh
dGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwg
aWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVgpLCAwLjBmKTsKIAotICAgICAgICAgICAgY29u
dGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHN0YXJ0UG9pbnQu
eCgpICsgZ2x5cGhPcmlnaW4ueCgpLCBzdGFydFBvaW50LnkoKSArIGdseXBoT3JpZ2luLnkoKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc2NhbGUsIC1zY2FsZSkpOwot
Ci0gICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLQotICAgICAgICAgICAgaWYgKGZp
bGxQYWludFNlcnZlcikgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgoaWRlbnRp
Zmllci5wYXRoRGF0YSk7Ci0gICAgICAgICAgICAgICAgZmlsbFBhaW50U2VydmVyLT5kcmF3KGNv
bnRleHQsIHJlbmRlck9iamVjdCwgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKTsKLSAgICAgICAgICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChpZGVudGlmaWVyLnBhdGhE
YXRhKTsKLSAgICAgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlci0+ZHJhdyhjb250ZXh0LCBy
ZW5kZXJPYmplY3QsIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKTsKLSAgICAgICAgICAgIH0KK3Zv
aWQgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIGludCBwb3NpdGlvbiwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKK3sK
KyAgICAvLyBDb25zdHJ1Y3QgYSBjb3B5IG9mIHRoZSBjdXJyZW50IFNWRyBGb250IHRoYXQgaW4g
aXMgdXNlLiBEaXNhYmxlIHRoZSBTVkcgRm9udCBmdW5jdGlvbmFsaXR5CisgICAgLy8gaW4gdGhh
dCBjb3B5IG9mIHRoZSBGb250IG9iamVjdCwgc28gZHJhd1RleHQvZmxvYXRXaWR0aCBlbmQgdXAg
aW4gdGhlICJzaW1wbGUiIGNvZGUgcGF0aHMuCisgICAgY29uc3QgRm9udCYgZm9udCA9IGRhdGEu
Y29udGV4dC0+Zm9udCgpOworCisgICAgRm9udERhdGEqIGZvbnREYXRhID0gY29uc3RfY2FzdDxG
b250RGF0YSo+KGZvbnQucHJpbWFyeUZvbnQoKSk7CisgICAgU1ZHRm9udERhdGEqIHN2Z0ZvbnRE
YXRhID0gZm9udERhdGEtPm1fc3ZnRm9udERhdGEucmVsZWFzZSgpOworCisgICAgLy8gSGFuZGxl
IHN5c3RlbSBmb250IGZhbGxiYWNrCisgICAgVGV4dFJ1biBzdWJSdW4ocnVuKTsKKyAgICBzdWJS
dW4uc2V0VGV4dChzdWJSdW4uZGF0YShwb3NpdGlvbiksIDEpOworCisgICAgZm9udC5kcmF3VGV4
dChkYXRhLmNvbnRleHQsIHN1YlJ1biwgZGF0YS5jdXJyZW50UG9pbnQpOworCisgICAgaWYgKGRh
dGEuaXNWZXJ0aWNhbFRleHQpCisgICAgICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoMC4wZiwg
ZGF0YS5jb250ZXh0LT5mb250KCkuZmxvYXRXaWR0aChzdWJSdW4pKTsKKyAgICBlbHNlCisgICAg
ICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoZGF0YS5jb250ZXh0LT5mb250KCkuZmxvYXRXaWR0
aChzdWJSdW4pLCAwLjBmKTsKIAotICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOworICAg
IC8vIFN3aXRjaCBiYWNrIHRvIFNWRyBGb250IGNvZGUgcGF0aAorICAgIGZvbnREYXRhLT5tX3N2
Z0ZvbnREYXRhLnNldChzdmdGb250RGF0YSk7Cit9CiAKLSAgICAgICAgICAgIGlmIChpc1ZlcnRp
Y2FsVGV4dCkKLSAgICAgICAgICAgICAgICBzdGFydFBvaW50Lm1vdmUoMCwgU1ZHRm9udERhdGE6
OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCB1bml0c1BlckVtLCBpZGVudGlmaWVyLnZl
cnRpY2FsQWR2YW5jZVkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGFy
dFBvaW50Lm1vdmUoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCB1
bml0c1BlckVtLCBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCksIDApOwordm9pZCBGb250
OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIFNWR0ZvbnRFbGVt
ZW50KiBmb250RWxlbWVudCA9IDA7CisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVs
ZW1lbnQgPSAwOworCisgICAgaWYgKFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRG
b250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQs
IGZvbnRFbGVtZW50KSkgeworICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEgZGF0YTsKKwor
ICAgICAgICBkYXRhLnJlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgp
OworICAgICAgICBBU1NFUlQoZGF0YS5yZW5kZXJPYmplY3QpOworCisgICAgICAgIGRhdGEuYWN0
aXZlUGFpbnRTZXJ2ZXIgPSBydW4uYWN0aXZlUGFpbnRTZXJ2ZXIoKTsKKyAgICAgICAgQVNTRVJU
KGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIpOworCisgICAgICAgIGRhdGEuZm9udFNpemUgPSBzaXpl
KCk7CisgICAgICAgIGRhdGEudW5pdHNQZXJFbSA9IGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJF
bSgpOworICAgICAgICBkYXRhLnNjYWxlID0gU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgMS4wZik7CisgICAgICAgIGRhdGEu
aXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoZGF0YS5yZW5kZXJPYmplY3Qt
PnN0eWxlKCktPnN2Z1N0eWxlKCkpOyAgICAKKyAgICAgICAgZGF0YS54U3RhcnRPZmZzZXQgPSBm
bG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCBydW4ucnRsKCkgPyB0
byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20pOworICAgICAgICBkYXRhLmN1
cnJlbnRQb2ludCA9IHBvaW50OworICAgICAgICBkYXRhLmdseXBoT3JpZ2luID0gRmxvYXRQb2lu
dCgpOworICAgICAgICBkYXRhLmNvbnRleHQgPSBjb250ZXh0OworCisgICAgICAgIFN0cmluZyBs
YW5ndWFnZTsKKyAgICAgICAgaWYgKGRhdGEucmVuZGVyT2JqZWN0LT5lbGVtZW50KCkpCisgICAg
ICAgICAgICBsYW5ndWFnZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihkYXRhLnJlbmRlck9iamVj
dC0+ZWxlbWVudCgpKS0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7CisKKyAgICAg
ICAgaWYgKCFkYXRhLmlzVmVydGljYWxUZXh0KSB7CisgICAgICAgICAgICBkYXRhLmdseXBoT3Jp
Z2luLnNldFgoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUs
IGRhdGEudW5pdHNQZXJFbSwgZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKSk7CisgICAgICAg
ICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFkoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgZm9udERhdGEtPmhvcml6b250YWxP
cmlnaW5ZKSk7CiAgICAgICAgIH0KKyAgICAKKyAgICAgICAgU1ZHVGV4dFJ1bldhbGtlcjxTVkdU
ZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhPiBydW5XYWxrZXIoZm9udERhdGEsIGZvbnRFbGVtZW50
LCBkYXRhLCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrLCBkcmF3VGV4dE1pc3NpbmdHbHlw
aENhbGxiYWNrKTsKKyAgICAgICAgcnVuV2Fsa2VyLndhbGsocnVuLCBkYXRhLmlzVmVydGljYWxU
ZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOwogICAgIH0KIH0KIAorRmxvYXRSZWN0IEZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
SW50UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorewor
ICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNp
bmdTVkdGb250KHRoaXMsIHJ1biwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4u
bGVuZ3RoKCkgOiBmcm9tKSwKKyAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwgZmxvYXRX
aWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgZnJvbSwgdG8pLCBoZWlnaHQp
OworfQorCiB9CiAKICNlbmRpZgpJbmRleDogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBzdmcvU1ZHRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyOTIxNCkKKysrIHN2Zy9T
VkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFNWR05hbWVzOwogCiBTVkdGb250RWxlbWVudDo6U1ZHRm9udEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxl
ZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9tYXhpbXVtSGFzaEtleUxlbmd0aCgwKQog
ewogfQogCkBAIC00NCw2MiArNDUsMTAxIEBAIFNWR0ZvbnRFbGVtZW50Ojp+U1ZHRm9udEVsZW1l
bnQoKQogewogfQogCi12b2lkIFNWR0ZvbnRFbGVtZW50Ojpjb2xsZWN0R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQpCit2b2lkIFNWR0ZvbnRFbGVtZW50OjphZGRHbHlwaFRvQ2FjaGUoU1ZHR2x5cGhF
bGVtZW50KiBnbHlwaEVsZW1lbnQpCiB7Ci0gICAgbV9nbHlwaE1hcC5jbGVhcigpOworICAgIEFT
U0VSVChnbHlwaEVsZW1lbnQpOwogCi0gICAgVmVjdG9yPFNWR0dseXBoRWxlbWVudCo+IGdseXBo
RWxlbWVudHM7Ci0gICAgU1ZHTWlzc2luZ0dseXBoRWxlbWVudCogbWlzc2luZ0dseXBoRWxlbWVu
dCA9IDA7Ci0KLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPmhhc1Rh
Z05hbWUoZ2x5cGhUYWcpKQotICAgICAgICAgICAgZ2x5cGhFbGVtZW50cy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8U1ZHR2x5cGhFbGVtZW50Kj4oY2hpbGQpKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQt
Pmhhc1RhZ05hbWUobWlzc2luZ19nbHlwaFRhZykpCi0gICAgICAgICAgICBtaXNzaW5nR2x5cGhF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWlzc2luZ0dseXBoRWxlbWVudCo+KGNoaWxkKTsKKyAg
ICBTdHJpbmcgZ2x5cGhTdHJpbmcgPSBnbHlwaEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh1bmljb2Rl
QXR0cik7CisgICAgaWYgKGdseXBoU3RyaW5nLmlzRW1wdHkoKSkgLy8gTm8gdW5pY29kZSBwcm9w
ZXJ0eSwgbWVhbnMgdGhhdCBnbHlwaCB3aWxsIGJlIHVzZWQgaW4gPGFsdEdseXBoPiBzaXR1YXRp
b25zIQorICAgICAgICByZXR1cm47CisKKyAgICBTVkdHbHlwaElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IGdseXBoRWxlbWVudC0+YnVpbGRHbHlwaElkZW50aWZpZXIoKTsKKyAgICBpZGVudGlmaWVy
LmlzVmFsaWQgPSB0cnVlOworCisgICAgaWYgKGdseXBoU3RyaW5nLmxlbmd0aCgpID4gbV9tYXhp
bXVtSGFzaEtleUxlbmd0aCkKKyAgICAgICAgbV9tYXhpbXVtSGFzaEtleUxlbmd0aCA9IGdseXBo
U3RyaW5nLmxlbmd0aCgpOworCisgICAgR2x5cGhIYXNoTWFwOjppdGVyYXRvciBnbHlwaHNJdCA9
IG1fZ2x5cGhNYXAuZmluZChnbHlwaFN0cmluZyk7CisgICAgaWYgKGdseXBoc0l0ID09IG1fZ2x5
cGhNYXAuZW5kKCkpIHsKKyAgICAgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcj4gZ2x5cGhz
OworICAgICAgICBnbHlwaHMuYXBwZW5kKGlkZW50aWZpZXIpOworCisgICAgICAgIG1fZ2x5cGhN
YXAuYWRkKGdseXBoU3RyaW5nLCBnbHlwaHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3Rv
cjxTVkdHbHlwaElkZW50aWZpZXI+JiBnbHlwaHMgPSAoKmdseXBoc0l0KS5zZWNvbmQ7CisgICAg
ICAgIGdseXBocy5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgfQorfQogCi0gICAgVmVjdG9yPFNW
R0dseXBoRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IGdseXBoRWxlbWVudHMuYmVnaW4oKTsKLSAg
ICBWZWN0b3I8U1ZHR2x5cGhFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGdseXBoRWxlbWVudHMu
ZW5kKCk7Cit2b2lkIFNWR0ZvbnRFbGVtZW50OjpyZW1vdmVHbHlwaEZyb21DYWNoZShTVkdHbHlw
aEVsZW1lbnQqIGdseXBoRWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZ2x5cGhFbGVtZW50KTsKIAot
ICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IDA7CisgICAgU3RyaW5nIGdseXBoU3RyaW5n
ID0gZ2x5cGhFbGVtZW50LT5nZXRBdHRyaWJ1dGUodW5pY29kZUF0dHIpOworICAgIGlmIChnbHlw
aFN0cmluZy5pc0VtcHR5KCkpIC8vIE5vIHVuaWNvZGUgcHJvcGVydHksIG1lYW5zIHRoYXQgZ2x5
cGggd2lsbCBiZSB1c2VkIGluIDxhbHRHbHlwaD4gc2l0dWF0aW9ucyEKKyAgICAgICAgcmV0dXJu
OwogCi0jaWYgIVBMQVRGT1JNKFFUKQotICAgIC8vIFdoeSBkb2Vzbid0IFF0IGhhdmUgcHJpbWFy
eUZvbnQoKT8gVGhlIFF0IGd1eXMgd2lsbCBzZWUgYW4gYXNzZXJ0aW9uLCBpZiBidWlsZEdseXBo
SWRlbnRpZmllcigpIGlzIGNhbGxlZCA6KAotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9
IGZvbnQucHJpbWFyeUZvbnQoKTsKLSAgICBBU1NFUlQoZm9udERhdGEpOworICAgIEdseXBoSGFz
aE1hcDo6aXRlcmF0b3IgZ2x5cGhzSXQgPSBtX2dseXBoTWFwLmZpbmQoZ2x5cGhTdHJpbmcpOwor
ICAgIEFTU0VSVChnbHlwaHNJdCAhPSBtX2dseXBoTWFwLmVuZCgpKTsKIAotICAgIHN2Z0ZvbnRE
YXRhID0gZm9udERhdGEtPnN2Z0ZvbnREYXRhKCk7Ci0jZW5kaWYKKyAgICBWZWN0b3I8U1ZHR2x5
cGhJZGVudGlmaWVyPiYgZ2x5cGhzID0gKCpnbHlwaHNJdCkuc2Vjb25kOwogCi0gICAgU3RyaW5n
IGdseXBoU3RyaW5nOwotICAgIFNWR0dseXBoSWRlbnRpZmllciBpZGVudGlmaWVyOworICAgIGlm
IChnbHlwaHMuc2l6ZSgpID09IDEpCisgICAgICAgIG1fZ2x5cGhNYXAucmVtb3ZlKGdseXBoU3Ry
aW5nKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU1ZHR2x5cGhJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBnbHlwaEVsZW1lbnQtPmJ1aWxkR2x5cGhJZGVudGlmaWVyKCk7CisgICAgICAgIGlkZW50aWZp
ZXIuaXNWYWxpZCA9IHRydWU7CiAKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlkZW50aWZpZXIgPSAoKml0KS0+YnVpbGRHbHlwaElkZW50aWZpZXIoc3ZnRm9udERhdGEp
OwotICAgICAgICBnbHlwaFN0cmluZyA9ICgqaXQpLT5nZXRBdHRyaWJ1dGUodW5pY29kZUF0dHIp
OworICAgICAgICBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyPjo6aXRlcmF0b3IgaXQgPSBnbHlw
aHMuYmVnaW4oKTsKKyAgICAgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcj46Oml0ZXJhdG9y
IGVuZCA9IGdseXBocy5lbmQoKTsKIAotICAgICAgICAvLyBUT0RPOiBUbyBzdXBwb3J0IGdseXBo
IHN0cmluZ3MgY29uc2lzdGluZyBvZiBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciAoaWUuICdmZmwn
IGxpZ2F0dXJlcykKLSAgICAgICAgLy8gd2UgbmVlZCBhbm90aGVyIGhhc2hpbmcgc2NoZW1lLiBH
bHlwaCA8LT4gU1ZHR2x5cGhJZGVudGlmaWVyIGlzIG5vdCBlbm91Z2guCisgICAgICAgIHVuc2ln
bmVkIGludCBwb3NpdGlvbiA9IDA7CisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmICgoKml0KSA9PSBpZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIC8vIFRPRE86IFdlIHNraXAgZ2x5cGhzIHdpdGggZW1wdHkgcGF0aHMs
IHRoaXMgaXMgbm90IGNvcnJlY3QgaWYgdGhlIDxnbHlwaD4gaGFzIG5vIGQ9IiIgYnV0IGNoaWxk
cmVuIQotICAgICAgICAKLSAgICAgICAgaWYgKGdseXBoU3RyaW5nLmxlbmd0aCgpICE9IDEgfHwg
aWRlbnRpZmllci5wYXRoRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHBvc2l0aW9uKys7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQocG9zaXRp
b24gPCBnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgZ2x5cGhzLnJlbW92ZShwb3NpdGlvbik7Cisg
ICAgfQogCi0gICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gZm9udC5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoZ2x5cGhTdHJpbmdbMF0sIGZhbHNlIC8qIFRPRE86IG5vIHJ0bCwgaXMg
dGhpcyBjb3JyZWN0IGluIGFsbCBjYXNlcz8gKi8pOwotICAgICAgICBtX2dseXBoTWFwLmFkZChn
bHlwaERhdGEuZ2x5cGgsIGlkZW50aWZpZXIpOworICAgIC8vIElmIHdlIHJlbW92ZSBhIGdseXBo
IGZyb20gY2FjaGUsIHdob3NlIHVuaWNvZGUgcHJvcGVydHkgbGVuZ3RoIGlzIGVxdWFsIHRvCisg
ICAgLy8gbV9tYXhpbXVtSGFzaEtleUxlbmd0aCB0aGVuIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUg
dGhlIGhhc2gga2V5IGxlbmd0aCwgYmVjYXVzZSB0aGVyZQorICAgIC8vIGlzIGVpdGhlciBubyBt
b3JlIGdseXBoIHdpdGggdGhhdCBsZW5ndGgsIG9yIHRoZXJlIGFyZSBzdGlsbCBtb3JlIGdseXBo
cyB3aXRoIHRoZSBtYXhpbXVtIGxlbmd0aC4KKyAgICBpZiAoZ2x5cGhTdHJpbmcubGVuZ3RoKCkg
PT0gbV9tYXhpbXVtSGFzaEtleUxlbmd0aCkgeworICAgICAgICBtX21heGltdW1IYXNoS2V5TGVu
Z3RoID0gMDsKKworICAgICAgICBHbHlwaEhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9nbHlwaE1h
cC5iZWdpbigpOworICAgICAgICBHbHlwaEhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZ2x5cGhN
YXAuZW5kKCk7CisKKyAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaWYgKCgqaXQpLmZpcnN0Lmxlbmd0aCgpID4gbV9tYXhpbXVtSGFzaEtleUxlbmd0aCkKKyAg
ICAgICAgICAgICAgICBtX21heGltdW1IYXNoS2V5TGVuZ3RoID0gKCppdCkuZmlyc3QubGVuZ3Ro
KCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLVNWR0dseXBoSWRlbnRpZmllciBTVkdGb250RWxl
bWVudDo6Z2x5cGhJZGVudGlmaWVyRm9yR2x5cGhDb2RlKGNvbnN0IEdseXBoJiBjb2RlKSBjb25z
dAorU1ZHTWlzc2luZ0dseXBoRWxlbWVudCogU1ZHRm9udEVsZW1lbnQ6OmZpcnN0TWlzc2luZ0ds
eXBoRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgR2x5cGhIYXNoTWFwJiBoYXNoTWFwID0gY29uc3Rf
Y2FzdDxTVkdGb250RWxlbWVudCo+KHRoaXMpLT5tX2dseXBoTWFwOworICAgIGZvciAoTm9kZSog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShtaXNzaW5nX2dseXBoVGFnKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdNaXNzaW5nR2x5cGhFbGVtZW50Kj4oY2hp
bGQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQogCi0gICAgR2x5cGhIYXNoTWFwOjppdGVy
YXRvciBpdCA9IGhhc2hNYXAuZmluZChjb2RlKTsKLSAgICBpZiAoaXQgPT0gaGFzaE1hcC5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIFNWR0dseXBoSWRlbnRpZmllcigpOworY29uc3QgVmVjdG9yPFNW
R0dseXBoSWRlbnRpZmllcj4mIFNWR0ZvbnRFbGVtZW50OjpnbHlwaElkZW50aWZpZXJzRm9yU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdAoreworICAgIEdseXBoSGFzaE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2dseXBoTWFwLmZpbmQoc3RyaW5nKTsKKyAgICBpZiAoaXQgPT0g
bV9nbHlwaE1hcC5lbmQoKSkgeworICAgICAgICBzdGF0aWMgVmVjdG9yPFNWR0dseXBoSWRlbnRp
Zmllcj4gc19lbXB0eUdseXBoTGlzdDsKKyAgICAgICAgcmV0dXJuIHNfZW1wdHlHbHlwaExpc3Q7
CisgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuICgqaXQpLnNlY29u
ZDsKIH0KIAogfQpJbmRleDogc3ZnL1NWR0ZvbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3Zn
L1NWR0ZvbnRFbGVtZW50LmgJKHJldmlzaW9uIDI5MjE0KQorKysgc3ZnL1NWR0ZvbnRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDMxICsyMiwxMyBAQAogI2RlZmluZSBTVkdGb250RWxl
bWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnQuaCIKLQotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0dseXBoRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgRm9udDsKLQotICAgIHN0cnVjdCBHbHlwaEhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBHbHlwaCYgZ2x5cGgpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJ
bXBsOjpjb21wdXRlSGFzaCgoOjpVQ2hhciopICZnbHlwaCwgc2l6ZW9mKEdseXBoKSAvIHNpemVv
Zig6OlVDaGFyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBHbHlwaCYgYSwgY29uc3QgR2x5cGgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwot
ICAgIH07Ci0KLSAgICBzdHJ1Y3QgR2x5cGhIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRy
YWl0czxHbHlwaD4gewotICAgICAgICBzdGF0aWMgVHJhaXRUeXBlIGRlbGV0ZWRWYWx1ZSgpIHsg
cmV0dXJuIFVTSFJUX01BWDsgfQotICAgIH07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8R2x5cGgs
IFNWR0dseXBoSWRlbnRpZmllciwgR2x5cGhIYXNoLCBHbHlwaEhhc2hUcmFpdHM+IEdseXBoSGFz
aE1hcDsKLQorICAgIGNsYXNzIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQ7ICAgIAogICAgIGNsYXNz
IFNWR0ZvbnRFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIHsKICAgICBw
dWJsaWM6CkBAIC01NiwxMiArMzgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNl
OyB9ICAgIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogCi0gICAgICAgIHZvaWQgY29sbGVjdEdseXBocyhj
b25zdCBGb250Jik7Ci0gICAgICAgIFNWR0dseXBoSWRlbnRpZmllciBnbHlwaElkZW50aWZpZXJG
b3JHbHlwaENvZGUoY29uc3QgR2x5cGgmKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGRHbHlwaFRv
Q2FjaGUoU1ZHR2x5cGhFbGVtZW50Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlR2x5cGhGcm9tQ2Fj
aGUoU1ZHR2x5cGhFbGVtZW50Kik7CisKKyAgICAgICAgY29uc3QgVmVjdG9yPFNWR0dseXBoSWRl
bnRpZmllcj4mIGdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7
CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgbG9uZ2VzdCBoYXNoIGtleSBsZW5ndGggKHRoZSAn
dW5pY29kZScgcHJvcGVydHkgdmFsdWUgd2l0aCB0aGUKKyAgICAgICAgLy8gaGlnaGVzdCBhbW91
bnQgb2YgY2hhcmFjdGVycykgLSBpZS4gZm9yIDxnbHlwaCB1bmljb2RlPSJmZmwiLz4gaXQgd2ls
bCByZXR1cm4gMy4KKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1IYXNoS2V5TGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhpbXVtSGFzaEtleUxlbmd0aDsgfQorCisgICAgICAgIFNWR01p
c3NpbmdHbHlwaEVsZW1lbnQqIGZpcnN0TWlzc2luZ0dseXBoRWxlbWVudCgpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgLy8gTWFwIGJldHdlZW4gJ3VuaWNvZGUnIHByb3BlcnR5IG9m
IDxnbHlwaD4gYW5kIGEgU1ZHR2x5cGhJZGVudGlmaWVyCisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+ID4gR2x5cGhIYXNoTWFwOwogICAg
ICAgICBHbHlwaEhhc2hNYXAgbV9nbHlwaE1hcDsKKworICAgICAgICB1bnNpZ25lZCBpbnQgbV9t
YXhpbXVtSGFzaEtleUxlbmd0aDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHRm9u
dEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjkyMTQpCisrKyBzdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUgKzI5LDE2IEBACiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZv
bnREYXRhLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIlNWR0Rl
ZmluaXRpb25TcmNFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlU3JjRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0dseXBoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMTUzLDcgKzE1NCw2IEBAIEZvbnREYXRhKiBTVkdGb250RmFj
ZUVsZW1lbnQ6OmNyZWF0ZUZvbnQKICAgICBBU1NFUlQocGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1l
KGZvbnRUYWcpKTsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdGb250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7CiAKLSAgICAvLyBVc2UgZGVmYXVsdCBm
YWxsYmFjayBwbGF0Zm9ybSBkYXRhIC0gaXQncyBub3QgbmVlZGVkIGFueXdheS4uLgogICAgIEZv
bnRQbGF0Zm9ybURhdGEqIGNhY2hlZFBsYXRmb3JtRGF0YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwogICAgIGlmICghY2FjaGVkUGxhdGZv
cm1EYXRhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIyMCwyNCArMjIwLDIyIEBAIEZvbnREYXRh
KiBTVkdGb250RmFjZUVsZW1lbnQ6OmNyZWF0ZUZvbnQKICAgICAgICAgZm9udERhdGEtPm1fYXNj
ZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoYXNjZW50QXR0cikudG9G
bG9hdCgpKSk7CiAgICAgZWxzZSBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29y
aWdpbl95QXR0cikpCiAgICAgICAgIGZvbnREYXRhLT5tX2FzY2VudCA9IGZvbnREYXRhLT5tX3Vu
aXRzUGVyRW0gLSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1
dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKSkpOwotICAgIGVsc2UgewotICAgICAgICAv
LyBUT0RPOiBCYXRpayBhY3R1YWxseSBjb21wdXRlcyB0aGUgYXNjZW50LCBiYXNlZCBvbiB0aGUg
Z2x5cGggZGltZW5zaW9ucyBvZiB0aGUgZ2x5cGhzIGNvbnRhaW5lZCBpbiB0aGUgZm9udC4KLSAg
ICAgICAgLy8gV2UgbWF5IGNob29zZSB0aGUgc2FtZSBzb2x1dGlvbiAoZXZlbiBpZiB0aGUgc3Bl
YyBkb2Vzbid0IGdpdmUgYSBoaW50KSwgYXMgc29tZSBXM0MgU1ZHIDEuMSB0ZXN0Y2FzZXMgZGVw
ZW5kIG9uIHRoYXQuCi0gICAgICAgIGZvbnREYXRhLT5tX2FzY2VudCA9IDA7Ci0gICAgfQorICAg
IGVsc2UgLy8gTWF0Y2ggQmF0aWsncyBkZWZhdWx0IHZhbHVlLgorICAgICAgICBmb250RGF0YS0+
bV9hc2NlbnQgPSBmb250RGF0YS0+bV91bml0c1BlckVtICogMC44OwogCiAgICAgLy8gU3BlYzog
U2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyB0aGUgJ2Rlc2NlbnQnIGRlc2NyaXB0b3Igd2l0
aGluIGFuIEBmb250LWZhY2UgcnVsZS4gVGhlIG1heGltdW0KICAgICAvLyB1bmFjY2VudGVkIGRl
cHRoIG9mIHRoZSBmb250IHdpdGhpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbS4gSWYgdGhl
IGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLAogICAgIC8vIHRoZSBlZmZlY3QgaXMgYXMgaWYg
dGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmVydC1vcmlnaW4teSB2YWx1ZSBmb3IgdGhl
IGNvcnJlc3BvbmRpbmcgZm9udC4KLSAgICBpZiAoaGFzQXR0cmlidXRlKGRlc2NlbnRBdHRyKSkK
KyAgICBpZiAoaGFzQXR0cmlidXRlKGRlc2NlbnRBdHRyKSkgewogICAgICAgICBmb250RGF0YS0+
bV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoZGVzY2VudEF0
dHIpLnRvRmxvYXQoKSkpOwotICAgIGVsc2UgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUo
dmVydF9vcmlnaW5feUF0dHIpKQorCisgICAgICAgIC8vIFNvbWUgdGVzdGNhc2VzIHVzZSBhIG5l
Z2F0aXZlIGRlc2NlbnQgdmFsdWUsIHdoZXJlIGEgcG9zaXRpdmUgd2FzIG1lYW50IHRvIGJlIHVz
ZWQgOigKKyAgICAgICAgaWYgKGZvbnREYXRhLT5tX2Rlc2NlbnQgPCAwKQorICAgICAgICAgICAg
Zm9udERhdGEtPm1fZGVzY2VudCA9IC1mb250RGF0YS0+bV9kZXNjZW50OworICAgIH0gZWxzZSBp
ZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCiAgICAgICAg
IGZvbnREYXRhLT5tX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGZvbnRFbGVtZW50
LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKSkpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBUT0RPOiBCYXRpayBhY3R1YWxseSBjb21wdXRlcyB0aGUgZGVzY2VudCwg
YmFzZWQgb24gdGhlIGdseXBoIGRpbWVuc2lvbnMgb2YgdGhlIGdseXBocyBjb250YWluZWQgaW4g
dGhlIGZvbnQuCi0gICAgICAgIC8vIFdlIG1heSBjaG9vc2UgdGhlIHNhbWUgc29sdXRpb24gKGV2
ZW4gaWYgdGhlIHNwZWMgZG9lc24ndCBnaXZlIGEgaGludCksIGFzIHNvbWUgVzNDIFNWRyAxLjEg
dGVzdGNhc2VzIGRlcGVuZCBvbiB0aGF0LgotICAgICAgICBmb250RGF0YS0+bV9kZXNjZW50ID0g
MDsKLSAgICB9CisgICAgZWxzZSAvLyBNYXRjaCBCYXRpaydzIGRlZmF1bHQgdmFsdWUuCisgICAg
ICAgIGZvbnREYXRhLT5tX2Rlc2NlbnQgPSBmb250RGF0YS0+bV91bml0c1BlckVtICogMC4yOwog
CiAgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KQEAgLTI1Miw3ICsyNTAsNyBAQCB2
b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlCiAgICAgaWYgKHBhcmVudE5v
ZGUoKSAmJiBwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpIHsKICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Q7CiAKLSAgICAgICAgUmVm
UHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNyYyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKFN0
cmluZ0ltcGw6OmVtcHR5KCksIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3Jj
VmFsdWU+IHNyYyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKFN0cmluZ0ltcGw6OmVtcHR5KCks
IHRydWUgLyogaXNMb2NhbCAqLyk7CiAgICAgICAgIHNyYy0+c2V0U1ZHRm9udEZhY2VFbGVtZW50
KHRoaXMpOwogICAgICAgICBsaXN0LT5hcHBlbmQoc3JjKTsKIApAQCAtMzA0LDE0ICszMDIsMTgg
QEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZAogICAgIHJlYnVpbGRG
b250RmFjZSgpOwogfQogCi1TVkdHbHlwaElkZW50aWZpZXIgU1ZHRm9udEZhY2VFbGVtZW50Ojpn
bHlwaElkZW50aWZpZXJGb3JHbHlwaENvZGUoY29uc3QgR2x5cGgmIGNvZGUpIGNvbnN0CitTVkdG
b250RWxlbWVudCogU1ZHRm9udEZhY2VFbGVtZW50Ojphc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBj
b25zdAogewotICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIGhhdmUgdGhpcyBtZXRob2QgY2FsbGVk
IGJ5IGEgcGFyZW50IGZvbnQgZWxlbWVudAotICAgIEFTU0VSVChwYXJlbnROb2RlKCkpOwotICAg
IEFTU0VSVChwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpOworICAgIGlmIChOb2Rl
KiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFt
ZShmb250VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVu
dCo+KHBhcmVudCk7CisgICAgICAgIGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShkZWZzVGFn
KSkgeworICAgICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBleHRlcm5hbCBTVkcgZm9udHMhCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KIAotICAgIFNWR0ZvbnRFbGVt
ZW50KiBmb250RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFyZW50Tm9k
ZSgpKTsKLSAgICByZXR1cm4gZm9udEVsZW1lbnQtPmdseXBoSWRlbnRpZmllckZvckdseXBoQ29k
ZShjb2RlKTsKKyAgICByZXR1cm4gMDsKIH0KIAogfQpJbmRleDogc3ZnL1NWR0ZvbnRGYWNlRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAkocmV2aXNpb24g
MjkyMTQpCisrKyBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDcgKzIzLDYgQEAKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzEsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb247CiAgICAgY2xhc3MgRm9udERhdGE7CiAgICAgY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotICAgIHN0cnVjdCBTVkdHbHlwaElkZW50aWZpZXI7CisgICAgY2xhc3MgU1ZH
Rm9udEVsZW1lbnQ7CiAKICAgICBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQgOiBwdWJsaWMgU1ZH
RWxlbWVudCB7CiAgICAgcHVibGljOgpAQCAtNDksNyArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgcmVidWlsZEZvbnRGYWNlKCk7CiAgICAgICAgIEZvbnREYXRhKiBj
cmVhdGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKIAotICAgICAgICBT
VkdHbHlwaElkZW50aWZpZXIgZ2x5cGhJZGVudGlmaWVyRm9yR2x5cGhDb2RlKGNvbnN0IEdseXBo
JikgY29uc3Q7CisgICAgICAgIC8vIElmIG91ciBwYXJlbnQgZWxlbWVudCBpcyA8Zm9udD4sIGl0
IHdpbGwgYmUgcmV0dXJuZWQuICh0aGlzIGlzIHRoZSBjYXNlIGZvciBhIFNWRyBGb250IGRlc2Ny
aWJlZCBpbiB0aGUgc2FtZSBkb2N1bWVudCkKKyAgICAgICAgLy8gT3RoZXJ3aGlzZSBpdCB3aWxs
IHJldHVybiB0aGUgPGZvbnQ+IGVsZW1lbnQgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBmaXJz
dCB2YWxpZCA8Zm9udC1mYWNlLXNyYz4gZWxlbWVudC4KKyAgICAgICAgU1ZHRm9udEVsZW1lbnQq
IGFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gbV9mb250RmFjZVJ1bGU7CkluZGV4OiBzdmcvU1ZHR2x5
cGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2
aXNpb24gMjkyMTQpCisrKyBzdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgIlNWR0dseXBoRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorI2luY2x1ZGUgIlNW
R0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
UGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTM3LDYgKzM5LDI0
IEBAIFNWR0dseXBoRWxlbWVudDo6U1ZHR2x5cGhFbGVtZW50KGNvbnN0IFEKIHsKIH0KIAordm9p
ZCBTVkdHbHlwaEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKK3sKKyAgICBOb2RlKiBm
b250Tm9kZSA9IHBhcmVudE5vZGUoKTsKKyAgICBpZiAoZm9udE5vZGUgJiYgZm9udE5vZGUtPmhh
c1RhZ05hbWUoZm9udFRhZykpIHsKKyAgICAgICAgaWYgKFNWR0ZvbnRFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihmb250Tm9kZSkpCisgICAgICAgICAgICBl
bGVtZW50LT5hZGRHbHlwaFRvQ2FjaGUodGhpcyk7CisgICAgfQorfQorCit2b2lkIFNWR0dseXBo
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCit7CisgICAgTm9kZSogZm9udE5vZGUgPSBw
YXJlbnROb2RlKCk7CisgICAgaWYgKGZvbnROb2RlICYmIGZvbnROb2RlLT5oYXNUYWdOYW1lKGZv
bnRUYWcpKSB7CisgICAgICAgIGlmIChTVkdGb250RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0ZvbnRFbGVtZW50Kj4oZm9udE5vZGUpKQorICAgICAgICAgICAgZWxlbWVudC0+cmVt
b3ZlR2x5cGhGcm9tQ2FjaGUodGhpcyk7CisgICAgfQorfQorCiBzdGF0aWMgaW5saW5lIFNWR0ds
eXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybSBwYXJzZUFyYWJpY0Zvcm0oY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gIm1lZGlhbCIpCkBAIC00NSw4ICs2NSwx
MCBAQCBzdGF0aWMgaW5saW5lIFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljCiAgICAgICAgIHJl
dHVybiBTVkdHbHlwaElkZW50aWZpZXI6OlRlcm1pbmFsOwogICAgIGVsc2UgaWYgKHZhbHVlID09
ICJpc29sYXRlZCIpCiAgICAgICAgIHJldHVybiBTVkdHbHlwaElkZW50aWZpZXI6Oklzb2xhdGVk
OworICAgIGVsc2UgaWYgKHZhbHVlID09ICJpbml0aWFsIikKKyAgICAgICAgcmV0dXJuIFNWR0ds
eXBoSWRlbnRpZmllcjo6SW5pdGlhbDsKIAotICAgIHJldHVybiBTVkdHbHlwaElkZW50aWZpZXI6
OkluaXRpYWw7CisgICAgcmV0dXJuIFNWR0dseXBoSWRlbnRpZmllcjo6Tm9uZTsKIH0KIAogc3Rh
dGljIGlubGluZSBTVkdHbHlwaElkZW50aWZpZXI6Ok9yaWVudGF0aW9uIHBhcnNlT3JpZW50YXRp
b24oY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKQEAgLTY3LDE2ICs4OSwzNCBAQCBzdGF0aWMg
aW5saW5lIFBhdGggcGFyc2VQYXRoRGF0YShjb25zdCBBCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotU1ZHR2x5cGhJZGVudGlmaWVyIFNWR0dseXBoRWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZp
ZXIoU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhKSBjb25zdAordm9pZCBTVkdHbHlwaEVsZW1lbnQ6
OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEpCiB7Ci0gICAgQVNTRVJUKHN2Z0ZvbnREYXRh
KTsKKyAgICBpZiAoaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPT0gU1ZHR2x5cGhJZGVu
dGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpKQorICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxB
ZHZhbmNlWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVg7CisKKyAgICBpZiAoaWRl
bnRpZmllci52ZXJ0aWNhbE9yaWdpblggPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRW
YWx1ZSgpKQorICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IHN2Z0ZvbnREYXRh
LT52ZXJ0aWNhbE9yaWdpblg7CisKKyAgICBpZiAoaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkg
PT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpKQorICAgICAgICBpZGVudGlm
aWVyLnZlcnRpY2FsT3JpZ2luWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblk7CiAKKyAg
ICBpZiAoaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID09IFNWR0dseXBoSWRlbnRpZmllcjo6
aW5oZXJpdGVkVmFsdWUoKSkKKyAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0g
c3ZnRm9udERhdGEtPnZlcnRpY2FsQWR2YW5jZVk7Cit9CisKK1NWR0dseXBoSWRlbnRpZmllciBT
VkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29uc3QKK3sKICAgICBTVkdH
bHlwaElkZW50aWZpZXIgaWRlbnRpZmllcjsKICAgICBpZGVudGlmaWVyLmdseXBoTmFtZSA9IGdl
dEF0dHJpYnV0ZShnbHlwaF9uYW1lQXR0cik7CiAgICAgaWRlbnRpZmllci5vcmllbnRhdGlvbiA9
IHBhcnNlT3JpZW50YXRpb24oZ2V0QXR0cmlidXRlKG9yaWVudGF0aW9uQXR0cikpOwogICAgIGlk
ZW50aWZpZXIuYXJhYmljRm9ybSA9IHBhcnNlQXJhYmljRm9ybShnZXRBdHRyaWJ1dGUoYXJhYmlj
X2Zvcm1BdHRyKSk7CiAgICAgaWRlbnRpZmllci5wYXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZ2V0
QXR0cmlidXRlKGRBdHRyKSk7Ci0gICAgaWRlbnRpZmllci5sYW5ndWFnZXMgPSBwYXJzZURlbGlt
aXRlZFN0cmluZyhnZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSwgJywnKTsKKworICAg
IFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAg
IGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpIC8vIFNWRyBkZWZpbmVzIGEgbm9uLXhtbCBwcmVmaXhl
ZCAibGFuZyIgcHJvcGVydCBmb3IgPGdseXBoPiBpdCBzZWVtcy4KKyAgICAgICAgbGFuZ3VhZ2Ug
PSBnZXRBdHRyaWJ1dGUoImxhbmciKTsKKworICAgIGlkZW50aWZpZXIubGFuZ3VhZ2VzID0gcGFy
c2VEZWxpbWl0ZWRTdHJpbmcobGFuZ3VhZ2UsICcsJyk7CiAKICAgICAvLyBTcGVjOiBUaGUgaG9y
aXpvbnRhbCBhZHZhbmNlIGFmdGVyIHJlbmRlcmluZyB0aGUgZ2x5cGggaW4gaG9yaXpvbnRhbCBv
cmllbnRhdGlvbi4KICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRo
ZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUKQEAgLTg1LDcg
KzEyNSw3IEBAIFNWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWwKICAgICBp
ZiAoaGFzQXR0cmlidXRlKGhvcml6X2Fkdl94QXR0cikpCiAgICAgICAgIGlkZW50aWZpZXIuaG9y
aXpvbnRhbEFkdmFuY2VYID0gZ2V0QXR0cmlidXRlKGhvcml6X2Fkdl94QXR0cikudG9GbG9hdCgp
OwogICAgIGVsc2UKLSAgICAgICAgaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPSBzdmdG
b250RGF0YS0+aG9yaXpvbnRhbEFkdmFuY2VYOworICAgICAgICBpZGVudGlmaWVyLmhvcml6b250
YWxBZHZhbmNlWCA9IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKTsKIAogICAg
IC8vIFNwZWM6IFRoZSBYLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlIG9yaWdpbiBvZiB0aGUgZ2x5cGggdG8gYmUKICAgICAvLyB1c2VkIHdoZW4gZHJhd2lu
ZyB2ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNp
ZmllZCwgdGhlIGVmZmVjdApAQCAtOTMsNyArMTMzLDcgQEAgU1ZHR2x5cGhJZGVudGlmaWVyIFNW
R0dseXBoRWxlbWVudDo6YnVpbAogICAgIGlmIChoYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0
dHIpKQogICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IGdldEF0dHJpYnV0ZSh2
ZXJ0X29yaWdpbl94QXR0cikudG9GbG9hdCgpOwogICAgIGVsc2UKLSAgICAgICAgaWRlbnRpZmll
ci52ZXJ0aWNhbE9yaWdpblggPSBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YOworICAgICAg
ICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJp
dGVkVmFsdWUoKTsKIAogICAgIC8vIFNwZWM6IFRoZSBZLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRvIGJlCiAgICAgLy8g
dXNlZCB3aGVuIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QKQEAgLTEwMSw3ICsxNDEsNyBAQCBTVkdH
bHlwaElkZW50aWZpZXIgU1ZHR2x5cGhFbGVtZW50OjpidWlsCiAgICAgaWYgKGhhc0F0dHJpYnV0
ZSh2ZXJ0X29yaWdpbl95QXR0cikpCiAgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5Z
ID0gZ2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCk7CiAgICAgZWxzZQot
ICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNh
bE9yaWdpblk7CisgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gU1ZHR2x5cGhJ
ZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpOwogCiAgICAgLy8gU3BlYzogVGhlIHZlcnRpY2Fs
IGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gdmVydGljYWwgb3JpZW50YXRpb24u
CiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlz
IGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlCkBAIC0xMDksNyArMTQ5LDcgQEAg
U1ZHR2x5cGhJZGVudGlmaWVyIFNWR0dseXBoRWxlbWVudDo6YnVpbAogICAgIGlmIChoYXNBdHRy
aWJ1dGUodmVydF9hZHZfeUF0dHIpKQogICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5j
ZVkgPSBnZXRBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpLnRvRmxvYXQoKTsKICAgICBlbHNlCi0g
ICAgICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNh
bEFkdmFuY2VZOworICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgPSBTVkdHbHlw
aElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCk7CiAKICAgICByZXR1cm4gaWRlbnRpZmllcjsK
IH0KSW5kZXg6IHN2Zy9TVkdHbHlwaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHR2x5
cGhFbGVtZW50LmgJKHJldmlzaW9uIDI5MjE0KQorKysgc3ZnL1NWR0dseXBoRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWYgRU5BQkxFKFNWR19GT05UUykKICNp
bmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVk
ZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiwxMiArMzMsMjUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gRGVzY3JpYmUgYSBTVkcgPGdseXBoPiBlbGVtZW50
CiAgICAgc3RydWN0IFNWR0dseXBoSWRlbnRpZmllciB7Ci0gICAgICAgIGVudW0gT3JpZW50YXRp
b24geyBWZXJ0aWNhbCwgSG9yaXpvbnRhbCwgQm90aCB9OwotICAgICAgICBlbnVtIEFyYWJpY0Zv
cm0geyBJbml0aWFsLCBNZWRpYWwsIFRlcm1pbmFsLCBJc29sYXRlZCB9OworICAgICAgICBlbnVt
IE9yaWVudGF0aW9uIHsKKyAgICAgICAgICAgIFZlcnRpY2FsLAorICAgICAgICAgICAgSG9yaXpv
bnRhbCwKKyAgICAgICAgICAgIEJvdGgKKyAgICAgICAgfTsKKworICAgICAgICAvLyBTVkcgRm9u
dCBkZXBlbmRzIG9uIGV4YWN0bHkgdGhpcyBvcmRlci4KKyAgICAgICAgZW51bSBBcmFiaWNGb3Jt
IHsKKyAgICAgICAgICAgIE5vbmUgPSAwLAorICAgICAgICAgICAgSXNvbGF0ZWQsCisgICAgICAg
ICAgICBUZXJtaW5hbCwKKyAgICAgICAgICAgIEluaXRpYWwsCisgICAgICAgICAgICBNZWRpYWwK
KyAgICAgICAgfTsKIAogICAgICAgICBTVkdHbHlwaElkZW50aWZpZXIoKQotICAgICAgICAgICAg
OiBvcmllbnRhdGlvbihCb3RoKQotICAgICAgICAgICAgLCBhcmFiaWNGb3JtKEluaXRpYWwpCisg
ICAgICAgICAgICA6IGlzVmFsaWQoZmFsc2UpCisgICAgICAgICAgICAsIG9yaWVudGF0aW9uKEJv
dGgpCisgICAgICAgICAgICAsIGFyYWJpY0Zvcm0oTm9uZSkKICAgICAgICAgICAgICwgaG9yaXpv
bnRhbEFkdmFuY2VYKDAuMGYpCiAgICAgICAgICAgICAsIHZlcnRpY2FsT3JpZ2luWCgwLjBmKQog
ICAgICAgICAgICAgLCB2ZXJ0aWNhbE9yaWdpblkoMC4wZikKQEAgLTQ1LDQxICs1OSw1NCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIC8vICdn
bHlwaC1uYW1lJyBwcm9wZXJ0eQotICAgICAgICBTdHJpbmcgZ2x5cGhOYW1lOworICAgICAgICAv
LyBVc2VkIHRvIG1hcmsgb3VyIGZsb2F0IHByb3BlcnRpZXMgYXMgInRvIGJlIGluaGVyaXRlZCBm
cm9tIFNWR0ZvbnREYXRhIgorICAgICAgICBzdGF0aWMgZmxvYXQgaW5oZXJpdGVkVmFsdWUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgZmxvYXQgc19pbmhlcml0ZWRWYWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOworICAgICAgICAgICAgcmV0dXJu
IHNfaW5oZXJpdGVkVmFsdWU7CisgICAgICAgIH0KIAotICAgICAgICAvLyAnb3JpZW50YXRpb24n
IHByb3BlcnR5Ci0gICAgICAgIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uOworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU1ZHR2x5cGhJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQgPT0gb3RoZXIuaXNWYWxpZCAmJgorICAg
ICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID09IG90aGVyLm9yaWVudGF0aW9uICYmCisgICAg
ICAgICAgICAgICAgICAgYXJhYmljRm9ybSA9PSBvdGhlci5hcmFiaWNGb3JtICYmCisgICAgICAg
ICAgICAgICAgICAgZ2x5cGhOYW1lID09IG90aGVyLmdseXBoTmFtZSAmJgorICAgICAgICAgICAg
ICAgICAgIGhvcml6b250YWxBZHZhbmNlWCA9PSBvdGhlci5ob3Jpem9udGFsQWR2YW5jZVggJiYK
KyAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9yaWdpblggPT0gb3RoZXIudmVydGljYWxPcmln
aW5YICYmCisgICAgICAgICAgICAgICAgICAgdmVydGljYWxPcmlnaW5ZID09IG90aGVyLnZlcnRp
Y2FsT3JpZ2luWSAmJgorICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWR2YW5jZVkgPT0gb3Ro
ZXIudmVydGljYWxBZHZhbmNlWSAmJgorICAgICAgICAgICAgICAgICAgIHBhdGhEYXRhLmRlYnVn
U3RyaW5nKCkgPT0gb3RoZXIucGF0aERhdGEuZGVidWdTdHJpbmcoKSAmJgorICAgICAgICAgICAg
ICAgICAgIGxhbmd1YWdlcyA9PSBvdGhlci5sYW5ndWFnZXM7CisgICAgICAgIH0KIAotICAgICAg
ICAvLyAnYXJhYmljLWZvcm0nIHByb3BlcnR5Ci0gICAgICAgIEFyYWJpY0Zvcm0gYXJhYmljRm9y
bTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkIDogMTsKIAotICAgICAgICAvLyAnaG9yaXotYWR2LXgn
IHByb3BlcnR5Ci0gICAgICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlWDsKKyAgICAgICAgT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24gOiAyOworICAgICAgICBBcmFiaWNGb3JtIGFyYWJpY0Zvcm0g
OiAzOworICAgICAgICBTdHJpbmcgZ2x5cGhOYW1lOwogCi0gICAgICAgIC8vICd2ZXJ0LW9yaWdp
bi14JyBwcm9wZXJ0eQorICAgICAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZVg7CiAgICAgICAg
IGZsb2F0IHZlcnRpY2FsT3JpZ2luWDsKLQotICAgICAgICAvLyAndmVydC1vcmlnaW4teScgcHJv
cGVydHkKICAgICAgICAgZmxvYXQgdmVydGljYWxPcmlnaW5ZOwotCi0gICAgICAgIC8vICd2ZXJ0
LWFkdi15JyBwcm9wZXJ0eQogICAgICAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2VZOwogCi0gICAg
ICAgIC8vICdkJyBwcm9wZXJ0eQogICAgICAgICBQYXRoIHBhdGhEYXRhOwotCi0gICAgICAgIC8v
ICdsYW5nJyBwcm9wZXJ0eQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CiAgICAg
fTsKIAogICAgIGNsYXNzIFNWR0dseXBoRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0dseXBoRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHR2x5cGhFbGVtZW50KCkgeyB9
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgICAgIFNWR0dseXBoSWRlbnRpZmllciBidWlsZEdseXBoSWRlbnRpZmllcihTVkdGb250RGF0
YSopIGNvbnN0OworICAgICAgICBTVkdHbHlwaElkZW50aWZpZXIgYnVpbGRHbHlwaElkZW50aWZp
ZXIoKSBjb25zdDsKKyAgICAgICAgc3RhdGljIHZvaWQgaW5oZXJpdFVuc3BlY2lmaWVkQXR0cmli
dXRlcyhTVkdHbHlwaElkZW50aWZpZXImLCBTVkdGb250RGF0YSopOwogICAgIH07CiAKIAo=
</data>
<flag name="review"
          id="7982"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>