<?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>224138</bug_id>
          
          <creation_ts>2021-04-02 15:50:17 -0700</creation_ts>
          <short_desc>Use Hasher more, remove IntegerHasher, fix hashing-related mistakes</short_desc>
          <delta_ts>2021-04-07 19:20:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>clord</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1746707</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-02 15:50:17 -0700</bug_when>
    <thetext>Use Hasher more, remove IntegerHasher, fix hashing-related mistakes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746728</commentid>
    <comment_count>1</comment_count>
      <attachid>425065</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-02 17:02:54 -0700</bug_when>
    <thetext>Created attachment 425065
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746733</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-02 17:12:12 -0700</bug_when>
    <thetext>GTK build requires some changes to FontCacheFreeType.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747157</commentid>
    <comment_count>3</comment_count>
      <attachid>425221</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-05 16:38:00 -0700</bug_when>
    <thetext>Created attachment 425221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747176</commentid>
    <comment_count>4</comment_count>
      <attachid>425224</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-05 17:08:14 -0700</bug_when>
    <thetext>Created attachment 425224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747186</commentid>
    <comment_count>5</comment_count>
      <attachid>425227</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-05 17:31:48 -0700</bug_when>
    <thetext>Created attachment 425227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747210</commentid>
    <comment_count>6</comment_count>
      <attachid>425228</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-05 18:30:04 -0700</bug_when>
    <thetext>Created attachment 425228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747651</commentid>
    <comment_count>7</comment_count>
      <attachid>425328</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-06 14:43:15 -0700</bug_when>
    <thetext>Created attachment 425328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748040</commentid>
    <comment_count>8</comment_count>
      <attachid>425430</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-07 13:18:56 -0700</bug_when>
    <thetext>Created attachment 425430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748066</commentid>
    <comment_count>9</comment_count>
      <attachid>425430</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-07 14:30:21 -0700</bug_when>
    <thetext>Comment on attachment 425430
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        hashes using exclusive or. The new one is almost certainly bettter.

typo: bettter

&gt; Source/WTF/wtf/Hasher.h:100
&gt; +    bool remainder = string.length() &amp; 1;

Wouldn&apos;t it be more efficient to call String::hash()? In cases where the String hash has already been computed, String::hash() just returns the cached hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748073</commentid>
    <comment_count>10</comment_count>
      <attachid>425430</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-07 14:42:40 -0700</bug_when>
    <thetext>Comment on attachment 425430
Patch

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

&gt; Source/WebCore/platform/graphics/FontTaggedSettings.h:43
&gt; +inline void add(Hasher&amp; hasher, std::array&lt;char, 4&gt; array)

Could use FontTag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748086</commentid>
    <comment_count>11</comment_count>
      <attachid>425430</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-07 14:56:01 -0700</bug_when>
    <thetext>Comment on attachment 425430
Patch

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

&gt;&gt; Source/WTF/wtf/Hasher.h:100
&gt;&gt; +    bool remainder = string.length() &amp; 1;
&gt; 
&gt; Wouldn&apos;t it be more efficient to call String::hash()? In cases where the String hash has already been computed, String::hash() just returns the cached hash.

If we want to compute a hash by hashing a hash, then yes, that avoids scanning the characters again. But we’d have to always do it, not just in cases where the hash is already computed.

But generally common wisdom I have read in research about hashing is that it’s much better to hash characters than to hash an already-computed hash of the characters. I believe enough better that it’s worthwhile to re-scan the characters in the string.

Anyway, I’m open to either approach. What I like about Hasher is that we make the call here in one place.

&gt;&gt; Source/WebCore/platform/graphics/FontTaggedSettings.h:43
&gt;&gt; +inline void add(Hasher&amp; hasher, std::array&lt;char, 4&gt; array)
&gt; 
&gt; Could use FontTag?

We could, but I intentionally did not because this function is not a hash specific to FontTag; it’s hash for any 4-element array of bytes. Could even make it a template so it works for all different 8-bit integer types. Maybe even move it to Hasher.h instead of leaving it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748088</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-07 15:00:37 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; Comment on attachment 425430 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=425430&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/Hasher.h:100
&gt; &gt;&gt; +    bool remainder = string.length() &amp; 1;
&gt; &gt; 
&gt; &gt; Wouldn&apos;t it be more efficient to call String::hash()? In cases where the String hash has already been computed, String::hash() just returns the cached hash.
&gt; 
&gt; If we want to compute a hash by hashing a hash, then yes, that avoids
&gt; scanning the characters again. But we’d have to always do it, not just in
&gt; cases where the hash is already computed.
&gt; 
&gt; But generally common wisdom I have read in research about hashing is that
&gt; it’s much better to hash characters than to hash an already-computed hash of
&gt; the characters. I believe enough better that it’s worthwhile to re-scan the
&gt; characters in the string.
&gt; 
&gt; Anyway, I’m open to either approach. What I like about Hasher is that we
&gt; make the call here in one place.

I see. Your call. I just thought it was sad to have hashing logic and caching of that hash in String, and yet not use it for hashing.

&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/FontTaggedSettings.h:43
&gt; &gt;&gt; +inline void add(Hasher&amp; hasher, std::array&lt;char, 4&gt; array)
&gt; &gt; 
&gt; &gt; Could use FontTag?
&gt; 
&gt; We could, but I intentionally did not because this function is not a hash
&gt; specific to FontTag; it’s hash for any 4-element array of bytes. Could even
&gt; make it a template so it works for all different 8-bit integer types. Maybe
&gt; even move it to Hasher.h instead of leaving it here.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748155</commentid>
    <comment_count>13</comment_count>
      <attachid>425430</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-07 17:00:28 -0700</bug_when>
    <thetext>Comment on attachment 425430
Patch

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/Hasher.h:100
&gt;&gt;&gt;&gt; +    bool remainder = string.length() &amp; 1;
&gt;&gt;&gt; 
&gt;&gt;&gt; Wouldn&apos;t it be more efficient to call String::hash()? In cases where the String hash has already been computed, String::hash() just returns the cached hash.
&gt;&gt; 
&gt;&gt; If we want to compute a hash by hashing a hash, then yes, that avoids scanning the characters again. But we’d have to always do it, not just in cases where the hash is already computed.
&gt;&gt; 
&gt;&gt; But generally common wisdom I have read in research about hashing is that it’s much better to hash characters than to hash an already-computed hash of the characters. I believe enough better that it’s worthwhile to re-scan the characters in the string.
&gt;&gt; 
&gt;&gt; Anyway, I’m open to either approach. What I like about Hasher is that we make the call here in one place.
&gt; 
&gt; I see. Your call. I just thought it was sad to have hashing logic and caching of that hash in String, and yet not use it for hashing.

I’ll land it like this, but it’s not my &quot;final word&quot; on the matter. It’s worth considering improvements and finding a way to measure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748182</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-07 19:19:28 -0700</bug_when>
    <thetext>Committed r275650 (236286@main): &lt;https://commits.webkit.org/236286@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748183</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-07 19:20:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/76377558&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425065</attachid>
            <date>2021-04-02 17:02:54 -0700</date>
            <delta_ts>2021-04-05 16:37:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210402170253.patch</filename>
            <type>text/plain</type>
            <size>87124</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjY3ODdjN2ViNTQ2NzY2NjM4OGZiYWVjZGJhYzc4YTNlODU1YjQxLi5jZjNkZmQ5M2JjYTMzNTA3
Y2ZhNTExOGM4MGE1NWE0NDA1YjJhNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDIgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFJlZHVjZSBieXRlY29kZSBpbnN0
cnVjdGlvbiBjb3VudCBlbWl0dGVkIGZvciBgY2xhc3MgZXh0ZW5kc2AKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDFkZGY1NTI4
OGI3ZDdmZDk3NDM0Y2NiMjlkOWIxMDgxODc4YmYzMC4uN2I4OGM1OTgwNDI5YzMyZGRlOWIyOTcx
MWY4MDYzZTQ3MGRjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1v
dmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaEZ1bmN0aW9u
cy5oOiBFeHBvcnQgaW50SGFzaCBhbmQgcGFpckludEhhc2ggdG8gdGhlIGdsb2JhbCBuYW1lc3Bh
Y2UKKyAgICAgICAgc28gdGhleSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgV1RG
IHByZWZpeC4gVGhpcyBmb2xsb3dzIHRoZSB1c3VhbAorICAgICAgICBXVEYgZGVzaWduIHBhdHRl
cm4gZ2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lk
ZSBXVEYuCisKKyAgICAgICAgKiB3dGYvSGFzaGVyLmg6IERlbGV0ZWQgSW50ZWdlckhhc2hlci4K
KyAgICAgICAgKFdURjo6YWRkKTogQWRkZWQgb3ZlcmxvYWRzIGZvciBTdHJpbmcsIEF0b21TdHJp
bmcsIGFuZCBVUkwuCisKKyAgICAgICAgKiB3dGYvT2JqZWN0SWRlbnRpZmllci5oOgorICAgICAg
ICAoV1RGOjphZGQpOiBBZGRlZCBhIEhhc2hlciBvdmVybG9hZCBmb3IgYW55IE9iamVjdElkZW50
aWZpZXIuCisKKyAgICAgICAgKiB3dGYvUmV0YWluUHRyLmg6IEV4cG9ydCBzYWZlQ0ZFcXVhbCBh
bmQgc2FmZUNGSGFzaCB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQorICAgICAgICBzbyB0aGV5IGNh
biBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBXVEYgcHJlZml4LiBUaGlzIGZvbGxvd3Mg
dGhlIHVzdWFsCisgICAgICAgIFdURiBkZXNpZ24gcGF0dGVybiBnaXZlbiB0aGF0IHRoZXNlIGZ1
bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIFdURi4KKworICAgICAgICAqIHd0
Zi9WZWN0b3JIYXNoLmg6IFJlbW92ZWQgdGhlIFZlY3Rvckhhc2ggdGVtcGxhdGUsIGluc3RlYWQg
anVzdCBzcGVjaWFsaXppbmcKKyAgICAgICAgRGVmYXVsdEhhc2guIFVzZSBjb21wdXRlSGFzaCB0
byBoYXNoIHRoZSBjb250ZW50cyBvZiB0aGUgdmVjdG9yIGluc3RlYWQgb2YKKyAgICAgICAgaGFz
aGluZyB0aGUgaGFzaGVzIG9mIHRoZSBpdGVtcyBpbiB0aGUgdmVjdG9yLiBUaGlzIGlzIGJldHRl
ciBpbiBnZW5lcmFsIGFuZAorICAgICAgICBiZXR0ZXIgZm9yIHRoZSBvbmUgY2FzZSB3aGVyZSB3
ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMsIGZvciBhIFZlY3RvcjxpbnQ+LgorICAgICAgICBX
ZSB3YW50IHRvIGhhc2ggYWxsIHRoZSBpbnRlZ2VycyByYXRoZXIgdGhhbiBoYXNoaW5nIGhhc2hl
cyBvZiBhbGwgdGhlIGludGVnZXJzLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0aGlzIG1lYW5z
IHRoZSBlbGVtZW50cyBvZiB0aGUgVmVjdG9yIG5lZWQgdG8gYmUgaGFzaGFibGUgdXNpbmcKKyAg
ICAgICAgdGhlIEhhc2hlciBtYWNoaW5lcnkuIFRoZSBvbGQgcmVxdWlyZW1lbnQgd2FzIHRoZSB0
aGUgZWxlbWVudHMgaGFkIGEgRGVmYXVsdEhhc2guCisKIDIwMjEtMDQtMDIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFByZWZlclBhZ2VS
ZW5kZXJpbmdVcGRhdGVzTmVhcjYwRlBTRW5hYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzA5ZmRjYzBkZWVkYmI0NDFlOGI3MWEyZTliYjQ5OTliY2IwZjQ2Ni4uZWRlMzkwMzI4NDhjZGNk
ZTcwN2M1MDE3MjA1Yjc5MGM3MWFiN2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAor
MjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBt
aXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRyaWdnZXJIYXNoOjpoYXNoKTogVXNlIGNvbXB1dGVI
YXNoIHRvCisgICAgICAgIGhhc2ggYWxsIHRoZSBmaWVsZHMgaW5zdGVhZCBvZiBhIGN1c3RvbS13
cml0dGVuIGFsZ29yaXRobS4gVGhlIGN1c3RvbQorICAgICAgICBhbGdvcml0aG0gaGFkIHNvbWUg
bWFnaWMgbnVtYmVycywgcmVwZWF0ZWRseSBoYXNoZWQgaGFzaGVzLCBhbmQgY29tYmluZWQKKyAg
ICAgICAgaGFzaGVzIHVzaW5nIGV4Y2x1c2l2ZSBvci4gVGhlIG5ldyBvbmUgaXMgYWxtb3N0IGNl
cnRhaW5seSBiZXR0dGVyLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OkNoYXJhY3RlclNldDo6
aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCB0byBoYXNoIHRoZSBib29sZWFu
IGFuZCB0aGUgY2hhcmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICB1c2luZyBpbnRIYXNoIGFu
ZCBwYWlySW50SGFzaC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOiBNb3ZlZCB0aGUgaGFzaGluZyBoZXJlIGZyb20g
dGhlIGhlYWRlci4gRml4ZWQgdGhlCisgICAgICAgIG1pc3Rha2Ugd2hlcmUgdGhpcyB3YXMgdXNp
bmcgJiBpbnN0ZWFkIG9mIHwgYW5kIHNvIG5vbmUgb2YgdGhlIGJvb2xlYW5zCisgICAgICAgIHdl
cmUgaGF2aW5nIGFueSBlZmZlY3Qgb24gdGhlIGhhc2ggdmFsdWUuCisKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaDogVXNlIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRCBzbworICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHNheSBwdWJsaWM6IGV4cGxpY2l0bHku
IEFsc28gbW92ZWQgYWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBtZW1iZXJzIHRvIHRoZSBib3R0
b20gb2YgdGhlIHN0cnVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIHN0eWxlCisgICAg
ICAgIGZvciBzdHJ1Y3R1cmVzIGFzIG9wcG9zZWQgdG8gY2xhc3Nlcy4gU2luY2UgdGhlIGRhdGEg
bWVtYmVycyBhcmUgdGhlCisgICAgICAgIHByaW1hcnkgaW50ZXJmYWNlLCB0aGV5IGFyZSBmaXJz
dCwgYW5kIGFsbCBmdW5jdGlvbiBtZW1iZXJzIGFyZSBzZWNvbmRhcnkKKyAgICAgICAgYW5kIHNv
IHRoZXkgY29tZSBhZnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHRIYXNo
OjpoYXNoKTogVXNlIGNvbnZlcnRIYXNoIGluc3RlYWQgb2YKKyAgICAgICAgYSBjdXN0b20gd3Jp
dHRlbiBoYXNoIGZ1bmN0aW9uLiBUaGUgY3VzdG9tIHdyaXR0ZW4gZnVuY3Rpb24gd2FzIGNvbWJp
bmluZworICAgICAgICBoYWhlcyB1c2luZyBleGNsdXNpdmUgb3IsIG5vdCBhIGJlc3QgcHJhY3Rp
Y2UsIGFuZCBhbHNvIGhhZCBhIG1pc3Rha2UKKyAgICAgICAgd2hlcmUgaXQgdXNlZCAmIGluc3Rl
YWQgb2YgfCBhbmQgc28gdGhlICJiaXRzIiBsb2NhbCB2YXJpYWJsZSB3YXMgYWx3YXlzIDAuCisK
KyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDogVXNlIEhhc2hUcmFpdHMgaW5zdGVh
ZCBvZiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaDogUmVtb3ZlZCB1bm5lZWRlcyBpbmNsdWRlcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOiBDaGFuZ2VkIENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IGludG8gYQorICAgICAgICBzaW1wbGUgc3RydWN0IHdpdGggbm8gYWRkaXRpb25hbCBm
dW5jdGlvbiBtZW1iZXJzIG9yIHN0YXRpYyBkYXRhIG1lbWJlcnMuCisgICAgICAgIENoYW5nZWQg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHRvIHVzZSBjb21wdXRlSGFzaCB0byBjYWxjdWxh
dGUgdGhlCisgICAgICAgIGhhc2gsIGluc3RlYWQgb2YgSW50ZWdlckhhc2hlci4gUHJvYmFibHkg
YmV0dGVyIHRvIGhhc2ggdGhlIHBvaW50ZXIgb2YKKyAgICAgICAgdGhlIEF0b21TdHJpbmcgcmF0
aGVyIHRoYW4gaGFzaGluZyB0aGUgaGFzaCwgYnV0IGVpdGhlciB3YXksIHdlIHNob3VsZAorICAg
ICAgICBoYXZlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uIGZvciBBdG9tU3RyaW5nIGhhc2hpbmcg
aW4gdGhlIEhhc2hlciBjbGFzcy4KKyAgICAgICAgQWRkZWQgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoVHJhaXRzIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzLiBVc2UgdGhlIHZhbHVlIFVfU0VOVElORUwgZm9yIHRoZSBVQ2hhcjMyIGNoYXJhY3RlciwK
KyAgICAgICAgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIC0xIHVzZWQgYmVmb3JlLCBidXQgc2xp
Z2h0bHkgY2xlYXJlciB3aHkgaXQncyBPSy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3Rl
bUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6IFVzZSBIYXNoTWFwOjplbnN1cmUKKyAg
ICAgICAgaW5zdGVhZCBvZiBIYXNoTWFwOjphZGQgdG8gbWFrZSB0aGUgbG9naWMgc2ltcGxlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDogVXNlIGJvb2wgaW5zdGVhZCBv
ZiB1aW50OF90IGFzIHRoZSBiYXNlIHR5cGUKKyAgICAgICAgZm9yIHRoZSBOby9ZZXMgZW51bWVy
YXRpb24gSXNGb3JQbGF0Zm9ybUZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOiBSZW1vdmVkIHVubmVlZGVkICJ1c2luZyBuYW1lc3BhY2UgV1RGIiwKKyAg
ICAgICAgd2hpY2ggaXMgbm90IG91ciBiZXN0IHByYWN0aWNlLCBlc3BlY2lhbGx5IGdpdmVuIHVu
aWZpZWQgYnVpbGRzLgorICAgICAgICBDaGFuZ2VkIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBp
bnRvIGEgc2ltcGxlIHN0cnVjdCwgcmVtb3ZpbmcgYWxsIHRoZQorICAgICAgICBoYXNoLXJlbGF0
ZWQgbWVtYmVyIGZ1bmN0aW9ucy4gQWxzbyB1c2VkIHN0cnVjdC1zdHlsZSBuYW1pbmcgZm9yIHRo
ZQorICAgICAgICBtZW1iZXJzIHdpdGhvdXQgYW4gIm1fIiBwcmVmaXguIFVzZWQgdGhlIHR5cGUg
Rm9udEZhbWlseU5hbWUgZm9yIHRoZQorICAgICAgICBmYW1pbHkgbmFtZSwgd2hpY2ggbWVhbnMg
d2Ugd2lsbCB1c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbidzIHN5c3RlbQorICAgICAgICBmb3Ig
aGFzaGluZyBhbmQgY29tcGFyaW5nIGZhbWlseSBuYW1lcyBmb3IgZXF1YWxpdHkgd2l0aG91dCBo
YXZpbmcgdG8KKyAgICAgICAgcmVtZW1iZXIgZG8gdG8gc28gZXhwbGljaXRseS4gQ2hhbmdlZCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHRvCisgICAgICAgIHVzZSBjb21wdXRlSGFzaC4g
VGhlIG9sZCB2ZXJzaW9uIGhhZCB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgdG8KKyAgICAg
ICAgaGFuZGxlIE9wdGlvbmFsIGFuZCB3YXMgdW5uZWNlc3NhcmlseSBoYXNoaW5nIGhhc2hlcy4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6IFJl
bmFtZWQgdG8gcmVtb3ZlICJnZXQiCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4g
QWxzbyB1c2Ugc2hvcnRlciBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKyAgICAgICAgbmFt
ZXMgdGhhdCBhcmUgc2luZ2xlIHdvcmRzLCBhbmQgdXBkYXRlZCBzaW5jZSBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkKKyAgICAgICAgaXMgbm93IGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6IFVzZSBzaG9y
dGVyIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IFRvIGNvbXBhcmUgdHdv
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgb2JqZWN0cywKKyAgICAgICAgdXNlIGEgc2ltcGxlciBjb25z
dHJ1Y3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCBWZWN0b3IgYWxyZWFkeQorICAg
ICAgICBoYXMgYW4gPT0gb3BlcmF0b3IgYW5kIHdlIGFyZSB1c2luZyBGb250RmFtaWx5TmFtZSBm
b3IgdGhlIGVsZW1lbnRzCisgICAgICAgIG9mIHRoZSB2ZWN0b3IsIHdoaWNoIGhhcyBhIGNvcnJl
Y3QgPT0gb3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aDo6aGFzaCk6IFVzZSBjb21wdXRlSGFzaCBzaW5jZQorICAgICAgICB0aGUgRm9udEZhbWlseU5h
bWUgaGFzaGluZyBpcyBub3cgY29ycmVjdCwgYW5kIHdlIGNhbiByZWx5IG9uIHRoZQorICAgICAg
ICB3YXkgSGFzaGVyIGtub3dzIGhvdyB0byBpdGVyYXRlIGEgY29sbGVjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSBpcyBub3cgYSBzaW1wbGUgc3RydWN0
LiBBbHNvIHVzZSBjb25zdGV4cHIgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmludmFsaWRhdGUpOiBVc2UgY29weVRvVmVjdG9yT2Y8PiB0byBzaW1wbGlmeSB0aGUKKyAgICAg
ICAgY29kZSB0aGF0IGNhbGxzIGZvbnRDYWNoZUludmFsaWRhdGVkIG9uIGFsbCB0aGUgZm9udCBz
ZWxlY3RvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogVXNl
ICJ1c2luZyIgaW5zdGVhZCBvZiAidHlwZWRlZiIuCisgICAgICAgIFJlbW92ZSBGb250RGVzY3Jp
cHRpb25LZXk6OmNvbXB1dGVIYXNoLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTogQW4gb3Zlcmxv
YWQgb2YgYWRkIGZvciBIYXNoZXIgdG8gaW5jbHVkZSBhCisgICAgICAgIEZvbnREZXNjcmlwdGlv
bktleSBpbiBhIGhhc2gsIHdoaWNoIGp1c3QgbGlzdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuCisg
ICAgICAgIFRoZSBvbGQgdmVyc2lvbiBkaWQgYSBoYXNoIG9mIGhhc2hlcywgYnV0IHRoYXQncyBu
b3QgbmVlZGVkIGFueSBtb3JlLgorICAgICAgICBVcGRhdGVkIEZvbnREZXNjcmlwdGlvbktleUhh
c2ggdG8gdXNlIHRoZSBIYXNoZXIgdmVyc2lvbiBvZiBDb21wdXRlSGFzaC4KKyAgICAgICAgQWRk
ZWQgRm9udEZhbWlseU5hbWUuIENoYW5nZSBGb250Q2FzY2FkZUNhY2hlS2V5IHRvIHVzZSBhIHZl
Y3RvciBvZgorICAgICAgICBGb250RmFtaWx5TmFtZSBpbnN0ZWFkIG9mIEF0b21TdHJpbmcuIElu
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSwgdXNlCisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRCBpbnN0ZWFkIG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECisgICAgICAgIGFu
ZCBhbHNvIGdvdCByaWQgb2YgdGhlIHVubmVlZWRlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFs
dWUpOgorICAgICAgICBVc2UgdGhlIGRlbGV0ZWQgdmFsdWUgb2YgRm9udERlc2NyaXB0aW9uS2V5
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM6OmlzRGVs
ZXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAgIFJlbmFtZWQgZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YSB0byBqdXN0IGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQg
b2YKKyAgICAgICAgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRTZWxlY3Rpb25SYW5nZTo6dW5pcXVlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YWRkKTogQWRkIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRv
IHRoZSBoYXNoCisgICAgICAgIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBjb21iaW5pbmcgdGhlbS4g
Rm9yIG5vdywgdGhpcyBtYWtlcyB0aGUgd2F5CisgICAgICAgIHRoZXkgYXJlIGhhc2hlZCBhIGJp
dCBpbmVmZmljaWVudCwgYnV0IHRoYXQgY2FuIGJlIHJlLXRpZ2h0ZW5lZCB1cCBieQorICAgICAg
ICBpbXByb3ZpbmcgdGhlIGFsZ29yaXRobSBvZiBIYXNoZXIgaWYgd2UgbGlrZS4gU2hvdWxkIGJl
IGZpbmUgZm9yIG91cgorICAgICAgICBuZWVkcyBlaXRoZXIgd2F5LgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oOiBBZGRlZCBvdmVy
bG9hZHMgb2YgdGhlCisgICAgICAgIGFkZChIYXNoZXImKSBmdW5jdGlvbiBmb3Igc3RkOjphcnJh
eTxjaGFyLCA0PiBhbmQgRm9udFRhZ2dlZFNldHRpbmc8VD4uCisgICAgICAgIEdvdCByaWQgb2Yg
bWFueSB1c2VzIG9mIHBhc3MgYnkgcmVmZXJlbmNlIGluc3RlYWQgb2YgdmFsdWUgZm9yIEZvbnRU
YWcsCisgICAgICAgIHNpbmNlIGl0IGZpdHMgaW50byBhIDMyLWJpdCByZWdpc3RlciBhbmQgYnRo
IG1vcmUgc291cmNlIGNvZGUgYW5kIGxlc3MKKyAgICAgICAgZWZmaWNpZW50IHRvIHBhc3MgYnkg
dmFsdWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6IFJlbW92
ZWQgInVzaW5nIFdURjo6cGFpckludEhhc2giIHNpbmNlCisgICAgICAgIHRoYXQncyBub3cgZG9u
ZSBpbiB0aGUgV1RGIGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQKKyAgICAgICAgInVzaW5nIFdU
Rjo6R2VuZXJpY0hhc2hUcmFpdHMiLCB3aGljaCB3YXMgdW5oZWxwZnVsLiBUaGUgR2VuZXJpY0hh
c2hUcmFpdHMKKyAgICAgICAgdGVtcGxhdGUgaXMgb25seSByZWFsbHkgbmVlZGVkIHdoZW4gc3Bl
Y2lhbGl6aW5nIEhhc2hUcmFpdHMsIHdoaWNoCisgICAgICAgIGFscmVhZHkgaGFzIHRvIGJlIGRv
bmUgd2l0aGluIHRoZSBXVEYgbmFtZXNwYWNlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlCisgICAg
ICAgIHNob3VsZCBqdXN0IHVzZSBIYXNoVHJhaXRzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg6IFVzZSBIYXNoVHJhaXRz
CisgICAgICAgIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQu
Y3BwOgorICAgICAgICBNb3ZlIHRoZSBkYXRhIG1lbWJlcnMgdG8gdGhlIHRvcCBvZiB0aGUgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkgc3RydWN0LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNvbXB1dGVIYXNoIGZ1bmN0aW9uIGFuZCBXVEYgcHJlZml4IGZyb20gc2FmZUNGRXF1YWwuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOiBD
YWxsIHRoZSBIYXNoZXIgdmVyc2lvbgorICAgICAgICBvZiBjb21wdXRlSGFzaCBkaXJlY3RseSB0
byBoYXNoIHRoZSB0d28gaXRlbXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2NhZGVMaXN0UGFyYW1l
dGVyczo6aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCBpbnN0ZWFkIG9mIElu
dGVnZXJIYXNoZXIuIEFsc28gcmVuYW1lZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICBzdHJ1
Y3QgZnJvbSBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gg
dG8KKyAgICAgICAgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIFJlbW92ZWQgbm93LXVubmVlZGVkIFdURiBwcmVm
aXhlcyBmcm9tIGNhbGxzIHRvIHNhZmVDRkVxdWFsLgorCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFz
aFRyYWl0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlRm9udEhhc2gpOiBVc2UgY29tcHV0ZUhhc2ggaW5zdGVh
ZCBvZiBJbnRlZ2VySGFzaGVyLgorICAgICAgICBTdGlsbCBub3QgZ3JlYXQgdGhhdCB3ZSBoYXNo
IGEgaGFzaCBoZXJlLCBidXQgd2UgY2FuIGltcHJvdmUgdGhhdCBsYXRlci4KKworICAgICAgICAq
IHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZSk6IFJlbW92
ZWQgdW5uZWVkZWQKKyAgICAgICAgV1RGTW92ZSBvbiBPYmplY3RJZGVudGlmaWVyLCB3aGljaCBh
cmUganVzdCBpbnRlZ2Vycywgc28gbW92ZSB2cy4gY29weQorICAgICAgICBpcyBub3QgYW4gaW1w
b3J0YW50IGRpc3RpbmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVu
dElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBVc2UgY29tcHV0ZUhhc2gKKyAgICAgICAgaW5zdGVh
ZCBvZiBjb21iaW5pbmcgaW50SGFzaCB3aXRoIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeS4gVGhp
cyBmaXhlcworICAgICAgICB0d28gbWlzdGFrZXM6IG9uZSBpcyB0aGF0IHRoZXJlIGlzIG5vIG5l
ZWQgdG8gaGFzaCBhIGhhc2guIFRoZSBzZWNvbmQgaXMKKyAgICAgICAgdGhhdCBpbnRIYXNoIHRh
a2VzIGEgMzItYml0IGludGVnZXIgYXMgaXRzIHBhcmFtZXRlciwgc28gaGlnaCBiaXRzCisgICAg
ICAgIG9mIG9iamVjdCBpZGVudGlmaWVycyB3ZXJlIGRpc2NhcmRlZCB1bm5lY2Vzc2FyaWx5Lgor
CiAyMDIxLTA0LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFBlbmRpbmdJbWFnZUJpdG1hcCBnZXRzIGNyZWF0ZWQgb24gYSBzdG9wcGVkIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjVkNjc1MTdmZjIwYzc1Yzg3MGU2MmUwMTg5YWEy
YjlkOWU0YjU4MS4uYTA5YjJlYTk3ZjZmOWQ3OWI3MTZhYjAzMzIzYmRhOTNkNWFkNGYxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hl
ciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNo
IGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29tYmluaW5nIGlu
dEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMKKyAgICAgICAg
dHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggYSBoYXNo
LiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMyLWJpdCBpbnRl
Z2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBvYmplY3QgaWRl
bnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAgICAqIFNoYXJl
ZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW06CisgICAgICAgICgtW1dLQnJv
d3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgcGFp
ckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0YWtlOiBwYWlySW50SGFzaCB0YWtl
cyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMKKyAgICAgICAgb2Ygb2JqZWN0IGlk
ZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJpbHkuCisKIDIwMjEtMDQtMDIgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVBdIFBvd2VyIHJl
Z3Jlc3Npb246IGF1ZGlvIGhhcmR3YXJlIGlzIGNvbmZpZ3VyZWQgZm9yIDEyOCBmcmFtZSBwcmVm
ZXJyZWQgYnVmZmVyIHNpemUgZHVyaW5nIFZpZGVvQXVkaW8gcGxheWJhY2sKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA2MGM0Mzg5MjBmMzQ5OTYxMzgzYjYxNjRhZmYyYmU3YjYxNzhl
YjU4Li5mMTBiODY5NmRiNWQ4ZjlhN2EwYThjNTI2YzkyZjc3MzZjODgwODFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDQtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBIYXNoZXIgbW9yZSwgcmVtb3Zl
IEludGVnZXJIYXNoZXIsIGZpeCBoYXNoaW5nLXJlbGF0ZWQgbWlzdGFrZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9CaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHMuCisKIDIwMjEtMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVc2UgTUFDSF9QT1JUX1ZBTElEKCkgd2hlbiB3YW50aW5nIHRvIGNoZWNrIGlmIGEg
bWFjaCBwb3J0IGlzIHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAppbmRleCBkMTQ3NTQxODMyNDcyNTU0ODc1OTlhZTliNDYyMDViNmQ1ZDdk
ZTI4Li5hODRiZGExNmVmYjdjYjdjMzI1YWM2YzIwN2IwOTA3M2MxODIzMDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgIENoZWNrcG9pbnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gaW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGlj
IEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9m
ZnNldCAtIDEpOyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCmluZGV4IDFiYWU3ZmRiOGNlMmQ4NWEyZGE2NGM3ODky
MTdlMGUxZWM0MWE1MjIuLjY1OGUyY2ZjNWVjZTgyMzQ5NzZiNjM0ZGU4ZTM3ZjIwZDZmMGZjODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaApAQCAtMTU0
LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CiAgICAgc3Rk
OjphcnJheTxBYnN0cmFjdEhlYXAsIDE2PiBtX3NtYWxsSW5kaWNlczsKICAgICAKLSAgICBzdHJ1
Y3QgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPHB0
cmRpZmZfdD4geworICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8cHRyZGlmZl90PiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xvdCA9IDE7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBhZTU3OGEzMjFiOGI3NTIzY2Q1ZjRiMjUzNDI4MDg3OWVlNWVmMDFmLi5mZTkwMDc1MDVl
OGJiNDEyYjYzNmE5YzNiYzVjN2U2Yjk3MTE0YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC01OTAsNyArNTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZVNldCYgbGl2ZSA9IG1fbGl2ZUluVG9Ob2RlLmZpbmQobm9kZSktPnZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBoaWdoUGFyZW50SW5kZXggPSBub2RlLT5pbmRleCgpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICB1aW50NjRfdCBoYXNoID0gV1RGOjppbnRIYXNoKGhpZ2hQYXJl
bnRJbmRleCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2luY2UgaW50SGFzaCByZXR1cm5zIGEg
MzItYml0IHVuc2lnbmVkIGludGVnZXIsIGl0J3Mgbm90IGNsZWFyIHdoeSBpdCdzIGhlbHBmdWwg
dG8gc3RvcmUgaXQgaW4gYSB1aW50NjRfdC4KKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBp
bnRIYXNoKGhpZ2hQYXJlbnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoaGFzaCA+PSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSArIDEpICogT3B0aW9uczo6dmFsaWRhdGVBYnN0cmFjdEludGVycHJl
dGVyU3RhdGVQcm9iYWJpbGl0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCmluZGV4IDUzN2VlNTY1MjBlZDU4NDMwMWY0ODIwNDk2MmNmMjc4NmJkYjM0ZmQuLjA1NGUz
MWVkNmJhNGEyODllOGVjYzVlNmQ2NzE4YWVlNjc2MTA1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDE2LDcgKzQxNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGludCoganVtcFRhcmdldDsKICAgICB9OwogCi0gICAgc3Ry
dWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2Rl
ZEpTVmFsdWU+IHsKKyAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IHRydWU7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oIGIvU291cmNlL1dURi93
dGYvSGFzaEZ1bmN0aW9ucy5oCmluZGV4IDVmOTBmNGVhNzYxMTgxYmZlNGE0NTA3N2IxMmQxODUx
ZTdmODljNDkuLmZmZDUyMmNlMjkwOGQ3ZmVlNzJhYmIwNDYxNGFhZjQ0MTA1YjZiNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoRnVuY3Rpb25zLmgKQEAgLTI3NSwzICsyNzUsNSBAQCBuYW1lc3BhY2UgV1RGIHsKIHVz
aW5nIFdURjo6RGVmYXVsdEhhc2g7CiB1c2luZyBXVEY6OkludEhhc2g7CiB1c2luZyBXVEY6OlB0
ckhhc2g7Cit1c2luZyBXVEY6OmludEhhc2g7Cit1c2luZyBXVEY6OnBhaXJJbnRIYXNoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAppbmRleCA1MmViMjM0MjExZDM2OWM4ZTNlMDlhYzc1YmQ4YzQ0ZGEwNjM5NTVlLi4yODcyNTY4
ZTkzNjc5NzE3YzMxNGQwZTNjYTE2Yjc3MjljZDA0NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDMxICsyMCwxNCBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBEZXByZWNhdGVkLiBV
c2UgSGFzaGVyIGluc3RlYWQuCi1jbGFzcyBJbnRlZ2VySGFzaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2b2lkIGFkZCh1aW50MzJfdCBpbnRlZ2VyKQot
ICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hl
cjsKLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJfdCBjb21wdXRlSGFz
aChjb25zdCBUeXBlcyYuLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gT3Ro
ZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+LCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfdW5zaWduZWQ8VW5zaWdu
ZWRJbnRlZ2VyPjo6dmFsdWUgJiYgc2l6ZW9mKFVuc2lnbmVkSW50ZWdlcikgPD0gc2l6ZW9mKHVp
bnQzMl90KSwgdm9pZD4gYWRkKEhhc2hlciYsIFVuc2lnbmVkSW50ZWdlcik7CkBAIC0xMTIsNiAr
OTUsMjcgQEAgaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBmbG9hdCBudW1iZXIpCiAg
ICAgYWRkKGhhc2hlciwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihudW1iZXIpKTsKIH0KIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBib29sIHJlbWFpbmRlciA9IHN0cmluZy5sZW5ndGgoKSAmIDE7CisgICAgdW5zaWduZWQgcm91
bmRlZExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSAtIHJlbWFpbmRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm91bmRlZExlbmd0aDsgaSArPSAyKQorICAgICAgICBhZGQoaGFzaGVy
LCAoc3RyaW5nW2ldIDw8IDE2KSB8IHN0cmluZ1tpICsgMV0pOworICAgIGlmIChyZW1haW5kZXIp
CisgICAgICAgIGFkZChoYXNoZXIsIHN0cmluZ1tyb3VuZGVkTGVuZ3RoXSk7Cit9CisKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQorewor
ICAgIC8vIENob3NlIHRvIGhhc2ggdGhlIHBvaW50ZXIgaGVyZS4gQXNzdW1pbmcgdGhpcyBpcyBi
ZXR0ZXIgdGhhbiBoYXNoaW5nIHRoZSBjaGFyYWN0ZXJzIG9yIGhhc2hpbmcgdGhlIGFscmVhZHkt
Y29tcHV0ZWQgaGFzaCBvZiB0aGUgY2hhcmFjdGVycy4KKyAgICBhZGQoaGFzaGVyLCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihzdHJpbmcuaW1wbCgpKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYWRkKGhhc2hlciwgdXJsLnN0
cmluZygpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRW51bWVyYXRpb24+IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPEVudW1lcmF0aW9uPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXIm
IGhhc2hlciwgRW51bWVyYXRpb24gdmFsdWUpCiB7CiAgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nh
c3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFbnVtZXJhdGlvbj4+KHZhbHVlKSk7CkBAIC0xODYs
NCArMTkwLDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpCiAKIHVzaW5nIFdURjo6Y29tcHV0ZUhh
c2g7CiB1c2luZyBXVEY6Okhhc2hlcjsKLXVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09iamVjdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XVEYvd3Rm
L09iamVjdElkZW50aWZpZXIuaAppbmRleCBmOWM2N2I2M2I1ZTI2YTQwYjRhYWI1OGMwMTRkNWY0
NzBhNjA4NTUzLi44ODg1YWEzMWIyOTU2MWQ5MDBmNzUyZWIzZmViMzc4ZjVkNDQzOTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvT2JqZWN0SWRlbnRpZmllci5oCkBAIC0xMzEsNiArMTMxLDExIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBPYmplY3RJZGVudGlmaWVyPFQ+IG1ha2VPYmplY3RJZGVudGlmaWVy
KHVpbnQ2NF90IGlkCiAgICAgcmV0dXJuIE9iamVjdElkZW50aWZpZXI8VD4geyBpZGVudGlmaWVy
IH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgT2JqZWN0SWRlbnRpZmllcjxUPiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIs
IGlkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPYmplY3RJZGVudGlmaWVySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
T2JqZWN0SWRlbnRpZmllcjxUPiYgaWRlbnRpZmllcikgeyByZXR1cm4gaW50SGFzaChpZGVudGlm
aWVyLm1faWRlbnRpZmllcik7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPYmplY3RJ
ZGVudGlmaWVyPFQ+JiBhLCBjb25zdCBPYmplY3RJZGVudGlmaWVyPFQ+JiBiKSB7IHJldHVybiBh
ID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oIGIvU291cmNl
L1dURi93dGYvUmV0YWluUHRyLmgKaW5kZXggYzdmYjc0NDEwNTU2MWZkNjE1ODg4OGUzY2YwYWVm
OWRiMzQ2NWEyZi4uNGM1OTg0ZWZkNjAxN2EyYzY4ZTUyNjJmOGNlY2I1ZGEyNTgzZTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
UmV0YWluUHRyLmgKQEAgLTQwMiw2ICs0MDIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBk
eW5hbWljX29iamNfY2FzdChpZCBvYmplY3QpCiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5n
IFdURjo6YWRvcHRDRjsKIHVzaW5nIFdURjo6cmV0YWluUHRyOwordXNpbmcgV1RGOjpzYWZlQ0ZF
cXVhbDsKK3VzaW5nIFdURjo6c2FmZUNGSGFzaDsKIAogI2lmZGVmIF9fT0JKQ19fCiB1c2luZyBX
VEY6OmFkb3B0TlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKaW5kZXggYzM3Mzk0ODhkZTg1YzM4ZWVjZDY3MWZl
NzAzMjE3ZjM5M2U5YzIwYi4uOTM4MjFhMjdlNWY4YjUwNDIxYWI3NmFkNzdjOWM5YjI0NWNjYmUw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1ZlY3Rvckhhc2guaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwyOCArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKICNpbmNsdWRl
ICJIYXNoZXIuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXN0cnVjdCBWZWN0b3JIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB2YWx1ZSA6IHZlY3RvcikKLSAgICAgICAgICAgIGhhc2hlci5hZGQoRGVmYXVsdEhhc2g8VD46
Omhhc2godmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA9PSBiOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gc3RydWN0IERlZmF1bHRIYXNoPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHZlY3Rvcik7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotc3RydWN0IERlZmF1bHRIYXNo
PFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9ySGFzaDxULCBpbmxpbmVDYXBhY2l0
eT4geyB9OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAppbmRleCBjNTBiZjE3Yjk2YmQ3MzAwODJlM2MwMWQ2
OTdiNjJkNjQ1OWNkYzI0Li5hYzU1OTJlYmM2MjI1OTRlNDU4MWEzNjBlODIzYzFiN2JmNmM2YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25SdWxlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRF
eHRlbnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsMjMgKzg5LDEyIEBAIHN0cnVjdCBUcmlnZ2VyIHsKIHN0
cnVjdCBUcmlnZ2VySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVHJpZ2dl
ciYgdHJpZ2dlcikKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSA/IDEwNjE5ODYzIDogNDA5NjAwMDE7Ci0gICAgICAgIGlmICgh
dHJpZ2dlci51cmxGaWx0ZXIuaXNOdWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49IFN0cmluZ0hh
c2g6Omhhc2godHJpZ2dlci51cmxGaWx0ZXIpOwotICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50
SGFzaChoYXNoLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPjo6aGFzaCh0cmlnZ2VyLmZsYWdz
KSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiA6IHRyaWdnZXIuY29u
ZGl0aW9ucykKLSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChjb25kaXRpb24p
OwotCi0gICAgICAgIGhhc2ggXj0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpZ2dlci5j
b25kaXRpb25UeXBlKTsKLSAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaCh0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgdHJpZ2dlci51cmxGaWx0
ZXIsIHRyaWdnZXIuZmxhZ3MsIHRyaWdnZXIuY29uZGl0aW9ucywgdHJpZ2dlci5jb25kaXRpb25U
eXBlKTsKICAgICB9Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUcmlnZ2VyJiBhLCBj
b25zdCBUcmlnZ2VyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDBk
NTE4MzNmNWMwNjg1YmI4ODhlM2FhMjE3N2MzODdmNDM3NmE1NDQuLjRlMjVjNzJlZGVhYWY1NzU5
ZWRiNjBmMTJmNmVmMDZhNGI0ZWMxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9UZXJtLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTE2OCwxMSArMTY5LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNo
KFdURjo6cGFpckludEhhc2goV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVyc1swXSksIFdURjo6aW50
SGFzaChtX2NoYXJhY3RlcnNbMV0pKSwgbV9pbnZlcnRlZCk7CisgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZUhhc2gobV9pbnZlcnRlZCwgbV9jaGFyYWN0ZXJzKTsKICAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2ludmVydGVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWlu
dDY0X3QgbV9jaGFyYWN0ZXJzWzJdIHsgMCwgMCB9OworICAgICAgICBzdGQ6OmFycmF5PHVpbnQ2
NF90LCAyPiBtX2NoYXJhY3RlcnMgeyAwLCAwIH07CiAgICAgfTsKIAogICAgIHN0cnVjdCBHcm91
cCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmNwcApp
bmRleCAxM2Y5ZjQ5NjY5YmI2OTQ3YTA0NzRiNGJjNzQxNWYzY2Y0MmY0MTY2Li4wOTgxNjI2ZWZh
M2NhN2RjN2Y4YTI5ZWQ4ZmQwN2E5NWQ0YmM1ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAKQEAgLTEzNyw2ICsxMzcsNDMgQEAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGIpCiAgICAgOwogfQogCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1bnNpZ25lZCBiaXRzID0gY29udGV4dC5pc0hU
TUxEb2N1bWVudCAgICAgICAgICAgICAgICAgIDw8IDAKKyAgICAgICAgfCBjb250ZXh0Lmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gICAgICAgICAgICAgICAgIDw8IDEKKyAgICAgICAgfCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIKKyAgICAg
ICAgfCBjb250ZXh0LnVzZVN5c3RlbUFwcGVhcmFuY2UgICAgICAgICAgICAgICAgICAgICAgIDw8
IDMKKyAgICAgICAgfCBjb250ZXh0LmFzcGVjdFJhdGlvRW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDQKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yQ29udHJhc3RFbmFibGVkICAgICAg
ICAgICAgICAgICAgICAgIDw8IDUKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yRmlsdGVyRW5hYmxl
ZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDYKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yTWl4
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDcKKyAgICAgICAgfCBjb250ZXh0
LmNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQgICAgICAgICAgICAgICAgIDw8IDgKKyAgICAgICAg
fCBjb250ZXh0LmNvbnRhaW5tZW50RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDkK
KyAgICAgICAgfCBjb250ZXh0LmNzc0NvbG9yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDEwCisgICAgICAgIHwgY29udGV4dC5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgICAg
ICAgICAgICAgICAgICA8PCAxMQorICAgICAgICB8IGNvbnRleHQuaW5kaXZpZHVhbFRyYW5zZm9y
bVByb3BlcnRpZXNFbmFibGVkICAgICAgPDwgMTIKKyNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQorICAgICAgICB8IGNvbnRleHQubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQgICAgICAgPDwgMTMKKyNlbmRpZgorICAgICAgICB8IGNvbnRleHQub3ZlcnNjcm9s
bEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgMTQKKyAgICAgICAgfCBjb250ZXh0
LnJlbGF0aXZlQ29sb3JTeW50YXhFbmFibGVkICAgICAgICAgICAgICAgIDw8IDE1CisgICAgICAg
IHwgY29udGV4dC5zY3JvbGxCZWhhdmlvckVuYWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAx
NgorICAgICAgICB8IGNvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkICAgICAgICAg
ICAgICAgPDwgMTcKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgICAgICB8IGNvbnRl
eHQudGV4dEF1dG9zaXppbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgPDwgMTgKKyNlbmRp
ZgorI2lmIEVOQUJMRShDU1NfVFJBTlNGT1JNX1NUWUxFX09QVElNSVpFRF8zRCkKKyAgICAgICAg
fCBjb250ZXh0LnRyYW5zZm9ybVN0eWxlT3B0aW1pemVkM0RFbmFibGVkICAgICAgICAgIDw8IDE5
CisjZW5kaWYKKyAgICAgICAgfCBjb250ZXh0LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IgIDw8IDIwCisgICAgICAgIHwgY29udGV4dC5mb2N1c1Zpc2libGVFbmFibGVk
ICAgICAgICAgICAgICAgICAgICAgICA8PCAyMQorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCisgICAgICAgIHwgY29udGV4dC5hdHRhY2htZW50RW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAyMgorI2VuZGlmCisgICAgICAgIHwgY29udGV4dC5tb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyMzsgLy8gVGhpcyBpcyBtdWx0aXBsZSBiaXRz
LCBzbyBrZWVwIGl0IGxhc3QuCisgICAgYWRkKGhhc2hlciwgY29udGV4dC5iYXNlVVJMLCBjb250
ZXh0LmNoYXJzZXQsIGJpdHMpOworfQorCiBib29sIENTU1BhcnNlckNvbnRleHQ6OmlzUHJvcGVy
dHlSdW50aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
Q29udGV4dC5oCmluZGV4IDhlMGI4N2Y3YWE3NjBlNmVmMjc2YmQ2MzJlZmZiMGFmYWQ5MWU2ZTYu
LjQ5NTYwZDgxYzg1OTBmOTBmZGJhNTRlYTUyMTU1MmNjZGRjNGQwZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCkBAIC0zMCwyMCArMzAsMTYgQEAK
ICNpbmNsdWRlICJTdHlsZVJ1bGVUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUg
PHd0Zi9VUkxIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29u
dGV4dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBVUkwgYmFz
ZVVSTDsKICAgICBTdHJpbmcgY2hhcnNldDsKQEAgLTU3LDggKzUzLDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKICAgICBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotCiAgICAgLy8gU2V0dGluZ3MuCiAgICAgYm9vbCBhc3BlY3RS
YXRpb0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgY29sb3JDb250cmFzdEVuYWJsZWQgeyBm
YWxzZSB9OwpAQCAtOTAsNzAgKzg0LDI5IEBAIHB1YmxpYzoKICAgICBib29sIGF0dGFjaG1lbnRF
bmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCi0gICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdDsKKyAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUsIGNv
bnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJD
b250ZXh0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOworICAgIGJvb2wgaXNQcm9wZXJ0eVJ1
bnRpbWVEaXNhYmxlZChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBVUkwgY29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkgY29uc3Q7CiB9OwogCiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKK3ZvaWQgYWRkKEhhc2hlciYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKKwogV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwogCiBzdHJ1Y3QgQ1NTUGFyc2Vy
Q29udGV4dEhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gdXNl
IFdURjo6SGFzaGVyLgotCi0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSAwOwotICAgICAgICBpZiAo
IWtleS5iYXNlVVJMLmlzTnVsbCgpKQotICAgICAgICAgICAgaGFzaCBePSBXVEY6OlVSTEhhc2g6
Omhhc2goa2V5LmJhc2VVUkwpOwotICAgICAgICBpZiAoIWtleS5jaGFyc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChrZXkuY2hhcnNldCk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBiaXRzID0ga2V5LmlzSFRNTERvY3VtZW50ICAgICAgICAg
ICAgICAgICAgPDwgMAotICAgICAgICAgICAgJiBrZXkuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biAgICAgICAgICAgICAgICAgPDwgMQotICAgICAgICAgICAgJiBrZXkuaXNDb250ZW50T3BhcXVl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMgotICAgICAgICAgICAgJiBrZXkudXNlU3lz
dGVtQXBwZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgICAgPDwgMwotICAgICAgICAgICAgJiBr
ZXkuYXNwZWN0UmF0aW9FbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNAotICAgICAg
ICAgICAgJiBrZXkuY29sb3JDb250cmFzdEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgPDwg
NQotICAgICAgICAgICAgJiBrZXkuY29sb3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgNgotICAgICAgICAgICAgJiBrZXkuY29sb3JNaXhFbmFibGVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgNwotICAgICAgICAgICAgJiBrZXkuY29uc3RhbnRQcm9wZXJ0aWVz
RW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgOAotICAgICAgICAgICAgJiBrZXkuY29udGFpbm1l
bnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgOQotICAgICAgICAgICAgJiBrZXku
Y3NzQ29sb3I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMTAKLSAgICAgICAg
ICAgICYga2V5LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8IDEx
Ci0gICAgICAgICAgICAmIGtleS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQg
ICAgICA8PCAxMgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgICAg
ICAgICAmIGtleS5sZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8PCAx
MwotI2VuZGlmCi0gICAgICAgICAgICAmIGtleS5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAg
ICAgICAgICAgICAgICA8PCAxNAotICAgICAgICAgICAgJiBrZXkucmVsYXRpdmVDb2xvclN5bnRh
eEVuYWJsZWQgICAgICAgICAgICAgICAgPDwgMTUKLSAgICAgICAgICAgICYga2V5LnNjcm9sbEJl
aGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE2Ci0gICAgICAgICAgICAmIGtl
eS5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQgICAgICAgICAgICAgICA8PCAxNwotI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgICAgICAmIGtleS50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAxOAotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19U
UkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVEXzNEKQotICAgICAgICAgICAgJiBrZXkudHJhbnNmb3Jt
U3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQgICAgICAgICAgPDwgMTkKLSNlbmRpZgotICAgICAgICAg
ICAgJiBrZXkudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwgMjAK
LSAgICAgICAgICAgICYga2V5LmZvY3VzVmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDIxCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICAgICAgICAgICYg
a2V5LmF0dGFjaG1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCi0jZW5k
aWYKLSAgICAgICAgICAgICYga2V5Lm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDIzOyAvLyBLZWVwIHRoaXMgbGFzdC4KLSAgICAgICAgaGFzaCBePSBXVEY6Omlu
dEhhc2goYml0cyk7Ci0gICAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29t
cHV0ZUhhc2goY29udGV4dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJldHVybiBhID09IGI7
IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsK
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQ+IHsKICAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4
dCYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90LmJhc2VVUkwpIFVSTChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBX
ZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuYmFzZVVSTC5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGM3YTcwOWEwYTI0MTI0NDNkNDNmMTdmNmZhNWYzMTJkOTliMGEzY2MuLjI3
MmEyYjBlN2Q1MzcyNWE2ZDU0MzljOTI1NzVhYWZkMDliZWIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgRm9ybUVs
ZW1lbnRLZXlIYXNoOjpoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkpCiAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoRm9ybUVsZW1lbnRLZXkpPigma2V5KTsK
IH0KIAotc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9ybUVsZW1lbnRLZXk+IHsKK3N0cnVjdCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHMg
OiBIYXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3Qp
IEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IDgzZWRkOWU5
MjU0OWZhYWVmMTI1MDVlMTUzZWNmNzJmZWI5MzFmYTguLmNlYjg0ZTk2MDIwZDg4OGVmNTZhNjJk
NGJhYWU0MzY1ZjAzOTExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAogI2lmIEVOQUJMRShUSFVOREVSKQogI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBl
cy5oIgpAQCAtMjA1LDggKzIwMyw2IEBAIHByaXZhdGU6CiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNl
c3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKLXB1YmxpYzoKLQogcHJvdGVjdGVk
OgogICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKICAgICBj
b25zdCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0YW5jZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCAwODcwMmQ0Yzc5MGNiOTYzYWJhMTRhNzI5NzE4MjVmNGMwNDJmZDc5Li5i
MTFhODc2OWU4NjBiOTNiMDlkNzMyNDFlNWJlYmQ1ODA4YjYyYjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTM1LDYzICs1MzUsMzIgQEAgdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEEKIH0KICNlbmRpZgogCi1jbGFzcyBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleSB7Ci1wdWJsaWM6Ci0gICAgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGUsIFVDaGFyMzIgY2hhcmFjdGVyLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9u
dCkKLSAgICAgICAgOiBsb2NhbGUobG9jYWxlKQotICAgICAgICAsIGNoYXJhY3RlcihjaGFyYWN0
ZXIpCi0gICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9ybUZvbnQgPT0gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcykKLSAgICB7Ci0gICAgfQotCi0gICAgQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IGNoYXJh
Y3RlcigtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlciA9PSAtMTsgfQotCi0gICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhl
ci5jaGFyYWN0ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZv
bnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRy
dWU7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eUhhc2g7Ci0KK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CiAgICAgQXRvbVN0cmlu
ZyBsb2NhbGU7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CiAgICAgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCB7IGZhbHNlIH07CiB9OwogCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleSYga2V5KQotICAgIHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAg
ICAgIGhhc2hlci5hZGQoa2V5LmNoYXJhY3Rlcik7Ci0gICAgICAgIGhhc2hlci5hZGQoa2V5Lmlz
Rm9yUGxhdGZvcm1Gb250KTsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkubG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsK
LSAgICB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikKK3sKKyAgICByZXR1cm4g
YS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5p
c0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250OworfQogCitzdHJ1Y3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXku
bG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCitz
dHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAoTm90
TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7
IH0gfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsg
fQorfTsKKwogLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhN
RTogU2hvdWxkbid0IHRoZXNlIGJlIFdlYWtQdHJzPwotdHlwZWRlZiBIYXNoTWFwPENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBXVEY6
OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4+IENoYXJhY3Rl
ckZhbGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxs
YmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKKy8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2lu
ZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgordXNp
bmcgQ2hhcmFjdGVyRmFsbGJhY2tNYXAgPSBIYXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2hUcmFpdHM+OwordXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8Y29u
c3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPjsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNjA4LDEyICs1NzcsOCBAQCBSZWZQ
dHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hh
cmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24o
KS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxh
dGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAx
KTsKICAgICB9CiAKLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwot
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKFdURk1vdmUoa2V5KSwgbnVsbHB0cik7Ci0KLSAgICBGb250KiYgZmFsbGJhY2tGb250
ID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJh
Y2tGb250KSB7CisgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0g
SXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vIH07CisgICAgcmV0dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsmXSB7CiAgICAgICAgIFVDaGFyIGNvZGVV
bml0c1syXTsKICAgICAgICAgdW5zaWduZWQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBpZiAo
VV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNjI0LDEzICs1ODksMTEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rlciwg
Y29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQotCi0gICAg
ICAgIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENh
Y2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5n
ZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxsYmFja0ZvbnQ7CisgICAgICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0Zv
clBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0
cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAg
ICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBmb250OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBGb250OjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKaW5kZXggYzdkYTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4u
NjUzYjMzOGI3YzM0MjU2MjcyMjQ5NjExZTI3MDFhYzVkMjYzZTk2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtNjQsNyArNjQsNyBAQCBzdHJ1Y3QgR2x5cGhE
YXRhOwogCiBlbnVtIEZvbnRWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNt
YWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlh
bnQgfTsKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0
Y2ggfTsKLWVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9
OworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAKICNp
ZiBVU0UoQ09SRV9URVhUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0
YWJsZVRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAppbmRleCBlZGYyZmUwNDczYWYzYTg2MDYxNTMxNzQzODMyMWJkOWNhOWUwMjg2Li5mZGQ1
NTQ4ZjBmNTRjMWFjYTdmYWNhZWViODgwNmU4MTI0MGI5YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDg4ICs0Nyw2OCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLXN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV9mYW1pbHkoZmFtaWx5KQotICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCi0gICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHQpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRp
b25LZXkodCkKLSAgICB7IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb25LZXkg
IT0gb3RoZXIubV9mb250RGVzY3JpcHRpb25LZXkKLSAgICAgICAgICAgIHx8IG1fZm9udEZhY2VG
ZWF0dXJlcyAhPSBvdGhlci5tX2ZvbnRGYWNlRmVhdHVyZXMKLSAgICAgICAgICAgIHx8IG1fZm9u
dEZhY2VDYXBhYmlsaXRpZXMgIT0gb3RoZXIubV9mb250RmFjZUNhcGFiaWxpdGllcykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fZmFtaWx5LmltcGwoKSA9PSBvdGhl
ci5tX2ZhbWlseS5pbXBsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KG1fZmFtaWx5LmlzTnVsbCgpIHx8IG90aGVyLm1fZmFtaWx5LmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkpOwotICAgIH0KK0Zv
bnRGYW1pbHlOYW1lOjpGb250RmFtaWx5TmFtZSgpID0gZGVmYXVsdDsKIAotICAgIEZvbnREZXNj
cmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5
OwotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwotICAgIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKLX07
CitpbmxpbmUgRm9udEZhbWlseU5hbWU6OkZvbnRGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCisgICAgOiBtX25hbWUgeyBuYW1lIH0KK3sKK30KIAotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZm9udEtleSkKLSAgICB7Ci0gICAgICAgIEludGVnZXJIYXNo
ZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZh
bWlseU5hbWVIYXNoKGZvbnRLZXkubV9mYW1pbHkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChmb250
S2V5Lm1fZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgICAgICBoYXNoZXIu
YWRkKGZvbnRLZXkubV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7Ci0gICAgICAgIGlmIChhdXRv
IHdlaWdodCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAg
ICAgICBoYXNoZXIuYWRkKHdlaWdodC0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmb250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRp
ZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aC0+dW5pcXVlVmFsdWUoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gc2xvcGUgPSBmb250S2V5Lm1f
Zm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZChzbG9w
ZS0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgcmV0dXJuIGhh
c2hlci5oYXNoKCk7Ci0gICAgfQoraW5saW5lIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRGYW1pbHlO
YW1lOjpzdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7
Ci0gICAgfQoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250RmFtaWx5
TmFtZSYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGhhc2ggdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIG5hbWUgaW5zdGVhZCBvZiBoYXNoaW5nIGEgaGFzaC4KKyAgICBh
ZGQoaGFzaGVyLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChuYW1lLnN0
cmluZygpKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseU5h
bWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAoYS5zdHJpbmco
KS5pc051bGwoKSB8fCBiLnN0cmluZygpLmlzTnVsbCgpKSA/IGEuc3RyaW5nKCkgPT0gYi5zdHJp
bmcoKSA6IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoYS5zdHJp
bmcoKSwgYi5zdHJpbmcoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dEZhbWlseU5hbWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CiAKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeworICAgIEZv
bnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKKyAgICBGb250RmFtaWx5TmFtZSBmYW1p
bHk7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBmZWF0dXJlczsKKyAgICBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKK307CisKK3N0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGIpCit7CisgICAgcmV0dXJuIGEuZGVzY3JpcHRpb25LZXkgPT0g
Yi5kZXNjcmlwdGlvbktleSAmJiBhLmZhbWlseSA9PSBiLmZhbWlseSAmJiBhLmZlYXR1cmVzID09
IGIuZmVhdHVyZXMgJiYgYS5jYXBhYmlsaXRpZXMgPT0gYi5jYXBhYmlsaXRpZXM7Cit9CisKK3N0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuZmFtaWx5LCBrZXkuZmVhdHVyZXMsIGtleS5j
YXBhYmlsaXRpZXMudGllZCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAogc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBzbG90KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5o
YXNoKCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0s
IHsgfSwgeyB9LCB7IH0gfTsKICAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgcmV0dXJuIGtleS5kZXNj
cmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogICAgIH0KK307CiAKK3N0cnVj
dCBGb250RGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIApAQCAtMTQxLDcgKzEy
MSw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRy
YWl0czxGb250UGxhdGZvcm1EYXRhPiB7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQogICAgIHsKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgdmFsdWUpCiAgICAgewpAQCAtMTc3LDE0ICsxNTcs
MTQgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGdsb2Jh
bEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjp+Rm9udENhY2hlKCkgPSBkZWZhdWx0OwotCiBG
b250Q2FjaGU6OkZvbnRDYWNoZSgpCiAgICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogICAgICwgbV9mb250RGF0YUNhY2hl
cyhtYWtlVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVzPigpKQogewogfQogCitGb250Q2FjaGU6On5G
b250Q2FjaGUoKSA9IGRlZmF1bHQ7CisKIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBp
ZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGZhbWlseU5hbWUpKQpAQCAtMjI1LDggKzIwNSw4IEBAIE9wdGlvbmFsPEFTQ0lJTGl0
ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKLSAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y2FjaGVkRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwpAQCAtMjQ2LDI0ICsy
MjYsMjMgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgcGxhdGZvcm1Jbml0KCk7
CiAgICAgfSk7CiAKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZhbWlseU5hbWUs
IGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMp
OworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgeyBmb250RGVzY3JpcHRpb24sIHsg
ZmFtaWx5TmFtZSB9LCBmZWF0dXJlcyA/ICpmZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3Mg
eyB9LCBjYXBhYmlsaXRpZXMgfTsKIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNh
Y2hlcy0+cGxhdGZvcm1EYXRhLmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250
RmFjZUNhcGFiaWxpdGllcyk7Ci0KKyAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRm
b3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZlYXR1cmVzLCBjYXBhYmlsaXRp
ZXMpOwogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7
Ci0gICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUg
YSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKLSAgICAg
ICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRj
LiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KKyAgICAg
ICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiBXZSBoYXZlIGEgc21hbGwg
c2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCisgICAgICAgICAgICAv
LyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gVHJ5IGxv
b2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KICAgICAgICAgICAgIGlm
IChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUg
PSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5h
bWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKLSAgICAg
ICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0
aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKLSAgICAgICAgICAgICAgICAvLyBiZWVuIGlu
dmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKCkuCisgICAgICAgICAgICAgICAgYXV0byogYWx0ZXJuYXRlRGF0YSA9IGNhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZmVhdHVyZXMsIGNh
cGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUga2V5IGlu
IHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQor
ICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxs
IHRvIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9IG1fZm9u
dERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5lbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKQotICAgICAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KCpmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFsdGVy
bmF0ZURhdGEpCisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9u
dFBsYXRmb3JtRGF0YT4oKmFsdGVybmF0ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjgyLDEyICsyNjEsMTIgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
Ojpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKLSAgICBpZiAo
YXV0byogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24sIGZhbWlseSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkpCisgICAgaWYgKGF1dG8qIHBsYXRmb3JtRGF0YSA9IGNhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGZlYXR1cmVzLCBjYXBh
YmlsaXRpZXMsIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkpCiAgICAgICAgIHJldHVybiBmb250Rm9y
UGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0z
NzUsMzAgKzM1NCwxNSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVu
c2lnbmVkIHB1cmdlQ291bnQpCiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNh
Y2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewotICAgIGlmIChhLmZv
bnREZXNjcmlwdGlvbktleSAhPSBiLmZvbnREZXNjcmlwdGlvbktleSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwg
YS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHNpemUgPSBhLmZhbWlsaWVzLnNpemUoKTsKLSAg
ICBpZiAoc2l6ZSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGEuZmFtaWxpZXNbaV0s
IGIuZmFtaWxpZXNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mb250RGVzY3JpcHRpb25LZXkgPT0gYi5mb250RGVz
Y3JpcHRpb25LZXkKKyAgICAgICAgJiYgYS5mb250U2VsZWN0b3JJZCA9PSBiLmZvbnRTZWxlY3Rv
cklkCisgICAgICAgICYmIGEuZm9udFNlbGVjdG9yVmVyc2lvbiA9PSBiLmZvbnRTZWxlY3RvclZl
cnNpb24KKyAgICAgICAgJiYgYS5mYW1pbGllcyA9PSBiLmZhbWlsaWVzOwogfQogCiB1bnNpZ25l
ZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBrZXkpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBoYXNoIHRoZSBrZXkgYW5kIHRoZSBmYW1p
bHkgbmFtZSBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIG1ha2luZyBhIGhhc2ggb3V0IG9mIG90aGVy
IGhhc2hlcy4KLSAgICBIYXNoZXIgaGFzaGVyOwotICAgIGFkZChoYXNoZXIsIGtleS5mb250RGVz
Y3JpcHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRTZWxl
Y3RvcklkKTsKLSAgICBhZGQoaGFzaGVyLCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBrZXkuZmFtaWxpZXMpCi0gICAgICAgIGFkZChoYXNoZXIsIGZh
bWlseS5pc051bGwoKSA/IDAgOiBXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lSGFzaChmYW1pbHkpKTsKLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICByZXR1
cm4gY29tcHV0ZUhhc2goa2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5LmZvbnRTZWxlY3Rvcklk
LCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiwga2V5LmZhbWlsaWVzKTsKIH0KIAogdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKQEAgLTQ1NiwxMSArNDIwLDExIEBA
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpKTsKKyAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihGb250Q2FzY2FkZUNhY2hlRW50cnkgeyBXVEZNb3ZlKGtleSksIEZvbnRDYXNj
YWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpIH0pOwogICAgIFJlZjxGb250
Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHBy
dW5lQ291bnRlcjsKICAgICAvLyBSZWZlcmVuY2VkIEZvbnRDYXNjYWRlRm9udHMgd291bGQgZXhp
c3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgogICAgIGlmICgh
KCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCkBAIC01MTUsMTUg
KzQ3OSwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAjZW5kaWYKICAgICBpbnZh
bGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogCi0gICAgbV9nZW5lcmF0aW9uKys7Ci0KLSAgICBW
ZWN0b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVudHM7Ci0gICAgY2xpZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fY2xpZW50cy5zaXplKCkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fY2xp
ZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgY2xpZW50cy51bmNoZWNrZWRBcHBlbmQoKippdCk7CisgICAgKyttX2dlbmVyYXRpb247
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xpZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2xpZW50c1tpXS0+Zm9udENhY2hlSW52YWxpZGF0ZWQoKTsKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFJlZlB0cjxGb250U2VsZWN0b3I+PihtX2NsaWVudHMp
KQorICAgICAgICBjbGllbnQtPmZvbnRDYWNoZUludmFsaWRhdGVkKCk7CiAKICAgICBwdXJnZUlu
YWN0aXZlRm9udERhdGEoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggNzUwMWMyZGYwZGYyM2YwNDhjNzAwYWFjMDBiZjdjMmFiMjc5ODgz
Ny4uNGViYTZmY2YyZjdjODA0OGZiODNkNjU1NGI4ZmQ2YWY4N2MxYWM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTY0LDE3ICs2NCwx
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250Q2Fz
Y2FkZTsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgRm9udDsKLWVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90OwogCi0jaWYgUExBVEZPUk0oV0lOKQotI2lm
IFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLXR5cGVkZWYgSU1MYW5nRm9udExpbmsyIElNTGFuZ0Zv
bnRMaW5rVHlwZTsKLSNlbHNlCi10eXBlZGVmIElNTGFuZ0ZvbnRMaW5rIElNTGFuZ0ZvbnRMaW5r
VHlwZTsKK2VudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiBib29sOworCisjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdGb250TGlua1R5
cGUgPSBJTUxhbmdGb250TGluazI7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShJTUxBTkdfRk9OVF9MSU5LMikKK3VzaW5nIElNTGFuZ0ZvbnRMaW5rVHlwZSA9IElNTGFuZ0Zv
bnRMaW5rOwogI2VuZGlmCiAKIC8vIFRoaXMga2V5IGNvbnRhaW5zIHRoZSBGb250RGVzY3JpcHRp
b24gZmllbGRzIG90aGVyIHRoYW4gZmFtaWx5IHRoYXQgbWF0dGVyIHdoZW4gZmV0Y2hpbmcgRm9u
dERhdGFzIChwbGF0Zm9ybSBmb250cykuCkBAIC0xMTIsMTcgKzExMyw3IEBAIHN0cnVjdCBGb250
RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7IH0KIAotICAgIGlubGluZSB1bnNpZ25lZCBj
b21wdXRlSGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBIYXNoZXIgaGFzaGVyOwotICAgICAg
ICBhZGQoaGFzaGVyLCBtX3NpemUpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0LnRpZWQoKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fbG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9mbGFncyk7Ci0gICAgICAgIGFkZChoYXNo
ZXIsIG1fZmVhdHVyZVNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fdmFy
aWF0aW9uU2V0dGluZ3MuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0g
ICAgfQorICAgIGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250RGVzY3JpcHRpb25L
ZXkmKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbWFr
ZUZsYWdzS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xNjUsMjMg
KzE1NiwzNiBAQCBwcml2YXRlOgogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlv
blNldHRpbmdzOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBG
b250RGVzY3JpcHRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkubV9zaXplLCBr
ZXkubV9mb250U2VsZWN0aW9uUmVxdWVzdCwga2V5Lm1fZmxhZ3MsIGtleS5tX2xvY2FsZSwga2V5
Lm1fZmVhdHVyZVNldHRpbmdzLCBrZXkubV92YXJpYXRpb25TZXR0aW5ncyk7Cit9CisKIHN0cnVj
dCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBGb250RGVzY3JpcHRpb25LZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBrZXkuY29t
cHV0ZUhhc2goKTsKLSAgICB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udERl
c2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQorLy8g
VGhpcyBjbGFzcyBob2xkcyB0aGUgbmFtZSBvZiBhIGZvbnQgZmFtaWx5LCBhbmQgZGVmaW5lcyBo
YXNoaW5nIGFuZCA9PSBvZiB0aGlzIG5hbWUgdG8KKy8vIHVzZSB0aGUgcnVsZXMgZm9yIGZvbnQg
ZmFtaWx5IG5hbWVzIGluc3RlYWQgb2YgdXNpbmcgc3RyYWlnaHQgc3RyaW5nIGNvbXBhcmlzb24u
CitjbGFzcyBGb250RmFtaWx5TmFtZSB7CitwdWJsaWM6CisgICAgRm9udEZhbWlseU5hbWUoKTsK
KyAgICBGb250RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CisgICAgY29uc3QgQXRvbVN0
cmluZyYgc3RyaW5nKCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0
IEZvbnRGYW1pbHlOYW1lJik7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Citwcml2YXRlOgorICAgIEF0b21TdHJpbmcgbV9uYW1l
OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiwgY29uc3QgRm9u
dEZhbWlseU5hbWUmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFtaWx5TmFtZSYsIGNv
bnN0IEZvbnRGYW1pbHlOYW1lJik7CisKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0
aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0
b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPEZvbnRGYW1pbHlOYW1lLCAz
PiBmYW1pbGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JWZXJzaW9uOwogfTsKQEAgLTE4OSwyNiArMTkzLDIyIEBAIHN0cnVjdCBGb250
Q2FzY2FkZUNhY2hlS2V5IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5JiwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYpOwogCiBzdHJ1Y3QgRm9udENhc2NhZGVD
YWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBG
b250Q2FzY2FkZUNhY2hlRW50cnkoRm9udENhc2NhZGVDYWNoZUtleSYmIGtleSwgUmVmPEZvbnRD
YXNjYWRlRm9udHM+JiYgZm9udHMpCi0gICAgICAgIDoga2V5KFdURk1vdmUoa2V5KSkKLSAgICAg
ICAgLCBmb250cyhXVEZNb3ZlKGZvbnRzKSkKLSAgICB7IH0KKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKICAgICBSZWY8
Rm9udENhc2NhZGVGb250cz4gZm9udHM7CiB9OwogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNj
YWRlQ2FjaGVLZXkmKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNo
ZUtleT4gewotICAgIHN0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5IGVtcHR5VmFs
dWUoKSB7IHJldHVybiB7IH07IH0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBzbG90LmZvbnRTZWxlY3Rv
cklkID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYg
c2xvdCkgeyByZXR1cm4gc2xvdC5mb250U2VsZWN0b3JJZCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7IH0KK3N0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0
cyA6IEhhc2hUcmFpdHM8Rm9udENhc2NhZGVDYWNoZUtleT4geworICAgIHN0YXRpYyBGb250Q2Fz
Y2FkZUNhY2hlS2V5IGVtcHR5VmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBuZXcg
KE5vdE51bGwsICZzbG90KSBGb250Q2FzY2FkZUNhY2hlS2V5IHsgRm9udERlc2NyaXB0aW9uS2V5
IHsgV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUgfSwgeyB9LCB7IH0sIHsgfSB9OyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5
KSB7IHJldHVybiBrZXkuZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KIH07CiAKIHVzaW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRl
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2Fz
Y2FkZUNhY2hlS2V5SGFzaCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwpAQCAtMjI1
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICB+Rm9udENhY2hlKCk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgUmVmUHRyPEZvbnQ+IHN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBJc0ZvclBsYXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CkBAIC0yMzUsNiArMjM1LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEZvbnRBbGxvd2xpc3QoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5r
VHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFs
aXplKCk7CkBAIC0zMDEsMTEgKzMwMiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJik7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFs
bHkgYmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0
YSogY2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogPSBudWxscHRyLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
IGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0gKHVuY2xlYXIgd2hpY2ggZnVuY3Rpb25zIHRoaXMgY29tbWVu
dCBhcHBsaWVzIHRvKS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKTsKICAgICAKICAgICBzdGF0aWMgT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKQEAgLTMzMiw2ICszMzIsNyBAQCBwcml2YXRlOgogCiAgICAg
ZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKICNlbmRpZgorCiAgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiB9OwogCkBAIC0zNDgsNyArMzQ5LDYgQEAgaW5saW5lIHZvaWQgRm9udENh
Y2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAKICNlbmRpZgogCi0KIGlubGlu
ZSBib29sIEZvbnRDYWNoZTo6UHJld2FybUluZm9ybWF0aW9uOjppc0VtcHR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2VlbkZhbWlsaWVzLmlzRW1wdHkoKSAmJiBmb250TmFtZXNSZXF1aXJpbmdT
eXN0ZW1GYWxsYmFjay5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKaW5kZXggYWRhZmYzYzE0NmRjNzIz
NWZmMDU5NmQ0ZmM0NzY3OTc1YjE1ODIxMy4uNjA3NzBjZDY0YzM5MThiMDAwNTFlNzQ1N2JiZWY0
Mzc0ZjJhZWMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdlbmVyaWNGYW1pbGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIFVTY3JpcHRDb2RlIHVzZXMgLTEgYW5kIDAgZm9yIFVTY3JpcHRJbnZhbGlk
Q29kZSBhbmQgVVNjcmlwdENvbW1vbi4KIC8vIFdlIG5lZWQgdG8gdXNlIC0yIGFuZCAtMyBmb3Ig
ZW1wdHkgdmFsdWUgYW5kIGRlbGV0ZWQgdmFsdWUuCi1zdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKK3N0cnVjdCBVU2NyaXB0Q29kZUhh
c2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVy
biAtMjsgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShpbnQmIHNsb3Qp
IHsgc2xvdCA9IC0zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgKaW5kZXggZTYyMzM1MDRkOTMxMDEzNDIx
MjJiN2JjMmM3MDNmZTUyY2Y3NGFhMy4uNjZmOGZkYzE3NWI2YTMxMDk3MTg2ZjJkNGJjNzcwMWY3
NWI0NGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApAQCAtMjkxLDYgKzI5MSwxMSBAQCBjb25zdGV4
cHIgRm9udFNlbGVjdGlvblZhbHVlIHVsdHJhRXhwYW5kZWRTdHJldGNoVmFsdWUoKQogICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUgeyAyMDAgfTsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBGb250U2VsZWN0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIGFk
ZChoYXNoZXIsIHZhbHVlLnJhd1ZhbHVlKCkpOworfQorCiAvLyBbSW5jbHVzaXZlLCBJbmNsdXNp
dmVdCiBzdHJ1Y3QgRm9udFNlbGVjdGlvblJhbmdlIHsKICAgICB1c2luZyBWYWx1ZSA9IEZvbnRT
ZWxlY3Rpb25WYWx1ZTsKQEAgLTMzNCwxNCArMzM5LDYgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
YW5nZSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQgPj0gbWluaW11bSAmJiB0YXJnZXQgPD0gbWF4
aW11bTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBuYW1lIGlzIG5vdCBzbyBncmVhdC4g
TW92ZSB0aGlzIGludG8gdGhlIGFkZCBmdW5jdGlvbiBiZWxvdwotICAgIC8vIG9uY2Ugd2UgbW92
ZSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIGZyb20gSW50ZWdlckhhc2hlciB0byBIYXNo
ZXIsCi0gICAgLy8gYW5kIHRoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGhhdmUgYSBuYW1lLgotICAg
IGNvbnN0ZXhwciB1aW50MzJfdCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbWluaW11bS5yYXdWYWx1ZSgpIDw8IDE2IHwgbWF4aW11bS5yYXdWYWx1ZSgpOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogCkBAIC0zNzcsNyArMzc0LDcgQEAgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblJh
bmdlPiBGb250U2VsZWN0aW9uUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiBpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRTZWxlY3Rpb25SYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgYWRkKGhhc2hlciwgcmFuZ2UudW5pcXVlVmFsdWUoKSk7CisgICAgYWRkKGhh
c2hlciwgcmFuZ2UubWluaW11bSwgcmFuZ2UubWF4aW11bSk7CiB9CiAKIHN0cnVjdCBGb250U2Vs
ZWN0aW9uUmVxdWVzdCB7CkBAIC0zODUsNiArMzgyLDcgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHsKIAogICAgIFZhbHVlIHdlaWdodDsKICAgICBWYWx1ZSB3aWR0aDsKKwogICAgIC8v
IEZJWE1FOiBXZSBhcmUgdXNpbmcgYW4gb3B0aW9uYWwgaGVyZSB0byBiZSBhYmxlIHRvIGRpc3Rp
bmd1aXNoIGJldHdlZW4gYW4gZXhwbGljaXQKICAgICAvLyBvciBpbXBsaWNpdCBzbG9wZSAoZm9y
ICJpdGFsaWMiIGFuZCAib2JsaXF1ZSIpIGFuZCB0aGUgIm5vcm1hbCIgdmFsdWUgd2hpY2ggaGFz
IG5vCiAgICAgLy8gc2xvcGUuIFRoZSAiaXRhbGljIiBhbmQgIm9ibGlxdWUiIHZhbHVlcyBjYW4g
YmUgZGlzdGluZ3Vpc2hlZCBieSBsb29raW5nIGF0IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAKaW5kZXggOGE4
Yzc5N2Y2NDcxMjM5ZjFlN2NmOGE1ZDI3ZTMwNmQ1ODkzM2ViMC4uYmRlZWJlODAwMTQxNDQ4YjU4
Yzc0MmZjZmJiNGE3ZWI5NmQ0NTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuY3BwCkBAIC0yNyw0MiArMjcsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIK
IAotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10ZW1wbGF0ZSA8PgotdW5zaWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgZm9yIChhdXRvJiBm
ZWF0dXJlIDogbV9saXN0KSB7Ci0gICAgICAgIGhhc2hlci5hZGQoRm91ckNoYXJhY3RlclRhZ0hh
c2g6Omhhc2goZmVhdHVyZS50YWcoKSkpOwotICAgICAgICBoYXNoZXIuYWRkKGZlYXR1cmUudmFs
dWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotfQotCi10ZW1wbGF0ZSA8
PgotdW5zaWduZWQgRm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoKCkgY29uc3QKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihmbG9hdCkgPT0gc2l6ZW9mKGludCksICJJbnRlZ2VySGFzaGVy
IG5lZWRzIHRvIGFjY2VwdCBmbG9hdHMgdG9vIik7Ci0gICAgdW5pb24gewotICAgICAgICBmbG9h
dCBmOwotICAgICAgICBpbnQgaTsKLSAgICB9IGZsb2F0VG9JbnQ7Ci0KLSAgICBJbnRlZ2VySGFz
aGVyIGhhc2hlcjsKLSAgICBmb3IgKGF1dG8mIHZhcmlhdGlvbiA6IG1fbGlzdCkgewotICAgICAg
ICBoYXNoZXIuYWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpoYXNoKHZhcmlhdGlvbi50YWcoKSkp
OwotICAgICAgICBmbG9hdFRvSW50LmYgPSB2YXJpYXRpb24udmFsdWUoKTsKLSAgICAgICAgaGFz
aGVyLmFkZChmbG9hdFRvSW50LmkpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRm9udFZh
cmlhdGlvblNldHRpbmdzJiBpdGVtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiYgaXRlbSkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiB2
YXJpYXRpb24gPSBpdGVtLmF0KGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuaAppbmRleCBiOTIwMzRlYTIxNjg5ZmJhNGVm
NTUzY2UyZmE4ZjViYzRhYzFlMzE3Li4xMjhkYWY3ZTYzYmM3M2RhOWZlZDFjYzNhOWU0MmFjZjU2
ODkzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
VGFnZ2VkU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250VGFnZ2VkU2V0dGluZ3MuaApAQCAtMzYsMjAgKzM2LDI2IEBAIGNsYXNzIFRleHRTdHJlYW07
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBzdGQ6OmFycmF5PGNoYXIsIDQ+IEZv
bnRUYWc7Cit1c2luZyBGb250VGFnID0gc3RkOjphcnJheTxjaGFyLCA0PjsKIAotaW5saW5lIEZv
bnRUYWcgZm9udEZlYXR1cmVUYWcoY29uc3QgY2hhciBhcnJbNF0pIHsgcmV0dXJuIHt7IGFyclsw
XSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXSB9fTsgfQoraW5saW5lIEZvbnRUYWcgZm9udEZlYXR1
cmVUYWcoY29uc3QgY2hhciBjaGFyYWN0ZXJzWzRdKSB7IHJldHVybiB7eyBjaGFyYWN0ZXJzWzBd
LCBjaGFyYWN0ZXJzWzFdLCBjaGFyYWN0ZXJzWzJdLCBjaGFyYWN0ZXJzWzNdIH19OyB9CisKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjphcnJheTxjaGFyLCA0PiBhcnJheSkK
K3sKKyAgICB1aW50MzJfdCBpbnRlZ2VyID0gKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFycmF5WzBd
KSA8PCAyNCkgfCAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbMV0pIDw8IDE2KSB8IChzdGF0
aWNfY2FzdDx1aW50OF90PihhcnJheVsyXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50OF90Pihh
cnJheVszXSk7CisgICAgYWRkKGhhc2hlciwgaW50ZWdlcik7Cit9CiAKIHN0cnVjdCBGb3VyQ2hh
cmFjdGVyVGFnSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFRhZyYg
Y2hhcmFjdGVycykgeyByZXR1cm4gKGNoYXJhY3RlcnNbMF0gPDwgMjQpIHwgKGNoYXJhY3RlcnNb
MV0gPDwgMTYpIHwgKGNoYXJhY3RlcnNbMl0gPDwgOCkgfCBjaGFyYWN0ZXJzWzNdOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFRhZyYgYSwgY29uc3QgRm9udFRhZyYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRm9udFRhZyBjaGFyYWN0
ZXJzKSB7IHJldHVybiBjb21wdXRlSGFzaChjaGFyYWN0ZXJzKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKEZvbnRUYWcgYSwgRm9udFRhZyBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9Owog
Ci1zdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJh
aXRzPEZvbnRUYWc+IHsKK3N0cnVjdCBGb3VyQ2hhcmFjdGVyVGFnSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8Rm9udFRhZz4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250VGFnJiBz
bG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIEZvbnRUYWcoe3sgZmYs
IGZmLCBmZiwgZmYgfX0pOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Rm9udFRhZyYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZmLCBmZiwg
ZmYgfX0pOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRm9udFRhZyB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gRm9udFRhZyh7eyBmZiwgZmYsIGZmLCBmZiB9fSk7IH0KIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgZmYgPSBzdGF0aWNfY2FzdDxjaGFyPigw
eEZGKTsKQEAgLTU5LDE0ICs2NSwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEZv
bnRUYWdnZWRTZXR0aW5nIHsKIHB1YmxpYzoKICAgICBGb250VGFnZ2VkU2V0dGluZygpID0gZGVs
ZXRlOwotICAgIEZvbnRUYWdnZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmLCBUIHZhbHVlKTsKLSAg
ICBGb250VGFnZ2VkU2V0dGluZyhGb250VGFnJiYsIFQgdmFsdWUpOworICAgIEZvbnRUYWdnZWRT
ZXR0aW5nKEZvbnRUYWcsIFQgdmFsdWUpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvbnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb250VGFnZ2VkU2V0dGluZzxU
PiYgb3RoZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udFRhZyYgdGFnKCkgY29uc3QgeyByZXR1
cm4gbV90YWc7IH0KKyAgICBGb250VGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAg
ICAgVCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBib29sIGVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiB2YWx1ZSgpOyB9CiAKQEAgLTc5LDE5ICs4NCwxMiBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9u
dFRhZ2dlZFNldHRpbmcoY29uc3QgRm9udFRhZyYgdGFnLCBUIHZhbHVlKQorRm9udFRhZ2dlZFNl
dHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKEZvbnRUYWcgdGFnLCBUIHZhbHVlKQogICAgIDog
bV90YWcodGFnKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9udFRhZ2dlZFNldHRpbmcoRm9udFRhZyYm
IHRhZywgVCB2YWx1ZSkKLSAgICA6IG1fdGFnKFdURk1vdmUodGFnKSkKLSAgICAsIG1fdmFsdWUo
dmFsdWUpCi17Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogYm9vbCBGb250VGFnZ2VkU2V0
dGluZzxUPjo6b3BlcmF0b3I9PShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNv
bnN0CiB7CkBAIC0xNTIsNiArMTUwLDExIEBAIE9wdGlvbmFsPEZvbnRUYWdnZWRTZXR0aW5nPFQ+
PiBGb250VGFnZ2VkU2V0dGluZzxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgfX0s
ICp2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgc2V0dGluZykKK3sKKyAgICBhZGQoaGFz
aGVyLCBzZXR0aW5nLnRhZygpLCBzZXR0aW5nLnZhbHVlKCkpOworfQorCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIGNsYXNzIEZvbnRUYWdnZWRTZXR0aW5ncyB7CiBwdWJsaWM6CkBAIC0yMTEsMTQg
KzIxNCwxMCBAQCBPcHRpb25hbDxGb250VGFnZ2VkU2V0dGluZ3M8VD4+IEZvbnRUYWdnZWRTZXR0
aW5nczxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdHlwZWRlZiBGb250VGFnZ2VkU2V0dGluZzxpbnQ+IEZvbnRGZWF0dXJlOwotdHlwZWRlZiBG
b250VGFnZ2VkU2V0dGluZ3M8aW50PiBGb250RmVhdHVyZVNldHRpbmdzOwotCi10ZW1wbGF0ZSA8
PiB1bnNpZ25lZCBGb250RmVhdHVyZVNldHRpbmdzOjpoYXNoKCkgY29uc3Q7Ci0KLXR5cGVkZWYg
Rm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiBGb250VmFyaWF0aW9uU2V0dGluZ3M7Ci1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJik7Cit1c2luZyBGb250RmVhdHVyZSA9IEZvbnRUYWdnZWRTZXR0aW5nPGludD47
Cit1c2luZyBGb250RmVhdHVyZVNldHRpbmdzID0gRm9udFRhZ2dlZFNldHRpbmdzPGludD47Cit1
c2luZyBGb250VmFyaWF0aW9uU2V0dGluZ3MgPSBGb250VGFnZ2VkU2V0dGluZ3M8ZmxvYXQ+Owog
Ci10ZW1wbGF0ZSA8PiB1bnNpZ25lZCBGb250VmFyaWF0aW9uU2V0dGluZ3M6Omhhc2goKSBjb25z
dDsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZvbnRUYWdnZWRT
ZXR0aW5nczxmbG9hdD4mKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCmluZGV4IGJmOWQwZjg1OTI4MTQ3NjYyMzg0NTRhN2ZjMzMyZTg1NGUz
YzE3N2UuLjhlYjMyNmM0OTY0ZWNhOWUwZjNmYmM3ZTBjZjgyYjhkYTM1ZjM4OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTMyLDggKzMy
LDYgQEAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KIAotdXNpbmcgV1RGOjpwYWlySW50SGFzaDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKaW5kZXggNTNlYjVlY2E2NzQ2YTE5YTgxNmJkY2M4YTExNmM5ZGE5MDhkNWNhYi4uNzBm
NmQwOGY1M2Q3YmM4NTcwNmRhYzQ1YTA3YWIxZjA3ZGMyMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cApAQCAtNDgsMTIgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCi0vLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2luZyBkZWNs
YXJhdGlvbiBzaG91bGQgYmUgaW4gPHd0Zi9IYXNoRnVuY3Rpb25zLmg+LgotdXNpbmcgV1RGOjpw
YWlySW50SGFzaDsKLQotLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24g
c2hvdWxkIGJlIGluIDx3dGYvSGFzaFRyYWl0cy5oPi4KLXVzaW5nIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaAppbmRleCA1YmYwNWQ0ZTE0MGVlNjJiMzMyMWU0ZGJlZjUxZGFjMWQxYjM0ZDk5
Li45ZmFjZWM0ZjAxNDIzZjQwNTQzNjViNGI5YjViMjdlMTcxMjE2NmQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgTW9ub3Rvbmlj
VGltZSBsYXN0QWNjZXNzVGltZTsKICAgICB9OwogCi0gICAgc3RydWN0IFN1YmltYWdlQ2FjaGVF
bnRyeVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8U3ViaW1hZ2VDYWNoZUVudHJ5PiB7
CisgICAgc3RydWN0IFN1YmltYWdlQ2FjaGVFbnRyeVRyYWl0cyA6IEhhc2hUcmFpdHM8U3ViaW1h
Z2VDYWNoZUVudHJ5PiB7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4+IEltYWdlVHJhaXRzOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAppbmRleCAwNzE3MjIxYjEzMDY5MmJmMWY4YWU0ZmY0MDc1ODYwNTZjZjAx
ZmJiLi4yYmUzOWI3OTQzNTE1MWY0ZmE4NmZjMzE0OTE0MThhMTJkMjk0OWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lm
aWNhdGlvbkNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApAQCAtMzcsNiArMzcs
OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRp
b25LZXkgeworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
cjsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OworCiAgICAgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkoKSA9IGRlZmF1bHQ7CiAKICAgICBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbktleShDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTUwLDcgKzUzLDcgQEAgc3RydWN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5nZXQoKSwgb3RoZXIuZm9u
dERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9PSBvdGhlci5mb250RGVz
Y3JpcHRpb25LZXk7CisgICAgICAgIHJldHVybiBzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5n
ZXQoKSwgb3RoZXIuZm9udERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9
PSBvdGhlci5mb250RGVzY3JpcHRpb25LZXk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBvdGhlcikgY29uc3QKQEAgLTU5LDIz
ICs2MiwxNSBAQCBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkgewogICAgIH0KIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQg
Y29tcHV0ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goV1RGOjpzYWZlQ0ZIYXNoKGZvbnREZXNjcmlwdG9yLmdldCgpKSwgZm9udERlc2NyaXB0aW9u
S2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlw
dG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2Ny
aXB0aW9uS2V5OwogfTsKIAogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5SGFzaCB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXkmIGtleSkgeyByZXR1cm4ga2V5LmNvbXB1dGVIYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYga2V5KSB7IHJldHVybiBj
b21wdXRlSGFzaChzYWZlQ0ZIYXNoKGtleS5mb250RGVzY3JpcHRvci5nZXQoKSksIGtleS5mb250
RGVzY3JpcHRpb25LZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udEZhbWls
eVNwZWNpZmljYXRpb25LZXkmIGEsIGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBGb250TWFwID0gSGFzaE1hcDxG
b250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5Pj47Cit1c2luZyBGb250TWFwID0gSGFz
aE1hcDxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+OwogCiBzdGF0aWMgRm9udE1hcCYg
Zm9udE1hcCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRleCAw
YjI3OWE3ZGVmNWNkNDg4MmE4MjVjMzY4M2JlMTM1MmIyMmU2MDdhLi45YWQxZTBjYzQ1MGYwZWFh
ODI5ODE3MzU1OTc4MDBhYzA4MDQ5NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNv
cmVUZXh0LmgKQEAgLTcyLDI3ICs3MiwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVy
OwotICAgICAgICAgICAgQVNTRVJUKCFmb250TmFtZS5pc051bGwoKSk7Ci0gICAgICAgICAgICBo
YXNoZXIuYWRkKGxvY2FsZS5leGlzdGluZ0hhc2goKSk7Ci0gICAgICAgICAgICBoYXNoZXIuYWRk
KGxvY2FsZS5pc051bGwoKSA/IDAgOiBsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICAg
ICAgaGFzaGVyLmFkZCh3ZWlnaHQpOwotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aCk7Ci0g
ICAgICAgICAgICBoYXNoZXIuYWRkKHNpemUpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKTsKLSAgICAgICAgICAg
IGhhc2hlci5hZGQoaXRhbGljKTsKLSAgICAgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGZvbnROYW1lLCBsb2NhbGUsIHdlaWdodCwg
d2lkdGgsIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBpdGFsaWMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RydWN0IENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJI
YXNoPEF0b21TdHJpbmcsIGZsb2F0PiB7Ci0gICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuaGFzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEhhc2ggeworICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FzY2Fk
ZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7IHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsg
fQorICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwogICAgICAgICB9OwogCkBAIC0xMzEsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gY29tcHV0
ZUNhc2NhZGVMaXN0KENURm9udFJlZiwgQ0ZTdHJpbmdSZWYgbG9jYWxlKTsKICAgICBzdGF0aWMg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIFN5c3RlbUZvbnRLaW5kLCBB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBIYXNoTWFwPENhc2NhZGVMaXN0UGFyYW1l
dGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4sIENhc2NhZGVMaXN0
UGFyYW1ldGVyczo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOworICAgIEhhc2hN
YXA8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+PiwgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9zeXN0ZW1Gb250Q2FjaGU7CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NlcmlmRmFtaWxpZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zYW5zU2VyaWZlcmlmRmFtaWxpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyQ29yZVRleHQubW0KaW5kZXggMDMyMDk2OTg4ZmNkZTIxNzE3NTkzMzUwMDEzOTBlYjNm
YmI5OWE1Yi4uZTkwMTc0YmVmNDMwMzEwYTNiOWU1ZDQ1ODFiZmExYWRlZWVlMDdkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpAQCAtMTg1LDEzICsxODUsMTMg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgICAgIENURm9udFJlZiBydW5DVEZv
bnQgPSBzdGF0aWNfY2FzdDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJp
YnV0ZXMsIGtDVEZvbnRBdHRyaWJ1dGVOYW1lKSk7CiAgICAgICAgICAgICBBU1NFUlQocnVuQ1RG
b250ICYmIENGR2V0VHlwZUlEKHJ1bkNURm9udCkgPT0gQ1RGb250R2V0VHlwZUlEKCkpOwogICAg
ICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9u
dFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhydW5DVEZvbnQpOwotICAgICAg
ICAgICAgaWYgKCFXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwg
Zm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkgewor
ICAgICAgICAgICAgaWYgKCFzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCks
IGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBCZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZvbnQgbWF0Y2hl
cyBhbnkgb2YgdGhlIGZvbnRzIGluIHRoZSBmYWxsYmFjayBsaXN0LgogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwo
KTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tS
YW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKFdURjo6c2FmZUNGRXF1YWwocnVuRm9udC0+cGxhdGZv
cm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpLCBydW5Gb250RXF1YWxpdHlP
YmplY3QuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2FmZUNGRXF1YWwocnVuRm9u
dC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpLCBydW5Gb250
RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgKaW5kZXggYmI4M2MzOTNl
NzllMjBhMmJiNmM3NWVkN2EyMzk1OTZlMTAxMDBkMy4uYjBmOWMyNzZlYTU0Yjc2ZTFkNzdhMjY1
MTEwNjIxNzUyYmRiNTNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6
aW5nLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVmUHRyPFRl
eHQ+PiBtX2F1dG9TaXplZE5vZGVzOwogfTsKIAotc3RydWN0IFRleHRBdXRvU2l6aW5nVHJhaXRz
IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxUZXh0QXV0b1NpemluZ0tleT4geworc3RydWN0IFRl
eHRBdXRvU2l6aW5nVHJhaXRzIDogSGFzaFRyYWl0czxUZXh0QXV0b1NpemluZ0tleT4gewogICAg
IHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUZXh0QXV0b1NpemluZ0tleSYgc2xvdCkgeyBuZXcg
KE5vdE51bGwsICZzbG90KSBUZXh0QXV0b1NpemluZ0tleShUZXh0QXV0b1NpemluZ0tleTo6RGVs
ZXRlZCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUZXh0QXV0b1Np
emluZ0tleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzRGVsZXRlZCgpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCAwYjhlNjFjOGY3
NTNmNGY3YjNmMDJjNjQzNjdkNDM0NGZmOTM0YTg5Li5jZjIyY2VjYjNhZjMxMWIyNTNhNDdhMmQ4
YjRlYTE2NzRhNTYzZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAKQEAgLTQ0OSwxMCArNDQ5LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6ZGVz
Y2VuZGFudEFmZmVjdGluZ05vbkluaGVyaXRlZFByb3BlcnRpZXNFcXVhbChjb25zdCBSZW5kZXJT
dHkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiB7Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgaGFzaGVyLmFk
ZChBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5m
aXJzdEZhbWlseSgpKSk7Ci0gICAgaGFzaGVyLmFkZChmb250LmZvbnREZXNjcmlwdGlvbigpLnNw
ZWNpZmllZFNpemUoKSk7Ci0gICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgcmV0dXJuIGNv
bXB1dGVIYXNoKEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChmb250LmZvbnREZXNjcmlw
dGlvbigpLmZpcnN0RmFtaWx5KCkpLCBmb250LmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNp
emUoKSk7CiB9CiAKIHVuc2lnbmVkIFJlbmRlclN0eWxlOjpoYXNoRm9yVGV4dEF1dG9zaXppbmco
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJDbGllbnRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2UvU2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXIuaAppbmRleCA2NDA5YTQxYzM4MmE4ZTU3
N2M5NjAzNjRmYjY3ZTc4MTQ0OWNiMWI2Li45MzhiYjU5MmY3MjY4YzY5YWMzNzE4Mzc1YTcyYjk2
OTZjNzI5NWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vy
dmljZVdvcmtlckNsaWVudElkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXIuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJEb2N1bWVudElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2Vy
VHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg3LDE2
ICs4OCwxMiBAQCBPcHRpb25hbDxTZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllcj4gU2Vydmlj
ZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZShEZQogICAgIGlmICghY29udGV4dElkZW50
aWZpZXIpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4geyB7IFdU
Rk1vdmUoKnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKSwgV1RGTW92ZSgqY29udGV4dElkZW50
aWZpZXIpIH0gfTsKKyAgICByZXR1cm4geyB7ICpzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllciwg
KmNvbnRleHRJZGVudGlmaWVyIH0gfTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIFNlcnZpY2VXb3Jr
ZXJDbGllbnRJZGVudGlmaWVyOjpoYXNoKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBoYXNoZXNb
Ml07Ci0gICAgaGFzaGVzWzBdID0gV1RGOjppbnRIYXNoKHNlcnZlckNvbm5lY3Rpb25JZGVudGlm
aWVyLnRvVUludDY0KCkpOwotICAgIGhhc2hlc1sxXSA9IFdURjo6aW50SGFzaChjb250ZXh0SWRl
bnRpZmllci50b1VJbnQ2NCgpKTsKLQotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkoaGFzaGVzLCBzaXplb2YoaGFzaGVzKSk7CisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKHNlcnZl
ckNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb250ZXh0SWRlbnRpZmllcik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5oCmluZGV4IGU1YzYwNWM1MWYzMjcxNTYzYTZiNmVlMTkxMGM5NGVkMDEz
ZjM0OTMuLmM3NWQxNzA0YTc3MmUyOTk5OWRlNDMwOWQ4NTlhZjgxN2EwNTc0ODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAt
NTksMTEgKzU5LDcgQEAgc3RydWN0IEdsb2JhbEZyYW1lSUQgewogCiBpbmxpbmUgdW5zaWduZWQg
R2xvYmFsRnJhbWVJRDo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgaGFzaGVzWzJdOwot
ICAgIGhhc2hlc1swXSA9IFdURjo6aW50SGFzaCh3ZWJQYWdlSUQudG9VSW50NjQoKSk7Ci0gICAg
aGFzaGVzWzFdID0gV1RGOjppbnRIYXNoKGZyYW1lSUQudG9VSW50NjQoKSk7Ci0KLSAgICByZXR1
cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hlcywgc2l6ZW9mKGhhc2hlcykpOworICAg
IHJldHVybiBjb21wdXRlSGFzaCh3ZWJQYWdlSUQsIGZyYW1lSUQpOwogfQogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEsIGNvbnN0IEdsb2JhbEZyYW1lSUQm
IGIpCkBAIC03Myw4ICs2OSw4IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR2xvYmFs
RnJhbWVJRCYgYSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgYikKICAgICByZXR1cm4gYS53ZWJQYWdl
SUQgPT0gYi53ZWJQYWdlSUQgJiYgIGEuZnJhbWVJRCA9PSBiLmZyYW1lSUQ7CiB9CiAKLX07Ci19
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKK30KK30KIAogbmFtZXNwYWNlIFdURiB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4
dEhhbmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29u
dGV4dEhhbmRsZS5tbQppbmRleCBjNGJmMmI3OWMzNTRkMzkzYjYzNzRjNzgzMmI4NGFmZTdmNTVm
NWNhLi4xNDcwMTA5Y2UxZjRiODA5MTRlMzU5OTE4MTU1MWNkZjc0NTM0MTE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0
SGFuZGxlLm1tCkBAIC01NSw3ICs1NSw3IEBAIC0gKGlkKV9pbml0V2l0aFBhZ2VQcm94eUlEOihX
ZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIpcGFnZVByb3h5SUQgYW5kV2ViUGFnCiAKIC0g
KE5TVUludGVnZXIpaGFzaAogewotICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKF9wYWdlUHJv
eHlJRC50b1VJbnQ2NCgpLCBfd2ViUGFnZUlELnRvVUludDY0KCkpOworICAgIHJldHVybiBjb21w
dXRlSGFzaChfcGFnZVByb3h5SUQsIF93ZWJQYWdlSUQpOwogfQogCiAtIChCT09MKWlzRXF1YWw6
KGlkKW9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9C
aW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9C
aW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IGRjNzdmOGY4NGQwMzQzOTAxYjlhZWVhNTU1MGZk
Mzc4ZDgwMzI4OTYuLjA0MjA1YjM3MmRhNDc5YmM5ZGI4ZTU2N2M3ZDYyMmU5ZjkyNGZlZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlM
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKICAgICByZXR1cm4gYS5t
X2ludGVnZXJzID09IGIubV9pbnRlZ2VycyAmJiAgYS5tX3NpemUgPT0gYi5tX3NpemU7CiB9CiAK
LXN0cnVjdCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxJ
bnRlZ2VyQXJyYXk+IHsKK3N0cnVjdCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxJbnRlZ2VyQXJyYXk+IHsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
SW50ZWdlckFycmF5JiBzbG90KSB7IHNsb3QubWFya0RlbGV0ZWQoKTsgfQogICAgIHN0YXRpYyBi
b29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpIHsgcmV0dXJuIGFy
cmF5LmlzRGVsZXRlZFZhbHVlKCk7IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425221</attachid>
            <date>2021-04-05 16:38:00 -0700</date>
            <delta_ts>2021-04-05 17:08:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210405163759.patch</filename>
            <type>text/plain</type>
            <size>88649</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjY3ODdjN2ViNTQ2NzY2NjM4OGZiYWVjZGJhYzc4YTNlODU1YjQxLi5jZjNkZmQ5M2JjYTMzNTA3
Y2ZhNTExOGM4MGE1NWE0NDA1YjJhNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDIgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFJlZHVjZSBieXRlY29kZSBpbnN0
cnVjdGlvbiBjb3VudCBlbWl0dGVkIGZvciBgY2xhc3MgZXh0ZW5kc2AKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDFkZGY1NTI4
OGI3ZDdmZDk3NDM0Y2NiMjlkOWIxMDgxODc4YmYzMC4uN2I4OGM1OTgwNDI5YzMyZGRlOWIyOTcx
MWY4MDYzZTQ3MGRjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1v
dmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaEZ1bmN0aW9u
cy5oOiBFeHBvcnQgaW50SGFzaCBhbmQgcGFpckludEhhc2ggdG8gdGhlIGdsb2JhbCBuYW1lc3Bh
Y2UKKyAgICAgICAgc28gdGhleSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgV1RG
IHByZWZpeC4gVGhpcyBmb2xsb3dzIHRoZSB1c3VhbAorICAgICAgICBXVEYgZGVzaWduIHBhdHRl
cm4gZ2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lk
ZSBXVEYuCisKKyAgICAgICAgKiB3dGYvSGFzaGVyLmg6IERlbGV0ZWQgSW50ZWdlckhhc2hlci4K
KyAgICAgICAgKFdURjo6YWRkKTogQWRkZWQgb3ZlcmxvYWRzIGZvciBTdHJpbmcsIEF0b21TdHJp
bmcsIGFuZCBVUkwuCisKKyAgICAgICAgKiB3dGYvT2JqZWN0SWRlbnRpZmllci5oOgorICAgICAg
ICAoV1RGOjphZGQpOiBBZGRlZCBhIEhhc2hlciBvdmVybG9hZCBmb3IgYW55IE9iamVjdElkZW50
aWZpZXIuCisKKyAgICAgICAgKiB3dGYvUmV0YWluUHRyLmg6IEV4cG9ydCBzYWZlQ0ZFcXVhbCBh
bmQgc2FmZUNGSGFzaCB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQorICAgICAgICBzbyB0aGV5IGNh
biBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBXVEYgcHJlZml4LiBUaGlzIGZvbGxvd3Mg
dGhlIHVzdWFsCisgICAgICAgIFdURiBkZXNpZ24gcGF0dGVybiBnaXZlbiB0aGF0IHRoZXNlIGZ1
bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIFdURi4KKworICAgICAgICAqIHd0
Zi9WZWN0b3JIYXNoLmg6IFJlbW92ZWQgdGhlIFZlY3Rvckhhc2ggdGVtcGxhdGUsIGluc3RlYWQg
anVzdCBzcGVjaWFsaXppbmcKKyAgICAgICAgRGVmYXVsdEhhc2guIFVzZSBjb21wdXRlSGFzaCB0
byBoYXNoIHRoZSBjb250ZW50cyBvZiB0aGUgdmVjdG9yIGluc3RlYWQgb2YKKyAgICAgICAgaGFz
aGluZyB0aGUgaGFzaGVzIG9mIHRoZSBpdGVtcyBpbiB0aGUgdmVjdG9yLiBUaGlzIGlzIGJldHRl
ciBpbiBnZW5lcmFsIGFuZAorICAgICAgICBiZXR0ZXIgZm9yIHRoZSBvbmUgY2FzZSB3aGVyZSB3
ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMsIGZvciBhIFZlY3RvcjxpbnQ+LgorICAgICAgICBX
ZSB3YW50IHRvIGhhc2ggYWxsIHRoZSBpbnRlZ2VycyByYXRoZXIgdGhhbiBoYXNoaW5nIGhhc2hl
cyBvZiBhbGwgdGhlIGludGVnZXJzLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0aGlzIG1lYW5z
IHRoZSBlbGVtZW50cyBvZiB0aGUgVmVjdG9yIG5lZWQgdG8gYmUgaGFzaGFibGUgdXNpbmcKKyAg
ICAgICAgdGhlIEhhc2hlciBtYWNoaW5lcnkuIFRoZSBvbGQgcmVxdWlyZW1lbnQgd2FzIHRoZSB0
aGUgZWxlbWVudHMgaGFkIGEgRGVmYXVsdEhhc2guCisKIDIwMjEtMDQtMDIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFByZWZlclBhZ2VS
ZW5kZXJpbmdVcGRhdGVzTmVhcjYwRlBTRW5hYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzA5ZmRjYzBkZWVkYmI0NDFlOGI3MWEyZTliYjQ5OTliY2IwZjQ2Ni4uZWRlMzkwMzI4NDhjZGNk
ZTcwN2M1MDE3MjA1Yjc5MGM3MWFiN2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAor
MjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBt
aXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRyaWdnZXJIYXNoOjpoYXNoKTogVXNlIGNvbXB1dGVI
YXNoIHRvCisgICAgICAgIGhhc2ggYWxsIHRoZSBmaWVsZHMgaW5zdGVhZCBvZiBhIGN1c3RvbS13
cml0dGVuIGFsZ29yaXRobS4gVGhlIGN1c3RvbQorICAgICAgICBhbGdvcml0aG0gaGFkIHNvbWUg
bWFnaWMgbnVtYmVycywgcmVwZWF0ZWRseSBoYXNoZWQgaGFzaGVzLCBhbmQgY29tYmluZWQKKyAg
ICAgICAgaGFzaGVzIHVzaW5nIGV4Y2x1c2l2ZSBvci4gVGhlIG5ldyBvbmUgaXMgYWxtb3N0IGNl
cnRhaW5seSBiZXR0dGVyLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OkNoYXJhY3RlclNldDo6
aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCB0byBoYXNoIHRoZSBib29sZWFu
IGFuZCB0aGUgY2hhcmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICB1c2luZyBpbnRIYXNoIGFu
ZCBwYWlySW50SGFzaC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOiBNb3ZlZCB0aGUgaGFzaGluZyBoZXJlIGZyb20g
dGhlIGhlYWRlci4gRml4ZWQgdGhlCisgICAgICAgIG1pc3Rha2Ugd2hlcmUgdGhpcyB3YXMgdXNp
bmcgJiBpbnN0ZWFkIG9mIHwgYW5kIHNvIG5vbmUgb2YgdGhlIGJvb2xlYW5zCisgICAgICAgIHdl
cmUgaGF2aW5nIGFueSBlZmZlY3Qgb24gdGhlIGhhc2ggdmFsdWUuCisKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaDogVXNlIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRCBzbworICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHNheSBwdWJsaWM6IGV4cGxpY2l0bHku
IEFsc28gbW92ZWQgYWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBtZW1iZXJzIHRvIHRoZSBib3R0
b20gb2YgdGhlIHN0cnVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIHN0eWxlCisgICAg
ICAgIGZvciBzdHJ1Y3R1cmVzIGFzIG9wcG9zZWQgdG8gY2xhc3Nlcy4gU2luY2UgdGhlIGRhdGEg
bWVtYmVycyBhcmUgdGhlCisgICAgICAgIHByaW1hcnkgaW50ZXJmYWNlLCB0aGV5IGFyZSBmaXJz
dCwgYW5kIGFsbCBmdW5jdGlvbiBtZW1iZXJzIGFyZSBzZWNvbmRhcnkKKyAgICAgICAgYW5kIHNv
IHRoZXkgY29tZSBhZnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHRIYXNo
OjpoYXNoKTogVXNlIGNvbnZlcnRIYXNoIGluc3RlYWQgb2YKKyAgICAgICAgYSBjdXN0b20gd3Jp
dHRlbiBoYXNoIGZ1bmN0aW9uLiBUaGUgY3VzdG9tIHdyaXR0ZW4gZnVuY3Rpb24gd2FzIGNvbWJp
bmluZworICAgICAgICBoYWhlcyB1c2luZyBleGNsdXNpdmUgb3IsIG5vdCBhIGJlc3QgcHJhY3Rp
Y2UsIGFuZCBhbHNvIGhhZCBhIG1pc3Rha2UKKyAgICAgICAgd2hlcmUgaXQgdXNlZCAmIGluc3Rl
YWQgb2YgfCBhbmQgc28gdGhlICJiaXRzIiBsb2NhbCB2YXJpYWJsZSB3YXMgYWx3YXlzIDAuCisK
KyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDogVXNlIEhhc2hUcmFpdHMgaW5zdGVh
ZCBvZiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaDogUmVtb3ZlZCB1bm5lZWRlcyBpbmNsdWRlcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOiBDaGFuZ2VkIENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IGludG8gYQorICAgICAgICBzaW1wbGUgc3RydWN0IHdpdGggbm8gYWRkaXRpb25hbCBm
dW5jdGlvbiBtZW1iZXJzIG9yIHN0YXRpYyBkYXRhIG1lbWJlcnMuCisgICAgICAgIENoYW5nZWQg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHRvIHVzZSBjb21wdXRlSGFzaCB0byBjYWxjdWxh
dGUgdGhlCisgICAgICAgIGhhc2gsIGluc3RlYWQgb2YgSW50ZWdlckhhc2hlci4gUHJvYmFibHkg
YmV0dGVyIHRvIGhhc2ggdGhlIHBvaW50ZXIgb2YKKyAgICAgICAgdGhlIEF0b21TdHJpbmcgcmF0
aGVyIHRoYW4gaGFzaGluZyB0aGUgaGFzaCwgYnV0IGVpdGhlciB3YXksIHdlIHNob3VsZAorICAg
ICAgICBoYXZlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uIGZvciBBdG9tU3RyaW5nIGhhc2hpbmcg
aW4gdGhlIEhhc2hlciBjbGFzcy4KKyAgICAgICAgQWRkZWQgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoVHJhaXRzIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzLiBVc2UgdGhlIHZhbHVlIFVfU0VOVElORUwgZm9yIHRoZSBVQ2hhcjMyIGNoYXJhY3RlciwK
KyAgICAgICAgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIC0xIHVzZWQgYmVmb3JlLCBidXQgc2xp
Z2h0bHkgY2xlYXJlciB3aHkgaXQncyBPSy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3Rl
bUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6IFVzZSBIYXNoTWFwOjplbnN1cmUKKyAg
ICAgICAgaW5zdGVhZCBvZiBIYXNoTWFwOjphZGQgdG8gbWFrZSB0aGUgbG9naWMgc2ltcGxlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDogVXNlIGJvb2wgaW5zdGVhZCBv
ZiB1aW50OF90IGFzIHRoZSBiYXNlIHR5cGUKKyAgICAgICAgZm9yIHRoZSBOby9ZZXMgZW51bWVy
YXRpb24gSXNGb3JQbGF0Zm9ybUZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOiBSZW1vdmVkIHVubmVlZGVkICJ1c2luZyBuYW1lc3BhY2UgV1RGIiwKKyAg
ICAgICAgd2hpY2ggaXMgbm90IG91ciBiZXN0IHByYWN0aWNlLCBlc3BlY2lhbGx5IGdpdmVuIHVu
aWZpZWQgYnVpbGRzLgorICAgICAgICBDaGFuZ2VkIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBp
bnRvIGEgc2ltcGxlIHN0cnVjdCwgcmVtb3ZpbmcgYWxsIHRoZQorICAgICAgICBoYXNoLXJlbGF0
ZWQgbWVtYmVyIGZ1bmN0aW9ucy4gQWxzbyB1c2VkIHN0cnVjdC1zdHlsZSBuYW1pbmcgZm9yIHRo
ZQorICAgICAgICBtZW1iZXJzIHdpdGhvdXQgYW4gIm1fIiBwcmVmaXguIFVzZWQgdGhlIHR5cGUg
Rm9udEZhbWlseU5hbWUgZm9yIHRoZQorICAgICAgICBmYW1pbHkgbmFtZSwgd2hpY2ggbWVhbnMg
d2Ugd2lsbCB1c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbidzIHN5c3RlbQorICAgICAgICBmb3Ig
aGFzaGluZyBhbmQgY29tcGFyaW5nIGZhbWlseSBuYW1lcyBmb3IgZXF1YWxpdHkgd2l0aG91dCBo
YXZpbmcgdG8KKyAgICAgICAgcmVtZW1iZXIgZG8gdG8gc28gZXhwbGljaXRseS4gQ2hhbmdlZCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHRvCisgICAgICAgIHVzZSBjb21wdXRlSGFzaC4g
VGhlIG9sZCB2ZXJzaW9uIGhhZCB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgdG8KKyAgICAg
ICAgaGFuZGxlIE9wdGlvbmFsIGFuZCB3YXMgdW5uZWNlc3NhcmlseSBoYXNoaW5nIGhhc2hlcy4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6IFJl
bmFtZWQgdG8gcmVtb3ZlICJnZXQiCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4g
QWxzbyB1c2Ugc2hvcnRlciBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKyAgICAgICAgbmFt
ZXMgdGhhdCBhcmUgc2luZ2xlIHdvcmRzLCBhbmQgdXBkYXRlZCBzaW5jZSBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkKKyAgICAgICAgaXMgbm93IGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6IFVzZSBzaG9y
dGVyIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IFRvIGNvbXBhcmUgdHdv
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgb2JqZWN0cywKKyAgICAgICAgdXNlIGEgc2ltcGxlciBjb25z
dHJ1Y3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCBWZWN0b3IgYWxyZWFkeQorICAg
ICAgICBoYXMgYW4gPT0gb3BlcmF0b3IgYW5kIHdlIGFyZSB1c2luZyBGb250RmFtaWx5TmFtZSBm
b3IgdGhlIGVsZW1lbnRzCisgICAgICAgIG9mIHRoZSB2ZWN0b3IsIHdoaWNoIGhhcyBhIGNvcnJl
Y3QgPT0gb3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aDo6aGFzaCk6IFVzZSBjb21wdXRlSGFzaCBzaW5jZQorICAgICAgICB0aGUgRm9udEZhbWlseU5h
bWUgaGFzaGluZyBpcyBub3cgY29ycmVjdCwgYW5kIHdlIGNhbiByZWx5IG9uIHRoZQorICAgICAg
ICB3YXkgSGFzaGVyIGtub3dzIGhvdyB0byBpdGVyYXRlIGEgY29sbGVjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSBpcyBub3cgYSBzaW1wbGUgc3RydWN0
LiBBbHNvIHVzZSBjb25zdGV4cHIgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmludmFsaWRhdGUpOiBVc2UgY29weVRvVmVjdG9yT2Y8PiB0byBzaW1wbGlmeSB0aGUKKyAgICAg
ICAgY29kZSB0aGF0IGNhbGxzIGZvbnRDYWNoZUludmFsaWRhdGVkIG9uIGFsbCB0aGUgZm9udCBz
ZWxlY3RvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogVXNl
ICJ1c2luZyIgaW5zdGVhZCBvZiAidHlwZWRlZiIuCisgICAgICAgIFJlbW92ZSBGb250RGVzY3Jp
cHRpb25LZXk6OmNvbXB1dGVIYXNoLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTogQW4gb3Zlcmxv
YWQgb2YgYWRkIGZvciBIYXNoZXIgdG8gaW5jbHVkZSBhCisgICAgICAgIEZvbnREZXNjcmlwdGlv
bktleSBpbiBhIGhhc2gsIHdoaWNoIGp1c3QgbGlzdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuCisg
ICAgICAgIFRoZSBvbGQgdmVyc2lvbiBkaWQgYSBoYXNoIG9mIGhhc2hlcywgYnV0IHRoYXQncyBu
b3QgbmVlZGVkIGFueSBtb3JlLgorICAgICAgICBVcGRhdGVkIEZvbnREZXNjcmlwdGlvbktleUhh
c2ggdG8gdXNlIHRoZSBIYXNoZXIgdmVyc2lvbiBvZiBDb21wdXRlSGFzaC4KKyAgICAgICAgQWRk
ZWQgRm9udEZhbWlseU5hbWUuIENoYW5nZSBGb250Q2FzY2FkZUNhY2hlS2V5IHRvIHVzZSBhIHZl
Y3RvciBvZgorICAgICAgICBGb250RmFtaWx5TmFtZSBpbnN0ZWFkIG9mIEF0b21TdHJpbmcuIElu
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSwgdXNlCisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRCBpbnN0ZWFkIG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECisgICAgICAgIGFu
ZCBhbHNvIGdvdCByaWQgb2YgdGhlIHVubmVlZWRlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFs
dWUpOgorICAgICAgICBVc2UgdGhlIGRlbGV0ZWQgdmFsdWUgb2YgRm9udERlc2NyaXB0aW9uS2V5
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM6OmlzRGVs
ZXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAgIFJlbmFtZWQgZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YSB0byBqdXN0IGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQg
b2YKKyAgICAgICAgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRTZWxlY3Rpb25SYW5nZTo6dW5pcXVlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YWRkKTogQWRkIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRv
IHRoZSBoYXNoCisgICAgICAgIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBjb21iaW5pbmcgdGhlbS4g
Rm9yIG5vdywgdGhpcyBtYWtlcyB0aGUgd2F5CisgICAgICAgIHRoZXkgYXJlIGhhc2hlZCBhIGJp
dCBpbmVmZmljaWVudCwgYnV0IHRoYXQgY2FuIGJlIHJlLXRpZ2h0ZW5lZCB1cCBieQorICAgICAg
ICBpbXByb3ZpbmcgdGhlIGFsZ29yaXRobSBvZiBIYXNoZXIgaWYgd2UgbGlrZS4gU2hvdWxkIGJl
IGZpbmUgZm9yIG91cgorICAgICAgICBuZWVkcyBlaXRoZXIgd2F5LgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oOiBBZGRlZCBvdmVy
bG9hZHMgb2YgdGhlCisgICAgICAgIGFkZChIYXNoZXImKSBmdW5jdGlvbiBmb3Igc3RkOjphcnJh
eTxjaGFyLCA0PiBhbmQgRm9udFRhZ2dlZFNldHRpbmc8VD4uCisgICAgICAgIEdvdCByaWQgb2Yg
bWFueSB1c2VzIG9mIHBhc3MgYnkgcmVmZXJlbmNlIGluc3RlYWQgb2YgdmFsdWUgZm9yIEZvbnRU
YWcsCisgICAgICAgIHNpbmNlIGl0IGZpdHMgaW50byBhIDMyLWJpdCByZWdpc3RlciBhbmQgYnRo
IG1vcmUgc291cmNlIGNvZGUgYW5kIGxlc3MKKyAgICAgICAgZWZmaWNpZW50IHRvIHBhc3MgYnkg
dmFsdWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6IFJlbW92
ZWQgInVzaW5nIFdURjo6cGFpckludEhhc2giIHNpbmNlCisgICAgICAgIHRoYXQncyBub3cgZG9u
ZSBpbiB0aGUgV1RGIGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQKKyAgICAgICAgInVzaW5nIFdU
Rjo6R2VuZXJpY0hhc2hUcmFpdHMiLCB3aGljaCB3YXMgdW5oZWxwZnVsLiBUaGUgR2VuZXJpY0hh
c2hUcmFpdHMKKyAgICAgICAgdGVtcGxhdGUgaXMgb25seSByZWFsbHkgbmVlZGVkIHdoZW4gc3Bl
Y2lhbGl6aW5nIEhhc2hUcmFpdHMsIHdoaWNoCisgICAgICAgIGFscmVhZHkgaGFzIHRvIGJlIGRv
bmUgd2l0aGluIHRoZSBXVEYgbmFtZXNwYWNlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlCisgICAg
ICAgIHNob3VsZCBqdXN0IHVzZSBIYXNoVHJhaXRzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg6IFVzZSBIYXNoVHJhaXRz
CisgICAgICAgIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQu
Y3BwOgorICAgICAgICBNb3ZlIHRoZSBkYXRhIG1lbWJlcnMgdG8gdGhlIHRvcCBvZiB0aGUgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkgc3RydWN0LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNvbXB1dGVIYXNoIGZ1bmN0aW9uIGFuZCBXVEYgcHJlZml4IGZyb20gc2FmZUNGRXF1YWwuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOiBD
YWxsIHRoZSBIYXNoZXIgdmVyc2lvbgorICAgICAgICBvZiBjb21wdXRlSGFzaCBkaXJlY3RseSB0
byBoYXNoIHRoZSB0d28gaXRlbXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2NhZGVMaXN0UGFyYW1l
dGVyczo6aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCBpbnN0ZWFkIG9mIElu
dGVnZXJIYXNoZXIuIEFsc28gcmVuYW1lZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICBzdHJ1
Y3QgZnJvbSBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gg
dG8KKyAgICAgICAgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIFJlbW92ZWQgbm93LXVubmVlZGVkIFdURiBwcmVm
aXhlcyBmcm9tIGNhbGxzIHRvIHNhZmVDRkVxdWFsLgorCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFz
aFRyYWl0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlRm9udEhhc2gpOiBVc2UgY29tcHV0ZUhhc2ggaW5zdGVh
ZCBvZiBJbnRlZ2VySGFzaGVyLgorICAgICAgICBTdGlsbCBub3QgZ3JlYXQgdGhhdCB3ZSBoYXNo
IGEgaGFzaCBoZXJlLCBidXQgd2UgY2FuIGltcHJvdmUgdGhhdCBsYXRlci4KKworICAgICAgICAq
IHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZSk6IFJlbW92
ZWQgdW5uZWVkZWQKKyAgICAgICAgV1RGTW92ZSBvbiBPYmplY3RJZGVudGlmaWVyLCB3aGljaCBh
cmUganVzdCBpbnRlZ2Vycywgc28gbW92ZSB2cy4gY29weQorICAgICAgICBpcyBub3QgYW4gaW1w
b3J0YW50IGRpc3RpbmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVu
dElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBVc2UgY29tcHV0ZUhhc2gKKyAgICAgICAgaW5zdGVh
ZCBvZiBjb21iaW5pbmcgaW50SGFzaCB3aXRoIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeS4gVGhp
cyBmaXhlcworICAgICAgICB0d28gbWlzdGFrZXM6IG9uZSBpcyB0aGF0IHRoZXJlIGlzIG5vIG5l
ZWQgdG8gaGFzaCBhIGhhc2guIFRoZSBzZWNvbmQgaXMKKyAgICAgICAgdGhhdCBpbnRIYXNoIHRh
a2VzIGEgMzItYml0IGludGVnZXIgYXMgaXRzIHBhcmFtZXRlciwgc28gaGlnaCBiaXRzCisgICAg
ICAgIG9mIG9iamVjdCBpZGVudGlmaWVycyB3ZXJlIGRpc2NhcmRlZCB1bm5lY2Vzc2FyaWx5Lgor
CiAyMDIxLTA0LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFBlbmRpbmdJbWFnZUJpdG1hcCBnZXRzIGNyZWF0ZWQgb24gYSBzdG9wcGVkIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjVkNjc1MTdmZjIwYzc1Yzg3MGU2MmUwMTg5YWEy
YjlkOWU0YjU4MS4uYTA5YjJlYTk3ZjZmOWQ3OWI3MTZhYjAzMzIzYmRhOTNkNWFkNGYxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hl
ciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNo
IGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29tYmluaW5nIGlu
dEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMKKyAgICAgICAg
dHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggYSBoYXNo
LiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMyLWJpdCBpbnRl
Z2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBvYmplY3QgaWRl
bnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAgICAqIFNoYXJl
ZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW06CisgICAgICAgICgtW1dLQnJv
d3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgcGFp
ckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0YWtlOiBwYWlySW50SGFzaCB0YWtl
cyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMKKyAgICAgICAgb2Ygb2JqZWN0IGlk
ZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJpbHkuCisKIDIwMjEtMDQtMDIgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVBdIFBvd2VyIHJl
Z3Jlc3Npb246IGF1ZGlvIGhhcmR3YXJlIGlzIGNvbmZpZ3VyZWQgZm9yIDEyOCBmcmFtZSBwcmVm
ZXJyZWQgYnVmZmVyIHNpemUgZHVyaW5nIFZpZGVvQXVkaW8gcGxheWJhY2sKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA2MGM0Mzg5MjBmMzQ5OTYxMzgzYjYxNjRhZmYyYmU3YjYxNzhl
YjU4Li5mMTBiODY5NmRiNWQ4ZjlhN2EwYThjNTI2YzkyZjc3MzZjODgwODFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDQtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBIYXNoZXIgbW9yZSwgcmVtb3Zl
IEludGVnZXJIYXNoZXIsIGZpeCBoYXNoaW5nLXJlbGF0ZWQgbWlzdGFrZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9CaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHMuCisKIDIwMjEtMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVc2UgTUFDSF9QT1JUX1ZBTElEKCkgd2hlbiB3YW50aW5nIHRvIGNoZWNrIGlmIGEg
bWFjaCBwb3J0IGlzIHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAppbmRleCBkMTQ3NTQxODMyNDcyNTU0ODc1OTlhZTliNDYyMDViNmQ1ZDdk
ZTI4Li5hODRiZGExNmVmYjdjYjdjMzI1YWM2YzIwN2IwOTA3M2MxODIzMDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgIENoZWNrcG9pbnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gaW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGlj
IEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9m
ZnNldCAtIDEpOyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCmluZGV4IDFiYWU3ZmRiOGNlMmQ4NWEyZGE2NGM3ODky
MTdlMGUxZWM0MWE1MjIuLjY1OGUyY2ZjNWVjZTgyMzQ5NzZiNjM0ZGU4ZTM3ZjIwZDZmMGZjODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaApAQCAtMTU0
LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CiAgICAgc3Rk
OjphcnJheTxBYnN0cmFjdEhlYXAsIDE2PiBtX3NtYWxsSW5kaWNlczsKICAgICAKLSAgICBzdHJ1
Y3QgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPHB0
cmRpZmZfdD4geworICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8cHRyZGlmZl90PiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xvdCA9IDE7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBhZTU3OGEzMjFiOGI3NTIzY2Q1ZjRiMjUzNDI4MDg3OWVlNWVmMDFmLi5mZTkwMDc1MDVl
OGJiNDEyYjYzNmE5YzNiYzVjN2U2Yjk3MTE0YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC01OTAsNyArNTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZVNldCYgbGl2ZSA9IG1fbGl2ZUluVG9Ob2RlLmZpbmQobm9kZSktPnZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBoaWdoUGFyZW50SW5kZXggPSBub2RlLT5pbmRleCgpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICB1aW50NjRfdCBoYXNoID0gV1RGOjppbnRIYXNoKGhpZ2hQYXJl
bnRJbmRleCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2luY2UgaW50SGFzaCByZXR1cm5zIGEg
MzItYml0IHVuc2lnbmVkIGludGVnZXIsIGl0J3Mgbm90IGNsZWFyIHdoeSBpdCdzIGhlbHBmdWwg
dG8gc3RvcmUgaXQgaW4gYSB1aW50NjRfdC4KKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBp
bnRIYXNoKGhpZ2hQYXJlbnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoaGFzaCA+PSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSArIDEpICogT3B0aW9uczo6dmFsaWRhdGVBYnN0cmFjdEludGVycHJl
dGVyU3RhdGVQcm9iYWJpbGl0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCmluZGV4IDUzN2VlNTY1MjBlZDU4NDMwMWY0ODIwNDk2MmNmMjc4NmJkYjM0ZmQuLjA1NGUz
MWVkNmJhNGEyODllOGVjYzVlNmQ2NzE4YWVlNjc2MTA1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDE2LDcgKzQxNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGludCoganVtcFRhcmdldDsKICAgICB9OwogCi0gICAgc3Ry
dWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2Rl
ZEpTVmFsdWU+IHsKKyAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IHRydWU7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oIGIvU291cmNlL1dURi93
dGYvSGFzaEZ1bmN0aW9ucy5oCmluZGV4IDVmOTBmNGVhNzYxMTgxYmZlNGE0NTA3N2IxMmQxODUx
ZTdmODljNDkuLmZmZDUyMmNlMjkwOGQ3ZmVlNzJhYmIwNDYxNGFhZjQ0MTA1YjZiNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoRnVuY3Rpb25zLmgKQEAgLTI3NSwzICsyNzUsNSBAQCBuYW1lc3BhY2UgV1RGIHsKIHVz
aW5nIFdURjo6RGVmYXVsdEhhc2g7CiB1c2luZyBXVEY6OkludEhhc2g7CiB1c2luZyBXVEY6OlB0
ckhhc2g7Cit1c2luZyBXVEY6OmludEhhc2g7Cit1c2luZyBXVEY6OnBhaXJJbnRIYXNoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAppbmRleCA1MmViMjM0MjExZDM2OWM4ZTNlMDlhYzc1YmQ4YzQ0ZGEwNjM5NTVlLi4yODcyNTY4
ZTkzNjc5NzE3YzMxNGQwZTNjYTE2Yjc3MjljZDA0NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDMxICsyMCwxNCBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBEZXByZWNhdGVkLiBV
c2UgSGFzaGVyIGluc3RlYWQuCi1jbGFzcyBJbnRlZ2VySGFzaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2b2lkIGFkZCh1aW50MzJfdCBpbnRlZ2VyKQot
ICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hl
cjsKLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJfdCBjb21wdXRlSGFz
aChjb25zdCBUeXBlcyYuLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gT3Ro
ZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+LCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfdW5zaWduZWQ8VW5zaWdu
ZWRJbnRlZ2VyPjo6dmFsdWUgJiYgc2l6ZW9mKFVuc2lnbmVkSW50ZWdlcikgPD0gc2l6ZW9mKHVp
bnQzMl90KSwgdm9pZD4gYWRkKEhhc2hlciYsIFVuc2lnbmVkSW50ZWdlcik7CkBAIC0xMTIsNiAr
OTUsMjcgQEAgaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBmbG9hdCBudW1iZXIpCiAg
ICAgYWRkKGhhc2hlciwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihudW1iZXIpKTsKIH0KIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBib29sIHJlbWFpbmRlciA9IHN0cmluZy5sZW5ndGgoKSAmIDE7CisgICAgdW5zaWduZWQgcm91
bmRlZExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSAtIHJlbWFpbmRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm91bmRlZExlbmd0aDsgaSArPSAyKQorICAgICAgICBhZGQoaGFzaGVy
LCAoc3RyaW5nW2ldIDw8IDE2KSB8IHN0cmluZ1tpICsgMV0pOworICAgIGlmIChyZW1haW5kZXIp
CisgICAgICAgIGFkZChoYXNoZXIsIHN0cmluZ1tyb3VuZGVkTGVuZ3RoXSk7Cit9CisKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQorewor
ICAgIC8vIENob3NlIHRvIGhhc2ggdGhlIHBvaW50ZXIgaGVyZS4gQXNzdW1pbmcgdGhpcyBpcyBi
ZXR0ZXIgdGhhbiBoYXNoaW5nIHRoZSBjaGFyYWN0ZXJzIG9yIGhhc2hpbmcgdGhlIGFscmVhZHkt
Y29tcHV0ZWQgaGFzaCBvZiB0aGUgY2hhcmFjdGVycy4KKyAgICBhZGQoaGFzaGVyLCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihzdHJpbmcuaW1wbCgpKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYWRkKGhhc2hlciwgdXJsLnN0
cmluZygpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRW51bWVyYXRpb24+IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPEVudW1lcmF0aW9uPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXIm
IGhhc2hlciwgRW51bWVyYXRpb24gdmFsdWUpCiB7CiAgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nh
c3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFbnVtZXJhdGlvbj4+KHZhbHVlKSk7CkBAIC0xODYs
NCArMTkwLDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpCiAKIHVzaW5nIFdURjo6Y29tcHV0ZUhh
c2g7CiB1c2luZyBXVEY6Okhhc2hlcjsKLXVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09iamVjdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XVEYvd3Rm
L09iamVjdElkZW50aWZpZXIuaAppbmRleCBmOWM2N2I2M2I1ZTI2YTQwYjRhYWI1OGMwMTRkNWY0
NzBhNjA4NTUzLi44ODg1YWEzMWIyOTU2MWQ5MDBmNzUyZWIzZmViMzc4ZjVkNDQzOTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvT2JqZWN0SWRlbnRpZmllci5oCkBAIC0xMzEsNiArMTMxLDExIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBPYmplY3RJZGVudGlmaWVyPFQ+IG1ha2VPYmplY3RJZGVudGlmaWVy
KHVpbnQ2NF90IGlkCiAgICAgcmV0dXJuIE9iamVjdElkZW50aWZpZXI8VD4geyBpZGVudGlmaWVy
IH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgT2JqZWN0SWRlbnRpZmllcjxUPiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIs
IGlkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPYmplY3RJZGVudGlmaWVySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
T2JqZWN0SWRlbnRpZmllcjxUPiYgaWRlbnRpZmllcikgeyByZXR1cm4gaW50SGFzaChpZGVudGlm
aWVyLm1faWRlbnRpZmllcik7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPYmplY3RJ
ZGVudGlmaWVyPFQ+JiBhLCBjb25zdCBPYmplY3RJZGVudGlmaWVyPFQ+JiBiKSB7IHJldHVybiBh
ID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oIGIvU291cmNl
L1dURi93dGYvUmV0YWluUHRyLmgKaW5kZXggYzdmYjc0NDEwNTU2MWZkNjE1ODg4OGUzY2YwYWVm
OWRiMzQ2NWEyZi4uNGM1OTg0ZWZkNjAxN2EyYzY4ZTUyNjJmOGNlY2I1ZGEyNTgzZTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
UmV0YWluUHRyLmgKQEAgLTQwMiw2ICs0MDIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBk
eW5hbWljX29iamNfY2FzdChpZCBvYmplY3QpCiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5n
IFdURjo6YWRvcHRDRjsKIHVzaW5nIFdURjo6cmV0YWluUHRyOwordXNpbmcgV1RGOjpzYWZlQ0ZF
cXVhbDsKK3VzaW5nIFdURjo6c2FmZUNGSGFzaDsKIAogI2lmZGVmIF9fT0JKQ19fCiB1c2luZyBX
VEY6OmFkb3B0TlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKaW5kZXggYzM3Mzk0ODhkZTg1YzM4ZWVjZDY3MWZl
NzAzMjE3ZjM5M2U5YzIwYi4uOTM4MjFhMjdlNWY4YjUwNDIxYWI3NmFkNzdjOWM5YjI0NWNjYmUw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1ZlY3Rvckhhc2guaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwyOCArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKICNpbmNsdWRl
ICJIYXNoZXIuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXN0cnVjdCBWZWN0b3JIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB2YWx1ZSA6IHZlY3RvcikKLSAgICAgICAgICAgIGhhc2hlci5hZGQoRGVmYXVsdEhhc2g8VD46
Omhhc2godmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA9PSBiOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gc3RydWN0IERlZmF1bHRIYXNoPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHZlY3Rvcik7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotc3RydWN0IERlZmF1bHRIYXNo
PFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9ySGFzaDxULCBpbmxpbmVDYXBhY2l0
eT4geyB9OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAppbmRleCBjNTBiZjE3Yjk2YmQ3MzAwODJlM2MwMWQ2
OTdiNjJkNjQ1OWNkYzI0Li5hYzU1OTJlYmM2MjI1OTRlNDU4MWEzNjBlODIzYzFiN2JmNmM2YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25SdWxlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRF
eHRlbnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsMjMgKzg5LDEyIEBAIHN0cnVjdCBUcmlnZ2VyIHsKIHN0
cnVjdCBUcmlnZ2VySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVHJpZ2dl
ciYgdHJpZ2dlcikKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSA/IDEwNjE5ODYzIDogNDA5NjAwMDE7Ci0gICAgICAgIGlmICgh
dHJpZ2dlci51cmxGaWx0ZXIuaXNOdWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49IFN0cmluZ0hh
c2g6Omhhc2godHJpZ2dlci51cmxGaWx0ZXIpOwotICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50
SGFzaChoYXNoLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPjo6aGFzaCh0cmlnZ2VyLmZsYWdz
KSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiA6IHRyaWdnZXIuY29u
ZGl0aW9ucykKLSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChjb25kaXRpb24p
OwotCi0gICAgICAgIGhhc2ggXj0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpZ2dlci5j
b25kaXRpb25UeXBlKTsKLSAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaCh0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgdHJpZ2dlci51cmxGaWx0
ZXIsIHRyaWdnZXIuZmxhZ3MsIHRyaWdnZXIuY29uZGl0aW9ucywgdHJpZ2dlci5jb25kaXRpb25U
eXBlKTsKICAgICB9Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUcmlnZ2VyJiBhLCBj
b25zdCBUcmlnZ2VyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDBk
NTE4MzNmNWMwNjg1YmI4ODhlM2FhMjE3N2MzODdmNDM3NmE1NDQuLjRlMjVjNzJlZGVhYWY1NzU5
ZWRiNjBmMTJmNmVmMDZhNGI0ZWMxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9UZXJtLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTE2OCwxMSArMTY5LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNo
KFdURjo6cGFpckludEhhc2goV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVyc1swXSksIFdURjo6aW50
SGFzaChtX2NoYXJhY3RlcnNbMV0pKSwgbV9pbnZlcnRlZCk7CisgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZUhhc2gobV9pbnZlcnRlZCwgbV9jaGFyYWN0ZXJzKTsKICAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2ludmVydGVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWlu
dDY0X3QgbV9jaGFyYWN0ZXJzWzJdIHsgMCwgMCB9OworICAgICAgICBzdGQ6OmFycmF5PHVpbnQ2
NF90LCAyPiBtX2NoYXJhY3RlcnMgeyAwLCAwIH07CiAgICAgfTsKIAogICAgIHN0cnVjdCBHcm91
cCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmNwcApp
bmRleCAxM2Y5ZjQ5NjY5YmI2OTQ3YTA0NzRiNGJjNzQxNWYzY2Y0MmY0MTY2Li4wOTgxNjI2ZWZh
M2NhN2RjN2Y4YTI5ZWQ4ZmQwN2E5NWQ0YmM1ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAKQEAgLTEzNyw2ICsxMzcsNDMgQEAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGIpCiAgICAgOwogfQogCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1bnNpZ25lZCBiaXRzID0gY29udGV4dC5pc0hU
TUxEb2N1bWVudCAgICAgICAgICAgICAgICAgIDw8IDAKKyAgICAgICAgfCBjb250ZXh0Lmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gICAgICAgICAgICAgICAgIDw8IDEKKyAgICAgICAgfCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIKKyAgICAg
ICAgfCBjb250ZXh0LnVzZVN5c3RlbUFwcGVhcmFuY2UgICAgICAgICAgICAgICAgICAgICAgIDw8
IDMKKyAgICAgICAgfCBjb250ZXh0LmFzcGVjdFJhdGlvRW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDQKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yQ29udHJhc3RFbmFibGVkICAgICAg
ICAgICAgICAgICAgICAgIDw8IDUKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yRmlsdGVyRW5hYmxl
ZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDYKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yTWl4
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDcKKyAgICAgICAgfCBjb250ZXh0
LmNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQgICAgICAgICAgICAgICAgIDw8IDgKKyAgICAgICAg
fCBjb250ZXh0LmNvbnRhaW5tZW50RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDkK
KyAgICAgICAgfCBjb250ZXh0LmNzc0NvbG9yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDEwCisgICAgICAgIHwgY29udGV4dC5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgICAg
ICAgICAgICAgICAgICA8PCAxMQorICAgICAgICB8IGNvbnRleHQuaW5kaXZpZHVhbFRyYW5zZm9y
bVByb3BlcnRpZXNFbmFibGVkICAgICAgPDwgMTIKKyNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQorICAgICAgICB8IGNvbnRleHQubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQgICAgICAgPDwgMTMKKyNlbmRpZgorICAgICAgICB8IGNvbnRleHQub3ZlcnNjcm9s
bEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgMTQKKyAgICAgICAgfCBjb250ZXh0
LnJlbGF0aXZlQ29sb3JTeW50YXhFbmFibGVkICAgICAgICAgICAgICAgIDw8IDE1CisgICAgICAg
IHwgY29udGV4dC5zY3JvbGxCZWhhdmlvckVuYWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAx
NgorICAgICAgICB8IGNvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkICAgICAgICAg
ICAgICAgPDwgMTcKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgICAgICB8IGNvbnRl
eHQudGV4dEF1dG9zaXppbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgPDwgMTgKKyNlbmRp
ZgorI2lmIEVOQUJMRShDU1NfVFJBTlNGT1JNX1NUWUxFX09QVElNSVpFRF8zRCkKKyAgICAgICAg
fCBjb250ZXh0LnRyYW5zZm9ybVN0eWxlT3B0aW1pemVkM0RFbmFibGVkICAgICAgICAgIDw8IDE5
CisjZW5kaWYKKyAgICAgICAgfCBjb250ZXh0LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IgIDw8IDIwCisgICAgICAgIHwgY29udGV4dC5mb2N1c1Zpc2libGVFbmFibGVk
ICAgICAgICAgICAgICAgICAgICAgICA8PCAyMQorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCisgICAgICAgIHwgY29udGV4dC5hdHRhY2htZW50RW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAyMgorI2VuZGlmCisgICAgICAgIHwgY29udGV4dC5tb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyMzsgLy8gVGhpcyBpcyBtdWx0aXBsZSBiaXRz
LCBzbyBrZWVwIGl0IGxhc3QuCisgICAgYWRkKGhhc2hlciwgY29udGV4dC5iYXNlVVJMLCBjb250
ZXh0LmNoYXJzZXQsIGJpdHMpOworfQorCiBib29sIENTU1BhcnNlckNvbnRleHQ6OmlzUHJvcGVy
dHlSdW50aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
Q29udGV4dC5oCmluZGV4IDhlMGI4N2Y3YWE3NjBlNmVmMjc2YmQ2MzJlZmZiMGFmYWQ5MWU2ZTYu
LjQ5NTYwZDgxYzg1OTBmOTBmZGJhNTRlYTUyMTU1MmNjZGRjNGQwZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCkBAIC0zMCwyMCArMzAsMTYgQEAK
ICNpbmNsdWRlICJTdHlsZVJ1bGVUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUg
PHd0Zi9VUkxIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29u
dGV4dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBVUkwgYmFz
ZVVSTDsKICAgICBTdHJpbmcgY2hhcnNldDsKQEAgLTU3LDggKzUzLDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKICAgICBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotCiAgICAgLy8gU2V0dGluZ3MuCiAgICAgYm9vbCBhc3BlY3RS
YXRpb0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgY29sb3JDb250cmFzdEVuYWJsZWQgeyBm
YWxzZSB9OwpAQCAtOTAsNzAgKzg0LDI5IEBAIHB1YmxpYzoKICAgICBib29sIGF0dGFjaG1lbnRF
bmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCi0gICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdDsKKyAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUsIGNv
bnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJD
b250ZXh0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOworICAgIGJvb2wgaXNQcm9wZXJ0eVJ1
bnRpbWVEaXNhYmxlZChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBVUkwgY29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkgY29uc3Q7CiB9OwogCiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKK3ZvaWQgYWRkKEhhc2hlciYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKKwogV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwogCiBzdHJ1Y3QgQ1NTUGFyc2Vy
Q29udGV4dEhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gdXNl
IFdURjo6SGFzaGVyLgotCi0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSAwOwotICAgICAgICBpZiAo
IWtleS5iYXNlVVJMLmlzTnVsbCgpKQotICAgICAgICAgICAgaGFzaCBePSBXVEY6OlVSTEhhc2g6
Omhhc2goa2V5LmJhc2VVUkwpOwotICAgICAgICBpZiAoIWtleS5jaGFyc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChrZXkuY2hhcnNldCk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBiaXRzID0ga2V5LmlzSFRNTERvY3VtZW50ICAgICAgICAg
ICAgICAgICAgPDwgMAotICAgICAgICAgICAgJiBrZXkuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biAgICAgICAgICAgICAgICAgPDwgMQotICAgICAgICAgICAgJiBrZXkuaXNDb250ZW50T3BhcXVl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMgotICAgICAgICAgICAgJiBrZXkudXNlU3lz
dGVtQXBwZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgICAgPDwgMwotICAgICAgICAgICAgJiBr
ZXkuYXNwZWN0UmF0aW9FbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNAotICAgICAg
ICAgICAgJiBrZXkuY29sb3JDb250cmFzdEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgPDwg
NQotICAgICAgICAgICAgJiBrZXkuY29sb3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgNgotICAgICAgICAgICAgJiBrZXkuY29sb3JNaXhFbmFibGVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgNwotICAgICAgICAgICAgJiBrZXkuY29uc3RhbnRQcm9wZXJ0aWVz
RW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgOAotICAgICAgICAgICAgJiBrZXkuY29udGFpbm1l
bnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgOQotICAgICAgICAgICAgJiBrZXku
Y3NzQ29sb3I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMTAKLSAgICAgICAg
ICAgICYga2V5LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8IDEx
Ci0gICAgICAgICAgICAmIGtleS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQg
ICAgICA8PCAxMgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgICAg
ICAgICAmIGtleS5sZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8PCAx
MwotI2VuZGlmCi0gICAgICAgICAgICAmIGtleS5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAg
ICAgICAgICAgICAgICA8PCAxNAotICAgICAgICAgICAgJiBrZXkucmVsYXRpdmVDb2xvclN5bnRh
eEVuYWJsZWQgICAgICAgICAgICAgICAgPDwgMTUKLSAgICAgICAgICAgICYga2V5LnNjcm9sbEJl
aGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE2Ci0gICAgICAgICAgICAmIGtl
eS5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQgICAgICAgICAgICAgICA8PCAxNwotI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgICAgICAmIGtleS50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAxOAotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19U
UkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVEXzNEKQotICAgICAgICAgICAgJiBrZXkudHJhbnNmb3Jt
U3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQgICAgICAgICAgPDwgMTkKLSNlbmRpZgotICAgICAgICAg
ICAgJiBrZXkudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwgMjAK
LSAgICAgICAgICAgICYga2V5LmZvY3VzVmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDIxCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICAgICAgICAgICYg
a2V5LmF0dGFjaG1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCi0jZW5k
aWYKLSAgICAgICAgICAgICYga2V5Lm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDIzOyAvLyBLZWVwIHRoaXMgbGFzdC4KLSAgICAgICAgaGFzaCBePSBXVEY6Omlu
dEhhc2goYml0cyk7Ci0gICAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29t
cHV0ZUhhc2goY29udGV4dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJldHVybiBhID09IGI7
IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsK
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQ+IHsKICAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4
dCYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90LmJhc2VVUkwpIFVSTChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBX
ZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuYmFzZVVSTC5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGM3YTcwOWEwYTI0MTI0NDNkNDNmMTdmNmZhNWYzMTJkOTliMGEzY2MuLjI3
MmEyYjBlN2Q1MzcyNWE2ZDU0MzljOTI1NzVhYWZkMDliZWIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgRm9ybUVs
ZW1lbnRLZXlIYXNoOjpoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkpCiAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoRm9ybUVsZW1lbnRLZXkpPigma2V5KTsK
IH0KIAotc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9ybUVsZW1lbnRLZXk+IHsKK3N0cnVjdCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHMg
OiBIYXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3Qp
IEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IDgzZWRkOWU5
MjU0OWZhYWVmMTI1MDVlMTUzZWNmNzJmZWI5MzFmYTguLmNlYjg0ZTk2MDIwZDg4OGVmNTZhNjJk
NGJhYWU0MzY1ZjAzOTExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAogI2lmIEVOQUJMRShUSFVOREVSKQogI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBl
cy5oIgpAQCAtMjA1LDggKzIwMyw2IEBAIHByaXZhdGU6CiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNl
c3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKLXB1YmxpYzoKLQogcHJvdGVjdGVk
OgogICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKICAgICBj
b25zdCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0YW5jZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCAwODcwMmQ0Yzc5MGNiOTYzYWJhMTRhNzI5NzE4MjVmNGMwNDJmZDc5Li5i
MTFhODc2OWU4NjBiOTNiMDlkNzMyNDFlNWJlYmQ1ODA4YjYyYjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTM1LDYzICs1MzUsMzIgQEAgdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEEKIH0KICNlbmRpZgogCi1jbGFzcyBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleSB7Ci1wdWJsaWM6Ci0gICAgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGUsIFVDaGFyMzIgY2hhcmFjdGVyLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9u
dCkKLSAgICAgICAgOiBsb2NhbGUobG9jYWxlKQotICAgICAgICAsIGNoYXJhY3RlcihjaGFyYWN0
ZXIpCi0gICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9ybUZvbnQgPT0gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcykKLSAgICB7Ci0gICAgfQotCi0gICAgQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IGNoYXJh
Y3RlcigtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlciA9PSAtMTsgfQotCi0gICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhl
ci5jaGFyYWN0ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZv
bnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRy
dWU7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eUhhc2g7Ci0KK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CiAgICAgQXRvbVN0cmlu
ZyBsb2NhbGU7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CiAgICAgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCB7IGZhbHNlIH07CiB9OwogCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleSYga2V5KQotICAgIHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAg
ICAgIGhhc2hlci5hZGQoa2V5LmNoYXJhY3Rlcik7Ci0gICAgICAgIGhhc2hlci5hZGQoa2V5Lmlz
Rm9yUGxhdGZvcm1Gb250KTsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkubG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsK
LSAgICB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikKK3sKKyAgICByZXR1cm4g
YS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5p
c0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250OworfQogCitzdHJ1Y3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXku
bG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCitz
dHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAoTm90
TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7
IH0gfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsg
fQorfTsKKwogLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhN
RTogU2hvdWxkbid0IHRoZXNlIGJlIFdlYWtQdHJzPwotdHlwZWRlZiBIYXNoTWFwPENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBXVEY6
OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4+IENoYXJhY3Rl
ckZhbGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxs
YmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKKy8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2lu
ZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgordXNp
bmcgQ2hhcmFjdGVyRmFsbGJhY2tNYXAgPSBIYXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2hUcmFpdHM+OwordXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8Y29u
c3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPjsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNjA4LDEyICs1NzcsOCBAQCBSZWZQ
dHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hh
cmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24o
KS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxh
dGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAx
KTsKICAgICB9CiAKLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwot
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKFdURk1vdmUoa2V5KSwgbnVsbHB0cik7Ci0KLSAgICBGb250KiYgZmFsbGJhY2tGb250
ID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJh
Y2tGb250KSB7CisgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0g
SXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vIH07CisgICAgcmV0dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsmXSB7CiAgICAgICAgIFVDaGFyIGNvZGVV
bml0c1syXTsKICAgICAgICAgdW5zaWduZWQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBpZiAo
VV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNjI0LDEzICs1ODksMTEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rlciwg
Y29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQotCi0gICAg
ICAgIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENh
Y2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5n
ZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxsYmFja0ZvbnQ7CisgICAgICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0Zv
clBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0
cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAg
ICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBmb250OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBGb250OjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKaW5kZXggYzdkYTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4u
NjUzYjMzOGI3YzM0MjU2MjcyMjQ5NjExZTI3MDFhYzVkMjYzZTk2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtNjQsNyArNjQsNyBAQCBzdHJ1Y3QgR2x5cGhE
YXRhOwogCiBlbnVtIEZvbnRWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNt
YWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlh
bnQgfTsKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0
Y2ggfTsKLWVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9
OworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAKICNp
ZiBVU0UoQ09SRV9URVhUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0
YWJsZVRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAppbmRleCBlZGYyZmUwNDczYWYzYTg2MDYxNTMxNzQzODMyMWJkOWNhOWUwMjg2Li5mZGQ1
NTQ4ZjBmNTRjMWFjYTdmYWNhZWViODgwNmU4MTI0MGI5YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDg4ICs0Nyw2OCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLXN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV9mYW1pbHkoZmFtaWx5KQotICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCi0gICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHQpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRp
b25LZXkodCkKLSAgICB7IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb25LZXkg
IT0gb3RoZXIubV9mb250RGVzY3JpcHRpb25LZXkKLSAgICAgICAgICAgIHx8IG1fZm9udEZhY2VG
ZWF0dXJlcyAhPSBvdGhlci5tX2ZvbnRGYWNlRmVhdHVyZXMKLSAgICAgICAgICAgIHx8IG1fZm9u
dEZhY2VDYXBhYmlsaXRpZXMgIT0gb3RoZXIubV9mb250RmFjZUNhcGFiaWxpdGllcykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fZmFtaWx5LmltcGwoKSA9PSBvdGhl
ci5tX2ZhbWlseS5pbXBsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KG1fZmFtaWx5LmlzTnVsbCgpIHx8IG90aGVyLm1fZmFtaWx5LmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkpOwotICAgIH0KK0Zv
bnRGYW1pbHlOYW1lOjpGb250RmFtaWx5TmFtZSgpID0gZGVmYXVsdDsKIAotICAgIEZvbnREZXNj
cmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5
OwotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwotICAgIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKLX07
CitpbmxpbmUgRm9udEZhbWlseU5hbWU6OkZvbnRGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCisgICAgOiBtX25hbWUgeyBuYW1lIH0KK3sKK30KIAotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZm9udEtleSkKLSAgICB7Ci0gICAgICAgIEludGVnZXJIYXNo
ZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZh
bWlseU5hbWVIYXNoKGZvbnRLZXkubV9mYW1pbHkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChmb250
S2V5Lm1fZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgICAgICBoYXNoZXIu
YWRkKGZvbnRLZXkubV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7Ci0gICAgICAgIGlmIChhdXRv
IHdlaWdodCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAg
ICAgICBoYXNoZXIuYWRkKHdlaWdodC0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmb250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRp
ZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aC0+dW5pcXVlVmFsdWUoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gc2xvcGUgPSBmb250S2V5Lm1f
Zm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZChzbG9w
ZS0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgcmV0dXJuIGhh
c2hlci5oYXNoKCk7Ci0gICAgfQoraW5saW5lIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRGYW1pbHlO
YW1lOjpzdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7
Ci0gICAgfQoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250RmFtaWx5
TmFtZSYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGhhc2ggdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIG5hbWUgaW5zdGVhZCBvZiBoYXNoaW5nIGEgaGFzaC4KKyAgICBh
ZGQoaGFzaGVyLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChuYW1lLnN0
cmluZygpKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseU5h
bWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAoYS5zdHJpbmco
KS5pc051bGwoKSB8fCBiLnN0cmluZygpLmlzTnVsbCgpKSA/IGEuc3RyaW5nKCkgPT0gYi5zdHJp
bmcoKSA6IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoYS5zdHJp
bmcoKSwgYi5zdHJpbmcoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dEZhbWlseU5hbWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CiAKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeworICAgIEZv
bnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKKyAgICBGb250RmFtaWx5TmFtZSBmYW1p
bHk7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBmZWF0dXJlczsKKyAgICBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKK307CisKK3N0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGIpCit7CisgICAgcmV0dXJuIGEuZGVzY3JpcHRpb25LZXkgPT0g
Yi5kZXNjcmlwdGlvbktleSAmJiBhLmZhbWlseSA9PSBiLmZhbWlseSAmJiBhLmZlYXR1cmVzID09
IGIuZmVhdHVyZXMgJiYgYS5jYXBhYmlsaXRpZXMgPT0gYi5jYXBhYmlsaXRpZXM7Cit9CisKK3N0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuZmFtaWx5LCBrZXkuZmVhdHVyZXMsIGtleS5j
YXBhYmlsaXRpZXMudGllZCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAogc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBzbG90KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5o
YXNoKCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0s
IHsgfSwgeyB9LCB7IH0gfTsKICAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgcmV0dXJuIGtleS5kZXNj
cmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogICAgIH0KK307CiAKK3N0cnVj
dCBGb250RGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIApAQCAtMTQxLDcgKzEy
MSw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRy
YWl0czxGb250UGxhdGZvcm1EYXRhPiB7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQogICAgIHsKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgdmFsdWUpCiAgICAgewpAQCAtMTc3LDE0ICsxNTcs
MTQgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGdsb2Jh
bEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjp+Rm9udENhY2hlKCkgPSBkZWZhdWx0OwotCiBG
b250Q2FjaGU6OkZvbnRDYWNoZSgpCiAgICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogICAgICwgbV9mb250RGF0YUNhY2hl
cyhtYWtlVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVzPigpKQogewogfQogCitGb250Q2FjaGU6On5G
b250Q2FjaGUoKSA9IGRlZmF1bHQ7CisKIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBp
ZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGZhbWlseU5hbWUpKQpAQCAtMjI1LDggKzIwNSw4IEBAIE9wdGlvbmFsPEFTQ0lJTGl0
ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKLSAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y2FjaGVkRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwpAQCAtMjQ2LDI0ICsy
MjYsMjMgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgcGxhdGZvcm1Jbml0KCk7
CiAgICAgfSk7CiAKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZhbWlseU5hbWUs
IGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMp
OworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgeyBmb250RGVzY3JpcHRpb24sIHsg
ZmFtaWx5TmFtZSB9LCBmZWF0dXJlcyA/ICpmZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3Mg
eyB9LCBjYXBhYmlsaXRpZXMgfTsKIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNh
Y2hlcy0+cGxhdGZvcm1EYXRhLmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250
RmFjZUNhcGFiaWxpdGllcyk7Ci0KKyAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRm
b3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZlYXR1cmVzLCBjYXBhYmlsaXRp
ZXMpOwogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7
Ci0gICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUg
YSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKLSAgICAg
ICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRj
LiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KKyAgICAg
ICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiBXZSBoYXZlIGEgc21hbGwg
c2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCisgICAgICAgICAgICAv
LyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gVHJ5IGxv
b2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KICAgICAgICAgICAgIGlm
IChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUg
PSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5h
bWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKLSAgICAg
ICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0
aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKLSAgICAgICAgICAgICAgICAvLyBiZWVuIGlu
dmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKCkuCisgICAgICAgICAgICAgICAgYXV0byogYWx0ZXJuYXRlRGF0YSA9IGNhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZmVhdHVyZXMsIGNh
cGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUga2V5IGlu
IHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQor
ICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxs
IHRvIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9IG1fZm9u
dERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5lbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKQotICAgICAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KCpmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFsdGVy
bmF0ZURhdGEpCisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9u
dFBsYXRmb3JtRGF0YT4oKmFsdGVybmF0ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjgyLDEyICsyNjEsMTIgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
Ojpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKLSAgICBpZiAo
YXV0byogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24sIGZhbWlseSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkpCisgICAgaWYgKGF1dG8qIHBsYXRmb3JtRGF0YSA9IGNhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGZlYXR1cmVzLCBjYXBh
YmlsaXRpZXMsIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkpCiAgICAgICAgIHJldHVybiBmb250Rm9y
UGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0z
NzUsMzAgKzM1NCwxNSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVu
c2lnbmVkIHB1cmdlQ291bnQpCiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNh
Y2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewotICAgIGlmIChhLmZv
bnREZXNjcmlwdGlvbktleSAhPSBiLmZvbnREZXNjcmlwdGlvbktleSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwg
YS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHNpemUgPSBhLmZhbWlsaWVzLnNpemUoKTsKLSAg
ICBpZiAoc2l6ZSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGEuZmFtaWxpZXNbaV0s
IGIuZmFtaWxpZXNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mb250RGVzY3JpcHRpb25LZXkgPT0gYi5mb250RGVz
Y3JpcHRpb25LZXkKKyAgICAgICAgJiYgYS5mb250U2VsZWN0b3JJZCA9PSBiLmZvbnRTZWxlY3Rv
cklkCisgICAgICAgICYmIGEuZm9udFNlbGVjdG9yVmVyc2lvbiA9PSBiLmZvbnRTZWxlY3RvclZl
cnNpb24KKyAgICAgICAgJiYgYS5mYW1pbGllcyA9PSBiLmZhbWlsaWVzOwogfQogCiB1bnNpZ25l
ZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBrZXkpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBoYXNoIHRoZSBrZXkgYW5kIHRoZSBmYW1p
bHkgbmFtZSBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIG1ha2luZyBhIGhhc2ggb3V0IG9mIG90aGVy
IGhhc2hlcy4KLSAgICBIYXNoZXIgaGFzaGVyOwotICAgIGFkZChoYXNoZXIsIGtleS5mb250RGVz
Y3JpcHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRTZWxl
Y3RvcklkKTsKLSAgICBhZGQoaGFzaGVyLCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBrZXkuZmFtaWxpZXMpCi0gICAgICAgIGFkZChoYXNoZXIsIGZh
bWlseS5pc051bGwoKSA/IDAgOiBXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lSGFzaChmYW1pbHkpKTsKLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICByZXR1
cm4gY29tcHV0ZUhhc2goa2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5LmZvbnRTZWxlY3Rvcklk
LCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiwga2V5LmZhbWlsaWVzKTsKIH0KIAogdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKQEAgLTQ1NiwxMSArNDIwLDExIEBA
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpKTsKKyAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihGb250Q2FzY2FkZUNhY2hlRW50cnkgeyBXVEZNb3ZlKGtleSksIEZvbnRDYXNj
YWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpIH0pOwogICAgIFJlZjxGb250
Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHBy
dW5lQ291bnRlcjsKICAgICAvLyBSZWZlcmVuY2VkIEZvbnRDYXNjYWRlRm9udHMgd291bGQgZXhp
c3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgogICAgIGlmICgh
KCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCkBAIC01MTUsMTUg
KzQ3OSwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAjZW5kaWYKICAgICBpbnZh
bGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogCi0gICAgbV9nZW5lcmF0aW9uKys7Ci0KLSAgICBW
ZWN0b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVudHM7Ci0gICAgY2xpZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fY2xpZW50cy5zaXplKCkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fY2xp
ZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgY2xpZW50cy51bmNoZWNrZWRBcHBlbmQoKippdCk7CisgICAgKyttX2dlbmVyYXRpb247
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xpZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2xpZW50c1tpXS0+Zm9udENhY2hlSW52YWxpZGF0ZWQoKTsKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFJlZlB0cjxGb250U2VsZWN0b3I+PihtX2NsaWVudHMp
KQorICAgICAgICBjbGllbnQtPmZvbnRDYWNoZUludmFsaWRhdGVkKCk7CiAKICAgICBwdXJnZUlu
YWN0aXZlRm9udERhdGEoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggNzUwMWMyZGYwZGYyM2YwNDhjNzAwYWFjMDBiZjdjMmFiMjc5ODgz
Ny4uNGViYTZmY2YyZjdjODA0OGZiODNkNjU1NGI4ZmQ2YWY4N2MxYWM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTY0LDE3ICs2NCwx
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250Q2Fz
Y2FkZTsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgRm9udDsKLWVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90OwogCi0jaWYgUExBVEZPUk0oV0lOKQotI2lm
IFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLXR5cGVkZWYgSU1MYW5nRm9udExpbmsyIElNTGFuZ0Zv
bnRMaW5rVHlwZTsKLSNlbHNlCi10eXBlZGVmIElNTGFuZ0ZvbnRMaW5rIElNTGFuZ0ZvbnRMaW5r
VHlwZTsKK2VudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiBib29sOworCisjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdGb250TGlua1R5
cGUgPSBJTUxhbmdGb250TGluazI7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShJTUxBTkdfRk9OVF9MSU5LMikKK3VzaW5nIElNTGFuZ0ZvbnRMaW5rVHlwZSA9IElNTGFuZ0Zv
bnRMaW5rOwogI2VuZGlmCiAKIC8vIFRoaXMga2V5IGNvbnRhaW5zIHRoZSBGb250RGVzY3JpcHRp
b24gZmllbGRzIG90aGVyIHRoYW4gZmFtaWx5IHRoYXQgbWF0dGVyIHdoZW4gZmV0Y2hpbmcgRm9u
dERhdGFzIChwbGF0Zm9ybSBmb250cykuCkBAIC0xMTIsMTcgKzExMyw3IEBAIHN0cnVjdCBGb250
RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7IH0KIAotICAgIGlubGluZSB1bnNpZ25lZCBj
b21wdXRlSGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBIYXNoZXIgaGFzaGVyOwotICAgICAg
ICBhZGQoaGFzaGVyLCBtX3NpemUpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0LnRpZWQoKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fbG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9mbGFncyk7Ci0gICAgICAgIGFkZChoYXNo
ZXIsIG1fZmVhdHVyZVNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fdmFy
aWF0aW9uU2V0dGluZ3MuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0g
ICAgfQorICAgIGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250RGVzY3JpcHRpb25L
ZXkmKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbWFr
ZUZsYWdzS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xNjUsMjMg
KzE1NiwzNiBAQCBwcml2YXRlOgogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlv
blNldHRpbmdzOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBG
b250RGVzY3JpcHRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkubV9zaXplLCBr
ZXkubV9mb250U2VsZWN0aW9uUmVxdWVzdCwga2V5Lm1fZmxhZ3MsIGtleS5tX2xvY2FsZSwga2V5
Lm1fZmVhdHVyZVNldHRpbmdzLCBrZXkubV92YXJpYXRpb25TZXR0aW5ncyk7Cit9CisKIHN0cnVj
dCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBGb250RGVzY3JpcHRpb25LZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBrZXkuY29t
cHV0ZUhhc2goKTsKLSAgICB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udERl
c2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQorLy8g
VGhpcyBjbGFzcyBob2xkcyB0aGUgbmFtZSBvZiBhIGZvbnQgZmFtaWx5LCBhbmQgZGVmaW5lcyBo
YXNoaW5nIGFuZCA9PSBvZiB0aGlzIG5hbWUgdG8KKy8vIHVzZSB0aGUgcnVsZXMgZm9yIGZvbnQg
ZmFtaWx5IG5hbWVzIGluc3RlYWQgb2YgdXNpbmcgc3RyYWlnaHQgc3RyaW5nIGNvbXBhcmlzb24u
CitjbGFzcyBGb250RmFtaWx5TmFtZSB7CitwdWJsaWM6CisgICAgRm9udEZhbWlseU5hbWUoKTsK
KyAgICBGb250RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CisgICAgY29uc3QgQXRvbVN0
cmluZyYgc3RyaW5nKCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0
IEZvbnRGYW1pbHlOYW1lJik7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Citwcml2YXRlOgorICAgIEF0b21TdHJpbmcgbV9uYW1l
OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiwgY29uc3QgRm9u
dEZhbWlseU5hbWUmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFtaWx5TmFtZSYsIGNv
bnN0IEZvbnRGYW1pbHlOYW1lJik7CisKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0
aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0
b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPEZvbnRGYW1pbHlOYW1lLCAz
PiBmYW1pbGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JWZXJzaW9uOwogfTsKQEAgLTE4OSwyNiArMTkzLDIyIEBAIHN0cnVjdCBGb250
Q2FzY2FkZUNhY2hlS2V5IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5JiwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYpOwogCiBzdHJ1Y3QgRm9udENhc2NhZGVD
YWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBG
b250Q2FzY2FkZUNhY2hlRW50cnkoRm9udENhc2NhZGVDYWNoZUtleSYmIGtleSwgUmVmPEZvbnRD
YXNjYWRlRm9udHM+JiYgZm9udHMpCi0gICAgICAgIDoga2V5KFdURk1vdmUoa2V5KSkKLSAgICAg
ICAgLCBmb250cyhXVEZNb3ZlKGZvbnRzKSkKLSAgICB7IH0KKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKICAgICBSZWY8
Rm9udENhc2NhZGVGb250cz4gZm9udHM7CiB9OwogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNj
YWRlQ2FjaGVLZXkmKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNo
ZUtleT4gewotICAgIHN0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5IGVtcHR5VmFs
dWUoKSB7IHJldHVybiB7IH07IH0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBzbG90LmZvbnRTZWxlY3Rv
cklkID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYg
c2xvdCkgeyByZXR1cm4gc2xvdC5mb250U2VsZWN0b3JJZCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7IH0KK3N0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0
cyA6IEhhc2hUcmFpdHM8Rm9udENhc2NhZGVDYWNoZUtleT4geworICAgIHN0YXRpYyBGb250Q2Fz
Y2FkZUNhY2hlS2V5IGVtcHR5VmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBuZXcg
KE5vdE51bGwsICZzbG90KSBGb250Q2FzY2FkZUNhY2hlS2V5IHsgRm9udERlc2NyaXB0aW9uS2V5
IHsgV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUgfSwgeyB9LCB7IH0sIHsgfSB9OyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5
KSB7IHJldHVybiBrZXkuZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KIH07CiAKIHVzaW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRl
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2Fz
Y2FkZUNhY2hlS2V5SGFzaCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwpAQCAtMjI1
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICB+Rm9udENhY2hlKCk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgUmVmUHRyPEZvbnQ+IHN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBJc0ZvclBsYXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CkBAIC0yMzUsNiArMjM1LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEZvbnRBbGxvd2xpc3QoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5r
VHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFs
aXplKCk7CkBAIC0zMDEsMTEgKzMwMiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJik7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFs
bHkgYmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0
YSogY2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogPSBudWxscHRyLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
IGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0gKHVuY2xlYXIgd2hpY2ggZnVuY3Rpb25zIHRoaXMgY29tbWVu
dCBhcHBsaWVzIHRvKS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKTsKICAgICAKICAgICBzdGF0aWMgT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKQEAgLTMzMiw2ICszMzIsNyBAQCBwcml2YXRlOgogCiAgICAg
ZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKICNlbmRpZgorCiAgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiB9OwogCkBAIC0zNDgsNyArMzQ5LDYgQEAgaW5saW5lIHZvaWQgRm9udENh
Y2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAKICNlbmRpZgogCi0KIGlubGlu
ZSBib29sIEZvbnRDYWNoZTo6UHJld2FybUluZm9ybWF0aW9uOjppc0VtcHR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2VlbkZhbWlsaWVzLmlzRW1wdHkoKSAmJiBmb250TmFtZXNSZXF1aXJpbmdT
eXN0ZW1GYWxsYmFjay5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKaW5kZXggYWRhZmYzYzE0NmRjNzIz
NWZmMDU5NmQ0ZmM0NzY3OTc1YjE1ODIxMy4uNjA3NzBjZDY0YzM5MThiMDAwNTFlNzQ1N2JiZWY0
Mzc0ZjJhZWMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdlbmVyaWNGYW1pbGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIFVTY3JpcHRDb2RlIHVzZXMgLTEgYW5kIDAgZm9yIFVTY3JpcHRJbnZhbGlk
Q29kZSBhbmQgVVNjcmlwdENvbW1vbi4KIC8vIFdlIG5lZWQgdG8gdXNlIC0yIGFuZCAtMyBmb3Ig
ZW1wdHkgdmFsdWUgYW5kIGRlbGV0ZWQgdmFsdWUuCi1zdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKK3N0cnVjdCBVU2NyaXB0Q29kZUhh
c2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVy
biAtMjsgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShpbnQmIHNsb3Qp
IHsgc2xvdCA9IC0zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgKaW5kZXggZTYyMzM1MDRkOTMxMDEzNDIx
MjJiN2JjMmM3MDNmZTUyY2Y3NGFhMy4uNjZmOGZkYzE3NWI2YTMxMDk3MTg2ZjJkNGJjNzcwMWY3
NWI0NGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApAQCAtMjkxLDYgKzI5MSwxMSBAQCBjb25zdGV4
cHIgRm9udFNlbGVjdGlvblZhbHVlIHVsdHJhRXhwYW5kZWRTdHJldGNoVmFsdWUoKQogICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUgeyAyMDAgfTsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBGb250U2VsZWN0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIGFk
ZChoYXNoZXIsIHZhbHVlLnJhd1ZhbHVlKCkpOworfQorCiAvLyBbSW5jbHVzaXZlLCBJbmNsdXNp
dmVdCiBzdHJ1Y3QgRm9udFNlbGVjdGlvblJhbmdlIHsKICAgICB1c2luZyBWYWx1ZSA9IEZvbnRT
ZWxlY3Rpb25WYWx1ZTsKQEAgLTMzNCwxNCArMzM5LDYgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
YW5nZSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQgPj0gbWluaW11bSAmJiB0YXJnZXQgPD0gbWF4
aW11bTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBuYW1lIGlzIG5vdCBzbyBncmVhdC4g
TW92ZSB0aGlzIGludG8gdGhlIGFkZCBmdW5jdGlvbiBiZWxvdwotICAgIC8vIG9uY2Ugd2UgbW92
ZSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIGZyb20gSW50ZWdlckhhc2hlciB0byBIYXNo
ZXIsCi0gICAgLy8gYW5kIHRoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGhhdmUgYSBuYW1lLgotICAg
IGNvbnN0ZXhwciB1aW50MzJfdCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbWluaW11bS5yYXdWYWx1ZSgpIDw8IDE2IHwgbWF4aW11bS5yYXdWYWx1ZSgpOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogCkBAIC0zNzcsNyArMzc0LDcgQEAgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblJh
bmdlPiBGb250U2VsZWN0aW9uUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiBpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRTZWxlY3Rpb25SYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgYWRkKGhhc2hlciwgcmFuZ2UudW5pcXVlVmFsdWUoKSk7CisgICAgYWRkKGhh
c2hlciwgcmFuZ2UubWluaW11bSwgcmFuZ2UubWF4aW11bSk7CiB9CiAKIHN0cnVjdCBGb250U2Vs
ZWN0aW9uUmVxdWVzdCB7CkBAIC0zODUsNiArMzgyLDcgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHsKIAogICAgIFZhbHVlIHdlaWdodDsKICAgICBWYWx1ZSB3aWR0aDsKKwogICAgIC8v
IEZJWE1FOiBXZSBhcmUgdXNpbmcgYW4gb3B0aW9uYWwgaGVyZSB0byBiZSBhYmxlIHRvIGRpc3Rp
bmd1aXNoIGJldHdlZW4gYW4gZXhwbGljaXQKICAgICAvLyBvciBpbXBsaWNpdCBzbG9wZSAoZm9y
ICJpdGFsaWMiIGFuZCAib2JsaXF1ZSIpIGFuZCB0aGUgIm5vcm1hbCIgdmFsdWUgd2hpY2ggaGFz
IG5vCiAgICAgLy8gc2xvcGUuIFRoZSAiaXRhbGljIiBhbmQgIm9ibGlxdWUiIHZhbHVlcyBjYW4g
YmUgZGlzdGluZ3Vpc2hlZCBieSBsb29raW5nIGF0IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAKaW5kZXggOGE4
Yzc5N2Y2NDcxMjM5ZjFlN2NmOGE1ZDI3ZTMwNmQ1ODkzM2ViMC4uYmRlZWJlODAwMTQxNDQ4YjU4
Yzc0MmZjZmJiNGE3ZWI5NmQ0NTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuY3BwCkBAIC0yNyw0MiArMjcsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIK
IAotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10ZW1wbGF0ZSA8PgotdW5zaWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgZm9yIChhdXRvJiBm
ZWF0dXJlIDogbV9saXN0KSB7Ci0gICAgICAgIGhhc2hlci5hZGQoRm91ckNoYXJhY3RlclRhZ0hh
c2g6Omhhc2goZmVhdHVyZS50YWcoKSkpOwotICAgICAgICBoYXNoZXIuYWRkKGZlYXR1cmUudmFs
dWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotfQotCi10ZW1wbGF0ZSA8
PgotdW5zaWduZWQgRm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoKCkgY29uc3QKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihmbG9hdCkgPT0gc2l6ZW9mKGludCksICJJbnRlZ2VySGFzaGVy
IG5lZWRzIHRvIGFjY2VwdCBmbG9hdHMgdG9vIik7Ci0gICAgdW5pb24gewotICAgICAgICBmbG9h
dCBmOwotICAgICAgICBpbnQgaTsKLSAgICB9IGZsb2F0VG9JbnQ7Ci0KLSAgICBJbnRlZ2VySGFz
aGVyIGhhc2hlcjsKLSAgICBmb3IgKGF1dG8mIHZhcmlhdGlvbiA6IG1fbGlzdCkgewotICAgICAg
ICBoYXNoZXIuYWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpoYXNoKHZhcmlhdGlvbi50YWcoKSkp
OwotICAgICAgICBmbG9hdFRvSW50LmYgPSB2YXJpYXRpb24udmFsdWUoKTsKLSAgICAgICAgaGFz
aGVyLmFkZChmbG9hdFRvSW50LmkpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRm9udFZh
cmlhdGlvblNldHRpbmdzJiBpdGVtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiYgaXRlbSkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiB2
YXJpYXRpb24gPSBpdGVtLmF0KGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuaAppbmRleCBiOTIwMzRlYTIxNjg5ZmJhNGVm
NTUzY2UyZmE4ZjViYzRhYzFlMzE3Li4xMjhkYWY3ZTYzYmM3M2RhOWZlZDFjYzNhOWU0MmFjZjU2
ODkzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
VGFnZ2VkU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250VGFnZ2VkU2V0dGluZ3MuaApAQCAtMzYsMjAgKzM2LDI2IEBAIGNsYXNzIFRleHRTdHJlYW07
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBzdGQ6OmFycmF5PGNoYXIsIDQ+IEZv
bnRUYWc7Cit1c2luZyBGb250VGFnID0gc3RkOjphcnJheTxjaGFyLCA0PjsKIAotaW5saW5lIEZv
bnRUYWcgZm9udEZlYXR1cmVUYWcoY29uc3QgY2hhciBhcnJbNF0pIHsgcmV0dXJuIHt7IGFyclsw
XSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXSB9fTsgfQoraW5saW5lIEZvbnRUYWcgZm9udEZlYXR1
cmVUYWcoY29uc3QgY2hhciBjaGFyYWN0ZXJzWzRdKSB7IHJldHVybiB7eyBjaGFyYWN0ZXJzWzBd
LCBjaGFyYWN0ZXJzWzFdLCBjaGFyYWN0ZXJzWzJdLCBjaGFyYWN0ZXJzWzNdIH19OyB9CisKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjphcnJheTxjaGFyLCA0PiBhcnJheSkK
K3sKKyAgICB1aW50MzJfdCBpbnRlZ2VyID0gKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFycmF5WzBd
KSA8PCAyNCkgfCAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbMV0pIDw8IDE2KSB8IChzdGF0
aWNfY2FzdDx1aW50OF90PihhcnJheVsyXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50OF90Pihh
cnJheVszXSk7CisgICAgYWRkKGhhc2hlciwgaW50ZWdlcik7Cit9CiAKIHN0cnVjdCBGb3VyQ2hh
cmFjdGVyVGFnSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFRhZyYg
Y2hhcmFjdGVycykgeyByZXR1cm4gKGNoYXJhY3RlcnNbMF0gPDwgMjQpIHwgKGNoYXJhY3RlcnNb
MV0gPDwgMTYpIHwgKGNoYXJhY3RlcnNbMl0gPDwgOCkgfCBjaGFyYWN0ZXJzWzNdOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFRhZyYgYSwgY29uc3QgRm9udFRhZyYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRm9udFRhZyBjaGFyYWN0
ZXJzKSB7IHJldHVybiBjb21wdXRlSGFzaChjaGFyYWN0ZXJzKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKEZvbnRUYWcgYSwgRm9udFRhZyBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9Owog
Ci1zdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJh
aXRzPEZvbnRUYWc+IHsKK3N0cnVjdCBGb3VyQ2hhcmFjdGVyVGFnSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8Rm9udFRhZz4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250VGFnJiBz
bG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIEZvbnRUYWcoe3sgZmYs
IGZmLCBmZiwgZmYgfX0pOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Rm9udFRhZyYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZmLCBmZiwg
ZmYgfX0pOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRm9udFRhZyB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gRm9udFRhZyh7eyBmZiwgZmYsIGZmLCBmZiB9fSk7IH0KIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgZmYgPSBzdGF0aWNfY2FzdDxjaGFyPigw
eEZGKTsKQEAgLTU5LDE0ICs2NSwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEZv
bnRUYWdnZWRTZXR0aW5nIHsKIHB1YmxpYzoKICAgICBGb250VGFnZ2VkU2V0dGluZygpID0gZGVs
ZXRlOwotICAgIEZvbnRUYWdnZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmLCBUIHZhbHVlKTsKLSAg
ICBGb250VGFnZ2VkU2V0dGluZyhGb250VGFnJiYsIFQgdmFsdWUpOworICAgIEZvbnRUYWdnZWRT
ZXR0aW5nKEZvbnRUYWcsIFQgdmFsdWUpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvbnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb250VGFnZ2VkU2V0dGluZzxU
PiYgb3RoZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udFRhZyYgdGFnKCkgY29uc3QgeyByZXR1
cm4gbV90YWc7IH0KKyAgICBGb250VGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAg
ICAgVCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBib29sIGVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiB2YWx1ZSgpOyB9CiAKQEAgLTc5LDE5ICs4NCwxMiBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9u
dFRhZ2dlZFNldHRpbmcoY29uc3QgRm9udFRhZyYgdGFnLCBUIHZhbHVlKQorRm9udFRhZ2dlZFNl
dHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKEZvbnRUYWcgdGFnLCBUIHZhbHVlKQogICAgIDog
bV90YWcodGFnKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9udFRhZ2dlZFNldHRpbmcoRm9udFRhZyYm
IHRhZywgVCB2YWx1ZSkKLSAgICA6IG1fdGFnKFdURk1vdmUodGFnKSkKLSAgICAsIG1fdmFsdWUo
dmFsdWUpCi17Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogYm9vbCBGb250VGFnZ2VkU2V0
dGluZzxUPjo6b3BlcmF0b3I9PShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNv
bnN0CiB7CkBAIC0xNTIsNiArMTUwLDExIEBAIE9wdGlvbmFsPEZvbnRUYWdnZWRTZXR0aW5nPFQ+
PiBGb250VGFnZ2VkU2V0dGluZzxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgfX0s
ICp2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgc2V0dGluZykKK3sKKyAgICBhZGQoaGFz
aGVyLCBzZXR0aW5nLnRhZygpLCBzZXR0aW5nLnZhbHVlKCkpOworfQorCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIGNsYXNzIEZvbnRUYWdnZWRTZXR0aW5ncyB7CiBwdWJsaWM6CkBAIC0yMTEsMTQg
KzIxNCwxMCBAQCBPcHRpb25hbDxGb250VGFnZ2VkU2V0dGluZ3M8VD4+IEZvbnRUYWdnZWRTZXR0
aW5nczxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdHlwZWRlZiBGb250VGFnZ2VkU2V0dGluZzxpbnQ+IEZvbnRGZWF0dXJlOwotdHlwZWRlZiBG
b250VGFnZ2VkU2V0dGluZ3M8aW50PiBGb250RmVhdHVyZVNldHRpbmdzOwotCi10ZW1wbGF0ZSA8
PiB1bnNpZ25lZCBGb250RmVhdHVyZVNldHRpbmdzOjpoYXNoKCkgY29uc3Q7Ci0KLXR5cGVkZWYg
Rm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiBGb250VmFyaWF0aW9uU2V0dGluZ3M7Ci1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJik7Cit1c2luZyBGb250RmVhdHVyZSA9IEZvbnRUYWdnZWRTZXR0aW5nPGludD47
Cit1c2luZyBGb250RmVhdHVyZVNldHRpbmdzID0gRm9udFRhZ2dlZFNldHRpbmdzPGludD47Cit1
c2luZyBGb250VmFyaWF0aW9uU2V0dGluZ3MgPSBGb250VGFnZ2VkU2V0dGluZ3M8ZmxvYXQ+Owog
Ci10ZW1wbGF0ZSA8PiB1bnNpZ25lZCBGb250VmFyaWF0aW9uU2V0dGluZ3M6Omhhc2goKSBjb25z
dDsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZvbnRUYWdnZWRT
ZXR0aW5nczxmbG9hdD4mKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCmluZGV4IGJmOWQwZjg1OTI4MTQ3NjYyMzg0NTRhN2ZjMzMyZTg1NGUz
YzE3N2UuLjhlYjMyNmM0OTY0ZWNhOWUwZjNmYmM3ZTBjZjgyYjhkYTM1ZjM4OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTMyLDggKzMy
LDYgQEAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KIAotdXNpbmcgV1RGOjpwYWlySW50SGFzaDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKaW5kZXggNTNlYjVlY2E2NzQ2YTE5YTgxNmJkY2M4YTExNmM5ZGE5MDhkNWNhYi4uNzBm
NmQwOGY1M2Q3YmM4NTcwNmRhYzQ1YTA3YWIxZjA3ZGMyMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cApAQCAtNDgsMTIgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCi0vLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2luZyBkZWNs
YXJhdGlvbiBzaG91bGQgYmUgaW4gPHd0Zi9IYXNoRnVuY3Rpb25zLmg+LgotdXNpbmcgV1RGOjpw
YWlySW50SGFzaDsKLQotLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24g
c2hvdWxkIGJlIGluIDx3dGYvSGFzaFRyYWl0cy5oPi4KLXVzaW5nIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaAppbmRleCA1YmYwNWQ0ZTE0MGVlNjJiMzMyMWU0ZGJlZjUxZGFjMWQxYjM0ZDk5
Li45ZmFjZWM0ZjAxNDIzZjQwNTQzNjViNGI5YjViMjdlMTcxMjE2NmQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgTW9ub3Rvbmlj
VGltZSBsYXN0QWNjZXNzVGltZTsKICAgICB9OwogCi0gICAgc3RydWN0IFN1YmltYWdlQ2FjaGVF
bnRyeVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8U3ViaW1hZ2VDYWNoZUVudHJ5PiB7
CisgICAgc3RydWN0IFN1YmltYWdlQ2FjaGVFbnRyeVRyYWl0cyA6IEhhc2hUcmFpdHM8U3ViaW1h
Z2VDYWNoZUVudHJ5PiB7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4+IEltYWdlVHJhaXRzOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAppbmRleCAwNzE3MjIxYjEzMDY5MmJmMWY4YWU0ZmY0MDc1ODYwNTZjZjAx
ZmJiLi4yYmUzOWI3OTQzNTE1MWY0ZmE4NmZjMzE0OTE0MThhMTJkMjk0OWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lm
aWNhdGlvbkNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApAQCAtMzcsNiArMzcs
OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRp
b25LZXkgeworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
cjsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OworCiAgICAgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkoKSA9IGRlZmF1bHQ7CiAKICAgICBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbktleShDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTUwLDcgKzUzLDcgQEAgc3RydWN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5nZXQoKSwgb3RoZXIuZm9u
dERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9PSBvdGhlci5mb250RGVz
Y3JpcHRpb25LZXk7CisgICAgICAgIHJldHVybiBzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5n
ZXQoKSwgb3RoZXIuZm9udERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9
PSBvdGhlci5mb250RGVzY3JpcHRpb25LZXk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBvdGhlcikgY29uc3QKQEAgLTU5LDIz
ICs2MiwxNSBAQCBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkgewogICAgIH0KIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQg
Y29tcHV0ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goV1RGOjpzYWZlQ0ZIYXNoKGZvbnREZXNjcmlwdG9yLmdldCgpKSwgZm9udERlc2NyaXB0aW9u
S2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlw
dG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2Ny
aXB0aW9uS2V5OwogfTsKIAogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5SGFzaCB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXkmIGtleSkgeyByZXR1cm4ga2V5LmNvbXB1dGVIYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYga2V5KSB7IHJldHVybiBj
b21wdXRlSGFzaChzYWZlQ0ZIYXNoKGtleS5mb250RGVzY3JpcHRvci5nZXQoKSksIGtleS5mb250
RGVzY3JpcHRpb25LZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udEZhbWls
eVNwZWNpZmljYXRpb25LZXkmIGEsIGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBGb250TWFwID0gSGFzaE1hcDxG
b250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5Pj47Cit1c2luZyBGb250TWFwID0gSGFz
aE1hcDxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+OwogCiBzdGF0aWMgRm9udE1hcCYg
Zm9udE1hcCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRleCAw
YjI3OWE3ZGVmNWNkNDg4MmE4MjVjMzY4M2JlMTM1MmIyMmU2MDdhLi45YWQxZTBjYzQ1MGYwZWFh
ODI5ODE3MzU1OTc4MDBhYzA4MDQ5NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNv
cmVUZXh0LmgKQEAgLTcyLDI3ICs3MiwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVy
OwotICAgICAgICAgICAgQVNTRVJUKCFmb250TmFtZS5pc051bGwoKSk7Ci0gICAgICAgICAgICBo
YXNoZXIuYWRkKGxvY2FsZS5leGlzdGluZ0hhc2goKSk7Ci0gICAgICAgICAgICBoYXNoZXIuYWRk
KGxvY2FsZS5pc051bGwoKSA/IDAgOiBsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICAg
ICAgaGFzaGVyLmFkZCh3ZWlnaHQpOwotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aCk7Ci0g
ICAgICAgICAgICBoYXNoZXIuYWRkKHNpemUpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKTsKLSAgICAgICAgICAg
IGhhc2hlci5hZGQoaXRhbGljKTsKLSAgICAgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGZvbnROYW1lLCBsb2NhbGUsIHdlaWdodCwg
d2lkdGgsIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBpdGFsaWMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RydWN0IENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJI
YXNoPEF0b21TdHJpbmcsIGZsb2F0PiB7Ci0gICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuaGFzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEhhc2ggeworICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FzY2Fk
ZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7IHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsg
fQorICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwogICAgICAgICB9OwogCkBAIC0xMzEsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gY29tcHV0
ZUNhc2NhZGVMaXN0KENURm9udFJlZiwgQ0ZTdHJpbmdSZWYgbG9jYWxlKTsKICAgICBzdGF0aWMg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIFN5c3RlbUZvbnRLaW5kLCBB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBIYXNoTWFwPENhc2NhZGVMaXN0UGFyYW1l
dGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4sIENhc2NhZGVMaXN0
UGFyYW1ldGVyczo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOworICAgIEhhc2hN
YXA8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+PiwgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9zeXN0ZW1Gb250Q2FjaGU7CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NlcmlmRmFtaWxpZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zYW5zU2VyaWZlcmlmRmFtaWxpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHAKaW5kZXggYTFiOTUxNDFmZTExYjlhMDkwMjg1ZGJkY2JhMzE2OGU2ZGI5MmNhMi4uZmQ3
MWZhMDc5MmRiMjY0Yjg2MjA0YjlkZmRmZTJhN2VkNjA5ZjQxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcApAQCAtMTk1LDYgKzE5NSw5IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3Qg
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkgeworICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNj
cmlwdGlvbktleTsKKyAgICBib29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKKwogICAgIEZhbGxi
YWNrRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwogCiAgICAgRmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udENhY2hl
OjpQcmVmZXJDb2xvcmVkRm9udCBwcmVmZXJDb2xvcmVkRm9udCkKQEAgLTIyMCwxNyArMjIzLDEw
IEBAIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSB7CiAKICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRpb25LZXkuaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKTsgfQogCi0gICAgdW5zaWduZWQgY29tcHV0ZUhhc2goKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goZGVzY3JpcHRpb25LZXku
Y29tcHV0ZUhhc2goKSwgV1RGOjpEZWZhdWx0SGFzaDxib29sPjo6aGFzaChjb2xvcmVkRm9udCkp
OwotICAgIH0KLQotICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKLSAgICBi
b29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKIH07CiAKIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNj
cmlwdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZhbGxiYWNr
Rm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jb21wdXRlSGFzaCgpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkm
IGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuY29sb3Jl
ZEZvbnQpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRmFsbGJhY2tGb250RGVzY3Jp
cHRpb25LZXkmIGEsIGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5MzM1MDAxMzkwZWIzZmJiOTlhNWIuLmU5MDE3
NGJlZjQzMDMxMGEzYjllNWQ0NTgxYmZhMWFkZWVlZTA3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4
dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTE4NSwxMyArMTg1LDEzIEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RGb250ID0gc3RhdGljX2Nh
c3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250
QXR0cmlidXRlTmFtZSkpOwogICAgICAgICAgICAgQVNTRVJUKHJ1bkNURm9udCAmJiBDRkdldFR5
cGVJRChydW5DVEZvbnQpID09IENURm9udEdldFR5cGVJRCgpKTsKICAgICAgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6
Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKLSAgICAgICAgICAgIGlmICghV1RG
OjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghc2FmZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9y
bURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBm
b250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFy
dW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVj
dEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0
LmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCmluZGV4IGJiODNjMzkzZTc5ZTIwYTJiYjZjNzVl
ZDdhMjM5NTk2ZTEwMTAwZDMuLmIwZjljMjc2ZWE1NGI3NmUxZDc3YTI2NTExMDYyMTc1MmJkYjUz
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCkBAIC0xMDgs
NyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFJlZlB0cjxUZXh0Pj4gbV9hdXRvU2l6
ZWROb2RlczsKIH07CiAKLXN0cnVjdCBUZXh0QXV0b1NpemluZ1RyYWl0cyA6IFdURjo6R2VuZXJp
Y0hhc2hUcmFpdHM8VGV4dEF1dG9TaXppbmdLZXk+IHsKK3N0cnVjdCBUZXh0QXV0b1NpemluZ1Ry
YWl0cyA6IEhhc2hUcmFpdHM8VGV4dEF1dG9TaXppbmdLZXk+IHsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoVGV4dEF1dG9TaXppbmdLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xv
dCkgVGV4dEF1dG9TaXppbmdLZXkoVGV4dEF1dG9TaXppbmdLZXk6OkRlbGV0ZWQpOyB9CiAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVGV4dEF1dG9TaXppbmdLZXkmIHZhbHVl
KSB7IHJldHVybiB2YWx1ZS5pc0RlbGV0ZWQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggMGI4ZTYxYzhmNzUzZjRmN2IzZjAyYzY0
MzY3ZDQzNDRmZjkzNGE4OS4uY2YyMmNlY2IzYWYzMTFiMjUzYTQ3YTJkOGI0ZWExNjc0YTU2M2Uw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CkBAIC00NDksMTAgKzQ0OSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmRlc2NlbmRhbnRBZmZlY3Rp
bmdOb25Jbmhlcml0ZWRQcm9wZXJ0aWVzRXF1YWwoY29uc3QgUmVuZGVyU3R5CiAKIHN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgY29tcHV0ZUZvbnRIYXNoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewotICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOwotICAgIGhhc2hlci5hZGQoQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoOjpoYXNoKGZvbnQuZm9udERlc2NyaXB0aW9uKCkuZmlyc3RGYW1pbHkoKSkp
OwotICAgIGhhc2hlci5hZGQoZm9udC5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkp
OwotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOworICAgIHJldHVybiBjb21wdXRlSGFzaChBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZh
bWlseSgpKSwgZm9udC5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkpOwogfQogCiB1
bnNpZ25lZCBSZW5kZXJTdHlsZTo6aGFzaEZvclRleHRBdXRvc2l6aW5nKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJDbGllbnRJZGVudGlmaWVyLmgKaW5kZXggNjQwOWE0MWMzODJhOGU1NzdjOTYwMzY0ZmI2N2U3
ODE0NDljYjFiNi4uOTM4YmI1OTJmNzI2OGM2OWFjMzcxODM3NWE3MmI5Njk2YzcyOTVmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGll
bnRJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJDbGllbnRJZGVudGlmaWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9j
dW1lbnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclR5cGVzLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NywxNiArODgsMTIgQEAgT3B0
aW9uYWw8U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI+IFNlcnZpY2VXb3JrZXJDbGllbnRJ
ZGVudGlmaWVyOjpkZWNvZGUoRGUKICAgICBpZiAoIWNvbnRleHRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzZXJ2ZXJD
b25uZWN0aW9uSWRlbnRpZmllciksIFdURk1vdmUoKmNvbnRleHRJZGVudGlmaWVyKSB9IH07Cisg
ICAgcmV0dXJuIHsgeyAqc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsICpjb250ZXh0SWRlbnRp
ZmllciB9IH07CiB9CiAKIGlubGluZSB1bnNpZ25lZCBTZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRp
Zmllcjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgaGFzaGVzWzJdOwotICAgIGhhc2hl
c1swXSA9IFdURjo6aW50SGFzaChzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKLSAgICBoYXNoZXNbMV0gPSBXVEY6OmludEhhc2goY29udGV4dElkZW50aWZpZXIudG9VSW50
NjQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hlcywgc2l6
ZW9mKGhhc2hlcykpOworICAgIHJldHVybiBjb21wdXRlSGFzaChzZXJ2ZXJDb25uZWN0aW9uSWRl
bnRpZmllciwgY29udGV4dElkZW50aWZpZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
aAppbmRleCBlNWM2MDVjNTFmMzI3MTU2M2E2YjZlZTE5MTBjOTRlZDAxM2YzNDkzLi5jNzVkMTcw
NGE3NzJlMjk5OTlkZTQzMDlkODU5YWY4MTdhMDU3NDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTU5LDExICs1OSw3IEBA
IHN0cnVjdCBHbG9iYWxGcmFtZUlEIHsKIAogaW5saW5lIHVuc2lnbmVkIEdsb2JhbEZyYW1lSUQ6
Omhhc2goKSBjb25zdAogewotICAgIHVuc2lnbmVkIGhhc2hlc1syXTsKLSAgICBoYXNoZXNbMF0g
PSBXVEY6OmludEhhc2god2ViUGFnZUlELnRvVUludDY0KCkpOwotICAgIGhhc2hlc1sxXSA9IFdU
Rjo6aW50SGFzaChmcmFtZUlELnRvVUludDY0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsKKyAgICByZXR1cm4gY29tcHV0
ZUhhc2god2ViUGFnZUlELCBmcmFtZUlEKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBHbG9iYWxGcmFtZUlEJiBhLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBiKQpAQCAtNzMsOCAr
NjksOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEsIGNv
bnN0IEdsb2JhbEZyYW1lSUQmIGIpCiAgICAgcmV0dXJuIGEud2ViUGFnZUlEID09IGIud2ViUGFn
ZUlEICYmICBhLmZyYW1lSUQgPT0gYi5mcmFtZUlEOwogfQogCi19OwotfSAvLyBuYW1lc3BhY2Ug
TmV0d29ya0NhY2hlCit9Cit9CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0K
aW5kZXggYzRiZjJiNzljMzU0ZDM5M2I2Mzc0Yzc4MzJiODRhZmU3ZjU1ZjVjYS4uMTQ3MDEwOWNl
MWY0YjgwOTE0ZTM1OTkxODE1NTFjZGY3NDUzNDExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbQpAQCAt
NTUsNyArNTUsNyBAQCAtIChpZClfaW5pdFdpdGhQYWdlUHJveHlJRDooV2ViS2l0OjpXZWJQYWdl
UHJveHlJZGVudGlmaWVyKXBhZ2VQcm94eUlEIGFuZFdlYlBhZwogCiAtIChOU1VJbnRlZ2VyKWhh
c2gKIHsKLSAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChfcGFnZVByb3h5SUQudG9VSW50NjQo
KSwgX3dlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZUhhc2goX3BhZ2VQ
cm94eUlELCBfd2ViUGFnZUlEKTsKIH0KIAogLSAoQk9PTClpc0VxdWFsOihpZClvYmplY3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlM
aXN0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlM
aXN0LmNwcAppbmRleCBkYzc3ZjhmODRkMDM0MzkwMWI5YWVlYTU1NTBmZDM3OGQ4MDMyODk2Li4w
NDIwNWIzNzJkYTQ3OWJjOWRiOGU1NjdjN2Q2MjJlOWY5MjRmZWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCkBA
IC03NSw3ICs3NSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSW50ZWdlckFycmF5
JiBhLCBjb25zdCBJbnRlZ2VyQXJyYXkmIGIpCiAgICAgcmV0dXJuIGEubV9pbnRlZ2VycyA9PSBi
Lm1faW50ZWdlcnMgJiYgIGEubV9zaXplID09IGIubV9zaXplOwogfQogCi1zdHJ1Y3QgSW50ZWdl
ckFycmF5SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8SW50ZWdlckFycmF5PiB7
CitzdHJ1Y3QgSW50ZWdlckFycmF5SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8SW50ZWdlckFycmF5
PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEludGVnZXJBcnJheSYg
c2xvdCkgeyBzbG90Lm1hcmtEZWxldGVkKCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRW
YWx1ZShjb25zdCBJbnRlZ2VyQXJyYXkmIGFycmF5KSB7IHJldHVybiBhcnJheS5pc0RlbGV0ZWRW
YWx1ZSgpOyB9CiB9Owo=
</data>
<flag name="commit-queue"
          id="445080"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425224</attachid>
            <date>2021-04-05 17:08:14 -0700</date>
            <delta_ts>2021-04-05 17:31:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210405170813.patch</filename>
            <type>text/plain</type>
            <size>94194</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjY3ODdjN2ViNTQ2NzY2NjM4OGZiYWVjZGJhYzc4YTNlODU1YjQxLi5jZjNkZmQ5M2JjYTMzNTA3
Y2ZhNTExOGM4MGE1NWE0NDA1YjJhNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDIgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFJlZHVjZSBieXRlY29kZSBpbnN0
cnVjdGlvbiBjb3VudCBlbWl0dGVkIGZvciBgY2xhc3MgZXh0ZW5kc2AKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDFkZGY1NTI4
OGI3ZDdmZDk3NDM0Y2NiMjlkOWIxMDgxODc4YmYzMC4uN2I4OGM1OTgwNDI5YzMyZGRlOWIyOTcx
MWY4MDYzZTQ3MGRjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1v
dmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaEZ1bmN0aW9u
cy5oOiBFeHBvcnQgaW50SGFzaCBhbmQgcGFpckludEhhc2ggdG8gdGhlIGdsb2JhbCBuYW1lc3Bh
Y2UKKyAgICAgICAgc28gdGhleSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgV1RG
IHByZWZpeC4gVGhpcyBmb2xsb3dzIHRoZSB1c3VhbAorICAgICAgICBXVEYgZGVzaWduIHBhdHRl
cm4gZ2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lk
ZSBXVEYuCisKKyAgICAgICAgKiB3dGYvSGFzaGVyLmg6IERlbGV0ZWQgSW50ZWdlckhhc2hlci4K
KyAgICAgICAgKFdURjo6YWRkKTogQWRkZWQgb3ZlcmxvYWRzIGZvciBTdHJpbmcsIEF0b21TdHJp
bmcsIGFuZCBVUkwuCisKKyAgICAgICAgKiB3dGYvT2JqZWN0SWRlbnRpZmllci5oOgorICAgICAg
ICAoV1RGOjphZGQpOiBBZGRlZCBhIEhhc2hlciBvdmVybG9hZCBmb3IgYW55IE9iamVjdElkZW50
aWZpZXIuCisKKyAgICAgICAgKiB3dGYvUmV0YWluUHRyLmg6IEV4cG9ydCBzYWZlQ0ZFcXVhbCBh
bmQgc2FmZUNGSGFzaCB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQorICAgICAgICBzbyB0aGV5IGNh
biBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBXVEYgcHJlZml4LiBUaGlzIGZvbGxvd3Mg
dGhlIHVzdWFsCisgICAgICAgIFdURiBkZXNpZ24gcGF0dGVybiBnaXZlbiB0aGF0IHRoZXNlIGZ1
bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIFdURi4KKworICAgICAgICAqIHd0
Zi9WZWN0b3JIYXNoLmg6IFJlbW92ZWQgdGhlIFZlY3Rvckhhc2ggdGVtcGxhdGUsIGluc3RlYWQg
anVzdCBzcGVjaWFsaXppbmcKKyAgICAgICAgRGVmYXVsdEhhc2guIFVzZSBjb21wdXRlSGFzaCB0
byBoYXNoIHRoZSBjb250ZW50cyBvZiB0aGUgdmVjdG9yIGluc3RlYWQgb2YKKyAgICAgICAgaGFz
aGluZyB0aGUgaGFzaGVzIG9mIHRoZSBpdGVtcyBpbiB0aGUgdmVjdG9yLiBUaGlzIGlzIGJldHRl
ciBpbiBnZW5lcmFsIGFuZAorICAgICAgICBiZXR0ZXIgZm9yIHRoZSBvbmUgY2FzZSB3aGVyZSB3
ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMsIGZvciBhIFZlY3RvcjxpbnQ+LgorICAgICAgICBX
ZSB3YW50IHRvIGhhc2ggYWxsIHRoZSBpbnRlZ2VycyByYXRoZXIgdGhhbiBoYXNoaW5nIGhhc2hl
cyBvZiBhbGwgdGhlIGludGVnZXJzLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0aGlzIG1lYW5z
IHRoZSBlbGVtZW50cyBvZiB0aGUgVmVjdG9yIG5lZWQgdG8gYmUgaGFzaGFibGUgdXNpbmcKKyAg
ICAgICAgdGhlIEhhc2hlciBtYWNoaW5lcnkuIFRoZSBvbGQgcmVxdWlyZW1lbnQgd2FzIHRoZSB0
aGUgZWxlbWVudHMgaGFkIGEgRGVmYXVsdEhhc2guCisKIDIwMjEtMDQtMDIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFByZWZlclBhZ2VS
ZW5kZXJpbmdVcGRhdGVzTmVhcjYwRlBTRW5hYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzA5ZmRjYzBkZWVkYmI0NDFlOGI3MWEyZTliYjQ5OTliY2IwZjQ2Ni4uZWRlMzkwMzI4NDhjZGNk
ZTcwN2M1MDE3MjA1Yjc5MGM3MWFiN2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAor
MjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBt
aXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRyaWdnZXJIYXNoOjpoYXNoKTogVXNlIGNvbXB1dGVI
YXNoIHRvCisgICAgICAgIGhhc2ggYWxsIHRoZSBmaWVsZHMgaW5zdGVhZCBvZiBhIGN1c3RvbS13
cml0dGVuIGFsZ29yaXRobS4gVGhlIGN1c3RvbQorICAgICAgICBhbGdvcml0aG0gaGFkIHNvbWUg
bWFnaWMgbnVtYmVycywgcmVwZWF0ZWRseSBoYXNoZWQgaGFzaGVzLCBhbmQgY29tYmluZWQKKyAg
ICAgICAgaGFzaGVzIHVzaW5nIGV4Y2x1c2l2ZSBvci4gVGhlIG5ldyBvbmUgaXMgYWxtb3N0IGNl
cnRhaW5seSBiZXR0dGVyLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OkNoYXJhY3RlclNldDo6
aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCB0byBoYXNoIHRoZSBib29sZWFu
IGFuZCB0aGUgY2hhcmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICB1c2luZyBpbnRIYXNoIGFu
ZCBwYWlySW50SGFzaC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOiBNb3ZlZCB0aGUgaGFzaGluZyBoZXJlIGZyb20g
dGhlIGhlYWRlci4gRml4ZWQgdGhlCisgICAgICAgIG1pc3Rha2Ugd2hlcmUgdGhpcyB3YXMgdXNp
bmcgJiBpbnN0ZWFkIG9mIHwgYW5kIHNvIG5vbmUgb2YgdGhlIGJvb2xlYW5zCisgICAgICAgIHdl
cmUgaGF2aW5nIGFueSBlZmZlY3Qgb24gdGhlIGhhc2ggdmFsdWUuCisKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaDogVXNlIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRCBzbworICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHNheSBwdWJsaWM6IGV4cGxpY2l0bHku
IEFsc28gbW92ZWQgYWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBtZW1iZXJzIHRvIHRoZSBib3R0
b20gb2YgdGhlIHN0cnVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIHN0eWxlCisgICAg
ICAgIGZvciBzdHJ1Y3R1cmVzIGFzIG9wcG9zZWQgdG8gY2xhc3Nlcy4gU2luY2UgdGhlIGRhdGEg
bWVtYmVycyBhcmUgdGhlCisgICAgICAgIHByaW1hcnkgaW50ZXJmYWNlLCB0aGV5IGFyZSBmaXJz
dCwgYW5kIGFsbCBmdW5jdGlvbiBtZW1iZXJzIGFyZSBzZWNvbmRhcnkKKyAgICAgICAgYW5kIHNv
IHRoZXkgY29tZSBhZnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHRIYXNo
OjpoYXNoKTogVXNlIGNvbnZlcnRIYXNoIGluc3RlYWQgb2YKKyAgICAgICAgYSBjdXN0b20gd3Jp
dHRlbiBoYXNoIGZ1bmN0aW9uLiBUaGUgY3VzdG9tIHdyaXR0ZW4gZnVuY3Rpb24gd2FzIGNvbWJp
bmluZworICAgICAgICBoYWhlcyB1c2luZyBleGNsdXNpdmUgb3IsIG5vdCBhIGJlc3QgcHJhY3Rp
Y2UsIGFuZCBhbHNvIGhhZCBhIG1pc3Rha2UKKyAgICAgICAgd2hlcmUgaXQgdXNlZCAmIGluc3Rl
YWQgb2YgfCBhbmQgc28gdGhlICJiaXRzIiBsb2NhbCB2YXJpYWJsZSB3YXMgYWx3YXlzIDAuCisK
KyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDogVXNlIEhhc2hUcmFpdHMgaW5zdGVh
ZCBvZiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaDogUmVtb3ZlZCB1bm5lZWRlcyBpbmNsdWRlcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOiBDaGFuZ2VkIENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IGludG8gYQorICAgICAgICBzaW1wbGUgc3RydWN0IHdpdGggbm8gYWRkaXRpb25hbCBm
dW5jdGlvbiBtZW1iZXJzIG9yIHN0YXRpYyBkYXRhIG1lbWJlcnMuCisgICAgICAgIENoYW5nZWQg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHRvIHVzZSBjb21wdXRlSGFzaCB0byBjYWxjdWxh
dGUgdGhlCisgICAgICAgIGhhc2gsIGluc3RlYWQgb2YgSW50ZWdlckhhc2hlci4gUHJvYmFibHkg
YmV0dGVyIHRvIGhhc2ggdGhlIHBvaW50ZXIgb2YKKyAgICAgICAgdGhlIEF0b21TdHJpbmcgcmF0
aGVyIHRoYW4gaGFzaGluZyB0aGUgaGFzaCwgYnV0IGVpdGhlciB3YXksIHdlIHNob3VsZAorICAg
ICAgICBoYXZlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uIGZvciBBdG9tU3RyaW5nIGhhc2hpbmcg
aW4gdGhlIEhhc2hlciBjbGFzcy4KKyAgICAgICAgQWRkZWQgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoVHJhaXRzIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzLiBVc2UgdGhlIHZhbHVlIFVfU0VOVElORUwgZm9yIHRoZSBVQ2hhcjMyIGNoYXJhY3RlciwK
KyAgICAgICAgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIC0xIHVzZWQgYmVmb3JlLCBidXQgc2xp
Z2h0bHkgY2xlYXJlciB3aHkgaXQncyBPSy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3Rl
bUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6IFVzZSBIYXNoTWFwOjplbnN1cmUKKyAg
ICAgICAgaW5zdGVhZCBvZiBIYXNoTWFwOjphZGQgdG8gbWFrZSB0aGUgbG9naWMgc2ltcGxlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDogVXNlIGJvb2wgaW5zdGVhZCBv
ZiB1aW50OF90IGFzIHRoZSBiYXNlIHR5cGUKKyAgICAgICAgZm9yIHRoZSBOby9ZZXMgZW51bWVy
YXRpb24gSXNGb3JQbGF0Zm9ybUZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOiBSZW1vdmVkIHVubmVlZGVkICJ1c2luZyBuYW1lc3BhY2UgV1RGIiwKKyAg
ICAgICAgd2hpY2ggaXMgbm90IG91ciBiZXN0IHByYWN0aWNlLCBlc3BlY2lhbGx5IGdpdmVuIHVu
aWZpZWQgYnVpbGRzLgorICAgICAgICBDaGFuZ2VkIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBp
bnRvIGEgc2ltcGxlIHN0cnVjdCwgcmVtb3ZpbmcgYWxsIHRoZQorICAgICAgICBoYXNoLXJlbGF0
ZWQgbWVtYmVyIGZ1bmN0aW9ucy4gQWxzbyB1c2VkIHN0cnVjdC1zdHlsZSBuYW1pbmcgZm9yIHRo
ZQorICAgICAgICBtZW1iZXJzIHdpdGhvdXQgYW4gIm1fIiBwcmVmaXguIFVzZWQgdGhlIHR5cGUg
Rm9udEZhbWlseU5hbWUgZm9yIHRoZQorICAgICAgICBmYW1pbHkgbmFtZSwgd2hpY2ggbWVhbnMg
d2Ugd2lsbCB1c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbidzIHN5c3RlbQorICAgICAgICBmb3Ig
aGFzaGluZyBhbmQgY29tcGFyaW5nIGZhbWlseSBuYW1lcyBmb3IgZXF1YWxpdHkgd2l0aG91dCBo
YXZpbmcgdG8KKyAgICAgICAgcmVtZW1iZXIgZG8gdG8gc28gZXhwbGljaXRseS4gQ2hhbmdlZCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHRvCisgICAgICAgIHVzZSBjb21wdXRlSGFzaC4g
VGhlIG9sZCB2ZXJzaW9uIGhhZCB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgdG8KKyAgICAg
ICAgaGFuZGxlIE9wdGlvbmFsIGFuZCB3YXMgdW5uZWNlc3NhcmlseSBoYXNoaW5nIGhhc2hlcy4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6IFJl
bmFtZWQgdG8gcmVtb3ZlICJnZXQiCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4g
QWxzbyB1c2Ugc2hvcnRlciBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKyAgICAgICAgbmFt
ZXMgdGhhdCBhcmUgc2luZ2xlIHdvcmRzLCBhbmQgdXBkYXRlZCBzaW5jZSBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkKKyAgICAgICAgaXMgbm93IGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6IFVzZSBzaG9y
dGVyIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IFRvIGNvbXBhcmUgdHdv
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgb2JqZWN0cywKKyAgICAgICAgdXNlIGEgc2ltcGxlciBjb25z
dHJ1Y3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCBWZWN0b3IgYWxyZWFkeQorICAg
ICAgICBoYXMgYW4gPT0gb3BlcmF0b3IgYW5kIHdlIGFyZSB1c2luZyBGb250RmFtaWx5TmFtZSBm
b3IgdGhlIGVsZW1lbnRzCisgICAgICAgIG9mIHRoZSB2ZWN0b3IsIHdoaWNoIGhhcyBhIGNvcnJl
Y3QgPT0gb3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aDo6aGFzaCk6IFVzZSBjb21wdXRlSGFzaCBzaW5jZQorICAgICAgICB0aGUgRm9udEZhbWlseU5h
bWUgaGFzaGluZyBpcyBub3cgY29ycmVjdCwgYW5kIHdlIGNhbiByZWx5IG9uIHRoZQorICAgICAg
ICB3YXkgSGFzaGVyIGtub3dzIGhvdyB0byBpdGVyYXRlIGEgY29sbGVjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSBpcyBub3cgYSBzaW1wbGUgc3RydWN0
LiBBbHNvIHVzZSBjb25zdGV4cHIgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmludmFsaWRhdGUpOiBVc2UgY29weVRvVmVjdG9yT2Y8PiB0byBzaW1wbGlmeSB0aGUKKyAgICAg
ICAgY29kZSB0aGF0IGNhbGxzIGZvbnRDYWNoZUludmFsaWRhdGVkIG9uIGFsbCB0aGUgZm9udCBz
ZWxlY3RvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogVXNl
ICJ1c2luZyIgaW5zdGVhZCBvZiAidHlwZWRlZiIuCisgICAgICAgIFJlbW92ZSBGb250RGVzY3Jp
cHRpb25LZXk6OmNvbXB1dGVIYXNoLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTogQW4gb3Zlcmxv
YWQgb2YgYWRkIGZvciBIYXNoZXIgdG8gaW5jbHVkZSBhCisgICAgICAgIEZvbnREZXNjcmlwdGlv
bktleSBpbiBhIGhhc2gsIHdoaWNoIGp1c3QgbGlzdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuCisg
ICAgICAgIFRoZSBvbGQgdmVyc2lvbiBkaWQgYSBoYXNoIG9mIGhhc2hlcywgYnV0IHRoYXQncyBu
b3QgbmVlZGVkIGFueSBtb3JlLgorICAgICAgICBVcGRhdGVkIEZvbnREZXNjcmlwdGlvbktleUhh
c2ggdG8gdXNlIHRoZSBIYXNoZXIgdmVyc2lvbiBvZiBDb21wdXRlSGFzaC4KKyAgICAgICAgQWRk
ZWQgRm9udEZhbWlseU5hbWUuIENoYW5nZSBGb250Q2FzY2FkZUNhY2hlS2V5IHRvIHVzZSBhIHZl
Y3RvciBvZgorICAgICAgICBGb250RmFtaWx5TmFtZSBpbnN0ZWFkIG9mIEF0b21TdHJpbmcuIElu
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSwgdXNlCisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRCBpbnN0ZWFkIG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECisgICAgICAgIGFu
ZCBhbHNvIGdvdCByaWQgb2YgdGhlIHVubmVlZWRlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFs
dWUpOgorICAgICAgICBVc2UgdGhlIGRlbGV0ZWQgdmFsdWUgb2YgRm9udERlc2NyaXB0aW9uS2V5
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM6OmlzRGVs
ZXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAgIFJlbmFtZWQgZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YSB0byBqdXN0IGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQg
b2YKKyAgICAgICAgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRTZWxlY3Rpb25SYW5nZTo6dW5pcXVlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YWRkKTogQWRkIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRv
IHRoZSBoYXNoCisgICAgICAgIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBjb21iaW5pbmcgdGhlbS4g
Rm9yIG5vdywgdGhpcyBtYWtlcyB0aGUgd2F5CisgICAgICAgIHRoZXkgYXJlIGhhc2hlZCBhIGJp
dCBpbmVmZmljaWVudCwgYnV0IHRoYXQgY2FuIGJlIHJlLXRpZ2h0ZW5lZCB1cCBieQorICAgICAg
ICBpbXByb3ZpbmcgdGhlIGFsZ29yaXRobSBvZiBIYXNoZXIgaWYgd2UgbGlrZS4gU2hvdWxkIGJl
IGZpbmUgZm9yIG91cgorICAgICAgICBuZWVkcyBlaXRoZXIgd2F5LgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oOiBBZGRlZCBvdmVy
bG9hZHMgb2YgdGhlCisgICAgICAgIGFkZChIYXNoZXImKSBmdW5jdGlvbiBmb3Igc3RkOjphcnJh
eTxjaGFyLCA0PiBhbmQgRm9udFRhZ2dlZFNldHRpbmc8VD4uCisgICAgICAgIEdvdCByaWQgb2Yg
bWFueSB1c2VzIG9mIHBhc3MgYnkgcmVmZXJlbmNlIGluc3RlYWQgb2YgdmFsdWUgZm9yIEZvbnRU
YWcsCisgICAgICAgIHNpbmNlIGl0IGZpdHMgaW50byBhIDMyLWJpdCByZWdpc3RlciBhbmQgYnRo
IG1vcmUgc291cmNlIGNvZGUgYW5kIGxlc3MKKyAgICAgICAgZWZmaWNpZW50IHRvIHBhc3MgYnkg
dmFsdWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6IFJlbW92
ZWQgInVzaW5nIFdURjo6cGFpckludEhhc2giIHNpbmNlCisgICAgICAgIHRoYXQncyBub3cgZG9u
ZSBpbiB0aGUgV1RGIGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQKKyAgICAgICAgInVzaW5nIFdU
Rjo6R2VuZXJpY0hhc2hUcmFpdHMiLCB3aGljaCB3YXMgdW5oZWxwZnVsLiBUaGUgR2VuZXJpY0hh
c2hUcmFpdHMKKyAgICAgICAgdGVtcGxhdGUgaXMgb25seSByZWFsbHkgbmVlZGVkIHdoZW4gc3Bl
Y2lhbGl6aW5nIEhhc2hUcmFpdHMsIHdoaWNoCisgICAgICAgIGFscmVhZHkgaGFzIHRvIGJlIGRv
bmUgd2l0aGluIHRoZSBXVEYgbmFtZXNwYWNlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlCisgICAg
ICAgIHNob3VsZCBqdXN0IHVzZSBIYXNoVHJhaXRzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg6IFVzZSBIYXNoVHJhaXRz
CisgICAgICAgIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQu
Y3BwOgorICAgICAgICBNb3ZlIHRoZSBkYXRhIG1lbWJlcnMgdG8gdGhlIHRvcCBvZiB0aGUgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkgc3RydWN0LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNvbXB1dGVIYXNoIGZ1bmN0aW9uIGFuZCBXVEYgcHJlZml4IGZyb20gc2FmZUNGRXF1YWwuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOiBD
YWxsIHRoZSBIYXNoZXIgdmVyc2lvbgorICAgICAgICBvZiBjb21wdXRlSGFzaCBkaXJlY3RseSB0
byBoYXNoIHRoZSB0d28gaXRlbXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2NhZGVMaXN0UGFyYW1l
dGVyczo6aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCBpbnN0ZWFkIG9mIElu
dGVnZXJIYXNoZXIuIEFsc28gcmVuYW1lZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICBzdHJ1
Y3QgZnJvbSBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gg
dG8KKyAgICAgICAgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIFJlbW92ZWQgbm93LXVubmVlZGVkIFdURiBwcmVm
aXhlcyBmcm9tIGNhbGxzIHRvIHNhZmVDRkVxdWFsLgorCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFz
aFRyYWl0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlRm9udEhhc2gpOiBVc2UgY29tcHV0ZUhhc2ggaW5zdGVh
ZCBvZiBJbnRlZ2VySGFzaGVyLgorICAgICAgICBTdGlsbCBub3QgZ3JlYXQgdGhhdCB3ZSBoYXNo
IGEgaGFzaCBoZXJlLCBidXQgd2UgY2FuIGltcHJvdmUgdGhhdCBsYXRlci4KKworICAgICAgICAq
IHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZSk6IFJlbW92
ZWQgdW5uZWVkZWQKKyAgICAgICAgV1RGTW92ZSBvbiBPYmplY3RJZGVudGlmaWVyLCB3aGljaCBh
cmUganVzdCBpbnRlZ2Vycywgc28gbW92ZSB2cy4gY29weQorICAgICAgICBpcyBub3QgYW4gaW1w
b3J0YW50IGRpc3RpbmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVu
dElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBVc2UgY29tcHV0ZUhhc2gKKyAgICAgICAgaW5zdGVh
ZCBvZiBjb21iaW5pbmcgaW50SGFzaCB3aXRoIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeS4gVGhp
cyBmaXhlcworICAgICAgICB0d28gbWlzdGFrZXM6IG9uZSBpcyB0aGF0IHRoZXJlIGlzIG5vIG5l
ZWQgdG8gaGFzaCBhIGhhc2guIFRoZSBzZWNvbmQgaXMKKyAgICAgICAgdGhhdCBpbnRIYXNoIHRh
a2VzIGEgMzItYml0IGludGVnZXIgYXMgaXRzIHBhcmFtZXRlciwgc28gaGlnaCBiaXRzCisgICAg
ICAgIG9mIG9iamVjdCBpZGVudGlmaWVycyB3ZXJlIGRpc2NhcmRlZCB1bm5lY2Vzc2FyaWx5Lgor
CiAyMDIxLTA0LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFBlbmRpbmdJbWFnZUJpdG1hcCBnZXRzIGNyZWF0ZWQgb24gYSBzdG9wcGVkIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjVkNjc1MTdmZjIwYzc1Yzg3MGU2MmUwMTg5YWEy
YjlkOWU0YjU4MS4uYTA5YjJlYTk3ZjZmOWQ3OWI3MTZhYjAzMzIzYmRhOTNkNWFkNGYxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hl
ciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNo
IGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29tYmluaW5nIGlu
dEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMKKyAgICAgICAg
dHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggYSBoYXNo
LiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMyLWJpdCBpbnRl
Z2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBvYmplY3QgaWRl
bnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAgICAqIFNoYXJl
ZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW06CisgICAgICAgICgtW1dLQnJv
d3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgcGFp
ckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0YWtlOiBwYWlySW50SGFzaCB0YWtl
cyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMKKyAgICAgICAgb2Ygb2JqZWN0IGlk
ZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJpbHkuCisKIDIwMjEtMDQtMDIgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVBdIFBvd2VyIHJl
Z3Jlc3Npb246IGF1ZGlvIGhhcmR3YXJlIGlzIGNvbmZpZ3VyZWQgZm9yIDEyOCBmcmFtZSBwcmVm
ZXJyZWQgYnVmZmVyIHNpemUgZHVyaW5nIFZpZGVvQXVkaW8gcGxheWJhY2sKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA2MGM0Mzg5MjBmMzQ5OTYxMzgzYjYxNjRhZmYyYmU3YjYxNzhl
YjU4Li5mMTBiODY5NmRiNWQ4ZjlhN2EwYThjNTI2YzkyZjc3MzZjODgwODFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDQtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBIYXNoZXIgbW9yZSwgcmVtb3Zl
IEludGVnZXJIYXNoZXIsIGZpeCBoYXNoaW5nLXJlbGF0ZWQgbWlzdGFrZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9CaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHMuCisKIDIwMjEtMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVc2UgTUFDSF9QT1JUX1ZBTElEKCkgd2hlbiB3YW50aW5nIHRvIGNoZWNrIGlmIGEg
bWFjaCBwb3J0IGlzIHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAppbmRleCBkMTQ3NTQxODMyNDcyNTU0ODc1OTlhZTliNDYyMDViNmQ1ZDdk
ZTI4Li5hODRiZGExNmVmYjdjYjdjMzI1YWM2YzIwN2IwOTA3M2MxODIzMDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgIENoZWNrcG9pbnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gaW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGlj
IEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9m
ZnNldCAtIDEpOyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCmluZGV4IDFiYWU3ZmRiOGNlMmQ4NWEyZGE2NGM3ODky
MTdlMGUxZWM0MWE1MjIuLjY1OGUyY2ZjNWVjZTgyMzQ5NzZiNjM0ZGU4ZTM3ZjIwZDZmMGZjODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaApAQCAtMTU0
LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CiAgICAgc3Rk
OjphcnJheTxBYnN0cmFjdEhlYXAsIDE2PiBtX3NtYWxsSW5kaWNlczsKICAgICAKLSAgICBzdHJ1
Y3QgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPHB0
cmRpZmZfdD4geworICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8cHRyZGlmZl90PiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xvdCA9IDE7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBhZTU3OGEzMjFiOGI3NTIzY2Q1ZjRiMjUzNDI4MDg3OWVlNWVmMDFmLi5mZTkwMDc1MDVl
OGJiNDEyYjYzNmE5YzNiYzVjN2U2Yjk3MTE0YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC01OTAsNyArNTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZVNldCYgbGl2ZSA9IG1fbGl2ZUluVG9Ob2RlLmZpbmQobm9kZSktPnZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBoaWdoUGFyZW50SW5kZXggPSBub2RlLT5pbmRleCgpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICB1aW50NjRfdCBoYXNoID0gV1RGOjppbnRIYXNoKGhpZ2hQYXJl
bnRJbmRleCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2luY2UgaW50SGFzaCByZXR1cm5zIGEg
MzItYml0IHVuc2lnbmVkIGludGVnZXIsIGl0J3Mgbm90IGNsZWFyIHdoeSBpdCdzIGhlbHBmdWwg
dG8gc3RvcmUgaXQgaW4gYSB1aW50NjRfdC4KKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBp
bnRIYXNoKGhpZ2hQYXJlbnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoaGFzaCA+PSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSArIDEpICogT3B0aW9uczo6dmFsaWRhdGVBYnN0cmFjdEludGVycHJl
dGVyU3RhdGVQcm9iYWJpbGl0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCmluZGV4IDUzN2VlNTY1MjBlZDU4NDMwMWY0ODIwNDk2MmNmMjc4NmJkYjM0ZmQuLjA1NGUz
MWVkNmJhNGEyODllOGVjYzVlNmQ2NzE4YWVlNjc2MTA1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDE2LDcgKzQxNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGludCoganVtcFRhcmdldDsKICAgICB9OwogCi0gICAgc3Ry
dWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2Rl
ZEpTVmFsdWU+IHsKKyAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IHRydWU7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oIGIvU291cmNlL1dURi93
dGYvSGFzaEZ1bmN0aW9ucy5oCmluZGV4IDVmOTBmNGVhNzYxMTgxYmZlNGE0NTA3N2IxMmQxODUx
ZTdmODljNDkuLmZmZDUyMmNlMjkwOGQ3ZmVlNzJhYmIwNDYxNGFhZjQ0MTA1YjZiNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoRnVuY3Rpb25zLmgKQEAgLTI3NSwzICsyNzUsNSBAQCBuYW1lc3BhY2UgV1RGIHsKIHVz
aW5nIFdURjo6RGVmYXVsdEhhc2g7CiB1c2luZyBXVEY6OkludEhhc2g7CiB1c2luZyBXVEY6OlB0
ckhhc2g7Cit1c2luZyBXVEY6OmludEhhc2g7Cit1c2luZyBXVEY6OnBhaXJJbnRIYXNoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAppbmRleCA1MmViMjM0MjExZDM2OWM4ZTNlMDlhYzc1YmQ4YzQ0ZGEwNjM5NTVlLi4yODcyNTY4
ZTkzNjc5NzE3YzMxNGQwZTNjYTE2Yjc3MjljZDA0NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDMxICsyMCwxNCBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBEZXByZWNhdGVkLiBV
c2UgSGFzaGVyIGluc3RlYWQuCi1jbGFzcyBJbnRlZ2VySGFzaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2b2lkIGFkZCh1aW50MzJfdCBpbnRlZ2VyKQot
ICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hl
cjsKLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJfdCBjb21wdXRlSGFz
aChjb25zdCBUeXBlcyYuLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gT3Ro
ZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+LCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfdW5zaWduZWQ8VW5zaWdu
ZWRJbnRlZ2VyPjo6dmFsdWUgJiYgc2l6ZW9mKFVuc2lnbmVkSW50ZWdlcikgPD0gc2l6ZW9mKHVp
bnQzMl90KSwgdm9pZD4gYWRkKEhhc2hlciYsIFVuc2lnbmVkSW50ZWdlcik7CkBAIC0xMTIsNiAr
OTUsMjcgQEAgaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBmbG9hdCBudW1iZXIpCiAg
ICAgYWRkKGhhc2hlciwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihudW1iZXIpKTsKIH0KIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBib29sIHJlbWFpbmRlciA9IHN0cmluZy5sZW5ndGgoKSAmIDE7CisgICAgdW5zaWduZWQgcm91
bmRlZExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSAtIHJlbWFpbmRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm91bmRlZExlbmd0aDsgaSArPSAyKQorICAgICAgICBhZGQoaGFzaGVy
LCAoc3RyaW5nW2ldIDw8IDE2KSB8IHN0cmluZ1tpICsgMV0pOworICAgIGlmIChyZW1haW5kZXIp
CisgICAgICAgIGFkZChoYXNoZXIsIHN0cmluZ1tyb3VuZGVkTGVuZ3RoXSk7Cit9CisKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQorewor
ICAgIC8vIENob3NlIHRvIGhhc2ggdGhlIHBvaW50ZXIgaGVyZS4gQXNzdW1pbmcgdGhpcyBpcyBi
ZXR0ZXIgdGhhbiBoYXNoaW5nIHRoZSBjaGFyYWN0ZXJzIG9yIGhhc2hpbmcgdGhlIGFscmVhZHkt
Y29tcHV0ZWQgaGFzaCBvZiB0aGUgY2hhcmFjdGVycy4KKyAgICBhZGQoaGFzaGVyLCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihzdHJpbmcuaW1wbCgpKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYWRkKGhhc2hlciwgdXJsLnN0
cmluZygpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRW51bWVyYXRpb24+IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPEVudW1lcmF0aW9uPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXIm
IGhhc2hlciwgRW51bWVyYXRpb24gdmFsdWUpCiB7CiAgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nh
c3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFbnVtZXJhdGlvbj4+KHZhbHVlKSk7CkBAIC0xODYs
NCArMTkwLDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpCiAKIHVzaW5nIFdURjo6Y29tcHV0ZUhh
c2g7CiB1c2luZyBXVEY6Okhhc2hlcjsKLXVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09iamVjdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XVEYvd3Rm
L09iamVjdElkZW50aWZpZXIuaAppbmRleCBmOWM2N2I2M2I1ZTI2YTQwYjRhYWI1OGMwMTRkNWY0
NzBhNjA4NTUzLi44ODg1YWEzMWIyOTU2MWQ5MDBmNzUyZWIzZmViMzc4ZjVkNDQzOTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvT2JqZWN0SWRlbnRpZmllci5oCkBAIC0xMzEsNiArMTMxLDExIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBPYmplY3RJZGVudGlmaWVyPFQ+IG1ha2VPYmplY3RJZGVudGlmaWVy
KHVpbnQ2NF90IGlkCiAgICAgcmV0dXJuIE9iamVjdElkZW50aWZpZXI8VD4geyBpZGVudGlmaWVy
IH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgT2JqZWN0SWRlbnRpZmllcjxUPiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIs
IGlkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPYmplY3RJZGVudGlmaWVySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
T2JqZWN0SWRlbnRpZmllcjxUPiYgaWRlbnRpZmllcikgeyByZXR1cm4gaW50SGFzaChpZGVudGlm
aWVyLm1faWRlbnRpZmllcik7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPYmplY3RJ
ZGVudGlmaWVyPFQ+JiBhLCBjb25zdCBPYmplY3RJZGVudGlmaWVyPFQ+JiBiKSB7IHJldHVybiBh
ID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oIGIvU291cmNl
L1dURi93dGYvUmV0YWluUHRyLmgKaW5kZXggYzdmYjc0NDEwNTU2MWZkNjE1ODg4OGUzY2YwYWVm
OWRiMzQ2NWEyZi4uNGM1OTg0ZWZkNjAxN2EyYzY4ZTUyNjJmOGNlY2I1ZGEyNTgzZTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
UmV0YWluUHRyLmgKQEAgLTQwMiw2ICs0MDIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBk
eW5hbWljX29iamNfY2FzdChpZCBvYmplY3QpCiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5n
IFdURjo6YWRvcHRDRjsKIHVzaW5nIFdURjo6cmV0YWluUHRyOwordXNpbmcgV1RGOjpzYWZlQ0ZF
cXVhbDsKK3VzaW5nIFdURjo6c2FmZUNGSGFzaDsKIAogI2lmZGVmIF9fT0JKQ19fCiB1c2luZyBX
VEY6OmFkb3B0TlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKaW5kZXggYzM3Mzk0ODhkZTg1YzM4ZWVjZDY3MWZl
NzAzMjE3ZjM5M2U5YzIwYi4uOTM4MjFhMjdlNWY4YjUwNDIxYWI3NmFkNzdjOWM5YjI0NWNjYmUw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1ZlY3Rvckhhc2guaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwyOCArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKICNpbmNsdWRl
ICJIYXNoZXIuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXN0cnVjdCBWZWN0b3JIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB2YWx1ZSA6IHZlY3RvcikKLSAgICAgICAgICAgIGhhc2hlci5hZGQoRGVmYXVsdEhhc2g8VD46
Omhhc2godmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA9PSBiOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gc3RydWN0IERlZmF1bHRIYXNoPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHZlY3Rvcik7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotc3RydWN0IERlZmF1bHRIYXNo
PFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9ySGFzaDxULCBpbmxpbmVDYXBhY2l0
eT4geyB9OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAppbmRleCBjNTBiZjE3Yjk2YmQ3MzAwODJlM2MwMWQ2
OTdiNjJkNjQ1OWNkYzI0Li5hYzU1OTJlYmM2MjI1OTRlNDU4MWEzNjBlODIzYzFiN2JmNmM2YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25SdWxlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRF
eHRlbnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsMjMgKzg5LDEyIEBAIHN0cnVjdCBUcmlnZ2VyIHsKIHN0
cnVjdCBUcmlnZ2VySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVHJpZ2dl
ciYgdHJpZ2dlcikKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSA/IDEwNjE5ODYzIDogNDA5NjAwMDE7Ci0gICAgICAgIGlmICgh
dHJpZ2dlci51cmxGaWx0ZXIuaXNOdWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49IFN0cmluZ0hh
c2g6Omhhc2godHJpZ2dlci51cmxGaWx0ZXIpOwotICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50
SGFzaChoYXNoLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPjo6aGFzaCh0cmlnZ2VyLmZsYWdz
KSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiA6IHRyaWdnZXIuY29u
ZGl0aW9ucykKLSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChjb25kaXRpb24p
OwotCi0gICAgICAgIGhhc2ggXj0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpZ2dlci5j
b25kaXRpb25UeXBlKTsKLSAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaCh0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgdHJpZ2dlci51cmxGaWx0
ZXIsIHRyaWdnZXIuZmxhZ3MsIHRyaWdnZXIuY29uZGl0aW9ucywgdHJpZ2dlci5jb25kaXRpb25U
eXBlKTsKICAgICB9Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUcmlnZ2VyJiBhLCBj
b25zdCBUcmlnZ2VyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDBk
NTE4MzNmNWMwNjg1YmI4ODhlM2FhMjE3N2MzODdmNDM3NmE1NDQuLjRlMjVjNzJlZGVhYWY1NzU5
ZWRiNjBmMTJmNmVmMDZhNGI0ZWMxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9UZXJtLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTE2OCwxMSArMTY5LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNo
KFdURjo6cGFpckludEhhc2goV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVyc1swXSksIFdURjo6aW50
SGFzaChtX2NoYXJhY3RlcnNbMV0pKSwgbV9pbnZlcnRlZCk7CisgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZUhhc2gobV9pbnZlcnRlZCwgbV9jaGFyYWN0ZXJzKTsKICAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2ludmVydGVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWlu
dDY0X3QgbV9jaGFyYWN0ZXJzWzJdIHsgMCwgMCB9OworICAgICAgICBzdGQ6OmFycmF5PHVpbnQ2
NF90LCAyPiBtX2NoYXJhY3RlcnMgeyAwLCAwIH07CiAgICAgfTsKIAogICAgIHN0cnVjdCBHcm91
cCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmNwcApp
bmRleCAxM2Y5ZjQ5NjY5YmI2OTQ3YTA0NzRiNGJjNzQxNWYzY2Y0MmY0MTY2Li4wOTgxNjI2ZWZh
M2NhN2RjN2Y4YTI5ZWQ4ZmQwN2E5NWQ0YmM1ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAKQEAgLTEzNyw2ICsxMzcsNDMgQEAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGIpCiAgICAgOwogfQogCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1bnNpZ25lZCBiaXRzID0gY29udGV4dC5pc0hU
TUxEb2N1bWVudCAgICAgICAgICAgICAgICAgIDw8IDAKKyAgICAgICAgfCBjb250ZXh0Lmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gICAgICAgICAgICAgICAgIDw8IDEKKyAgICAgICAgfCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIKKyAgICAg
ICAgfCBjb250ZXh0LnVzZVN5c3RlbUFwcGVhcmFuY2UgICAgICAgICAgICAgICAgICAgICAgIDw8
IDMKKyAgICAgICAgfCBjb250ZXh0LmFzcGVjdFJhdGlvRW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDQKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yQ29udHJhc3RFbmFibGVkICAgICAg
ICAgICAgICAgICAgICAgIDw8IDUKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yRmlsdGVyRW5hYmxl
ZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDYKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yTWl4
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDcKKyAgICAgICAgfCBjb250ZXh0
LmNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQgICAgICAgICAgICAgICAgIDw8IDgKKyAgICAgICAg
fCBjb250ZXh0LmNvbnRhaW5tZW50RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDkK
KyAgICAgICAgfCBjb250ZXh0LmNzc0NvbG9yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDEwCisgICAgICAgIHwgY29udGV4dC5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgICAg
ICAgICAgICAgICAgICA8PCAxMQorICAgICAgICB8IGNvbnRleHQuaW5kaXZpZHVhbFRyYW5zZm9y
bVByb3BlcnRpZXNFbmFibGVkICAgICAgPDwgMTIKKyNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQorICAgICAgICB8IGNvbnRleHQubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQgICAgICAgPDwgMTMKKyNlbmRpZgorICAgICAgICB8IGNvbnRleHQub3ZlcnNjcm9s
bEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgMTQKKyAgICAgICAgfCBjb250ZXh0
LnJlbGF0aXZlQ29sb3JTeW50YXhFbmFibGVkICAgICAgICAgICAgICAgIDw8IDE1CisgICAgICAg
IHwgY29udGV4dC5zY3JvbGxCZWhhdmlvckVuYWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAx
NgorICAgICAgICB8IGNvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkICAgICAgICAg
ICAgICAgPDwgMTcKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgICAgICB8IGNvbnRl
eHQudGV4dEF1dG9zaXppbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgPDwgMTgKKyNlbmRp
ZgorI2lmIEVOQUJMRShDU1NfVFJBTlNGT1JNX1NUWUxFX09QVElNSVpFRF8zRCkKKyAgICAgICAg
fCBjb250ZXh0LnRyYW5zZm9ybVN0eWxlT3B0aW1pemVkM0RFbmFibGVkICAgICAgICAgIDw8IDE5
CisjZW5kaWYKKyAgICAgICAgfCBjb250ZXh0LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IgIDw8IDIwCisgICAgICAgIHwgY29udGV4dC5mb2N1c1Zpc2libGVFbmFibGVk
ICAgICAgICAgICAgICAgICAgICAgICA8PCAyMQorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCisgICAgICAgIHwgY29udGV4dC5hdHRhY2htZW50RW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAyMgorI2VuZGlmCisgICAgICAgIHwgY29udGV4dC5tb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyMzsgLy8gVGhpcyBpcyBtdWx0aXBsZSBiaXRz
LCBzbyBrZWVwIGl0IGxhc3QuCisgICAgYWRkKGhhc2hlciwgY29udGV4dC5iYXNlVVJMLCBjb250
ZXh0LmNoYXJzZXQsIGJpdHMpOworfQorCiBib29sIENTU1BhcnNlckNvbnRleHQ6OmlzUHJvcGVy
dHlSdW50aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
Q29udGV4dC5oCmluZGV4IDhlMGI4N2Y3YWE3NjBlNmVmMjc2YmQ2MzJlZmZiMGFmYWQ5MWU2ZTYu
LjQ5NTYwZDgxYzg1OTBmOTBmZGJhNTRlYTUyMTU1MmNjZGRjNGQwZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCkBAIC0zMCwyMCArMzAsMTYgQEAK
ICNpbmNsdWRlICJTdHlsZVJ1bGVUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUg
PHd0Zi9VUkxIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29u
dGV4dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBVUkwgYmFz
ZVVSTDsKICAgICBTdHJpbmcgY2hhcnNldDsKQEAgLTU3LDggKzUzLDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKICAgICBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotCiAgICAgLy8gU2V0dGluZ3MuCiAgICAgYm9vbCBhc3BlY3RS
YXRpb0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgY29sb3JDb250cmFzdEVuYWJsZWQgeyBm
YWxzZSB9OwpAQCAtOTAsNzAgKzg0LDI5IEBAIHB1YmxpYzoKICAgICBib29sIGF0dGFjaG1lbnRF
bmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCi0gICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdDsKKyAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUsIGNv
bnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJD
b250ZXh0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOworICAgIGJvb2wgaXNQcm9wZXJ0eVJ1
bnRpbWVEaXNhYmxlZChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBVUkwgY29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkgY29uc3Q7CiB9OwogCiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKK3ZvaWQgYWRkKEhhc2hlciYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKKwogV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwogCiBzdHJ1Y3QgQ1NTUGFyc2Vy
Q29udGV4dEhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gdXNl
IFdURjo6SGFzaGVyLgotCi0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSAwOwotICAgICAgICBpZiAo
IWtleS5iYXNlVVJMLmlzTnVsbCgpKQotICAgICAgICAgICAgaGFzaCBePSBXVEY6OlVSTEhhc2g6
Omhhc2goa2V5LmJhc2VVUkwpOwotICAgICAgICBpZiAoIWtleS5jaGFyc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChrZXkuY2hhcnNldCk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBiaXRzID0ga2V5LmlzSFRNTERvY3VtZW50ICAgICAgICAg
ICAgICAgICAgPDwgMAotICAgICAgICAgICAgJiBrZXkuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biAgICAgICAgICAgICAgICAgPDwgMQotICAgICAgICAgICAgJiBrZXkuaXNDb250ZW50T3BhcXVl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMgotICAgICAgICAgICAgJiBrZXkudXNlU3lz
dGVtQXBwZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgICAgPDwgMwotICAgICAgICAgICAgJiBr
ZXkuYXNwZWN0UmF0aW9FbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNAotICAgICAg
ICAgICAgJiBrZXkuY29sb3JDb250cmFzdEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgPDwg
NQotICAgICAgICAgICAgJiBrZXkuY29sb3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgNgotICAgICAgICAgICAgJiBrZXkuY29sb3JNaXhFbmFibGVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgNwotICAgICAgICAgICAgJiBrZXkuY29uc3RhbnRQcm9wZXJ0aWVz
RW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgOAotICAgICAgICAgICAgJiBrZXkuY29udGFpbm1l
bnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgOQotICAgICAgICAgICAgJiBrZXku
Y3NzQ29sb3I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMTAKLSAgICAgICAg
ICAgICYga2V5LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8IDEx
Ci0gICAgICAgICAgICAmIGtleS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQg
ICAgICA8PCAxMgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgICAg
ICAgICAmIGtleS5sZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8PCAx
MwotI2VuZGlmCi0gICAgICAgICAgICAmIGtleS5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAg
ICAgICAgICAgICAgICA8PCAxNAotICAgICAgICAgICAgJiBrZXkucmVsYXRpdmVDb2xvclN5bnRh
eEVuYWJsZWQgICAgICAgICAgICAgICAgPDwgMTUKLSAgICAgICAgICAgICYga2V5LnNjcm9sbEJl
aGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE2Ci0gICAgICAgICAgICAmIGtl
eS5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQgICAgICAgICAgICAgICA8PCAxNwotI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgICAgICAmIGtleS50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAxOAotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19U
UkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVEXzNEKQotICAgICAgICAgICAgJiBrZXkudHJhbnNmb3Jt
U3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQgICAgICAgICAgPDwgMTkKLSNlbmRpZgotICAgICAgICAg
ICAgJiBrZXkudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwgMjAK
LSAgICAgICAgICAgICYga2V5LmZvY3VzVmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDIxCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICAgICAgICAgICYg
a2V5LmF0dGFjaG1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCi0jZW5k
aWYKLSAgICAgICAgICAgICYga2V5Lm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDIzOyAvLyBLZWVwIHRoaXMgbGFzdC4KLSAgICAgICAgaGFzaCBePSBXVEY6Omlu
dEhhc2goYml0cyk7Ci0gICAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29t
cHV0ZUhhc2goY29udGV4dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJldHVybiBhID09IGI7
IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsK
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQ+IHsKICAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4
dCYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90LmJhc2VVUkwpIFVSTChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBX
ZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuYmFzZVVSTC5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGM3YTcwOWEwYTI0MTI0NDNkNDNmMTdmNmZhNWYzMTJkOTliMGEzY2MuLjI3
MmEyYjBlN2Q1MzcyNWE2ZDU0MzljOTI1NzVhYWZkMDliZWIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgRm9ybUVs
ZW1lbnRLZXlIYXNoOjpoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkpCiAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoRm9ybUVsZW1lbnRLZXkpPigma2V5KTsK
IH0KIAotc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9ybUVsZW1lbnRLZXk+IHsKK3N0cnVjdCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHMg
OiBIYXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3Qp
IEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IDgzZWRkOWU5
MjU0OWZhYWVmMTI1MDVlMTUzZWNmNzJmZWI5MzFmYTguLmNlYjg0ZTk2MDIwZDg4OGVmNTZhNjJk
NGJhYWU0MzY1ZjAzOTExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAogI2lmIEVOQUJMRShUSFVOREVSKQogI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBl
cy5oIgpAQCAtMjA1LDggKzIwMyw2IEBAIHByaXZhdGU6CiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNl
c3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKLXB1YmxpYzoKLQogcHJvdGVjdGVk
OgogICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKICAgICBj
b25zdCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0YW5jZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCAwODcwMmQ0Yzc5MGNiOTYzYWJhMTRhNzI5NzE4MjVmNGMwNDJmZDc5Li5i
MTFhODc2OWU4NjBiOTNiMDlkNzMyNDFlNWJlYmQ1ODA4YjYyYjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTM1LDYzICs1MzUsMzIgQEAgdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEEKIH0KICNlbmRpZgogCi1jbGFzcyBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleSB7Ci1wdWJsaWM6Ci0gICAgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGUsIFVDaGFyMzIgY2hhcmFjdGVyLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9u
dCkKLSAgICAgICAgOiBsb2NhbGUobG9jYWxlKQotICAgICAgICAsIGNoYXJhY3RlcihjaGFyYWN0
ZXIpCi0gICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9ybUZvbnQgPT0gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcykKLSAgICB7Ci0gICAgfQotCi0gICAgQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IGNoYXJh
Y3RlcigtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlciA9PSAtMTsgfQotCi0gICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhl
ci5jaGFyYWN0ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZv
bnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRy
dWU7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eUhhc2g7Ci0KK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CiAgICAgQXRvbVN0cmlu
ZyBsb2NhbGU7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CiAgICAgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCB7IGZhbHNlIH07CiB9OwogCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleSYga2V5KQotICAgIHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAg
ICAgIGhhc2hlci5hZGQoa2V5LmNoYXJhY3Rlcik7Ci0gICAgICAgIGhhc2hlci5hZGQoa2V5Lmlz
Rm9yUGxhdGZvcm1Gb250KTsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkubG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsK
LSAgICB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikKK3sKKyAgICByZXR1cm4g
YS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5p
c0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250OworfQogCitzdHJ1Y3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXku
bG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCitz
dHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAoTm90
TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7
IH0gfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsg
fQorfTsKKwogLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhN
RTogU2hvdWxkbid0IHRoZXNlIGJlIFdlYWtQdHJzPwotdHlwZWRlZiBIYXNoTWFwPENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBXVEY6
OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4+IENoYXJhY3Rl
ckZhbGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxs
YmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKKy8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2lu
ZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgordXNp
bmcgQ2hhcmFjdGVyRmFsbGJhY2tNYXAgPSBIYXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2hUcmFpdHM+OwordXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8Y29u
c3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPjsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNjA4LDEyICs1NzcsOCBAQCBSZWZQ
dHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hh
cmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24o
KS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxh
dGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAx
KTsKICAgICB9CiAKLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwot
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKFdURk1vdmUoa2V5KSwgbnVsbHB0cik7Ci0KLSAgICBGb250KiYgZmFsbGJhY2tGb250
ID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJh
Y2tGb250KSB7CisgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0g
SXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vIH07CisgICAgcmV0dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsmXSB7CiAgICAgICAgIFVDaGFyIGNvZGVV
bml0c1syXTsKICAgICAgICAgdW5zaWduZWQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBpZiAo
VV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNjI0LDEzICs1ODksMTEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rlciwg
Y29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQotCi0gICAg
ICAgIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENh
Y2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5n
ZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxsYmFja0ZvbnQ7CisgICAgICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0Zv
clBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0
cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAg
ICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBmb250OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBGb250OjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKaW5kZXggYzdkYTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4u
NjUzYjMzOGI3YzM0MjU2MjcyMjQ5NjExZTI3MDFhYzVkMjYzZTk2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtNjQsNyArNjQsNyBAQCBzdHJ1Y3QgR2x5cGhE
YXRhOwogCiBlbnVtIEZvbnRWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNt
YWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlh
bnQgfTsKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0
Y2ggfTsKLWVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9
OworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAKICNp
ZiBVU0UoQ09SRV9URVhUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0
YWJsZVRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAppbmRleCBlZGYyZmUwNDczYWYzYTg2MDYxNTMxNzQzODMyMWJkOWNhOWUwMjg2Li5mZGQ1
NTQ4ZjBmNTRjMWFjYTdmYWNhZWViODgwNmU4MTI0MGI5YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDg4ICs0Nyw2OCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLXN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV9mYW1pbHkoZmFtaWx5KQotICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCi0gICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHQpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRp
b25LZXkodCkKLSAgICB7IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb25LZXkg
IT0gb3RoZXIubV9mb250RGVzY3JpcHRpb25LZXkKLSAgICAgICAgICAgIHx8IG1fZm9udEZhY2VG
ZWF0dXJlcyAhPSBvdGhlci5tX2ZvbnRGYWNlRmVhdHVyZXMKLSAgICAgICAgICAgIHx8IG1fZm9u
dEZhY2VDYXBhYmlsaXRpZXMgIT0gb3RoZXIubV9mb250RmFjZUNhcGFiaWxpdGllcykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fZmFtaWx5LmltcGwoKSA9PSBvdGhl
ci5tX2ZhbWlseS5pbXBsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KG1fZmFtaWx5LmlzTnVsbCgpIHx8IG90aGVyLm1fZmFtaWx5LmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkpOwotICAgIH0KK0Zv
bnRGYW1pbHlOYW1lOjpGb250RmFtaWx5TmFtZSgpID0gZGVmYXVsdDsKIAotICAgIEZvbnREZXNj
cmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5
OwotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwotICAgIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKLX07
CitpbmxpbmUgRm9udEZhbWlseU5hbWU6OkZvbnRGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCisgICAgOiBtX25hbWUgeyBuYW1lIH0KK3sKK30KIAotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZm9udEtleSkKLSAgICB7Ci0gICAgICAgIEludGVnZXJIYXNo
ZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZh
bWlseU5hbWVIYXNoKGZvbnRLZXkubV9mYW1pbHkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChmb250
S2V5Lm1fZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgICAgICBoYXNoZXIu
YWRkKGZvbnRLZXkubV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7Ci0gICAgICAgIGlmIChhdXRv
IHdlaWdodCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAg
ICAgICBoYXNoZXIuYWRkKHdlaWdodC0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmb250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRp
ZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aC0+dW5pcXVlVmFsdWUoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gc2xvcGUgPSBmb250S2V5Lm1f
Zm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZChzbG9w
ZS0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgcmV0dXJuIGhh
c2hlci5oYXNoKCk7Ci0gICAgfQoraW5saW5lIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRGYW1pbHlO
YW1lOjpzdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7
Ci0gICAgfQoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250RmFtaWx5
TmFtZSYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGhhc2ggdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIG5hbWUgaW5zdGVhZCBvZiBoYXNoaW5nIGEgaGFzaC4KKyAgICBh
ZGQoaGFzaGVyLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChuYW1lLnN0
cmluZygpKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseU5h
bWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAoYS5zdHJpbmco
KS5pc051bGwoKSB8fCBiLnN0cmluZygpLmlzTnVsbCgpKSA/IGEuc3RyaW5nKCkgPT0gYi5zdHJp
bmcoKSA6IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoYS5zdHJp
bmcoKSwgYi5zdHJpbmcoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dEZhbWlseU5hbWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CiAKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeworICAgIEZv
bnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKKyAgICBGb250RmFtaWx5TmFtZSBmYW1p
bHk7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBmZWF0dXJlczsKKyAgICBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKK307CisKK3N0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGIpCit7CisgICAgcmV0dXJuIGEuZGVzY3JpcHRpb25LZXkgPT0g
Yi5kZXNjcmlwdGlvbktleSAmJiBhLmZhbWlseSA9PSBiLmZhbWlseSAmJiBhLmZlYXR1cmVzID09
IGIuZmVhdHVyZXMgJiYgYS5jYXBhYmlsaXRpZXMgPT0gYi5jYXBhYmlsaXRpZXM7Cit9CisKK3N0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuZmFtaWx5LCBrZXkuZmVhdHVyZXMsIGtleS5j
YXBhYmlsaXRpZXMudGllZCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAogc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBzbG90KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5o
YXNoKCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0s
IHsgfSwgeyB9LCB7IH0gfTsKICAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgcmV0dXJuIGtleS5kZXNj
cmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogICAgIH0KK307CiAKK3N0cnVj
dCBGb250RGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIApAQCAtMTQxLDcgKzEy
MSw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRy
YWl0czxGb250UGxhdGZvcm1EYXRhPiB7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQogICAgIHsKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgdmFsdWUpCiAgICAgewpAQCAtMTc3LDE0ICsxNTcs
MTQgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGdsb2Jh
bEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjp+Rm9udENhY2hlKCkgPSBkZWZhdWx0OwotCiBG
b250Q2FjaGU6OkZvbnRDYWNoZSgpCiAgICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogICAgICwgbV9mb250RGF0YUNhY2hl
cyhtYWtlVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVzPigpKQogewogfQogCitGb250Q2FjaGU6On5G
b250Q2FjaGUoKSA9IGRlZmF1bHQ7CisKIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBp
ZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGZhbWlseU5hbWUpKQpAQCAtMjI1LDggKzIwNSw4IEBAIE9wdGlvbmFsPEFTQ0lJTGl0
ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKLSAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y2FjaGVkRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwpAQCAtMjQ2LDI0ICsy
MjYsMjMgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgcGxhdGZvcm1Jbml0KCk7
CiAgICAgfSk7CiAKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZhbWlseU5hbWUs
IGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMp
OworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgeyBmb250RGVzY3JpcHRpb24sIHsg
ZmFtaWx5TmFtZSB9LCBmZWF0dXJlcyA/ICpmZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3Mg
eyB9LCBjYXBhYmlsaXRpZXMgfTsKIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNh
Y2hlcy0+cGxhdGZvcm1EYXRhLmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250
RmFjZUNhcGFiaWxpdGllcyk7Ci0KKyAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRm
b3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZlYXR1cmVzLCBjYXBhYmlsaXRp
ZXMpOwogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7
Ci0gICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUg
YSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKLSAgICAg
ICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRj
LiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KKyAgICAg
ICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiBXZSBoYXZlIGEgc21hbGwg
c2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCisgICAgICAgICAgICAv
LyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gVHJ5IGxv
b2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KICAgICAgICAgICAgIGlm
IChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUg
PSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5h
bWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKLSAgICAg
ICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0
aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKLSAgICAgICAgICAgICAgICAvLyBiZWVuIGlu
dmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKCkuCisgICAgICAgICAgICAgICAgYXV0byogYWx0ZXJuYXRlRGF0YSA9IGNhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZmVhdHVyZXMsIGNh
cGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUga2V5IGlu
IHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQor
ICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxs
IHRvIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9IG1fZm9u
dERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5lbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKQotICAgICAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KCpmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFsdGVy
bmF0ZURhdGEpCisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9u
dFBsYXRmb3JtRGF0YT4oKmFsdGVybmF0ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjgyLDEyICsyNjEsMTIgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
Ojpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKLSAgICBpZiAo
YXV0byogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24sIGZhbWlseSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkpCisgICAgaWYgKGF1dG8qIHBsYXRmb3JtRGF0YSA9IGNhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGZlYXR1cmVzLCBjYXBh
YmlsaXRpZXMsIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkpCiAgICAgICAgIHJldHVybiBmb250Rm9y
UGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0z
NzUsMzAgKzM1NCwxNSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVu
c2lnbmVkIHB1cmdlQ291bnQpCiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNh
Y2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewotICAgIGlmIChhLmZv
bnREZXNjcmlwdGlvbktleSAhPSBiLmZvbnREZXNjcmlwdGlvbktleSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwg
YS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHNpemUgPSBhLmZhbWlsaWVzLnNpemUoKTsKLSAg
ICBpZiAoc2l6ZSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGEuZmFtaWxpZXNbaV0s
IGIuZmFtaWxpZXNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mb250RGVzY3JpcHRpb25LZXkgPT0gYi5mb250RGVz
Y3JpcHRpb25LZXkKKyAgICAgICAgJiYgYS5mb250U2VsZWN0b3JJZCA9PSBiLmZvbnRTZWxlY3Rv
cklkCisgICAgICAgICYmIGEuZm9udFNlbGVjdG9yVmVyc2lvbiA9PSBiLmZvbnRTZWxlY3RvclZl
cnNpb24KKyAgICAgICAgJiYgYS5mYW1pbGllcyA9PSBiLmZhbWlsaWVzOwogfQogCiB1bnNpZ25l
ZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBrZXkpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBoYXNoIHRoZSBrZXkgYW5kIHRoZSBmYW1p
bHkgbmFtZSBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIG1ha2luZyBhIGhhc2ggb3V0IG9mIG90aGVy
IGhhc2hlcy4KLSAgICBIYXNoZXIgaGFzaGVyOwotICAgIGFkZChoYXNoZXIsIGtleS5mb250RGVz
Y3JpcHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRTZWxl
Y3RvcklkKTsKLSAgICBhZGQoaGFzaGVyLCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBrZXkuZmFtaWxpZXMpCi0gICAgICAgIGFkZChoYXNoZXIsIGZh
bWlseS5pc051bGwoKSA/IDAgOiBXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lSGFzaChmYW1pbHkpKTsKLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICByZXR1
cm4gY29tcHV0ZUhhc2goa2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5LmZvbnRTZWxlY3Rvcklk
LCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiwga2V5LmZhbWlsaWVzKTsKIH0KIAogdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKQEAgLTQ1NiwxMSArNDIwLDExIEBA
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpKTsKKyAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihGb250Q2FzY2FkZUNhY2hlRW50cnkgeyBXVEZNb3ZlKGtleSksIEZvbnRDYXNj
YWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpIH0pOwogICAgIFJlZjxGb250
Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHBy
dW5lQ291bnRlcjsKICAgICAvLyBSZWZlcmVuY2VkIEZvbnRDYXNjYWRlRm9udHMgd291bGQgZXhp
c3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgogICAgIGlmICgh
KCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCkBAIC01MTUsMTUg
KzQ3OSwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAjZW5kaWYKICAgICBpbnZh
bGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogCi0gICAgbV9nZW5lcmF0aW9uKys7Ci0KLSAgICBW
ZWN0b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVudHM7Ci0gICAgY2xpZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fY2xpZW50cy5zaXplKCkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fY2xp
ZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgY2xpZW50cy51bmNoZWNrZWRBcHBlbmQoKippdCk7CisgICAgKyttX2dlbmVyYXRpb247
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xpZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2xpZW50c1tpXS0+Zm9udENhY2hlSW52YWxpZGF0ZWQoKTsKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFJlZlB0cjxGb250U2VsZWN0b3I+PihtX2NsaWVudHMp
KQorICAgICAgICBjbGllbnQtPmZvbnRDYWNoZUludmFsaWRhdGVkKCk7CiAKICAgICBwdXJnZUlu
YWN0aXZlRm9udERhdGEoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggNzUwMWMyZGYwZGYyM2YwNDhjNzAwYWFjMDBiZjdjMmFiMjc5ODgz
Ny4uNGViYTZmY2YyZjdjODA0OGZiODNkNjU1NGI4ZmQ2YWY4N2MxYWM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTY0LDE3ICs2NCwx
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250Q2Fz
Y2FkZTsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgRm9udDsKLWVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90OwogCi0jaWYgUExBVEZPUk0oV0lOKQotI2lm
IFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLXR5cGVkZWYgSU1MYW5nRm9udExpbmsyIElNTGFuZ0Zv
bnRMaW5rVHlwZTsKLSNlbHNlCi10eXBlZGVmIElNTGFuZ0ZvbnRMaW5rIElNTGFuZ0ZvbnRMaW5r
VHlwZTsKK2VudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiBib29sOworCisjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdGb250TGlua1R5
cGUgPSBJTUxhbmdGb250TGluazI7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShJTUxBTkdfRk9OVF9MSU5LMikKK3VzaW5nIElNTGFuZ0ZvbnRMaW5rVHlwZSA9IElNTGFuZ0Zv
bnRMaW5rOwogI2VuZGlmCiAKIC8vIFRoaXMga2V5IGNvbnRhaW5zIHRoZSBGb250RGVzY3JpcHRp
b24gZmllbGRzIG90aGVyIHRoYW4gZmFtaWx5IHRoYXQgbWF0dGVyIHdoZW4gZmV0Y2hpbmcgRm9u
dERhdGFzIChwbGF0Zm9ybSBmb250cykuCkBAIC0xMTIsMTcgKzExMyw3IEBAIHN0cnVjdCBGb250
RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7IH0KIAotICAgIGlubGluZSB1bnNpZ25lZCBj
b21wdXRlSGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBIYXNoZXIgaGFzaGVyOwotICAgICAg
ICBhZGQoaGFzaGVyLCBtX3NpemUpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0LnRpZWQoKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fbG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9mbGFncyk7Ci0gICAgICAgIGFkZChoYXNo
ZXIsIG1fZmVhdHVyZVNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fdmFy
aWF0aW9uU2V0dGluZ3MuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0g
ICAgfQorICAgIGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250RGVzY3JpcHRpb25L
ZXkmKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbWFr
ZUZsYWdzS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xNjUsMjMg
KzE1NiwzNiBAQCBwcml2YXRlOgogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlv
blNldHRpbmdzOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBG
b250RGVzY3JpcHRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkubV9zaXplLCBr
ZXkubV9mb250U2VsZWN0aW9uUmVxdWVzdCwga2V5Lm1fZmxhZ3MsIGtleS5tX2xvY2FsZSwga2V5
Lm1fZmVhdHVyZVNldHRpbmdzLCBrZXkubV92YXJpYXRpb25TZXR0aW5ncyk7Cit9CisKIHN0cnVj
dCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBGb250RGVzY3JpcHRpb25LZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBrZXkuY29t
cHV0ZUhhc2goKTsKLSAgICB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udERl
c2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQorLy8g
VGhpcyBjbGFzcyBob2xkcyB0aGUgbmFtZSBvZiBhIGZvbnQgZmFtaWx5LCBhbmQgZGVmaW5lcyBo
YXNoaW5nIGFuZCA9PSBvZiB0aGlzIG5hbWUgdG8KKy8vIHVzZSB0aGUgcnVsZXMgZm9yIGZvbnQg
ZmFtaWx5IG5hbWVzIGluc3RlYWQgb2YgdXNpbmcgc3RyYWlnaHQgc3RyaW5nIGNvbXBhcmlzb24u
CitjbGFzcyBGb250RmFtaWx5TmFtZSB7CitwdWJsaWM6CisgICAgRm9udEZhbWlseU5hbWUoKTsK
KyAgICBGb250RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CisgICAgY29uc3QgQXRvbVN0
cmluZyYgc3RyaW5nKCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0
IEZvbnRGYW1pbHlOYW1lJik7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Citwcml2YXRlOgorICAgIEF0b21TdHJpbmcgbV9uYW1l
OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiwgY29uc3QgRm9u
dEZhbWlseU5hbWUmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFtaWx5TmFtZSYsIGNv
bnN0IEZvbnRGYW1pbHlOYW1lJik7CisKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0
aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0
b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPEZvbnRGYW1pbHlOYW1lLCAz
PiBmYW1pbGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JWZXJzaW9uOwogfTsKQEAgLTE4OSwyNiArMTkzLDIyIEBAIHN0cnVjdCBGb250
Q2FzY2FkZUNhY2hlS2V5IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5JiwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYpOwogCiBzdHJ1Y3QgRm9udENhc2NhZGVD
YWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBG
b250Q2FzY2FkZUNhY2hlRW50cnkoRm9udENhc2NhZGVDYWNoZUtleSYmIGtleSwgUmVmPEZvbnRD
YXNjYWRlRm9udHM+JiYgZm9udHMpCi0gICAgICAgIDoga2V5KFdURk1vdmUoa2V5KSkKLSAgICAg
ICAgLCBmb250cyhXVEZNb3ZlKGZvbnRzKSkKLSAgICB7IH0KKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKICAgICBSZWY8
Rm9udENhc2NhZGVGb250cz4gZm9udHM7CiB9OwogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNj
YWRlQ2FjaGVLZXkmKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNo
ZUtleT4gewotICAgIHN0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5IGVtcHR5VmFs
dWUoKSB7IHJldHVybiB7IH07IH0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBzbG90LmZvbnRTZWxlY3Rv
cklkID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYg
c2xvdCkgeyByZXR1cm4gc2xvdC5mb250U2VsZWN0b3JJZCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7IH0KK3N0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0
cyA6IEhhc2hUcmFpdHM8Rm9udENhc2NhZGVDYWNoZUtleT4geworICAgIHN0YXRpYyBGb250Q2Fz
Y2FkZUNhY2hlS2V5IGVtcHR5VmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBuZXcg
KE5vdE51bGwsICZzbG90KSBGb250Q2FzY2FkZUNhY2hlS2V5IHsgRm9udERlc2NyaXB0aW9uS2V5
IHsgV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUgfSwgeyB9LCB7IH0sIHsgfSB9OyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5
KSB7IHJldHVybiBrZXkuZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KIH07CiAKIHVzaW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRl
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2Fz
Y2FkZUNhY2hlS2V5SGFzaCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwpAQCAtMjI1
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICB+Rm9udENhY2hlKCk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgUmVmUHRyPEZvbnQ+IHN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBJc0ZvclBsYXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CkBAIC0yMzUsNiArMjM1LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEZvbnRBbGxvd2xpc3QoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5r
VHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFs
aXplKCk7CkBAIC0zMDEsMTEgKzMwMiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJik7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFs
bHkgYmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0
YSogY2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogPSBudWxscHRyLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
IGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0gKHVuY2xlYXIgd2hpY2ggZnVuY3Rpb25zIHRoaXMgY29tbWVu
dCBhcHBsaWVzIHRvKS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKTsKICAgICAKICAgICBzdGF0aWMgT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKQEAgLTMzMiw2ICszMzIsNyBAQCBwcml2YXRlOgogCiAgICAg
ZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKICNlbmRpZgorCiAgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiB9OwogCkBAIC0zNDgsNyArMzQ5LDYgQEAgaW5saW5lIHZvaWQgRm9udENh
Y2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAKICNlbmRpZgogCi0KIGlubGlu
ZSBib29sIEZvbnRDYWNoZTo6UHJld2FybUluZm9ybWF0aW9uOjppc0VtcHR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2VlbkZhbWlsaWVzLmlzRW1wdHkoKSAmJiBmb250TmFtZXNSZXF1aXJpbmdT
eXN0ZW1GYWxsYmFjay5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKaW5kZXggYWRhZmYzYzE0NmRjNzIz
NWZmMDU5NmQ0ZmM0NzY3OTc1YjE1ODIxMy4uNjA3NzBjZDY0YzM5MThiMDAwNTFlNzQ1N2JiZWY0
Mzc0ZjJhZWMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdlbmVyaWNGYW1pbGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIFVTY3JpcHRDb2RlIHVzZXMgLTEgYW5kIDAgZm9yIFVTY3JpcHRJbnZhbGlk
Q29kZSBhbmQgVVNjcmlwdENvbW1vbi4KIC8vIFdlIG5lZWQgdG8gdXNlIC0yIGFuZCAtMyBmb3Ig
ZW1wdHkgdmFsdWUgYW5kIGRlbGV0ZWQgdmFsdWUuCi1zdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKK3N0cnVjdCBVU2NyaXB0Q29kZUhh
c2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVy
biAtMjsgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShpbnQmIHNsb3Qp
IHsgc2xvdCA9IC0zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgKaW5kZXggZTYyMzM1MDRkOTMxMDEzNDIx
MjJiN2JjMmM3MDNmZTUyY2Y3NGFhMy4uNjZmOGZkYzE3NWI2YTMxMDk3MTg2ZjJkNGJjNzcwMWY3
NWI0NGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApAQCAtMjkxLDYgKzI5MSwxMSBAQCBjb25zdGV4
cHIgRm9udFNlbGVjdGlvblZhbHVlIHVsdHJhRXhwYW5kZWRTdHJldGNoVmFsdWUoKQogICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUgeyAyMDAgfTsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBGb250U2VsZWN0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIGFk
ZChoYXNoZXIsIHZhbHVlLnJhd1ZhbHVlKCkpOworfQorCiAvLyBbSW5jbHVzaXZlLCBJbmNsdXNp
dmVdCiBzdHJ1Y3QgRm9udFNlbGVjdGlvblJhbmdlIHsKICAgICB1c2luZyBWYWx1ZSA9IEZvbnRT
ZWxlY3Rpb25WYWx1ZTsKQEAgLTMzNCwxNCArMzM5LDYgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
YW5nZSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQgPj0gbWluaW11bSAmJiB0YXJnZXQgPD0gbWF4
aW11bTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBuYW1lIGlzIG5vdCBzbyBncmVhdC4g
TW92ZSB0aGlzIGludG8gdGhlIGFkZCBmdW5jdGlvbiBiZWxvdwotICAgIC8vIG9uY2Ugd2UgbW92
ZSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIGZyb20gSW50ZWdlckhhc2hlciB0byBIYXNo
ZXIsCi0gICAgLy8gYW5kIHRoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGhhdmUgYSBuYW1lLgotICAg
IGNvbnN0ZXhwciB1aW50MzJfdCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbWluaW11bS5yYXdWYWx1ZSgpIDw8IDE2IHwgbWF4aW11bS5yYXdWYWx1ZSgpOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogCkBAIC0zNzcsNyArMzc0LDcgQEAgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblJh
bmdlPiBGb250U2VsZWN0aW9uUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiBpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRTZWxlY3Rpb25SYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgYWRkKGhhc2hlciwgcmFuZ2UudW5pcXVlVmFsdWUoKSk7CisgICAgYWRkKGhh
c2hlciwgcmFuZ2UubWluaW11bSwgcmFuZ2UubWF4aW11bSk7CiB9CiAKIHN0cnVjdCBGb250U2Vs
ZWN0aW9uUmVxdWVzdCB7CkBAIC0zODUsNiArMzgyLDcgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHsKIAogICAgIFZhbHVlIHdlaWdodDsKICAgICBWYWx1ZSB3aWR0aDsKKwogICAgIC8v
IEZJWE1FOiBXZSBhcmUgdXNpbmcgYW4gb3B0aW9uYWwgaGVyZSB0byBiZSBhYmxlIHRvIGRpc3Rp
bmd1aXNoIGJldHdlZW4gYW4gZXhwbGljaXQKICAgICAvLyBvciBpbXBsaWNpdCBzbG9wZSAoZm9y
ICJpdGFsaWMiIGFuZCAib2JsaXF1ZSIpIGFuZCB0aGUgIm5vcm1hbCIgdmFsdWUgd2hpY2ggaGFz
IG5vCiAgICAgLy8gc2xvcGUuIFRoZSAiaXRhbGljIiBhbmQgIm9ibGlxdWUiIHZhbHVlcyBjYW4g
YmUgZGlzdGluZ3Vpc2hlZCBieSBsb29raW5nIGF0IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAKaW5kZXggOGE4
Yzc5N2Y2NDcxMjM5ZjFlN2NmOGE1ZDI3ZTMwNmQ1ODkzM2ViMC4uYmRlZWJlODAwMTQxNDQ4YjU4
Yzc0MmZjZmJiNGE3ZWI5NmQ0NTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuY3BwCkBAIC0yNyw0MiArMjcsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIK
IAotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10ZW1wbGF0ZSA8PgotdW5zaWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgZm9yIChhdXRvJiBm
ZWF0dXJlIDogbV9saXN0KSB7Ci0gICAgICAgIGhhc2hlci5hZGQoRm91ckNoYXJhY3RlclRhZ0hh
c2g6Omhhc2goZmVhdHVyZS50YWcoKSkpOwotICAgICAgICBoYXNoZXIuYWRkKGZlYXR1cmUudmFs
dWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotfQotCi10ZW1wbGF0ZSA8
PgotdW5zaWduZWQgRm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoKCkgY29uc3QKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihmbG9hdCkgPT0gc2l6ZW9mKGludCksICJJbnRlZ2VySGFzaGVy
IG5lZWRzIHRvIGFjY2VwdCBmbG9hdHMgdG9vIik7Ci0gICAgdW5pb24gewotICAgICAgICBmbG9h
dCBmOwotICAgICAgICBpbnQgaTsKLSAgICB9IGZsb2F0VG9JbnQ7Ci0KLSAgICBJbnRlZ2VySGFz
aGVyIGhhc2hlcjsKLSAgICBmb3IgKGF1dG8mIHZhcmlhdGlvbiA6IG1fbGlzdCkgewotICAgICAg
ICBoYXNoZXIuYWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpoYXNoKHZhcmlhdGlvbi50YWcoKSkp
OwotICAgICAgICBmbG9hdFRvSW50LmYgPSB2YXJpYXRpb24udmFsdWUoKTsKLSAgICAgICAgaGFz
aGVyLmFkZChmbG9hdFRvSW50LmkpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRm9udFZh
cmlhdGlvblNldHRpbmdzJiBpdGVtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiYgaXRlbSkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiB2
YXJpYXRpb24gPSBpdGVtLmF0KGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuaAppbmRleCBiOTIwMzRlYTIxNjg5ZmJhNGVm
NTUzY2UyZmE4ZjViYzRhYzFlMzE3Li4xMjhkYWY3ZTYzYmM3M2RhOWZlZDFjYzNhOWU0MmFjZjU2
ODkzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
VGFnZ2VkU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250VGFnZ2VkU2V0dGluZ3MuaApAQCAtMzYsMjAgKzM2LDI2IEBAIGNsYXNzIFRleHRTdHJlYW07
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBzdGQ6OmFycmF5PGNoYXIsIDQ+IEZv
bnRUYWc7Cit1c2luZyBGb250VGFnID0gc3RkOjphcnJheTxjaGFyLCA0PjsKIAotaW5saW5lIEZv
bnRUYWcgZm9udEZlYXR1cmVUYWcoY29uc3QgY2hhciBhcnJbNF0pIHsgcmV0dXJuIHt7IGFyclsw
XSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXSB9fTsgfQoraW5saW5lIEZvbnRUYWcgZm9udEZlYXR1
cmVUYWcoY29uc3QgY2hhciBjaGFyYWN0ZXJzWzRdKSB7IHJldHVybiB7eyBjaGFyYWN0ZXJzWzBd
LCBjaGFyYWN0ZXJzWzFdLCBjaGFyYWN0ZXJzWzJdLCBjaGFyYWN0ZXJzWzNdIH19OyB9CisKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjphcnJheTxjaGFyLCA0PiBhcnJheSkK
K3sKKyAgICB1aW50MzJfdCBpbnRlZ2VyID0gKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFycmF5WzBd
KSA8PCAyNCkgfCAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbMV0pIDw8IDE2KSB8IChzdGF0
aWNfY2FzdDx1aW50OF90PihhcnJheVsyXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50OF90Pihh
cnJheVszXSk7CisgICAgYWRkKGhhc2hlciwgaW50ZWdlcik7Cit9CiAKIHN0cnVjdCBGb3VyQ2hh
cmFjdGVyVGFnSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFRhZyYg
Y2hhcmFjdGVycykgeyByZXR1cm4gKGNoYXJhY3RlcnNbMF0gPDwgMjQpIHwgKGNoYXJhY3RlcnNb
MV0gPDwgMTYpIHwgKGNoYXJhY3RlcnNbMl0gPDwgOCkgfCBjaGFyYWN0ZXJzWzNdOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFRhZyYgYSwgY29uc3QgRm9udFRhZyYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRm9udFRhZyBjaGFyYWN0
ZXJzKSB7IHJldHVybiBjb21wdXRlSGFzaChjaGFyYWN0ZXJzKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKEZvbnRUYWcgYSwgRm9udFRhZyBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9Owog
Ci1zdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJh
aXRzPEZvbnRUYWc+IHsKK3N0cnVjdCBGb3VyQ2hhcmFjdGVyVGFnSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8Rm9udFRhZz4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250VGFnJiBz
bG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIEZvbnRUYWcoe3sgZmYs
IGZmLCBmZiwgZmYgfX0pOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Rm9udFRhZyYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZmLCBmZiwg
ZmYgfX0pOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRm9udFRhZyB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gRm9udFRhZyh7eyBmZiwgZmYsIGZmLCBmZiB9fSk7IH0KIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgZmYgPSBzdGF0aWNfY2FzdDxjaGFyPigw
eEZGKTsKQEAgLTU5LDE0ICs2NSwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEZv
bnRUYWdnZWRTZXR0aW5nIHsKIHB1YmxpYzoKICAgICBGb250VGFnZ2VkU2V0dGluZygpID0gZGVs
ZXRlOwotICAgIEZvbnRUYWdnZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmLCBUIHZhbHVlKTsKLSAg
ICBGb250VGFnZ2VkU2V0dGluZyhGb250VGFnJiYsIFQgdmFsdWUpOworICAgIEZvbnRUYWdnZWRT
ZXR0aW5nKEZvbnRUYWcsIFQgdmFsdWUpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvbnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb250VGFnZ2VkU2V0dGluZzxU
PiYgb3RoZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udFRhZyYgdGFnKCkgY29uc3QgeyByZXR1
cm4gbV90YWc7IH0KKyAgICBGb250VGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAg
ICAgVCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBib29sIGVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiB2YWx1ZSgpOyB9CiAKQEAgLTc5LDE5ICs4NCwxMiBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9u
dFRhZ2dlZFNldHRpbmcoY29uc3QgRm9udFRhZyYgdGFnLCBUIHZhbHVlKQorRm9udFRhZ2dlZFNl
dHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKEZvbnRUYWcgdGFnLCBUIHZhbHVlKQogICAgIDog
bV90YWcodGFnKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9udFRhZ2dlZFNldHRpbmcoRm9udFRhZyYm
IHRhZywgVCB2YWx1ZSkKLSAgICA6IG1fdGFnKFdURk1vdmUodGFnKSkKLSAgICAsIG1fdmFsdWUo
dmFsdWUpCi17Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogYm9vbCBGb250VGFnZ2VkU2V0
dGluZzxUPjo6b3BlcmF0b3I9PShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNv
bnN0CiB7CkBAIC0xNTIsNiArMTUwLDExIEBAIE9wdGlvbmFsPEZvbnRUYWdnZWRTZXR0aW5nPFQ+
PiBGb250VGFnZ2VkU2V0dGluZzxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgfX0s
ICp2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgc2V0dGluZykKK3sKKyAgICBhZGQoaGFz
aGVyLCBzZXR0aW5nLnRhZygpLCBzZXR0aW5nLnZhbHVlKCkpOworfQorCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIGNsYXNzIEZvbnRUYWdnZWRTZXR0aW5ncyB7CiBwdWJsaWM6CkBAIC0yMTEsMTQg
KzIxNCwxMCBAQCBPcHRpb25hbDxGb250VGFnZ2VkU2V0dGluZ3M8VD4+IEZvbnRUYWdnZWRTZXR0
aW5nczxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdHlwZWRlZiBGb250VGFnZ2VkU2V0dGluZzxpbnQ+IEZvbnRGZWF0dXJlOwotdHlwZWRlZiBG
b250VGFnZ2VkU2V0dGluZ3M8aW50PiBGb250RmVhdHVyZVNldHRpbmdzOwotCi10ZW1wbGF0ZSA8
PiB1bnNpZ25lZCBGb250RmVhdHVyZVNldHRpbmdzOjpoYXNoKCkgY29uc3Q7Ci0KLXR5cGVkZWYg
Rm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiBGb250VmFyaWF0aW9uU2V0dGluZ3M7Ci1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJik7Cit1c2luZyBGb250RmVhdHVyZSA9IEZvbnRUYWdnZWRTZXR0aW5nPGludD47
Cit1c2luZyBGb250RmVhdHVyZVNldHRpbmdzID0gRm9udFRhZ2dlZFNldHRpbmdzPGludD47Cit1
c2luZyBGb250VmFyaWF0aW9uU2V0dGluZ3MgPSBGb250VGFnZ2VkU2V0dGluZ3M8ZmxvYXQ+Owog
Ci10ZW1wbGF0ZSA8PiB1bnNpZ25lZCBGb250VmFyaWF0aW9uU2V0dGluZ3M6Omhhc2goKSBjb25z
dDsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZvbnRUYWdnZWRT
ZXR0aW5nczxmbG9hdD4mKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCmluZGV4IGJmOWQwZjg1OTI4MTQ3NjYyMzg0NTRhN2ZjMzMyZTg1NGUz
YzE3N2UuLjhlYjMyNmM0OTY0ZWNhOWUwZjNmYmM3ZTBjZjgyYjhkYTM1ZjM4OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTMyLDggKzMy
LDYgQEAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KIAotdXNpbmcgV1RGOjpwYWlySW50SGFzaDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKaW5kZXggNTNlYjVlY2E2NzQ2YTE5YTgxNmJkY2M4YTExNmM5ZGE5MDhkNWNhYi4uNzBm
NmQwOGY1M2Q3YmM4NTcwNmRhYzQ1YTA3YWIxZjA3ZGMyMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cApAQCAtNDgsMTIgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCi0vLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2luZyBkZWNs
YXJhdGlvbiBzaG91bGQgYmUgaW4gPHd0Zi9IYXNoRnVuY3Rpb25zLmg+LgotdXNpbmcgV1RGOjpw
YWlySW50SGFzaDsKLQotLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24g
c2hvdWxkIGJlIGluIDx3dGYvSGFzaFRyYWl0cy5oPi4KLXVzaW5nIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaAppbmRleCA1YmYwNWQ0ZTE0MGVlNjJiMzMyMWU0ZGJlZjUxZGFjMWQxYjM0ZDk5
Li45ZmFjZWM0ZjAxNDIzZjQwNTQzNjViNGI5YjViMjdlMTcxMjE2NmQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgTW9ub3Rvbmlj
VGltZSBsYXN0QWNjZXNzVGltZTsKICAgICB9OwogCi0gICAgc3RydWN0IFN1YmltYWdlQ2FjaGVF
bnRyeVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8U3ViaW1hZ2VDYWNoZUVudHJ5PiB7
CisgICAgc3RydWN0IFN1YmltYWdlQ2FjaGVFbnRyeVRyYWl0cyA6IEhhc2hUcmFpdHM8U3ViaW1h
Z2VDYWNoZUVudHJ5PiB7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4+IEltYWdlVHJhaXRzOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAppbmRleCAwNzE3MjIxYjEzMDY5MmJmMWY4YWU0ZmY0MDc1ODYwNTZjZjAx
ZmJiLi4yYmUzOWI3OTQzNTE1MWY0ZmE4NmZjMzE0OTE0MThhMTJkMjk0OWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lm
aWNhdGlvbkNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApAQCAtMzcsNiArMzcs
OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRp
b25LZXkgeworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
cjsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OworCiAgICAgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkoKSA9IGRlZmF1bHQ7CiAKICAgICBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbktleShDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTUwLDcgKzUzLDcgQEAgc3RydWN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5nZXQoKSwgb3RoZXIuZm9u
dERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9PSBvdGhlci5mb250RGVz
Y3JpcHRpb25LZXk7CisgICAgICAgIHJldHVybiBzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5n
ZXQoKSwgb3RoZXIuZm9udERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9
PSBvdGhlci5mb250RGVzY3JpcHRpb25LZXk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBvdGhlcikgY29uc3QKQEAgLTU5LDIz
ICs2MiwxNSBAQCBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkgewogICAgIH0KIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQg
Y29tcHV0ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goV1RGOjpzYWZlQ0ZIYXNoKGZvbnREZXNjcmlwdG9yLmdldCgpKSwgZm9udERlc2NyaXB0aW9u
S2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlw
dG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2Ny
aXB0aW9uS2V5OwogfTsKIAogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5SGFzaCB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXkmIGtleSkgeyByZXR1cm4ga2V5LmNvbXB1dGVIYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYga2V5KSB7IHJldHVybiBj
b21wdXRlSGFzaChzYWZlQ0ZIYXNoKGtleS5mb250RGVzY3JpcHRvci5nZXQoKSksIGtleS5mb250
RGVzY3JpcHRpb25LZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udEZhbWls
eVNwZWNpZmljYXRpb25LZXkmIGEsIGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBGb250TWFwID0gSGFzaE1hcDxG
b250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5Pj47Cit1c2luZyBGb250TWFwID0gSGFz
aE1hcDxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+OwogCiBzdGF0aWMgRm9udE1hcCYg
Zm9udE1hcCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRleCAw
YjI3OWE3ZGVmNWNkNDg4MmE4MjVjMzY4M2JlMTM1MmIyMmU2MDdhLi45YWQxZTBjYzQ1MGYwZWFh
ODI5ODE3MzU1OTc4MDBhYzA4MDQ5NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNv
cmVUZXh0LmgKQEAgLTcyLDI3ICs3MiwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVy
OwotICAgICAgICAgICAgQVNTRVJUKCFmb250TmFtZS5pc051bGwoKSk7Ci0gICAgICAgICAgICBo
YXNoZXIuYWRkKGxvY2FsZS5leGlzdGluZ0hhc2goKSk7Ci0gICAgICAgICAgICBoYXNoZXIuYWRk
KGxvY2FsZS5pc051bGwoKSA/IDAgOiBsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICAg
ICAgaGFzaGVyLmFkZCh3ZWlnaHQpOwotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aCk7Ci0g
ICAgICAgICAgICBoYXNoZXIuYWRkKHNpemUpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKTsKLSAgICAgICAgICAg
IGhhc2hlci5hZGQoaXRhbGljKTsKLSAgICAgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGZvbnROYW1lLCBsb2NhbGUsIHdlaWdodCwg
d2lkdGgsIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBpdGFsaWMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RydWN0IENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJI
YXNoPEF0b21TdHJpbmcsIGZsb2F0PiB7Ci0gICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuaGFzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEhhc2ggeworICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FzY2Fk
ZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7IHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsg
fQorICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwogICAgICAgICB9OwogCkBAIC0xMzEsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gY29tcHV0
ZUNhc2NhZGVMaXN0KENURm9udFJlZiwgQ0ZTdHJpbmdSZWYgbG9jYWxlKTsKICAgICBzdGF0aWMg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIFN5c3RlbUZvbnRLaW5kLCBB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBIYXNoTWFwPENhc2NhZGVMaXN0UGFyYW1l
dGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4sIENhc2NhZGVMaXN0
UGFyYW1ldGVyczo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOworICAgIEhhc2hN
YXA8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+PiwgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9zeXN0ZW1Gb250Q2FjaGU7CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NlcmlmRmFtaWxpZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zYW5zU2VyaWZlcmlmRmFtaWxpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHAKaW5kZXggYTFiOTUxNDFmZTExYjlhMDkwMjg1ZGJkY2JhMzE2OGU2ZGI5MmNhMi4uZmQ3
MWZhMDc5MmRiMjY0Yjg2MjA0YjlkZmRmZTJhN2VkNjA5ZjQxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcApAQCAtMTk1LDYgKzE5NSw5IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3Qg
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkgeworICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNj
cmlwdGlvbktleTsKKyAgICBib29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKKwogICAgIEZhbGxi
YWNrRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwogCiAgICAgRmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udENhY2hl
OjpQcmVmZXJDb2xvcmVkRm9udCBwcmVmZXJDb2xvcmVkRm9udCkKQEAgLTIyMCwxNyArMjIzLDEw
IEBAIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSB7CiAKICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRpb25LZXkuaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKTsgfQogCi0gICAgdW5zaWduZWQgY29tcHV0ZUhhc2goKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goZGVzY3JpcHRpb25LZXku
Y29tcHV0ZUhhc2goKSwgV1RGOjpEZWZhdWx0SGFzaDxib29sPjo6aGFzaChjb2xvcmVkRm9udCkp
OwotICAgIH0KLQotICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKLSAgICBi
b29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKIH07CiAKIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNj
cmlwdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZhbGxiYWNr
Rm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jb21wdXRlSGFzaCgpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkm
IGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuY29sb3Jl
ZEZvbnQpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRmFsbGJhY2tGb250RGVzY3Jp
cHRpb25LZXkmIGEsIGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5MzM1MDAxMzkwZWIzZmJiOTlhNWIuLmU5MDE3
NGJlZjQzMDMxMGEzYjllNWQ0NTgxYmZhMWFkZWVlZTA3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4
dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTE4NSwxMyArMTg1LDEzIEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RGb250ID0gc3RhdGljX2Nh
c3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250
QXR0cmlidXRlTmFtZSkpOwogICAgICAgICAgICAgQVNTRVJUKHJ1bkNURm9udCAmJiBDRkdldFR5
cGVJRChydW5DVEZvbnQpID09IENURm9udEdldFR5cGVJRCgpKTsKICAgICAgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6
Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKLSAgICAgICAgICAgIGlmICghV1RG
OjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghc2FmZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9y
bURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBm
b250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFy
dW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVj
dEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0
LmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCmluZGV4IGJiODNjMzkzZTc5ZTIwYTJiYjZjNzVl
ZDdhMjM5NTk2ZTEwMTAwZDMuLmIwZjljMjc2ZWE1NGI3NmUxZDc3YTI2NTExMDYyMTc1MmJkYjUz
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCkBAIC0xMDgs
NyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFJlZlB0cjxUZXh0Pj4gbV9hdXRvU2l6
ZWROb2RlczsKIH07CiAKLXN0cnVjdCBUZXh0QXV0b1NpemluZ1RyYWl0cyA6IFdURjo6R2VuZXJp
Y0hhc2hUcmFpdHM8VGV4dEF1dG9TaXppbmdLZXk+IHsKK3N0cnVjdCBUZXh0QXV0b1NpemluZ1Ry
YWl0cyA6IEhhc2hUcmFpdHM8VGV4dEF1dG9TaXppbmdLZXk+IHsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoVGV4dEF1dG9TaXppbmdLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xv
dCkgVGV4dEF1dG9TaXppbmdLZXkoVGV4dEF1dG9TaXppbmdLZXk6OkRlbGV0ZWQpOyB9CiAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVGV4dEF1dG9TaXppbmdLZXkmIHZhbHVl
KSB7IHJldHVybiB2YWx1ZS5pc0RlbGV0ZWQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggMGI4ZTYxYzhmNzUzZjRmN2IzZjAyYzY0
MzY3ZDQzNDRmZjkzNGE4OS4uY2YyMmNlY2IzYWYzMTFiMjUzYTQ3YTJkOGI0ZWExNjc0YTU2M2Uw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CkBAIC00NDksMTAgKzQ0OSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmRlc2NlbmRhbnRBZmZlY3Rp
bmdOb25Jbmhlcml0ZWRQcm9wZXJ0aWVzRXF1YWwoY29uc3QgUmVuZGVyU3R5CiAKIHN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgY29tcHV0ZUZvbnRIYXNoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewotICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOwotICAgIGhhc2hlci5hZGQoQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoOjpoYXNoKGZvbnQuZm9udERlc2NyaXB0aW9uKCkuZmlyc3RGYW1pbHkoKSkp
OwotICAgIGhhc2hlci5hZGQoZm9udC5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkp
OwotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOworICAgIHJldHVybiBjb21wdXRlSGFzaChBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZh
bWlseSgpKSwgZm9udC5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkpOwogfQogCiB1
bnNpZ25lZCBSZW5kZXJTdHlsZTo6aGFzaEZvclRleHRBdXRvc2l6aW5nKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJDbGllbnRJZGVudGlmaWVyLmgKaW5kZXggNjQwOWE0MWMzODJhOGU1NzdjOTYwMzY0ZmI2N2U3
ODE0NDljYjFiNi4uOTM4YmI1OTJmNzI2OGM2OWFjMzcxODM3NWE3MmI5Njk2YzcyOTVmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGll
bnRJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJDbGllbnRJZGVudGlmaWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9j
dW1lbnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclR5cGVzLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NywxNiArODgsMTIgQEAgT3B0
aW9uYWw8U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI+IFNlcnZpY2VXb3JrZXJDbGllbnRJ
ZGVudGlmaWVyOjpkZWNvZGUoRGUKICAgICBpZiAoIWNvbnRleHRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzZXJ2ZXJD
b25uZWN0aW9uSWRlbnRpZmllciksIFdURk1vdmUoKmNvbnRleHRJZGVudGlmaWVyKSB9IH07Cisg
ICAgcmV0dXJuIHsgeyAqc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsICpjb250ZXh0SWRlbnRp
ZmllciB9IH07CiB9CiAKIGlubGluZSB1bnNpZ25lZCBTZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRp
Zmllcjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgaGFzaGVzWzJdOwotICAgIGhhc2hl
c1swXSA9IFdURjo6aW50SGFzaChzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKLSAgICBoYXNoZXNbMV0gPSBXVEY6OmludEhhc2goY29udGV4dElkZW50aWZpZXIudG9VSW50
NjQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hlcywgc2l6
ZW9mKGhhc2hlcykpOworICAgIHJldHVybiBjb21wdXRlSGFzaChzZXJ2ZXJDb25uZWN0aW9uSWRl
bnRpZmllciwgY29udGV4dElkZW50aWZpZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtl
ckNvbnRleHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdv
cmtlckNvbnRleHREYXRhLmgKaW5kZXggZGJhNjIzNWUwYjYwNmE4MzEzYzNjNGMzMWQ3ZDJjYmZh
NjE2ZmZlMS4uMTRhYmNhZDY0Yzk5YTFjODcxMzZiYmMwZjZkOWNjNTYxZWYyODEyMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEuaApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiV29ya2VyVHlwZS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9VUkxIYXNo
Lmg+CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXgg
YWZiYzQwZTljMzJiYmE5MTIwZmQ5OGI1MmE0MWZmMDc3Nzg3NGQ5Yy4uYzQzZDg2NTQ1ZmNiYjg2
NWEzYTUxYjRiNTc5MzZmOTIyYjgwOTY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUg
IlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24uaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29w
ZS5oIgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU1dDb250
ZXh0TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU1dD
b250ZXh0TWFuYWdlci5oCmluZGV4IGY1NzBjZTQzZDVjMDhjOTA4ODI5MDIyYTE3MjZkZDJiOGE5
OTBkMDEuLjRkMDhlNzZiYzlkNjA2MzljZTBkOWFmNGM5OWEwN2E5ZTExYmU0ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9jb250ZXh0L1NXQ29udGV4dE1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TV0NvbnRl
eHRNYW5hZ2VyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyVGhy
ZWFkUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2Nv
bnRleHQvU2VydmljZVdvcmtlclRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaAppbmRleCAzZmUyYjQ0
MzVhZjI1YzAyNDljMWVmY2RlOGM4ODFkYWZiOGZhYjAxLi5iZmM4N2YyNDkwNTQ3NjY5ZjliMDQx
ZjhhMjcxZDcyN2NlZDJmZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaApA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIldvcmtlckRlYnVnZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1VSTEhhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0b3Jl
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0
b3JlLmgKaW5kZXggYWY4NmYyNTQzNTcyYTFhMzhiNTFmOTk0MTk4ODE1YTZmNGQ1NjI1ZS4uYmEx
MTMxMTVhNjU0MTJmZGUyZGZkYWI2MTY2ZTVmNmUwODcyMzk2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUu
aApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Nv
bXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVVJMSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9z
ZXJ2ZXIvU1dTZXJ2ZXIuaAppbmRleCBjMTY2ODA1ZDgxZTg0MDZmNWY5M2JhZTVmMGE0NDc0MThi
OGI0MDlhLi40ZmUxNTYxOWNiZDVkNjdmMjNiMDM0NDk1NWI4YmU3MWMyNzFhZGViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5oCkBAIC00
NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL1VSTEhhc2guaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgKaW5k
ZXggM2EzZjdjMDAwY2Y3Yzg3M2M3NGFiOGJiMzdmNzllNTBiOTYyZDJiZC4uYmE1OGY3ODc4YTQz
ODliNDU0NTYyYjcyYjVhNWY1Y2E1NGUyMzc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyVG9Db250ZXh0
Q29ubmVjdGlvbi5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckNv
bnRleHREYXRhLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlcklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJTZXJ2aWNlV29ya2VyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaAppbmRleCBmNGMyYzNiNzU2YTllZjhmMWQw
ZjVkMzYyZjBhZWI5ODYwZWE4OGI2Li4xZDRmZDgxN2IzYzhhYTgyZDExNjMzODM1ZjQzMTZhZmI1
MTQ1YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1NXU2VydmVyV29ya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlcldvcmtlci5oCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2Vy
dmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oCmluZGV4IDAwZTljMjFlODZkNGY5ZTJlOWY3N2IwNGYz
NzZjODRhZThhZjA0MTcuLmVjNzdjMWRiMmViY2I5ZDQ1MDQyYTkzNThiNGU5MTM1NWFhOWVmMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9X
ZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5SWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU1dT
ZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCBlNWM2
MDVjNTFmMzI3MTU2M2E2YjZlZTE5MTBjOTRlZDAxM2YzNDkzLi5jNzVkMTcwNGE3NzJlMjk5OTlk
ZTQzMDlkODU5YWY4MTdhMDU3NDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTU5LDExICs1OSw3IEBAIHN0cnVjdCBHbG9i
YWxGcmFtZUlEIHsKIAogaW5saW5lIHVuc2lnbmVkIEdsb2JhbEZyYW1lSUQ6Omhhc2goKSBjb25z
dAogewotICAgIHVuc2lnbmVkIGhhc2hlc1syXTsKLSAgICBoYXNoZXNbMF0gPSBXVEY6OmludEhh
c2god2ViUGFnZUlELnRvVUludDY0KCkpOwotICAgIGhhc2hlc1sxXSA9IFdURjo6aW50SGFzaChm
cmFtZUlELnRvVUludDY0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsKKyAgICByZXR1cm4gY29tcHV0ZUhhc2god2ViUGFn
ZUlELCBmcmFtZUlEKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHbG9iYWxG
cmFtZUlEJiBhLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBiKQpAQCAtNzMsOCArNjksOCBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEsIGNvbnN0IEdsb2JhbEZy
YW1lSUQmIGIpCiAgICAgcmV0dXJuIGEud2ViUGFnZUlEID09IGIud2ViUGFnZUlEICYmICBhLmZy
YW1lSUQgPT0gYi5mcmFtZUlEOwogfQogCi19OwotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
Cit9Cit9CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0KaW5kZXggYzRiZjJi
NzljMzU0ZDM5M2I2Mzc0Yzc4MzJiODRhZmU3ZjU1ZjVjYS4uMTQ3MDEwOWNlMWY0YjgwOTE0ZTM1
OTkxODE1NTFjZGY3NDUzNDExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJ
L0NvY29hL1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbQpAQCAtNTUsNyArNTUsNyBA
QCAtIChpZClfaW5pdFdpdGhQYWdlUHJveHlJRDooV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlm
aWVyKXBhZ2VQcm94eUlEIGFuZFdlYlBhZwogCiAtIChOU1VJbnRlZ2VyKWhhc2gKIHsKLSAgICBy
ZXR1cm4gV1RGOjpwYWlySW50SGFzaChfcGFnZVByb3h5SUQudG9VSW50NjQoKSwgX3dlYlBhZ2VJ
RC50b1VJbnQ2NCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZUhhc2goX3BhZ2VQcm94eUlELCBfd2Vi
UGFnZUlEKTsKIH0KIAogLSAoQk9PTClpc0VxdWFsOihpZClvYmplY3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5h
Z2VyQ29ubmVjdGlvbi5oCmluZGV4IDc2NjIxODk1MzI4MGFjYTFmZWQwYjBlNjkxMDhkOWJjODc4
OWRkZTguLjA0NTUyZGM3MDBiMTlkZjAwZWNjNTZjYmFhMTQ0NGYyY2U1MGFmMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFnZXJD
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dD
b250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvU1dDb250ZXh0TWFuYWdlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtl
ckNsaWVudERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURh
dGFSZWZlcmVuY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKaW5kZXggZGM3N2Y4Zjg0ZDAzNDM5MDFiOWFlZWE1NTUw
ZmQzNzhkODAzMjg5Ni4uMDQyMDViMzcyZGE0NzliYzlkYjhlNTY3YzdkNjIyZTlmOTI0ZmVkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0
eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJv
cGVydHlMaXN0LmNwcApAQCAtNzUsNyArNzUsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVnZXJBcnJheSYgYSwgY29uc3QgSW50ZWdlckFycmF5JiBiKQogICAgIHJldHVybiBh
Lm1faW50ZWdlcnMgPT0gYi5tX2ludGVnZXJzICYmICBhLm1fc2l6ZSA9PSBiLm1fc2l6ZTsKIH0K
IAotc3RydWN0IEludGVnZXJBcnJheUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRz
PEludGVnZXJBcnJheT4geworc3RydWN0IEludGVnZXJBcnJheUhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPEludGVnZXJBcnJheT4gewogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShJbnRlZ2VyQXJyYXkmIHNsb3QpIHsgc2xvdC5tYXJrRGVsZXRlZCgpOyB9CiAgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgSW50ZWdlckFycmF5JiBhcnJheSkgeyByZXR1cm4g
YXJyYXkuaXNEZWxldGVkVmFsdWUoKTsgfQogfTsK
</data>
<flag name="commit-queue"
          id="445085"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425227</attachid>
            <date>2021-04-05 17:31:48 -0700</date>
            <delta_ts>2021-04-05 19:08:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210405173147.patch</filename>
            <type>text/plain</type>
            <size>94845</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjY3ODdjN2ViNTQ2NzY2NjM4OGZiYWVjZGJhYzc4YTNlODU1YjQxLi5jZjNkZmQ5M2JjYTMzNTA3
Y2ZhNTExOGM4MGE1NWE0NDA1YjJhNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDIgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFJlZHVjZSBieXRlY29kZSBpbnN0
cnVjdGlvbiBjb3VudCBlbWl0dGVkIGZvciBgY2xhc3MgZXh0ZW5kc2AKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDFkZGY1NTI4
OGI3ZDdmZDk3NDM0Y2NiMjlkOWIxMDgxODc4YmYzMC4uN2I4OGM1OTgwNDI5YzMyZGRlOWIyOTcx
MWY4MDYzZTQ3MGRjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1v
dmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaEZ1bmN0aW9u
cy5oOiBFeHBvcnQgaW50SGFzaCBhbmQgcGFpckludEhhc2ggdG8gdGhlIGdsb2JhbCBuYW1lc3Bh
Y2UKKyAgICAgICAgc28gdGhleSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgV1RG
IHByZWZpeC4gVGhpcyBmb2xsb3dzIHRoZSB1c3VhbAorICAgICAgICBXVEYgZGVzaWduIHBhdHRl
cm4gZ2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lk
ZSBXVEYuCisKKyAgICAgICAgKiB3dGYvSGFzaGVyLmg6IERlbGV0ZWQgSW50ZWdlckhhc2hlci4K
KyAgICAgICAgKFdURjo6YWRkKTogQWRkZWQgb3ZlcmxvYWRzIGZvciBTdHJpbmcsIEF0b21TdHJp
bmcsIGFuZCBVUkwuCisKKyAgICAgICAgKiB3dGYvT2JqZWN0SWRlbnRpZmllci5oOgorICAgICAg
ICAoV1RGOjphZGQpOiBBZGRlZCBhIEhhc2hlciBvdmVybG9hZCBmb3IgYW55IE9iamVjdElkZW50
aWZpZXIuCisKKyAgICAgICAgKiB3dGYvUmV0YWluUHRyLmg6IEV4cG9ydCBzYWZlQ0ZFcXVhbCBh
bmQgc2FmZUNGSGFzaCB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQorICAgICAgICBzbyB0aGV5IGNh
biBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBXVEYgcHJlZml4LiBUaGlzIGZvbGxvd3Mg
dGhlIHVzdWFsCisgICAgICAgIFdURiBkZXNpZ24gcGF0dGVybiBnaXZlbiB0aGF0IHRoZXNlIGZ1
bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIFdURi4KKworICAgICAgICAqIHd0
Zi9WZWN0b3JIYXNoLmg6IFJlbW92ZWQgdGhlIFZlY3Rvckhhc2ggdGVtcGxhdGUsIGluc3RlYWQg
anVzdCBzcGVjaWFsaXppbmcKKyAgICAgICAgRGVmYXVsdEhhc2guIFVzZSBjb21wdXRlSGFzaCB0
byBoYXNoIHRoZSBjb250ZW50cyBvZiB0aGUgdmVjdG9yIGluc3RlYWQgb2YKKyAgICAgICAgaGFz
aGluZyB0aGUgaGFzaGVzIG9mIHRoZSBpdGVtcyBpbiB0aGUgdmVjdG9yLiBUaGlzIGlzIGJldHRl
ciBpbiBnZW5lcmFsIGFuZAorICAgICAgICBiZXR0ZXIgZm9yIHRoZSBvbmUgY2FzZSB3aGVyZSB3
ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMsIGZvciBhIFZlY3RvcjxpbnQ+LgorICAgICAgICBX
ZSB3YW50IHRvIGhhc2ggYWxsIHRoZSBpbnRlZ2VycyByYXRoZXIgdGhhbiBoYXNoaW5nIGhhc2hl
cyBvZiBhbGwgdGhlIGludGVnZXJzLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0aGlzIG1lYW5z
IHRoZSBlbGVtZW50cyBvZiB0aGUgVmVjdG9yIG5lZWQgdG8gYmUgaGFzaGFibGUgdXNpbmcKKyAg
ICAgICAgdGhlIEhhc2hlciBtYWNoaW5lcnkuIFRoZSBvbGQgcmVxdWlyZW1lbnQgd2FzIHRoZSB0
aGUgZWxlbWVudHMgaGFkIGEgRGVmYXVsdEhhc2guCisKIDIwMjEtMDQtMDIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFByZWZlclBhZ2VS
ZW5kZXJpbmdVcGRhdGVzTmVhcjYwRlBTRW5hYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzA5ZmRjYzBkZWVkYmI0NDFlOGI3MWEyZTliYjQ5OTliY2IwZjQ2Ni4uZWRlMzkwMzI4NDhjZGNk
ZTcwN2M1MDE3MjA1Yjc5MGM3MWFiN2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAor
MjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBt
aXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRyaWdnZXJIYXNoOjpoYXNoKTogVXNlIGNvbXB1dGVI
YXNoIHRvCisgICAgICAgIGhhc2ggYWxsIHRoZSBmaWVsZHMgaW5zdGVhZCBvZiBhIGN1c3RvbS13
cml0dGVuIGFsZ29yaXRobS4gVGhlIGN1c3RvbQorICAgICAgICBhbGdvcml0aG0gaGFkIHNvbWUg
bWFnaWMgbnVtYmVycywgcmVwZWF0ZWRseSBoYXNoZWQgaGFzaGVzLCBhbmQgY29tYmluZWQKKyAg
ICAgICAgaGFzaGVzIHVzaW5nIGV4Y2x1c2l2ZSBvci4gVGhlIG5ldyBvbmUgaXMgYWxtb3N0IGNl
cnRhaW5seSBiZXR0dGVyLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OkNoYXJhY3RlclNldDo6
aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCB0byBoYXNoIHRoZSBib29sZWFu
IGFuZCB0aGUgY2hhcmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICB1c2luZyBpbnRIYXNoIGFu
ZCBwYWlySW50SGFzaC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOiBNb3ZlZCB0aGUgaGFzaGluZyBoZXJlIGZyb20g
dGhlIGhlYWRlci4gRml4ZWQgdGhlCisgICAgICAgIG1pc3Rha2Ugd2hlcmUgdGhpcyB3YXMgdXNp
bmcgJiBpbnN0ZWFkIG9mIHwgYW5kIHNvIG5vbmUgb2YgdGhlIGJvb2xlYW5zCisgICAgICAgIHdl
cmUgaGF2aW5nIGFueSBlZmZlY3Qgb24gdGhlIGhhc2ggdmFsdWUuCisKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaDogVXNlIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRCBzbworICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHNheSBwdWJsaWM6IGV4cGxpY2l0bHku
IEFsc28gbW92ZWQgYWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBtZW1iZXJzIHRvIHRoZSBib3R0
b20gb2YgdGhlIHN0cnVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIHN0eWxlCisgICAg
ICAgIGZvciBzdHJ1Y3R1cmVzIGFzIG9wcG9zZWQgdG8gY2xhc3Nlcy4gU2luY2UgdGhlIGRhdGEg
bWVtYmVycyBhcmUgdGhlCisgICAgICAgIHByaW1hcnkgaW50ZXJmYWNlLCB0aGV5IGFyZSBmaXJz
dCwgYW5kIGFsbCBmdW5jdGlvbiBtZW1iZXJzIGFyZSBzZWNvbmRhcnkKKyAgICAgICAgYW5kIHNv
IHRoZXkgY29tZSBhZnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHRIYXNo
OjpoYXNoKTogVXNlIGNvbnZlcnRIYXNoIGluc3RlYWQgb2YKKyAgICAgICAgYSBjdXN0b20gd3Jp
dHRlbiBoYXNoIGZ1bmN0aW9uLiBUaGUgY3VzdG9tIHdyaXR0ZW4gZnVuY3Rpb24gd2FzIGNvbWJp
bmluZworICAgICAgICBoYWhlcyB1c2luZyBleGNsdXNpdmUgb3IsIG5vdCBhIGJlc3QgcHJhY3Rp
Y2UsIGFuZCBhbHNvIGhhZCBhIG1pc3Rha2UKKyAgICAgICAgd2hlcmUgaXQgdXNlZCAmIGluc3Rl
YWQgb2YgfCBhbmQgc28gdGhlICJiaXRzIiBsb2NhbCB2YXJpYWJsZSB3YXMgYWx3YXlzIDAuCisK
KyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDogVXNlIEhhc2hUcmFpdHMgaW5zdGVh
ZCBvZiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaDogUmVtb3ZlZCB1bm5lZWRlcyBpbmNsdWRlcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOiBDaGFuZ2VkIENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IGludG8gYQorICAgICAgICBzaW1wbGUgc3RydWN0IHdpdGggbm8gYWRkaXRpb25hbCBm
dW5jdGlvbiBtZW1iZXJzIG9yIHN0YXRpYyBkYXRhIG1lbWJlcnMuCisgICAgICAgIENoYW5nZWQg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHRvIHVzZSBjb21wdXRlSGFzaCB0byBjYWxjdWxh
dGUgdGhlCisgICAgICAgIGhhc2gsIGluc3RlYWQgb2YgSW50ZWdlckhhc2hlci4gUHJvYmFibHkg
YmV0dGVyIHRvIGhhc2ggdGhlIHBvaW50ZXIgb2YKKyAgICAgICAgdGhlIEF0b21TdHJpbmcgcmF0
aGVyIHRoYW4gaGFzaGluZyB0aGUgaGFzaCwgYnV0IGVpdGhlciB3YXksIHdlIHNob3VsZAorICAg
ICAgICBoYXZlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uIGZvciBBdG9tU3RyaW5nIGhhc2hpbmcg
aW4gdGhlIEhhc2hlciBjbGFzcy4KKyAgICAgICAgQWRkZWQgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoVHJhaXRzIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzLiBVc2UgdGhlIHZhbHVlIFVfU0VOVElORUwgZm9yIHRoZSBVQ2hhcjMyIGNoYXJhY3RlciwK
KyAgICAgICAgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIC0xIHVzZWQgYmVmb3JlLCBidXQgc2xp
Z2h0bHkgY2xlYXJlciB3aHkgaXQncyBPSy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3Rl
bUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6IFVzZSBIYXNoTWFwOjplbnN1cmUKKyAg
ICAgICAgaW5zdGVhZCBvZiBIYXNoTWFwOjphZGQgdG8gbWFrZSB0aGUgbG9naWMgc2ltcGxlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDogVXNlIGJvb2wgaW5zdGVhZCBv
ZiB1aW50OF90IGFzIHRoZSBiYXNlIHR5cGUKKyAgICAgICAgZm9yIHRoZSBOby9ZZXMgZW51bWVy
YXRpb24gSXNGb3JQbGF0Zm9ybUZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOiBSZW1vdmVkIHVubmVlZGVkICJ1c2luZyBuYW1lc3BhY2UgV1RGIiwKKyAg
ICAgICAgd2hpY2ggaXMgbm90IG91ciBiZXN0IHByYWN0aWNlLCBlc3BlY2lhbGx5IGdpdmVuIHVu
aWZpZWQgYnVpbGRzLgorICAgICAgICBDaGFuZ2VkIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBp
bnRvIGEgc2ltcGxlIHN0cnVjdCwgcmVtb3ZpbmcgYWxsIHRoZQorICAgICAgICBoYXNoLXJlbGF0
ZWQgbWVtYmVyIGZ1bmN0aW9ucy4gQWxzbyB1c2VkIHN0cnVjdC1zdHlsZSBuYW1pbmcgZm9yIHRo
ZQorICAgICAgICBtZW1iZXJzIHdpdGhvdXQgYW4gIm1fIiBwcmVmaXguIFVzZWQgdGhlIHR5cGUg
Rm9udEZhbWlseU5hbWUgZm9yIHRoZQorICAgICAgICBmYW1pbHkgbmFtZSwgd2hpY2ggbWVhbnMg
d2Ugd2lsbCB1c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbidzIHN5c3RlbQorICAgICAgICBmb3Ig
aGFzaGluZyBhbmQgY29tcGFyaW5nIGZhbWlseSBuYW1lcyBmb3IgZXF1YWxpdHkgd2l0aG91dCBo
YXZpbmcgdG8KKyAgICAgICAgcmVtZW1iZXIgZG8gdG8gc28gZXhwbGljaXRseS4gQ2hhbmdlZCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHRvCisgICAgICAgIHVzZSBjb21wdXRlSGFzaC4g
VGhlIG9sZCB2ZXJzaW9uIGhhZCB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgdG8KKyAgICAg
ICAgaGFuZGxlIE9wdGlvbmFsIGFuZCB3YXMgdW5uZWNlc3NhcmlseSBoYXNoaW5nIGhhc2hlcy4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6IFJl
bmFtZWQgdG8gcmVtb3ZlICJnZXQiCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4g
QWxzbyB1c2Ugc2hvcnRlciBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKyAgICAgICAgbmFt
ZXMgdGhhdCBhcmUgc2luZ2xlIHdvcmRzLCBhbmQgdXBkYXRlZCBzaW5jZSBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkKKyAgICAgICAgaXMgbm93IGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6IFVzZSBzaG9y
dGVyIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IFRvIGNvbXBhcmUgdHdv
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgb2JqZWN0cywKKyAgICAgICAgdXNlIGEgc2ltcGxlciBjb25z
dHJ1Y3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCBWZWN0b3IgYWxyZWFkeQorICAg
ICAgICBoYXMgYW4gPT0gb3BlcmF0b3IgYW5kIHdlIGFyZSB1c2luZyBGb250RmFtaWx5TmFtZSBm
b3IgdGhlIGVsZW1lbnRzCisgICAgICAgIG9mIHRoZSB2ZWN0b3IsIHdoaWNoIGhhcyBhIGNvcnJl
Y3QgPT0gb3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aDo6aGFzaCk6IFVzZSBjb21wdXRlSGFzaCBzaW5jZQorICAgICAgICB0aGUgRm9udEZhbWlseU5h
bWUgaGFzaGluZyBpcyBub3cgY29ycmVjdCwgYW5kIHdlIGNhbiByZWx5IG9uIHRoZQorICAgICAg
ICB3YXkgSGFzaGVyIGtub3dzIGhvdyB0byBpdGVyYXRlIGEgY29sbGVjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSBpcyBub3cgYSBzaW1wbGUgc3RydWN0
LiBBbHNvIHVzZSBjb25zdGV4cHIgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmludmFsaWRhdGUpOiBVc2UgY29weVRvVmVjdG9yT2Y8PiB0byBzaW1wbGlmeSB0aGUKKyAgICAg
ICAgY29kZSB0aGF0IGNhbGxzIGZvbnRDYWNoZUludmFsaWRhdGVkIG9uIGFsbCB0aGUgZm9udCBz
ZWxlY3RvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogVXNl
ICJ1c2luZyIgaW5zdGVhZCBvZiAidHlwZWRlZiIuCisgICAgICAgIFJlbW92ZSBGb250RGVzY3Jp
cHRpb25LZXk6OmNvbXB1dGVIYXNoLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTogQW4gb3Zlcmxv
YWQgb2YgYWRkIGZvciBIYXNoZXIgdG8gaW5jbHVkZSBhCisgICAgICAgIEZvbnREZXNjcmlwdGlv
bktleSBpbiBhIGhhc2gsIHdoaWNoIGp1c3QgbGlzdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuCisg
ICAgICAgIFRoZSBvbGQgdmVyc2lvbiBkaWQgYSBoYXNoIG9mIGhhc2hlcywgYnV0IHRoYXQncyBu
b3QgbmVlZGVkIGFueSBtb3JlLgorICAgICAgICBVcGRhdGVkIEZvbnREZXNjcmlwdGlvbktleUhh
c2ggdG8gdXNlIHRoZSBIYXNoZXIgdmVyc2lvbiBvZiBDb21wdXRlSGFzaC4KKyAgICAgICAgQWRk
ZWQgRm9udEZhbWlseU5hbWUuIENoYW5nZSBGb250Q2FzY2FkZUNhY2hlS2V5IHRvIHVzZSBhIHZl
Y3RvciBvZgorICAgICAgICBGb250RmFtaWx5TmFtZSBpbnN0ZWFkIG9mIEF0b21TdHJpbmcuIElu
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSwgdXNlCisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRCBpbnN0ZWFkIG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECisgICAgICAgIGFu
ZCBhbHNvIGdvdCByaWQgb2YgdGhlIHVubmVlZWRlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFs
dWUpOgorICAgICAgICBVc2UgdGhlIGRlbGV0ZWQgdmFsdWUgb2YgRm9udERlc2NyaXB0aW9uS2V5
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM6OmlzRGVs
ZXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAgIFJlbmFtZWQgZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YSB0byBqdXN0IGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQg
b2YKKyAgICAgICAgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRTZWxlY3Rpb25SYW5nZTo6dW5pcXVlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YWRkKTogQWRkIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRv
IHRoZSBoYXNoCisgICAgICAgIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBjb21iaW5pbmcgdGhlbS4g
Rm9yIG5vdywgdGhpcyBtYWtlcyB0aGUgd2F5CisgICAgICAgIHRoZXkgYXJlIGhhc2hlZCBhIGJp
dCBpbmVmZmljaWVudCwgYnV0IHRoYXQgY2FuIGJlIHJlLXRpZ2h0ZW5lZCB1cCBieQorICAgICAg
ICBpbXByb3ZpbmcgdGhlIGFsZ29yaXRobSBvZiBIYXNoZXIgaWYgd2UgbGlrZS4gU2hvdWxkIGJl
IGZpbmUgZm9yIG91cgorICAgICAgICBuZWVkcyBlaXRoZXIgd2F5LgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oOiBBZGRlZCBvdmVy
bG9hZHMgb2YgdGhlCisgICAgICAgIGFkZChIYXNoZXImKSBmdW5jdGlvbiBmb3Igc3RkOjphcnJh
eTxjaGFyLCA0PiBhbmQgRm9udFRhZ2dlZFNldHRpbmc8VD4uCisgICAgICAgIEdvdCByaWQgb2Yg
bWFueSB1c2VzIG9mIHBhc3MgYnkgcmVmZXJlbmNlIGluc3RlYWQgb2YgdmFsdWUgZm9yIEZvbnRU
YWcsCisgICAgICAgIHNpbmNlIGl0IGZpdHMgaW50byBhIDMyLWJpdCByZWdpc3RlciBhbmQgYnRo
IG1vcmUgc291cmNlIGNvZGUgYW5kIGxlc3MKKyAgICAgICAgZWZmaWNpZW50IHRvIHBhc3MgYnkg
dmFsdWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6IFJlbW92
ZWQgInVzaW5nIFdURjo6cGFpckludEhhc2giIHNpbmNlCisgICAgICAgIHRoYXQncyBub3cgZG9u
ZSBpbiB0aGUgV1RGIGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQKKyAgICAgICAgInVzaW5nIFdU
Rjo6R2VuZXJpY0hhc2hUcmFpdHMiLCB3aGljaCB3YXMgdW5oZWxwZnVsLiBUaGUgR2VuZXJpY0hh
c2hUcmFpdHMKKyAgICAgICAgdGVtcGxhdGUgaXMgb25seSByZWFsbHkgbmVlZGVkIHdoZW4gc3Bl
Y2lhbGl6aW5nIEhhc2hUcmFpdHMsIHdoaWNoCisgICAgICAgIGFscmVhZHkgaGFzIHRvIGJlIGRv
bmUgd2l0aGluIHRoZSBXVEYgbmFtZXNwYWNlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlCisgICAg
ICAgIHNob3VsZCBqdXN0IHVzZSBIYXNoVHJhaXRzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg6IFVzZSBIYXNoVHJhaXRz
CisgICAgICAgIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQu
Y3BwOgorICAgICAgICBNb3ZlIHRoZSBkYXRhIG1lbWJlcnMgdG8gdGhlIHRvcCBvZiB0aGUgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkgc3RydWN0LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNvbXB1dGVIYXNoIGZ1bmN0aW9uIGFuZCBXVEYgcHJlZml4IGZyb20gc2FmZUNGRXF1YWwuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOiBD
YWxsIHRoZSBIYXNoZXIgdmVyc2lvbgorICAgICAgICBvZiBjb21wdXRlSGFzaCBkaXJlY3RseSB0
byBoYXNoIHRoZSB0d28gaXRlbXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2NhZGVMaXN0UGFyYW1l
dGVyczo6aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCBpbnN0ZWFkIG9mIElu
dGVnZXJIYXNoZXIuIEFsc28gcmVuYW1lZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICBzdHJ1
Y3QgZnJvbSBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gg
dG8KKyAgICAgICAgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIFJlbW92ZWQgbm93LXVubmVlZGVkIFdURiBwcmVm
aXhlcyBmcm9tIGNhbGxzIHRvIHNhZmVDRkVxdWFsLgorCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFz
aFRyYWl0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlRm9udEhhc2gpOiBVc2UgY29tcHV0ZUhhc2ggaW5zdGVh
ZCBvZiBJbnRlZ2VySGFzaGVyLgorICAgICAgICBTdGlsbCBub3QgZ3JlYXQgdGhhdCB3ZSBoYXNo
IGEgaGFzaCBoZXJlLCBidXQgd2UgY2FuIGltcHJvdmUgdGhhdCBsYXRlci4KKworICAgICAgICAq
IHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZSk6IFJlbW92
ZWQgdW5uZWVkZWQKKyAgICAgICAgV1RGTW92ZSBvbiBPYmplY3RJZGVudGlmaWVyLCB3aGljaCBh
cmUganVzdCBpbnRlZ2Vycywgc28gbW92ZSB2cy4gY29weQorICAgICAgICBpcyBub3QgYW4gaW1w
b3J0YW50IGRpc3RpbmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVu
dElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBVc2UgY29tcHV0ZUhhc2gKKyAgICAgICAgaW5zdGVh
ZCBvZiBjb21iaW5pbmcgaW50SGFzaCB3aXRoIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeS4gVGhp
cyBmaXhlcworICAgICAgICB0d28gbWlzdGFrZXM6IG9uZSBpcyB0aGF0IHRoZXJlIGlzIG5vIG5l
ZWQgdG8gaGFzaCBhIGhhc2guIFRoZSBzZWNvbmQgaXMKKyAgICAgICAgdGhhdCBpbnRIYXNoIHRh
a2VzIGEgMzItYml0IGludGVnZXIgYXMgaXRzIHBhcmFtZXRlciwgc28gaGlnaCBiaXRzCisgICAg
ICAgIG9mIG9iamVjdCBpZGVudGlmaWVycyB3ZXJlIGRpc2NhcmRlZCB1bm5lY2Vzc2FyaWx5Lgor
CiAyMDIxLTA0LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFBlbmRpbmdJbWFnZUJpdG1hcCBnZXRzIGNyZWF0ZWQgb24gYSBzdG9wcGVkIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjVkNjc1MTdmZjIwYzc1Yzg3MGU2MmUwMTg5YWEy
YjlkOWU0YjU4MS4uYTA5YjJlYTk3ZjZmOWQ3OWI3MTZhYjAzMzIzYmRhOTNkNWFkNGYxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hl
ciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNo
IGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29tYmluaW5nIGlu
dEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMKKyAgICAgICAg
dHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggYSBoYXNo
LiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMyLWJpdCBpbnRl
Z2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBvYmplY3QgaWRl
bnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAgICAqIFNoYXJl
ZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW06CisgICAgICAgICgtW1dLQnJv
d3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgcGFp
ckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0YWtlOiBwYWlySW50SGFzaCB0YWtl
cyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMKKyAgICAgICAgb2Ygb2JqZWN0IGlk
ZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJpbHkuCisKIDIwMjEtMDQtMDIgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVBdIFBvd2VyIHJl
Z3Jlc3Npb246IGF1ZGlvIGhhcmR3YXJlIGlzIGNvbmZpZ3VyZWQgZm9yIDEyOCBmcmFtZSBwcmVm
ZXJyZWQgYnVmZmVyIHNpemUgZHVyaW5nIFZpZGVvQXVkaW8gcGxheWJhY2sKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA2MGM0Mzg5MjBmMzQ5OTYxMzgzYjYxNjRhZmYyYmU3YjYxNzhl
YjU4Li5mMTBiODY5NmRiNWQ4ZjlhN2EwYThjNTI2YzkyZjc3MzZjODgwODFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDQtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBIYXNoZXIgbW9yZSwgcmVtb3Zl
IEludGVnZXJIYXNoZXIsIGZpeCBoYXNoaW5nLXJlbGF0ZWQgbWlzdGFrZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9CaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHMuCisKIDIwMjEtMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVc2UgTUFDSF9QT1JUX1ZBTElEKCkgd2hlbiB3YW50aW5nIHRvIGNoZWNrIGlmIGEg
bWFjaCBwb3J0IGlzIHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAppbmRleCBkMTQ3NTQxODMyNDcyNTU0ODc1OTlhZTliNDYyMDViNmQ1ZDdk
ZTI4Li5hODRiZGExNmVmYjdjYjdjMzI1YWM2YzIwN2IwOTA3M2MxODIzMDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgIENoZWNrcG9pbnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gaW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGlj
IEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9m
ZnNldCAtIDEpOyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCmluZGV4IDFiYWU3ZmRiOGNlMmQ4NWEyZGE2NGM3ODky
MTdlMGUxZWM0MWE1MjIuLjY1OGUyY2ZjNWVjZTgyMzQ5NzZiNjM0ZGU4ZTM3ZjIwZDZmMGZjODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaApAQCAtMTU0
LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CiAgICAgc3Rk
OjphcnJheTxBYnN0cmFjdEhlYXAsIDE2PiBtX3NtYWxsSW5kaWNlczsKICAgICAKLSAgICBzdHJ1
Y3QgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPHB0
cmRpZmZfdD4geworICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8cHRyZGlmZl90PiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xvdCA9IDE7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBhZTU3OGEzMjFiOGI3NTIzY2Q1ZjRiMjUzNDI4MDg3OWVlNWVmMDFmLi5mZTkwMDc1MDVl
OGJiNDEyYjYzNmE5YzNiYzVjN2U2Yjk3MTE0YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC01OTAsNyArNTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZVNldCYgbGl2ZSA9IG1fbGl2ZUluVG9Ob2RlLmZpbmQobm9kZSktPnZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBoaWdoUGFyZW50SW5kZXggPSBub2RlLT5pbmRleCgpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICB1aW50NjRfdCBoYXNoID0gV1RGOjppbnRIYXNoKGhpZ2hQYXJl
bnRJbmRleCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2luY2UgaW50SGFzaCByZXR1cm5zIGEg
MzItYml0IHVuc2lnbmVkIGludGVnZXIsIGl0J3Mgbm90IGNsZWFyIHdoeSBpdCdzIGhlbHBmdWwg
dG8gc3RvcmUgaXQgaW4gYSB1aW50NjRfdC4KKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBp
bnRIYXNoKGhpZ2hQYXJlbnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoaGFzaCA+PSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSArIDEpICogT3B0aW9uczo6dmFsaWRhdGVBYnN0cmFjdEludGVycHJl
dGVyU3RhdGVQcm9iYWJpbGl0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCmluZGV4IDUzN2VlNTY1MjBlZDU4NDMwMWY0ODIwNDk2MmNmMjc4NmJkYjM0ZmQuLjA1NGUz
MWVkNmJhNGEyODllOGVjYzVlNmQ2NzE4YWVlNjc2MTA1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDE2LDcgKzQxNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGludCoganVtcFRhcmdldDsKICAgICB9OwogCi0gICAgc3Ry
dWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2Rl
ZEpTVmFsdWU+IHsKKyAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IHRydWU7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oIGIvU291cmNlL1dURi93
dGYvSGFzaEZ1bmN0aW9ucy5oCmluZGV4IDVmOTBmNGVhNzYxMTgxYmZlNGE0NTA3N2IxMmQxODUx
ZTdmODljNDkuLmZmZDUyMmNlMjkwOGQ3ZmVlNzJhYmIwNDYxNGFhZjQ0MTA1YjZiNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoRnVuY3Rpb25zLmgKQEAgLTI3NSwzICsyNzUsNSBAQCBuYW1lc3BhY2UgV1RGIHsKIHVz
aW5nIFdURjo6RGVmYXVsdEhhc2g7CiB1c2luZyBXVEY6OkludEhhc2g7CiB1c2luZyBXVEY6OlB0
ckhhc2g7Cit1c2luZyBXVEY6OmludEhhc2g7Cit1c2luZyBXVEY6OnBhaXJJbnRIYXNoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAppbmRleCA1MmViMjM0MjExZDM2OWM4ZTNlMDlhYzc1YmQ4YzQ0ZGEwNjM5NTVlLi4yODcyNTY4
ZTkzNjc5NzE3YzMxNGQwZTNjYTE2Yjc3MjljZDA0NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDMxICsyMCwxNCBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBEZXByZWNhdGVkLiBV
c2UgSGFzaGVyIGluc3RlYWQuCi1jbGFzcyBJbnRlZ2VySGFzaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2b2lkIGFkZCh1aW50MzJfdCBpbnRlZ2VyKQot
ICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hl
cjsKLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJfdCBjb21wdXRlSGFz
aChjb25zdCBUeXBlcyYuLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gT3Ro
ZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+LCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfdW5zaWduZWQ8VW5zaWdu
ZWRJbnRlZ2VyPjo6dmFsdWUgJiYgc2l6ZW9mKFVuc2lnbmVkSW50ZWdlcikgPD0gc2l6ZW9mKHVp
bnQzMl90KSwgdm9pZD4gYWRkKEhhc2hlciYsIFVuc2lnbmVkSW50ZWdlcik7CkBAIC0xMTIsNiAr
OTUsMjcgQEAgaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBmbG9hdCBudW1iZXIpCiAg
ICAgYWRkKGhhc2hlciwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihudW1iZXIpKTsKIH0KIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBib29sIHJlbWFpbmRlciA9IHN0cmluZy5sZW5ndGgoKSAmIDE7CisgICAgdW5zaWduZWQgcm91
bmRlZExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSAtIHJlbWFpbmRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm91bmRlZExlbmd0aDsgaSArPSAyKQorICAgICAgICBhZGQoaGFzaGVy
LCAoc3RyaW5nW2ldIDw8IDE2KSB8IHN0cmluZ1tpICsgMV0pOworICAgIGlmIChyZW1haW5kZXIp
CisgICAgICAgIGFkZChoYXNoZXIsIHN0cmluZ1tyb3VuZGVkTGVuZ3RoXSk7Cit9CisKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQorewor
ICAgIC8vIENob3NlIHRvIGhhc2ggdGhlIHBvaW50ZXIgaGVyZS4gQXNzdW1pbmcgdGhpcyBpcyBi
ZXR0ZXIgdGhhbiBoYXNoaW5nIHRoZSBjaGFyYWN0ZXJzIG9yIGhhc2hpbmcgdGhlIGFscmVhZHkt
Y29tcHV0ZWQgaGFzaCBvZiB0aGUgY2hhcmFjdGVycy4KKyAgICBhZGQoaGFzaGVyLCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihzdHJpbmcuaW1wbCgpKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYWRkKGhhc2hlciwgdXJsLnN0
cmluZygpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRW51bWVyYXRpb24+IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPEVudW1lcmF0aW9uPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXIm
IGhhc2hlciwgRW51bWVyYXRpb24gdmFsdWUpCiB7CiAgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nh
c3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFbnVtZXJhdGlvbj4+KHZhbHVlKSk7CkBAIC0xODYs
NCArMTkwLDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpCiAKIHVzaW5nIFdURjo6Y29tcHV0ZUhh
c2g7CiB1c2luZyBXVEY6Okhhc2hlcjsKLXVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09iamVjdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XVEYvd3Rm
L09iamVjdElkZW50aWZpZXIuaAppbmRleCBmOWM2N2I2M2I1ZTI2YTQwYjRhYWI1OGMwMTRkNWY0
NzBhNjA4NTUzLi44ODg1YWEzMWIyOTU2MWQ5MDBmNzUyZWIzZmViMzc4ZjVkNDQzOTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvT2JqZWN0SWRlbnRpZmllci5oCkBAIC0xMzEsNiArMTMxLDExIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBPYmplY3RJZGVudGlmaWVyPFQ+IG1ha2VPYmplY3RJZGVudGlmaWVy
KHVpbnQ2NF90IGlkCiAgICAgcmV0dXJuIE9iamVjdElkZW50aWZpZXI8VD4geyBpZGVudGlmaWVy
IH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgT2JqZWN0SWRlbnRpZmllcjxUPiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIs
IGlkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPYmplY3RJZGVudGlmaWVySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
T2JqZWN0SWRlbnRpZmllcjxUPiYgaWRlbnRpZmllcikgeyByZXR1cm4gaW50SGFzaChpZGVudGlm
aWVyLm1faWRlbnRpZmllcik7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPYmplY3RJ
ZGVudGlmaWVyPFQ+JiBhLCBjb25zdCBPYmplY3RJZGVudGlmaWVyPFQ+JiBiKSB7IHJldHVybiBh
ID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oIGIvU291cmNl
L1dURi93dGYvUmV0YWluUHRyLmgKaW5kZXggYzdmYjc0NDEwNTU2MWZkNjE1ODg4OGUzY2YwYWVm
OWRiMzQ2NWEyZi4uNGM1OTg0ZWZkNjAxN2EyYzY4ZTUyNjJmOGNlY2I1ZGEyNTgzZTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
UmV0YWluUHRyLmgKQEAgLTQwMiw2ICs0MDIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBk
eW5hbWljX29iamNfY2FzdChpZCBvYmplY3QpCiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5n
IFdURjo6YWRvcHRDRjsKIHVzaW5nIFdURjo6cmV0YWluUHRyOwordXNpbmcgV1RGOjpzYWZlQ0ZF
cXVhbDsKK3VzaW5nIFdURjo6c2FmZUNGSGFzaDsKIAogI2lmZGVmIF9fT0JKQ19fCiB1c2luZyBX
VEY6OmFkb3B0TlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKaW5kZXggYzM3Mzk0ODhkZTg1YzM4ZWVjZDY3MWZl
NzAzMjE3ZjM5M2U5YzIwYi4uOTM4MjFhMjdlNWY4YjUwNDIxYWI3NmFkNzdjOWM5YjI0NWNjYmUw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1ZlY3Rvckhhc2guaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwyOCArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKICNpbmNsdWRl
ICJIYXNoZXIuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXN0cnVjdCBWZWN0b3JIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB2YWx1ZSA6IHZlY3RvcikKLSAgICAgICAgICAgIGhhc2hlci5hZGQoRGVmYXVsdEhhc2g8VD46
Omhhc2godmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA9PSBiOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gc3RydWN0IERlZmF1bHRIYXNoPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHZlY3Rvcik7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotc3RydWN0IERlZmF1bHRIYXNo
PFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9ySGFzaDxULCBpbmxpbmVDYXBhY2l0
eT4geyB9OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAppbmRleCBjNTBiZjE3Yjk2YmQ3MzAwODJlM2MwMWQ2
OTdiNjJkNjQ1OWNkYzI0Li5hYzU1OTJlYmM2MjI1OTRlNDU4MWEzNjBlODIzYzFiN2JmNmM2YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25SdWxlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRF
eHRlbnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsMjMgKzg5LDEyIEBAIHN0cnVjdCBUcmlnZ2VyIHsKIHN0
cnVjdCBUcmlnZ2VySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVHJpZ2dl
ciYgdHJpZ2dlcikKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSA/IDEwNjE5ODYzIDogNDA5NjAwMDE7Ci0gICAgICAgIGlmICgh
dHJpZ2dlci51cmxGaWx0ZXIuaXNOdWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49IFN0cmluZ0hh
c2g6Omhhc2godHJpZ2dlci51cmxGaWx0ZXIpOwotICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50
SGFzaChoYXNoLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPjo6aGFzaCh0cmlnZ2VyLmZsYWdz
KSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiA6IHRyaWdnZXIuY29u
ZGl0aW9ucykKLSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChjb25kaXRpb24p
OwotCi0gICAgICAgIGhhc2ggXj0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpZ2dlci5j
b25kaXRpb25UeXBlKTsKLSAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaCh0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgdHJpZ2dlci51cmxGaWx0
ZXIsIHRyaWdnZXIuZmxhZ3MsIHRyaWdnZXIuY29uZGl0aW9ucywgdHJpZ2dlci5jb25kaXRpb25U
eXBlKTsKICAgICB9Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUcmlnZ2VyJiBhLCBj
b25zdCBUcmlnZ2VyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDBk
NTE4MzNmNWMwNjg1YmI4ODhlM2FhMjE3N2MzODdmNDM3NmE1NDQuLjRlMjVjNzJlZGVhYWY1NzU5
ZWRiNjBmMTJmNmVmMDZhNGI0ZWMxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9UZXJtLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTE2OCwxMSArMTY5LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNo
KFdURjo6cGFpckludEhhc2goV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVyc1swXSksIFdURjo6aW50
SGFzaChtX2NoYXJhY3RlcnNbMV0pKSwgbV9pbnZlcnRlZCk7CisgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZUhhc2gobV9pbnZlcnRlZCwgbV9jaGFyYWN0ZXJzKTsKICAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2ludmVydGVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWlu
dDY0X3QgbV9jaGFyYWN0ZXJzWzJdIHsgMCwgMCB9OworICAgICAgICBzdGQ6OmFycmF5PHVpbnQ2
NF90LCAyPiBtX2NoYXJhY3RlcnMgeyAwLCAwIH07CiAgICAgfTsKIAogICAgIHN0cnVjdCBHcm91
cCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmNwcApp
bmRleCAxM2Y5ZjQ5NjY5YmI2OTQ3YTA0NzRiNGJjNzQxNWYzY2Y0MmY0MTY2Li4wOTgxNjI2ZWZh
M2NhN2RjN2Y4YTI5ZWQ4ZmQwN2E5NWQ0YmM1ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAKQEAgLTEzNyw2ICsxMzcsNDMgQEAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGIpCiAgICAgOwogfQogCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1bnNpZ25lZCBiaXRzID0gY29udGV4dC5pc0hU
TUxEb2N1bWVudCAgICAgICAgICAgICAgICAgIDw8IDAKKyAgICAgICAgfCBjb250ZXh0Lmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gICAgICAgICAgICAgICAgIDw8IDEKKyAgICAgICAgfCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIKKyAgICAg
ICAgfCBjb250ZXh0LnVzZVN5c3RlbUFwcGVhcmFuY2UgICAgICAgICAgICAgICAgICAgICAgIDw8
IDMKKyAgICAgICAgfCBjb250ZXh0LmFzcGVjdFJhdGlvRW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDQKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yQ29udHJhc3RFbmFibGVkICAgICAg
ICAgICAgICAgICAgICAgIDw8IDUKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yRmlsdGVyRW5hYmxl
ZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDYKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yTWl4
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDcKKyAgICAgICAgfCBjb250ZXh0
LmNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQgICAgICAgICAgICAgICAgIDw8IDgKKyAgICAgICAg
fCBjb250ZXh0LmNvbnRhaW5tZW50RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDkK
KyAgICAgICAgfCBjb250ZXh0LmNzc0NvbG9yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDEwCisgICAgICAgIHwgY29udGV4dC5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgICAg
ICAgICAgICAgICAgICA8PCAxMQorICAgICAgICB8IGNvbnRleHQuaW5kaXZpZHVhbFRyYW5zZm9y
bVByb3BlcnRpZXNFbmFibGVkICAgICAgPDwgMTIKKyNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQorICAgICAgICB8IGNvbnRleHQubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQgICAgICAgPDwgMTMKKyNlbmRpZgorICAgICAgICB8IGNvbnRleHQub3ZlcnNjcm9s
bEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgMTQKKyAgICAgICAgfCBjb250ZXh0
LnJlbGF0aXZlQ29sb3JTeW50YXhFbmFibGVkICAgICAgICAgICAgICAgIDw8IDE1CisgICAgICAg
IHwgY29udGV4dC5zY3JvbGxCZWhhdmlvckVuYWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAx
NgorICAgICAgICB8IGNvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkICAgICAgICAg
ICAgICAgPDwgMTcKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgICAgICB8IGNvbnRl
eHQudGV4dEF1dG9zaXppbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgPDwgMTgKKyNlbmRp
ZgorI2lmIEVOQUJMRShDU1NfVFJBTlNGT1JNX1NUWUxFX09QVElNSVpFRF8zRCkKKyAgICAgICAg
fCBjb250ZXh0LnRyYW5zZm9ybVN0eWxlT3B0aW1pemVkM0RFbmFibGVkICAgICAgICAgIDw8IDE5
CisjZW5kaWYKKyAgICAgICAgfCBjb250ZXh0LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IgIDw8IDIwCisgICAgICAgIHwgY29udGV4dC5mb2N1c1Zpc2libGVFbmFibGVk
ICAgICAgICAgICAgICAgICAgICAgICA8PCAyMQorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCisgICAgICAgIHwgY29udGV4dC5hdHRhY2htZW50RW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAyMgorI2VuZGlmCisgICAgICAgIHwgY29udGV4dC5tb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyMzsgLy8gVGhpcyBpcyBtdWx0aXBsZSBiaXRz
LCBzbyBrZWVwIGl0IGxhc3QuCisgICAgYWRkKGhhc2hlciwgY29udGV4dC5iYXNlVVJMLCBjb250
ZXh0LmNoYXJzZXQsIGJpdHMpOworfQorCiBib29sIENTU1BhcnNlckNvbnRleHQ6OmlzUHJvcGVy
dHlSdW50aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
Q29udGV4dC5oCmluZGV4IDhlMGI4N2Y3YWE3NjBlNmVmMjc2YmQ2MzJlZmZiMGFmYWQ5MWU2ZTYu
LjQ5NTYwZDgxYzg1OTBmOTBmZGJhNTRlYTUyMTU1MmNjZGRjNGQwZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCkBAIC0zMCwyMCArMzAsMTYgQEAK
ICNpbmNsdWRlICJTdHlsZVJ1bGVUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUg
PHd0Zi9VUkxIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29u
dGV4dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBVUkwgYmFz
ZVVSTDsKICAgICBTdHJpbmcgY2hhcnNldDsKQEAgLTU3LDggKzUzLDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKICAgICBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotCiAgICAgLy8gU2V0dGluZ3MuCiAgICAgYm9vbCBhc3BlY3RS
YXRpb0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgY29sb3JDb250cmFzdEVuYWJsZWQgeyBm
YWxzZSB9OwpAQCAtOTAsNzAgKzg0LDI5IEBAIHB1YmxpYzoKICAgICBib29sIGF0dGFjaG1lbnRF
bmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCi0gICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdDsKKyAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUsIGNv
bnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJD
b250ZXh0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOworICAgIGJvb2wgaXNQcm9wZXJ0eVJ1
bnRpbWVEaXNhYmxlZChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBVUkwgY29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkgY29uc3Q7CiB9OwogCiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKK3ZvaWQgYWRkKEhhc2hlciYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKKwogV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwogCiBzdHJ1Y3QgQ1NTUGFyc2Vy
Q29udGV4dEhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gdXNl
IFdURjo6SGFzaGVyLgotCi0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSAwOwotICAgICAgICBpZiAo
IWtleS5iYXNlVVJMLmlzTnVsbCgpKQotICAgICAgICAgICAgaGFzaCBePSBXVEY6OlVSTEhhc2g6
Omhhc2goa2V5LmJhc2VVUkwpOwotICAgICAgICBpZiAoIWtleS5jaGFyc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChrZXkuY2hhcnNldCk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBiaXRzID0ga2V5LmlzSFRNTERvY3VtZW50ICAgICAgICAg
ICAgICAgICAgPDwgMAotICAgICAgICAgICAgJiBrZXkuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biAgICAgICAgICAgICAgICAgPDwgMQotICAgICAgICAgICAgJiBrZXkuaXNDb250ZW50T3BhcXVl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMgotICAgICAgICAgICAgJiBrZXkudXNlU3lz
dGVtQXBwZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgICAgPDwgMwotICAgICAgICAgICAgJiBr
ZXkuYXNwZWN0UmF0aW9FbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNAotICAgICAg
ICAgICAgJiBrZXkuY29sb3JDb250cmFzdEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgPDwg
NQotICAgICAgICAgICAgJiBrZXkuY29sb3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgNgotICAgICAgICAgICAgJiBrZXkuY29sb3JNaXhFbmFibGVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgNwotICAgICAgICAgICAgJiBrZXkuY29uc3RhbnRQcm9wZXJ0aWVz
RW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgOAotICAgICAgICAgICAgJiBrZXkuY29udGFpbm1l
bnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgOQotICAgICAgICAgICAgJiBrZXku
Y3NzQ29sb3I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMTAKLSAgICAgICAg
ICAgICYga2V5LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8IDEx
Ci0gICAgICAgICAgICAmIGtleS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQg
ICAgICA8PCAxMgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgICAg
ICAgICAmIGtleS5sZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8PCAx
MwotI2VuZGlmCi0gICAgICAgICAgICAmIGtleS5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAg
ICAgICAgICAgICAgICA8PCAxNAotICAgICAgICAgICAgJiBrZXkucmVsYXRpdmVDb2xvclN5bnRh
eEVuYWJsZWQgICAgICAgICAgICAgICAgPDwgMTUKLSAgICAgICAgICAgICYga2V5LnNjcm9sbEJl
aGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE2Ci0gICAgICAgICAgICAmIGtl
eS5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQgICAgICAgICAgICAgICA8PCAxNwotI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgICAgICAmIGtleS50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAxOAotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19U
UkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVEXzNEKQotICAgICAgICAgICAgJiBrZXkudHJhbnNmb3Jt
U3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQgICAgICAgICAgPDwgMTkKLSNlbmRpZgotICAgICAgICAg
ICAgJiBrZXkudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwgMjAK
LSAgICAgICAgICAgICYga2V5LmZvY3VzVmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDIxCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICAgICAgICAgICYg
a2V5LmF0dGFjaG1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCi0jZW5k
aWYKLSAgICAgICAgICAgICYga2V5Lm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDIzOyAvLyBLZWVwIHRoaXMgbGFzdC4KLSAgICAgICAgaGFzaCBePSBXVEY6Omlu
dEhhc2goYml0cyk7Ci0gICAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29t
cHV0ZUhhc2goY29udGV4dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJldHVybiBhID09IGI7
IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsK
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQ+IHsKICAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4
dCYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90LmJhc2VVUkwpIFVSTChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBX
ZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuYmFzZVVSTC5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGM3YTcwOWEwYTI0MTI0NDNkNDNmMTdmNmZhNWYzMTJkOTliMGEzY2MuLjI3
MmEyYjBlN2Q1MzcyNWE2ZDU0MzljOTI1NzVhYWZkMDliZWIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgRm9ybUVs
ZW1lbnRLZXlIYXNoOjpoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkpCiAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoRm9ybUVsZW1lbnRLZXkpPigma2V5KTsK
IH0KIAotc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9ybUVsZW1lbnRLZXk+IHsKK3N0cnVjdCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHMg
OiBIYXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3Qp
IEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IDgzZWRkOWU5
MjU0OWZhYWVmMTI1MDVlMTUzZWNmNzJmZWI5MzFmYTguLmNlYjg0ZTk2MDIwZDg4OGVmNTZhNjJk
NGJhYWU0MzY1ZjAzOTExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAogI2lmIEVOQUJMRShUSFVOREVSKQogI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBl
cy5oIgpAQCAtMjA1LDggKzIwMyw2IEBAIHByaXZhdGU6CiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNl
c3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKLXB1YmxpYzoKLQogcHJvdGVjdGVk
OgogICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKICAgICBj
b25zdCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0YW5jZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCAwODcwMmQ0Yzc5MGNiOTYzYWJhMTRhNzI5NzE4MjVmNGMwNDJmZDc5Li5i
MTFhODc2OWU4NjBiOTNiMDlkNzMyNDFlNWJlYmQ1ODA4YjYyYjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTM1LDYzICs1MzUsMzIgQEAgdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEEKIH0KICNlbmRpZgogCi1jbGFzcyBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleSB7Ci1wdWJsaWM6Ci0gICAgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGUsIFVDaGFyMzIgY2hhcmFjdGVyLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9u
dCkKLSAgICAgICAgOiBsb2NhbGUobG9jYWxlKQotICAgICAgICAsIGNoYXJhY3RlcihjaGFyYWN0
ZXIpCi0gICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9ybUZvbnQgPT0gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcykKLSAgICB7Ci0gICAgfQotCi0gICAgQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IGNoYXJh
Y3RlcigtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlciA9PSAtMTsgfQotCi0gICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhl
ci5jaGFyYWN0ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZv
bnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRy
dWU7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eUhhc2g7Ci0KK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CiAgICAgQXRvbVN0cmlu
ZyBsb2NhbGU7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CiAgICAgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCB7IGZhbHNlIH07CiB9OwogCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleSYga2V5KQotICAgIHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAg
ICAgIGhhc2hlci5hZGQoa2V5LmNoYXJhY3Rlcik7Ci0gICAgICAgIGhhc2hlci5hZGQoa2V5Lmlz
Rm9yUGxhdGZvcm1Gb250KTsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkubG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsK
LSAgICB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikKK3sKKyAgICByZXR1cm4g
YS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5p
c0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250OworfQogCitzdHJ1Y3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXku
bG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCitz
dHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAoTm90
TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7
IH0gfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsg
fQorfTsKKwogLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhN
RTogU2hvdWxkbid0IHRoZXNlIGJlIFdlYWtQdHJzPwotdHlwZWRlZiBIYXNoTWFwPENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBXVEY6
OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4+IENoYXJhY3Rl
ckZhbGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxs
YmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKKy8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2lu
ZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgordXNp
bmcgQ2hhcmFjdGVyRmFsbGJhY2tNYXAgPSBIYXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2hUcmFpdHM+OwordXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8Y29u
c3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPjsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNjA4LDEyICs1NzcsOCBAQCBSZWZQ
dHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hh
cmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24o
KS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxh
dGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAx
KTsKICAgICB9CiAKLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwot
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKFdURk1vdmUoa2V5KSwgbnVsbHB0cik7Ci0KLSAgICBGb250KiYgZmFsbGJhY2tGb250
ID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJh
Y2tGb250KSB7CisgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0g
SXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vIH07CisgICAgcmV0dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsmXSB7CiAgICAgICAgIFVDaGFyIGNvZGVV
bml0c1syXTsKICAgICAgICAgdW5zaWduZWQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBpZiAo
VV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNjI0LDEzICs1ODksMTEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rlciwg
Y29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQotCi0gICAg
ICAgIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENh
Y2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5n
ZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxsYmFja0ZvbnQ7CisgICAgICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0Zv
clBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0
cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAg
ICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBmb250OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBGb250OjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKaW5kZXggYzdkYTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4u
NjUzYjMzOGI3YzM0MjU2MjcyMjQ5NjExZTI3MDFhYzVkMjYzZTk2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtNjQsNyArNjQsNyBAQCBzdHJ1Y3QgR2x5cGhE
YXRhOwogCiBlbnVtIEZvbnRWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNt
YWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlh
bnQgfTsKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0
Y2ggfTsKLWVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9
OworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAKICNp
ZiBVU0UoQ09SRV9URVhUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0
YWJsZVRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAppbmRleCBlZGYyZmUwNDczYWYzYTg2MDYxNTMxNzQzODMyMWJkOWNhOWUwMjg2Li5mZGQ1
NTQ4ZjBmNTRjMWFjYTdmYWNhZWViODgwNmU4MTI0MGI5YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDg4ICs0Nyw2OCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLXN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV9mYW1pbHkoZmFtaWx5KQotICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCi0gICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHQpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRp
b25LZXkodCkKLSAgICB7IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb25LZXkg
IT0gb3RoZXIubV9mb250RGVzY3JpcHRpb25LZXkKLSAgICAgICAgICAgIHx8IG1fZm9udEZhY2VG
ZWF0dXJlcyAhPSBvdGhlci5tX2ZvbnRGYWNlRmVhdHVyZXMKLSAgICAgICAgICAgIHx8IG1fZm9u
dEZhY2VDYXBhYmlsaXRpZXMgIT0gb3RoZXIubV9mb250RmFjZUNhcGFiaWxpdGllcykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fZmFtaWx5LmltcGwoKSA9PSBvdGhl
ci5tX2ZhbWlseS5pbXBsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KG1fZmFtaWx5LmlzTnVsbCgpIHx8IG90aGVyLm1fZmFtaWx5LmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkpOwotICAgIH0KK0Zv
bnRGYW1pbHlOYW1lOjpGb250RmFtaWx5TmFtZSgpID0gZGVmYXVsdDsKIAotICAgIEZvbnREZXNj
cmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5
OwotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwotICAgIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKLX07
CitpbmxpbmUgRm9udEZhbWlseU5hbWU6OkZvbnRGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCisgICAgOiBtX25hbWUgeyBuYW1lIH0KK3sKK30KIAotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZm9udEtleSkKLSAgICB7Ci0gICAgICAgIEludGVnZXJIYXNo
ZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZh
bWlseU5hbWVIYXNoKGZvbnRLZXkubV9mYW1pbHkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChmb250
S2V5Lm1fZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgICAgICBoYXNoZXIu
YWRkKGZvbnRLZXkubV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7Ci0gICAgICAgIGlmIChhdXRv
IHdlaWdodCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAg
ICAgICBoYXNoZXIuYWRkKHdlaWdodC0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmb250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRp
ZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aC0+dW5pcXVlVmFsdWUoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gc2xvcGUgPSBmb250S2V5Lm1f
Zm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZChzbG9w
ZS0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgcmV0dXJuIGhh
c2hlci5oYXNoKCk7Ci0gICAgfQoraW5saW5lIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRGYW1pbHlO
YW1lOjpzdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7
Ci0gICAgfQoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250RmFtaWx5
TmFtZSYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGhhc2ggdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIG5hbWUgaW5zdGVhZCBvZiBoYXNoaW5nIGEgaGFzaC4KKyAgICBh
ZGQoaGFzaGVyLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChuYW1lLnN0
cmluZygpKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseU5h
bWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAoYS5zdHJpbmco
KS5pc051bGwoKSB8fCBiLnN0cmluZygpLmlzTnVsbCgpKSA/IGEuc3RyaW5nKCkgPT0gYi5zdHJp
bmcoKSA6IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoYS5zdHJp
bmcoKSwgYi5zdHJpbmcoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dEZhbWlseU5hbWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CiAKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeworICAgIEZv
bnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKKyAgICBGb250RmFtaWx5TmFtZSBmYW1p
bHk7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBmZWF0dXJlczsKKyAgICBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKK307CisKK3N0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGIpCit7CisgICAgcmV0dXJuIGEuZGVzY3JpcHRpb25LZXkgPT0g
Yi5kZXNjcmlwdGlvbktleSAmJiBhLmZhbWlseSA9PSBiLmZhbWlseSAmJiBhLmZlYXR1cmVzID09
IGIuZmVhdHVyZXMgJiYgYS5jYXBhYmlsaXRpZXMgPT0gYi5jYXBhYmlsaXRpZXM7Cit9CisKK3N0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuZmFtaWx5LCBrZXkuZmVhdHVyZXMsIGtleS5j
YXBhYmlsaXRpZXMudGllZCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAogc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBzbG90KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5o
YXNoKCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0s
IHsgfSwgeyB9LCB7IH0gfTsKICAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgcmV0dXJuIGtleS5kZXNj
cmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogICAgIH0KK307CiAKK3N0cnVj
dCBGb250RGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIApAQCAtMTQxLDcgKzEy
MSw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRy
YWl0czxGb250UGxhdGZvcm1EYXRhPiB7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQogICAgIHsKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgdmFsdWUpCiAgICAgewpAQCAtMTc3LDE0ICsxNTcs
MTQgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGdsb2Jh
bEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjp+Rm9udENhY2hlKCkgPSBkZWZhdWx0OwotCiBG
b250Q2FjaGU6OkZvbnRDYWNoZSgpCiAgICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogICAgICwgbV9mb250RGF0YUNhY2hl
cyhtYWtlVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVzPigpKQogewogfQogCitGb250Q2FjaGU6On5G
b250Q2FjaGUoKSA9IGRlZmF1bHQ7CisKIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBp
ZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGZhbWlseU5hbWUpKQpAQCAtMjI1LDggKzIwNSw4IEBAIE9wdGlvbmFsPEFTQ0lJTGl0
ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKLSAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y2FjaGVkRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwpAQCAtMjQ2LDI0ICsy
MjYsMjMgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgcGxhdGZvcm1Jbml0KCk7
CiAgICAgfSk7CiAKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZhbWlseU5hbWUs
IGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMp
OworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgeyBmb250RGVzY3JpcHRpb24sIHsg
ZmFtaWx5TmFtZSB9LCBmZWF0dXJlcyA/ICpmZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3Mg
eyB9LCBjYXBhYmlsaXRpZXMgfTsKIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNh
Y2hlcy0+cGxhdGZvcm1EYXRhLmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250
RmFjZUNhcGFiaWxpdGllcyk7Ci0KKyAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRm
b3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZlYXR1cmVzLCBjYXBhYmlsaXRp
ZXMpOwogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7
Ci0gICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUg
YSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKLSAgICAg
ICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRj
LiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KKyAgICAg
ICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiBXZSBoYXZlIGEgc21hbGwg
c2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCisgICAgICAgICAgICAv
LyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gVHJ5IGxv
b2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KICAgICAgICAgICAgIGlm
IChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUg
PSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5h
bWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKLSAgICAg
ICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0
aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKLSAgICAgICAgICAgICAgICAvLyBiZWVuIGlu
dmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKCkuCisgICAgICAgICAgICAgICAgYXV0byogYWx0ZXJuYXRlRGF0YSA9IGNhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZmVhdHVyZXMsIGNh
cGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUga2V5IGlu
IHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQor
ICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxs
IHRvIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9IG1fZm9u
dERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5lbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKQotICAgICAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KCpmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFsdGVy
bmF0ZURhdGEpCisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9u
dFBsYXRmb3JtRGF0YT4oKmFsdGVybmF0ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjgyLDEyICsyNjEsMTIgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
Ojpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKLSAgICBpZiAo
YXV0byogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24sIGZhbWlseSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkpCisgICAgaWYgKGF1dG8qIHBsYXRmb3JtRGF0YSA9IGNhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGZlYXR1cmVzLCBjYXBh
YmlsaXRpZXMsIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkpCiAgICAgICAgIHJldHVybiBmb250Rm9y
UGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0z
NzUsMzAgKzM1NCwxNSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVu
c2lnbmVkIHB1cmdlQ291bnQpCiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNh
Y2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewotICAgIGlmIChhLmZv
bnREZXNjcmlwdGlvbktleSAhPSBiLmZvbnREZXNjcmlwdGlvbktleSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwg
YS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHNpemUgPSBhLmZhbWlsaWVzLnNpemUoKTsKLSAg
ICBpZiAoc2l6ZSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGEuZmFtaWxpZXNbaV0s
IGIuZmFtaWxpZXNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mb250RGVzY3JpcHRpb25LZXkgPT0gYi5mb250RGVz
Y3JpcHRpb25LZXkKKyAgICAgICAgJiYgYS5mb250U2VsZWN0b3JJZCA9PSBiLmZvbnRTZWxlY3Rv
cklkCisgICAgICAgICYmIGEuZm9udFNlbGVjdG9yVmVyc2lvbiA9PSBiLmZvbnRTZWxlY3RvclZl
cnNpb24KKyAgICAgICAgJiYgYS5mYW1pbGllcyA9PSBiLmZhbWlsaWVzOwogfQogCiB1bnNpZ25l
ZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBrZXkpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBoYXNoIHRoZSBrZXkgYW5kIHRoZSBmYW1p
bHkgbmFtZSBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIG1ha2luZyBhIGhhc2ggb3V0IG9mIG90aGVy
IGhhc2hlcy4KLSAgICBIYXNoZXIgaGFzaGVyOwotICAgIGFkZChoYXNoZXIsIGtleS5mb250RGVz
Y3JpcHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRTZWxl
Y3RvcklkKTsKLSAgICBhZGQoaGFzaGVyLCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBrZXkuZmFtaWxpZXMpCi0gICAgICAgIGFkZChoYXNoZXIsIGZh
bWlseS5pc051bGwoKSA/IDAgOiBXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lSGFzaChmYW1pbHkpKTsKLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICByZXR1
cm4gY29tcHV0ZUhhc2goa2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5LmZvbnRTZWxlY3Rvcklk
LCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiwga2V5LmZhbWlsaWVzKTsKIH0KIAogdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKQEAgLTQ1NiwxMSArNDIwLDExIEBA
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpKTsKKyAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihGb250Q2FzY2FkZUNhY2hlRW50cnkgeyBXVEZNb3ZlKGtleSksIEZvbnRDYXNj
YWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpIH0pOwogICAgIFJlZjxGb250
Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHBy
dW5lQ291bnRlcjsKICAgICAvLyBSZWZlcmVuY2VkIEZvbnRDYXNjYWRlRm9udHMgd291bGQgZXhp
c3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgogICAgIGlmICgh
KCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCkBAIC01MTUsMTUg
KzQ3OSwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAjZW5kaWYKICAgICBpbnZh
bGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogCi0gICAgbV9nZW5lcmF0aW9uKys7Ci0KLSAgICBW
ZWN0b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVudHM7Ci0gICAgY2xpZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fY2xpZW50cy5zaXplKCkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fY2xp
ZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgY2xpZW50cy51bmNoZWNrZWRBcHBlbmQoKippdCk7CisgICAgKyttX2dlbmVyYXRpb247
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xpZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2xpZW50c1tpXS0+Zm9udENhY2hlSW52YWxpZGF0ZWQoKTsKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFJlZlB0cjxGb250U2VsZWN0b3I+PihtX2NsaWVudHMp
KQorICAgICAgICBjbGllbnQtPmZvbnRDYWNoZUludmFsaWRhdGVkKCk7CiAKICAgICBwdXJnZUlu
YWN0aXZlRm9udERhdGEoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggNzUwMWMyZGYwZGYyM2YwNDhjNzAwYWFjMDBiZjdjMmFiMjc5ODgz
Ny4uNGViYTZmY2YyZjdjODA0OGZiODNkNjU1NGI4ZmQ2YWY4N2MxYWM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTY0LDE3ICs2NCwx
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250Q2Fz
Y2FkZTsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgRm9udDsKLWVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90OwogCi0jaWYgUExBVEZPUk0oV0lOKQotI2lm
IFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLXR5cGVkZWYgSU1MYW5nRm9udExpbmsyIElNTGFuZ0Zv
bnRMaW5rVHlwZTsKLSNlbHNlCi10eXBlZGVmIElNTGFuZ0ZvbnRMaW5rIElNTGFuZ0ZvbnRMaW5r
VHlwZTsKK2VudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiBib29sOworCisjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdGb250TGlua1R5
cGUgPSBJTUxhbmdGb250TGluazI7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShJTUxBTkdfRk9OVF9MSU5LMikKK3VzaW5nIElNTGFuZ0ZvbnRMaW5rVHlwZSA9IElNTGFuZ0Zv
bnRMaW5rOwogI2VuZGlmCiAKIC8vIFRoaXMga2V5IGNvbnRhaW5zIHRoZSBGb250RGVzY3JpcHRp
b24gZmllbGRzIG90aGVyIHRoYW4gZmFtaWx5IHRoYXQgbWF0dGVyIHdoZW4gZmV0Y2hpbmcgRm9u
dERhdGFzIChwbGF0Zm9ybSBmb250cykuCkBAIC0xMTIsMTcgKzExMyw3IEBAIHN0cnVjdCBGb250
RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7IH0KIAotICAgIGlubGluZSB1bnNpZ25lZCBj
b21wdXRlSGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBIYXNoZXIgaGFzaGVyOwotICAgICAg
ICBhZGQoaGFzaGVyLCBtX3NpemUpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0LnRpZWQoKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fbG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9mbGFncyk7Ci0gICAgICAgIGFkZChoYXNo
ZXIsIG1fZmVhdHVyZVNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fdmFy
aWF0aW9uU2V0dGluZ3MuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0g
ICAgfQorICAgIGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250RGVzY3JpcHRpb25L
ZXkmKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbWFr
ZUZsYWdzS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xNjUsMjMg
KzE1NiwzNiBAQCBwcml2YXRlOgogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlv
blNldHRpbmdzOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBG
b250RGVzY3JpcHRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkubV9zaXplLCBr
ZXkubV9mb250U2VsZWN0aW9uUmVxdWVzdCwga2V5Lm1fZmxhZ3MsIGtleS5tX2xvY2FsZSwga2V5
Lm1fZmVhdHVyZVNldHRpbmdzLCBrZXkubV92YXJpYXRpb25TZXR0aW5ncyk7Cit9CisKIHN0cnVj
dCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBGb250RGVzY3JpcHRpb25LZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBrZXkuY29t
cHV0ZUhhc2goKTsKLSAgICB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udERl
c2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQorLy8g
VGhpcyBjbGFzcyBob2xkcyB0aGUgbmFtZSBvZiBhIGZvbnQgZmFtaWx5LCBhbmQgZGVmaW5lcyBo
YXNoaW5nIGFuZCA9PSBvZiB0aGlzIG5hbWUgdG8KKy8vIHVzZSB0aGUgcnVsZXMgZm9yIGZvbnQg
ZmFtaWx5IG5hbWVzIGluc3RlYWQgb2YgdXNpbmcgc3RyYWlnaHQgc3RyaW5nIGNvbXBhcmlzb24u
CitjbGFzcyBGb250RmFtaWx5TmFtZSB7CitwdWJsaWM6CisgICAgRm9udEZhbWlseU5hbWUoKTsK
KyAgICBGb250RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CisgICAgY29uc3QgQXRvbVN0
cmluZyYgc3RyaW5nKCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0
IEZvbnRGYW1pbHlOYW1lJik7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Citwcml2YXRlOgorICAgIEF0b21TdHJpbmcgbV9uYW1l
OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiwgY29uc3QgRm9u
dEZhbWlseU5hbWUmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFtaWx5TmFtZSYsIGNv
bnN0IEZvbnRGYW1pbHlOYW1lJik7CisKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0
aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0
b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPEZvbnRGYW1pbHlOYW1lLCAz
PiBmYW1pbGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JWZXJzaW9uOwogfTsKQEAgLTE4OSwyNiArMTkzLDIyIEBAIHN0cnVjdCBGb250
Q2FzY2FkZUNhY2hlS2V5IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5JiwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYpOwogCiBzdHJ1Y3QgRm9udENhc2NhZGVD
YWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBG
b250Q2FzY2FkZUNhY2hlRW50cnkoRm9udENhc2NhZGVDYWNoZUtleSYmIGtleSwgUmVmPEZvbnRD
YXNjYWRlRm9udHM+JiYgZm9udHMpCi0gICAgICAgIDoga2V5KFdURk1vdmUoa2V5KSkKLSAgICAg
ICAgLCBmb250cyhXVEZNb3ZlKGZvbnRzKSkKLSAgICB7IH0KKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKICAgICBSZWY8
Rm9udENhc2NhZGVGb250cz4gZm9udHM7CiB9OwogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNj
YWRlQ2FjaGVLZXkmKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNo
ZUtleT4gewotICAgIHN0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5IGVtcHR5VmFs
dWUoKSB7IHJldHVybiB7IH07IH0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBzbG90LmZvbnRTZWxlY3Rv
cklkID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYg
c2xvdCkgeyByZXR1cm4gc2xvdC5mb250U2VsZWN0b3JJZCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7IH0KK3N0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0
cyA6IEhhc2hUcmFpdHM8Rm9udENhc2NhZGVDYWNoZUtleT4geworICAgIHN0YXRpYyBGb250Q2Fz
Y2FkZUNhY2hlS2V5IGVtcHR5VmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBuZXcg
KE5vdE51bGwsICZzbG90KSBGb250Q2FzY2FkZUNhY2hlS2V5IHsgRm9udERlc2NyaXB0aW9uS2V5
IHsgV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUgfSwgeyB9LCB7IH0sIHsgfSB9OyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5
KSB7IHJldHVybiBrZXkuZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KIH07CiAKIHVzaW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRl
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2Fz
Y2FkZUNhY2hlS2V5SGFzaCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwpAQCAtMjI1
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICB+Rm9udENhY2hlKCk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgUmVmUHRyPEZvbnQ+IHN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBJc0ZvclBsYXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CkBAIC0yMzUsNiArMjM1LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEZvbnRBbGxvd2xpc3QoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5r
VHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFs
aXplKCk7CkBAIC0zMDEsMTEgKzMwMiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJik7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFs
bHkgYmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0
YSogY2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogPSBudWxscHRyLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
IGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0gKHVuY2xlYXIgd2hpY2ggZnVuY3Rpb25zIHRoaXMgY29tbWVu
dCBhcHBsaWVzIHRvKS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKTsKICAgICAKICAgICBzdGF0aWMgT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKQEAgLTMzMiw2ICszMzIsNyBAQCBwcml2YXRlOgogCiAgICAg
ZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKICNlbmRpZgorCiAgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiB9OwogCkBAIC0zNDgsNyArMzQ5LDYgQEAgaW5saW5lIHZvaWQgRm9udENh
Y2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAKICNlbmRpZgogCi0KIGlubGlu
ZSBib29sIEZvbnRDYWNoZTo6UHJld2FybUluZm9ybWF0aW9uOjppc0VtcHR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2VlbkZhbWlsaWVzLmlzRW1wdHkoKSAmJiBmb250TmFtZXNSZXF1aXJpbmdT
eXN0ZW1GYWxsYmFjay5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKaW5kZXggYWRhZmYzYzE0NmRjNzIz
NWZmMDU5NmQ0ZmM0NzY3OTc1YjE1ODIxMy4uNjA3NzBjZDY0YzM5MThiMDAwNTFlNzQ1N2JiZWY0
Mzc0ZjJhZWMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdlbmVyaWNGYW1pbGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIFVTY3JpcHRDb2RlIHVzZXMgLTEgYW5kIDAgZm9yIFVTY3JpcHRJbnZhbGlk
Q29kZSBhbmQgVVNjcmlwdENvbW1vbi4KIC8vIFdlIG5lZWQgdG8gdXNlIC0yIGFuZCAtMyBmb3Ig
ZW1wdHkgdmFsdWUgYW5kIGRlbGV0ZWQgdmFsdWUuCi1zdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKK3N0cnVjdCBVU2NyaXB0Q29kZUhh
c2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVy
biAtMjsgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShpbnQmIHNsb3Qp
IHsgc2xvdCA9IC0zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgKaW5kZXggZTYyMzM1MDRkOTMxMDEzNDIx
MjJiN2JjMmM3MDNmZTUyY2Y3NGFhMy4uNjZmOGZkYzE3NWI2YTMxMDk3MTg2ZjJkNGJjNzcwMWY3
NWI0NGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApAQCAtMjkxLDYgKzI5MSwxMSBAQCBjb25zdGV4
cHIgRm9udFNlbGVjdGlvblZhbHVlIHVsdHJhRXhwYW5kZWRTdHJldGNoVmFsdWUoKQogICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUgeyAyMDAgfTsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBGb250U2VsZWN0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIGFk
ZChoYXNoZXIsIHZhbHVlLnJhd1ZhbHVlKCkpOworfQorCiAvLyBbSW5jbHVzaXZlLCBJbmNsdXNp
dmVdCiBzdHJ1Y3QgRm9udFNlbGVjdGlvblJhbmdlIHsKICAgICB1c2luZyBWYWx1ZSA9IEZvbnRT
ZWxlY3Rpb25WYWx1ZTsKQEAgLTMzNCwxNCArMzM5LDYgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
YW5nZSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQgPj0gbWluaW11bSAmJiB0YXJnZXQgPD0gbWF4
aW11bTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBuYW1lIGlzIG5vdCBzbyBncmVhdC4g
TW92ZSB0aGlzIGludG8gdGhlIGFkZCBmdW5jdGlvbiBiZWxvdwotICAgIC8vIG9uY2Ugd2UgbW92
ZSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIGZyb20gSW50ZWdlckhhc2hlciB0byBIYXNo
ZXIsCi0gICAgLy8gYW5kIHRoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGhhdmUgYSBuYW1lLgotICAg
IGNvbnN0ZXhwciB1aW50MzJfdCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbWluaW11bS5yYXdWYWx1ZSgpIDw8IDE2IHwgbWF4aW11bS5yYXdWYWx1ZSgpOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogCkBAIC0zNzcsNyArMzc0LDcgQEAgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblJh
bmdlPiBGb250U2VsZWN0aW9uUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiBpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRTZWxlY3Rpb25SYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgYWRkKGhhc2hlciwgcmFuZ2UudW5pcXVlVmFsdWUoKSk7CisgICAgYWRkKGhh
c2hlciwgcmFuZ2UubWluaW11bSwgcmFuZ2UubWF4aW11bSk7CiB9CiAKIHN0cnVjdCBGb250U2Vs
ZWN0aW9uUmVxdWVzdCB7CkBAIC0zODUsNiArMzgyLDcgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHsKIAogICAgIFZhbHVlIHdlaWdodDsKICAgICBWYWx1ZSB3aWR0aDsKKwogICAgIC8v
IEZJWE1FOiBXZSBhcmUgdXNpbmcgYW4gb3B0aW9uYWwgaGVyZSB0byBiZSBhYmxlIHRvIGRpc3Rp
bmd1aXNoIGJldHdlZW4gYW4gZXhwbGljaXQKICAgICAvLyBvciBpbXBsaWNpdCBzbG9wZSAoZm9y
ICJpdGFsaWMiIGFuZCAib2JsaXF1ZSIpIGFuZCB0aGUgIm5vcm1hbCIgdmFsdWUgd2hpY2ggaGFz
IG5vCiAgICAgLy8gc2xvcGUuIFRoZSAiaXRhbGljIiBhbmQgIm9ibGlxdWUiIHZhbHVlcyBjYW4g
YmUgZGlzdGluZ3Vpc2hlZCBieSBsb29raW5nIGF0IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAKaW5kZXggOGE4
Yzc5N2Y2NDcxMjM5ZjFlN2NmOGE1ZDI3ZTMwNmQ1ODkzM2ViMC4uYmRlZWJlODAwMTQxNDQ4YjU4
Yzc0MmZjZmJiNGE3ZWI5NmQ0NTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuY3BwCkBAIC0yNyw0MiArMjcsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIK
IAotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10ZW1wbGF0ZSA8PgotdW5zaWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgZm9yIChhdXRvJiBm
ZWF0dXJlIDogbV9saXN0KSB7Ci0gICAgICAgIGhhc2hlci5hZGQoRm91ckNoYXJhY3RlclRhZ0hh
c2g6Omhhc2goZmVhdHVyZS50YWcoKSkpOwotICAgICAgICBoYXNoZXIuYWRkKGZlYXR1cmUudmFs
dWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotfQotCi10ZW1wbGF0ZSA8
PgotdW5zaWduZWQgRm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoKCkgY29uc3QKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihmbG9hdCkgPT0gc2l6ZW9mKGludCksICJJbnRlZ2VySGFzaGVy
IG5lZWRzIHRvIGFjY2VwdCBmbG9hdHMgdG9vIik7Ci0gICAgdW5pb24gewotICAgICAgICBmbG9h
dCBmOwotICAgICAgICBpbnQgaTsKLSAgICB9IGZsb2F0VG9JbnQ7Ci0KLSAgICBJbnRlZ2VySGFz
aGVyIGhhc2hlcjsKLSAgICBmb3IgKGF1dG8mIHZhcmlhdGlvbiA6IG1fbGlzdCkgewotICAgICAg
ICBoYXNoZXIuYWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpoYXNoKHZhcmlhdGlvbi50YWcoKSkp
OwotICAgICAgICBmbG9hdFRvSW50LmYgPSB2YXJpYXRpb24udmFsdWUoKTsKLSAgICAgICAgaGFz
aGVyLmFkZChmbG9hdFRvSW50LmkpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRm9udFZh
cmlhdGlvblNldHRpbmdzJiBpdGVtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiYgaXRlbSkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiB2
YXJpYXRpb24gPSBpdGVtLmF0KGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuaAppbmRleCBiOTIwMzRlYTIxNjg5ZmJhNGVm
NTUzY2UyZmE4ZjViYzRhYzFlMzE3Li4xMjhkYWY3ZTYzYmM3M2RhOWZlZDFjYzNhOWU0MmFjZjU2
ODkzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
VGFnZ2VkU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250VGFnZ2VkU2V0dGluZ3MuaApAQCAtMzYsMjAgKzM2LDI2IEBAIGNsYXNzIFRleHRTdHJlYW07
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBzdGQ6OmFycmF5PGNoYXIsIDQ+IEZv
bnRUYWc7Cit1c2luZyBGb250VGFnID0gc3RkOjphcnJheTxjaGFyLCA0PjsKIAotaW5saW5lIEZv
bnRUYWcgZm9udEZlYXR1cmVUYWcoY29uc3QgY2hhciBhcnJbNF0pIHsgcmV0dXJuIHt7IGFyclsw
XSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXSB9fTsgfQoraW5saW5lIEZvbnRUYWcgZm9udEZlYXR1
cmVUYWcoY29uc3QgY2hhciBjaGFyYWN0ZXJzWzRdKSB7IHJldHVybiB7eyBjaGFyYWN0ZXJzWzBd
LCBjaGFyYWN0ZXJzWzFdLCBjaGFyYWN0ZXJzWzJdLCBjaGFyYWN0ZXJzWzNdIH19OyB9CisKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjphcnJheTxjaGFyLCA0PiBhcnJheSkK
K3sKKyAgICB1aW50MzJfdCBpbnRlZ2VyID0gKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFycmF5WzBd
KSA8PCAyNCkgfCAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbMV0pIDw8IDE2KSB8IChzdGF0
aWNfY2FzdDx1aW50OF90PihhcnJheVsyXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50OF90Pihh
cnJheVszXSk7CisgICAgYWRkKGhhc2hlciwgaW50ZWdlcik7Cit9CiAKIHN0cnVjdCBGb3VyQ2hh
cmFjdGVyVGFnSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFRhZyYg
Y2hhcmFjdGVycykgeyByZXR1cm4gKGNoYXJhY3RlcnNbMF0gPDwgMjQpIHwgKGNoYXJhY3RlcnNb
MV0gPDwgMTYpIHwgKGNoYXJhY3RlcnNbMl0gPDwgOCkgfCBjaGFyYWN0ZXJzWzNdOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFRhZyYgYSwgY29uc3QgRm9udFRhZyYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRm9udFRhZyBjaGFyYWN0
ZXJzKSB7IHJldHVybiBjb21wdXRlSGFzaChjaGFyYWN0ZXJzKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKEZvbnRUYWcgYSwgRm9udFRhZyBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9Owog
Ci1zdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJh
aXRzPEZvbnRUYWc+IHsKK3N0cnVjdCBGb3VyQ2hhcmFjdGVyVGFnSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8Rm9udFRhZz4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250VGFnJiBz
bG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIEZvbnRUYWcoe3sgZmYs
IGZmLCBmZiwgZmYgfX0pOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Rm9udFRhZyYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZmLCBmZiwg
ZmYgfX0pOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRm9udFRhZyB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gRm9udFRhZyh7eyBmZiwgZmYsIGZmLCBmZiB9fSk7IH0KIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgZmYgPSBzdGF0aWNfY2FzdDxjaGFyPigw
eEZGKTsKQEAgLTU5LDE0ICs2NSwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEZv
bnRUYWdnZWRTZXR0aW5nIHsKIHB1YmxpYzoKICAgICBGb250VGFnZ2VkU2V0dGluZygpID0gZGVs
ZXRlOwotICAgIEZvbnRUYWdnZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmLCBUIHZhbHVlKTsKLSAg
ICBGb250VGFnZ2VkU2V0dGluZyhGb250VGFnJiYsIFQgdmFsdWUpOworICAgIEZvbnRUYWdnZWRT
ZXR0aW5nKEZvbnRUYWcsIFQgdmFsdWUpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvbnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb250VGFnZ2VkU2V0dGluZzxU
PiYgb3RoZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udFRhZyYgdGFnKCkgY29uc3QgeyByZXR1
cm4gbV90YWc7IH0KKyAgICBGb250VGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAg
ICAgVCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBib29sIGVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiB2YWx1ZSgpOyB9CiAKQEAgLTc5LDE5ICs4NCwxMiBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9u
dFRhZ2dlZFNldHRpbmcoY29uc3QgRm9udFRhZyYgdGFnLCBUIHZhbHVlKQorRm9udFRhZ2dlZFNl
dHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKEZvbnRUYWcgdGFnLCBUIHZhbHVlKQogICAgIDog
bV90YWcodGFnKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9udFRhZ2dlZFNldHRpbmcoRm9udFRhZyYm
IHRhZywgVCB2YWx1ZSkKLSAgICA6IG1fdGFnKFdURk1vdmUodGFnKSkKLSAgICAsIG1fdmFsdWUo
dmFsdWUpCi17Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogYm9vbCBGb250VGFnZ2VkU2V0
dGluZzxUPjo6b3BlcmF0b3I9PShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNv
bnN0CiB7CkBAIC0xNTIsNiArMTUwLDExIEBAIE9wdGlvbmFsPEZvbnRUYWdnZWRTZXR0aW5nPFQ+
PiBGb250VGFnZ2VkU2V0dGluZzxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgfX0s
ICp2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgc2V0dGluZykKK3sKKyAgICBhZGQoaGFz
aGVyLCBzZXR0aW5nLnRhZygpLCBzZXR0aW5nLnZhbHVlKCkpOworfQorCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIGNsYXNzIEZvbnRUYWdnZWRTZXR0aW5ncyB7CiBwdWJsaWM6CkBAIC0yMTEsMTQg
KzIxNCwxMCBAQCBPcHRpb25hbDxGb250VGFnZ2VkU2V0dGluZ3M8VD4+IEZvbnRUYWdnZWRTZXR0
aW5nczxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdHlwZWRlZiBGb250VGFnZ2VkU2V0dGluZzxpbnQ+IEZvbnRGZWF0dXJlOwotdHlwZWRlZiBG
b250VGFnZ2VkU2V0dGluZ3M8aW50PiBGb250RmVhdHVyZVNldHRpbmdzOwotCi10ZW1wbGF0ZSA8
PiB1bnNpZ25lZCBGb250RmVhdHVyZVNldHRpbmdzOjpoYXNoKCkgY29uc3Q7Ci0KLXR5cGVkZWYg
Rm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiBGb250VmFyaWF0aW9uU2V0dGluZ3M7Ci1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJik7Cit1c2luZyBGb250RmVhdHVyZSA9IEZvbnRUYWdnZWRTZXR0aW5nPGludD47
Cit1c2luZyBGb250RmVhdHVyZVNldHRpbmdzID0gRm9udFRhZ2dlZFNldHRpbmdzPGludD47Cit1
c2luZyBGb250VmFyaWF0aW9uU2V0dGluZ3MgPSBGb250VGFnZ2VkU2V0dGluZ3M8ZmxvYXQ+Owog
Ci10ZW1wbGF0ZSA8PiB1bnNpZ25lZCBGb250VmFyaWF0aW9uU2V0dGluZ3M6Omhhc2goKSBjb25z
dDsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZvbnRUYWdnZWRT
ZXR0aW5nczxmbG9hdD4mKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCmluZGV4IGJmOWQwZjg1OTI4MTQ3NjYyMzg0NTRhN2ZjMzMyZTg1NGUz
YzE3N2UuLjhlYjMyNmM0OTY0ZWNhOWUwZjNmYmM3ZTBjZjgyYjhkYTM1ZjM4OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTMyLDggKzMy
LDYgQEAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KIAotdXNpbmcgV1RGOjpwYWlySW50SGFzaDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKaW5kZXggNTNlYjVlY2E2NzQ2YTE5YTgxNmJkY2M4YTExNmM5ZGE5MDhkNWNhYi4uNzBm
NmQwOGY1M2Q3YmM4NTcwNmRhYzQ1YTA3YWIxZjA3ZGMyMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cApAQCAtNDgsMTIgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCi0vLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2luZyBkZWNs
YXJhdGlvbiBzaG91bGQgYmUgaW4gPHd0Zi9IYXNoRnVuY3Rpb25zLmg+LgotdXNpbmcgV1RGOjpw
YWlySW50SGFzaDsKLQotLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24g
c2hvdWxkIGJlIGluIDx3dGYvSGFzaFRyYWl0cy5oPi4KLXVzaW5nIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaAppbmRleCA1YmYwNWQ0ZTE0MGVlNjJiMzMyMWU0ZGJlZjUxZGFjMWQxYjM0ZDk5
Li45ZmFjZWM0ZjAxNDIzZjQwNTQzNjViNGI5YjViMjdlMTcxMjE2NmQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgTW9ub3Rvbmlj
VGltZSBsYXN0QWNjZXNzVGltZTsKICAgICB9OwogCi0gICAgc3RydWN0IFN1YmltYWdlQ2FjaGVF
bnRyeVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8U3ViaW1hZ2VDYWNoZUVudHJ5PiB7
CisgICAgc3RydWN0IFN1YmltYWdlQ2FjaGVFbnRyeVRyYWl0cyA6IEhhc2hUcmFpdHM8U3ViaW1h
Z2VDYWNoZUVudHJ5PiB7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4+IEltYWdlVHJhaXRzOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAppbmRleCAwNzE3MjIxYjEzMDY5MmJmMWY4YWU0ZmY0MDc1ODYwNTZjZjAx
ZmJiLi4yYmUzOWI3OTQzNTE1MWY0ZmE4NmZjMzE0OTE0MThhMTJkMjk0OWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lm
aWNhdGlvbkNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApAQCAtMzcsNiArMzcs
OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRp
b25LZXkgeworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
cjsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OworCiAgICAgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkoKSA9IGRlZmF1bHQ7CiAKICAgICBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbktleShDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTUwLDcgKzUzLDcgQEAgc3RydWN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5nZXQoKSwgb3RoZXIuZm9u
dERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9PSBvdGhlci5mb250RGVz
Y3JpcHRpb25LZXk7CisgICAgICAgIHJldHVybiBzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5n
ZXQoKSwgb3RoZXIuZm9udERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9
PSBvdGhlci5mb250RGVzY3JpcHRpb25LZXk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBvdGhlcikgY29uc3QKQEAgLTU5LDIz
ICs2MiwxNSBAQCBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkgewogICAgIH0KIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQg
Y29tcHV0ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goV1RGOjpzYWZlQ0ZIYXNoKGZvbnREZXNjcmlwdG9yLmdldCgpKSwgZm9udERlc2NyaXB0aW9u
S2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlw
dG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2Ny
aXB0aW9uS2V5OwogfTsKIAogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5SGFzaCB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXkmIGtleSkgeyByZXR1cm4ga2V5LmNvbXB1dGVIYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYga2V5KSB7IHJldHVybiBj
b21wdXRlSGFzaChzYWZlQ0ZIYXNoKGtleS5mb250RGVzY3JpcHRvci5nZXQoKSksIGtleS5mb250
RGVzY3JpcHRpb25LZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udEZhbWls
eVNwZWNpZmljYXRpb25LZXkmIGEsIGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBGb250TWFwID0gSGFzaE1hcDxG
b250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5Pj47Cit1c2luZyBGb250TWFwID0gSGFz
aE1hcDxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+OwogCiBzdGF0aWMgRm9udE1hcCYg
Zm9udE1hcCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRleCAw
YjI3OWE3ZGVmNWNkNDg4MmE4MjVjMzY4M2JlMTM1MmIyMmU2MDdhLi45YWQxZTBjYzQ1MGYwZWFh
ODI5ODE3MzU1OTc4MDBhYzA4MDQ5NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNv
cmVUZXh0LmgKQEAgLTcyLDI3ICs3MiwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVy
OwotICAgICAgICAgICAgQVNTRVJUKCFmb250TmFtZS5pc051bGwoKSk7Ci0gICAgICAgICAgICBo
YXNoZXIuYWRkKGxvY2FsZS5leGlzdGluZ0hhc2goKSk7Ci0gICAgICAgICAgICBoYXNoZXIuYWRk
KGxvY2FsZS5pc051bGwoKSA/IDAgOiBsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICAg
ICAgaGFzaGVyLmFkZCh3ZWlnaHQpOwotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aCk7Ci0g
ICAgICAgICAgICBoYXNoZXIuYWRkKHNpemUpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKTsKLSAgICAgICAgICAg
IGhhc2hlci5hZGQoaXRhbGljKTsKLSAgICAgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGZvbnROYW1lLCBsb2NhbGUsIHdlaWdodCwg
d2lkdGgsIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBpdGFsaWMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RydWN0IENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJI
YXNoPEF0b21TdHJpbmcsIGZsb2F0PiB7Ci0gICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuaGFzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEhhc2ggeworICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FzY2Fk
ZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7IHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsg
fQorICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwogICAgICAgICB9OwogCkBAIC0xMzEsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gY29tcHV0
ZUNhc2NhZGVMaXN0KENURm9udFJlZiwgQ0ZTdHJpbmdSZWYgbG9jYWxlKTsKICAgICBzdGF0aWMg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIFN5c3RlbUZvbnRLaW5kLCBB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBIYXNoTWFwPENhc2NhZGVMaXN0UGFyYW1l
dGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4sIENhc2NhZGVMaXN0
UGFyYW1ldGVyczo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOworICAgIEhhc2hN
YXA8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+PiwgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9zeXN0ZW1Gb250Q2FjaGU7CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NlcmlmRmFtaWxpZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zYW5zU2VyaWZlcmlmRmFtaWxpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHAKaW5kZXggYTFiOTUxNDFmZTExYjlhMDkwMjg1ZGJkY2JhMzE2OGU2ZGI5MmNhMi4uZmQ3
MWZhMDc5MmRiMjY0Yjg2MjA0YjlkZmRmZTJhN2VkNjA5ZjQxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcApAQCAtMTk1LDYgKzE5NSw5IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3Qg
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkgeworICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNj
cmlwdGlvbktleTsKKyAgICBib29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKKwogICAgIEZhbGxi
YWNrRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwogCiAgICAgRmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udENhY2hl
OjpQcmVmZXJDb2xvcmVkRm9udCBwcmVmZXJDb2xvcmVkRm9udCkKQEAgLTIyMCwxNyArMjIzLDEw
IEBAIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSB7CiAKICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRpb25LZXkuaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKTsgfQogCi0gICAgdW5zaWduZWQgY29tcHV0ZUhhc2goKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goZGVzY3JpcHRpb25LZXku
Y29tcHV0ZUhhc2goKSwgV1RGOjpEZWZhdWx0SGFzaDxib29sPjo6aGFzaChjb2xvcmVkRm9udCkp
OwotICAgIH0KLQotICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKLSAgICBi
b29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKIH07CiAKIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNj
cmlwdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZhbGxiYWNr
Rm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jb21wdXRlSGFzaCgpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkm
IGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuY29sb3Jl
ZEZvbnQpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRmFsbGJhY2tGb250RGVzY3Jp
cHRpb25LZXkmIGEsIGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5MzM1MDAxMzkwZWIzZmJiOTlhNWIuLmU5MDE3
NGJlZjQzMDMxMGEzYjllNWQ0NTgxYmZhMWFkZWVlZTA3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4
dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTE4NSwxMyArMTg1LDEzIEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RGb250ID0gc3RhdGljX2Nh
c3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250
QXR0cmlidXRlTmFtZSkpOwogICAgICAgICAgICAgQVNTRVJUKHJ1bkNURm9udCAmJiBDRkdldFR5
cGVJRChydW5DVEZvbnQpID09IENURm9udEdldFR5cGVJRCgpKTsKICAgICAgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6
Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKLSAgICAgICAgICAgIGlmICghV1RG
OjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghc2FmZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9y
bURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBm
b250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFy
dW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVj
dEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0
LmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCmluZGV4IGJiODNjMzkzZTc5ZTIwYTJiYjZjNzVl
ZDdhMjM5NTk2ZTEwMTAwZDMuLmIwZjljMjc2ZWE1NGI3NmUxZDc3YTI2NTExMDYyMTc1MmJkYjUz
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCkBAIC0xMDgs
NyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFJlZlB0cjxUZXh0Pj4gbV9hdXRvU2l6
ZWROb2RlczsKIH07CiAKLXN0cnVjdCBUZXh0QXV0b1NpemluZ1RyYWl0cyA6IFdURjo6R2VuZXJp
Y0hhc2hUcmFpdHM8VGV4dEF1dG9TaXppbmdLZXk+IHsKK3N0cnVjdCBUZXh0QXV0b1NpemluZ1Ry
YWl0cyA6IEhhc2hUcmFpdHM8VGV4dEF1dG9TaXppbmdLZXk+IHsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoVGV4dEF1dG9TaXppbmdLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xv
dCkgVGV4dEF1dG9TaXppbmdLZXkoVGV4dEF1dG9TaXppbmdLZXk6OkRlbGV0ZWQpOyB9CiAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVGV4dEF1dG9TaXppbmdLZXkmIHZhbHVl
KSB7IHJldHVybiB2YWx1ZS5pc0RlbGV0ZWQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggMGI4ZTYxYzhmNzUzZjRmN2IzZjAyYzY0
MzY3ZDQzNDRmZjkzNGE4OS4uY2YyMmNlY2IzYWYzMTFiMjUzYTQ3YTJkOGI0ZWExNjc0YTU2M2Uw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CkBAIC00NDksMTAgKzQ0OSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmRlc2NlbmRhbnRBZmZlY3Rp
bmdOb25Jbmhlcml0ZWRQcm9wZXJ0aWVzRXF1YWwoY29uc3QgUmVuZGVyU3R5CiAKIHN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgY29tcHV0ZUZvbnRIYXNoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewotICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOwotICAgIGhhc2hlci5hZGQoQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoOjpoYXNoKGZvbnQuZm9udERlc2NyaXB0aW9uKCkuZmlyc3RGYW1pbHkoKSkp
OwotICAgIGhhc2hlci5hZGQoZm9udC5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkp
OwotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOworICAgIHJldHVybiBjb21wdXRlSGFzaChBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZh
bWlseSgpKSwgZm9udC5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkpOwogfQogCiB1
bnNpZ25lZCBSZW5kZXJTdHlsZTo6aGFzaEZvclRleHRBdXRvc2l6aW5nKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJDbGllbnRJZGVudGlmaWVyLmgKaW5kZXggNjQwOWE0MWMzODJhOGU1NzdjOTYwMzY0ZmI2N2U3
ODE0NDljYjFiNi4uOTM4YmI1OTJmNzI2OGM2OWFjMzcxODM3NWE3MmI5Njk2YzcyOTVmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGll
bnRJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJDbGllbnRJZGVudGlmaWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9j
dW1lbnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclR5cGVzLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NywxNiArODgsMTIgQEAgT3B0
aW9uYWw8U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI+IFNlcnZpY2VXb3JrZXJDbGllbnRJ
ZGVudGlmaWVyOjpkZWNvZGUoRGUKICAgICBpZiAoIWNvbnRleHRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzZXJ2ZXJD
b25uZWN0aW9uSWRlbnRpZmllciksIFdURk1vdmUoKmNvbnRleHRJZGVudGlmaWVyKSB9IH07Cisg
ICAgcmV0dXJuIHsgeyAqc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsICpjb250ZXh0SWRlbnRp
ZmllciB9IH07CiB9CiAKIGlubGluZSB1bnNpZ25lZCBTZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRp
Zmllcjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgaGFzaGVzWzJdOwotICAgIGhhc2hl
c1swXSA9IFdURjo6aW50SGFzaChzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKLSAgICBoYXNoZXNbMV0gPSBXVEY6OmludEhhc2goY29udGV4dElkZW50aWZpZXIudG9VSW50
NjQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hlcywgc2l6
ZW9mKGhhc2hlcykpOworICAgIHJldHVybiBjb21wdXRlSGFzaChzZXJ2ZXJDb25uZWN0aW9uSWRl
bnRpZmllciwgY29udGV4dElkZW50aWZpZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtl
ckNvbnRleHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdv
cmtlckNvbnRleHREYXRhLmgKaW5kZXggZGJhNjIzNWUwYjYwNmE4MzEzYzNjNGMzMWQ3ZDJjYmZh
NjE2ZmZlMS4uMTRhYmNhZDY0Yzk5YTFjODcxMzZiYmMwZjZkOWNjNTYxZWYyODEyMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEuaApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiV29ya2VyVHlwZS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9VUkxIYXNo
Lmg+CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXgg
YWZiYzQwZTljMzJiYmE5MTIwZmQ5OGI1MmE0MWZmMDc3Nzg3NGQ5Yy4uYzQzZDg2NTQ1ZmNiYjg2
NWEzYTUxYjRiNTc5MzZmOTIyYjgwOTY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUg
IlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24uaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29w
ZS5oIgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU1dDb250
ZXh0TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU1dD
b250ZXh0TWFuYWdlci5oCmluZGV4IGY1NzBjZTQzZDVjMDhjOTA4ODI5MDIyYTE3MjZkZDJiOGE5
OTBkMDEuLjRkMDhlNzZiYzlkNjA2MzljZTBkOWFmNGM5OWEwN2E5ZTExYmU0ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9jb250ZXh0L1NXQ29udGV4dE1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TV0NvbnRl
eHRNYW5hZ2VyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyVGhy
ZWFkUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2Nv
bnRleHQvU2VydmljZVdvcmtlclRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaAppbmRleCAzZmUyYjQ0
MzVhZjI1YzAyNDljMWVmY2RlOGM4ODFkYWZiOGZhYjAxLi5iZmM4N2YyNDkwNTQ3NjY5ZjliMDQx
ZjhhMjcxZDcyN2NlZDJmZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaApA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIldvcmtlckRlYnVnZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1VSTEhhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0b3Jl
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0
b3JlLmgKaW5kZXggYWY4NmYyNTQzNTcyYTFhMzhiNTFmOTk0MTk4ODE1YTZmNGQ1NjI1ZS4uYmEx
MTMxMTVhNjU0MTJmZGUyZGZkYWI2MTY2ZTVmNmUwODcyMzk2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUu
aApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Nv
bXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVVJMSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9z
ZXJ2ZXIvU1dTZXJ2ZXIuaAppbmRleCBjMTY2ODA1ZDgxZTg0MDZmNWY5M2JhZTVmMGE0NDc0MThi
OGI0MDlhLi40ZmUxNTYxOWNiZDVkNjdmMjNiMDM0NDk1NWI4YmU3MWMyNzFhZGViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5oCkBAIC00
NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL1VSTEhhc2guaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgKaW5k
ZXggM2EzZjdjMDAwY2Y3Yzg3M2M3NGFiOGJiMzdmNzllNTBiOTYyZDJiZC4uYmE1OGY3ODc4YTQz
ODliNDU0NTYyYjcyYjVhNWY1Y2E1NGUyMzc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyVG9Db250ZXh0
Q29ubmVjdGlvbi5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckNv
bnRleHREYXRhLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlcklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJTZXJ2aWNlV29ya2VyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaAppbmRleCBmNGMyYzNiNzU2YTllZjhmMWQw
ZjVkMzYyZjBhZWI5ODYwZWE4OGI2Li4xZDRmZDgxN2IzYzhhYTgyZDExNjMzODM1ZjQzMTZhZmI1
MTQ1YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1NXU2VydmVyV29ya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlcldvcmtlci5oCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2Vy
dmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oCmluZGV4IDAwZTljMjFlODZkNGY5ZTJlOWY3N2IwNGYz
NzZjODRhZThhZjA0MTcuLmVjNzdjMWRiMmViY2I5ZDQ1MDQyYTkzNThiNGU5MTM1NWFhOWVmMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9X
ZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5SWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU1dT
ZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCBlNWM2
MDVjNTFmMzI3MTU2M2E2YjZlZTE5MTBjOTRlZDAxM2YzNDkzLi5jNzVkMTcwNGE3NzJlMjk5OTlk
ZTQzMDlkODU5YWY4MTdhMDU3NDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTU5LDExICs1OSw3IEBAIHN0cnVjdCBHbG9i
YWxGcmFtZUlEIHsKIAogaW5saW5lIHVuc2lnbmVkIEdsb2JhbEZyYW1lSUQ6Omhhc2goKSBjb25z
dAogewotICAgIHVuc2lnbmVkIGhhc2hlc1syXTsKLSAgICBoYXNoZXNbMF0gPSBXVEY6OmludEhh
c2god2ViUGFnZUlELnRvVUludDY0KCkpOwotICAgIGhhc2hlc1sxXSA9IFdURjo6aW50SGFzaChm
cmFtZUlELnRvVUludDY0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsKKyAgICByZXR1cm4gY29tcHV0ZUhhc2god2ViUGFn
ZUlELCBmcmFtZUlEKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHbG9iYWxG
cmFtZUlEJiBhLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBiKQpAQCAtNzMsOCArNjksOCBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEsIGNvbnN0IEdsb2JhbEZy
YW1lSUQmIGIpCiAgICAgcmV0dXJuIGEud2ViUGFnZUlEID09IGIud2ViUGFnZUlEICYmICBhLmZy
YW1lSUQgPT0gYi5mcmFtZUlEOwogfQogCi19OwotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
Cit9Cit9CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQppbmRleCA0YzZiN2JjMjNjZjI5MjgzMjc0Yjc5NjU5ODNjYjE4MGMxNjU5OWFi
Li5hZWFmNGI5YmU5MzM1OWZmZWM5NDc2ZTI0M2M2N2EzYWNhNDU5M2UxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTY2OSw2ICs2NjksNyBAQCBkZWYgaGVh
ZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRp
bWUuaD4nXSwKICAgICAgICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5o
PiddLAogICAgICAgICAnU2Vjb25kcyc6IFsnPHd0Zi9TZWNvbmRzLmg+J10sCisgICAgICAgICdV
UkwnOiBbJzx3dGYvVVJMSGFzaC5oPiddLAogICAgICAgICAnV2FsbFRpbWUnOiBbJzx3dGYvV2Fs
bFRpbWUuaD4nXSwKICAgICAgICAgJ1N0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPidd
LAogICAgICAgICAnUEFMOjpTZXNzaW9uSUQnOiBbJzxwYWwvU2Vzc2lvbklELmg+J10sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRI
YW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRIYW5kbGUubW0KaW5kZXggYzRiZjJiNzljMzU0ZDM5M2I2Mzc0Yzc4MzJiODRhZmU3ZjU1ZjVj
YS4uMTQ3MDEwOWNlMWY0YjgwOTE0ZTM1OTkxODE1NTFjZGY3NDUzNDExOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEhh
bmRsZS5tbQpAQCAtNTUsNyArNTUsNyBAQCAtIChpZClfaW5pdFdpdGhQYWdlUHJveHlJRDooV2Vi
S2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyKXBhZ2VQcm94eUlEIGFuZFdlYlBhZwogCiAtIChO
U1VJbnRlZ2VyKWhhc2gKIHsKLSAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChfcGFnZVByb3h5
SUQudG9VSW50NjQoKSwgX3dlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKKyAgICByZXR1cm4gY29tcHV0
ZUhhc2goX3BhZ2VQcm94eUlELCBfd2ViUGFnZUlEKTsKIH0KIAogLSAoQk9PTClpc0VxdWFsOihp
ZClvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dl
YlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
U3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oCmluZGV4IDc2NjIxODk1MzI4
MGFjYTFmZWQwYjBlNjkxMDhkOWJjODc4OWRkZTguLjA0NTUyZGM3MDBiMTlkZjAwZWNjNTZjYmFh
MTQ0NGYyY2U1MGFmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9y
YWdlL1dlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaApAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU1dDb250ZXh0TWFuYWdlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtlckNsaWVudERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NlcnZpY2VXb3JrZXJUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVz
cGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKaW5kZXggZGM3
N2Y4Zjg0ZDAzNDM5MDFiOWFlZWE1NTUwZmQzNzhkODAzMjg5Ni4uMDQyMDViMzcyZGE0NzliYzlk
YjhlNTY3YzdkNjIyZTlmOTI0ZmVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcApAQCAtNzUsNyArNzUsNyBAQCBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVnZXJBcnJheSYgYSwgY29uc3QgSW50ZWdl
ckFycmF5JiBiKQogICAgIHJldHVybiBhLm1faW50ZWdlcnMgPT0gYi5tX2ludGVnZXJzICYmICBh
Lm1fc2l6ZSA9PSBiLm1fc2l6ZTsKIH0KIAotc3RydWN0IEludGVnZXJBcnJheUhhc2hUcmFpdHMg
OiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEludGVnZXJBcnJheT4geworc3RydWN0IEludGVnZXJB
cnJheUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEludGVnZXJBcnJheT4gewogICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShJbnRlZ2VyQXJyYXkmIHNsb3QpIHsgc2xvdC5tYXJr
RGVsZXRlZCgpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgSW50ZWdl
ckFycmF5JiBhcnJheSkgeyByZXR1cm4gYXJyYXkuaXNEZWxldGVkVmFsdWUoKTsgfQogfTsK
</data>
<flag name="commit-queue"
          id="445092"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425228</attachid>
            <date>2021-04-05 18:30:04 -0700</date>
            <delta_ts>2021-04-06 14:43:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210405183003.patch</filename>
            <type>text/plain</type>
            <size>95611</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjY3ODdjN2ViNTQ2NzY2NjM4OGZiYWVjZGJhYzc4YTNlODU1YjQxLi5jZjNkZmQ5M2JjYTMzNTA3
Y2ZhNTExOGM4MGE1NWE0NDA1YjJhNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDIgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFJlZHVjZSBieXRlY29kZSBpbnN0
cnVjdGlvbiBjb3VudCBlbWl0dGVkIGZvciBgY2xhc3MgZXh0ZW5kc2AKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDFkZGY1NTI4
OGI3ZDdmZDk3NDM0Y2NiMjlkOWIxMDgxODc4YmYzMC4uN2I4OGM1OTgwNDI5YzMyZGRlOWIyOTcx
MWY4MDYzZTQ3MGRjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1v
dmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaEZ1bmN0aW9u
cy5oOiBFeHBvcnQgaW50SGFzaCBhbmQgcGFpckludEhhc2ggdG8gdGhlIGdsb2JhbCBuYW1lc3Bh
Y2UKKyAgICAgICAgc28gdGhleSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgV1RG
IHByZWZpeC4gVGhpcyBmb2xsb3dzIHRoZSB1c3VhbAorICAgICAgICBXVEYgZGVzaWduIHBhdHRl
cm4gZ2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lk
ZSBXVEYuCisKKyAgICAgICAgKiB3dGYvSGFzaGVyLmg6IERlbGV0ZWQgSW50ZWdlckhhc2hlci4K
KyAgICAgICAgKFdURjo6YWRkKTogQWRkZWQgb3ZlcmxvYWRzIGZvciBTdHJpbmcsIEF0b21TdHJp
bmcsIGFuZCBVUkwuCisKKyAgICAgICAgKiB3dGYvT2JqZWN0SWRlbnRpZmllci5oOgorICAgICAg
ICAoV1RGOjphZGQpOiBBZGRlZCBhIEhhc2hlciBvdmVybG9hZCBmb3IgYW55IE9iamVjdElkZW50
aWZpZXIuCisKKyAgICAgICAgKiB3dGYvUmV0YWluUHRyLmg6IEV4cG9ydCBzYWZlQ0ZFcXVhbCBh
bmQgc2FmZUNGSGFzaCB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQorICAgICAgICBzbyB0aGV5IGNh
biBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBXVEYgcHJlZml4LiBUaGlzIGZvbGxvd3Mg
dGhlIHVzdWFsCisgICAgICAgIFdURiBkZXNpZ24gcGF0dGVybiBnaXZlbiB0aGF0IHRoZXNlIGZ1
bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIFdURi4KKworICAgICAgICAqIHd0
Zi9WZWN0b3JIYXNoLmg6IFJlbW92ZWQgdGhlIFZlY3Rvckhhc2ggdGVtcGxhdGUsIGluc3RlYWQg
anVzdCBzcGVjaWFsaXppbmcKKyAgICAgICAgRGVmYXVsdEhhc2guIFVzZSBjb21wdXRlSGFzaCB0
byBoYXNoIHRoZSBjb250ZW50cyBvZiB0aGUgdmVjdG9yIGluc3RlYWQgb2YKKyAgICAgICAgaGFz
aGluZyB0aGUgaGFzaGVzIG9mIHRoZSBpdGVtcyBpbiB0aGUgdmVjdG9yLiBUaGlzIGlzIGJldHRl
ciBpbiBnZW5lcmFsIGFuZAorICAgICAgICBiZXR0ZXIgZm9yIHRoZSBvbmUgY2FzZSB3aGVyZSB3
ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMsIGZvciBhIFZlY3RvcjxpbnQ+LgorICAgICAgICBX
ZSB3YW50IHRvIGhhc2ggYWxsIHRoZSBpbnRlZ2VycyByYXRoZXIgdGhhbiBoYXNoaW5nIGhhc2hl
cyBvZiBhbGwgdGhlIGludGVnZXJzLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0aGlzIG1lYW5z
IHRoZSBlbGVtZW50cyBvZiB0aGUgVmVjdG9yIG5lZWQgdG8gYmUgaGFzaGFibGUgdXNpbmcKKyAg
ICAgICAgdGhlIEhhc2hlciBtYWNoaW5lcnkuIFRoZSBvbGQgcmVxdWlyZW1lbnQgd2FzIHRoZSB0
aGUgZWxlbWVudHMgaGFkIGEgRGVmYXVsdEhhc2guCisKIDIwMjEtMDQtMDIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFByZWZlclBhZ2VS
ZW5kZXJpbmdVcGRhdGVzTmVhcjYwRlBTRW5hYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzA5ZmRjYzBkZWVkYmI0NDFlOGI3MWEyZTliYjQ5OTliY2IwZjQ2Ni4uZWRlMzkwMzI4NDhjZGNk
ZTcwN2M1MDE3MjA1Yjc5MGM3MWFiN2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAor
MjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBt
aXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRyaWdnZXJIYXNoOjpoYXNoKTogVXNlIGNvbXB1dGVI
YXNoIHRvCisgICAgICAgIGhhc2ggYWxsIHRoZSBmaWVsZHMgaW5zdGVhZCBvZiBhIGN1c3RvbS13
cml0dGVuIGFsZ29yaXRobS4gVGhlIGN1c3RvbQorICAgICAgICBhbGdvcml0aG0gaGFkIHNvbWUg
bWFnaWMgbnVtYmVycywgcmVwZWF0ZWRseSBoYXNoZWQgaGFzaGVzLCBhbmQgY29tYmluZWQKKyAg
ICAgICAgaGFzaGVzIHVzaW5nIGV4Y2x1c2l2ZSBvci4gVGhlIG5ldyBvbmUgaXMgYWxtb3N0IGNl
cnRhaW5seSBiZXR0dGVyLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OkNoYXJhY3RlclNldDo6
aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCB0byBoYXNoIHRoZSBib29sZWFu
IGFuZCB0aGUgY2hhcmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICB1c2luZyBpbnRIYXNoIGFu
ZCBwYWlySW50SGFzaC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOiBNb3ZlZCB0aGUgaGFzaGluZyBoZXJlIGZyb20g
dGhlIGhlYWRlci4gRml4ZWQgdGhlCisgICAgICAgIG1pc3Rha2Ugd2hlcmUgdGhpcyB3YXMgdXNp
bmcgJiBpbnN0ZWFkIG9mIHwgYW5kIHNvIG5vbmUgb2YgdGhlIGJvb2xlYW5zCisgICAgICAgIHdl
cmUgaGF2aW5nIGFueSBlZmZlY3Qgb24gdGhlIGhhc2ggdmFsdWUuCisKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaDogVXNlIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRCBzbworICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHNheSBwdWJsaWM6IGV4cGxpY2l0bHku
IEFsc28gbW92ZWQgYWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBtZW1iZXJzIHRvIHRoZSBib3R0
b20gb2YgdGhlIHN0cnVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIHN0eWxlCisgICAg
ICAgIGZvciBzdHJ1Y3R1cmVzIGFzIG9wcG9zZWQgdG8gY2xhc3Nlcy4gU2luY2UgdGhlIGRhdGEg
bWVtYmVycyBhcmUgdGhlCisgICAgICAgIHByaW1hcnkgaW50ZXJmYWNlLCB0aGV5IGFyZSBmaXJz
dCwgYW5kIGFsbCBmdW5jdGlvbiBtZW1iZXJzIGFyZSBzZWNvbmRhcnkKKyAgICAgICAgYW5kIHNv
IHRoZXkgY29tZSBhZnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHRIYXNo
OjpoYXNoKTogVXNlIGNvbnZlcnRIYXNoIGluc3RlYWQgb2YKKyAgICAgICAgYSBjdXN0b20gd3Jp
dHRlbiBoYXNoIGZ1bmN0aW9uLiBUaGUgY3VzdG9tIHdyaXR0ZW4gZnVuY3Rpb24gd2FzIGNvbWJp
bmluZworICAgICAgICBoYWhlcyB1c2luZyBleGNsdXNpdmUgb3IsIG5vdCBhIGJlc3QgcHJhY3Rp
Y2UsIGFuZCBhbHNvIGhhZCBhIG1pc3Rha2UKKyAgICAgICAgd2hlcmUgaXQgdXNlZCAmIGluc3Rl
YWQgb2YgfCBhbmQgc28gdGhlICJiaXRzIiBsb2NhbCB2YXJpYWJsZSB3YXMgYWx3YXlzIDAuCisK
KyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDogVXNlIEhhc2hUcmFpdHMgaW5zdGVh
ZCBvZiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaDogUmVtb3ZlZCB1bm5lZWRlcyBpbmNsdWRlcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOiBDaGFuZ2VkIENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IGludG8gYQorICAgICAgICBzaW1wbGUgc3RydWN0IHdpdGggbm8gYWRkaXRpb25hbCBm
dW5jdGlvbiBtZW1iZXJzIG9yIHN0YXRpYyBkYXRhIG1lbWJlcnMuCisgICAgICAgIENoYW5nZWQg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHRvIHVzZSBjb21wdXRlSGFzaCB0byBjYWxjdWxh
dGUgdGhlCisgICAgICAgIGhhc2gsIGluc3RlYWQgb2YgSW50ZWdlckhhc2hlci4gUHJvYmFibHkg
YmV0dGVyIHRvIGhhc2ggdGhlIHBvaW50ZXIgb2YKKyAgICAgICAgdGhlIEF0b21TdHJpbmcgcmF0
aGVyIHRoYW4gaGFzaGluZyB0aGUgaGFzaCwgYnV0IGVpdGhlciB3YXksIHdlIHNob3VsZAorICAg
ICAgICBoYXZlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uIGZvciBBdG9tU3RyaW5nIGhhc2hpbmcg
aW4gdGhlIEhhc2hlciBjbGFzcy4KKyAgICAgICAgQWRkZWQgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoVHJhaXRzIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzLiBVc2UgdGhlIHZhbHVlIFVfU0VOVElORUwgZm9yIHRoZSBVQ2hhcjMyIGNoYXJhY3RlciwK
KyAgICAgICAgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIC0xIHVzZWQgYmVmb3JlLCBidXQgc2xp
Z2h0bHkgY2xlYXJlciB3aHkgaXQncyBPSy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3Rl
bUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6IFVzZSBIYXNoTWFwOjplbnN1cmUKKyAg
ICAgICAgaW5zdGVhZCBvZiBIYXNoTWFwOjphZGQgdG8gbWFrZSB0aGUgbG9naWMgc2ltcGxlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDogVXNlIGJvb2wgaW5zdGVhZCBv
ZiB1aW50OF90IGFzIHRoZSBiYXNlIHR5cGUKKyAgICAgICAgZm9yIHRoZSBOby9ZZXMgZW51bWVy
YXRpb24gSXNGb3JQbGF0Zm9ybUZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOiBSZW1vdmVkIHVubmVlZGVkICJ1c2luZyBuYW1lc3BhY2UgV1RGIiwKKyAg
ICAgICAgd2hpY2ggaXMgbm90IG91ciBiZXN0IHByYWN0aWNlLCBlc3BlY2lhbGx5IGdpdmVuIHVu
aWZpZWQgYnVpbGRzLgorICAgICAgICBDaGFuZ2VkIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBp
bnRvIGEgc2ltcGxlIHN0cnVjdCwgcmVtb3ZpbmcgYWxsIHRoZQorICAgICAgICBoYXNoLXJlbGF0
ZWQgbWVtYmVyIGZ1bmN0aW9ucy4gQWxzbyB1c2VkIHN0cnVjdC1zdHlsZSBuYW1pbmcgZm9yIHRo
ZQorICAgICAgICBtZW1iZXJzIHdpdGhvdXQgYW4gIm1fIiBwcmVmaXguIFVzZWQgdGhlIHR5cGUg
Rm9udEZhbWlseU5hbWUgZm9yIHRoZQorICAgICAgICBmYW1pbHkgbmFtZSwgd2hpY2ggbWVhbnMg
d2Ugd2lsbCB1c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbidzIHN5c3RlbQorICAgICAgICBmb3Ig
aGFzaGluZyBhbmQgY29tcGFyaW5nIGZhbWlseSBuYW1lcyBmb3IgZXF1YWxpdHkgd2l0aG91dCBo
YXZpbmcgdG8KKyAgICAgICAgcmVtZW1iZXIgZG8gdG8gc28gZXhwbGljaXRseS4gQ2hhbmdlZCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHRvCisgICAgICAgIHVzZSBjb21wdXRlSGFzaC4g
VGhlIG9sZCB2ZXJzaW9uIGhhZCB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgdG8KKyAgICAg
ICAgaGFuZGxlIE9wdGlvbmFsIGFuZCB3YXMgdW5uZWNlc3NhcmlseSBoYXNoaW5nIGhhc2hlcy4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6IFJl
bmFtZWQgdG8gcmVtb3ZlICJnZXQiCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4g
QWxzbyB1c2Ugc2hvcnRlciBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKyAgICAgICAgbmFt
ZXMgdGhhdCBhcmUgc2luZ2xlIHdvcmRzLCBhbmQgdXBkYXRlZCBzaW5jZSBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkKKyAgICAgICAgaXMgbm93IGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6IFVzZSBzaG9y
dGVyIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IFRvIGNvbXBhcmUgdHdv
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgb2JqZWN0cywKKyAgICAgICAgdXNlIGEgc2ltcGxlciBjb25z
dHJ1Y3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCBWZWN0b3IgYWxyZWFkeQorICAg
ICAgICBoYXMgYW4gPT0gb3BlcmF0b3IgYW5kIHdlIGFyZSB1c2luZyBGb250RmFtaWx5TmFtZSBm
b3IgdGhlIGVsZW1lbnRzCisgICAgICAgIG9mIHRoZSB2ZWN0b3IsIHdoaWNoIGhhcyBhIGNvcnJl
Y3QgPT0gb3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aDo6aGFzaCk6IFVzZSBjb21wdXRlSGFzaCBzaW5jZQorICAgICAgICB0aGUgRm9udEZhbWlseU5h
bWUgaGFzaGluZyBpcyBub3cgY29ycmVjdCwgYW5kIHdlIGNhbiByZWx5IG9uIHRoZQorICAgICAg
ICB3YXkgSGFzaGVyIGtub3dzIGhvdyB0byBpdGVyYXRlIGEgY29sbGVjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSBpcyBub3cgYSBzaW1wbGUgc3RydWN0
LiBBbHNvIHVzZSBjb25zdGV4cHIgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmludmFsaWRhdGUpOiBVc2UgY29weVRvVmVjdG9yT2Y8PiB0byBzaW1wbGlmeSB0aGUKKyAgICAg
ICAgY29kZSB0aGF0IGNhbGxzIGZvbnRDYWNoZUludmFsaWRhdGVkIG9uIGFsbCB0aGUgZm9udCBz
ZWxlY3RvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogVXNl
ICJ1c2luZyIgaW5zdGVhZCBvZiAidHlwZWRlZiIuCisgICAgICAgIFJlbW92ZSBGb250RGVzY3Jp
cHRpb25LZXk6OmNvbXB1dGVIYXNoLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTogQW4gb3Zlcmxv
YWQgb2YgYWRkIGZvciBIYXNoZXIgdG8gaW5jbHVkZSBhCisgICAgICAgIEZvbnREZXNjcmlwdGlv
bktleSBpbiBhIGhhc2gsIHdoaWNoIGp1c3QgbGlzdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuCisg
ICAgICAgIFRoZSBvbGQgdmVyc2lvbiBkaWQgYSBoYXNoIG9mIGhhc2hlcywgYnV0IHRoYXQncyBu
b3QgbmVlZGVkIGFueSBtb3JlLgorICAgICAgICBVcGRhdGVkIEZvbnREZXNjcmlwdGlvbktleUhh
c2ggdG8gdXNlIHRoZSBIYXNoZXIgdmVyc2lvbiBvZiBDb21wdXRlSGFzaC4KKyAgICAgICAgQWRk
ZWQgRm9udEZhbWlseU5hbWUuIENoYW5nZSBGb250Q2FzY2FkZUNhY2hlS2V5IHRvIHVzZSBhIHZl
Y3RvciBvZgorICAgICAgICBGb250RmFtaWx5TmFtZSBpbnN0ZWFkIG9mIEF0b21TdHJpbmcuIElu
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSwgdXNlCisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRCBpbnN0ZWFkIG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECisgICAgICAgIGFu
ZCBhbHNvIGdvdCByaWQgb2YgdGhlIHVubmVlZWRlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFs
dWUpOgorICAgICAgICBVc2UgdGhlIGRlbGV0ZWQgdmFsdWUgb2YgRm9udERlc2NyaXB0aW9uS2V5
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM6OmlzRGVs
ZXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAgIFJlbmFtZWQgZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YSB0byBqdXN0IGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQg
b2YKKyAgICAgICAgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRTZWxlY3Rpb25SYW5nZTo6dW5pcXVlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YWRkKTogQWRkIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRv
IHRoZSBoYXNoCisgICAgICAgIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBjb21iaW5pbmcgdGhlbS4g
Rm9yIG5vdywgdGhpcyBtYWtlcyB0aGUgd2F5CisgICAgICAgIHRoZXkgYXJlIGhhc2hlZCBhIGJp
dCBpbmVmZmljaWVudCwgYnV0IHRoYXQgY2FuIGJlIHJlLXRpZ2h0ZW5lZCB1cCBieQorICAgICAg
ICBpbXByb3ZpbmcgdGhlIGFsZ29yaXRobSBvZiBIYXNoZXIgaWYgd2UgbGlrZS4gU2hvdWxkIGJl
IGZpbmUgZm9yIG91cgorICAgICAgICBuZWVkcyBlaXRoZXIgd2F5LgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oOiBBZGRlZCBvdmVy
bG9hZHMgb2YgdGhlCisgICAgICAgIGFkZChIYXNoZXImKSBmdW5jdGlvbiBmb3Igc3RkOjphcnJh
eTxjaGFyLCA0PiBhbmQgRm9udFRhZ2dlZFNldHRpbmc8VD4uCisgICAgICAgIEdvdCByaWQgb2Yg
bWFueSB1c2VzIG9mIHBhc3MgYnkgcmVmZXJlbmNlIGluc3RlYWQgb2YgdmFsdWUgZm9yIEZvbnRU
YWcsCisgICAgICAgIHNpbmNlIGl0IGZpdHMgaW50byBhIDMyLWJpdCByZWdpc3RlciBhbmQgYnRo
IG1vcmUgc291cmNlIGNvZGUgYW5kIGxlc3MKKyAgICAgICAgZWZmaWNpZW50IHRvIHBhc3MgYnkg
dmFsdWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6IFJlbW92
ZWQgInVzaW5nIFdURjo6cGFpckludEhhc2giIHNpbmNlCisgICAgICAgIHRoYXQncyBub3cgZG9u
ZSBpbiB0aGUgV1RGIGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQKKyAgICAgICAgInVzaW5nIFdU
Rjo6R2VuZXJpY0hhc2hUcmFpdHMiLCB3aGljaCB3YXMgdW5oZWxwZnVsLiBUaGUgR2VuZXJpY0hh
c2hUcmFpdHMKKyAgICAgICAgdGVtcGxhdGUgaXMgb25seSByZWFsbHkgbmVlZGVkIHdoZW4gc3Bl
Y2lhbGl6aW5nIEhhc2hUcmFpdHMsIHdoaWNoCisgICAgICAgIGFscmVhZHkgaGFzIHRvIGJlIGRv
bmUgd2l0aGluIHRoZSBXVEYgbmFtZXNwYWNlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlCisgICAg
ICAgIHNob3VsZCBqdXN0IHVzZSBIYXNoVHJhaXRzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg6IFVzZSBIYXNoVHJhaXRz
CisgICAgICAgIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQu
Y3BwOgorICAgICAgICBNb3ZlIHRoZSBkYXRhIG1lbWJlcnMgdG8gdGhlIHRvcCBvZiB0aGUgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkgc3RydWN0LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNvbXB1dGVIYXNoIGZ1bmN0aW9uIGFuZCBXVEYgcHJlZml4IGZyb20gc2FmZUNGRXF1YWwuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOiBD
YWxsIHRoZSBIYXNoZXIgdmVyc2lvbgorICAgICAgICBvZiBjb21wdXRlSGFzaCBkaXJlY3RseSB0
byBoYXNoIHRoZSB0d28gaXRlbXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2NhZGVMaXN0UGFyYW1l
dGVyczo6aGFzaCBjb25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCBpbnN0ZWFkIG9mIElu
dGVnZXJIYXNoZXIuIEFsc28gcmVuYW1lZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICBzdHJ1
Y3QgZnJvbSBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gg
dG8KKyAgICAgICAgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIFJlbW92ZWQgbm93LXVubmVlZGVkIFdURiBwcmVm
aXhlcyBmcm9tIGNhbGxzIHRvIHNhZmVDRkVxdWFsLgorCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFz
aFRyYWl0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlRm9udEhhc2gpOiBVc2UgY29tcHV0ZUhhc2ggaW5zdGVh
ZCBvZiBJbnRlZ2VySGFzaGVyLgorICAgICAgICBTdGlsbCBub3QgZ3JlYXQgdGhhdCB3ZSBoYXNo
IGEgaGFzaCBoZXJlLCBidXQgd2UgY2FuIGltcHJvdmUgdGhhdCBsYXRlci4KKworICAgICAgICAq
IHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZSk6IFJlbW92
ZWQgdW5uZWVkZWQKKyAgICAgICAgV1RGTW92ZSBvbiBPYmplY3RJZGVudGlmaWVyLCB3aGljaCBh
cmUganVzdCBpbnRlZ2Vycywgc28gbW92ZSB2cy4gY29weQorICAgICAgICBpcyBub3QgYW4gaW1w
b3J0YW50IGRpc3RpbmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVu
dElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBVc2UgY29tcHV0ZUhhc2gKKyAgICAgICAgaW5zdGVh
ZCBvZiBjb21iaW5pbmcgaW50SGFzaCB3aXRoIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeS4gVGhp
cyBmaXhlcworICAgICAgICB0d28gbWlzdGFrZXM6IG9uZSBpcyB0aGF0IHRoZXJlIGlzIG5vIG5l
ZWQgdG8gaGFzaCBhIGhhc2guIFRoZSBzZWNvbmQgaXMKKyAgICAgICAgdGhhdCBpbnRIYXNoIHRh
a2VzIGEgMzItYml0IGludGVnZXIgYXMgaXRzIHBhcmFtZXRlciwgc28gaGlnaCBiaXRzCisgICAg
ICAgIG9mIG9iamVjdCBpZGVudGlmaWVycyB3ZXJlIGRpc2NhcmRlZCB1bm5lY2Vzc2FyaWx5Lgor
CiAyMDIxLTA0LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFBlbmRpbmdJbWFnZUJpdG1hcCBnZXRzIGNyZWF0ZWQgb24gYSBzdG9wcGVkIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjVkNjc1MTdmZjIwYzc1Yzg3MGU2MmUwMTg5YWEy
YjlkOWU0YjU4MS4uYTA5YjJlYTk3ZjZmOWQ3OWI3MTZhYjAzMzIzYmRhOTNkNWFkNGYxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hl
ciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNo
IGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29tYmluaW5nIGlu
dEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMKKyAgICAgICAg
dHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggYSBoYXNo
LiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMyLWJpdCBpbnRl
Z2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBvYmplY3QgaWRl
bnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAgICAqIFNoYXJl
ZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW06CisgICAgICAgICgtW1dLQnJv
d3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgcGFp
ckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0YWtlOiBwYWlySW50SGFzaCB0YWtl
cyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMKKyAgICAgICAgb2Ygb2JqZWN0IGlk
ZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJpbHkuCisKIDIwMjEtMDQtMDIgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVBdIFBvd2VyIHJl
Z3Jlc3Npb246IGF1ZGlvIGhhcmR3YXJlIGlzIGNvbmZpZ3VyZWQgZm9yIDEyOCBmcmFtZSBwcmVm
ZXJyZWQgYnVmZmVyIHNpemUgZHVyaW5nIFZpZGVvQXVkaW8gcGxheWJhY2sKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA2MGM0Mzg5MjBmMzQ5OTYxMzgzYjYxNjRhZmYyYmU3YjYxNzhl
YjU4Li5mMTBiODY5NmRiNWQ4ZjlhN2EwYThjNTI2YzkyZjc3MzZjODgwODFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDQtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBIYXNoZXIgbW9yZSwgcmVtb3Zl
IEludGVnZXJIYXNoZXIsIGZpeCBoYXNoaW5nLXJlbGF0ZWQgbWlzdGFrZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9CaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHMuCisKIDIwMjEtMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVc2UgTUFDSF9QT1JUX1ZBTElEKCkgd2hlbiB3YW50aW5nIHRvIGNoZWNrIGlmIGEg
bWFjaCBwb3J0IGlzIHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAppbmRleCBkMTQ3NTQxODMyNDcyNTU0ODc1OTlhZTliNDYyMDViNmQ1ZDdk
ZTI4Li5hODRiZGExNmVmYjdjYjdjMzI1YWM2YzIwN2IwOTA3M2MxODIzMDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgIENoZWNrcG9pbnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gaW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGlj
IEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9m
ZnNldCAtIDEpOyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCmluZGV4IDFiYWU3ZmRiOGNlMmQ4NWEyZGE2NGM3ODky
MTdlMGUxZWM0MWE1MjIuLjY1OGUyY2ZjNWVjZTgyMzQ5NzZiNjM0ZGU4ZTM3ZjIwZDZmMGZjODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaApAQCAtMTU0
LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CiAgICAgc3Rk
OjphcnJheTxBYnN0cmFjdEhlYXAsIDE2PiBtX3NtYWxsSW5kaWNlczsKICAgICAKLSAgICBzdHJ1
Y3QgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPHB0
cmRpZmZfdD4geworICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8cHRyZGlmZl90PiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xvdCA9IDE7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBhZTU3OGEzMjFiOGI3NTIzY2Q1ZjRiMjUzNDI4MDg3OWVlNWVmMDFmLi5mZTkwMDc1MDVl
OGJiNDEyYjYzNmE5YzNiYzVjN2U2Yjk3MTE0YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC01OTAsNyArNTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZVNldCYgbGl2ZSA9IG1fbGl2ZUluVG9Ob2RlLmZpbmQobm9kZSktPnZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBoaWdoUGFyZW50SW5kZXggPSBub2RlLT5pbmRleCgpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICB1aW50NjRfdCBoYXNoID0gV1RGOjppbnRIYXNoKGhpZ2hQYXJl
bnRJbmRleCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2luY2UgaW50SGFzaCByZXR1cm5zIGEg
MzItYml0IHVuc2lnbmVkIGludGVnZXIsIGl0J3Mgbm90IGNsZWFyIHdoeSBpdCdzIGhlbHBmdWwg
dG8gc3RvcmUgaXQgaW4gYSB1aW50NjRfdC4KKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBp
bnRIYXNoKGhpZ2hQYXJlbnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoaGFzaCA+PSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSArIDEpICogT3B0aW9uczo6dmFsaWRhdGVBYnN0cmFjdEludGVycHJl
dGVyU3RhdGVQcm9iYWJpbGl0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCmluZGV4IDUzN2VlNTY1MjBlZDU4NDMwMWY0ODIwNDk2MmNmMjc4NmJkYjM0ZmQuLjA1NGUz
MWVkNmJhNGEyODllOGVjYzVlNmQ2NzE4YWVlNjc2MTA1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDE2LDcgKzQxNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGludCoganVtcFRhcmdldDsKICAgICB9OwogCi0gICAgc3Ry
dWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2Rl
ZEpTVmFsdWU+IHsKKyAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IHRydWU7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oIGIvU291cmNlL1dURi93
dGYvSGFzaEZ1bmN0aW9ucy5oCmluZGV4IDVmOTBmNGVhNzYxMTgxYmZlNGE0NTA3N2IxMmQxODUx
ZTdmODljNDkuLmZmZDUyMmNlMjkwOGQ3ZmVlNzJhYmIwNDYxNGFhZjQ0MTA1YjZiNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoRnVuY3Rpb25zLmgKQEAgLTI3NSwzICsyNzUsNSBAQCBuYW1lc3BhY2UgV1RGIHsKIHVz
aW5nIFdURjo6RGVmYXVsdEhhc2g7CiB1c2luZyBXVEY6OkludEhhc2g7CiB1c2luZyBXVEY6OlB0
ckhhc2g7Cit1c2luZyBXVEY6OmludEhhc2g7Cit1c2luZyBXVEY6OnBhaXJJbnRIYXNoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAppbmRleCA1MmViMjM0MjExZDM2OWM4ZTNlMDlhYzc1YmQ4YzQ0ZGEwNjM5NTVlLi4yODcyNTY4
ZTkzNjc5NzE3YzMxNGQwZTNjYTE2Yjc3MjljZDA0NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDMxICsyMCwxNCBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBEZXByZWNhdGVkLiBV
c2UgSGFzaGVyIGluc3RlYWQuCi1jbGFzcyBJbnRlZ2VySGFzaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2b2lkIGFkZCh1aW50MzJfdCBpbnRlZ2VyKQot
ICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hl
cjsKLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJfdCBjb21wdXRlSGFz
aChjb25zdCBUeXBlcyYuLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gT3Ro
ZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+LCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfdW5zaWduZWQ8VW5zaWdu
ZWRJbnRlZ2VyPjo6dmFsdWUgJiYgc2l6ZW9mKFVuc2lnbmVkSW50ZWdlcikgPD0gc2l6ZW9mKHVp
bnQzMl90KSwgdm9pZD4gYWRkKEhhc2hlciYsIFVuc2lnbmVkSW50ZWdlcik7CkBAIC0xMTIsNiAr
OTUsMjcgQEAgaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBmbG9hdCBudW1iZXIpCiAg
ICAgYWRkKGhhc2hlciwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihudW1iZXIpKTsKIH0KIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBib29sIHJlbWFpbmRlciA9IHN0cmluZy5sZW5ndGgoKSAmIDE7CisgICAgdW5zaWduZWQgcm91
bmRlZExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSAtIHJlbWFpbmRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm91bmRlZExlbmd0aDsgaSArPSAyKQorICAgICAgICBhZGQoaGFzaGVy
LCAoc3RyaW5nW2ldIDw8IDE2KSB8IHN0cmluZ1tpICsgMV0pOworICAgIGlmIChyZW1haW5kZXIp
CisgICAgICAgIGFkZChoYXNoZXIsIHN0cmluZ1tyb3VuZGVkTGVuZ3RoXSk7Cit9CisKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQorewor
ICAgIC8vIENob3NlIHRvIGhhc2ggdGhlIHBvaW50ZXIgaGVyZS4gQXNzdW1pbmcgdGhpcyBpcyBi
ZXR0ZXIgdGhhbiBoYXNoaW5nIHRoZSBjaGFyYWN0ZXJzIG9yIGhhc2hpbmcgdGhlIGFscmVhZHkt
Y29tcHV0ZWQgaGFzaCBvZiB0aGUgY2hhcmFjdGVycy4KKyAgICBhZGQoaGFzaGVyLCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihzdHJpbmcuaW1wbCgpKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYWRkKGhhc2hlciwgdXJsLnN0
cmluZygpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRW51bWVyYXRpb24+IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPEVudW1lcmF0aW9uPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXIm
IGhhc2hlciwgRW51bWVyYXRpb24gdmFsdWUpCiB7CiAgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nh
c3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFbnVtZXJhdGlvbj4+KHZhbHVlKSk7CkBAIC0xODYs
NCArMTkwLDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpCiAKIHVzaW5nIFdURjo6Y29tcHV0ZUhh
c2g7CiB1c2luZyBXVEY6Okhhc2hlcjsKLXVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09iamVjdElkZW50aWZpZXIuaCBiL1NvdXJjZS9XVEYvd3Rm
L09iamVjdElkZW50aWZpZXIuaAppbmRleCBmOWM2N2I2M2I1ZTI2YTQwYjRhYWI1OGMwMTRkNWY0
NzBhNjA4NTUzLi44ODg1YWEzMWIyOTU2MWQ5MDBmNzUyZWIzZmViMzc4ZjVkNDQzOTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvT2JqZWN0SWRlbnRpZmllci5oCkBAIC0xMzEsNiArMTMxLDExIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBPYmplY3RJZGVudGlmaWVyPFQ+IG1ha2VPYmplY3RJZGVudGlmaWVy
KHVpbnQ2NF90IGlkCiAgICAgcmV0dXJuIE9iamVjdElkZW50aWZpZXI8VD4geyBpZGVudGlmaWVy
IH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgT2JqZWN0SWRlbnRpZmllcjxUPiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIs
IGlkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPYmplY3RJZGVudGlmaWVySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
T2JqZWN0SWRlbnRpZmllcjxUPiYgaWRlbnRpZmllcikgeyByZXR1cm4gaW50SGFzaChpZGVudGlm
aWVyLm1faWRlbnRpZmllcik7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPYmplY3RJ
ZGVudGlmaWVyPFQ+JiBhLCBjb25zdCBPYmplY3RJZGVudGlmaWVyPFQ+JiBiKSB7IHJldHVybiBh
ID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oIGIvU291cmNl
L1dURi93dGYvUmV0YWluUHRyLmgKaW5kZXggYzdmYjc0NDEwNTU2MWZkNjE1ODg4OGUzY2YwYWVm
OWRiMzQ2NWEyZi4uNGM1OTg0ZWZkNjAxN2EyYzY4ZTUyNjJmOGNlY2I1ZGEyNTgzZTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
UmV0YWluUHRyLmgKQEAgLTQwMiw2ICs0MDIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBk
eW5hbWljX29iamNfY2FzdChpZCBvYmplY3QpCiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5n
IFdURjo6YWRvcHRDRjsKIHVzaW5nIFdURjo6cmV0YWluUHRyOwordXNpbmcgV1RGOjpzYWZlQ0ZF
cXVhbDsKK3VzaW5nIFdURjo6c2FmZUNGSGFzaDsKIAogI2lmZGVmIF9fT0JKQ19fCiB1c2luZyBX
VEY6OmFkb3B0TlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKaW5kZXggYzM3Mzk0ODhkZTg1YzM4ZWVjZDY3MWZl
NzAzMjE3ZjM5M2U5YzIwYi4uOTM4MjFhMjdlNWY4YjUwNDIxYWI3NmFkNzdjOWM5YjI0NWNjYmUw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1ZlY3Rvckhhc2guaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwyOCArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKICNpbmNsdWRl
ICJIYXNoZXIuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXN0cnVjdCBWZWN0b3JIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB2YWx1ZSA6IHZlY3RvcikKLSAgICAgICAgICAgIGhhc2hlci5hZGQoRGVmYXVsdEhhc2g8VD46
Omhhc2godmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA9PSBiOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gc3RydWN0IERlZmF1bHRIYXNoPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHZlY3Rvcik7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotc3RydWN0IERlZmF1bHRIYXNo
PFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9ySGFzaDxULCBpbmxpbmVDYXBhY2l0
eT4geyB9OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAppbmRleCBjNTBiZjE3Yjk2YmQ3MzAwODJlM2MwMWQ2
OTdiNjJkNjQ1OWNkYzI0Li5hYzU1OTJlYmM2MjI1OTRlNDU4MWEzNjBlODIzYzFiN2JmNmM2YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25SdWxlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRF
eHRlbnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsMjMgKzg5LDEyIEBAIHN0cnVjdCBUcmlnZ2VyIHsKIHN0
cnVjdCBUcmlnZ2VySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVHJpZ2dl
ciYgdHJpZ2dlcikKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSA/IDEwNjE5ODYzIDogNDA5NjAwMDE7Ci0gICAgICAgIGlmICgh
dHJpZ2dlci51cmxGaWx0ZXIuaXNOdWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49IFN0cmluZ0hh
c2g6Omhhc2godHJpZ2dlci51cmxGaWx0ZXIpOwotICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50
SGFzaChoYXNoLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPjo6aGFzaCh0cmlnZ2VyLmZsYWdz
KSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiA6IHRyaWdnZXIuY29u
ZGl0aW9ucykKLSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChjb25kaXRpb24p
OwotCi0gICAgICAgIGhhc2ggXj0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpZ2dlci5j
b25kaXRpb25UeXBlKTsKLSAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaCh0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgdHJpZ2dlci51cmxGaWx0
ZXIsIHRyaWdnZXIuZmxhZ3MsIHRyaWdnZXIuY29uZGl0aW9ucywgdHJpZ2dlci5jb25kaXRpb25U
eXBlKTsKICAgICB9Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUcmlnZ2VyJiBhLCBj
b25zdCBUcmlnZ2VyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDBk
NTE4MzNmNWMwNjg1YmI4ODhlM2FhMjE3N2MzODdmNDM3NmE1NDQuLjRlMjVjNzJlZGVhYWY1NzU5
ZWRiNjBmMTJmNmVmMDZhNGI0ZWMxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9UZXJtLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTE2OCwxMSArMTY5LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNo
KFdURjo6cGFpckludEhhc2goV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVyc1swXSksIFdURjo6aW50
SGFzaChtX2NoYXJhY3RlcnNbMV0pKSwgbV9pbnZlcnRlZCk7CisgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZUhhc2gobV9pbnZlcnRlZCwgbV9jaGFyYWN0ZXJzKTsKICAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2ludmVydGVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWlu
dDY0X3QgbV9jaGFyYWN0ZXJzWzJdIHsgMCwgMCB9OworICAgICAgICBzdGQ6OmFycmF5PHVpbnQ2
NF90LCAyPiBtX2NoYXJhY3RlcnMgeyAwLCAwIH07CiAgICAgfTsKIAogICAgIHN0cnVjdCBHcm91
cCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmNwcApp
bmRleCAxM2Y5ZjQ5NjY5YmI2OTQ3YTA0NzRiNGJjNzQxNWYzY2Y0MmY0MTY2Li4wOTgxNjI2ZWZh
M2NhN2RjN2Y4YTI5ZWQ4ZmQwN2E5NWQ0YmM1ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAKQEAgLTEzNyw2ICsxMzcsNDMgQEAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGIpCiAgICAgOwogfQogCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1bnNpZ25lZCBiaXRzID0gY29udGV4dC5pc0hU
TUxEb2N1bWVudCAgICAgICAgICAgICAgICAgIDw8IDAKKyAgICAgICAgfCBjb250ZXh0Lmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gICAgICAgICAgICAgICAgIDw8IDEKKyAgICAgICAgfCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIKKyAgICAg
ICAgfCBjb250ZXh0LnVzZVN5c3RlbUFwcGVhcmFuY2UgICAgICAgICAgICAgICAgICAgICAgIDw8
IDMKKyAgICAgICAgfCBjb250ZXh0LmFzcGVjdFJhdGlvRW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDQKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yQ29udHJhc3RFbmFibGVkICAgICAg
ICAgICAgICAgICAgICAgIDw8IDUKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yRmlsdGVyRW5hYmxl
ZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDYKKyAgICAgICAgfCBjb250ZXh0LmNvbG9yTWl4
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDcKKyAgICAgICAgfCBjb250ZXh0
LmNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQgICAgICAgICAgICAgICAgIDw8IDgKKyAgICAgICAg
fCBjb250ZXh0LmNvbnRhaW5tZW50RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIDw8IDkK
KyAgICAgICAgfCBjb250ZXh0LmNzc0NvbG9yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDEwCisgICAgICAgIHwgY29udGV4dC5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgICAg
ICAgICAgICAgICAgICA8PCAxMQorICAgICAgICB8IGNvbnRleHQuaW5kaXZpZHVhbFRyYW5zZm9y
bVByb3BlcnRpZXNFbmFibGVkICAgICAgPDwgMTIKKyNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQorICAgICAgICB8IGNvbnRleHQubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQgICAgICAgPDwgMTMKKyNlbmRpZgorICAgICAgICB8IGNvbnRleHQub3ZlcnNjcm9s
bEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgMTQKKyAgICAgICAgfCBjb250ZXh0
LnJlbGF0aXZlQ29sb3JTeW50YXhFbmFibGVkICAgICAgICAgICAgICAgIDw8IDE1CisgICAgICAg
IHwgY29udGV4dC5zY3JvbGxCZWhhdmlvckVuYWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAx
NgorICAgICAgICB8IGNvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkICAgICAgICAg
ICAgICAgPDwgMTcKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgICAgICB8IGNvbnRl
eHQudGV4dEF1dG9zaXppbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgPDwgMTgKKyNlbmRp
ZgorI2lmIEVOQUJMRShDU1NfVFJBTlNGT1JNX1NUWUxFX09QVElNSVpFRF8zRCkKKyAgICAgICAg
fCBjb250ZXh0LnRyYW5zZm9ybVN0eWxlT3B0aW1pemVkM0RFbmFibGVkICAgICAgICAgIDw8IDE5
CisjZW5kaWYKKyAgICAgICAgfCBjb250ZXh0LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IgIDw8IDIwCisgICAgICAgIHwgY29udGV4dC5mb2N1c1Zpc2libGVFbmFibGVk
ICAgICAgICAgICAgICAgICAgICAgICA8PCAyMQorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCisgICAgICAgIHwgY29udGV4dC5hdHRhY2htZW50RW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAyMgorI2VuZGlmCisgICAgICAgIHwgY29udGV4dC5tb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyMzsgLy8gVGhpcyBpcyBtdWx0aXBsZSBiaXRz
LCBzbyBrZWVwIGl0IGxhc3QuCisgICAgYWRkKGhhc2hlciwgY29udGV4dC5iYXNlVVJMLCBjb250
ZXh0LmNoYXJzZXQsIGJpdHMpOworfQorCiBib29sIENTU1BhcnNlckNvbnRleHQ6OmlzUHJvcGVy
dHlSdW50aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
Q29udGV4dC5oCmluZGV4IDhlMGI4N2Y3YWE3NjBlNmVmMjc2YmQ2MzJlZmZiMGFmYWQ5MWU2ZTYu
LjQ5NTYwZDgxYzg1OTBmOTBmZGJhNTRlYTUyMTU1MmNjZGRjNGQwZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oCkBAIC0zMCwyMCArMzAsMTYgQEAK
ICNpbmNsdWRlICJTdHlsZVJ1bGVUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUg
PHd0Zi9VUkxIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29u
dGV4dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBVUkwgYmFz
ZVVSTDsKICAgICBTdHJpbmcgY2hhcnNldDsKQEAgLTU3LDggKzUzLDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKICAgICBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotCiAgICAgLy8gU2V0dGluZ3MuCiAgICAgYm9vbCBhc3BlY3RS
YXRpb0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgY29sb3JDb250cmFzdEVuYWJsZWQgeyBm
YWxzZSB9OwpAQCAtOTAsNzAgKzg0LDI5IEBAIHB1YmxpYzoKICAgICBib29sIGF0dGFjaG1lbnRF
bmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCi0gICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdDsKKyAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUsIGNv
bnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJD
b250ZXh0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOworICAgIGJvb2wgaXNQcm9wZXJ0eVJ1
bnRpbWVEaXNhYmxlZChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBVUkwgY29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkgY29uc3Q7CiB9OwogCiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKK3ZvaWQgYWRkKEhhc2hlciYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKKwogV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwogCiBzdHJ1Y3QgQ1NTUGFyc2Vy
Q29udGV4dEhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gdXNl
IFdURjo6SGFzaGVyLgotCi0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSAwOwotICAgICAgICBpZiAo
IWtleS5iYXNlVVJMLmlzTnVsbCgpKQotICAgICAgICAgICAgaGFzaCBePSBXVEY6OlVSTEhhc2g6
Omhhc2goa2V5LmJhc2VVUkwpOwotICAgICAgICBpZiAoIWtleS5jaGFyc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaChrZXkuY2hhcnNldCk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBiaXRzID0ga2V5LmlzSFRNTERvY3VtZW50ICAgICAgICAg
ICAgICAgICAgPDwgMAotICAgICAgICAgICAgJiBrZXkuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biAgICAgICAgICAgICAgICAgPDwgMQotICAgICAgICAgICAgJiBrZXkuaXNDb250ZW50T3BhcXVl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMgotICAgICAgICAgICAgJiBrZXkudXNlU3lz
dGVtQXBwZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgICAgPDwgMwotICAgICAgICAgICAgJiBr
ZXkuYXNwZWN0UmF0aW9FbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNAotICAgICAg
ICAgICAgJiBrZXkuY29sb3JDb250cmFzdEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgPDwg
NQotICAgICAgICAgICAgJiBrZXkuY29sb3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgNgotICAgICAgICAgICAgJiBrZXkuY29sb3JNaXhFbmFibGVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgNwotICAgICAgICAgICAgJiBrZXkuY29uc3RhbnRQcm9wZXJ0aWVz
RW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgOAotICAgICAgICAgICAgJiBrZXkuY29udGFpbm1l
bnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgOQotICAgICAgICAgICAgJiBrZXku
Y3NzQ29sb3I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMTAKLSAgICAgICAg
ICAgICYga2V5LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8IDEx
Ci0gICAgICAgICAgICAmIGtleS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQg
ICAgICA8PCAxMgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgICAg
ICAgICAmIGtleS5sZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8PCAx
MwotI2VuZGlmCi0gICAgICAgICAgICAmIGtleS5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAg
ICAgICAgICAgICAgICA8PCAxNAotICAgICAgICAgICAgJiBrZXkucmVsYXRpdmVDb2xvclN5bnRh
eEVuYWJsZWQgICAgICAgICAgICAgICAgPDwgMTUKLSAgICAgICAgICAgICYga2V5LnNjcm9sbEJl
aGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE2Ci0gICAgICAgICAgICAmIGtl
eS5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQgICAgICAgICAgICAgICA8PCAxNwotI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgICAgICAmIGtleS50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAxOAotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19U
UkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVEXzNEKQotICAgICAgICAgICAgJiBrZXkudHJhbnNmb3Jt
U3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQgICAgICAgICAgPDwgMTkKLSNlbmRpZgotICAgICAgICAg
ICAgJiBrZXkudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwgMjAK
LSAgICAgICAgICAgICYga2V5LmZvY3VzVmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAgICAg
ICAgIDw8IDIxCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICAgICAgICAgICYg
a2V5LmF0dGFjaG1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCi0jZW5k
aWYKLSAgICAgICAgICAgICYga2V5Lm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDIzOyAvLyBLZWVwIHRoaXMgbGFzdC4KLSAgICAgICAgaGFzaCBePSBXVEY6Omlu
dEhhc2goYml0cyk7Ci0gICAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29t
cHV0ZUhhc2goY29udGV4dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJldHVybiBhID09IGI7
IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsK
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQ+IHsKICAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4
dCYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90LmJhc2VVUkwpIFVSTChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBX
ZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuYmFzZVVSTC5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGM3YTcwOWEwYTI0MTI0NDNkNDNmMTdmNmZhNWYzMTJkOTliMGEzY2MuLjI3
MmEyYjBlN2Q1MzcyNWE2ZDU0MzljOTI1NzVhYWZkMDliZWIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgRm9ybUVs
ZW1lbnRLZXlIYXNoOjpoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkpCiAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoRm9ybUVsZW1lbnRLZXkpPigma2V5KTsK
IH0KIAotc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9ybUVsZW1lbnRLZXk+IHsKK3N0cnVjdCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHMg
OiBIYXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3Qp
IEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IDgzZWRkOWU5
MjU0OWZhYWVmMTI1MDVlMTUzZWNmNzJmZWI5MzFmYTguLmNlYjg0ZTk2MDIwZDg4OGVmNTZhNjJk
NGJhYWU0MzY1ZjAzOTExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAogI2lmIEVOQUJMRShUSFVOREVSKQogI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBl
cy5oIgpAQCAtMjA1LDggKzIwMyw2IEBAIHByaXZhdGU6CiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNl
c3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKLXB1YmxpYzoKLQogcHJvdGVjdGVk
OgogICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKICAgICBj
b25zdCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0YW5jZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCAwODcwMmQ0Yzc5MGNiOTYzYWJhMTRhNzI5NzE4MjVmNGMwNDJmZDc5Li5i
MTFhODc2OWU4NjBiOTNiMDlkNzMyNDFlNWJlYmQ1ODA4YjYyYjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTM1LDYzICs1MzUsMzIgQEAgdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEEKIH0KICNlbmRpZgogCi1jbGFzcyBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleSB7Ci1wdWJsaWM6Ci0gICAgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGUsIFVDaGFyMzIgY2hhcmFjdGVyLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9u
dCkKLSAgICAgICAgOiBsb2NhbGUobG9jYWxlKQotICAgICAgICAsIGNoYXJhY3RlcihjaGFyYWN0
ZXIpCi0gICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9ybUZvbnQgPT0gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcykKLSAgICB7Ci0gICAgfQotCi0gICAgQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IGNoYXJh
Y3RlcigtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlciA9PSAtMTsgfQotCi0gICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhl
ci5jaGFyYWN0ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZv
bnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRy
dWU7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eUhhc2g7Ci0KK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CiAgICAgQXRvbVN0cmlu
ZyBsb2NhbGU7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CiAgICAgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCB7IGZhbHNlIH07CiB9OwogCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleSYga2V5KQotICAgIHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAg
ICAgIGhhc2hlci5hZGQoa2V5LmNoYXJhY3Rlcik7Ci0gICAgICAgIGhhc2hlci5hZGQoa2V5Lmlz
Rm9yUGxhdGZvcm1Gb250KTsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkubG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsK
LSAgICB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikKK3sKKyAgICByZXR1cm4g
YS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5p
c0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250OworfQogCitzdHJ1Y3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXku
bG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCitz
dHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAoTm90
TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7
IH0gfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsg
fQorfTsKKwogLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhN
RTogU2hvdWxkbid0IHRoZXNlIGJlIFdlYWtQdHJzPwotdHlwZWRlZiBIYXNoTWFwPENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBXVEY6
OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4+IENoYXJhY3Rl
ckZhbGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxs
YmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKKy8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2lu
ZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgordXNp
bmcgQ2hhcmFjdGVyRmFsbGJhY2tNYXAgPSBIYXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2hUcmFpdHM+OwordXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8Y29u
c3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPjsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNjA4LDEyICs1NzcsOCBAQCBSZWZQ
dHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hh
cmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24o
KS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxh
dGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAx
KTsKICAgICB9CiAKLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwot
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKFdURk1vdmUoa2V5KSwgbnVsbHB0cik7Ci0KLSAgICBGb250KiYgZmFsbGJhY2tGb250
ID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJh
Y2tGb250KSB7CisgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IGRlc2Ny
aXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0g
SXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vIH07CisgICAgcmV0dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsmXSB7CiAgICAgICAgIFVDaGFyIGNvZGVV
bml0c1syXTsKICAgICAgICAgdW5zaWduZWQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBpZiAo
VV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNjI0LDEzICs1ODksMTEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rlciwg
Y29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQotCi0gICAg
ICAgIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENh
Y2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5n
ZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxsYmFja0ZvbnQ7CisgICAgICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0Zv
clBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0
cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZvbnQpCisgICAgICAgICAg
ICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBmb250OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBGb250OjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKaW5kZXggYzdkYTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4u
NjUzYjMzOGI3YzM0MjU2MjcyMjQ5NjExZTI3MDFhYzVkMjYzZTk2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtNjQsNyArNjQsNyBAQCBzdHJ1Y3QgR2x5cGhE
YXRhOwogCiBlbnVtIEZvbnRWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNt
YWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlh
bnQgfTsKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0
Y2ggfTsKLWVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9
OworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAKICNp
ZiBVU0UoQ09SRV9URVhUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0
YWJsZVRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAppbmRleCBlZGYyZmUwNDczYWYzYTg2MDYxNTMxNzQzODMyMWJkOWNhOWUwMjg2Li5mZGQ1
NTQ4ZjBmNTRjMWFjYTdmYWNhZWViODgwNmU4MTI0MGI5YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDg4ICs0Nyw2OCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLXN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV9mYW1pbHkoZmFtaWx5KQotICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCi0gICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHQpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRp
b25LZXkodCkKLSAgICB7IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb25LZXkg
IT0gb3RoZXIubV9mb250RGVzY3JpcHRpb25LZXkKLSAgICAgICAgICAgIHx8IG1fZm9udEZhY2VG
ZWF0dXJlcyAhPSBvdGhlci5tX2ZvbnRGYWNlRmVhdHVyZXMKLSAgICAgICAgICAgIHx8IG1fZm9u
dEZhY2VDYXBhYmlsaXRpZXMgIT0gb3RoZXIubV9mb250RmFjZUNhcGFiaWxpdGllcykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fZmFtaWx5LmltcGwoKSA9PSBvdGhl
ci5tX2ZhbWlseS5pbXBsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KG1fZmFtaWx5LmlzTnVsbCgpIHx8IG90aGVyLm1fZmFtaWx5LmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkpOwotICAgIH0KK0Zv
bnRGYW1pbHlOYW1lOjpGb250RmFtaWx5TmFtZSgpID0gZGVmYXVsdDsKIAotICAgIEZvbnREZXNj
cmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5
OwotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwotICAgIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKLX07
CitpbmxpbmUgRm9udEZhbWlseU5hbWU6OkZvbnRGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCisgICAgOiBtX25hbWUgeyBuYW1lIH0KK3sKK30KIAotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZm9udEtleSkKLSAgICB7Ci0gICAgICAgIEludGVnZXJIYXNo
ZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZh
bWlseU5hbWVIYXNoKGZvbnRLZXkubV9mYW1pbHkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChmb250
S2V5Lm1fZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgICAgICBoYXNoZXIu
YWRkKGZvbnRLZXkubV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7Ci0gICAgICAgIGlmIChhdXRv
IHdlaWdodCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAg
ICAgICBoYXNoZXIuYWRkKHdlaWdodC0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKLSAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmb250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRp
ZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aC0+dW5pcXVlVmFsdWUoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gc2xvcGUgPSBmb250S2V5Lm1f
Zm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZChzbG9w
ZS0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgcmV0dXJuIGhh
c2hlci5oYXNoKCk7Ci0gICAgfQoraW5saW5lIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRGYW1pbHlO
YW1lOjpzdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7
Ci0gICAgfQoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250RmFtaWx5
TmFtZSYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGhhc2ggdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIG5hbWUgaW5zdGVhZCBvZiBoYXNoaW5nIGEgaGFzaC4KKyAgICBh
ZGQoaGFzaGVyLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChuYW1lLnN0
cmluZygpKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseU5h
bWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAoYS5zdHJpbmco
KS5pc051bGwoKSB8fCBiLnN0cmluZygpLmlzTnVsbCgpKSA/IGEuc3RyaW5nKCkgPT0gYi5zdHJp
bmcoKSA6IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoYS5zdHJp
bmcoKSwgYi5zdHJpbmcoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dEZhbWlseU5hbWUmIGEsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CiAKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeworICAgIEZv
bnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKKyAgICBGb250RmFtaWx5TmFtZSBmYW1p
bHk7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBmZWF0dXJlczsKKyAgICBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKK307CisKK3N0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGIpCit7CisgICAgcmV0dXJuIGEuZGVzY3JpcHRpb25LZXkgPT0g
Yi5kZXNjcmlwdGlvbktleSAmJiBhLmZhbWlseSA9PSBiLmZhbWlseSAmJiBhLmZlYXR1cmVzID09
IGIuZmVhdHVyZXMgJiYgYS5jYXBhYmlsaXRpZXMgPT0gYi5jYXBhYmlsaXRpZXM7Cit9CisKK3N0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuZmFtaWx5LCBrZXkuZmVhdHVyZXMsIGtleS5j
YXBhYmlsaXRpZXMudGllZCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAogc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBzbG90KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5o
YXNoKCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0s
IHsgfSwgeyB9LCB7IH0gfTsKICAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgcmV0dXJuIGtleS5kZXNj
cmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogICAgIH0KK307CiAKK3N0cnVj
dCBGb250RGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIApAQCAtMTQxLDcgKzEy
MSw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRy
YWl0czxGb250UGxhdGZvcm1EYXRhPiB7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQogICAgIHsKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgdmFsdWUpCiAgICAgewpAQCAtMTc3LDE0ICsxNTcs
MTQgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGdsb2Jh
bEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjp+Rm9udENhY2hlKCkgPSBkZWZhdWx0OwotCiBG
b250Q2FjaGU6OkZvbnRDYWNoZSgpCiAgICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogICAgICwgbV9mb250RGF0YUNhY2hl
cyhtYWtlVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVzPigpKQogewogfQogCitGb250Q2FjaGU6On5G
b250Q2FjaGUoKSA9IGRlZmF1bHQ7CisKIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBp
ZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGZhbWlseU5hbWUpKQpAQCAtMjI1LDggKzIwNSw4IEBAIE9wdGlvbmFsPEFTQ0lJTGl0
ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKLSAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y2FjaGVkRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwpAQCAtMjQ2LDI0ICsy
MjYsMjMgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgcGxhdGZvcm1Jbml0KCk7
CiAgICAgfSk7CiAKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZhbWlseU5hbWUs
IGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMp
OworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgeyBmb250RGVzY3JpcHRpb24sIHsg
ZmFtaWx5TmFtZSB9LCBmZWF0dXJlcyA/ICpmZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3Mg
eyB9LCBjYXBhYmlsaXRpZXMgfTsKIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNh
Y2hlcy0+cGxhdGZvcm1EYXRhLmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250
RmFjZUNhcGFiaWxpdGllcyk7Ci0KKyAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRm
b3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZlYXR1cmVzLCBjYXBhYmlsaXRp
ZXMpOwogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7
Ci0gICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUg
YSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKLSAgICAg
ICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRj
LiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KKyAgICAg
ICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiBXZSBoYXZlIGEgc21hbGwg
c2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCisgICAgICAgICAgICAv
LyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gVHJ5IGxv
b2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KICAgICAgICAgICAgIGlm
IChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUg
PSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5h
bWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKLSAgICAg
ICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0
aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKLSAgICAgICAgICAgICAgICAvLyBiZWVuIGlu
dmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKCkuCisgICAgICAgICAgICAgICAgYXV0byogYWx0ZXJuYXRlRGF0YSA9IGNhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZmVhdHVyZXMsIGNh
cGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUga2V5IGlu
IHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQor
ICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxs
IHRvIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9IG1fZm9u
dERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5maW5kKGtleSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5lbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKQotICAgICAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KCpmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFsdGVy
bmF0ZURhdGEpCisgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9u
dFBsYXRmb3JtRGF0YT4oKmFsdGVybmF0ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjgyLDEyICsyNjEsMTIgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
Ojpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKLSAgICBpZiAo
YXV0byogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24sIGZhbWlseSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkpCisgICAgaWYgKGF1dG8qIHBsYXRmb3JtRGF0YSA9IGNhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGZlYXR1cmVzLCBjYXBh
YmlsaXRpZXMsIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkpCiAgICAgICAgIHJldHVybiBmb250Rm9y
UGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0z
NzUsMzAgKzM1NCwxNSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVu
c2lnbmVkIHB1cmdlQ291bnQpCiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNh
Y2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewotICAgIGlmIChhLmZv
bnREZXNjcmlwdGlvbktleSAhPSBiLmZvbnREZXNjcmlwdGlvbktleSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwg
YS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHNpemUgPSBhLmZhbWlsaWVzLnNpemUoKTsKLSAg
ICBpZiAoc2l6ZSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGEuZmFtaWxpZXNbaV0s
IGIuZmFtaWxpZXNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mb250RGVzY3JpcHRpb25LZXkgPT0gYi5mb250RGVz
Y3JpcHRpb25LZXkKKyAgICAgICAgJiYgYS5mb250U2VsZWN0b3JJZCA9PSBiLmZvbnRTZWxlY3Rv
cklkCisgICAgICAgICYmIGEuZm9udFNlbGVjdG9yVmVyc2lvbiA9PSBiLmZvbnRTZWxlY3RvclZl
cnNpb24KKyAgICAgICAgJiYgYS5mYW1pbGllcyA9PSBiLmZhbWlsaWVzOwogfQogCiB1bnNpZ25l
ZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBrZXkpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBoYXNoIHRoZSBrZXkgYW5kIHRoZSBmYW1p
bHkgbmFtZSBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIG1ha2luZyBhIGhhc2ggb3V0IG9mIG90aGVy
IGhhc2hlcy4KLSAgICBIYXNoZXIgaGFzaGVyOwotICAgIGFkZChoYXNoZXIsIGtleS5mb250RGVz
Y3JpcHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRTZWxl
Y3RvcklkKTsKLSAgICBhZGQoaGFzaGVyLCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBrZXkuZmFtaWxpZXMpCi0gICAgICAgIGFkZChoYXNoZXIsIGZh
bWlseS5pc051bGwoKSA/IDAgOiBXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lSGFzaChmYW1pbHkpKTsKLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICByZXR1
cm4gY29tcHV0ZUhhc2goa2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5LmZvbnRTZWxlY3Rvcklk
LCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiwga2V5LmZhbWlsaWVzKTsKIH0KIAogdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKQEAgLTQ1NiwxMSArNDIwLDExIEBA
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpKTsKKyAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihGb250Q2FzY2FkZUNhY2hlRW50cnkgeyBXVEZNb3ZlKGtleSksIEZvbnRDYXNj
YWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpIH0pOwogICAgIFJlZjxGb250
Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHBy
dW5lQ291bnRlcjsKICAgICAvLyBSZWZlcmVuY2VkIEZvbnRDYXNjYWRlRm9udHMgd291bGQgZXhp
c3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgogICAgIGlmICgh
KCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCkBAIC01MTUsMTUg
KzQ3OSwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAjZW5kaWYKICAgICBpbnZh
bGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogCi0gICAgbV9nZW5lcmF0aW9uKys7Ci0KLSAgICBW
ZWN0b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVudHM7Ci0gICAgY2xpZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fY2xpZW50cy5zaXplKCkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fY2xp
ZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgY2xpZW50cy51bmNoZWNrZWRBcHBlbmQoKippdCk7CisgICAgKyttX2dlbmVyYXRpb247
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xpZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2xpZW50c1tpXS0+Zm9udENhY2hlSW52YWxpZGF0ZWQoKTsKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFJlZlB0cjxGb250U2VsZWN0b3I+PihtX2NsaWVudHMp
KQorICAgICAgICBjbGllbnQtPmZvbnRDYWNoZUludmFsaWRhdGVkKCk7CiAKICAgICBwdXJnZUlu
YWN0aXZlRm9udERhdGEoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggNzUwMWMyZGYwZGYyM2YwNDhjNzAwYWFjMDBiZjdjMmFiMjc5ODgz
Ny4uNGViYTZmY2YyZjdjODA0OGZiODNkNjU1NGI4ZmQ2YWY4N2MxYWM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTY0LDE3ICs2NCwx
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250Q2Fz
Y2FkZTsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgRm9udDsKLWVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90OwogCi0jaWYgUExBVEZPUk0oV0lOKQotI2lm
IFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLXR5cGVkZWYgSU1MYW5nRm9udExpbmsyIElNTGFuZ0Zv
bnRMaW5rVHlwZTsKLSNlbHNlCi10eXBlZGVmIElNTGFuZ0ZvbnRMaW5rIElNTGFuZ0ZvbnRMaW5r
VHlwZTsKK2VudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiBib29sOworCisjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdGb250TGlua1R5
cGUgPSBJTUxhbmdGb250TGluazI7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShJTUxBTkdfRk9OVF9MSU5LMikKK3VzaW5nIElNTGFuZ0ZvbnRMaW5rVHlwZSA9IElNTGFuZ0Zv
bnRMaW5rOwogI2VuZGlmCiAKIC8vIFRoaXMga2V5IGNvbnRhaW5zIHRoZSBGb250RGVzY3JpcHRp
b24gZmllbGRzIG90aGVyIHRoYW4gZmFtaWx5IHRoYXQgbWF0dGVyIHdoZW4gZmV0Y2hpbmcgRm9u
dERhdGFzIChwbGF0Zm9ybSBmb250cykuCkBAIC0xMTIsMTcgKzExMyw3IEBAIHN0cnVjdCBGb250
RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7IH0KIAotICAgIGlubGluZSB1bnNpZ25lZCBj
b21wdXRlSGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBIYXNoZXIgaGFzaGVyOwotICAgICAg
ICBhZGQoaGFzaGVyLCBtX3NpemUpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0LnRpZWQoKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fbG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9mbGFncyk7Ci0gICAgICAgIGFkZChoYXNo
ZXIsIG1fZmVhdHVyZVNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fdmFy
aWF0aW9uU2V0dGluZ3MuaGFzaCgpKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0g
ICAgfQorICAgIGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250RGVzY3JpcHRpb25L
ZXkmKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbWFr
ZUZsYWdzS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xNjUsMjMg
KzE1NiwzNiBAQCBwcml2YXRlOgogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlv
blNldHRpbmdzOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBG
b250RGVzY3JpcHRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkubV9zaXplLCBr
ZXkubV9mb250U2VsZWN0aW9uUmVxdWVzdCwga2V5Lm1fZmxhZ3MsIGtleS5tX2xvY2FsZSwga2V5
Lm1fZmVhdHVyZVNldHRpbmdzLCBrZXkubV92YXJpYXRpb25TZXR0aW5ncyk7Cit9CisKIHN0cnVj
dCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBGb250RGVzY3JpcHRpb25LZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBrZXkuY29t
cHV0ZUhhc2goKTsKLSAgICB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udERl
c2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CiAKLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGEsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbktleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQorLy8g
VGhpcyBjbGFzcyBob2xkcyB0aGUgbmFtZSBvZiBhIGZvbnQgZmFtaWx5LCBhbmQgZGVmaW5lcyBo
YXNoaW5nIGFuZCA9PSBvZiB0aGlzIG5hbWUgdG8KKy8vIHVzZSB0aGUgcnVsZXMgZm9yIGZvbnQg
ZmFtaWx5IG5hbWVzIGluc3RlYWQgb2YgdXNpbmcgc3RyYWlnaHQgc3RyaW5nIGNvbXBhcmlzb24u
CitjbGFzcyBGb250RmFtaWx5TmFtZSB7CitwdWJsaWM6CisgICAgRm9udEZhbWlseU5hbWUoKTsK
KyAgICBGb250RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CisgICAgY29uc3QgQXRvbVN0
cmluZyYgc3RyaW5nKCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0
IEZvbnRGYW1pbHlOYW1lJik7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Citwcml2YXRlOgorICAgIEF0b21TdHJpbmcgbV9uYW1l
OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiwgY29uc3QgRm9u
dEZhbWlseU5hbWUmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFtaWx5TmFtZSYsIGNv
bnN0IEZvbnRGYW1pbHlOYW1lJik7CisKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0
aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0
b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPEZvbnRGYW1pbHlOYW1lLCAz
PiBmYW1pbGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JWZXJzaW9uOwogfTsKQEAgLTE4OSwyNiArMTkzLDIyIEBAIHN0cnVjdCBGb250
Q2FzY2FkZUNhY2hlS2V5IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5JiwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYpOwogCiBzdHJ1Y3QgRm9udENhc2NhZGVD
YWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBG
b250Q2FzY2FkZUNhY2hlRW50cnkoRm9udENhc2NhZGVDYWNoZUtleSYmIGtleSwgUmVmPEZvbnRD
YXNjYWRlRm9udHM+JiYgZm9udHMpCi0gICAgICAgIDoga2V5KFdURk1vdmUoa2V5KSkKLSAgICAg
ICAgLCBmb250cyhXVEZNb3ZlKGZvbnRzKSkKLSAgICB7IH0KKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKICAgICBSZWY8
Rm9udENhc2NhZGVGb250cz4gZm9udHM7CiB9OwogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNj
YWRlQ2FjaGVLZXkmKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNo
ZUtleT4gewotICAgIHN0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5IGVtcHR5VmFs
dWUoKSB7IHJldHVybiB7IH07IH0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBzbG90LmZvbnRTZWxlY3Rv
cklkID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYg
c2xvdCkgeyByZXR1cm4gc2xvdC5mb250U2VsZWN0b3JJZCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7IH0KK3N0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0
cyA6IEhhc2hUcmFpdHM8Rm9udENhc2NhZGVDYWNoZUtleT4geworICAgIHN0YXRpYyBGb250Q2Fz
Y2FkZUNhY2hlS2V5IGVtcHR5VmFsdWUoKSB7IHJldHVybiB7IH07IH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udENhc2NhZGVDYWNoZUtleSYgc2xvdCkgeyBuZXcg
KE5vdE51bGwsICZzbG90KSBGb250Q2FzY2FkZUNhY2hlS2V5IHsgRm9udERlc2NyaXB0aW9uS2V5
IHsgV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUgfSwgeyB9LCB7IH0sIHsgfSB9OyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5
KSB7IHJldHVybiBrZXkuZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KIH07CiAKIHVzaW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRl
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2Fz
Y2FkZUNhY2hlS2V5SGFzaCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwpAQCAtMjI1
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICB+Rm9udENhY2hlKCk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBQ
cmVmZXJDb2xvcmVkRm9udCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgUmVmUHRyPEZvbnQ+IHN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBJc0ZvclBsYXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CkBAIC0yMzUsNiArMjM1LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEZvbnRBbGxvd2xpc3QoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5r
VHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFs
aXplKCk7CkBAIC0zMDEsMTEgKzMwMiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJik7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFs
bHkgYmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0
YSogY2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogPSBudWxscHRyLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
IGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0gKHVuY2xlYXIgd2hpY2ggZnVuY3Rpb25zIHRoaXMgY29tbWVu
dCBhcHBsaWVzIHRvKS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKTsKICAgICAKICAgICBzdGF0aWMgT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKQEAgLTMzMiw2ICszMzIsNyBAQCBwcml2YXRlOgogCiAgICAg
ZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKICNlbmRpZgorCiAgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiB9OwogCkBAIC0zNDgsNyArMzQ5LDYgQEAgaW5saW5lIHZvaWQgRm9udENh
Y2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAKICNlbmRpZgogCi0KIGlubGlu
ZSBib29sIEZvbnRDYWNoZTo6UHJld2FybUluZm9ybWF0aW9uOjppc0VtcHR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2VlbkZhbWlsaWVzLmlzRW1wdHkoKSAmJiBmb250TmFtZXNSZXF1aXJpbmdT
eXN0ZW1GYWxsYmFjay5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKaW5kZXggYWRhZmYzYzE0NmRjNzIz
NWZmMDU5NmQ0ZmM0NzY3OTc1YjE1ODIxMy4uNjA3NzBjZDY0YzM5MThiMDAwNTFlNzQ1N2JiZWY0
Mzc0ZjJhZWMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdlbmVyaWNGYW1pbGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIFVTY3JpcHRDb2RlIHVzZXMgLTEgYW5kIDAgZm9yIFVTY3JpcHRJbnZhbGlk
Q29kZSBhbmQgVVNjcmlwdENvbW1vbi4KIC8vIFdlIG5lZWQgdG8gdXNlIC0yIGFuZCAtMyBmb3Ig
ZW1wdHkgdmFsdWUgYW5kIGRlbGV0ZWQgdmFsdWUuCi1zdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKK3N0cnVjdCBVU2NyaXB0Q29kZUhh
c2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVy
biAtMjsgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShpbnQmIHNsb3Qp
IHsgc2xvdCA9IC0zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgKaW5kZXggZTYyMzM1MDRkOTMxMDEzNDIx
MjJiN2JjMmM3MDNmZTUyY2Y3NGFhMy4uNjZmOGZkYzE3NWI2YTMxMDk3MTg2ZjJkNGJjNzcwMWY3
NWI0NGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApAQCAtMjkxLDYgKzI5MSwxMSBAQCBjb25zdGV4
cHIgRm9udFNlbGVjdGlvblZhbHVlIHVsdHJhRXhwYW5kZWRTdHJldGNoVmFsdWUoKQogICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUgeyAyMDAgfTsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBGb250U2VsZWN0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIGFk
ZChoYXNoZXIsIHZhbHVlLnJhd1ZhbHVlKCkpOworfQorCiAvLyBbSW5jbHVzaXZlLCBJbmNsdXNp
dmVdCiBzdHJ1Y3QgRm9udFNlbGVjdGlvblJhbmdlIHsKICAgICB1c2luZyBWYWx1ZSA9IEZvbnRT
ZWxlY3Rpb25WYWx1ZTsKQEAgLTMzNCwxNCArMzM5LDYgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
YW5nZSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQgPj0gbWluaW11bSAmJiB0YXJnZXQgPD0gbWF4
aW11bTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBuYW1lIGlzIG5vdCBzbyBncmVhdC4g
TW92ZSB0aGlzIGludG8gdGhlIGFkZCBmdW5jdGlvbiBiZWxvdwotICAgIC8vIG9uY2Ugd2UgbW92
ZSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIGZyb20gSW50ZWdlckhhc2hlciB0byBIYXNo
ZXIsCi0gICAgLy8gYW5kIHRoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGhhdmUgYSBuYW1lLgotICAg
IGNvbnN0ZXhwciB1aW50MzJfdCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbWluaW11bS5yYXdWYWx1ZSgpIDw8IDE2IHwgbWF4aW11bS5yYXdWYWx1ZSgpOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogCkBAIC0zNzcsNyArMzc0LDcgQEAgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblJh
bmdlPiBGb250U2VsZWN0aW9uUmFuZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiBpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRTZWxlY3Rpb25SYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgYWRkKGhhc2hlciwgcmFuZ2UudW5pcXVlVmFsdWUoKSk7CisgICAgYWRkKGhh
c2hlciwgcmFuZ2UubWluaW11bSwgcmFuZ2UubWF4aW11bSk7CiB9CiAKIHN0cnVjdCBGb250U2Vs
ZWN0aW9uUmVxdWVzdCB7CkBAIC0zODUsNiArMzgyLDcgQEAgc3RydWN0IEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHsKIAogICAgIFZhbHVlIHdlaWdodDsKICAgICBWYWx1ZSB3aWR0aDsKKwogICAgIC8v
IEZJWE1FOiBXZSBhcmUgdXNpbmcgYW4gb3B0aW9uYWwgaGVyZSB0byBiZSBhYmxlIHRvIGRpc3Rp
bmd1aXNoIGJldHdlZW4gYW4gZXhwbGljaXQKICAgICAvLyBvciBpbXBsaWNpdCBzbG9wZSAoZm9y
ICJpdGFsaWMiIGFuZCAib2JsaXF1ZSIpIGFuZCB0aGUgIm5vcm1hbCIgdmFsdWUgd2hpY2ggaGFz
IG5vCiAgICAgLy8gc2xvcGUuIFRoZSAiaXRhbGljIiBhbmQgIm9ibGlxdWUiIHZhbHVlcyBjYW4g
YmUgZGlzdGluZ3Vpc2hlZCBieSBsb29raW5nIGF0IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAKaW5kZXggOGE4
Yzc5N2Y2NDcxMjM5ZjFlN2NmOGE1ZDI3ZTMwNmQ1ODkzM2ViMC4uYmRlZWJlODAwMTQxNDQ4YjU4
Yzc0MmZjZmJiNGE3ZWI5NmQ0NTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuY3BwCkBAIC0yNyw0MiArMjcsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIK
IAotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10ZW1wbGF0ZSA8PgotdW5zaWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgZm9yIChhdXRvJiBm
ZWF0dXJlIDogbV9saXN0KSB7Ci0gICAgICAgIGhhc2hlci5hZGQoRm91ckNoYXJhY3RlclRhZ0hh
c2g6Omhhc2goZmVhdHVyZS50YWcoKSkpOwotICAgICAgICBoYXNoZXIuYWRkKGZlYXR1cmUudmFs
dWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotfQotCi10ZW1wbGF0ZSA8
PgotdW5zaWduZWQgRm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoKCkgY29uc3QKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihmbG9hdCkgPT0gc2l6ZW9mKGludCksICJJbnRlZ2VySGFzaGVy
IG5lZWRzIHRvIGFjY2VwdCBmbG9hdHMgdG9vIik7Ci0gICAgdW5pb24gewotICAgICAgICBmbG9h
dCBmOwotICAgICAgICBpbnQgaTsKLSAgICB9IGZsb2F0VG9JbnQ7Ci0KLSAgICBJbnRlZ2VySGFz
aGVyIGhhc2hlcjsKLSAgICBmb3IgKGF1dG8mIHZhcmlhdGlvbiA6IG1fbGlzdCkgewotICAgICAg
ICBoYXNoZXIuYWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpoYXNoKHZhcmlhdGlvbi50YWcoKSkp
OwotICAgICAgICBmbG9hdFRvSW50LmYgPSB2YXJpYXRpb24udmFsdWUoKTsKLSAgICAgICAgaGFz
aGVyLmFkZChmbG9hdFRvSW50LmkpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRm9udFZh
cmlhdGlvblNldHRpbmdzJiBpdGVtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiYgaXRlbSkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiB2
YXJpYXRpb24gPSBpdGVtLmF0KGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuaAppbmRleCBiOTIwMzRlYTIxNjg5ZmJhNGVm
NTUzY2UyZmE4ZjViYzRhYzFlMzE3Li4xMjhkYWY3ZTYzYmM3M2RhOWZlZDFjYzNhOWU0MmFjZjU2
ODkzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
VGFnZ2VkU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250VGFnZ2VkU2V0dGluZ3MuaApAQCAtMzYsMjAgKzM2LDI2IEBAIGNsYXNzIFRleHRTdHJlYW07
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBzdGQ6OmFycmF5PGNoYXIsIDQ+IEZv
bnRUYWc7Cit1c2luZyBGb250VGFnID0gc3RkOjphcnJheTxjaGFyLCA0PjsKIAotaW5saW5lIEZv
bnRUYWcgZm9udEZlYXR1cmVUYWcoY29uc3QgY2hhciBhcnJbNF0pIHsgcmV0dXJuIHt7IGFyclsw
XSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXSB9fTsgfQoraW5saW5lIEZvbnRUYWcgZm9udEZlYXR1
cmVUYWcoY29uc3QgY2hhciBjaGFyYWN0ZXJzWzRdKSB7IHJldHVybiB7eyBjaGFyYWN0ZXJzWzBd
LCBjaGFyYWN0ZXJzWzFdLCBjaGFyYWN0ZXJzWzJdLCBjaGFyYWN0ZXJzWzNdIH19OyB9CisKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjphcnJheTxjaGFyLCA0PiBhcnJheSkK
K3sKKyAgICB1aW50MzJfdCBpbnRlZ2VyID0gKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFycmF5WzBd
KSA8PCAyNCkgfCAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbMV0pIDw8IDE2KSB8IChzdGF0
aWNfY2FzdDx1aW50OF90PihhcnJheVsyXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50OF90Pihh
cnJheVszXSk7CisgICAgYWRkKGhhc2hlciwgaW50ZWdlcik7Cit9CiAKIHN0cnVjdCBGb3VyQ2hh
cmFjdGVyVGFnSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFRhZyYg
Y2hhcmFjdGVycykgeyByZXR1cm4gKGNoYXJhY3RlcnNbMF0gPDwgMjQpIHwgKGNoYXJhY3RlcnNb
MV0gPDwgMTYpIHwgKGNoYXJhY3RlcnNbMl0gPDwgOCkgfCBjaGFyYWN0ZXJzWzNdOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFRhZyYgYSwgY29uc3QgRm9udFRhZyYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRm9udFRhZyBjaGFyYWN0
ZXJzKSB7IHJldHVybiBjb21wdXRlSGFzaChjaGFyYWN0ZXJzKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKEZvbnRUYWcgYSwgRm9udFRhZyBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9Owog
Ci1zdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJh
aXRzPEZvbnRUYWc+IHsKK3N0cnVjdCBGb3VyQ2hhcmFjdGVyVGFnSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8Rm9udFRhZz4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250VGFnJiBz
bG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIEZvbnRUYWcoe3sgZmYs
IGZmLCBmZiwgZmYgfX0pOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Rm9udFRhZyYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZmLCBmZiwg
ZmYgfX0pOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRm9udFRhZyB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gRm9udFRhZyh7eyBmZiwgZmYsIGZmLCBmZiB9fSk7IH0KIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgZmYgPSBzdGF0aWNfY2FzdDxjaGFyPigw
eEZGKTsKQEAgLTU5LDE0ICs2NSwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEZv
bnRUYWdnZWRTZXR0aW5nIHsKIHB1YmxpYzoKICAgICBGb250VGFnZ2VkU2V0dGluZygpID0gZGVs
ZXRlOwotICAgIEZvbnRUYWdnZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmLCBUIHZhbHVlKTsKLSAg
ICBGb250VGFnZ2VkU2V0dGluZyhGb250VGFnJiYsIFQgdmFsdWUpOworICAgIEZvbnRUYWdnZWRT
ZXR0aW5nKEZvbnRUYWcsIFQgdmFsdWUpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvbnRUYWdnZWRTZXR0aW5nPFQ+JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb250VGFnZ2VkU2V0dGluZzxU
PiYgb3RoZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udFRhZyYgdGFnKCkgY29uc3QgeyByZXR1
cm4gbV90YWc7IH0KKyAgICBGb250VGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAg
ICAgVCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBib29sIGVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiB2YWx1ZSgpOyB9CiAKQEAgLTc5LDE5ICs4NCwxMiBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9u
dFRhZ2dlZFNldHRpbmcoY29uc3QgRm9udFRhZyYgdGFnLCBUIHZhbHVlKQorRm9udFRhZ2dlZFNl
dHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKEZvbnRUYWcgdGFnLCBUIHZhbHVlKQogICAgIDog
bV90YWcodGFnKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1Gb250VGFnZ2VkU2V0dGluZzxUPjo6Rm9udFRhZ2dlZFNldHRpbmcoRm9udFRhZyYm
IHRhZywgVCB2YWx1ZSkKLSAgICA6IG1fdGFnKFdURk1vdmUodGFnKSkKLSAgICAsIG1fdmFsdWUo
dmFsdWUpCi17Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogYm9vbCBGb250VGFnZ2VkU2V0
dGluZzxUPjo6b3BlcmF0b3I9PShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNv
bnN0CiB7CkBAIC0xNTIsNiArMTUwLDExIEBAIE9wdGlvbmFsPEZvbnRUYWdnZWRTZXR0aW5nPFQ+
PiBGb250VGFnZ2VkU2V0dGluZzxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgfX0s
ICp2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgc2V0dGluZykKK3sKKyAgICBhZGQoaGFz
aGVyLCBzZXR0aW5nLnRhZygpLCBzZXR0aW5nLnZhbHVlKCkpOworfQorCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIGNsYXNzIEZvbnRUYWdnZWRTZXR0aW5ncyB7CiBwdWJsaWM6CkBAIC0yMTEsMTQg
KzIxNCwxMCBAQCBPcHRpb25hbDxGb250VGFnZ2VkU2V0dGluZ3M8VD4+IEZvbnRUYWdnZWRTZXR0
aW5nczxUPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdHlwZWRlZiBGb250VGFnZ2VkU2V0dGluZzxpbnQ+IEZvbnRGZWF0dXJlOwotdHlwZWRlZiBG
b250VGFnZ2VkU2V0dGluZ3M8aW50PiBGb250RmVhdHVyZVNldHRpbmdzOwotCi10ZW1wbGF0ZSA8
PiB1bnNpZ25lZCBGb250RmVhdHVyZVNldHRpbmdzOjpoYXNoKCkgY29uc3Q7Ci0KLXR5cGVkZWYg
Rm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PiBGb250VmFyaWF0aW9uU2V0dGluZ3M7Ci1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJik7Cit1c2luZyBGb250RmVhdHVyZSA9IEZvbnRUYWdnZWRTZXR0aW5nPGludD47
Cit1c2luZyBGb250RmVhdHVyZVNldHRpbmdzID0gRm9udFRhZ2dlZFNldHRpbmdzPGludD47Cit1
c2luZyBGb250VmFyaWF0aW9uU2V0dGluZ3MgPSBGb250VGFnZ2VkU2V0dGluZ3M8ZmxvYXQ+Owog
Ci10ZW1wbGF0ZSA8PiB1bnNpZ25lZCBGb250VmFyaWF0aW9uU2V0dGluZ3M6Omhhc2goKSBjb25z
dDsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZvbnRUYWdnZWRT
ZXR0aW5nczxmbG9hdD4mKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCmluZGV4IGJmOWQwZjg1OTI4MTQ3NjYyMzg0NTRhN2ZjMzMyZTg1NGUz
YzE3N2UuLjhlYjMyNmM0OTY0ZWNhOWUwZjNmYmM3ZTBjZjgyYjhkYTM1ZjM4OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTMyLDggKzMy
LDYgQEAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KIAotdXNpbmcgV1RGOjpwYWlySW50SGFzaDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKaW5kZXggNTNlYjVlY2E2NzQ2YTE5YTgxNmJkY2M4YTExNmM5ZGE5MDhkNWNhYi4uNzBm
NmQwOGY1M2Q3YmM4NTcwNmRhYzQ1YTA3YWIxZjA3ZGMyMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cApAQCAtNDgsMTIgKzQ4LDYgQEAKICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCi0vLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2luZyBkZWNs
YXJhdGlvbiBzaG91bGQgYmUgaW4gPHd0Zi9IYXNoRnVuY3Rpb25zLmg+LgotdXNpbmcgV1RGOjpw
YWlySW50SGFzaDsKLQotLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24g
c2hvdWxkIGJlIGluIDx3dGYvSGFzaFRyYWl0cy5oPi4KLXVzaW5nIFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaAppbmRleCA1YmYwNWQ0ZTE0MGVlNjJiMzMyMWU0ZGJlZjUxZGFjMWQxYjM0ZDk5
Li45ZmFjZWM0ZjAxNDIzZjQwNTQzNjViNGI5YjViMjdlMTcxMjE2NmQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgTW9ub3Rvbmlj
VGltZSBsYXN0QWNjZXNzVGltZTsKICAgICB9OwogCi0gICAgc3RydWN0IFN1YmltYWdlQ2FjaGVF
bnRyeVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8U3ViaW1hZ2VDYWNoZUVudHJ5PiB7
CisgICAgc3RydWN0IFN1YmltYWdlQ2FjaGVFbnRyeVRyYWl0cyA6IEhhc2hUcmFpdHM8U3ViaW1h
Z2VDYWNoZUVudHJ5PiB7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4+IEltYWdlVHJhaXRzOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAppbmRleCAwNzE3MjIxYjEzMDY5MmJmMWY4YWU0ZmY0MDc1ODYwNTZjZjAx
ZmJiLi4yYmUzOWI3OTQzNTE1MWY0ZmE4NmZjMzE0OTE0MThhMTJkMjk0OWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lm
aWNhdGlvbkNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApAQCAtMzcsNiArMzcs
OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRp
b25LZXkgeworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
cjsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OworCiAgICAgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkoKSA9IGRlZmF1bHQ7CiAKICAgICBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbktleShDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTUwLDcgKzUzLDcgQEAgc3RydWN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5nZXQoKSwgb3RoZXIuZm9u
dERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9PSBvdGhlci5mb250RGVz
Y3JpcHRpb25LZXk7CisgICAgICAgIHJldHVybiBzYWZlQ0ZFcXVhbChmb250RGVzY3JpcHRvci5n
ZXQoKSwgb3RoZXIuZm9udERlc2NyaXB0b3IuZ2V0KCkpICYmIGZvbnREZXNjcmlwdGlvbktleSA9
PSBvdGhlci5mb250RGVzY3JpcHRpb25LZXk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBvdGhlcikgY29uc3QKQEAgLTU5LDIz
ICs2MiwxNSBAQCBzdHJ1Y3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkgewogICAgIH0KIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQg
Y29tcHV0ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goV1RGOjpzYWZlQ0ZIYXNoKGZvbnREZXNjcmlwdG9yLmdldCgpKSwgZm9udERlc2NyaXB0aW9u
S2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlw
dG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2Ny
aXB0aW9uS2V5OwogfTsKIAogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5SGFzaCB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXkmIGtleSkgeyByZXR1cm4ga2V5LmNvbXB1dGVIYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYga2V5KSB7IHJldHVybiBj
b21wdXRlSGFzaChzYWZlQ0ZIYXNoKGtleS5mb250RGVzY3JpcHRvci5nZXQoKSksIGtleS5mb250
RGVzY3JpcHRpb25LZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udEZhbWls
eVNwZWNpZmljYXRpb25LZXkmIGEsIGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBGb250TWFwID0gSGFzaE1hcDxG
b250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5Pj47Cit1c2luZyBGb250TWFwID0gSGFz
aE1hcDxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+LCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+OwogCiBzdGF0aWMgRm9udE1hcCYg
Zm9udE1hcCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRleCAw
YjI3OWE3ZGVmNWNkNDg4MmE4MjVjMzY4M2JlMTM1MmIyMmU2MDdhLi45YWQxZTBjYzQ1MGYwZWFh
ODI5ODE3MzU1OTc4MDBhYzA4MDQ5NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNv
cmVUZXh0LmgKQEAgLTcyLDI3ICs3MiwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVy
OwotICAgICAgICAgICAgQVNTRVJUKCFmb250TmFtZS5pc051bGwoKSk7Ci0gICAgICAgICAgICBo
YXNoZXIuYWRkKGxvY2FsZS5leGlzdGluZ0hhc2goKSk7Ci0gICAgICAgICAgICBoYXNoZXIuYWRk
KGxvY2FsZS5pc051bGwoKSA/IDAgOiBsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICAg
ICAgaGFzaGVyLmFkZCh3ZWlnaHQpOwotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aCk7Ci0g
ICAgICAgICAgICBoYXNoZXIuYWRkKHNpemUpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKTsKLSAgICAgICAgICAg
IGhhc2hlci5hZGQoaXRhbGljKTsKLSAgICAgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGZvbnROYW1lLCBsb2NhbGUsIHdlaWdodCwg
d2lkdGgsIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBpdGFsaWMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RydWN0IENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJI
YXNoPEF0b21TdHJpbmcsIGZsb2F0PiB7Ci0gICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuaGFzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEhhc2ggeworICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FzY2Fk
ZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7IHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsg
fQorICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0
ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwogICAgICAgICB9OwogCkBAIC0xMzEsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gY29tcHV0
ZUNhc2NhZGVMaXN0KENURm9udFJlZiwgQ0ZTdHJpbmdSZWYgbG9jYWxlKTsKICAgICBzdGF0aWMg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIFN5c3RlbUZvbnRLaW5kLCBB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBIYXNoTWFwPENhc2NhZGVMaXN0UGFyYW1l
dGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4sIENhc2NhZGVMaXN0
UGFyYW1ldGVyczo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOworICAgIEhhc2hN
YXA8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+PiwgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9zeXN0ZW1Gb250Q2FjaGU7CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NlcmlmRmFtaWxpZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9zYW5zU2VyaWZlcmlmRmFtaWxpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHAKaW5kZXggYTFiOTUxNDFmZTExYjlhMDkwMjg1ZGJkY2JhMzE2OGU2ZGI5MmNhMi4uZmQ3
MWZhMDc5MmRiMjY0Yjg2MjA0YjlkZmRmZTJhN2VkNjA5ZjQxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcApAQCAtMTk1LDYgKzE5NSw5IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3Qg
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkgeworICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNj
cmlwdGlvbktleTsKKyAgICBib29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKKwogICAgIEZhbGxi
YWNrRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwogCiAgICAgRmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udENhY2hl
OjpQcmVmZXJDb2xvcmVkRm9udCBwcmVmZXJDb2xvcmVkRm9udCkKQEAgLTIyMCwxNyArMjIzLDEw
IEBAIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSB7CiAKICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRpb25LZXkuaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKTsgfQogCi0gICAgdW5zaWduZWQgY29tcHV0ZUhhc2goKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goZGVzY3JpcHRpb25LZXku
Y29tcHV0ZUhhc2goKSwgV1RGOjpEZWZhdWx0SGFzaDxib29sPjo6aGFzaChjb2xvcmVkRm9udCkp
OwotICAgIH0KLQotICAgIEZvbnREZXNjcmlwdGlvbktleSBkZXNjcmlwdGlvbktleTsKLSAgICBi
b29sIGNvbG9yZWRGb250IHsgZmFsc2UgfTsKIH07CiAKIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNj
cmlwdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZhbGxiYWNr
Rm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jb21wdXRlSGFzaCgpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkm
IGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuY29sb3Jl
ZEZvbnQpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRmFsbGJhY2tGb250RGVzY3Jp
cHRpb25LZXkmIGEsIGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5MzM1MDAxMzkwZWIzZmJiOTlhNWIuLmU5MDE3
NGJlZjQzMDMxMGEzYjllNWQ0NTgxYmZhMWFkZWVlZTA3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4
dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTE4NSwxMyArMTg1LDEzIEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RGb250ID0gc3RhdGljX2Nh
c3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250
QXR0cmlidXRlTmFtZSkpOwogICAgICAgICAgICAgQVNTRVJUKHJ1bkNURm9udCAmJiBDRkdldFR5
cGVJRChydW5DVEZvbnQpID09IENURm9udEdldFR5cGVJRCgpKTsKICAgICAgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6
Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKLSAgICAgICAgICAgIGlmICghV1RG
OjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghc2FmZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9y
bURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBm
b250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFy
dW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVj
dEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0
LmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4
IDBhNmU1YTdlOTk1NjdlNGFjMTA3YTc0ZDgxZDk5ZjBiMzE4M2I0MTIuLjQ3Yjk3MTNlZWMzZGI4
OWI1ZGU5ZWQ1ZGZlMjVmMWRkYmJjNjZlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0zMzgsOCArMzM4LDcg
QEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKIAogICAgIGlmIChoZm9udCkgewogICAgICAgICBp
ZiAoIWZhbWlseU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBGb250UGxhdGZvcm1EYXRh
KiByZXN1bHQgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHlO
YW1lKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBpZiAoYXV0byByZXN1
bHQgPSBjYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKSkKICAg
ICAgICAgICAgICAgICBmb250RGF0YSA9IGZvbnRGb3JQbGF0Zm9ybURhdGEoKnJlc3VsdCk7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
U2l6aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAppbmRl
eCBiYjgzYzM5M2U3OWUyMGEyYmI2Yzc1ZWQ3YTIzOTU5NmUxMDEwMGQzLi5iMGY5YzI3NmVhNTRi
NzZlMWQ3N2EyNjUxMTA2MjE3NTJiZGI1M2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9TaXppbmcuaApAQCAtMTA4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaFNl
dDxSZWZQdHI8VGV4dD4+IG1fYXV0b1NpemVkTm9kZXM7CiB9OwogCi1zdHJ1Y3QgVGV4dEF1dG9T
aXppbmdUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPFRleHRBdXRvU2l6aW5nS2V5PiB7
CitzdHJ1Y3QgVGV4dEF1dG9TaXppbmdUcmFpdHMgOiBIYXNoVHJhaXRzPFRleHRBdXRvU2l6aW5n
S2V5PiB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CiAg
ICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRleHRBdXRvU2l6aW5nS2V5JiBz
bG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIFRleHRBdXRvU2l6aW5nS2V5KFRleHRBdXRvU2l6
aW5nS2V5OjpEZWxldGVkKTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0
IFRleHRBdXRvU2l6aW5nS2V5JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNEZWxldGVkKCk7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4
IDBiOGU2MWM4Zjc1M2Y0ZjdiM2YwMmM2NDM2N2Q0MzQ0ZmY5MzRhODkuLmNmMjJjZWNiM2FmMzEx
YjI1M2E0N2EyZDhiNGVhMTY3NGE1NjNlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtNDQ5LDEwICs0NDksNyBAQCBib29sIFJlbmRl
clN0eWxlOjpkZXNjZW5kYW50QWZmZWN0aW5nTm9uSW5oZXJpdGVkUHJvcGVydGllc0VxdWFsKGNv
bnN0IFJlbmRlclN0eQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKLSAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAg
ICBoYXNoZXIuYWRkKEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChmb250LmZvbnREZXNj
cmlwdGlvbigpLmZpcnN0RmFtaWx5KCkpKTsKLSAgICBoYXNoZXIuYWRkKGZvbnQuZm9udERlc2Ny
aXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAg
ICByZXR1cm4gY29tcHV0ZUhhc2goQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpoYXNoKGZvbnQu
Zm9udERlc2NyaXB0aW9uKCkuZmlyc3RGYW1pbHkoKSksIGZvbnQuZm9udERlc2NyaXB0aW9uKCku
c3BlY2lmaWVkU2l6ZSgpKTsKIH0KIAogdW5zaWduZWQgUmVuZGVyU3R5bGU6Omhhc2hGb3JUZXh0
QXV0b3NpemluZygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2UvU2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oCmluZGV4IDY0MDlh
NDFjMzgyYThlNTc3Yzk2MDM2NGZiNjdlNzgxNDQ5Y2IxYjYuLjkzOGJiNTkyZjcyNjhjNjlhYzM3
MTgzNzVhNzJiOTY5NmM3Mjk1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNl
cnZpY2VXb3JrZXJUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtODcsMTYgKzg4LDEyIEBAIE9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDbGllbnRJZGVudGlm
aWVyPiBTZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllcjo6ZGVjb2RlKERlCiAgICAgaWYgKCFj
b250ZXh0SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiB7IHsgV1RGTW92ZSgqc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpLCBXVEZNb3ZlKCpj
b250ZXh0SWRlbnRpZmllcikgfSB9OworICAgIHJldHVybiB7IHsgKnNlcnZlckNvbm5lY3Rpb25J
ZGVudGlmaWVyLCAqY29udGV4dElkZW50aWZpZXIgfSB9OwogfQogCiBpbmxpbmUgdW5zaWduZWQg
U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6Omhhc2goKSBjb25zdAogewotICAgIHVuc2ln
bmVkIGhhc2hlc1syXTsKLSAgICBoYXNoZXNbMF0gPSBXVEY6OmludEhhc2goc2VydmVyQ29ubmVj
dGlvbklkZW50aWZpZXIudG9VSW50NjQoKSk7Ci0gICAgaGFzaGVzWzFdID0gV1RGOjppbnRIYXNo
KGNvbnRleHRJZGVudGlmaWVyLnRvVUludDY0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsKKyAgICByZXR1cm4gY29tcHV0
ZUhhc2goc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnRleHRJZGVudGlmaWVyKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCmluZGV4IGRiYTYyMzVl
MGI2MDZhODMxM2MzYzRjMzFkN2QyY2JmYTYxNmZmZTEuLjE0YWJjYWQ2NGM5OWExYzg3MTM2YmJj
MGY2ZDljYzU2MWVmMjgxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgKQEAgLTMzLDcgKzMzLDYgQEAK
ICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIldv
cmtlclR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KICNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IGFmYmM0MGU5YzMyYmJhOTEyMGZkOThiNTJhNDFmZjA3
Nzc4NzRkOWMuLmM0M2Q4NjU0NWZjYmI4NjVhM2E1MWI0YjU3OTM2ZjkyMmI4MDk2NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmgiCiAj
aW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9jb250ZXh0L1NXQ29udGV4dE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9jb250ZXh0L1NXQ29udGV4dE1hbmFnZXIuaAppbmRleCBmNTcwY2U0M2Q1
YzA4YzkwODgyOTAyMmExNzI2ZGQyYjhhOTkwZDAxLi40ZDA4ZTc2YmM5ZDYwNjM5Y2UwZDlhZjRj
OTlhMDdhOWUxMWJlNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2UvY29udGV4dC9TV0NvbnRleHRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL2NvbnRleHQvU1dDb250ZXh0TWFuYWdlci5oCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiU2VydmljZVdvcmtlclRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5o
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRo
cmVhZFByb3h5LmgKaW5kZXggM2ZlMmI0NDM1YWYyNWMwMjQ5YzFlZmNkZThjODgxZGFmYjhmYWIw
MS4uYmZjODdmMjQ5MDU0NzY2OWY5YjA0MWY4YTI3MWQ3MjdjZWQyZmU4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRocmVh
ZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2Vy
dmljZVdvcmtlclRocmVhZFByb3h5LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJXb3Jr
ZXJEZWJ1Z2dlclByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCmluZGV4IGFmODZmMjU0MzU3MmExYTM4YjUx
Zjk5NDE5ODgxNWE2ZjRkNTYyNWUuLmJhMTEzMTE1YTY1NDEyZmRlMmRmZGFiNjE2NmU1ZjZlMDg3
MjM5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIv
UmVnaXN0cmF0aW9uU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
c2VydmVyL1JlZ2lzdHJhdGlvblN0b3JlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmgKaW5kZXggYzE2NjgwNWQ4
MWU4NDA2ZjVmOTNiYWU1ZjBhNDQ3NDE4YjhiNDA5YS4uNGZlMTU2MTljYmQ1ZDY3ZjIzYjAzNDQ5
NTViOGJlNzFjMjcxYWRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvU1dTZXJ2ZXIuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJUb0NvbnRleHRDb25u
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVy
VG9Db250ZXh0Q29ubmVjdGlvbi5oCmluZGV4IDNhM2Y3YzAwMGNmN2M4NzNjNzRhYjhiYjM3Zjc5
ZTUwYjk2MmQyYmQuLmJhNThmNzg3OGE0Mzg5YjQ1NDU2MmI3MmI1YTVmNWNhNTRlMjM3NTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJU
b0NvbnRleHRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUgIlNlcnZpY2VX
b3JrZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclR5cGVzLmgiCisjaW5j
bHVkZSA8d3RmL1VSTEhhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyV29ya2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyV29ya2VyLmgK
aW5kZXggZjRjMmMzYjc1NmE5ZWY4ZjFkMGY1ZDM2MmYwYWViOTg2MGVhODhiNi4uMWQ0ZmQ4MTdi
M2M4YWE4MmQxMTYzMzgzNWY0MzE2YWZiNTE0NWJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlcldvcmtlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaApAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVVJMSGFz
aC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJT
V1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAppbmRleCAw
MGU5YzIxZTg2ZDRmOWUyZTlmNzdiMDRmMzc2Yzg0YWU4YWYwNDE3Li5lYzc3YzFkYjJlYmNiOWQ0
NTA0MmE5MzU4YjRlOTEzNTVhYTllZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2Vy
dmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2Vy
dmljZVdvcmtlckZldGNoVGFzay5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1NXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmgKaW5kZXggZTVjNjA1YzUxZjMyNzE1NjNhNmI2ZWUxOTEwYzk0ZWQwMTNm
MzQ5My4uYzc1ZDE3MDRhNzcyZTI5OTk5ZGU0MzA5ZDg1OWFmODE3YTA1NzQ4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCkBAIC01
OSwxMSArNTksNyBAQCBzdHJ1Y3QgR2xvYmFsRnJhbWVJRCB7CiAKIGlubGluZSB1bnNpZ25lZCBH
bG9iYWxGcmFtZUlEOjpoYXNoKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBoYXNoZXNbMl07Ci0g
ICAgaGFzaGVzWzBdID0gV1RGOjppbnRIYXNoKHdlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKLSAgICBo
YXNoZXNbMV0gPSBXVEY6OmludEhhc2goZnJhbWVJRC50b1VJbnQ2NCgpKTsKLQotICAgIHJldHVy
biBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaGVzLCBzaXplb2YoaGFzaGVzKSk7CisgICAg
cmV0dXJuIGNvbXB1dGVIYXNoKHdlYlBhZ2VJRCwgZnJhbWVJRCk7CiB9CiAKIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgR2xvYmFsRnJhbWVJRCYgYSwgY29uc3QgR2xvYmFsRnJhbWVJRCYg
YikKQEAgLTczLDggKzY5LDggQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHbG9iYWxG
cmFtZUlEJiBhLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBiKQogICAgIHJldHVybiBhLndlYlBhZ2VJ
RCA9PSBiLndlYlBhZ2VJRCAmJiAgYS5mcmFtZUlEID09IGIuZnJhbWVJRDsKIH0KIAotfTsKLX0g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfQorfQogCiBuYW1lc3BhY2UgV1RGIHsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNGM2YjdiYzIzY2YyOTI4
MzI3NGI3OTY1OTgzY2IxODBjMTY1OTlhYi4uYWVhZjRiOWJlOTMzNTlmZmVjOTQ3NmUyNDNjNjdh
M2FjYTQ1OTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBA
IC02NjksNiArNjY5LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdN
ZWRpYVRpbWUnOiBbJzx3dGYvTWVkaWFUaW1lLmg+J10sCiAgICAgICAgICdNb25vdG9uaWNUaW1l
JzogWyc8d3RmL01vbm90b25pY1RpbWUuaD4nXSwKICAgICAgICAgJ1NlY29uZHMnOiBbJzx3dGYv
U2Vjb25kcy5oPiddLAorICAgICAgICAnVVJMJzogWyc8d3RmL1VSTEhhc2guaD4nXSwKICAgICAg
ICAgJ1dhbGxUaW1lJzogWyc8d3RmL1dhbGxUaW1lLmg+J10sCiAgICAgICAgICdTdHJpbmcnOiBb
Jzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXSwKICAgICAgICAgJ1BBTDo6U2Vzc2lvbklEJzogWyc8
cGFsL1Nlc3Npb25JRC5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJ
L0NvY29hL1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tCmluZGV4IGM0YmYyYjc5YzM1NGQz
OTNiNjM3NGM3ODMyYjg0YWZlN2Y1NWY1Y2EuLjE0NzAxMDljZTFmNGI4MDkxNGUzNTk5MTgxNTUx
Y2RmNzQ1MzQxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9X
S0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkv
Q29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0KQEAgLTU1LDcgKzU1LDcgQEAgLSAoaWQp
X2luaXRXaXRoUGFnZVByb3h5SUQ6KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcilwYWdl
UHJveHlJRCBhbmRXZWJQYWcKIAogLSAoTlNVSW50ZWdlciloYXNoCiB7Ci0gICAgcmV0dXJuIFdU
Rjo6cGFpckludEhhc2goX3BhZ2VQcm94eUlELnRvVUludDY0KCksIF93ZWJQYWdlSUQudG9VSW50
NjQoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKF9wYWdlUHJveHlJRCwgX3dlYlBhZ2VJRCk7
CiB9CiAKIC0gKEJPT0wpaXNFcXVhbDooaWQpb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dDb250ZXh0TWFuYWdlckNvbm5l
Y3Rpb24uaAppbmRleCA3NjYyMTg5NTMyODBhY2ExZmVkMGIwZTY5MTA4ZDliYzg3ODlkZGU4Li4w
NDU1MmRjNzAwYjE5ZGYwMGVjYzU2Y2JhYTE0NDRmMmNlNTBhZjFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1h
bmFnZXJDb25uZWN0aW9uLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NX
Q29udGV4dE1hbmFnZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJDbGllbnRE
YXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJ2aWNlV29ya2VyVHlwZXMuaD4KKyNpbmNsdWRl
IDx3dGYvVVJMSGFzaC5oPgogCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJl
bmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwCmluZGV4IGRjNzdmOGY4NGQwMzQzOTAxYjlhZWVhNTU1MGZkMzc4ZDgw
MzI4OTYuLjA0MjA1YjM3MmRhNDc5YmM5ZGI4ZTU2N2M3ZDYyMmU5ZjkyNGZlZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlz
dC5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRl
Z2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKICAgICByZXR1cm4gYS5tX2ludGVn
ZXJzID09IGIubV9pbnRlZ2VycyAmJiAgYS5tX3NpemUgPT0gYi5tX3NpemU7CiB9CiAKLXN0cnVj
dCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxJbnRlZ2Vy
QXJyYXk+IHsKK3N0cnVjdCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxJbnRl
Z2VyQXJyYXk+IHsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSW50ZWdl
ckFycmF5JiBzbG90KSB7IHNsb3QubWFya0RlbGV0ZWQoKTsgfQogICAgIHN0YXRpYyBib29sIGlz
RGVsZXRlZFZhbHVlKGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpIHsgcmV0dXJuIGFycmF5Lmlz
RGVsZXRlZFZhbHVlKCk7IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425328</attachid>
            <date>2021-04-06 14:43:15 -0700</date>
            <delta_ts>2021-04-07 13:18:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210406144314.patch</filename>
            <type>text/plain</type>
            <size>95576</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NTM0ZWM3ZTJmNGY1MWU0ZWU0NjRjMzkzNjVmMTYxZDQ3NDMwMWM5Li5jN2Y5MDljM2QxNjBkMDJm
MGE0ZmFjMTE3MWZkNGY0ZDY4MDU4ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDYgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIEFycmF5J3MgdG9TdHJpbmcoKSBp
cyBpbmNvcnJlY3QgaWYgam9pbigpIGlzIG5vbi1jYWxsYWJsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmNmIyM2M3ODc4ZTUy
YjM3MzRiZTM4NDVlMWQ0M2YwNjBjNWE3ODEzLi5hZjlhOWUyMTkzNzU2YWZkZTExYWQxYjhiMDEx
YmQ1ZDU4MjdkNGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA0LTAyICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgSGFzaGVyIG1vcmUsIHJlbW92ZSBJ
bnRlZ2VySGFzaGVyLCBmaXggaGFzaGluZy1yZWxhdGVkIG1pc3Rha2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQxMzgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9IYXNoRnVuY3Rpb25zLmg6
IEV4cG9ydCBpbnRIYXNoIGFuZCBwYWlySW50SGFzaCB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQor
ICAgICAgICBzbyB0aGV5IGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBXVEYgcHJl
Zml4LiBUaGlzIGZvbGxvd3MgdGhlIHVzdWFsCisgICAgICAgIFdURiBkZXNpZ24gcGF0dGVybiBn
aXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIFdU
Ri4KKworICAgICAgICAqIHd0Zi9IYXNoZXIuaDogRGVsZXRlZCBJbnRlZ2VySGFzaGVyLgorICAg
ICAgICAoV1RGOjphZGQpOiBBZGRlZCBvdmVybG9hZHMgZm9yIFN0cmluZywgQXRvbVN0cmluZywg
YW5kIFVSTC4KKworICAgICAgICAqIHd0Zi9PYmplY3RJZGVudGlmaWVyLmg6CisgICAgICAgIChX
VEY6OmFkZCk6IEFkZGVkIGEgSGFzaGVyIG92ZXJsb2FkIGZvciBhbnkgT2JqZWN0SWRlbnRpZmll
ci4KKworICAgICAgICAqIHd0Zi9SZXRhaW5QdHIuaDogRXhwb3J0IHNhZmVDRkVxdWFsIGFuZCBz
YWZlQ0ZIYXNoIHRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlCisgICAgICAgIHNvIHRoZXkgY2FuIGJl
IGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IFdURiBwcmVmaXguIFRoaXMgZm9sbG93cyB0aGUg
dXN1YWwKKyAgICAgICAgV1RGIGRlc2lnbiBwYXR0ZXJuIGdpdmVuIHRoYXQgdGhlc2UgZnVuY3Rp
b25zIGFyZSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgV1RGLgorCisgICAgICAgICogd3RmL1Zl
Y3Rvckhhc2guaDogUmVtb3ZlZCB0aGUgVmVjdG9ySGFzaCB0ZW1wbGF0ZSwgaW5zdGVhZCBqdXN0
IHNwZWNpYWxpemluZworICAgICAgICBEZWZhdWx0SGFzaC4gVXNlIGNvbXB1dGVIYXNoIHRvIGhh
c2ggdGhlIGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IgaW5zdGVhZCBvZgorICAgICAgICBoYXNoaW5n
IHRoZSBoYXNoZXMgb2YgdGhlIGl0ZW1zIGluIHRoZSB2ZWN0b3IuIFRoaXMgaXMgYmV0dGVyIGlu
IGdlbmVyYWwgYW5kCisgICAgICAgIGJldHRlciBmb3IgdGhlIG9uZSBjYXNlIHdoZXJlIHdlIGFy
ZSBjdXJyZW50bHkgdXNpbmcgdGhpcywgZm9yIGEgVmVjdG9yPGludD4uCisgICAgICAgIFdlIHdh
bnQgdG8gaGFzaCBhbGwgdGhlIGludGVnZXJzIHJhdGhlciB0aGFuIGhhc2hpbmcgaGFzaGVzIG9m
IGFsbCB0aGUgaW50ZWdlcnMuCisgICAgICAgIEluIHRoZSBmdXR1cmUsIHRoaXMgbWVhbnMgdGhl
IGVsZW1lbnRzIG9mIHRoZSBWZWN0b3IgbmVlZCB0byBiZSBoYXNoYWJsZSB1c2luZworICAgICAg
ICB0aGUgSGFzaGVyIG1hY2hpbmVyeS4gVGhlIG9sZCByZXF1aXJlbWVudCB3YXMgdGhlIHRoZSBl
bGVtZW50cyBoYWQgYSBEZWZhdWx0SGFzaC4KKwogMjAyMS0wNC0wNiAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtXVEZdIEludHJvZHVjZSBGaXhlZFZlY3Rv
ciBhbmQgdXNlIGl0IGZvciBGaXhlZE9wZXJhbmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdmZDBkNGFmNjFi
OWM0OWJmNjA3NmYyYzExZDM0MzBjYTc5NDdlZi4uMzJhMGE0OTY1NzcxYWEzYzZiYTA1MWZlYjNh
MjA2N2E4OTQ3YTY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAyMS0wNC0wMiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3Jl
LCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlRyaWdnZXJIYXNoOjpoYXNoKTogVXNlIGNvbXB1dGVIYXNoIHRvCisgICAg
ICAgIGhhc2ggYWxsIHRoZSBmaWVsZHMgaW5zdGVhZCBvZiBhIGN1c3RvbS13cml0dGVuIGFsZ29y
aXRobS4gVGhlIGN1c3RvbQorICAgICAgICBhbGdvcml0aG0gaGFkIHNvbWUgbWFnaWMgbnVtYmVy
cywgcmVwZWF0ZWRseSBoYXNoZWQgaGFzaGVzLCBhbmQgY29tYmluZWQKKyAgICAgICAgaGFzaGVz
IHVzaW5nIGV4Y2x1c2l2ZSBvci4gVGhlIG5ldyBvbmUgaXMgYWxtb3N0IGNlcnRhaW5seSBiZXR0
dGVyLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OkNoYXJhY3RlclNldDo6aGFzaCBjb25zdCk6
CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCB0byBoYXNoIHRoZSBib29sZWFuIGFuZCB0aGUgY2hh
cmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICB1c2luZyBpbnRIYXNoIGFuZCBwYWlySW50SGFz
aC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphZGQpOiBNb3ZlZCB0aGUgaGFzaGluZyBoZXJlIGZyb20gdGhlIGhlYWRlci4g
Rml4ZWQgdGhlCisgICAgICAgIG1pc3Rha2Ugd2hlcmUgdGhpcyB3YXMgdXNpbmcgJiBpbnN0ZWFk
IG9mIHwgYW5kIHNvIG5vbmUgb2YgdGhlIGJvb2xlYW5zCisgICAgICAgIHdlcmUgaGF2aW5nIGFu
eSBlZmZlY3Qgb24gdGhlIGhhc2ggdmFsdWUuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Bh
cnNlckNvbnRleHQuaDogVXNlIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBzbworICAg
ICAgICB3ZSBkb24ndCBoYXZlIHRvIHNheSBwdWJsaWM6IGV4cGxpY2l0bHkuIEFsc28gbW92ZWQg
YWxsIHRoZSBmdW5jdGlvbgorICAgICAgICBtZW1iZXJzIHRvIHRoZSBib3R0b20gb2YgdGhlIHN0
cnVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIHN0eWxlCisgICAgICAgIGZvciBzdHJ1
Y3R1cmVzIGFzIG9wcG9zZWQgdG8gY2xhc3Nlcy4gU2luY2UgdGhlIGRhdGEgbWVtYmVycyBhcmUg
dGhlCisgICAgICAgIHByaW1hcnkgaW50ZXJmYWNlLCB0aGV5IGFyZSBmaXJzdCwgYW5kIGFsbCBm
dW5jdGlvbiBtZW1iZXJzIGFyZSBzZWNvbmRhcnkKKyAgICAgICAgYW5kIHNvIHRoZXkgY29tZSBh
ZnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHRIYXNoOjpoYXNoKTogVXNl
IGNvbnZlcnRIYXNoIGluc3RlYWQgb2YKKyAgICAgICAgYSBjdXN0b20gd3JpdHRlbiBoYXNoIGZ1
bmN0aW9uLiBUaGUgY3VzdG9tIHdyaXR0ZW4gZnVuY3Rpb24gd2FzIGNvbWJpbmluZworICAgICAg
ICBoYWhlcyB1c2luZyBleGNsdXNpdmUgb3IsIG5vdCBhIGJlc3QgcHJhY3RpY2UsIGFuZCBhbHNv
IGhhZCBhIG1pc3Rha2UKKyAgICAgICAgd2hlcmUgaXQgdXNlZCAmIGluc3RlYWQgb2YgfCBhbmQg
c28gdGhlICJiaXRzIiBsb2NhbCB2YXJpYWJsZSB3YXMgYWx3YXlzIDAuCisKKyAgICAgICAgKiBo
dG1sL0Zvcm1Db250cm9sbGVyLmNwcDogVXNlIEhhc2hUcmFpdHMgaW5zdGVhZCBvZiBXVEY6Okdl
bmVyaWNIYXNoVHJhaXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RN
UHJveHkuaDogUmVtb3ZlZCB1bm5lZWRlcyBpbmNsdWRlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOiBDaGFuZ2VkIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IGludG8g
YQorICAgICAgICBzaW1wbGUgc3RydWN0IHdpdGggbm8gYWRkaXRpb25hbCBmdW5jdGlvbiBtZW1i
ZXJzIG9yIHN0YXRpYyBkYXRhIG1lbWJlcnMuCisgICAgICAgIENoYW5nZWQgQ2hhcmFjdGVyRmFs
bGJhY2tNYXBLZXlIYXNoIHRvIHVzZSBjb21wdXRlSGFzaCB0byBjYWxjdWxhdGUgdGhlCisgICAg
ICAgIGhhc2gsIGluc3RlYWQgb2YgSW50ZWdlckhhc2hlci4gUHJvYmFibHkgYmV0dGVyIHRvIGhh
c2ggdGhlIHBvaW50ZXIgb2YKKyAgICAgICAgdGhlIEF0b21TdHJpbmcgcmF0aGVyIHRoYW4gaGFz
aGluZyB0aGUgaGFzaCwgYnV0IGVpdGhlciB3YXksIHdlIHNob3VsZAorICAgICAgICBoYXZlIHRo
ZSBiZXN0IGltcGxlbWVudGF0aW9uIGZvciBBdG9tU3RyaW5nIGhhc2hpbmcgaW4gdGhlIEhhc2hl
ciBjbGFzcy4KKyAgICAgICAgQWRkZWQgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRz
IGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzLiBVc2UgdGhl
IHZhbHVlIFVfU0VOVElORUwgZm9yIHRoZSBVQ2hhcjMyIGNoYXJhY3RlciwKKyAgICAgICAgd2hp
Y2ggaXMgdGhlIHNhbWUgYXMgdGhlIC0xIHVzZWQgYmVmb3JlLCBidXQgc2xpZ2h0bHkgY2xlYXJl
ciB3aHkgaXQncyBPSy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9u
dEZvckNoYXJhY3RlciBjb25zdCk6IFVzZSBIYXNoTWFwOjplbnN1cmUKKyAgICAgICAgaW5zdGVh
ZCBvZiBIYXNoTWFwOjphZGQgdG8gbWFrZSB0aGUgbG9naWMgc2ltcGxlci4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDogVXNlIGJvb2wgaW5zdGVhZCBvZiB1aW50OF90IGFz
IHRoZSBiYXNlIHR5cGUKKyAgICAgICAgZm9yIHRoZSBOby9ZZXMgZW51bWVyYXRpb24gSXNGb3JQ
bGF0Zm9ybUZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
OiBSZW1vdmVkIHVubmVlZGVkICJ1c2luZyBuYW1lc3BhY2UgV1RGIiwKKyAgICAgICAgd2hpY2gg
aXMgbm90IG91ciBiZXN0IHByYWN0aWNlLCBlc3BlY2lhbGx5IGdpdmVuIHVuaWZpZWQgYnVpbGRz
LgorICAgICAgICBDaGFuZ2VkIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBpbnRvIGEgc2ltcGxl
IHN0cnVjdCwgcmVtb3ZpbmcgYWxsIHRoZQorICAgICAgICBoYXNoLXJlbGF0ZWQgbWVtYmVyIGZ1
bmN0aW9ucy4gQWxzbyB1c2VkIHN0cnVjdC1zdHlsZSBuYW1pbmcgZm9yIHRoZQorICAgICAgICBt
ZW1iZXJzIHdpdGhvdXQgYW4gIm1fIiBwcmVmaXguIFVzZWQgdGhlIHR5cGUgRm9udEZhbWlseU5h
bWUgZm9yIHRoZQorICAgICAgICBmYW1pbHkgbmFtZSwgd2hpY2ggbWVhbnMgd2Ugd2lsbCB1c2Ug
Rm9udENhc2NhZGVEZXNjcmlwdGlvbidzIHN5c3RlbQorICAgICAgICBmb3IgaGFzaGluZyBhbmQg
Y29tcGFyaW5nIGZhbWlseSBuYW1lcyBmb3IgZXF1YWxpdHkgd2l0aG91dCBoYXZpbmcgdG8KKyAg
ICAgICAgcmVtZW1iZXIgZG8gdG8gc28gZXhwbGljaXRseS4gQ2hhbmdlZCBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXlIYXNoIHRvCisgICAgICAgIHVzZSBjb21wdXRlSGFzaC4gVGhlIG9sZCB2ZXJz
aW9uIGhhZCB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgdG8KKyAgICAgICAgaGFuZGxlIE9w
dGlvbmFsIGFuZCB3YXMgdW5uZWNlc3NhcmlseSBoYXNoaW5nIGhhc2hlcy4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6Y2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6IFJlbmFtZWQgdG8gcmVt
b3ZlICJnZXQiCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxzbyB1c2Ugc2hv
cnRlciBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKyAgICAgICAgbmFtZXMgdGhhdCBhcmUg
c2luZ2xlIHdvcmRzLCBhbmQgdXBkYXRlZCBzaW5jZSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkK
KyAgICAgICAgaXMgbm93IGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6IFVzZSBzaG9ydGVyIG5hbWVzLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IFRvIGNvbXBhcmUgdHdvIEZvbnRDYXNjYWRl
Q2FjaGVLZXkgb2JqZWN0cywKKyAgICAgICAgdXNlIGEgc2ltcGxlciBjb25zdHJ1Y3Rpb25zLCBk
ZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCBWZWN0b3IgYWxyZWFkeQorICAgICAgICBoYXMgYW4g
PT0gb3BlcmF0b3IgYW5kIHdlIGFyZSB1c2luZyBGb250RmFtaWx5TmFtZSBmb3IgdGhlIGVsZW1l
bnRzCisgICAgICAgIG9mIHRoZSB2ZWN0b3IsIHdoaWNoIGhhcyBhIGNvcnJlY3QgPT0gb3BlcmF0
b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaCk6IFVz
ZSBjb21wdXRlSGFzaCBzaW5jZQorICAgICAgICB0aGUgRm9udEZhbWlseU5hbWUgaGFzaGluZyBp
cyBub3cgY29ycmVjdCwgYW5kIHdlIGNhbiByZWx5IG9uIHRoZQorICAgICAgICB3YXkgSGFzaGVy
IGtub3dzIGhvdyB0byBpdGVyYXRlIGEgY29sbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKTogVXBkYXRlIHNpbmNlCisgICAgICAg
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSBpcyBub3cgYSBzaW1wbGUgc3RydWN0LiBBbHNvIHVzZSBj
b25zdGV4cHIgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmludmFsaWRhdGUp
OiBVc2UgY29weVRvVmVjdG9yT2Y8PiB0byBzaW1wbGlmeSB0aGUKKyAgICAgICAgY29kZSB0aGF0
IGNhbGxzIGZvbnRDYWNoZUludmFsaWRhdGVkIG9uIGFsbCB0aGUgZm9udCBzZWxlY3RvcnMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogVXNlICJ1c2luZyIgaW5z
dGVhZCBvZiAidHlwZWRlZiIuCisgICAgICAgIFJlbW92ZSBGb250RGVzY3JpcHRpb25LZXk6OmNv
bXB1dGVIYXNoLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTogQW4gb3ZlcmxvYWQgb2YgYWRkIGZv
ciBIYXNoZXIgdG8gaW5jbHVkZSBhCisgICAgICAgIEZvbnREZXNjcmlwdGlvbktleSBpbiBhIGhh
c2gsIHdoaWNoIGp1c3QgbGlzdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuCisgICAgICAgIFRoZSBv
bGQgdmVyc2lvbiBkaWQgYSBoYXNoIG9mIGhhc2hlcywgYnV0IHRoYXQncyBub3QgbmVlZGVkIGFu
eSBtb3JlLgorICAgICAgICBVcGRhdGVkIEZvbnREZXNjcmlwdGlvbktleUhhc2ggdG8gdXNlIHRo
ZSBIYXNoZXIgdmVyc2lvbiBvZiBDb21wdXRlSGFzaC4KKyAgICAgICAgQWRkZWQgRm9udEZhbWls
eU5hbWUuIENoYW5nZSBGb250Q2FzY2FkZUNhY2hlS2V5IHRvIHVzZSBhIHZlY3RvciBvZgorICAg
ICAgICBGb250RmFtaWx5TmFtZSBpbnN0ZWFkIG9mIEF0b21TdHJpbmcuIEluIEZvbnRDYXNjYWRl
Q2FjaGVFbnRyeSwgdXNlCisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBp
bnN0ZWFkIG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECisgICAgICAgIGFuZCBhbHNvIGdvdCBy
aWQgb2YgdGhlIHVubmVlZWRlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAg
ICBVc2UgdGhlIGRlbGV0ZWQgdmFsdWUgb2YgRm9udERlc2NyaXB0aW9uS2V5LgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKTog
RGl0dG8uCisgICAgICAgIFJlbmFtZWQgZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSB0byBqdXN0
IGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250R2VuZXJpY0ZhbWlsaWVzLmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YKKyAgICAgICAg
V1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRTZWxlY3Rpb25S
YW5nZTo6dW5pcXVlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YWRk
KTogQWRkIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRvIHRoZSBoYXNoCisg
ICAgICAgIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBjb21iaW5pbmcgdGhlbS4gRm9yIG5vdywgdGhp
cyBtYWtlcyB0aGUgd2F5CisgICAgICAgIHRoZXkgYXJlIGhhc2hlZCBhIGJpdCBpbmVmZmljaWVu
dCwgYnV0IHRoYXQgY2FuIGJlIHJlLXRpZ2h0ZW5lZCB1cCBieQorICAgICAgICBpbXByb3Zpbmcg
dGhlIGFsZ29yaXRobSBvZiBIYXNoZXIgaWYgd2UgbGlrZS4gU2hvdWxkIGJlIGZpbmUgZm9yIG91
cgorICAgICAgICBuZWVkcyBlaXRoZXIgd2F5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGZWF0dXJl
U2V0dGluZ3M6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFZh
cmlhdGlvblNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oOiBBZGRlZCBvdmVybG9hZHMgb2YgdGhl
CisgICAgICAgIGFkZChIYXNoZXImKSBmdW5jdGlvbiBmb3Igc3RkOjphcnJheTxjaGFyLCA0PiBh
bmQgRm9udFRhZ2dlZFNldHRpbmc8VD4uCisgICAgICAgIEdvdCByaWQgb2YgbWFueSB1c2VzIG9m
IHBhc3MgYnkgcmVmZXJlbmNlIGluc3RlYWQgb2YgdmFsdWUgZm9yIEZvbnRUYWcsCisgICAgICAg
IHNpbmNlIGl0IGZpdHMgaW50byBhIDMyLWJpdCByZWdpc3RlciBhbmQgYnRoIG1vcmUgc291cmNl
IGNvZGUgYW5kIGxlc3MKKyAgICAgICAgZWZmaWNpZW50IHRvIHBhc3MgYnkgdmFsdWUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6IFJlbW92ZWQgInVzaW5nIFdU
Rjo6cGFpckludEhhc2giIHNpbmNlCisgICAgICAgIHRoYXQncyBub3cgZG9uZSBpbiB0aGUgV1RG
IGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQKKyAgICAgICAgInVzaW5nIFdURjo6R2VuZXJpY0hh
c2hUcmFpdHMiLCB3aGljaCB3YXMgdW5oZWxwZnVsLiBUaGUgR2VuZXJpY0hhc2hUcmFpdHMKKyAg
ICAgICAgdGVtcGxhdGUgaXMgb25seSByZWFsbHkgbmVlZGVkIHdoZW4gc3BlY2lhbGl6aW5nIEhh
c2hUcmFpdHMsIHdoaWNoCisgICAgICAgIGFscmVhZHkgaGFzIHRvIGJlIGRvbmUgd2l0aGluIHRo
ZSBXVEYgbmFtZXNwYWNlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlCisgICAgICAgIHNob3VsZCBq
dXN0IHVzZSBIYXNoVHJhaXRzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg6IFVzZSBIYXNoVHJhaXRzCisgICAgICAgIGlu
c3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwOgorICAgICAg
ICBNb3ZlIHRoZSBkYXRhIG1lbWJlcnMgdG8gdGhlIHRvcCBvZiB0aGUgRm9udEZhbWlseVNwZWNp
ZmljYXRpb25LZXkgc3RydWN0LgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGNvbXB1dGVIYXNo
IGZ1bmN0aW9uIGFuZCBXVEYgcHJlZml4IGZyb20gc2FmZUNGRXF1YWwuCisgICAgICAgIChXZWJD
b3JlOjpGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOiBDYWxsIHRoZSBIYXNo
ZXIgdmVyc2lvbgorICAgICAgICBvZiBjb21wdXRlSGFzaCBkaXJlY3RseSB0byBoYXNoIHRoZSB0
d28gaXRlbXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6
U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2NhZGVMaXN0UGFyYW1ldGVyczo6aGFzaCBj
b25zdCk6CisgICAgICAgIFVzZSBjb21wdXRlSGFzaCBpbnN0ZWFkIG9mIEludGVnZXJIYXNoZXIu
IEFsc28gcmVuYW1lZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICBzdHJ1Y3QgZnJvbSBDYXNj
YWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggdG8KKyAgICAgICAg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIFJlbW92ZWQgbm93LXVubmVlZGVkIFdURiBwcmVmaXhlcyBmcm9tIGNh
bGxzIHRvIHNhZmVDRkVxdWFsLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlRm9udEhhc2gpOiBVc2UgY29tcHV0ZUhhc2ggaW5zdGVhZCBvZiBJbnRlZ2Vy
SGFzaGVyLgorICAgICAgICBTdGlsbCBub3QgZ3JlYXQgdGhhdCB3ZSBoYXNoIGEgaGFzaCBoZXJl
LCBidXQgd2UgY2FuIGltcHJvdmUgdGhhdCBsYXRlci4KKworICAgICAgICAqIHdvcmtlcnMvc2Vy
dmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6OmRlY29kZSk6IFJlbW92ZWQgdW5uZWVkZWQK
KyAgICAgICAgV1RGTW92ZSBvbiBPYmplY3RJZGVudGlmaWVyLCB3aGljaCBhcmUganVzdCBpbnRl
Z2Vycywgc28gbW92ZSB2cy4gY29weQorICAgICAgICBpcyBub3QgYW4gaW1wb3J0YW50IGRpc3Rp
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6
Omhhc2ggY29uc3QpOiBVc2UgY29tcHV0ZUhhc2gKKyAgICAgICAgaW5zdGVhZCBvZiBjb21iaW5p
bmcgaW50SGFzaCB3aXRoIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeS4gVGhpcyBmaXhlcworICAg
ICAgICB0d28gbWlzdGFrZXM6IG9uZSBpcyB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gaGFzaCBh
IGhhc2guIFRoZSBzZWNvbmQgaXMKKyAgICAgICAgdGhhdCBpbnRIYXNoIHRha2VzIGEgMzItYml0
IGludGVnZXIgYXMgaXRzIHBhcmFtZXRlciwgc28gaGlnaCBiaXRzCisgICAgICAgIG9mIG9iamVj
dCBpZGVudGlmaWVycyB3ZXJlIGRpc2NhcmRlZCB1bm5lY2Vzc2FyaWx5LgorCiAyMDIxLTA0LTA2
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNocmlu
ayBzb21lIEluZGV4ZWREQi1yZWxhdGVkIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggY2UyOTNlODhjZDVi
Y2ZkZjE0MDEwNWU3MzViY2MyNmVmODgyMjE5My4uNTc5NDhlZmZjOTlkOGYwMGEzMzhiZDAyYmJh
ZjYyZmM0NmU5MGIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0wMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCBy
ZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpH
bG9iYWxGcmFtZUlEOjpoYXNoIGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3Rl
YWQgb2YgY29tYmluaW5nIGludEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRo
aXMgZml4ZXMKKyAgICAgICAgdHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBu
ZWVkIHRvIGhhc2ggYSBoYXNoLiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0
YWtlcyBhIDMyLWJpdCBpbnRlZ2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAg
ICAgICBvZiBvYmplY3QgaWRlbnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4K
KworICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW06
CisgICAgICAgICgtW1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1dGVI
YXNoIGluc3RlYWQgb2YgcGFpckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0YWtl
OiBwYWlySW50SGFzaCB0YWtlcyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMKKyAg
ICAgICAgb2Ygb2JqZWN0IGlkZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJpbHku
CisKIDIwMjEtMDQtMDYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTiAocjI3NDYxMCk6IFVuYWJsZSB0byBkcmFnIGltYWdlcyB3aGVu
IGltYWdlIGV4dHJhY3Rpb24gaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmlu
ZGV4IDYwYzQzODkyMGYzNDk5NjEzODNiNjE2NGFmZjJiZTdiNjE3OGViNTguLmYxMGI4Njk2ZGI1
ZDhmOWE3YTBhOGM1MjZjOTJmNzczNmM4ODA4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwg
Zml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHA6IFVz
ZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwogMjAyMS0w
My0zMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBNQUNI
X1BPUlRfVkFMSUQoKSB3aGVuIHdhbnRpbmcgdG8gY2hlY2sgaWYgYSBtYWNoIHBvcnQgaXMgdmFs
aWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
ZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmlu
ZGV4IGQxNDc1NDE4MzI0NzI1NTQ4NzU5OWFlOWI0NjIwNWI2ZDVkN2RlMjguLmE4NGJkYTE2ZWZi
N2NiN2MzMjVhYzZjMjA3YjA5MDczYzE4MjMwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAg
ICAgQ2hlY2twb2ludCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KICAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9wYWNrZWRCaXRzKTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJl
dHVybiBpbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBk
ZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhpbnZhbGlkT2Zmc2V0IC0gMSk7IH0KICAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0g
ZGVsZXRlZFZhbHVlKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwLmgKaW5kZXggMWJhZTdmZGI4Y2UyZDg1YTJkYTY0Yzc4OTIxN2UwZTFlYzQxYTUyMi4u
NjU4ZTJjZmM1ZWNlODIzNDk3NmI2MzRkZThlMzdmMjBkNmYwZmM4OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCkBAIC0xNTQsNyArMTU0LDcgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9lbGVtZW50U2l6ZTsKICAgICBzdGQ6OmFycmF5PEFic3RyYWN0
SGVhcCwgMTY+IG1fc21hbGxJbmRpY2VzOwogICAgIAotICAgIHN0cnVjdCBXaXRob3V0WmVyb09y
T25lSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8cHRyZGlmZl90PiB7CisgICAg
c3RydWN0IFdpdGhvdXRaZXJvT3JPbmVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxwdHJkaWZmX3Q+
IHsKICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKHB0cmRpZmZfdCYg
c2xvdCkgeyBzbG90ID0gMTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShw
dHJkaWZmX3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IDE7IH0KICAgICB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGFlNTc4YTMyMWI4
Yjc1MjNjZDVmNGIyNTM0MjgwODc5ZWU1ZWYwMWYuLmZlOTAwNzUwNWU4YmI0MTJiNjM2YTljM2Jj
NWM3ZTZiOTcxMTRjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKQEAgLTU5MCw3ICs1OTAsOCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlU2V0
JiBsaXZlID0gbV9saXZlSW5Ub05vZGUuZmluZChub2RlKS0+dmFsdWU7CiAgICAgICAgIHVuc2ln
bmVkIGhpZ2hQYXJlbnRJbmRleCA9IG5vZGUtPmluZGV4KCk7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IGhhc2ggPSBXVEY6OmludEhhc2goaGlnaFBhcmVudEluZGV4KTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaW5jZSBpbnRIYXNoIHJldHVybnMgYSAzMi1iaXQgdW5zaWduZWQg
aW50ZWdlciwgaXQncyBub3QgY2xlYXIgd2h5IGl0J3MgaGVscGZ1bCB0byBzdG9yZSBpdCBpbiBh
IHVpbnQ2NF90LgorICAgICAgICAgICAgdWludDY0X3QgaGFzaCA9IGludEhhc2goaGlnaFBhcmVu
dEluZGV4KTsKICAgICAgICAgICAgIGlmIChoYXNoID49IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigo
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
ICsgMSkgKiBPcHRpb25zOjp2YWxpZGF0ZUFic3RyYWN0SW50ZXJwcmV0ZXJTdGF0ZVByb2JhYmls
aXR5KCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggNTM3ZWU1
NjUyMGVkNTg0MzAxZjQ4MjA0OTYyY2YyNzg2YmRiMzRmZC4uMDU0ZTMxZWQ2YmE0YTI4OWU4ZWNj
NWU2ZDY3MThhZWU2NzYxMDVlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC00MTYsNyArNDE2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaW50KiBqdW1wVGFyZ2V0OwogICAgIH07CiAKLSAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBI
YXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4geworICAg
IHN0cnVjdCBDb25zdGFudE1hcEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVl
PiB7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1
ZTsKICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEVuY29kZWRKU1Zh
bHVlJiBzbG90KSB7IHNsb3QgPSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOyB9CiAgICAgICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25z
LmgKaW5kZXggNWY5MGY0ZWE3NjExODFiZmU0YTQ1MDc3YjEyZDE4NTFlN2Y4OWM0OS4uZmZkNTIy
Y2UyOTA4ZDdmZWU3MmFiYjA0NjE0YWFmNDQxMDViNmI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvSGFzaEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMu
aApAQCAtMjc1LDMgKzI3NSw1IEBAIG5hbWVzcGFjZSBXVEYgewogdXNpbmcgV1RGOjpEZWZhdWx0
SGFzaDsKIHVzaW5nIFdURjo6SW50SGFzaDsKIHVzaW5nIFdURjo6UHRySGFzaDsKK3VzaW5nIFdU
Rjo6aW50SGFzaDsKK3VzaW5nIFdURjo6cGFpckludEhhc2g7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCmluZGV4IDUyZWIyMzQy
MTFkMzY5YzhlM2UwOWFjNzViZDhjNDRkYTA2Mzk1NWUuLjI4NzI1NjhlOTM2Nzk3MTdjMzE0ZDBl
M2NhMTZiNzcyOWNkMDQ2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMzEgKzIwLDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIERlcHJlY2F0ZWQuIFVzZSBIYXNoZXIgaW5zdGVh
ZC4KLWNsYXNzIEludGVnZXJIYXNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIHZvaWQgYWRkKHVpbnQzMl90IGludGVnZXIpCi0gICAgewotICAgICAgICBt
X3VuZGVybHlpbmdIYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChpbnRlZ2VyLCBp
bnRlZ2VyID4+IDE2KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3VuZGVybHlpbmdIYXNoZXIuaGFzaCgpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBTdHJpbmdIYXNoZXIgbV91bmRlcmx5aW5nSGFzaGVyOwotfTsKLQogdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVHlwZXM+IHVpbnQzMl90IGNvbXB1dGVIYXNoKGNvbnN0IFR5cGVzJi4u
Lik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBPdGhlclR5cGVzPiB1aW50MzJf
dCBjb21wdXRlSGFzaChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4sIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxPdGhlclR5cGVzPi4uLik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbnNpZ25lZEludGVnZXI+
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc191bnNpZ25lZDxVbnNpZ25lZEludGVnZXI+Ojp2YWx1
ZSAmJiBzaXplb2YoVW5zaWduZWRJbnRlZ2VyKSA8PSBzaXplb2YodWludDMyX3QpLCB2b2lkPiBh
ZGQoSGFzaGVyJiwgVW5zaWduZWRJbnRlZ2VyKTsKQEAgLTExMiw2ICs5NSwyNyBAQCBpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGZsb2F0IG51bWJlcikKICAgICBhZGQoaGFzaGVyLCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG51bWJlcikpOwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFz
aGVyJiBoYXNoZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGJvb2wgcmVtYWluZGVy
ID0gc3RyaW5nLmxlbmd0aCgpICYgMTsKKyAgICB1bnNpZ25lZCByb3VuZGVkTGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpIC0gcmVtYWluZGVyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
b3VuZGVkTGVuZ3RoOyBpICs9IDIpCisgICAgICAgIGFkZChoYXNoZXIsIChzdHJpbmdbaV0gPDwg
MTYpIHwgc3RyaW5nW2kgKyAxXSk7CisgICAgaWYgKHJlbWFpbmRlcikKKyAgICAgICAgYWRkKGhh
c2hlciwgc3RyaW5nW3JvdW5kZWRMZW5ndGhdKTsKK30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gQ2hvc2UgdG8g
aGFzaCB0aGUgcG9pbnRlciBoZXJlLiBBc3N1bWluZyB0aGlzIGlzIGJldHRlciB0aGFuIGhhc2hp
bmcgdGhlIGNoYXJhY3RlcnMgb3IgaGFzaGluZyB0aGUgYWxyZWFkeS1jb21wdXRlZCBoYXNoIG9m
IHRoZSBjaGFyYWN0ZXJzLgorICAgIGFkZChoYXNoZXIsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHN0cmluZy5pbXBsKCkpKTsKK30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBj
b25zdCBVUkwmIHVybCkKK3sKKyAgICBhZGQoaGFzaGVyLCB1cmwuc3RyaW5nKCkpOworfQorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtZXJhdGlvbj4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Vu
dW08RW51bWVyYXRpb24+Ojp2YWx1ZSwgdm9pZD4gYWRkKEhhc2hlciYgaGFzaGVyLCBFbnVtZXJh
dGlvbiB2YWx1ZSkKIHsKICAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlp
bmdfdHlwZV90PEVudW1lcmF0aW9uPj4odmFsdWUpKTsKQEAgLTE4Niw0ICsxOTAsMyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjppbml0aWFsaXpl
cl9saXN0PFQ+IHZhbHVlcykKIAogdXNpbmcgV1RGOjpjb21wdXRlSGFzaDsKIHVzaW5nIFdURjo6
SGFzaGVyOwotdXNpbmcgV1RGOjpJbnRlZ2VySGFzaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvT2JqZWN0SWRlbnRpZmllci5oIGIvU291cmNlL1dURi93dGYvT2JqZWN0SWRlbnRpZmll
ci5oCmluZGV4IGY5YzY3YjYzYjVlMjZhNDBiNGFhYjU4YzAxNGQ1ZjQ3MGE2MDg1NTMuLjg4ODVh
YTMxYjI5NTYxZDkwMGY3NTJlYjNmZWIzNzhmNWQ0NDM5OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL09iamVjdElkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVu
dGlmaWVyLmgKQEAgLTEzMSw2ICsxMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IE9iamVjdElkZW50aWZpZXI8VD4gbWFrZU9iamVjdElkZW50aWZpZXIodWludDY0X3QgaWQKICAg
ICByZXR1cm4gT2JqZWN0SWRlbnRpZmllcjxUPiB7IGlkZW50aWZpZXIgfTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBPYmplY3RJZGVu
dGlmaWVyPFQ+IGlkZW50aWZpZXIpCit7CisgICAgYWRkKGhhc2hlciwgaWRlbnRpZmllci50b1VJ
bnQ2NCgpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9iamVjdElkZW50aWZp
ZXJIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPYmplY3RJZGVudGlmaWVy
PFQ+JiBpZGVudGlmaWVyKSB7IHJldHVybiBpbnRIYXNoKGlkZW50aWZpZXIubV9pZGVudGlmaWVy
KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE9iamVjdElkZW50aWZpZXI8VD4mIGEs
IGNvbnN0IE9iamVjdElkZW50aWZpZXI8VD4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5Q
dHIuaAppbmRleCBjN2ZiNzQ0MTA1NTYxZmQ2MTU4ODg4ZTNjZjBhZWY5ZGIzNDY1YTJmLi40YzU5
ODRlZmQ2MDE3YTJjNjhlNTI2MmY4Y2VjYjVkYTI1ODNlOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SZXRhaW5QdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaApAQCAt
NDAyLDYgKzQwMiw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGR5bmFtaWNfb2JqY19jYXN0
KGlkIG9iamVjdCkKIHVzaW5nIFdURjo6UmV0YWluUHRyOwogdXNpbmcgV1RGOjphZG9wdENGOwog
dXNpbmcgV1RGOjpyZXRhaW5QdHI7Cit1c2luZyBXVEY6OnNhZmVDRkVxdWFsOwordXNpbmcgV1RG
OjpzYWZlQ0ZIYXNoOwogCiAjaWZkZWYgX19PQkpDX18KIHVzaW5nIFdURjo6YWRvcHROUzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvckhhc2guaCBiL1NvdXJjZS9XVEYvd3RmL1Zl
Y3Rvckhhc2guaAppbmRleCBjMzczOTQ4OGRlODVjMzhlZWNkNjcxZmU3MDMyMTdmMzkzZTljMjBi
Li45MzgyMWEyN2U1ZjhiNTA0MjFhYjc2YWQ3N2M5YzliMjQ1Y2NiZTA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9ySGFz
aC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDI4ICsyNiwxNCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIYXNoRnVuY3Rp
b25zLmgiCi0jaW5jbHVkZSAiSGFzaFRyYWl0cy5oIgogI2luY2x1ZGUgIkhhc2hlci5oIgogCiBu
YW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5Pgotc3RydWN0IFZlY3Rvckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEludGVn
ZXJIYXNoZXIgaGFzaGVyOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVlIDogdmVjdG9y
KQotICAgICAgICAgICAgaGFzaGVyLmFkZChEZWZhdWx0SGFzaDxUPjo6aGFzaCh2YWx1ZSkpOwot
ICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgYSwgY29uc3QgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5PiYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4geworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikgeyByZXR1cm4gY29t
cHV0ZUhhc2godmVjdG9yKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8VmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5Pj4gOiBWZWN0b3JIYXNoPFQsIGlubGluZUNhcGFjaXR5PiB7IH07Ci0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25SdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uUnVsZS5oCmluZGV4IGM1MGJmMTdiOTZiZDczMDA4MmUzYzAxZDY5N2I2MmQ2NDU5Y2RjMjQu
LmFjNTU5MmViYzYyMjU5NGU0NTgxYTM2MGU4MjNjMWI3YmY2YzZiMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
aApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hlci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC04OCwyMyArODksMTIgQEAgc3RydWN0IFRyaWdnZXIgewogc3RydWN0IFRyaWdnZXJIYXNo
IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUcmlnZ2VyJiB0cmlnZ2VyKQogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgaGFzaCA9IHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0
aXZlID8gMTA2MTk4NjMgOiA0MDk2MDAwMTsKLSAgICAgICAgaWYgKCF0cmlnZ2VyLnVybEZpbHRl
ci5pc051bGwoKSkKLSAgICAgICAgICAgIGhhc2ggXj0gU3RyaW5nSGFzaDo6aGFzaCh0cmlnZ2Vy
LnVybEZpbHRlcik7Ci0gICAgICAgIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2gsIERlZmF1
bHRIYXNoPFJlc291cmNlRmxhZ3M+OjpoYXNoKHRyaWdnZXIuZmxhZ3MpKTsKLQotICAgICAgICBm
b3IgKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uIDogdHJpZ2dlci5jb25kaXRpb25zKQotICAgICAg
ICAgICAgaGFzaCBePSBTdHJpbmdIYXNoOjpoYXNoKGNvbmRpdGlvbik7Ci0KLSAgICAgICAgaGFz
aCBePSAxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmlnZ2VyLmNvbmRpdGlvblR5cGUpOwot
ICAgICAgICByZXR1cm4gaGFzaDsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKHRyaWdnZXIu
dXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlLCB0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci5mbGFn
cywgdHJpZ2dlci5jb25kaXRpb25zLCB0cmlnZ2VyLmNvbmRpdGlvblR5cGUpOwogICAgIH0KLQog
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRyaWdnZXImIGEsIGNvbnN0IFRyaWdnZXImIGIp
CiAgICAgewogICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgIH0KLQogICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKaW5kZXggMGQ1MTgzM2Y1YzA2ODViYjg4
OGUzYWEyMTc3YzM4N2Y0Mzc2YTU0NC4uNGUyNWM3MmVkZWFhZjU3NTllZGI2MGYxMmY2ZWYwNmE0
YjRlYzEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVy
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTY4LDExICsx
NjksMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpwYWlySW50SGFz
aChXVEY6OmludEhhc2gobV9jaGFyYWN0ZXJzWzBdKSwgV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVy
c1sxXSkpLCBtX2ludmVydGVkKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChtX2lu
dmVydGVkLCBtX2NoYXJhY3RlcnMpOwogICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAg
ICBib29sIG1faW52ZXJ0ZWQgeyBmYWxzZSB9OwotICAgICAgICB1aW50NjRfdCBtX2NoYXJhY3Rl
cnNbMl0geyAwLCAwIH07CisgICAgICAgIHN0ZDo6YXJyYXk8dWludDY0X3QsIDI+IG1fY2hhcmFj
dGVycyB7IDAsIDAgfTsKICAgICB9OwogCiAgICAgc3RydWN0IEdyb3VwIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCmluZGV4IDEzZjlmNDk2Njli
YjY5NDdhMDQ3NGI0YmM3NDE1ZjNjZjQyZjQxNjYuLjA5ODE2MjZlZmEzY2E3ZGM3ZjhhMjllZDhm
ZDA3YTk1ZDRiYzVmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXJDb250ZXh0LmNwcApAQCAtMTM3LDYgKzEzNyw0MyBAQCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYikKICAgICA7CiB9
CiAKK3ZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250
ZXh0KQoreworICAgIHVuc2lnbmVkIGJpdHMgPSBjb250ZXh0LmlzSFRNTERvY3VtZW50ICAgICAg
ICAgICAgICAgICAgPDwgMAorICAgICAgICB8IGNvbnRleHQuaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiAgICAgICAgICAgICAgICAgPDwgMQorICAgICAgICB8IGNvbnRleHQuaXNDb250ZW50T3Bh
cXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMgorICAgICAgICB8IGNvbnRleHQudXNl
U3lzdGVtQXBwZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgICAgPDwgMworICAgICAgICB8IGNv
bnRleHQuYXNwZWN0UmF0aW9FbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNAorICAg
ICAgICB8IGNvbnRleHQuY29sb3JDb250cmFzdEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAg
PDwgNQorICAgICAgICB8IGNvbnRleHQuY29sb3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgNgorICAgICAgICB8IGNvbnRleHQuY29sb3JNaXhFbmFibGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgNworICAgICAgICB8IGNvbnRleHQuY29uc3RhbnRQcm9wZXJ0
aWVzRW5hYmxlZCAgICAgICAgICAgICAgICAgPDwgOAorICAgICAgICB8IGNvbnRleHQuY29udGFp
bm1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgOQorICAgICAgICB8IGNvbnRl
eHQuY3NzQ29sb3I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMTAKKyAgICAg
ICAgfCBjb250ZXh0LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8
IDExCisgICAgICAgIHwgY29udGV4dC5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgICAgICA8PCAxMgorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAg
ICAgIHwgY29udGV4dC5sZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8
PCAxMworI2VuZGlmCisgICAgICAgIHwgY29udGV4dC5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVk
ICAgICAgICAgICAgICAgICA8PCAxNAorICAgICAgICB8IGNvbnRleHQucmVsYXRpdmVDb2xvclN5
bnRheEVuYWJsZWQgICAgICAgICAgICAgICAgPDwgMTUKKyAgICAgICAgfCBjb250ZXh0LnNjcm9s
bEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE2CisgICAgICAgIHwgY29u
dGV4dC5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQgICAgICAgICAgICAgICA8PCAxNworI2lm
IEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCisgICAgICAgIHwgY29udGV4dC50ZXh0QXV0b3Npemlu
Z0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICA8PCAxOAorI2VuZGlmCisjaWYgRU5BQkxFKENT
U19UUkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVEXzNEKQorICAgICAgICB8IGNvbnRleHQudHJhbnNm
b3JtU3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQgICAgICAgICAgPDwgMTkKKyNlbmRpZgorICAgICAg
ICB8IGNvbnRleHQudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwg
MjAKKyAgICAgICAgfCBjb250ZXh0LmZvY3VzVmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAg
ICAgICAgIDw8IDIxCisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICAgICAgfCBj
b250ZXh0LmF0dGFjaG1lbnRFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCisj
ZW5kaWYKKyAgICAgICAgfCBjb250ZXh0Lm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDw8IDIzOyAvLyBUaGlzIGlzIG11bHRpcGxlIGJpdHMsIHNvIGtlZXAgaXQgbGFz
dC4KKyAgICBhZGQoaGFzaGVyLCBjb250ZXh0LmJhc2VVUkwsIGNvbnRleHQuY2hhcnNldCwgYml0
cyk7Cit9CisKIGJvb2wgQ1NTUGFyc2VyQ29udGV4dDo6aXNQcm9wZXJ0eVJ1bnRpbWVEaXNhYmxl
ZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAogewogICAgIHN3aXRjaCAocHJvcGVydHkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgKaW5kZXgg
OGUwYjg3ZjdhYTc2MGU2ZWYyNzZiZDYzMmVmZmIwYWZhZDkxZTZlNi4uNDk1NjBkODFjODU5MGY5
MGZkYmE1NGVhNTIxNTUyY2NkZGM0ZDBmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQYXJzZXJDb250ZXh0LmgKQEAgLTMwLDIwICszMCwxNiBAQAogI2luY2x1ZGUgIlN0eWxl
UnVsZVR5cGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRG9jdW1lbnQ7CiAKIHN0cnVjdCBDU1NQYXJzZXJDb250ZXh0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJDb250ZXh0KENTU1Bh
cnNlck1vZGUsIGNvbnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0g
VVJMKCksIGNvbnN0IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOworICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAogICAgIFVSTCBiYXNlVVJMOwogICAgIFN0cmlu
ZyBjaGFyc2V0OwpAQCAtNTcsOCArNTMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvbnRlbnRP
cGFxdWUgeyBmYWxzZSB9OwogICAgIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSB7IGZhbHNlIH07
CiAKLSAgICBib29sIGlzUHJvcGVydHlSdW50aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCkgY29u
c3Q7Ci0KICAgICAvLyBTZXR0aW5ncy4KICAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBjb2xvckNvbnRyYXN0RW5hYmxlZCB7IGZhbHNlIH07CkBAIC05MCw3
MCArODQsMjkgQEAgcHVibGljOgogICAgIGJvb2wgYXR0YWNobWVudEVuYWJsZWQgeyBmYWxzZSB9
OwogI2VuZGlmCiAKLSAgICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0
OworICAgIENTU1BhcnNlckNvbnRleHQoQ1NTUGFyc2VyTW9kZSwgY29uc3QgVVJMJiBiYXNlVVJM
ID0gVVJMKCkpOworICAgIFdFQkNPUkVfRVhQT1JUIENTU1BhcnNlckNvbnRleHQoY29uc3QgRG9j
dW1lbnQmLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
ID0gZW1wdHlTdHJpbmcoKSk7CisgICAgYm9vbCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENT
U1Byb3BlcnR5SUQpIGNvbnN0OworICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHJl
bGF0aXZlVVJMKSBjb25zdDsKIH07CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7
IHJldHVybiAhKGEgPT0gYik7IH0KIAordm9pZCBhZGQoSGFzaGVyJiwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYpOworCiBXRUJDT1JFX0VYUE9SVCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBzdHJp
Y3RDU1NQYXJzZXJDb250ZXh0KCk7CiAKIHN0cnVjdCBDU1NQYXJzZXJDb250ZXh0SGFzaCB7Ci0g
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYga2V5KQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byB1c2UgV1RGOjpIYXNoZXIuCi0K
LSAgICAgICAgdW5zaWduZWQgaGFzaCA9IDA7Ci0gICAgICAgIGlmICgha2V5LmJhc2VVUkwuaXNO
dWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49IFdURjo6VVJMSGFzaDo6aGFzaChrZXkuYmFzZVVS
TCk7Ci0gICAgICAgIGlmICgha2V5LmNoYXJzZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgaGFz
aCBePSBTdHJpbmdIYXNoOjpoYXNoKGtleS5jaGFyc2V0KTsKLSAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIGJpdHMgPSBrZXkuaXNIVE1MRG9jdW1lbnQgICAgICAgICAgICAgICAgICA8PCAwCi0g
ICAgICAgICAgICAmIGtleS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luICAgICAgICAgICAgICAg
ICA8PCAxCi0gICAgICAgICAgICAmIGtleS5pc0NvbnRlbnRPcGFxdWUgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCAyCi0gICAgICAgICAgICAmIGtleS51c2VTeXN0ZW1BcHBlYXJhbmNlICAg
ICAgICAgICAgICAgICAgICAgICA8PCAzCi0gICAgICAgICAgICAmIGtleS5hc3BlY3RSYXRpb0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICAgICA8PCA0Ci0gICAgICAgICAgICAmIGtleS5jb2xv
ckNvbnRyYXN0RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICA8PCA1Ci0gICAgICAgICAgICAm
IGtleS5jb2xvckZpbHRlckVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICA8PCA2Ci0gICAg
ICAgICAgICAmIGtleS5jb2xvck1peEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCA3Ci0gICAgICAgICAgICAmIGtleS5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkICAgICAgICAg
ICAgICAgICA8PCA4Ci0gICAgICAgICAgICAmIGtleS5jb250YWlubWVudEVuYWJsZWQgICAgICAg
ICAgICAgICAgICAgICAgICA8PCA5Ci0gICAgICAgICAgICAmIGtleS5jc3NDb2xvcjQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAxMAotICAgICAgICAgICAgJiBrZXkuZGVmZXJy
ZWRDU1NQYXJzZXJFbmFibGVkICAgICAgICAgICAgICAgICAgPDwgMTEKLSAgICAgICAgICAgICYg
a2V5LmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCAgICAgIDw8IDEyCi0jaWYg
RU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLSAgICAgICAgICAgICYga2V5LmxlZ2Fj
eU92ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkICAgICAgIDw8IDEzCi0jZW5kaWYKLSAgICAg
ICAgICAgICYga2V5Lm92ZXJzY3JvbGxCZWhhdmlvckVuYWJsZWQgICAgICAgICAgICAgICAgIDw8
IDE0Ci0gICAgICAgICAgICAmIGtleS5yZWxhdGl2ZUNvbG9yU3ludGF4RW5hYmxlZCAgICAgICAg
ICAgICAgICA8PCAxNQotICAgICAgICAgICAgJiBrZXkuc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAg
ICAgICAgICAgICAgICAgICAgPDwgMTYKLSAgICAgICAgICAgICYga2V5LnNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCAgICAgICAgICAgICAgIDw8IDE3Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJ
WklORykKLSAgICAgICAgICAgICYga2V5LnRleHRBdXRvc2l6aW5nRW5hYmxlZCAgICAgICAgICAg
ICAgICAgICAgIDw8IDE4Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1RSQU5TRk9STV9TVFlMRV9P
UFRJTUlaRURfM0QpCi0gICAgICAgICAgICAmIGtleS50cmFuc2Zvcm1TdHlsZU9wdGltaXplZDNE
RW5hYmxlZCAgICAgICAgICA8PCAxOQotI2VuZGlmCi0gICAgICAgICAgICAmIGtleS51c2VMZWdh
Y3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yICA8PCAyMAotICAgICAgICAgICAgJiBr
ZXkuZm9jdXNWaXNpYmxlRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgPDwgMjEKLSNpZiBF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotICAgICAgICAgICAgJiBrZXkuYXR0YWNobWVudEVu
YWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMjIKLSNlbmRpZgotICAgICAgICAgICAg
JiBrZXkubW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMjM7IC8v
IEtlZXAgdGhpcyBsYXN0LgotICAgICAgICBoYXNoIF49IFdURjo6aW50SGFzaChiaXRzKTsKLSAg
ICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCi0gICAgewotICAg
ICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KSB7IHJldHVybiBjb21wdXRlSGFzaChjb250ZXh0
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgeworCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQ+IDogR2VuZXJpY0hhc2hU
cmFpdHM8V2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dD4gewogICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0JiBzbG90KSB7IG5ldyAo
Tm90TnVsbCwgJnNsb3QuYmFzZVVSTCkgVVJMKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsg
fQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6OkNTU1BhcnNl
ckNvbnRleHQmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5iYXNlVVJMLmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKaW5kZXggYzdh
NzA5YTBhMjQxMjQ0M2Q0M2YxN2Y2ZmE1ZjMxMmQ5OWIwYTNjYy4uMjcyYTJiMGU3ZDUzNzI1YTZk
NTQzOWM5MjU3NWFhZmQwOWJlYjIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxl
ci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB1bnNpZ25lZCBGb3JtRWxlbWVudEtleUhhc2g6Omhh
c2goY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSkKICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpo
YXNoTWVtb3J5PHNpemVvZihGb3JtRWxlbWVudEtleSk+KCZrZXkpOwogfQogCi1zdHJ1Y3QgRm9y
bUVsZW1lbnRLZXlIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxGb3JtRWxlbWVu
dEtleT4geworc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8Rm9y
bUVsZW1lbnRLZXk+IHsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9y
bUVsZW1lbnRLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9ybUVsZW1lbnRLZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVk
VmFsdWUoY29uc3QgRm9ybUVsZW1lbnRLZXkmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmgKaW5kZXggODNlZGQ5ZTkyNTQ5ZmFhZWYxMjUwNWUx
NTNlY2Y3MmZlYjkzMWZhOC4uY2ViODRlOTYwMjBkODg4ZWY1NmE2MmQ0YmFhZTQzNjVmMDM5MTFm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RN
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5oCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL0JveFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9ySGFzaC5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCiAjaWYg
RU5BQkxFKFRIVU5ERVIpCiAjaW5jbHVkZSAiQ0RNT3BlbkNETVR5cGVzLmgiCkBAIC0yMDUsOCAr
MjAzLDYgQEAgcHJpdmF0ZToKIGNsYXNzIENETUluc3RhbmNlUHJveHk7CiAKIGNsYXNzIENETUlu
c3RhbmNlU2Vzc2lvblByb3h5IDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvbiwgcHVibGljIENh
bk1ha2VXZWFrUHRyPENETUluc3RhbmNlU2Vzc2lvblByb3h5LCBXZWFrUHRyRmFjdG9yeUluaXRp
YWxpemF0aW9uOjpFYWdlcj4gewotcHVibGljOgotCiBwcm90ZWN0ZWQ6CiAgICAgQ0RNSW5zdGFu
Y2VTZXNzaW9uUHJveHkoQ0RNSW5zdGFuY2VQcm94eSYpOwogICAgIGNvbnN0IFdlYWtQdHI8Q0RN
SW5zdGFuY2VQcm94eT4mIGNkbUluc3RhbmNlUHJveHkoKSBjb25zdCB7IHJldHVybiBtX2luc3Rh
bmNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDA4
NzAyZDRjNzkwY2I5NjNhYmExNGE3Mjk3MTgyNWY0YzA0MmZkNzkuLmIxMWE4NzY5ZTg2MGI5M2Iw
OWQ3MzI0MWU1YmViZDU4MDhiNjJiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCkBAIC01MzUsNjMgKzUzNSwzMiBAQCB2b2lkIEZvbnQ6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3Qg
QQogfQogI2VuZGlmCiAKLWNsYXNzIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsKLXB1YmxpYzoK
LSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSgpCi0gICAgewotICAgIH0KLQotICAgIENoYXJh
Y3RlckZhbGxiYWNrTWFwS2V5KGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgVUNoYXIzMiBjaGFy
YWN0ZXIsIElzRm9yUGxhdGZvcm1Gb250IGlzRm9yUGxhdGZvcm1Gb250KQotICAgICAgICA6IGxv
Y2FsZShsb2NhbGUpCi0gICAgICAgICwgY2hhcmFjdGVyKGNoYXJhY3RlcikKLSAgICAgICAgLCBp
c0ZvclBsYXRmb3JtRm9udChpc0ZvclBsYXRmb3JtRm9udCA9PSBJc0ZvclBsYXRmb3JtRm9udDo6
WWVzKQotICAgIHsKLSAgICB9Ci0KLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogY2hhcmFjdGVyKC0xKQotICAgIHsK
LSAgICB9Ci0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gY2hhcmFjdGVyID09IC0xOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFj
dGVyRmFsbGJhY2tNYXBLZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxv
Y2FsZSA9PSBvdGhlci5sb2NhbGUgJiYgY2hhcmFjdGVyID09IG90aGVyLmNoYXJhY3RlciAmJiBp
c0ZvclBsYXRmb3JtRm9udCA9PSBvdGhlci5pc0ZvclBsYXRmb3JtRm9udDsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLQotcHJpdmF0ZToK
LSAgICBmcmllbmQgc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaDsKLQorc3RydWN0
IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsKICAgICBBdG9tU3RyaW5nIGxvY2FsZTsKICAgICBV
Q2hhcjMyIGNoYXJhY3RlciB7IDAgfTsKICAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250IHsgZmFs
c2UgfTsKIH07CiAKLXN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2ggewotICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpCi0g
ICAgewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZChr
ZXkuY2hhcmFjdGVyKTsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkuaXNGb3JQbGF0Zm9ybUZvbnQp
OwotICAgICAgICBoYXNoZXIuYWRkKGtleS5sb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAg
ICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tN
YXBLZXkmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQoreworICAgIHJldHVybiBhLmxvY2FsZSA9PSBiLmxv
Y2FsZSAmJiBhLmNoYXJhY3RlciA9PSBiLmNoYXJhY3RlciAmJiBhLmlzRm9yUGxhdGZvcm1Gb250
ID09IGIuaXNGb3JQbGF0Zm9ybUZvbnQ7Cit9CiAKK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENoYXJhY3RlckZhbGxi
YWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5sb2NhbGUsIGtleS5jaGFy
YWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9udCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tN
YXBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKK3N0cnVjdCBDaGFyYWN0ZXJG
YWxsYmFja01hcEtleUhhc2hUcmFpdHMgOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Q2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXk+IHsKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXkgeyB7IH0sIFVfU0VOVElORUwsIHsgfSB9OyB9CisgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtl
eSkgeyByZXR1cm4ga2V5LmNoYXJhY3RlciA9PSBVX1NFTlRJTkVMOyB9Cit9OworCiAvLyBGb250
cyBhcmUgbm90IHJlZidkIHRvIGF2b2lkIGN5Y2xlcy4KLS8vIEZJWE1FOiBTaG91bGRuJ3QgdGhl
c2UgYmUgV2Vha1B0cnM/Ci10eXBlZGVmIEhhc2hNYXA8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXks
IEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5Pj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Ci10
eXBlZGVmIEhhc2hNYXA8Y29uc3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1G
YWxsYmFja0NhY2hlOworLy8gRklYTUU6IENvbnNpZGVyIGNoYW5naW5nIHRoZXNlIG1hcHMgdG8g
dXNlIFdlYWtQdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlcnMuCit1c2luZyBDaGFyYWN0ZXJGYWxs
YmFja01hcCA9IEhhc2hNYXA8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleUhhc2gsIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cz47
Cit1c2luZyBTeXN0ZW1GYWxsYmFja0NhY2hlID0gSGFzaE1hcDxjb25zdCBGb250KiwgQ2hhcmFj
dGVyRmFsbGJhY2tNYXA+OwogCiBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFs
bGJhY2tDYWNoZSgpCiB7CkBAIC02MDgsMTIgKzU3Nyw4IEBAIFJlZlB0cjxGb250PiBGb250Ojpz
eXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZv
bnRECiAgICAgICAgIHJldHVybiBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRD
YWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCAmY29kZVVuaXQsIDEpOwogICAgIH0KIAotICAg
IGF1dG8ga2V5ID0gQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoZGVzY3JpcHRpb24uY29tcHV0ZWRM
b2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9udCk7Ci0gICAgYXV0byBjaGFyYWN0
ZXJBZGRSZXN1bHQgPSBmb250QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hZGQoV1RGTW92ZShr
ZXkpLCBudWxscHRyKTsKLQotICAgIEZvbnQqJiBmYWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKKyAgICBh
dXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgZGVzY3JpcHRpb24uY29tcHV0ZWRM
b2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9udCAhPSBJc0ZvclBsYXRmb3JtRm9u
dDo6Tm8gfTsKKyAgICByZXR1cm4gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZW5zdXJl
KFdURk1vdmUoa2V5KSwgWyZdIHsKICAgICAgICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAg
ICB1bnNpZ25lZCBjb2RlVW5pdHNMZW5ndGg7CiAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0
ZXIpKSB7CkBAIC02MjQsMTMgKzU4OSwxMSBAQCBSZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFs
bGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RAogICAg
ICAgICAgICAgY29kZVVuaXRzWzFdID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7CiAgICAgICAgICAg
ICBjb2RlVW5pdHNMZW5ndGggPSAyOwogICAgICAgICB9Ci0KLSAgICAgICAgZmFsbGJhY2tGb250
ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVz
Y3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9y
ZWRGb250OjpObywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOwotICAgICAgICBp
ZiAoZmFsbGJhY2tGb250KQotICAgICAgICAgICAgZmFsbGJhY2tGb250LT5tX2lzVXNlZEluU3lz
dGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbGxiYWNrRm9u
dDsKKyAgICAgICAgYXV0byBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBG
b250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5n
dGgpLmdldCgpOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIGZvbnQtPm1faXNVc2Vk
SW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAg
fSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiB2b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxs
YmFja0NhY2hlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBj
N2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi42NTNiMzM4YjdjMzQyNTYy
NzIyNDk2MTFlMjcwMWFjNWQyNjNlOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCkBAIC02NCw3ICs2NCw3IEBAIHN0cnVjdCBHbHlwaERhdGE7CiAKIGVudW0gRm9u
dFZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwg
RW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRj
aCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwotZW51bSBjbGFz
cyBJc0ZvclBsYXRmb3JtRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CitlbnVtIGNsYXNzIElz
Rm9yUGxhdGZvcm1Gb250IDogYm9vbCB7IE5vLCBZZXMgfTsKIAogI2lmIFVTRShDT1JFX1RFWFQp
CiBib29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYsIHVuc2lnbmVkIHRhYmxlVGFnKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IGVkZjJm
ZTA0NzNhZjNhODYwNjE1MzE3NDM4MzIxYmQ5Y2E5ZTAyODYuLjhiYjMzZWQ1N2FlODQyY2YxMDk0
NmFkMjc0N2I5NTk2Y2IwNGE1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8d2Via2l0QG5pY2tzaGFua3MuY29t
PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDcsODggKzQ3LDY5IEBACiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIFdURjsKIAotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KCkgeyB9Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywg
Rm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykK
LSAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBt
X2ZhbWlseShmYW1pbHkpCi0gICAgICAgICwgbV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVh
dHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKLSAgICAg
ICAgLCBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzKGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQotICAgIHsg
fQotCi0gICAgZXhwbGljaXQgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUgdCkKLSAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleSh0KQotICAgIHsg
fQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbktleSAhPSBvdGhlci5tX2ZvbnRE
ZXNjcmlwdGlvbktleQotICAgICAgICAgICAgfHwgbV9mb250RmFjZUZlYXR1cmVzICE9IG90aGVy
Lm1fZm9udEZhY2VGZWF0dXJlcwotICAgICAgICAgICAgfHwgbV9mb250RmFjZUNhcGFiaWxpdGll
cyAhPSBvdGhlci5tX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAobV9mYW1pbHkuaW1wbCgpID09IG90aGVyLm1fZmFtaWx5LmltcGwo
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAobV9mYW1pbHkuaXNOdWxs
KCkgfHwgb3RoZXIubV9mYW1pbHkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVx
dWFsKG1fZmFtaWx5LCBvdGhlci5tX2ZhbWlseSk7Ci0gICAgfQorRm9udEZhbWlseU5hbWU6OkZv
bnRGYW1pbHlOYW1lKCkgPSBkZWZhdWx0OwogCi0gICAgRm9udERlc2NyaXB0aW9uS2V5IG1fZm9u
dERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7Ci0gICAgRm9udEZlYXR1
cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7Ci0gICAgRm9udFNlbGVjdGlvblNwZWNpZmll
ZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwotfTsKK2lubGluZSBGb250RmFt
aWx5TmFtZTo6Rm9udEZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKKyAgICA6IG1f
bmFtZSB7IG5hbWUgfQoreworfQogCi1zdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFz
aCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5JiBmb250S2V5KQotICAgIHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAg
ICAgIGhhc2hlci5hZGQoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goZm9u
dEtleS5tX2ZhbWlseSkpOwotICAgICAgICBoYXNoZXIuYWRkKGZvbnRLZXkubV9mb250RGVzY3Jp
cHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgICAgIGhhc2hlci5hZGQoZm9udEtleS5tX2Zv
bnRGYWNlRmVhdHVyZXMuaGFzaCgpKTsKLSAgICAgICAgaWYgKGF1dG8gd2VpZ2h0ID0gZm9udEtl
eS5tX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzLndlaWdodCkKLSAgICAgICAgICAgIGhhc2hlci5hZGQo
d2VpZ2h0LT51bmlxdWVWYWx1ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFzaGVy
LmFkZChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICBpZiAo
YXV0byB3aWR0aCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAg
ICAgICAgICBoYXNoZXIuYWRkKHdpZHRoLT51bmlxdWVWYWx1ZSgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgaGFzaGVyLmFkZChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkpOwotICAgICAgICBpZiAoYXV0byBzbG9wZSA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxp
dGllcy53ZWlnaHQpCi0gICAgICAgICAgICBoYXNoZXIuYWRkKHNsb3BlLT51bmlxdWVWYWx1ZSgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAg
ICB9CitpbmxpbmUgY29uc3QgQXRvbVN0cmluZyYgRm9udEZhbWlseU5hbWU6OnN0cmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbmFtZTsKK30KIAotICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9CitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBuYW1lKQorewor
ICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gaGFzaCB0aGUgY2hhcmFjdGVycyBpbiB0
aGUgbmFtZSBpbnN0ZWFkIG9mIGhhc2hpbmcgYSBoYXNoLgorICAgIGlmICghbmFtZS5zdHJpbmco
KS5pc051bGwoKSkKKyAgICAgICAgYWRkKGhhc2hlciwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZUhhc2gobmFtZS5zdHJpbmcoKSkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBhLCBjb25zdCBGb250RmFtaWx5TmFtZSYgYikKK3sK
KyAgICByZXR1cm4gKGEuc3RyaW5nKCkuaXNOdWxsKCkgfHwgYi5zdHJpbmcoKS5pc051bGwoKSkg
PyBhLnN0cmluZygpID09IGIuc3RyaW5nKCkgOiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lc0FyZUVxdWFsKGEuc3RyaW5nKCksIGIuc3RyaW5nKCkpOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBhLCBjb25zdCBGb250RmFtaWx5TmFt
ZSYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQogCitzdHJ1Y3QgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5IHsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZGVzY3JpcHRpb25LZXk7Cisg
ICAgRm9udEZhbWlseU5hbWUgZmFtaWx5OworICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgZmVhdHVy
ZXM7CisgICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7
Cit9OworCitzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBiKQoreworICAgIHJldHVy
biBhLmRlc2NyaXB0aW9uS2V5ID09IGIuZGVzY3JpcHRpb25LZXkgJiYgYS5mYW1pbHkgPT0gYi5m
YW1pbHkgJiYgYS5mZWF0dXJlcyA9PSBiLmZlYXR1cmVzICYmIGEuY2FwYWJpbGl0aWVzID09IGIu
Y2FwYWJpbGl0aWVzOworfQorCitzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5kZXNjcmlwdGlvbktleSwga2V5LmZhbWls
eSwga2V5LmZlYXR1cmVzLCBrZXkuY2FwYWJpbGl0aWVzLnRpZWQoKSk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAK
IHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IHsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwotfTsKLQotc3RydWN0IEZv
bnREYXRhQ2FjaGVLZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVs
ZXRlZFZhbHVlKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgc2xvdCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBwbGF0Zm9ybURhdGEuaGFzaCgpOworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90
KSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeyBGb250RGVzY3JpcHRpb25LZXkgeyBXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSB9LCB7IH0sIHsgfSwgeyB9IH07CiAgICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgYSwgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgYikKKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Cisg
ICAgICAgIHJldHVybiBrZXkuZGVzY3JpcHRpb25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsKICAgICB9Cit9OwogCitzdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGRhdGEpIHsgcmV0dXJuIGRh
dGEuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKIH07CiAKQEAgLTE0MSw3ICsxMjIsNyBAQCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0
cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0YT4gewogICAgIH0KICAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YSYgc2xv
dCkKICAgICB7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGEo
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9u
dFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CiAgICAgfQogICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHZhbHVlKQog
ICAgIHsKQEAgLTE3NywxNCArMTU4LDE0IEBAIEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0
b24oKQogICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7CiB9CiAKLUZvbnRDYWNoZTo6fkZvbnRD
YWNoZSgpID0gZGVmYXVsdDsKLQogRm9udENhY2hlOjpGb250Q2FjaGUoKQogICAgIDogbV9wdXJn
ZVRpbWVyKCp0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkK
ICAgICAsIG1fZm9udERhdGFDYWNoZXMobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlcz4oKSkK
IHsKIH0KIAorRm9udENhY2hlOjp+Rm9udENhY2hlKCkgPSBkZWZhdWx0OworCiBPcHRpb25hbDxB
U0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
IGZhbWlseU5hbWUpCiB7CiAgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9
IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKQEAgLTIyNSw4ICsyMDYs
OCBAQCBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3NlZEZhbWlseU5hbWUsCi0gICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKKyAgICBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBjYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2Zv
bnRMb2NrKTsKQEAgLTI0NiwyNCArMjI3LDIzIEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAg
ICAgICAgIHBsYXRmb3JtSW5pdCgpOwogICAgIH0pOwogCi0gICAgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5IGtleShmYW1pbHlOYW1lLCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMs
IGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5
IHsgZm9udERlc2NyaXB0aW9uLCB7IGZhbWlseU5hbWUgfSwgZmVhdHVyZXMgPyAqZmVhdHVyZXMg
OiBGb250RmVhdHVyZVNldHRpbmdzIHsgfSwgY2FwYWJpbGl0aWVzIH07CiAKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5hZGQoa2V5LCBudWxscHRy
KTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0
ZXJhdG9yOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpdC0+dmFs
dWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotCisgICAgICAgIGl0LT52
YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1l
LCBmZWF0dXJlcywgY2FwYWJpbGl0aWVzKTsKICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkgewotICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8g
ZmluZCBhIGZvbnQuICBXZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMg
dG8gb3RoZXIgbmFtZXMsCi0gICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENv
dXJpZXIvQ291cmllciBOZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRo
ZSBhbGlhc2VkIG5hbWUuCisgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEg
Zm9udC4gV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVy
IG5hbWVzLAorICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0Nv
dXJpZXIgTmV3LCBldGMuIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2Vk
IG5hbWUuCiAgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRlRmFt
aWx5TmFtZShmYW1pbHlOYW1lKSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQbGF0Zm9y
bURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVz
Y3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFi
aWxpdGllcywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkgaW4gdGhl
IGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZlCi0gICAg
ICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNhbGwgdG8g
Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgorICAgICAgICAgICAgICAgIGF1dG8qIGFsdGVy
bmF0ZURhdGEgPSBjYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVy
bmF0ZU5hbWUsIGZlYXR1cmVzLCBjYXBhYmlsaXRpZXMsIHRydWUpOworICAgICAgICAgICAgICAg
IC8vIExvb2sgdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlv
dXMgaXRlcmF0b3IgbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVk
IGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBjYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAg
ICAgICAgICAgICAgaXQgPSBtX2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9ybURhdGEuZmluZChrZXkp
OwogICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtX2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9y
bURhdGEuZW5kKCkpOwotICAgICAgICAgICAgICAgIGlmIChmb250UGxhdGZvcm1EYXRhRm9yQWx0
ZXJuYXRlTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgaXQtPnZhbHVlID0gbWFrZVVuaXF1ZTxG
b250UGxhdGZvcm1EYXRhPigqZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUpOworICAg
ICAgICAgICAgICAgIGlmIChhbHRlcm5hdGVEYXRhKQorICAgICAgICAgICAgICAgICAgICBpdC0+
dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KCphbHRlcm5hdGVEYXRhKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI4MiwxMiArMjYyLDEyIEBAIGNvbnN0
IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgdW5zaWduZWQg
Y01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBjb25zdCB1bnNp
Z25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAot
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBh
YmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
KQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIGNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgaWYg
KCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwogCi0gICAgaWYgKGF1dG8qIHBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGZvbnRGYWNlRmVhdHVyZXMsIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzLCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpKQorICAgIGlmIChhdXRv
KiBwbGF0Zm9ybURhdGEgPSBjYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwg
ZmFtaWx5LCBmZWF0dXJlcywgY2FwYWJpbGl0aWVzLCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpKQog
ICAgICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EYXRhKTsKIAogICAg
IHJldHVybiBudWxscHRyOwpAQCAtMzc1LDMwICszNTUsMTUgQEAgdm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogCiBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtl
eSYgYikKIHsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25LZXkgIT0gYi5mb250RGVzY3JpcHRp
b25LZXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5mb250U2VsZWN0b3JJZCAh
PSBiLmZvbnRTZWxlY3RvcklkIHx8IGEuZm9udFNlbGVjdG9yVmVyc2lvbiAhPSBiLmZvbnRTZWxl
Y3RvclZlcnNpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBzaXplID0g
YS5mYW1pbGllcy5zaXplKCk7Ci0gICAgaWYgKHNpemUgIT0gYi5mYW1pbGllcy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIGlmICghRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNB
cmVFcXVhbChhLmZhbWlsaWVzW2ldLCBiLmZhbWlsaWVzW2ldKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEuZm9udERlc2Ny
aXB0aW9uS2V5ID09IGIuZm9udERlc2NyaXB0aW9uS2V5CisgICAgICAgICYmIGEuZm9udFNlbGVj
dG9ySWQgPT0gYi5mb250U2VsZWN0b3JJZAorICAgICAgICAmJiBhLmZvbnRTZWxlY3RvclZlcnNp
b24gPT0gYi5mb250U2VsZWN0b3JWZXJzaW9uCisgICAgICAgICYmIGEuZmFtaWxpZXMgPT0gYi5m
YW1pbGllczsKIH0KIAogdW5zaWduZWQgRm9udENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2goY29u
c3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5KQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgaGFz
aCB0aGUga2V5IGFuZCB0aGUgZmFtaWx5IG5hbWUgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBtYWtp
bmcgYSBoYXNoIG91dCBvZiBvdGhlciBoYXNoZXMuCi0gICAgSGFzaGVyIGhhc2hlcjsKLSAgICBh
ZGQoaGFzaGVyLCBrZXkuZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIGFk
ZChoYXNoZXIsIGtleS5mb250U2VsZWN0b3JJZCk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRT
ZWxlY3RvclZlcnNpb24pOwotICAgIGZvciAoYXV0byYgZmFtaWx5IDoga2V5LmZhbWlsaWVzKQot
ICAgICAgICBhZGQoaGFzaGVyLCBmYW1pbHkuaXNOdWxsKCkgPyAwIDogV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goZmFtaWx5KSk7Ci0gICAgcmV0dXJuIGhh
c2hlci5oYXNoKCk7CisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5mb250RGVzY3JpcHRpb25L
ZXksIGtleS5mb250U2VsZWN0b3JJZCwga2V5LmZvbnRTZWxlY3RvclZlcnNpb24sIGtleS5mYW1p
bGllcyk7CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgp
CkBAIC00NTYsMTEgKzQyMSwxMSBAQCBSZWY8Rm9udENhc2NhZGVGb250cz4gRm9udENhY2hlOjpy
ZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcgogICAgICAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKICAgICBhdXRv
JiBuZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBt
YWtlVW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oV1RGTW92ZShrZXkpLCBGb250Q2FzY2Fk
ZUZvbnRzOjpjcmVhdGUoV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CisgICAgbmV3RW50cnkgPSBt
YWtlVW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oRm9udENhc2NhZGVDYWNoZUVudHJ5IHsg
V1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGUoV1RGTW92ZShmb250U2VsZWN0
b3IpKSB9KTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZv
bnRzLmdldCgpOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVucmVmZXJlbmNlZFBydW5l
SW50ZXJ2YWwgPSA1MDsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1FbnRyaWVzID0gNDAw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZh
bCA9IDUwOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1FbnRyaWVzID0gNDAwOwog
ICAgIHN0YXRpYyB1bnNpZ25lZCBwcnVuZUNvdW50ZXI7CiAgICAgLy8gUmVmZXJlbmNlZCBGb250
Q2FzY2FkZUZvbnRzIHdvdWxkIGV4aXN0IGFueXdheSBzbyBwcnVuaW5nIHRoZW0gc2F2ZXMgbGl0
dGxlIG1lbW9yeS4KICAgICBpZiAoISgrK3BydW5lQ291bnRlciAlIHVucmVmZXJlbmNlZFBydW5l
SW50ZXJ2YWwpKQpAQCAtNTE1LDE1ICs0ODAsMTAgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRh
dGUoKQogI2VuZGlmCiAgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKIAotICAgIG1f
Z2VuZXJhdGlvbisrOwotCi0gICAgVmVjdG9yPFJlZjxGb250U2VsZWN0b3I+PiBjbGllbnRzOwot
ICAgIGNsaWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NsaWVudHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKGF1dG8gaXQgPSBtX2NsaWVudHMuYmVnaW4oKSwgZW5kID0gbV9jbGllbnRzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNsaWVudHMudW5jaGVja2VkQXBwZW5kKCoqaXQp
OworICAgICsrbV9nZW5lcmF0aW9uOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNs
aWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNsaWVudHNbaV0tPmZvbnRDYWNoZUludmFsaWRh
dGVkKCk7CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxSZWZQdHI8Rm9u
dFNlbGVjdG9yPj4obV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb250Q2FjaGVJbnZhbGlk
YXRlZCgpOwogCiAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDc1MDFjMmRmMGRmMjNmMDQ4
YzcwMGFhYzAwYmY3YzJhYjI3OTg4MzcuLjRlYmE2ZmNmMmY3YzgwNDhmYjgzZDY1NTRiOGZkNmFm
ODdjMWFjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDggVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03LDEzICs3LDEzIEBA
CiAgKiBhcmUgbWV0OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCiAgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECkBAIC02NCwxNyArNjQsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBGb250OwogY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBPcGVuVHlwZVZlcnRpY2FsRGF0YTsK
LWNsYXNzIEZvbnQ7Ci1lbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1Gb250IDogdWludDhfdDsKIAot
I2lmIFBMQVRGT1JNKFdJTikKLSNpZiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCi10eXBlZGVmIElN
TGFuZ0ZvbnRMaW5rMiBJTUxhbmdGb250TGlua1R5cGU7Ci0jZWxzZQotdHlwZWRlZiBJTUxhbmdG
b250TGluayBJTUxhbmdGb250TGlua1R5cGU7CitlbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1Gb250
IDogYm9vbDsKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKElNTEFOR19GT05UX0xJTksyKQor
dXNpbmcgSU1MYW5nRm9udExpbmtUeXBlID0gSU1MYW5nRm9udExpbmsyOwogI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXSU4pICYmICFVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdG
b250TGlua1R5cGUgPSBJTUxhbmdGb250TGluazsKICNlbmRpZgogCiAvLyBUaGlzIGtleSBjb250
YWlucyB0aGUgRm9udERlc2NyaXB0aW9uIGZpZWxkcyBvdGhlciB0aGFuIGZhbWlseSB0aGF0IG1h
dHRlciB3aGVuIGZldGNoaW5nIEZvbnREYXRhcyAocGxhdGZvcm0gZm9udHMpLgpAQCAtMTEyLDE3
ICsxMTMsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKIAogICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVlOyB9CiAK
LSAgICBpbmxpbmUgdW5zaWduZWQgY29tcHV0ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAg
SGFzaGVyIGhhc2hlcjsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9zaXplKTsKLSAgICAgICAgYWRk
KGhhc2hlciwgbV9mb250U2VsZWN0aW9uUmVxdWVzdC50aWVkKCkpOwotICAgICAgICBhZGQoaGFz
aGVyLCBtX2xvY2FsZS5leGlzdGluZ0hhc2goKSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fZmxh
Z3MpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2ZlYXR1cmVTZXR0aW5ncy5oYXNoKCkpOwotICAg
ICAgICBhZGQoaGFzaGVyLCBtX3ZhcmlhdGlvblNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIHJl
dHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KKyAgICBmcmllbmQgdm9pZCBhZGQoSGFzaGVyJiwg
Y29uc3QgRm9udERlc2NyaXB0aW9uS2V5Jik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHN0ZDo6
YXJyYXk8dW5zaWduZWQsIDI+IG1ha2VGbGFnc0tleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQpAQCAtMTY1LDIzICsxNTYsMzYgQEAgcHJpdmF0ZToKICAgICBGb250VmFyaWF0
aW9uU2V0dGluZ3MgbV92YXJpYXRpb25TZXR0aW5nczsKIH07CiAKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgRm9udERlc2NyaXB0aW9uS2V5JiBrZXkpCit7CisgICAgYWRk
KGhhc2hlciwga2V5Lm1fc2l6ZSwga2V5Lm1fZm9udFNlbGVjdGlvblJlcXVlc3QsIGtleS5tX2Zs
YWdzLCBrZXkubV9sb2NhbGUsIGtleS5tX2ZlYXR1cmVTZXR0aW5ncywga2V5Lm1fdmFyaWF0aW9u
U2V0dGluZ3MpOworfQorCiBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udERlc2NyaXB0aW9uS2V5JiBrZXkpCi0gICAgewot
ICAgICAgICByZXR1cm4ga2V5LmNvbXB1dGVIYXNoKCk7Ci0gICAgfQorICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbktleSYga2V5KSB7IHJldHVybiBjb21wdXRl
SGFzaChrZXkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udERlc2NyaXB0aW9u
S2V5JiBhLCBjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OwogCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udERlc2NyaXB0aW9u
S2V5JiBhLCBjb25zdCBGb250RGVzY3JpcHRpb25LZXkmIGIpCi0gICAgewotICAgICAgICByZXR1
cm4gYSA9PSBiOwotICAgIH0KKy8vIFRoaXMgY2xhc3MgaG9sZHMgdGhlIG5hbWUgb2YgYSBmb250
IGZhbWlseSwgYW5kIGRlZmluZXMgaGFzaGluZyBhbmQgPT0gb2YgdGhpcyBuYW1lIHRvCisvLyB1
c2UgdGhlIHJ1bGVzIGZvciBmb250IGZhbWlseSBuYW1lcyBpbnN0ZWFkIG9mIHVzaW5nIHN0cmFp
Z2h0IHN0cmluZyBjb21wYXJpc29uLgorY2xhc3MgRm9udEZhbWlseU5hbWUgeworcHVibGljOgor
ICAgIEZvbnRGYW1pbHlOYW1lKCk7CisgICAgRm9udEZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYpOworICAgIGNvbnN0IEF0b21TdHJpbmcmIHN0cmluZygpIGNvbnN0OworICAgIGZyaWVuZCB2
b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250RmFtaWx5TmFtZSYpOwogCi0gICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworcHJpdmF0ZToK
KyAgICBBdG9tU3RyaW5nIG1fbmFtZTsKIH07CiAKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBGb250
RmFtaWx5TmFtZSYsIGNvbnN0IEZvbnRGYW1pbHlOYW1lJik7Citib29sIG9wZXJhdG9yIT0oY29u
c3QgRm9udEZhbWlseU5hbWUmLCBjb25zdCBGb250RmFtaWx5TmFtZSYpOworCiBzdHJ1Y3QgRm9u
dENhc2NhZGVDYWNoZUtleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlv
bktleTsgLy8gU2hhcmVkIHdpdGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2FjaGluZyBG
b250IG9iamVjdHMpCi0gICAgVmVjdG9yPEF0b21TdHJpbmcsIDM+IGZhbWlsaWVzOworICAgIFZl
Y3RvcjxGb250RmFtaWx5TmFtZSwgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNlbGVj
dG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0xODksMjYg
KzE5MywyMiBAQCBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtleSB7CiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsK
IAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgRm9udENhc2NhZGVDYWNoZUVudHJ5KEZvbnRDYXNjYWRlQ2Fj
aGVLZXkmJiBrZXksIFJlZjxGb250Q2FzY2FkZUZvbnRzPiYmIGZvbnRzKQotICAgICAgICA6IGtl
eShXVEZNb3ZlKGtleSkpCi0gICAgICAgICwgZm9udHMoV1RGTW92ZShmb250cykpCi0gICAgeyB9
CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCiAgICAgRm9udENhc2NhZGVD
YWNoZUtleSBrZXk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGZvbnRzOwogfTsKIAogc3Ry
dWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNhY2hlS2V5Jik7Ci0gICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgYSwgY29uc3QgV2ViQ29yZTo6
Rm9udENhc2NhZGVDYWNoZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5Jik7CisgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwgY29uc3QgRm9udENhc2Nh
ZGVDYWNoZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCi1zdHJ1Y3Qg
Rm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXk+IHsKLSAgICBzdGF0aWMgV2ViQ29yZTo6Rm9udENh
c2NhZGVDYWNoZUtleSBlbXB0eVZhbHVlKCkgeyByZXR1cm4geyB9OyB9Ci0gICAgc3RhdGljIHZv
aWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXkmIHNs
b3QpIHsgc2xvdC5mb250U2VsZWN0b3JJZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKTsgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6
OkZvbnRDYXNjYWRlQ2FjaGVLZXkmIHNsb3QpIHsgcmV0dXJuIHNsb3QuZm9udFNlbGVjdG9ySWQg
PT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9CitzdHJ1Y3QgRm9udENh
c2NhZGVDYWNoZUtleUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEZvbnRDYXNjYWRlQ2FjaGVLZXk+
IHsKKyAgICBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBlbXB0eVZhbHVlKCkgeyByZXR1cm4g
eyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZvbnRDYXNjYWRl
Q2FjaGVLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udENhc2NhZGVDYWNoZUtl
eSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0sIHsg
fSwgeyB9LCB7IH0gfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4ga2V5LmZvbnREZXNjcmlwdGlvbktleS5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiB9OwogCiB1c2luZyBGb250Q2FzY2FkZUNhY2hl
ID0gSGFzaE1hcDxGb250Q2FzY2FkZUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udENhc2Nh
ZGVDYWNoZUVudHJ5PiwgRm9udENhc2NhZGVDYWNoZUtleUhhc2gsIEZvbnRDYXNjYWRlQ2FjaGVL
ZXlIYXNoVHJhaXRzPjsKQEAgLTIyNSw3ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgfkZvbnRDYWNo
ZSgpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRm
b3JtLgotICAgIGVudW0gY2xhc3MgUHJlZmVyQ29sb3JlZEZvbnQgOiB1aW50OF90IHsgTm8sIFll
cyB9OworICAgIGVudW0gY2xhc3MgUHJlZmVyQ29sb3JlZEZvbnQgOiBib29sIHsgTm8sIFllcyB9
OwogICAgIFJlZlB0cjxGb250PiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgSXNGb3JQbGF0Zm9y
bUZvbnQsIFByZWZlckNvbG9yZWRGb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKTsKICAgICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdCgpOwpAQCAtMjM1LDYgKzIzNSw3IEBAIHB1YmxpYzoKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRGb250QWxs
b3dsaXN0KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJ
TikKICAgICBJTUxhbmdGb250TGlua1R5cGUqIGdldEZvbnRMaW5rSW50ZXJmYWNlKCk7CiAgICAg
c3RhdGljIHZvaWQgY29tSW5pdGlhbGl6ZSgpOwpAQCAtMzAxLDExICszMDIsMTAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogICAgIFJlZjxGb250Q2Fz
Y2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogCi0gICAgLy8gRklYTUU6IFRoaXMg
bWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCi0gICAgRm9udFBsYXRmb3JtRGF0
YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2Up
OworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyA9IHsg
fSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKLSAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisgICAgLy8gVGhlc2Ug
ZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtICh1bmNsZWFyIHdoaWNo
IGZ1bmN0aW9ucyB0aGlzIGNvbW1lbnQgYXBwbGllcyB0bykuCisgICAgV0VCQ09SRV9FWFBPUlQg
c3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyk7
CiAgICAgCiAgICAgc3RhdGljIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gYWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBw
bGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CkBAIC0zMzIsNiArMzMy
LDcgQEAgcHJpdmF0ZToKIAogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7
CiAjZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBGb250OwogfTsKIApAQCAtMzQ4LDcgKzM0OSw2
IEBAIGlubGluZSB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEo
KQogCiAjZW5kaWYKIAotCiBpbmxpbmUgYm9vbCBGb250Q2FjaGU6OlByZXdhcm1JbmZvcm1hdGlv
bjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNlZW5GYW1pbGllcy5pc0VtcHR5KCkg
JiYgZm9udE5hbWVzUmVxdWlyaW5nU3lzdGVtRmFsbGJhY2suaXNFbXB0eSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5o
CmluZGV4IGFkYWZmM2MxNDZkYzcyMzVmZjA1OTZkNGZjNDc2Nzk3NWIxNTgyMTMuLjYwNzcwY2Q2
NGMzOTE4YjAwMDUxZTc0NTdiYmVmNDM3NGYyYWVjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKQEAgLTM1LDcg
KzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBVU2NyaXB0Q29kZSB1c2VzIC0xIGFu
ZCAwIGZvciBVU2NyaXB0SW52YWxpZENvZGUgYW5kIFVTY3JpcHRDb21tb24uCiAvLyBXZSBuZWVk
IHRvIHVzZSAtMiBhbmQgLTMgZm9yIGVtcHR5IHZhbHVlIGFuZCBkZWxldGVkIHZhbHVlLgotc3Ry
dWN0IFVTY3JpcHRDb2RlSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8aW50PiB7
CitzdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxpbnQ+IHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CiAgICAgc3RhdGljIGlu
dCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gLTI7IH0KICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoaW50JiBzbG90KSB7IHNsb3QgPSAtMzsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oCmlu
ZGV4IGU2MjMzNTA0ZDkzMTAxMzQyMTIyYjdiYzJjNzAzZmU1MmNmNzRhYTMuLjY2ZjhmZGMxNzVi
NmEzMTA5NzE4NmYyZDRiYzc3MDFmNzViNDRlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgKQEAgLTI5
MSw2ICsyOTEsMTEgQEAgY29uc3RleHByIEZvbnRTZWxlY3Rpb25WYWx1ZSB1bHRyYUV4cGFuZGVk
U3RyZXRjaFZhbHVlKCkKICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlIHsgMjAwIH07CiB9
CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgRm9udFNlbGVjdGlvblZh
bHVlJiB2YWx1ZSkKK3sKKyAgICBhZGQoaGFzaGVyLCB2YWx1ZS5yYXdWYWx1ZSgpKTsKK30KKwog
Ly8gW0luY2x1c2l2ZSwgSW5jbHVzaXZlXQogc3RydWN0IEZvbnRTZWxlY3Rpb25SYW5nZSB7CiAg
ICAgdXNpbmcgVmFsdWUgPSBGb250U2VsZWN0aW9uVmFsdWU7CkBAIC0zMzQsMTQgKzMzOSw2IEBA
IHN0cnVjdCBGb250U2VsZWN0aW9uUmFuZ2UgewogICAgICAgICByZXR1cm4gdGFyZ2V0ID49IG1p
bmltdW0gJiYgdGFyZ2V0IDw9IG1heGltdW07CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMg
bmFtZSBpcyBub3Qgc28gZ3JlYXQuIE1vdmUgdGhpcyBpbnRvIHRoZSBhZGQgZnVuY3Rpb24gYmVs
b3cKLSAgICAvLyBvbmNlIHdlIG1vdmUgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCBmcm9t
IEludGVnZXJIYXNoZXIgdG8gSGFzaGVyLAotICAgIC8vIGFuZCB0aGVuIGl0IGRvZXNuJ3QgbmVl
ZCB0byBoYXZlIGEgbmFtZS4KLSAgICBjb25zdGV4cHIgdWludDMyX3QgdW5pcXVlVmFsdWUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1pbmltdW0ucmF3VmFsdWUoKSA8PCAxNiB8IG1h
eGltdW0ucmF3VmFsdWUoKTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgog
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKIApAQCAtMzc3LDcgKzM3NCw3IEBAIE9w
dGlvbmFsPEZvbnRTZWxlY3Rpb25SYW5nZT4gRm9udFNlbGVjdGlvblJhbmdlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIAogaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBG
b250U2VsZWN0aW9uUmFuZ2UmIHJhbmdlKQogewotICAgIGFkZChoYXNoZXIsIHJhbmdlLnVuaXF1
ZVZhbHVlKCkpOworICAgIGFkZChoYXNoZXIsIHJhbmdlLm1pbmltdW0sIHJhbmdlLm1heGltdW0p
OwogfQogCiBzdHJ1Y3QgRm9udFNlbGVjdGlvblJlcXVlc3QgewpAQCAtMzg1LDYgKzM4Miw3IEBA
IHN0cnVjdCBGb250U2VsZWN0aW9uUmVxdWVzdCB7CiAKICAgICBWYWx1ZSB3ZWlnaHQ7CiAgICAg
VmFsdWUgd2lkdGg7CisKICAgICAvLyBGSVhNRTogV2UgYXJlIHVzaW5nIGFuIG9wdGlvbmFsIGhl
cmUgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIGV4cGxpY2l0CiAgICAgLy8g
b3IgaW1wbGljaXQgc2xvcGUgKGZvciAiaXRhbGljIiBhbmQgIm9ibGlxdWUiKSBhbmQgdGhlICJu
b3JtYWwiIHZhbHVlIHdoaWNoIGhhcyBubwogICAgIC8vIHNsb3BlLiBUaGUgIml0YWxpYyIgYW5k
ICJvYmxpcXVlIiB2YWx1ZXMgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkgbG9va2luZyBhdCB0aGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRT
ZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2Vk
U2V0dGluZ3MuY3BwCmluZGV4IDhhOGM3OTdmNjQ3MTIzOWYxZTdjZjhhNWQyN2UzMDZkNTg5MzNl
YjAuLmJkZWViZTgwMDE0MTQ0OGI1OGM3NDJmY2ZiYjRhN2ViOTZkNDU2MmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdz
LmNwcApAQCAtMjcsNDIgKzI3LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Rm9udFRhZ2dlZFNldHRpbmdzLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPD4KLXVuc2lnbmVkIEZv
bnRGZWF0dXJlU2V0dGluZ3M6Omhhc2goKSBjb25zdAotewotICAgIEludGVnZXJIYXNoZXIgaGFz
aGVyOwotICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1fbGlzdCkgewotICAgICAgICBoYXNoZXIu
YWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpoYXNoKGZlYXR1cmUudGFnKCkpKTsKLSAgICAgICAg
aGFzaGVyLmFkZChmZWF0dXJlLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhh
c2goKTsKLX0KLQotdGVtcGxhdGUgPD4KLXVuc2lnbmVkIEZvbnRWYXJpYXRpb25TZXR0aW5nczo6
aGFzaCgpIGNvbnN0Ci17Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZmxvYXQpID09IHNpemVv
ZihpbnQpLCAiSW50ZWdlckhhc2hlciBuZWVkcyB0byBhY2NlcHQgZmxvYXRzIHRvbyIpOwotICAg
IHVuaW9uIHsKLSAgICAgICAgZmxvYXQgZjsKLSAgICAgICAgaW50IGk7Ci0gICAgfSBmbG9hdFRv
SW50OwotCi0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgZm9yIChhdXRvJiB2YXJpYXRp
b24gOiBtX2xpc3QpIHsKLSAgICAgICAgaGFzaGVyLmFkZChGb3VyQ2hhcmFjdGVyVGFnSGFzaDo6
aGFzaCh2YXJpYXRpb24udGFnKCkpKTsKLSAgICAgICAgZmxvYXRUb0ludC5mID0gdmFyaWF0aW9u
LnZhbHVlKCk7Ci0gICAgICAgIGhhc2hlci5hZGQoZmxvYXRUb0ludC5pKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGhhc2hlci5oYXNoKCk7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgaXRlbSkKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZvbnRUYWdnZWRTZXR0aW5nczxmbG9h
dD4mIGl0ZW0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW0uc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgYXV0byYgdmFyaWF0aW9uID0gaXRlbS5hdChpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmgKaW5k
ZXggYjkyMDM0ZWEyMTY4OWZiYTRlZjU1M2NlMmZhOGY1YmM0YWMxZTMxNy4uMTI4ZGFmN2U2M2Jj
NzNkYTlmZWQxY2MzYTllNDJhY2Y1Njg5Mzk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmgKQEAgLTM2LDIwICszNiwy
NiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYg
c3RkOjphcnJheTxjaGFyLCA0PiBGb250VGFnOwordXNpbmcgRm9udFRhZyA9IHN0ZDo6YXJyYXk8
Y2hhciwgND47CiAKLWlubGluZSBGb250VGFnIGZvbnRGZWF0dXJlVGFnKGNvbnN0IGNoYXIgYXJy
WzRdKSB7IHJldHVybiB7eyBhcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM10gfX07IH0KK2lu
bGluZSBGb250VGFnIGZvbnRGZWF0dXJlVGFnKGNvbnN0IGNoYXIgY2hhcmFjdGVyc1s0XSkgeyBy
ZXR1cm4ge3sgY2hhcmFjdGVyc1swXSwgY2hhcmFjdGVyc1sxXSwgY2hhcmFjdGVyc1syXSwgY2hh
cmFjdGVyc1szXSB9fTsgfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHN0ZDo6
YXJyYXk8Y2hhciwgND4gYXJyYXkpCit7CisgICAgdWludDMyX3QgaW50ZWdlciA9IChzdGF0aWNf
Y2FzdDx1aW50OF90PihhcnJheVswXSkgPDwgMjQpIHwgKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFy
cmF5WzFdKSA8PCAxNikgfCAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbMl0pIDw8IDgpIHwg
c3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlbM10pOworICAgIGFkZChoYXNoZXIsIGludGVnZXIp
OworfQogCiBzdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2ggewotICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IEZvbnRUYWcmIGNoYXJhY3RlcnMpIHsgcmV0dXJuIChjaGFyYWN0ZXJzWzBd
IDw8IDI0KSB8IChjaGFyYWN0ZXJzWzFdIDw8IDE2KSB8IChjaGFyYWN0ZXJzWzJdIDw8IDgpIHwg
Y2hhcmFjdGVyc1szXTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRUYWcmIGEs
IGNvbnN0IEZvbnRUYWcmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKEZvbnRUYWcgY2hhcmFjdGVycykgeyByZXR1cm4gY29tcHV0ZUhhc2goY2hhcmFjdGVy
cyk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChGb250VGFnIGEsIEZvbnRUYWcgYikgeyByZXR1
cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotc3RydWN0IEZvdXJDaGFyYWN0ZXJUYWdIYXNoVHJhaXRz
IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxGb250VGFnPiB7CitzdHJ1Y3QgRm91ckNoYXJhY3Rl
clRhZ0hhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEZvbnRUYWc+IHsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoRm9udFRhZyYgc2xvdCkgeyBuZXcgKE5vdE51bGwsIHN0ZDo6YWRkcmVzc29m
KHNsb3QpKSBGb250VGFnKHt7IGZmLCBmZiwgZmYsIGZmIH19KTsgfQotICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRUYWcmIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBG
b250VGFnKHt7IGZmLCBmZiwgZmYsIGZmIH19KTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKEZvbnRUYWcgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZm
LCBmZiwgZmYgfX0pOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGZm
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGRik7CkBAIC01OSwxNCArNjUsMTMgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBjbGFzcyBGb250VGFnZ2VkU2V0dGluZyB7CiBwdWJsaWM6CiAgICAgRm9u
dFRhZ2dlZFNldHRpbmcoKSA9IGRlbGV0ZTsKLSAgICBGb250VGFnZ2VkU2V0dGluZyhjb25zdCBG
b250VGFnJiwgVCB2YWx1ZSk7Ci0gICAgRm9udFRhZ2dlZFNldHRpbmcoRm9udFRhZyYmLCBUIHZh
bHVlKTsKKyAgICBGb250VGFnZ2VkU2V0dGluZyhGb250VGFnLCBUIHZhbHVlKTsKIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgYm9vbCBvcGVyYXRvcjwoY29u
c3QgRm9udFRhZ2dlZFNldHRpbmc8VD4mIG90aGVyKSBjb25zdDsKIAotICAgIGNvbnN0IEZvbnRU
YWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CisgICAgRm9udFRhZyB0YWcoKSBjb25z
dCB7IHJldHVybiBtX3RhZzsgfQogICAgIFQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKTsgfQogCkBAIC03
OSwxOSArODQsMTIgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotRm9u
dFRhZ2dlZFNldHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmIHRhZywg
VCB2YWx1ZSkKK0ZvbnRUYWdnZWRTZXR0aW5nPFQ+OjpGb250VGFnZ2VkU2V0dGluZyhGb250VGFn
IHRhZywgVCB2YWx1ZSkKICAgICA6IG1fdGFnKHRhZykKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotRm9udFRhZ2dlZFNldHRpbmc8VD46OkZvbnRU
YWdnZWRTZXR0aW5nKEZvbnRUYWcmJiB0YWcsIFQgdmFsdWUpCi0gICAgOiBtX3RhZyhXVEZNb3Zl
KHRhZykpCi0gICAgLCBtX3ZhbHVlKHZhbHVlKQotewotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KIGJvb2wgRm9udFRhZ2dlZFNldHRpbmc8VD46Om9wZXJhdG9yPT0oY29uc3QgRm9udFRhZ2dl
ZFNldHRpbmc8VD4mIG90aGVyKSBjb25zdAogewpAQCAtMTUyLDYgKzE1MCwxMSBAQCBPcHRpb25h
bDxGb250VGFnZ2VkU2V0dGluZzxUPj4gRm9udFRhZ2dlZFNldHRpbmc8VD46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIH19LCAqdmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgRm9udFRhZ2dlZFNldHRpbmc8VD4mIHNl
dHRpbmcpCit7CisgICAgYWRkKGhhc2hlciwgc2V0dGluZy50YWcoKSwgc2V0dGluZy52YWx1ZSgp
KTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBGb250VGFnZ2VkU2V0dGluZ3Mg
ewogcHVibGljOgpAQCAtMjExLDE0ICsyMTQsMTAgQEAgT3B0aW9uYWw8Rm9udFRhZ2dlZFNldHRp
bmdzPFQ+PiBGb250VGFnZ2VkU2V0dGluZ3M8VD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXR5cGVkZWYgRm9udFRhZ2dlZFNldHRpbmc8aW50PiBG
b250RmVhdHVyZTsKLXR5cGVkZWYgRm9udFRhZ2dlZFNldHRpbmdzPGludD4gRm9udEZlYXR1cmVT
ZXR0aW5nczsKLQotdGVtcGxhdGUgPD4gdW5zaWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFz
aCgpIGNvbnN0OwotCi10eXBlZGVmIEZvbnRUYWdnZWRTZXR0aW5nczxmbG9hdD4gRm9udFZhcmlh
dGlvblNldHRpbmdzOwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYpOwordXNpbmcgRm9udEZlYXR1cmUgPSBG
b250VGFnZ2VkU2V0dGluZzxpbnQ+OwordXNpbmcgRm9udEZlYXR1cmVTZXR0aW5ncyA9IEZvbnRU
YWdnZWRTZXR0aW5nczxpbnQ+OwordXNpbmcgRm9udFZhcmlhdGlvblNldHRpbmdzID0gRm9udFRh
Z2dlZFNldHRpbmdzPGZsb2F0PjsKIAotdGVtcGxhdGUgPD4gdW5zaWduZWQgRm9udFZhcmlhdGlv
blNldHRpbmdzOjpoYXNoKCkgY29uc3Q7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBGb250VGFnZ2VkU2V0dGluZ3M8ZmxvYXQ+Jik7CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAppbmRleCBiZjlkMGY4NTkyODE0
NzY2MjM4NDU0YTdmYzMzMmU4NTRlM2MxNzdlLi44ZWIzMjZjNDk2NGVjYTllMGYzZmJjN2UwY2Y4
MmI4ZGEzNWYzODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuY3BwCkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAKLXVzaW5nIFdURjo6cGFpckludEhhc2g7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKERh
dGEmJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDUzZWI1ZWNhNjc0NmExOWE4MTZiZGNj
OGExMTZjOWRhOTA4ZDVjYWIuLjcwZjZkMDhmNTNkN2JjODU3MDZkYWM0NWEwN2FiMWYwN2RjMjEz
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTQ4LDEyICs0OCw2IEBACiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGluIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPi4KLXVzaW5nIFdURjo6cGFpckludEhhc2g7Ci0KLS8vIEZJWE1FOiBUaGUgZm9sbG93
aW5nIHVzaW5nIGRlY2xhcmF0aW9uIHNob3VsZCBiZSBpbiA8d3RmL0hhc2hUcmFpdHMuaD4uCi11
c2luZyBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyB2b2lkIHNldENHRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xv
ciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgKaW5kZXggNWJmMDVkNGUxNDBlZTYyYjMz
MjFlNGRiZWY1MWRhYzFkMWIzNGQ5OS4uOWZhY2VjNGYwMTQyM2Y0MDU0MzY1YjRiOWI1YjI3ZTE3
MTIxNjZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
U3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIE1vbm90b25pY1RpbWUgbGFzdEFjY2Vzc1RpbWU7CiAgICAgfTsKIAotICAg
IHN0cnVjdCBTdWJpbWFnZUNhY2hlRW50cnlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRz
PFN1YmltYWdlQ2FjaGVFbnRyeT4geworICAgIHN0cnVjdCBTdWJpbWFnZUNhY2hlRW50cnlUcmFp
dHMgOiBIYXNoVHJhaXRzPFN1YmltYWdlQ2FjaGVFbnRyeT4gewogICAgICAgICB0eXBlZGVmIEhh
c2hUcmFpdHM8UmV0YWluUHRyPENHSW1hZ2VSZWY+PiBJbWFnZVRyYWl0czsKIAogICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0
aW9uQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKaW5kZXggMDcxNzIyMWIxMzA2OTJi
ZjFmOGFlNGZmNDA3NTg2MDU2Y2YwMWZiYi4uMmJlMzliNzk0MzUxNTFmNGZhODZmYzMxNDkxNDE4
YTEyZDI5NDlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3Jl
VGV4dC5jcHAKQEAgLTM3LDYgKzM3LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gZm9udERlc2NyaXB0b3I7CisgICAgRm9udERlc2NyaXB0aW9uS2V5IGZvbnREZXNj
cmlwdGlvbktleTsKKwogICAgIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5KCkgPSBkZWZhdWx0
OwogCiAgICAgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkoQ1RGb250RGVzY3JpcHRvclJlZiBm
b250RGVzY3JpcHRvciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBA
IC01MCw3ICs1Myw3IEBAIHN0cnVjdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSB7CiAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkmIG90aGVy
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6c2FmZUNGRXF1YWwoZm9udERlc2Ny
aXB0b3IuZ2V0KCksIG90aGVyLmZvbnREZXNjcmlwdG9yLmdldCgpKSAmJiBmb250RGVzY3JpcHRp
b25LZXkgPT0gb3RoZXIuZm9udERlc2NyaXB0aW9uS2V5OworICAgICAgICByZXR1cm4gc2FmZUNG
RXF1YWwoZm9udERlc2NyaXB0b3IuZ2V0KCksIG90aGVyLmZvbnREZXNjcmlwdG9yLmdldCgpKSAm
JiBmb250RGVzY3JpcHRpb25LZXkgPT0gb3RoZXIuZm9udERlc2NyaXB0aW9uS2V5OwogICAgIH0K
IAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYg
b3RoZXIpIGNvbnN0CkBAIC01OSwyMyArNjIsMTUgQEAgc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZp
Y2F0aW9uS2V5IHsKICAgICB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KLQotICAgIHVuc2lnbmVkIGNvbXB1dGVIYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6c2FmZUNGSGFzaChmb250RGVzY3JpcHRvci5n
ZXQoKSksIGZvbnREZXNjcmlwdGlvbktleS5jb21wdXRlSGFzaCgpKTsKLSAgICB9Ci0KLSAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3I7Ci0gICAgRm9udERl
c2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlvbktleTsKIH07CiAKIHN0cnVjdCBGb250RmFtaWx5
U3BlY2lmaWNhdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZv
bnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jb21wdXRlSGFzaCgp
OyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRp
b25LZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goc2FmZUNGSGFzaChrZXkuZm9udERlc2Ny
aXB0b3IuZ2V0KCkpLCBrZXkuZm9udERlc2NyaXB0aW9uS2V5KTsgfQogICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBhLCBjb25zdCBGb250RmFt
aWx5U3BlY2lmaWNhdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdXNp
bmcgRm9udE1hcCA9IEhhc2hNYXA8Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXksIHN0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXlIYXNo
LCBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+
OwordXNpbmcgRm9udE1hcCA9IEhhc2hNYXA8Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXksIHN0
ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXlIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXk+
PjsKIAogc3RhdGljIEZvbnRNYXAmIGZvbnRNYXAoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRh
YmFzZUNvcmVUZXh0LmgKaW5kZXggMGIyNzlhN2RlZjVjZDQ4ODJhODI1YzM2ODNiZTEzNTJiMjJl
NjA3YS4uOWFkMWUwY2M0NTBmMGVhYTgyOTgxNzM1NTk3ODAwYWMwODA0OTZkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFi
YXNlQ29yZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCkBAIC03MiwyNyArNzIsMTIgQEAgcHVibGlj
OgogCiAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAg
ICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAgICAgIEFTU0VSVCghZm9udE5hbWUuaXNO
dWxsKCkpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwot
ICAgICAgICAgICAgaGFzaGVyLmFkZChsb2NhbGUuaXNOdWxsKCkgPyAwIDogbG9jYWxlLmV4aXN0
aW5nSGFzaCgpKTsKLSAgICAgICAgICAgIGhhc2hlci5hZGQod2VpZ2h0KTsKLSAgICAgICAgICAg
IGhhc2hlci5hZGQod2lkdGgpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChzaXplKTsKLSAgICAg
ICAgICAgIGhhc2hlci5hZGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKSk7Ci0gICAgICAgICAgICBoYXNoZXIuYWRkKGl0YWxpYyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChmb250
TmFtZSwgbG9jYWxlLCB3ZWlnaHQsIHdpZHRoLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250
cywgaXRhbGljKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0cnVjdCBDYXNjYWRlTGlzdFBhcmFt
ZXRlcnNIYXNoIDogV1RGOjpQYWlySGFzaDxBdG9tU3RyaW5nLCBmbG9hdD4gewotICAgICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJz
Lmhhc2goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYgYSwgY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJz
JiBiKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBhID09IGI7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFyYW1ldGVycykgeyByZXR1
cm4gcGFyYW1ldGVycy5oYXNoKCk7IH0KKyAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYgYSwgY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJz
JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKICAgICAgICAgfTsKIApAQCAtMTMx
LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250
RGVzY3JpcHRvclJlZj4+IGNvbXB1dGVDYXNjYWRlTGlzdChDVEZvbnRSZWYsIENGU3RyaW5nUmVm
IGxvY2FsZSk7CiAgICAgc3RhdGljIENhc2NhZGVMaXN0UGFyYW1ldGVycyBzeXN0ZW1Gb250UGFy
YW1ldGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lLCBTeXN0ZW1Gb250S2luZCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgSGFz
aE1hcDxDYXNjYWRlTGlzdFBhcmFtZXRlcnMsIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4+LCBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hh
c2gsIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDYXNjYWRlTGlzdFBhcmFtZXRlcnM+PiBtX3N5c3Rl
bUZvbnRDYWNoZTsKKyAgICBIYXNoTWFwPENhc2NhZGVMaXN0UGFyYW1ldGVycywgVmVjdG9yPFJl
dGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4sIENhc2NhZGVMaXN0UGFyYW1ldGVyczo6SGFz
aCwgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVt
Rm9udENhY2hlOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9zZXJpZkZhbWlsaWVz
OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc2Fuc1NlcmlmZXJpZkZhbWlsaWVzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGExYjk1MTQxZmUxMWI5YTA5MDI4NWRi
ZGNiYTMxNjhlNmRiOTJjYTIuLmZkNzFmYTA3OTJkYjI2NGI4NjIwNGI5ZGZkZmUyYTdlZDYwOWY0
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTE5NSw2ICsxOTUsOSBAQCBw
cml2YXRlOgogfTsKIAogc3RydWN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5IHsKKyAgICBG
b250RGVzY3JpcHRpb25LZXkgZGVzY3JpcHRpb25LZXk7CisgICAgYm9vbCBjb2xvcmVkRm9udCB7
IGZhbHNlIH07CisKICAgICBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSgpID0gZGVmYXVsdDsK
IAogICAgIEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQgcHJlZmVyQ29sb3JlZEZv
bnQpCkBAIC0yMjAsMTcgKzIyMywxMCBAQCBzdHJ1Y3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25L
ZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IGRlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KIAotICAgIHVuc2ln
bmVkIGNvbXB1dGVIYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJ
bnRIYXNoKGRlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCksIFdURjo6RGVmYXVsdEhhc2g8Ym9v
bD46Omhhc2goY29sb3JlZEZvbnQpKTsKLSAgICB9Ci0KLSAgICBGb250RGVzY3JpcHRpb25LZXkg
ZGVzY3JpcHRpb25LZXk7Ci0gICAgYm9vbCBjb2xvcmVkRm9udCB7IGZhbHNlIH07CiB9OwogCiBz
dHJ1Y3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSYga2V5KSB7IHJldHVybiBr
ZXkuY29tcHV0ZUhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZhbGxi
YWNrRm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5kZXNj
cmlwdGlvbktleSwga2V5LmNvbG9yZWRGb250KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBhLCBjb25zdCBGYWxsYmFja0ZvbnREZXNj
cmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJD
b3JlVGV4dC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQppbmRleCAwMzIwOTY5ODhmY2RlMjE3MTc1OTMzNTAw
MTM5MGViM2ZiYjk5YTViLi5lOTAxNzRiZWY0MzAzMTBhM2I5ZTVkNDU4MWJmYTFhZGVlZWUwN2Rm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCkBAIC0xODUsMTMg
KzE4NSwxMyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0
UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICAgICAgQ1RGb250UmVm
IHJ1bkNURm9udCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cnVuQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUpKTsKICAgICAgICAgICAgIEFTU0VS
VChydW5DVEZvbnQgJiYgQ0ZHZXRUeXBlSUQocnVuQ1RGb250KSA9PSBDVEZvbnRHZXRUeXBlSUQo
KSk7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmpl
Y3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkNURm9udCk7
Ci0gICAgICAgICAgICBpZiAoIVdURjo6c2FmZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0
LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0
KCkpKSB7CisgICAgICAgICAgICBpZiAoIXNhZmVDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVj
dC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdl
dCgpKSkgewogICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRyeWluZyB0byBzZWUgaWYgcnVuRm9u
dCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMgaW4gdGhlIGZhbGxiYWNrIGxpc3QuCiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkp
LmlzTnVsbCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5m
YWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoV1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250
LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCksIHJ1bkZvbnRF
cXVhbGl0eU9iamVjdC5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzYWZlQ0ZFcXVh
bChydW5Gb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCks
IHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhY2hlV2luLmNwcAppbmRleCAwYTZlNWE3ZTk5NTY3ZTRhYzEwN2E3NGQ4MWQ5OWYwYjMx
ODNiNDEyLi40N2I5NzEzZWVjM2RiODliNWRlOWVkNWRmZTI1ZjFkZGJiYzY2ZWE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcApAQCAtMzM4LDggKzMzOCw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAKICAgICBp
ZiAoaGZvbnQpIHsKICAgICAgICAgaWYgKCFmYW1pbHlOYW1lLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShkZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0KQorICAg
ICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlw
dGlvbiwgZmFtaWx5TmFtZSkpCiAgICAgICAgICAgICAgICAgZm9udERhdGEgPSBmb250Rm9yUGxh
dGZvcm1EYXRhKCpyZXN1bHQpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRBdXRvU2l6aW5nLmgKaW5kZXggYmI4M2MzOTNlNzllMjBhMmJiNmM3NWVkN2EyMzk1OTZl
MTAxMDBkMy4uYjBmOWMyNzZlYTU0Yjc2ZTFkNzdhMjY1MTEwNjIxNzUyYmRiNTNhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgKQEAgLTEwOCw3ICsxMDgsNyBA
QCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVmUHRyPFRleHQ+PiBtX2F1dG9TaXplZE5vZGVzOwog
fTsKIAotc3RydWN0IFRleHRBdXRvU2l6aW5nVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0
czxUZXh0QXV0b1NpemluZ0tleT4geworc3RydWN0IFRleHRBdXRvU2l6aW5nVHJhaXRzIDogSGFz
aFRyYWl0czxUZXh0QXV0b1NpemluZ0tleT4gewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShUZXh0QXV0b1NpemluZ0tleSYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90KSBUZXh0QXV0
b1NpemluZ0tleShUZXh0QXV0b1NpemluZ0tleTo6RGVsZXRlZCk7IH0KICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUZXh0QXV0b1NpemluZ0tleSYgdmFsdWUpIHsgcmV0dXJu
IHZhbHVlLmlzRGVsZXRlZCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAppbmRleCAwYjhlNjFjOGY3NTNmNGY3YjNmMDJjNjQzNjdkNDM0NGZm
OTM0YTg5Li5jZjIyY2VjYjNhZjMxMWIyNTNhNDdhMmQ4YjRlYTE2NzRhNTYzZTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTQ0OSwx
MCArNDQ5LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6ZGVzY2VuZGFudEFmZmVjdGluZ05vbkluaGVy
aXRlZFByb3BlcnRpZXNFcXVhbChjb25zdCBSZW5kZXJTdHkKIAogc3RhdGljIGlubGluZSB1bnNp
Z25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7Ci0gICAgSW50
ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgaGFzaGVyLmFkZChBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZhbWlseSgpKSk7Ci0gICAgaGFz
aGVyLmFkZChmb250LmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgcmV0
dXJuIGhhc2hlci5oYXNoKCk7CisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaDo6aGFzaChmb250LmZvbnREZXNjcmlwdGlvbigpLmZpcnN0RmFtaWx5KCkpLCBm
b250LmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKSk7CiB9CiAKIHVuc2lnbmVkIFJl
bmRlclN0eWxlOjpoYXNoRm9yVGV4dEF1dG9zaXppbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGllbnRJZGVudGlmaWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNsaWVudElk
ZW50aWZpZXIuaAppbmRleCA2NDA5YTQxYzM4MmE4ZTU3N2M5NjAzNjRmYjY3ZTc4MTQ0OWNiMWI2
Li45MzhiYjU5MmY3MjY4YzY5YWMzNzE4Mzc1YTcyYjk2OTZjNzI5NWYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNsaWVudElkZW50aWZp
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNs
aWVudElkZW50aWZpZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudElkZW50
aWZpZXIuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg3LDE2ICs4OCwxMiBAQCBPcHRpb25hbDxTZXJ2
aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllcj4gU2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXI6
OmRlY29kZShEZQogICAgIGlmICghY29udGV4dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4geyB7IFdURk1vdmUoKnNlcnZlckNvbm5lY3Rpb25J
ZGVudGlmaWVyKSwgV1RGTW92ZSgqY29udGV4dElkZW50aWZpZXIpIH0gfTsKKyAgICByZXR1cm4g
eyB7ICpzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllciwgKmNvbnRleHRJZGVudGlmaWVyIH0gfTsK
IH0KIAogaW5saW5lIHVuc2lnbmVkIFNlcnZpY2VXb3JrZXJDbGllbnRJZGVudGlmaWVyOjpoYXNo
KCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBoYXNoZXNbMl07Ci0gICAgaGFzaGVzWzBdID0gV1RG
OjppbnRIYXNoKHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLnRvVUludDY0KCkpOwotICAgIGhh
c2hlc1sxXSA9IFdURjo6aW50SGFzaChjb250ZXh0SWRlbnRpZmllci50b1VJbnQ2NCgpKTsKLQot
ICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaGVzLCBzaXplb2YoaGFzaGVz
KSk7CisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLCBj
b250ZXh0SWRlbnRpZmllcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4
dERhdGEuaAppbmRleCBkYmE2MjM1ZTBiNjA2YTgzMTNjM2M0YzMxZDdkMmNiZmE2MTZmZmUxLi4x
NGFiY2FkNjRjOTlhMWM4NzEzNmJiYzBmNmQ5Y2M1NjFlZjI4MTIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0
YS5oCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRhdGEuaCIKICNpbmNsdWRlICJXb3JrZXJUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KIAogI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaAppbmRleCBhZmJjNDBlOWMz
MmJiYTkxMjBmZDk4YjUyYTQxZmYwNzc3ODc0ZDljLi5jNDNkODY1NDVmY2JiODY1YTNhNTFiNGI1
NzkzNmY5MjJiODA5NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2UvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgiCiAjaW5jbHVkZSAiU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbi5oIgogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5j
bHVkZSA8d3RmL1VSTEhhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TV0NvbnRleHRNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TV0NvbnRleHRNYW5h
Z2VyLmgKaW5kZXggZjU3MGNlNDNkNWMwOGM5MDg4MjkwMjJhMTcyNmRkMmI4YTk5MGQwMS4uNGQw
OGU3NmJjOWQ2MDYzOWNlMGQ5YWY0Yzk5YTA3YTllMTFiZTQ4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU1dDb250ZXh0TWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9jb250ZXh0L1NXQ29udGV4dE1hbmFnZXIu
aApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5o
IgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9TZXJ2
aWNlV29ya2VyVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9j
b250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5oCmluZGV4IDNmZTJiNDQzNWFmMjVjMDI0
OWMxZWZjZGU4Yzg4MWRhZmI4ZmFiMDEuLmJmYzg3ZjI0OTA1NDc2NjlmOWIwNDFmOGEyNzFkNzI3
Y2VkMmZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9jb250
ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5oCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiV29ya2VyRGVidWdnZXJQcm94eS5oIgogI2luY2x1ZGUgIldvcmtl
ckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaAppbmRl
eCBhZjg2ZjI1NDM1NzJhMWEzOGI1MWY5OTQxOTg4MTVhNmY0ZDU2MjVlLi5iYTExMzExNWE2NTQx
MmZkZTJkZmRhYjYxNjZlNWY2ZTA4NzIzOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9TV1NlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1Nl
cnZlci5oCmluZGV4IDNiNmQxZTc2NTEwMjk3MDQ2YmEwNzJlOGU4ODkzYjJmYWRlNmRiNzkuLjky
YWFiODZjMzE5YzRjZjYxZGYzOTE1NGNmMGRmZjJlMjg2NTg2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmgKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVVJM
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1NXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAppbmRleCAzYTNmN2Mw
MDBjZjdjODczYzc0YWI4YmIzN2Y3OWU1MGI5NjJkMmJkLi5iYTU4Zjc4NzhhNDM4OWI0NTQ1NjJi
NzJiNWE1ZjVjYTU0ZTIzNzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1NXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9u
LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEu
aCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VySWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNlcnZp
Y2VXb3JrZXJUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlcldvcmtlci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlcldvcmtlci5oCmluZGV4IGY0YzJjM2I3NTZhOWVmOGYxZDBmNWQzNjJmMGFl
Yjk4NjBlYTg4YjYuLjFkNGZkODE3YjNjOGFhODJkMTE2MzM4MzVmNDMxNmFmYjUxNDViZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJX
b3JrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2Vy
dmVyV29ya2VyLmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRl
eHRDb25uZWN0aW9uLmgKaW5kZXggMDBlOWMyMWU4NmQ0ZjllMmU5Zjc3YjA0ZjM3NmM4NGFlOGFm
MDQxNy4uZWM3N2MxZGIyZWJjYjlkNDUwNDJhOTM1OGI0ZTkxMzU1YWE5ZWYwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVy
VG9Db250ZXh0Q29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
U2VydmljZVdvcmtlci9XZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJGZXRjaFRhc2suaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TV1NlcnZlclRvQ29u
dGV4dENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4IGU1YzYwNWM1MWYzMjcx
NTYzYTZiNmVlMTkxMGM5NGVkMDEzZjM0OTMuLmM3NWQxNzA0YTc3MmUyOTk5OWRlNDMwOWQ4NTlh
ZjgxN2EwNTc0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuaApAQCAtNTksMTEgKzU5LDcgQEAgc3RydWN0IEdsb2JhbEZyYW1lSUQg
ewogCiBpbmxpbmUgdW5zaWduZWQgR2xvYmFsRnJhbWVJRDo6aGFzaCgpIGNvbnN0CiB7Ci0gICAg
dW5zaWduZWQgaGFzaGVzWzJdOwotICAgIGhhc2hlc1swXSA9IFdURjo6aW50SGFzaCh3ZWJQYWdl
SUQudG9VSW50NjQoKSk7Ci0gICAgaGFzaGVzWzFdID0gV1RGOjppbnRIYXNoKGZyYW1lSUQudG9V
SW50NjQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hlcywg
c2l6ZW9mKGhhc2hlcykpOworICAgIHJldHVybiBjb21wdXRlSGFzaCh3ZWJQYWdlSUQsIGZyYW1l
SUQpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEs
IGNvbnN0IEdsb2JhbEZyYW1lSUQmIGIpCkBAIC03Myw4ICs2OSw4IEBAIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgR2xvYmFsRnJhbWVJRCYgYSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgYikK
ICAgICByZXR1cm4gYS53ZWJQYWdlSUQgPT0gYi53ZWJQYWdlSUQgJiYgIGEuZnJhbWVJRCA9PSBi
LmZyYW1lSUQ7CiB9CiAKLX07Ci19IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKK30KK30KIAog
bmFtZXNwYWNlIFdURiB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CmluZGV4IDRjNmI3YmMyM2NmMjkyODMyNzRiNzk2NTk4M2NiMTgwYzE2NTk5YWIuLmFlYWY0Yjli
ZTkzMzU5ZmZlYzk0NzZlMjQzYzY3YTNhY2E0NTkzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtNjY5LDYgKzY2OSw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90
eXBlKHR5cGUpOgogICAgICAgICAnTWVkaWFUaW1lJzogWyc8d3RmL01lZGlhVGltZS5oPiddLAog
ICAgICAgICAnTW9ub3RvbmljVGltZSc6IFsnPHd0Zi9Nb25vdG9uaWNUaW1lLmg+J10sCiAgICAg
ICAgICdTZWNvbmRzJzogWyc8d3RmL1NlY29uZHMuaD4nXSwKKyAgICAgICAgJ1VSTCc6IFsnPHd0
Zi9VUkxIYXNoLmg+J10sCiAgICAgICAgICdXYWxsVGltZSc6IFsnPHd0Zi9XYWxsVGltZS5oPidd
LAogICAgICAgICAnU3RyaW5nJzogWyc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAg
ICdQQUw6OlNlc3Npb25JRCc6IFsnPHBhbC9TZXNzaW9uSUQuaD4nXSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5t
bQppbmRleCBjNGJmMmI3OWMzNTRkMzkzYjYzNzRjNzgzMmI4NGFmZTdmNTVmNWNhLi4xNDcwMTA5
Y2UxZjRiODA5MTRlMzU5OTE4MTU1MWNkZjc0NTM0MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0KKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tCkBA
IC01NSw3ICs1NSw3IEBAIC0gKGlkKV9pbml0V2l0aFBhZ2VQcm94eUlEOihXZWJLaXQ6OldlYlBh
Z2VQcm94eUlkZW50aWZpZXIpcGFnZVByb3h5SUQgYW5kV2ViUGFnCiAKIC0gKE5TVUludGVnZXIp
aGFzaAogewotICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKF9wYWdlUHJveHlJRC50b1VJbnQ2
NCgpLCBfd2ViUGFnZUlELnRvVUludDY0KCkpOworICAgIHJldHVybiBjb21wdXRlSGFzaChfcGFn
ZVByb3h5SUQsIF93ZWJQYWdlSUQpOwogfQogCiAtIChCT09MKWlzRXF1YWw6KGlkKW9iamVjdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dDb250ZXh0
TWFuYWdlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dl
YlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmgKaW5kZXggNzY2MjE4OTUzMjgwYWNhMWZlZDBi
MGU2OTEwOGQ5YmM4Nzg5ZGRlOC4uMDQ1NTJkYzcwMGIxOWRmMDBlY2M1NmNiYWExNDQ0ZjJjZTUw
YWYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dD
b250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
U3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9TV0NvbnRleHRNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZXJ2aWNlV29ya2VyQ2xpZW50RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VydmljZVdv
cmtlclR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KIAogbmFtZXNwYWNlIElQQyB7
CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRleCBkYzc3ZjhmODRkMDM0
MzkwMWI5YWVlYTU1NTBmZDM3OGQ4MDMyODk2Li4wNDIwNWIzNzJkYTQ3OWJjOWRiOGU1NjdjN2Q2
MjJlOWY5MjRmZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCkBAIC03NSw3ICs3NSw3IEBAIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgSW50ZWdlckFycmF5JiBhLCBjb25zdCBJbnRlZ2VyQXJyYXkmIGIp
CiAgICAgcmV0dXJuIGEubV9pbnRlZ2VycyA9PSBiLm1faW50ZWdlcnMgJiYgIGEubV9zaXplID09
IGIubV9zaXplOwogfQogCi1zdHJ1Y3QgSW50ZWdlckFycmF5SGFzaFRyYWl0cyA6IFdURjo6R2Vu
ZXJpY0hhc2hUcmFpdHM8SW50ZWdlckFycmF5PiB7CitzdHJ1Y3QgSW50ZWdlckFycmF5SGFzaFRy
YWl0cyA6IEhhc2hUcmFpdHM8SW50ZWdlckFycmF5PiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKEludGVnZXJBcnJheSYgc2xvdCkgeyBzbG90Lm1hcmtEZWxldGVkKCk7
IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBJbnRlZ2VyQXJyYXkmIGFy
cmF5KSB7IHJldHVybiBhcnJheS5pc0RlbGV0ZWRWYWx1ZSgpOyB9CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425430</attachid>
            <date>2021-04-07 13:18:56 -0700</date>
            <delta_ts>2021-04-07 14:42:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224138-20210407131855.patch</filename>
            <type>text/plain</type>
            <size>97081</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NzkzYzM0M2JhZmRlNmZiNjI3ODcwNzk2ZTA5YzRjZmI0MjkwZmEwLi41Zjk2OWZjYTA4NjhhMjIx
NjVmMmZmNGYyYzZjZDU2NjEwNjAyOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMS0wNC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVXNlIEhhc2hlciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hp
bmctcmVsYXRlZCBtaXN0YWtlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI0MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgV1RGIHByZWZpeCBvbiBj
YWxsCisgICAgICAgIHRvIGludEhhc2guCisKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
Lmg6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RGOjpHZW5lcmljSGFzaFRyYWl0cy4KKwor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjp2YWxpZGF0ZUFJU3RhdGUpOiBSZW1vdmUgdW5uZWVkZWQgV1RGCisg
ICAgICAgIHByZWZpeCBvbiBjYWxsIHRvIGludEhhc2ggYW5kIGFkZGVkIGEgY29tbWVudCBhYm91
dCBob3cgaXQncyBsaWtlbHkgdXNlZAorICAgICAgICBpbmNvcnJlY3RseSBoZXJlLgorCisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFk
IG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKIDIwMjEtMDQtMDcgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBhIHR5cG8gaW4gSklUVW5jb3VnaHRFeGNl
cHRpb25BZnRlckNhbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY3OWMxZDY4MDkyNzZhMmE4NTc5ODBkMWI0OWYxZjlkM2I1
ZTMzYzkuLmEyZTE3YzhhNWZkMzUyNDVjODE0MDQ5MTg1MjgwMjg1MGM1ZTVmYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzIgQEAKKzIwMjEtMDQtMDIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFVzZSBIYXNoZXIgbW9yZSwgcmVtb3ZlIEludGVnZXJIYXNoZXIsIGZpeCBoYXNo
aW5nLXJlbGF0ZWQgbWlzdGFrZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNDEzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hGdW5jdGlvbnMuaDogRXhwb3J0IGludEhhc2ggYW5kIHBh
aXJJbnRIYXNoIHRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlCisgICAgICAgIHNvIHRoZXkgY2FuIGJl
IGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IFdURiBwcmVmaXguIFRoaXMgZm9sbG93cyB0aGUg
dXN1YWwKKyAgICAgICAgV1RGIGRlc2lnbiBwYXR0ZXJuIGdpdmVuIHRoYXQgdGhlc2UgZnVuY3Rp
b25zIGFyZSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgV1RGLgorCisgICAgICAgICogd3RmL0hh
c2hlci5oOiBEZWxldGVkIEludGVnZXJIYXNoZXIuCisgICAgICAgIChXVEY6OmFkZCk6IEFkZGVk
IG92ZXJsb2FkcyBmb3IgU3RyaW5nLCBBdG9tU3RyaW5nLCBhbmQgVVJMLgorCisgICAgICAgICog
d3RmL09iamVjdElkZW50aWZpZXIuaDoKKyAgICAgICAgKFdURjo6YWRkKTogQWRkZWQgYSBIYXNo
ZXIgb3ZlcmxvYWQgZm9yIGFueSBPYmplY3RJZGVudGlmaWVyLgorCisgICAgICAgICogd3RmL1Jl
dGFpblB0ci5oOiBFeHBvcnQgc2FmZUNGRXF1YWwgYW5kIHNhZmVDRkhhc2ggdG8gdGhlIGdsb2Jh
bCBuYW1lc3BhY2UKKyAgICAgICAgc28gdGhleSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW4gZXhw
bGljaXQgV1RGIHByZWZpeC4gVGhpcyBmb2xsb3dzIHRoZSB1c3VhbAorICAgICAgICBXVEYgZGVz
aWduIHBhdHRlcm4gZ2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1
c2Ugb3V0c2lkZSBXVEYuCisKKyAgICAgICAgKiB3dGYvVmVjdG9ySGFzaC5oOiBSZW1vdmVkIHRo
ZSBWZWN0b3JIYXNoIHRlbXBsYXRlLCBpbnN0ZWFkIGp1c3Qgc3BlY2lhbGl6aW5nCisgICAgICAg
IERlZmF1bHRIYXNoLiBVc2UgY29tcHV0ZUhhc2ggdG8gaGFzaCB0aGUgY29udGVudHMgb2YgdGhl
IHZlY3RvciBpbnN0ZWFkIG9mCisgICAgICAgIGhhc2hpbmcgdGhlIGhhc2hlcyBvZiB0aGUgaXRl
bXMgaW4gdGhlIHZlY3Rvci4gVGhpcyBpcyBiZXR0ZXIgaW4gZ2VuZXJhbCBhbmQKKyAgICAgICAg
YmV0dGVyIGZvciB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgYXJlIGN1cnJlbnRseSB1c2luZyB0aGlz
LCBmb3IgYSBWZWN0b3I8aW50Pi4KKyAgICAgICAgV2Ugd2FudCB0byBoYXNoIGFsbCB0aGUgaW50
ZWdlcnMgcmF0aGVyIHRoYW4gaGFzaGluZyBoYXNoZXMgb2YgYWxsIHRoZSBpbnRlZ2Vycy4KKyAg
ICAgICAgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtZWFucyB0aGUgZWxlbWVudHMgb2YgdGhlIFZlY3Rv
ciBuZWVkIHRvIGJlIGhhc2hhYmxlIHVzaW5nCisgICAgICAgIHRoZSBIYXNoZXIgbWFjaGluZXJ5
LiBUaGUgb2xkIHJlcXVpcmVtZW50IHdhcyB0aGUgdGhlIGVsZW1lbnRzIGhhZCBhIERlZmF1bHRI
YXNoLgorCiAyMDIxLTA0LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVXNlIG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSBpbnN0ZWFkIG9mIGRl
cHJlY2F0ZWQgeHBjX3RyYW5zYWN0aW9uX2JlZ2luL2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgwNTIxMGEz
YzBkNjZhMzZmODhkMjBlMzIwMGNiYzIyZTcwODI4OWMuLmQ2NzgzNGFhN2VlZmNmN2JmYzg1MGJk
Zjc2MjEyOGFhYjU2ZTBjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMjEtMDQt
MDIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBIYXNoZXIg
bW9yZSwgcmVtb3ZlIEludGVnZXJIYXNoZXIsIGZpeCBoYXNoaW5nLXJlbGF0ZWQgbWlzdGFrZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpUcmlnZ2VySGFzaDo6aGFzaCk6IFVzZSBjb21wdXRlSGFzaCB0bwor
ICAgICAgICBoYXNoIGFsbCB0aGUgZmllbGRzIGluc3RlYWQgb2YgYSBjdXN0b20td3JpdHRlbiBh
bGdvcml0aG0uIFRoZSBjdXN0b20KKyAgICAgICAgYWxnb3JpdGhtIGhhZCBzb21lIG1hZ2ljIG51
bWJlcnMsIHJlcGVhdGVkbHkgaGFzaGVkIGhhc2hlcywgYW5kIGNvbWJpbmVkCisgICAgICAgIGhh
c2hlcyB1c2luZyBleGNsdXNpdmUgb3IuIFRoZSBuZXcgb25lIGlzIGFsbW9zdCBjZXJ0YWlubHkg
YmV0dHRlci4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL1Rlcm0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpDaGFyYWN0ZXJTZXQ6Omhhc2ggY29u
c3QpOgorICAgICAgICBVc2UgY29tcHV0ZUhhc2ggdG8gaGFzaCB0aGUgYm9vbGVhbiBhbmQgdGhl
IGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4KKyAgICAgICAgdXNpbmcgaW50SGFzaCBhbmQgcGFpcklu
dEhhc2guCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkKTogTW92ZWQgdGhlIGhhc2hpbmcgaGVyZSBmcm9tIHRoZSBoZWFk
ZXIuIEZpeGVkIHRoZQorICAgICAgICBtaXN0YWtlIHdoZXJlIHRoaXMgd2FzIHVzaW5nICYgaW5z
dGVhZCBvZiB8IGFuZCBzbyBub25lIG9mIHRoZSBib29sZWFucworICAgICAgICB3ZXJlIGhhdmlu
ZyBhbnkgZWZmZWN0IG9uIHRoZSBoYXNoIHZhbHVlLgorCisgICAgICAgICogY3NzL3BhcnNlci9D
U1NQYXJzZXJDb250ZXh0Lmg6IFVzZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgc28K
KyAgICAgICAgd2UgZG9uJ3QgaGF2ZSB0byBzYXkgcHVibGljOiBleHBsaWNpdGx5LiBBbHNvIG1v
dmVkIGFsbCB0aGUgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyB0byB0aGUgYm90dG9tIG9mIHRo
ZSBzdHJ1Y3QuIFRoaXMgaXMgdHlwaWNhbGx5IHByZWZlcnJlZCBzdHlsZQorICAgICAgICBmb3Ig
c3RydWN0dXJlcyBhcyBvcHBvc2VkIHRvIGNsYXNzZXMuIFNpbmNlIHRoZSBkYXRhIG1lbWJlcnMg
YXJlIHRoZQorICAgICAgICBwcmltYXJ5IGludGVyZmFjZSwgdGhleSBhcmUgZmlyc3QsIGFuZCBh
bGwgZnVuY3Rpb24gbWVtYmVycyBhcmUgc2Vjb25kYXJ5CisgICAgICAgIGFuZCBzbyB0aGV5IGNv
bWUgYWZ0ZXIuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0SGFzaDo6aGFzaCk6
IFVzZSBjb252ZXJ0SGFzaCBpbnN0ZWFkIG9mCisgICAgICAgIGEgY3VzdG9tIHdyaXR0ZW4gaGFz
aCBmdW5jdGlvbi4gVGhlIGN1c3RvbSB3cml0dGVuIGZ1bmN0aW9uIHdhcyBjb21iaW5pbmcKKyAg
ICAgICAgaGFoZXMgdXNpbmcgZXhjbHVzaXZlIG9yLCBub3QgYSBiZXN0IHByYWN0aWNlLCBhbmQg
YWxzbyBoYWQgYSBtaXN0YWtlCisgICAgICAgIHdoZXJlIGl0IHVzZWQgJiBpbnN0ZWFkIG9mIHwg
YW5kIHNvIHRoZSAiYml0cyIgbG9jYWwgdmFyaWFibGUgd2FzIGFsd2F5cyAwLgorCisgICAgICAg
ICogaHRtbC9Gb3JtQ29udHJvbGxlci5jcHA6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RG
OjpHZW5lcmljSGFzaFRyYWl0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVByb3h5Lmg6IFJlbW92ZWQgdW5uZWVkZXMgaW5jbHVkZXMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmNwcDogQ2hhbmdlZCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSBp
bnRvIGEKKyAgICAgICAgc2ltcGxlIHN0cnVjdCB3aXRoIG5vIGFkZGl0aW9uYWwgZnVuY3Rpb24g
bWVtYmVycyBvciBzdGF0aWMgZGF0YSBtZW1iZXJzLgorICAgICAgICBDaGFuZ2VkIENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5SGFzaCB0byB1c2UgY29tcHV0ZUhhc2ggdG8gY2FsY3VsYXRlIHRoZQor
ICAgICAgICBoYXNoLCBpbnN0ZWFkIG9mIEludGVnZXJIYXNoZXIuIFByb2JhYmx5IGJldHRlciB0
byBoYXNoIHRoZSBwb2ludGVyIG9mCisgICAgICAgIHRoZSBBdG9tU3RyaW5nIHJhdGhlciB0aGFu
IGhhc2hpbmcgdGhlIGhhc2gsIGJ1dCBlaXRoZXIgd2F5LCB3ZSBzaG91bGQKKyAgICAgICAgaGF2
ZSB0aGUgYmVzdCBpbXBsZW1lbnRhdGlvbiBmb3IgQXRvbVN0cmluZyBoYXNoaW5nIGluIHRoZSBI
YXNoZXIgY2xhc3MuCisgICAgICAgIEFkZGVkIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRy
YWl0cyBpbnN0ZWFkIG9mIHVzaW5nCisgICAgICAgIFNpbXBsZUNsYXNzSGFzaFRyYWl0cy4gVXNl
IHRoZSB2YWx1ZSBVX1NFTlRJTkVMIGZvciB0aGUgVUNoYXIzMiBjaGFyYWN0ZXIsCisgICAgICAg
IHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSAtMSB1c2VkIGJlZm9yZSwgYnV0IHNsaWdodGx5IGNs
ZWFyZXIgd2h5IGl0J3MgT0suCisgICAgICAgIChXZWJDb3JlOjpGb250OjpzeXN0ZW1GYWxsYmFj
a0ZvbnRGb3JDaGFyYWN0ZXIgY29uc3QpOiBVc2UgSGFzaE1hcDo6ZW5zdXJlCisgICAgICAgIGlu
c3RlYWQgb2YgSGFzaE1hcDo6YWRkIHRvIG1ha2UgdGhlIGxvZ2ljIHNpbXBsZXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6IFVzZSBib29sIGluc3RlYWQgb2YgdWludDhf
dCBhcyB0aGUgYmFzZSB0eXBlCisgICAgICAgIGZvciB0aGUgTm8vWWVzIGVudW1lcmF0aW9uIElz
Rm9yUGxhdGZvcm1Gb250LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcDogUmVtb3ZlZCB1bm5lZWRlZCAidXNpbmcgbmFtZXNwYWNlIFdURiIsCisgICAgICAgIHdo
aWNoIGlzIG5vdCBvdXIgYmVzdCBwcmFjdGljZSwgZXNwZWNpYWxseSBnaXZlbiB1bmlmaWVkIGJ1
aWxkcy4KKyAgICAgICAgQ2hhbmdlZCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgaW50byBhIHNp
bXBsZSBzdHJ1Y3QsIHJlbW92aW5nIGFsbCB0aGUKKyAgICAgICAgaGFzaC1yZWxhdGVkIG1lbWJl
ciBmdW5jdGlvbnMuIEFsc28gdXNlZCBzdHJ1Y3Qtc3R5bGUgbmFtaW5nIGZvciB0aGUKKyAgICAg
ICAgbWVtYmVycyB3aXRob3V0IGFuICJtXyIgcHJlZml4LiBVc2VkIHRoZSB0eXBlIEZvbnRGYW1p
bHlOYW1lIGZvciB0aGUKKyAgICAgICAgZmFtaWx5IG5hbWUsIHdoaWNoIG1lYW5zIHdlIHdpbGwg
dXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24ncyBzeXN0ZW0KKyAgICAgICAgZm9yIGhhc2hpbmcg
YW5kIGNvbXBhcmluZyBmYW1pbHkgbmFtZXMgZm9yIGVxdWFsaXR5IHdpdGhvdXQgaGF2aW5nIHRv
CisgICAgICAgIHJlbWVtYmVyIGRvIHRvIHNvIGV4cGxpY2l0bHkuIENoYW5nZWQgRm9udFBsYXRm
b3JtRGF0YUNhY2hlS2V5SGFzaCB0bworICAgICAgICB1c2UgY29tcHV0ZUhhc2guIFRoZSBvbGQg
dmVyc2lvbiBoYWQgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIHRvCisgICAgICAgIGhhbmRs
ZSBPcHRpb25hbCBhbmQgd2FzIHVubmVjZXNzYXJpbHkgaGFzaGluZyBoYXNoZXMuCisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmNhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOiBSZW5hbWVkIHRv
IHJlbW92ZSAiZ2V0IgorICAgICAgICBmcm9tIHRoZSBmdW5jdGlvbidzIG5hbWUuIEFsc28gdXNl
IHNob3J0ZXIgYXJndW1lbnQgYW5kIGxvY2FsIHZhcmlhYmxlCisgICAgICAgIG5hbWVzIHRoYXQg
YXJlIHNpbmdsZSB3b3JkcywgYW5kIHVwZGF0ZWQgc2luY2UgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5CisgICAgICAgIGlzIG5vdyBhIHN0cnVjdCB3aXRob3V0IGEgY29uc3RydWN0b3IuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkpOiBVc2Ugc2hvcnRlciBuYW1l
cy4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBUbyBjb21wYXJlIHR3byBGb250Q2Fz
Y2FkZUNhY2hlS2V5IG9iamVjdHMsCisgICAgICAgIHVzZSBhIHNpbXBsZXIgY29uc3RydWN0aW9u
cywgZGVwZW5kaW5nIG9uIHRoZSBmYWN0IHRoYXQgVmVjdG9yIGFscmVhZHkKKyAgICAgICAgaGFz
IGFuID09IG9wZXJhdG9yIGFuZCB3ZSBhcmUgdXNpbmcgRm9udEZhbWlseU5hbWUgZm9yIHRoZSBl
bGVtZW50cworICAgICAgICBvZiB0aGUgdmVjdG9yLCB3aGljaCBoYXMgYSBjb3JyZWN0ID09IG9w
ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2gp
OiBVc2UgY29tcHV0ZUhhc2ggc2luY2UKKyAgICAgICAgdGhlIEZvbnRGYW1pbHlOYW1lIGhhc2hp
bmcgaXMgbm93IGNvcnJlY3QsIGFuZCB3ZSBjYW4gcmVseSBvbiB0aGUKKyAgICAgICAgd2F5IEhh
c2hlciBrbm93cyBob3cgdG8gaXRlcmF0ZSBhIGNvbGxlY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyk6IFVwZGF0ZSBzaW5jZQorICAg
ICAgICBGb250Q2FzY2FkZUNhY2hlRW50cnkgaXMgbm93IGEgc2ltcGxlIHN0cnVjdC4gQWxzbyB1
c2UgY29uc3RleHByIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZhbGlk
YXRlKTogVXNlIGNvcHlUb1ZlY3Rvck9mPD4gdG8gc2ltcGxpZnkgdGhlCisgICAgICAgIGNvZGUg
dGhhdCBjYWxscyBmb250Q2FjaGVJbnZhbGlkYXRlZCBvbiBhbGwgdGhlIGZvbnQgc2VsZWN0b3Jz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6IFVzZSAidXNpbmci
IGluc3RlYWQgb2YgInR5cGVkZWYiLgorICAgICAgICBSZW1vdmUgRm9udERlc2NyaXB0aW9uS2V5
Ojpjb21wdXRlSGFzaC4KKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6IEFuIG92ZXJsb2FkIG9mIGFk
ZCBmb3IgSGFzaGVyIHRvIGluY2x1ZGUgYQorICAgICAgICBGb250RGVzY3JpcHRpb25LZXkgaW4g
YSBoYXNoLCB3aGljaCBqdXN0IGxpc3RzIGFsbCB0aGUgZGF0YSBtZW1iZXJzLgorICAgICAgICBU
aGUgb2xkIHZlcnNpb24gZGlkIGEgaGFzaCBvZiBoYXNoZXMsIGJ1dCB0aGF0J3Mgbm90IG5lZWRl
ZCBhbnkgbW9yZS4KKyAgICAgICAgVXBkYXRlZCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHRvIHVz
ZSB0aGUgSGFzaGVyIHZlcnNpb24gb2YgQ29tcHV0ZUhhc2guCisgICAgICAgIEFkZGVkIEZvbnRG
YW1pbHlOYW1lLiBDaGFuZ2UgRm9udENhc2NhZGVDYWNoZUtleSB0byB1c2UgYSB2ZWN0b3Igb2YK
KyAgICAgICAgRm9udEZhbWlseU5hbWUgaW5zdGVhZCBvZiBBdG9tU3RyaW5nLiBJbiBGb250Q2Fz
Y2FkZUNhY2hlRW50cnksIHVzZQorICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQgaW5zdGVhZCBvZiBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRAorICAgICAgICBhbmQgYWxzbyBn
b3QgcmlkIG9mIHRoZSB1bm5lZWVkZWQgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAg
ICAgICAgVXNlIHRoZSBkZWxldGVkIHZhbHVlIG9mIEZvbnREZXNjcmlwdGlvbktleS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1
ZSk6IERpdHRvLgorICAgICAgICBSZW5hbWVkIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEgdG8g
anVzdCBjYWNoZWRGb250UGxhdGZvcm1EYXRhLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEdlbmVyaWNGYW1pbGllcy5oOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mCisgICAg
ICAgIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250U2VsZWN0
aW9uUmFuZ2U6OnVuaXF1ZVZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmFkZCk6IEFkZCBib3RoIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyB0byB0aGUgaGFz
aAorICAgICAgICBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgY29tYmluaW5nIHRoZW0uIEZvciBub3cs
IHRoaXMgbWFrZXMgdGhlIHdheQorICAgICAgICB0aGV5IGFyZSBoYXNoZWQgYSBiaXQgaW5lZmZp
Y2llbnQsIGJ1dCB0aGF0IGNhbiBiZSByZS10aWdodGVuZWQgdXAgYnkKKyAgICAgICAgaW1wcm92
aW5nIHRoZSBhbGdvcml0aG0gb2YgSGFzaGVyIGlmIHdlIGxpa2UuIFNob3VsZCBiZSBmaW5lIGZv
ciBvdXIKKyAgICAgICAgbmVlZHMgZWl0aGVyIHdheS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmVh
dHVyZVNldHRpbmdzOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRWYXJpYXRpb25TZXR0aW5nczo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuaDogQWRkZWQgb3ZlcmxvYWRzIG9m
IHRoZQorICAgICAgICBhZGQoSGFzaGVyJikgZnVuY3Rpb24gZm9yIHN0ZDo6YXJyYXk8Y2hhciwg
ND4gYW5kIEZvbnRUYWdnZWRTZXR0aW5nPFQ+LgorICAgICAgICBHb3QgcmlkIG9mIG1hbnkgdXNl
cyBvZiBwYXNzIGJ5IHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHZhbHVlIGZvciBGb250VGFnLAorICAg
ICAgICBzaW5jZSBpdCBmaXRzIGludG8gYSAzMi1iaXQgcmVnaXN0ZXIgYW5kIGJ0aCBtb3JlIHNv
dXJjZSBjb2RlIGFuZCBsZXNzCisgICAgICAgIGVmZmljaWVudCB0byBwYXNzIGJ5IHZhbHVlLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOiBSZW1vdmVkICJ1c2lu
ZyBXVEY6OnBhaXJJbnRIYXNoIiBzaW5jZQorICAgICAgICB0aGF0J3Mgbm93IGRvbmUgaW4gdGhl
IFdURiBoZWFkZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwOiBEaXR0by4gQWxzbyByZW1vdmVkCisgICAgICAgICJ1c2luZyBXVEY6OkdlbmVy
aWNIYXNoVHJhaXRzIiwgd2hpY2ggd2FzIHVuaGVscGZ1bC4gVGhlIEdlbmVyaWNIYXNoVHJhaXRz
CisgICAgICAgIHRlbXBsYXRlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCB3aGVuIHNwZWNpYWxpemlu
ZyBIYXNoVHJhaXRzLCB3aGljaAorICAgICAgICBhbHJlYWR5IGhhcyB0byBiZSBkb25lIHdpdGhp
biB0aGUgV1RGIG5hbWVzcGFjZS4gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZQorICAgICAgICBzaG91
bGQganVzdCB1c2UgSGFzaFRyYWl0cyBpbnN0ZWFkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oOiBVc2UgSGFzaFRyYWl0cworICAgICAg
ICBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcDoKKyAg
ICAgICAgTW92ZSB0aGUgZGF0YSBtZW1iZXJzIHRvIHRoZSB0b3Agb2YgdGhlIEZvbnRGYW1pbHlT
cGVjaWZpY2F0aW9uS2V5IHN0cnVjdC4KKyAgICAgICAgUmVtb3ZlZCB1bm5lZWRlZCBjb21wdXRl
SGFzaCBmdW5jdGlvbiBhbmQgV1RGIHByZWZpeCBmcm9tIHNhZmVDRkVxdWFsLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXlIYXNoOjpoYXNoKTogQ2FsbCB0aGUg
SGFzaGVyIHZlcnNpb24KKyAgICAgICAgb2YgY29tcHV0ZUhhc2ggZGlyZWN0bHkgdG8gaGFzaCB0
aGUgdHdvIGl0ZW1zIGluIHRoaXMgc3RydWN0dXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Omhh
c2ggY29uc3QpOgorICAgICAgICBVc2UgY29tcHV0ZUhhc2ggaW5zdGVhZCBvZiBJbnRlZ2VySGFz
aGVyLiBBbHNvIHJlbmFtZWQgdGhlIGhhc2ggZnVuY3Rpb24KKyAgICAgICAgc3RydWN0IGZyb20g
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoIHRvCisgICAg
ICAgIENhc2NhZGVMaXN0UGFyYW1ldGVyczo6SGFzaC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNo
YXJhY3RlcnMpOgorICAgICAgICBSZW1vdmVkIG5vdy11bm5lZWRlZCBXVEYgcHJlZml4ZXMgZnJv
bSBjYWxscyB0byBzYWZlQ0ZFcXVhbC4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5oOiBVc2UgSGFzaFRyYWl0cyBpbnN0ZWFkIG9mIFdURjo6R2VuZXJpY0hhc2hUcmFpdHMu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUZvbnRIYXNoKTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgSW50
ZWdlckhhc2hlci4KKyAgICAgICAgU3RpbGwgbm90IGdyZWF0IHRoYXQgd2UgaGFzaCBhIGhhc2gg
aGVyZSwgYnV0IHdlIGNhbiBpbXByb3ZlIHRoYXQgbGF0ZXIuCisKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlckNsaWVudElkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlcnZpY2VXb3JrZXJDbGllbnRJZGVudGlmaWVyOjpkZWNvZGUpOiBSZW1vdmVkIHVubmVl
ZGVkCisgICAgICAgIFdURk1vdmUgb24gT2JqZWN0SWRlbnRpZmllciwgd2hpY2ggYXJlIGp1c3Qg
aW50ZWdlcnMsIHNvIG1vdmUgdnMuIGNvcHkKKyAgICAgICAgaXMgbm90IGFuIGltcG9ydGFudCBk
aXN0aW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJDbGllbnRJZGVudGlm
aWVyOjpoYXNoIGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29t
YmluaW5nIGludEhhc2ggd2l0aCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMK
KyAgICAgICAgdHdvIG1pc3Rha2VzOiBvbmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhh
c2ggYSBoYXNoLiBUaGUgc2Vjb25kIGlzCisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMy
LWJpdCBpbnRlZ2VyIGFzIGl0cyBwYXJhbWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBv
YmplY3QgaWRlbnRpZmllcnMgd2VyZSBkaXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAg
ICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuaDogUmVtb3ZlZCB1
bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5oOiBBZGRlZCBub3ctbmVlZGVkIGluY2x1ZGUKKyAgICAgICAgb2YgVVJM
SGFzaC5oLCBzaW5jZSB3ZSByZW1vdmVkIGl0IGZyb20gYSB3aWRlbHktaW5jbHVkZWQgaGVhZGVy
LgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9jb250ZXh0L1NXQ29udGV4dE1hbmFnZXIuaDog
RGl0dG8uCisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TZXJ2aWNlV29ya2VyVGhy
ZWFkUHJveHkuaDogRGl0dG8uCisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25TdG9yZS5oOiBEaXR0by4KKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1NXU2VydmVyLmg6IERpdHRvLgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dT
ZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmg6IERpdHRvLgorICAgICAgICAqIHdvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaDogRGl0dG8uCisKIDIwMjEtMDQtMDcgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIFJlbW92ZSBJ
bmxpbmVMaW5lcyBhbmQgSW5saW5lTGluZUJveGVzIGlubGluZSBjYXBhY2l0eSBvZiAxMApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCAzNWM5ZTM1YmM3Yzc3ZGQzMzZkYmU0NjZkODdiN2I4MjZmMWNkNzlmLi5lYzQzNTQ3
NzJhNzA3ZDhhOTFhZjIyYzdmNDg3MjRiOWU4ZDFlMjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBVc2UgSGFzaGVyIG1vcmUsIHJlbW92ZSBJbnRlZ2VySGFzaGVyLCBmaXggaGFzaGluZy1yZWxh
dGVkIG1pc3Rha2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjQxMzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRD
b25uZWN0aW9uLmg6IEFkZGVkIG5vdy1uZWVkZWQgaW5jbHVkZQorICAgICAgICBvZiBVUkxIYXNo
LmgsIHNpbmNlIHdlIHJlbW92ZWQgaXQgZnJvbSBhIHdpZGVseS1pbmNsdWRlZCBoZWFkZXIuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNoIGNvbnN0KTogVXNlIGNv
bXB1dGVIYXNoCisgICAgICAgIGluc3RlYWQgb2YgY29tYmluaW5nIGludEhhc2ggd2l0aCBTdHJp
bmdIYXNoZXI6Omhhc2hNZW1vcnkuIFRoaXMgZml4ZXMKKyAgICAgICAgdHdvIG1pc3Rha2VzOiBv
bmUgaXMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggYSBoYXNoLiBUaGUgc2Vjb25kIGlz
CisgICAgICAgIHRoYXQgaW50SGFzaCB0YWtlcyBhIDMyLWJpdCBpbnRlZ2VyIGFzIGl0cyBwYXJh
bWV0ZXIsIHNvIGhpZ2ggYml0cworICAgICAgICBvZiBvYmplY3QgaWRlbnRpZmllcnMgd2VyZSBk
aXNjYXJkZWQgdW5uZWNlc3NhcmlseS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5OiBBZGRlZCBjb2RlIHNvIHRoYXQgaWYgVVJMIGlzIGluIGFuIGFyZ3VtZW50LCB3ZSBp
bmNsdWRlIHRoZQorICAgICAgICBVUkxIYXNoLmggaGVhZGVyLiBXb3VsZCBiZSBiZXR0ZXIgdG8g
anVzdCB1c2UgVVJMLmggYW5kIHVzZSBVUkxIYXNoLmggb25seSBpZiBpdCdzIGEKKyAgICAgICAg
SGFzaE1hcDxVUkw+LCBidXQgY3VycmVudGx5IHRoZSBzY3JpcHQgZG9lcyBub3QgZGlzdGluZ3Vp
c2ggdGhvc2UgY2FzZXMuIFRoaXMgd2Fzbid0IG5lZWRlZAorICAgICAgICBiZWZvcmUgYmVjdWFz
ZSBhIHdpZGVseSBpbmNsdWRlZCBoZWFkZXIgd2FzIGFsd2F5cyBwdWxsaW5nIGluIFVSTEhhc2gu
aC4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRIYW5kbGUu
bW06CisgICAgICAgICgtW1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlIGhhc2hdKTogVXNlIGNvbXB1
dGVIYXNoIGluc3RlYWQgb2YgcGFpckludEhhc2guCisgICAgICAgIFRoaXMgZml4ZXMgYSBtaXN0
YWtlOiBwYWlySW50SGFzaCB0YWtlcyB0d28gMzItYml0IGludGVnZXJzLCBzbyBoaWdoIGJpdHMK
KyAgICAgICAgb2Ygb2JqZWN0IGlkZW50aWZpZXJzIHdlcmUgZGlzY2FyZGVkIHVubmVjZXNzYXJp
bHkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFn
ZXJDb25uZWN0aW9uLmg6IEFkZGVkIG5vdy1uZWVkZWQgaW5jbHVkZQorICAgICAgICBvZiBVUkxI
YXNoLmgsIHNpbmNlIHdlIHJlbW92ZWQgaXQgZnJvbSBhIHdpZGVseS1pbmNsdWRlZCBoZWFkZXIu
CisKIDIwMjEtMDQtMDcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0NvY29hXSBJbmNvcnJlY3Qgc2VsZWN0b3IgdXNlZCB0byBzZXQgbG9nZ2luZyBsZXZl
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDYwYzQzODkyMGYzNDk5NjEzODNiNjE2
NGFmZjJiZTdiNjE3OGViNTguLmYxMGI4Njk2ZGI1ZDhmOWE3YTBhOGM1MjZjOTJmNzczNmM4ODA4
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0w
NC0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEhhc2hl
ciBtb3JlLCByZW1vdmUgSW50ZWdlckhhc2hlciwgZml4IGhhc2hpbmctcmVsYXRlZCBtaXN0YWtl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MTM4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0
b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHA6IFVzZSBIYXNoVHJhaXRzIGluc3RlYWQgb2YgV1RG
OjpHZW5lcmljSGFzaFRyYWl0cy4KKwogMjAyMS0wMy0zMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBNQUNIX1BPUlRfVkFMSUQoKSB3aGVuIHdhbnRpbmcg
dG8gY2hlY2sgaWYgYSBtYWNoIHBvcnQgaXMgdmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IGQxNDc1NDE4MzI0NzI1NTQ4NzU5OWFl
OWI0NjIwNWI2ZDVkN2RlMjguLmE4NGJkYTE2ZWZiN2NiN2MzMjVhYzZjMjA3YjA5MDczYzE4MjMw
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
ZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
aApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgQ2hlY2twb2ludCBjaGVja3BvaW50KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYgY2hlY2twb2ludE1hc2s7IH0KICAgICB1aW50
MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNrZWRCaXRzKTsgfQor
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBpbnRIYXNoKG1fcGFja2VkQml0cyk7
IH0KICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9t
Qml0cyhpbnZhbGlkT2Zmc2V0IC0gMSk7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgKaW5kZXggMWJhZTdmZGI4Y2Uy
ZDg1YTJkYTY0Yzc4OTIxN2UwZTFlYzQxYTUyMi4uNjU4ZTJjZmM1ZWNlODIzNDk3NmI2MzRkZThl
MzdmMjBkNmYwZmM4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcC5oCkBAIC0xNTQsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9lbGVtZW50
U2l6ZTsKICAgICBzdGQ6OmFycmF5PEFic3RyYWN0SGVhcCwgMTY+IG1fc21hbGxJbmRpY2VzOwog
ICAgIAotICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJp
Y0hhc2hUcmFpdHM8cHRyZGlmZl90PiB7CisgICAgc3RydWN0IFdpdGhvdXRaZXJvT3JPbmVIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxwdHJkaWZmX3Q+IHsKICAgICAgICAgc3RhdGljIHZvaWQgY29u
c3RydWN0RGVsZXRlZFZhbHVlKHB0cmRpZmZfdCYgc2xvdCkgeyBzbG90ID0gMTsgfQogICAgICAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShwdHJkaWZmX3QgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlID09IDE7IH0KICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCmluZGV4IGRkNjIxNjU0MGFlZGFkMWE2ZGMxYzQzNWNmZDRkZTk5NDJjZWUx
MjguLjhhZjhjNDU1YTA3ZTI1MDQwNzg3MTljNjNjNDI2ZmM0ZTlkZThjYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTU5MSw3ICs1OTEs
OCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlU2V0JiBsaXZlID0gbV9saXZlSW5Ub05vZGUuZmlu
ZChub2RlKS0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIGhpZ2hQYXJlbnRJbmRleCA9IG5vZGUt
PmluZGV4KCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBXVEY6Omlu
dEhhc2goaGlnaFBhcmVudEluZGV4KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaW5jZSBpbnRI
YXNoIHJldHVybnMgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciwgaXQncyBub3QgY2xlYXIgd2h5
IGl0J3MgaGVscGZ1bCB0byBzdG9yZSBpdCBpbiBhIHVpbnQ2NF90LgorICAgICAgICAgICAgdWlu
dDY0X3QgaGFzaCA9IGludEhhc2goaGlnaFBhcmVudEluZGV4KTsKICAgICAgICAgICAgIGlmICho
YXNoID49IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigoc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpICsgMSkgKiBPcHRpb25zOjp2YWxpZGF0ZUFi
c3RyYWN0SW50ZXJwcmV0ZXJTdGF0ZVByb2JhYmlsaXR5KCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludEdlbmVyYXRvci5jcHAKaW5kZXggNTM3ZWU1NjUyMGVkNTg0MzAxZjQ4MjA0OTYyY2YyNzg2
YmRiMzRmZC4uMDU0ZTMxZWQ2YmE0YTI4OWU4ZWNjNWU2ZDY3MThhZWU2NzYxMDVlOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBA
IC00MTYsNyArNDE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50KiBqdW1wVGFyZ2V0OwogICAg
IH07CiAKLSAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFz
aFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4geworICAgIHN0cnVjdCBDb25zdGFudE1hcEhhc2hUcmFp
dHMgOiBIYXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIHZvaWQgY29u
c3RydWN0RGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlJiBzbG90KSB7IHNsb3QgPSBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KEVuY29kZWRKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmgKaW5kZXggNWY5MGY0ZWE3NjExODFiZmU0
YTQ1MDc3YjEyZDE4NTFlN2Y4OWM0OS4uZmZkNTIyY2UyOTA4ZDdmZWU3MmFiYjA0NjE0YWFmNDQx
MDViNmI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaApAQCAtMjc1LDMgKzI3NSw1IEBAIG5hbWVz
cGFjZSBXVEYgewogdXNpbmcgV1RGOjpEZWZhdWx0SGFzaDsKIHVzaW5nIFdURjo6SW50SGFzaDsK
IHVzaW5nIFdURjo6UHRySGFzaDsKK3VzaW5nIFdURjo6aW50SGFzaDsKK3VzaW5nIFdURjo6cGFp
ckludEhhc2g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hlci5oCmluZGV4IDUyZWIyMzQyMTFkMzY5YzhlM2UwOWFjNzViZDhjNDRkYTA2
Mzk1NWUuLjI4NzI1NjhlOTM2Nzk3MTdjMzE0ZDBlM2NhMTZiNzcyOWNkMDQ2M2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMzEg
KzIwLDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLS8v
IERlcHJlY2F0ZWQuIFVzZSBIYXNoZXIgaW5zdGVhZC4KLWNsYXNzIEludGVnZXJIYXNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZvaWQgYWRkKHVpbnQz
Ml90IGludGVnZXIpCi0gICAgewotICAgICAgICBtX3VuZGVybHlpbmdIYXNoZXIuYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZChpbnRlZ2VyLCBpbnRlZ2VyID4+IDE2KTsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3VuZGVybHlp
bmdIYXNoZXIuaGFzaCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmdIYXNoZXIgbV91
bmRlcmx5aW5nSGFzaGVyOwotfTsKLQogdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+IHVpbnQz
Ml90IGNvbXB1dGVIYXNoKGNvbnN0IFR5cGVzJi4uLik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZS4uLiBPdGhlclR5cGVzPiB1aW50MzJfdCBjb21wdXRlSGFzaChzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8VD4sIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxPdGhlclR5cGVzPi4uLik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVbnNpZ25lZEludGVnZXI+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc191
bnNpZ25lZDxVbnNpZ25lZEludGVnZXI+Ojp2YWx1ZSAmJiBzaXplb2YoVW5zaWduZWRJbnRlZ2Vy
KSA8PSBzaXplb2YodWludDMyX3QpLCB2b2lkPiBhZGQoSGFzaGVyJiwgVW5zaWduZWRJbnRlZ2Vy
KTsKQEAgLTExMiw2ICs5NSwyNyBAQCBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGZs
b2F0IG51bWJlcikKICAgICBhZGQoaGFzaGVyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG51bWJl
cikpOwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIGJvb2wgcmVtYWluZGVyID0gc3RyaW5nLmxlbmd0aCgpICYgMTsKKyAg
ICB1bnNpZ25lZCByb3VuZGVkTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpIC0gcmVtYWluZGVyOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb3VuZGVkTGVuZ3RoOyBpICs9IDIpCisgICAg
ICAgIGFkZChoYXNoZXIsIChzdHJpbmdbaV0gPDwgMTYpIHwgc3RyaW5nW2kgKyAxXSk7CisgICAg
aWYgKHJlbWFpbmRlcikKKyAgICAgICAgYWRkKGhhc2hlciwgc3RyaW5nW3JvdW5kZWRMZW5ndGhd
KTsKK30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBBdG9tU3RyaW5n
JiBzdHJpbmcpCit7CisgICAgLy8gQ2hvc2UgdG8gaGFzaCB0aGUgcG9pbnRlciBoZXJlLiBBc3N1
bWluZyB0aGlzIGlzIGJldHRlciB0aGFuIGhhc2hpbmcgdGhlIGNoYXJhY3RlcnMgb3IgaGFzaGlu
ZyB0aGUgYWxyZWFkeS1jb21wdXRlZCBoYXNoIG9mIHRoZSBjaGFyYWN0ZXJzLgorICAgIGFkZCho
YXNoZXIsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cmluZy5pbXBsKCkpKTsKK30KKworaW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBhZGQo
aGFzaGVyLCB1cmwuc3RyaW5nKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtZXJhdGlv
bj4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RW51bWVyYXRpb24+Ojp2YWx1ZSwgdm9p
ZD4gYWRkKEhhc2hlciYgaGFzaGVyLCBFbnVtZXJhdGlvbiB2YWx1ZSkKIHsKICAgICBhZGQoaGFz
aGVyLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEVudW1lcmF0aW9uPj4odmFs
dWUpKTsKQEAgLTE4Niw0ICsxOTAsMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcykKIAogdXNpbmcg
V1RGOjpjb21wdXRlSGFzaDsKIHVzaW5nIFdURjo6SGFzaGVyOwotdXNpbmcgV1RGOjpJbnRlZ2Vy
SGFzaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT2JqZWN0SWRlbnRpZmllci5oIGIv
U291cmNlL1dURi93dGYvT2JqZWN0SWRlbnRpZmllci5oCmluZGV4IGY5YzY3YjYzYjVlMjZhNDBi
NGFhYjU4YzAxNGQ1ZjQ3MGE2MDg1NTMuLjg4ODVhYTMxYjI5NTYxZDkwMGY3NTJlYjNmZWIzNzhm
NWQ0NDM5OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09iamVjdElkZW50aWZpZXIuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9PYmplY3RJZGVudGlmaWVyLmgKQEAgLTEzMSw2ICsxMzEsMTEg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIE9iamVjdElkZW50aWZpZXI8VD4gbWFrZU9i
amVjdElkZW50aWZpZXIodWludDY0X3QgaWQKICAgICByZXR1cm4gT2JqZWN0SWRlbnRpZmllcjxU
PiB7IGlkZW50aWZpZXIgfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBPYmplY3RJZGVudGlmaWVyPFQ+IGlkZW50aWZpZXIpCit7Cisg
ICAgYWRkKGhhc2hlciwgaWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IE9iamVjdElkZW50aWZpZXJIYXNoIHsKICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBPYmplY3RJZGVudGlmaWVyPFQ+JiBpZGVudGlmaWVyKSB7IHJldHVybiBp
bnRIYXNoKGlkZW50aWZpZXIubV9pZGVudGlmaWVyKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IE9iamVjdElkZW50aWZpZXI8VD4mIGEsIGNvbnN0IE9iamVjdElkZW50aWZpZXI8VD4m
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmV0YWlu
UHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaAppbmRleCBjN2ZiNzQ0MTA1NTYxZmQ2
MTU4ODg4ZTNjZjBhZWY5ZGIzNDY1YTJmLi40YzU5ODRlZmQ2MDE3YTJjNjhlNTI2MmY4Y2VjYjVk
YTI1ODNlOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaApAQCAtNDAyLDYgKzQwMiw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQqIGR5bmFtaWNfb2JqY19jYXN0KGlkIG9iamVjdCkKIHVzaW5nIFdURjo6UmV0
YWluUHRyOwogdXNpbmcgV1RGOjphZG9wdENGOwogdXNpbmcgV1RGOjpyZXRhaW5QdHI7Cit1c2lu
ZyBXVEY6OnNhZmVDRkVxdWFsOwordXNpbmcgV1RGOjpzYWZlQ0ZIYXNoOwogCiAjaWZkZWYgX19P
QkpDX18KIHVzaW5nIFdURjo6YWRvcHROUzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Zl
Y3Rvckhhc2guaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvckhhc2guaAppbmRleCBjMzczOTQ4OGRl
ODVjMzhlZWNkNjcxZmU3MDMyMTdmMzkzZTljMjBiLi45MzgyMWEyN2U1ZjhiNTA0MjFhYjc2YWQ3
N2M5YzliMjQ1Y2NiZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgK
KysrIGIvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI4ICsyNiwxNCBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiSGFzaFRyYWl0
cy5oIgogI2luY2x1ZGUgIkhhc2hlci5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotc3RydWN0IFZlY3Rvckhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOwotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHZhbHVlIDogdmVjdG9yKQotICAgICAgICAgICAgaGFzaGVyLmFkZChE
ZWZhdWx0SGFzaDxUPjo6aGFzaCh2YWx1ZSkpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2go
KTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5PiYgYSwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgYikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8VmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5Pj4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT4mIHZlY3RvcikgeyByZXR1cm4gY29tcHV0ZUhhc2godmVjdG9yKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNvbnN0
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1zdHJ1
Y3QgRGVmYXVsdEhhc2g8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBWZWN0b3JIYXNoPFQs
IGlubGluZUNhcGFjaXR5PiB7IH07Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCmluZGV4IGM1MGJmMTdiOTZi
ZDczMDA4MmUzYzAxZDY5N2I2MmQ2NDU5Y2RjMjQuLmFjNTU5MmViYzYyMjU5NGU0NTgxYTM2MGU4
MjNjMWI3YmY2YzZiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJ
bmZvLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OCwyMyArODksMTIgQEAgc3RydWN0
IFRyaWdnZXIgewogc3RydWN0IFRyaWdnZXJIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBUcmlnZ2VyJiB0cmlnZ2VyKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaGFzaCA9
IHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID8gMTA2MTk4NjMgOiA0MDk2MDAwMTsK
LSAgICAgICAgaWYgKCF0cmlnZ2VyLnVybEZpbHRlci5pc051bGwoKSkKLSAgICAgICAgICAgIGhh
c2ggXj0gU3RyaW5nSGFzaDo6aGFzaCh0cmlnZ2VyLnVybEZpbHRlcik7Ci0gICAgICAgIGhhc2gg
PSBXVEY6OnBhaXJJbnRIYXNoKGhhc2gsIERlZmF1bHRIYXNoPFJlc291cmNlRmxhZ3M+OjpoYXNo
KHRyaWdnZXIuZmxhZ3MpKTsKLQotICAgICAgICBmb3IgKGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
IDogdHJpZ2dlci5jb25kaXRpb25zKQotICAgICAgICAgICAgaGFzaCBePSBTdHJpbmdIYXNoOjpo
YXNoKGNvbmRpdGlvbik7Ci0KLSAgICAgICAgaGFzaCBePSAxIDw8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0cmlnZ2VyLmNvbmRpdGlvblR5cGUpOwotICAgICAgICByZXR1cm4gaGFzaDsKKyAgICAg
ICAgcmV0dXJuIGNvbXB1dGVIYXNoKHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlLCB0
cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci5mbGFncywgdHJpZ2dlci5jb25kaXRpb25zLCB0cmln
Z2VyLmNvbmRpdGlvblR5cGUpOwogICAgIH0KLQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFRyaWdnZXImIGEsIGNvbnN0IFRyaWdnZXImIGIpCiAgICAgewogICAgICAgICByZXR1cm4gYSA9
PSBiOwogICAgIH0KLQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9UZXJtLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9U
ZXJtLmgKaW5kZXggMGQ1MTgzM2Y1YzA2ODViYjg4OGUzYWEyMTc3YzM4N2Y0Mzc2YTU0NC4uNGUy
NWM3MmVkZWFhZjU3NTllZGI2MGYxMmY2ZWYwNmE0YjRlYzEzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1Rlcm0uaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHVuaWNv
ZGUvdXR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpAQCAtMTY4LDExICsxNjksMTIgQEAgcHJpdmF0ZToKIAogICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6cGFpckludEhhc2goV1RGOjpwYWlySW50SGFzaChXVEY6OmludEhhc2gobV9jaGFyYWN0ZXJz
WzBdKSwgV1RGOjppbnRIYXNoKG1fY2hhcmFjdGVyc1sxXSkpLCBtX2ludmVydGVkKTsKKyAgICAg
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaChtX2ludmVydGVkLCBtX2NoYXJhY3RlcnMpOwogICAg
ICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faW52ZXJ0ZWQgeyBmYWxzZSB9
OwotICAgICAgICB1aW50NjRfdCBtX2NoYXJhY3RlcnNbMl0geyAwLCAwIH07CisgICAgICAgIHN0
ZDo6YXJyYXk8dWludDY0X3QsIDI+IG1fY2hhcmFjdGVycyB7IDAsIDAgfTsKICAgICB9OwogCiAg
ICAgc3RydWN0IEdyb3VwIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ckNvbnRleHQuY3BwCmluZGV4IDEzZjlmNDk2NjliYjY5NDdhMDQ3NGI0YmM3NDE1ZjNjZjQyZjQx
NjYuLjA5ODE2MjZlZmEzY2E3ZGM3ZjhhMjllZDhmZDA3YTk1ZDRiYzVmOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmNwcApAQCAtMTM3LDYgKzEz
Nyw0MyBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYSwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgYikKICAgICA7CiB9CiAKK3ZvaWQgYWRkKEhhc2hlciYgaGFzaGVy
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVuc2lnbmVkIGJpdHMg
PSBjb250ZXh0LmlzSFRNTERvY3VtZW50ICAgICAgICAgICAgICAgICAgPDwgMAorICAgICAgICB8
IGNvbnRleHQuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiAgICAgICAgICAgICAgICAgPDwgMQor
ICAgICAgICB8IGNvbnRleHQuaXNDb250ZW50T3BhcXVlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgMgorICAgICAgICB8IGNvbnRleHQudXNlU3lzdGVtQXBwZWFyYW5jZSAgICAgICAgICAg
ICAgICAgICAgICAgPDwgMworICAgICAgICB8IGNvbnRleHQuYXNwZWN0UmF0aW9FbmFibGVkICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgNAorICAgICAgICB8IGNvbnRleHQuY29sb3JDb250cmFz
dEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgPDwgNQorICAgICAgICB8IGNvbnRleHQuY29s
b3JGaWx0ZXJFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgPDwgNgorICAgICAgICB8IGNv
bnRleHQuY29sb3JNaXhFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgNworICAg
ICAgICB8IGNvbnRleHQuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCAgICAgICAgICAgICAgICAg
PDwgOAorICAgICAgICB8IGNvbnRleHQuY29udGFpbm1lbnRFbmFibGVkICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgOQorICAgICAgICB8IGNvbnRleHQuY3NzQ29sb3I0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgMTAKKyAgICAgICAgfCBjb250ZXh0LmRlZmVycmVkQ1NTUGFy
c2VyRW5hYmxlZCAgICAgICAgICAgICAgICAgIDw8IDExCisgICAgICAgIHwgY29udGV4dC5pbmRp
dmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgICAgICA8PCAxMgorI2lmIEVOQUJMRShP
VkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgICAgIHwgY29udGV4dC5sZWdhY3lPdmVyZmxv
d1Njcm9sbGluZ1RvdWNoRW5hYmxlZCAgICAgICA8PCAxMworI2VuZGlmCisgICAgICAgIHwgY29u
dGV4dC5vdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAgICAgICAgICAgICAgICA8PCAxNAorICAg
ICAgICB8IGNvbnRleHQucmVsYXRpdmVDb2xvclN5bnRheEVuYWJsZWQgICAgICAgICAgICAgICAg
PDwgMTUKKyAgICAgICAgfCBjb250ZXh0LnNjcm9sbEJlaGF2aW9yRW5hYmxlZCAgICAgICAgICAg
ICAgICAgICAgIDw8IDE2CisgICAgICAgIHwgY29udGV4dC5zcHJpbmdUaW1pbmdGdW5jdGlvbkVu
YWJsZWQgICAgICAgICAgICAgICA8PCAxNworI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCisg
ICAgICAgIHwgY29udGV4dC50ZXh0QXV0b3NpemluZ0VuYWJsZWQgICAgICAgICAgICAgICAgICAg
ICA8PCAxOAorI2VuZGlmCisjaWYgRU5BQkxFKENTU19UUkFOU0ZPUk1fU1RZTEVfT1BUSU1JWkVE
XzNEKQorICAgICAgICB8IGNvbnRleHQudHJhbnNmb3JtU3R5bGVPcHRpbWl6ZWQzREVuYWJsZWQg
ICAgICAgICAgPDwgMTkKKyNlbmRpZgorICAgICAgICB8IGNvbnRleHQudXNlTGVnYWN5QmFja2dy
b3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciAgPDwgMjAKKyAgICAgICAgfCBjb250ZXh0LmZvY3Vz
VmlzaWJsZUVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgIDw8IDIxCisjaWYgRU5BQkxFKEFU
VEFDSE1FTlRfRUxFTUVOVCkKKyAgICAgICAgfCBjb250ZXh0LmF0dGFjaG1lbnRFbmFibGVkICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IDIyCisjZW5kaWYKKyAgICAgICAgfCBjb250ZXh0Lm1v
ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDIzOyAvLyBUaGlzIGlz
IG11bHRpcGxlIGJpdHMsIHNvIGtlZXAgaXQgbGFzdC4KKyAgICBhZGQoaGFzaGVyLCBjb250ZXh0
LmJhc2VVUkwsIGNvbnRleHQuY2hhcnNldCwgYml0cyk7Cit9CisKIGJvb2wgQ1NTUGFyc2VyQ29u
dGV4dDo6aXNQcm9wZXJ0eVJ1bnRpbWVEaXNhYmxlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBj
b25zdAogewogICAgIHN3aXRjaCAocHJvcGVydHkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXJDb250ZXh0LmgKaW5kZXggOGUwYjg3ZjdhYTc2MGU2ZWYyNzZiZDYzMmVm
ZmIwYWZhZDkxZTZlNi4uNDk1NjBkODFjODU5MGY5MGZkYmE1NGVhNTIxNTUyY2NkZGM0ZDBmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgKQEAgLTMw
LDIwICszMCwxNiBAQAogI2luY2x1ZGUgIlN0eWxlUnVsZVR5cGUuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVVJM
Lmg+Ci0jaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiAKIHN0cnVj
dCBDU1NQYXJzZXJDb250ZXh0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUsIGNvbnN0IFVSTCYgYmFzZVVS
TCA9IFVSTCgpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERv
Y3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCA9IGVtcHR5U3RyaW5nKCkpOworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
IAogICAgIFVSTCBiYXNlVVJMOwogICAgIFN0cmluZyBjaGFyc2V0OwpAQCAtNTcsOCArNTMsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvbnRlbnRPcGFxdWUgeyBmYWxzZSB9OwogICAgIGJvb2wg
dXNlU3lzdGVtQXBwZWFyYW5jZSB7IGZhbHNlIH07CiAKLSAgICBib29sIGlzUHJvcGVydHlSdW50
aW1lRGlzYWJsZWQoQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KICAgICAvLyBTZXR0aW5ncy4KICAg
ICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBjb2xvckNvbnRy
YXN0RW5hYmxlZCB7IGZhbHNlIH07CkBAIC05MCw3MCArODQsMjkgQEAgcHVibGljOgogICAgIGJv
b2wgYXR0YWNobWVudEVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAKLSAgICBVUkwgY29tcGxl
dGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OworICAgIENTU1BhcnNlckNvbnRleHQoQ1NT
UGFyc2VyTW9kZSwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCkpOworICAgIFdFQkNPUkVfRVhQ
T1JUIENTU1BhcnNlckNvbnRleHQoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBVUkwmIGJhc2VVUkwg
PSBVUkwoKSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gZW1wdHlTdHJpbmcoKSk7CisgICAgYm9v
bCBpc1Byb3BlcnR5UnVudGltZURpc2FibGVkKENTU1Byb3BlcnR5SUQpIGNvbnN0OworICAgIFVS
TCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHJlbGF0aXZlVVJMKSBjb25zdDsKIH07CiAKIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYpOwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBh
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAordm9p
ZCBhZGQoSGFzaGVyJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOworCiBXRUJDT1JFX0VYUE9S
VCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCk7CiAKIHN0
cnVjdCBDU1NQYXJzZXJDb250ZXh0SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYga2V5KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnZl
cnQgdGhpcyB0byB1c2UgV1RGOjpIYXNoZXIuCi0KLSAgICAgICAgdW5zaWduZWQgaGFzaCA9IDA7
Ci0gICAgICAgIGlmICgha2V5LmJhc2VVUkwuaXNOdWxsKCkpCi0gICAgICAgICAgICBoYXNoIF49
IFdURjo6VVJMSGFzaDo6aGFzaChrZXkuYmFzZVVSTCk7Ci0gICAgICAgIGlmICgha2V5LmNoYXJz
ZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgaGFzaCBePSBTdHJpbmdIYXNoOjpoYXNoKGtleS5j
aGFyc2V0KTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGJpdHMgPSBrZXkuaXNIVE1MRG9j
dW1lbnQgICAgICAgICAgICAgICAgICA8PCAwCi0gICAgICAgICAgICAmIGtleS5oYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luICAgICAgICAgICAgICAgICA8PCAxCi0gICAgICAgICAgICAmIGtleS5p
c0NvbnRlbnRPcGFxdWUgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyCi0gICAgICAgICAg
ICAmIGtleS51c2VTeXN0ZW1BcHBlYXJhbmNlICAgICAgICAgICAgICAgICAgICAgICA8PCAzCi0g
ICAgICAgICAgICAmIGtleS5hc3BlY3RSYXRpb0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICAg
ICA8PCA0Ci0gICAgICAgICAgICAmIGtleS5jb2xvckNvbnRyYXN0RW5hYmxlZCAgICAgICAgICAg
ICAgICAgICAgICA8PCA1Ci0gICAgICAgICAgICAmIGtleS5jb2xvckZpbHRlckVuYWJsZWQgICAg
ICAgICAgICAgICAgICAgICAgICA8PCA2Ci0gICAgICAgICAgICAmIGtleS5jb2xvck1peEVuYWJs
ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCA3Ci0gICAgICAgICAgICAmIGtleS5jb25z
dGFudFByb3BlcnRpZXNFbmFibGVkICAgICAgICAgICAgICAgICA8PCA4Ci0gICAgICAgICAgICAm
IGtleS5jb250YWlubWVudEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICA8PCA5Ci0gICAg
ICAgICAgICAmIGtleS5jc3NDb2xvcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCAxMAotICAgICAgICAgICAgJiBrZXkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkICAgICAgICAg
ICAgICAgICAgPDwgMTEKLSAgICAgICAgICAgICYga2V5LmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9w
ZXJ0aWVzRW5hYmxlZCAgICAgIDw8IDEyCi0jaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19U
T1VDSCkKLSAgICAgICAgICAgICYga2V5LmxlZ2FjeU92ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFi
bGVkICAgICAgIDw8IDEzCi0jZW5kaWYKLSAgICAgICAgICAgICYga2V5Lm92ZXJzY3JvbGxCZWhh
dmlvckVuYWJsZWQgICAgICAgICAgICAgICAgIDw8IDE0Ci0gICAgICAgICAgICAmIGtleS5yZWxh
dGl2ZUNvbG9yU3ludGF4RW5hYmxlZCAgICAgICAgICAgICAgICA8PCAxNQotICAgICAgICAgICAg
JiBrZXkuc2Nyb2xsQmVoYXZpb3JFbmFibGVkICAgICAgICAgICAgICAgICAgICAgPDwgMTYKLSAg
ICAgICAgICAgICYga2V5LnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCAgICAgICAgICAgICAg
IDw8IDE3Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICAgICAgICAgICYga2V5LnRl
eHRBdXRvc2l6aW5nRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIDw8IDE4Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoQ1NTX1RSQU5TRk9STV9TVFlMRV9PUFRJTUlaRURfM0QpCi0gICAgICAgICAgICAm
IGtleS50cmFuc2Zvcm1TdHlsZU9wdGltaXplZDNERW5hYmxlZCAgICAgICAgICA8PCAxOQotI2Vu
ZGlmCi0gICAgICAgICAgICAmIGtleS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJl
aGF2aW9yICA8PCAyMAotICAgICAgICAgICAgJiBrZXkuZm9jdXNWaXNpYmxlRW5hYmxlZCAgICAg
ICAgICAgICAgICAgICAgICAgPDwgMjEKLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQot
ICAgICAgICAgICAgJiBrZXkuYXR0YWNobWVudEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgMjIKLSNlbmRpZgotICAgICAgICAgICAgJiBrZXkubW9kZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgMjM7IC8vIEtlZXAgdGhpcyBsYXN0LgotICAgICAgICBo
YXNoIF49IFdURjo6aW50SGFzaChiaXRzKTsKLSAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQot
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0K
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KSB7IHJldHVybiBjb21wdXRlSGFzaChjb250ZXh0KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5h
bWVzcGFjZSBXVEYgeworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkNT
U1BhcnNlckNvbnRleHQ+IDogR2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Q1NTUGFyc2VyQ29u
dGV4dD4gewogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpD
U1NQYXJzZXJDb250ZXh0JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QuYmFzZVVSTCkgVVJM
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKGNvbnN0IFdlYkNvcmU6OkNTU1BhcnNlckNvbnRleHQmIHZhbHVlKSB7IHJldHVybiB2
YWx1ZS5iYXNlVVJMLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9Gb3JtQ29udHJvbGxlci5jcHAKaW5kZXggYzdhNzA5YTBhMjQxMjQ0M2Q0M2YxN2Y2ZmE1ZjMx
MmQ5OWIwYTNjYy4uMjcyYTJiMGU3ZDUzNzI1YTZkNTQzOWM5MjU3NWFhZmQwOWJlYjIwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB1
bnNpZ25lZCBGb3JtRWxlbWVudEtleUhhc2g6Omhhc2goY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtl
eSkKICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihGb3JtRWxlbWVu
dEtleSk+KCZrZXkpOwogfQogCi1zdHJ1Y3QgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzIDogV1RG
OjpHZW5lcmljSGFzaFRyYWl0czxGb3JtRWxlbWVudEtleT4geworc3RydWN0IEZvcm1FbGVtZW50
S2V5SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8Rm9ybUVsZW1lbnRLZXk+IHsKICAgICBzdGF0aWMg
dm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9ybUVsZW1lbnRLZXkmIHNsb3QpIHsgbmV3IChO
b3ROdWxsLCAmc2xvdCkgRm9ybUVsZW1lbnRLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUp
OyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9ybUVsZW1lbnRLZXkm
IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmgK
aW5kZXggOWViZTMyM2FmYTYzM2MxODM4NTIxOGJiYWQ0ODM4ZWU1OWM2Y2E5OS4uZjRiYzc5ZjE5
YjQ5NWI5ZjAwNGZjYTNlNDJkMTg3MjQxZTlmNWZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0zNiw4ICszNiw2IEBACiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0JveFB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCiAjaWYgRU5BQkxFKFRIVU5ERVIpCiAjaW5jbHVkZSAi
Q0RNT3BlbkNETVR5cGVzLmgiCkBAIC0yMDcsOCArMjA1LDYgQEAgcHJpdmF0ZToKIGNsYXNzIENE
TUluc3RhbmNlUHJveHk7CiAKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvblByb3h5IDogcHVibGlj
IENETUluc3RhbmNlU2Vzc2lvbiwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlU2Vz
c2lvblByb3h5LCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4gewotcHVibGlj
OgotCiBwcm90ZWN0ZWQ6CiAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoQ0RNSW5zdGFuY2VQ
cm94eSYpOwogICAgIGNvbnN0IFdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4mIGNkbUluc3RhbmNl
UHJveHkoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDA4NzAyZDRjNzkwY2I5NjNhYmExNGE3Mjk3MTgy
NWY0YzA0MmZkNzkuLmIxMWE4NzY5ZTg2MGI5M2IwOWQ3MzI0MWU1YmViZDU4MDhiNjJiOGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01MzUsNjMgKzUz
NSwzMiBAQCB2b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3QgQQogfQogI2VuZGlmCiAKLWNsYXNzIENoYXJh
Y3RlckZhbGxiYWNrTWFwS2V5IHsKLXB1YmxpYzoKLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eSgpCi0gICAgewotICAgIH0KLQotICAgIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGNvbnN0IEF0
b21TdHJpbmcmIGxvY2FsZSwgVUNoYXIzMiBjaGFyYWN0ZXIsIElzRm9yUGxhdGZvcm1Gb250IGlz
Rm9yUGxhdGZvcm1Gb250KQotICAgICAgICA6IGxvY2FsZShsb2NhbGUpCi0gICAgICAgICwgY2hh
cmFjdGVyKGNoYXJhY3RlcikKLSAgICAgICAgLCBpc0ZvclBsYXRmb3JtRm9udChpc0ZvclBsYXRm
b3JtRm9udCA9PSBJc0ZvclBsYXRmb3JtRm9udDo6WWVzKQotICAgIHsKLSAgICB9Ci0KLSAgICBD
aGFyYWN0ZXJGYWxsYmFja01hcEtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogY2hhcmFjdGVyKC0xKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyID09IC0xOyB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvY2FsZSA9PSBvdGhlci5sb2NhbGUgJiYgY2hh
cmFjdGVyID09IG90aGVyLmNoYXJhY3RlciAmJiBpc0ZvclBsYXRmb3JtRm9udCA9PSBvdGhlci5p
c0ZvclBsYXRmb3JtRm9udDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gdHJ1ZTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgc3RydWN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5SGFzaDsKLQorc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsK
ICAgICBBdG9tU3RyaW5nIGxvY2FsZTsKICAgICBVQ2hhcjMyIGNoYXJhY3RlciB7IDAgfTsKICAg
ICBib29sIGlzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKIH07CiAKLXN0cnVjdCBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpCi0gICAgewotICAgICAgICBJbnRlZ2VySGFzaGVy
IGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZChrZXkuY2hhcmFjdGVyKTsKLSAgICAgICAgaGFz
aGVyLmFkZChrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOwotICAgICAgICBoYXNoZXIuYWRkKGtleS5s
b2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eSYgYSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYSA9PSBiOwotICAgIH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFj
dGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQor
eworICAgIHJldHVybiBhLmxvY2FsZSA9PSBiLmxvY2FsZSAmJiBhLmNoYXJhY3RlciA9PSBiLmNo
YXJhY3RlciAmJiBhLmlzRm9yUGxhdGZvcm1Gb250ID09IGIuaXNGb3JQbGF0Zm9ybUZvbnQ7Cit9
CiAKK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGNv
bXB1dGVIYXNoKGtleS5sb2NhbGUsIGtleS5jaGFyYWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9u
dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eSYgYSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKIH07CiAKK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHMgOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXk+IHsKKyAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIHNs
b3QpIHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgeyB7IH0s
IFVfU0VOVElORUwsIHsgfSB9OyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29u
c3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1cm4ga2V5LmNoYXJhY3RlciA9
PSBVX1NFTlRJTkVMOyB9Cit9OworCiAvLyBGb250cyBhcmUgbm90IHJlZidkIHRvIGF2b2lkIGN5
Y2xlcy4KLS8vIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2UgYmUgV2Vha1B0cnM/Ci10eXBlZGVmIEhh
c2hNYXA8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5Pj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgRm9udCos
IENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1GYWxsYmFja0NhY2hlOworLy8gRklYTUU6IENv
bnNpZGVyIGNoYW5naW5nIHRoZXNlIG1hcHMgdG8gdXNlIFdlYWtQdHIgaW5zdGVhZCBvZiByYXcg
cG9pbnRlcnMuCit1c2luZyBDaGFyYWN0ZXJGYWxsYmFja01hcCA9IEhhc2hNYXA8Q2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2gsIENoYXJh
Y3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cz47Cit1c2luZyBTeXN0ZW1GYWxsYmFja0NhY2hl
ID0gSGFzaE1hcDxjb25zdCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXA+OwogCiBzdGF0aWMg
U3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCiB7CkBAIC02MDgsMTIg
KzU3Nyw4IEBAIFJlZlB0cjxGb250PiBGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRECiAgICAgICAgIHJldHVybiBGb250Q2Fj
aGU6OnNpbmdsZXRvbigpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwg
dGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5v
LCAmY29kZVVuaXQsIDEpOwogICAgIH0KIAotICAgIGF1dG8ga2V5ID0gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkoZGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBs
YXRmb3JtRm9udCk7Ci0gICAgYXV0byBjaGFyYWN0ZXJBZGRSZXN1bHQgPSBmb250QWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5hZGQoV1RGTW92ZShrZXkpLCBudWxscHRyKTsKLQotICAgIEZvbnQq
JiBmYWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0g
ICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKKyAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IHsgZGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBs
YXRmb3JtRm9udCAhPSBJc0ZvclBsYXRmb3JtRm9udDo6Tm8gfTsKKyAgICByZXR1cm4gZm9udEFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZW5zdXJlKFdURk1vdmUoa2V5KSwgWyZdIHsKICAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICB1bnNpZ25lZCBjb2RlVW5pdHNMZW5ndGg7
CiAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CkBAIC02MjQsMTMgKzU4OSwxMSBA
QCBSZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICAgICAgY29kZVVuaXRzWzFdID0gVTE2
X1RSQUlMKGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwogICAg
ICAgICB9Ci0KLSAgICAgICAgZmFsbGJhY2tGb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5z
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZv
cm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgY29kZVVuaXRzLCBjb2Rl
VW5pdHNMZW5ndGgpLmdldCgpOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250KQotICAgICAgICAg
ICAgZmFsbGJhY2tGb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbGxiYWNrRm9udDsKKyAgICAgICAgYXV0byBmb250ID0gRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250
OjpObywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOworICAgICAgICBpZiAoZm9u
dCkKKyAgICAgICAgICAgIGZvbnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiB2
b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZh
NTVmNmI2YmIzMmFmLi42NTNiMzM4YjdjMzQyNTYyNzIyNDk2MTFlMjcwMWFjNWQyNjNlOTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC02NCw3ICs2NCw3IEBA
IHN0cnVjdCBHbHlwaERhdGE7CiAKIGVudW0gRm9udFZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9y
bWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2Vu
SWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRj
aCwgVmFyaWFibGVQaXRjaCB9OwotZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IHVpbnQ4
X3QgeyBObywgWWVzIH07CitlbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1Gb250IDogYm9vbCB7IE5v
LCBZZXMgfTsKIAogI2lmIFVTRShDT1JFX1RFWFQpCiBib29sIGZvbnRIYXNUYWJsZShDVEZvbnRS
ZWYsIHVuc2lnbmVkIHRhYmxlVGFnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IGVkZjJmZTA0NzNhZjNhODYwNjE1MzE3NDM4MzIxYmQ5
Y2E5ZTAyODYuLjhiYjMzZWQ1N2FlODQyY2YxMDk0NmFkMjc0N2I5NTk2Y2IwNGE1ODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFz
IFNoYW5rcyA8d2Via2l0QG5pY2tzaGFua3MuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDcs
ODggKzQ3LDY5IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNw
YWNlIFdURjsKIAotc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
KCkgeyB9Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKLSAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCi0gICAgICAgICwg
bV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6
IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKLSAgICAgICAgLCBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVz
KGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQotICAgIHsgfQotCi0gICAgZXhwbGljaXQgRm9udFBsYXRm
b3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdCkKLSAgICAgICAgOiBt
X2ZvbnREZXNjcmlwdGlvbktleSh0KQotICAgIHsgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCk7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2ZvbnRE
ZXNjcmlwdGlvbktleSAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbktleQotICAgICAgICAgICAg
fHwgbV9mb250RmFjZUZlYXR1cmVzICE9IG90aGVyLm1fZm9udEZhY2VGZWF0dXJlcwotICAgICAg
ICAgICAgfHwgbV9mb250RmFjZUNhcGFiaWxpdGllcyAhPSBvdGhlci5tX2ZvbnRGYWNlQ2FwYWJp
bGl0aWVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9mYW1pbHku
aW1wbCgpID09IG90aGVyLm1fZmFtaWx5LmltcGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAobV9mYW1pbHkuaXNOdWxsKCkgfHwgb3RoZXIubV9mYW1pbHkuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKG1fZmFtaWx5LCBvdGhlci5tX2ZhbWls
eSk7Ci0gICAgfQorRm9udEZhbWlseU5hbWU6OkZvbnRGYW1pbHlOYW1lKCkgPSBkZWZhdWx0Owog
Ci0gICAgRm9udERlc2NyaXB0aW9uS2V5IG1fZm9udERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21T
dHJpbmcgbV9mYW1pbHk7Ci0gICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVy
ZXM7Ci0gICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2Fw
YWJpbGl0aWVzOwotfTsKK2lubGluZSBGb250RmFtaWx5TmFtZTo6Rm9udEZhbWlseU5hbWUoY29u
c3QgQXRvbVN0cmluZyYgbmFtZSkKKyAgICA6IG1fbmFtZSB7IG5hbWUgfQoreworfQogCi1zdHJ1
Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBmb250S2V5KQotICAgIHsKLSAgICAg
ICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGQoRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goZm9udEtleS5tX2ZhbWlseSkpOwotICAgICAgICBo
YXNoZXIuYWRkKGZvbnRLZXkubV9mb250RGVzY3JpcHRpb25LZXkuY29tcHV0ZUhhc2goKSk7Ci0g
ICAgICAgIGhhc2hlci5hZGQoZm9udEtleS5tX2ZvbnRGYWNlRmVhdHVyZXMuaGFzaCgpKTsKLSAg
ICAgICAgaWYgKGF1dG8gd2VpZ2h0ID0gZm9udEtleS5tX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzLndl
aWdodCkKLSAgICAgICAgICAgIGhhc2hlci5hZGQod2VpZ2h0LT51bmlxdWVWYWx1ZSgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpOwotICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGZvbnRLZXkubV9mb250
RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAgICAgICBoYXNoZXIuYWRkKHdpZHRoLT51
bmlxdWVWYWx1ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFzaGVyLmFkZChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICBpZiAoYXV0byBzbG9w
ZSA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53ZWlnaHQpCi0gICAgICAgICAgICBo
YXNoZXIuYWRkKHNsb3BlLT51bmlxdWVWYWx1ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaGFzaGVyLmFkZChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAg
ICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAgICB9CitpbmxpbmUgY29uc3QgQXRvbVN0cmlu
ZyYgRm9udEZhbWlseU5hbWU6OnN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmFtZTsK
K30KIAotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBiKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGEgPT0gYjsKLSAgICB9CitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNv
bnN0IEZvbnRGYW1pbHlOYW1lJiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0
ZXIgdG8gaGFzaCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgbmFtZSBpbnN0ZWFkIG9mIGhhc2hpbmcg
YSBoYXNoLgorICAgIGlmICghbmFtZS5zdHJpbmcoKS5pc051bGwoKSkKKyAgICAgICAgYWRkKGhh
c2hlciwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2gobmFtZS5zdHJpbmco
KSkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHlOYW1lJiBh
LCBjb25zdCBGb250RmFtaWx5TmFtZSYgYikKK3sKKyAgICByZXR1cm4gKGEuc3RyaW5nKCkuaXNO
dWxsKCkgfHwgYi5zdHJpbmcoKS5pc051bGwoKSkgPyBhLnN0cmluZygpID09IGIuc3RyaW5nKCkg
OiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGEuc3RyaW5nKCks
IGIuc3RyaW5nKCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnRGYW1p
bHlOYW1lJiBhLCBjb25zdCBGb250RmFtaWx5TmFtZSYgYikKK3sKKyAgICByZXR1cm4gIShhID09
IGIpOworfQogCitzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKKyAgICBGb250RGVz
Y3JpcHRpb25LZXkgZGVzY3JpcHRpb25LZXk7CisgICAgRm9udEZhbWlseU5hbWUgZmFtaWx5Owor
ICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgZmVhdHVyZXM7CisgICAgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Cit9OworCitzdGF0aWMgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBiKQoreworICAgIHJldHVybiBhLmRlc2NyaXB0aW9uS2V5ID09IGIuZGVz
Y3JpcHRpb25LZXkgJiYgYS5mYW1pbHkgPT0gYi5mYW1pbHkgJiYgYS5mZWF0dXJlcyA9PSBiLmZl
YXR1cmVzICYmIGEuY2FwYWJpbGl0aWVzID09IGIuY2FwYWJpbGl0aWVzOworfQorCitzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNo
KGtleS5kZXNjcmlwdGlvbktleSwga2V5LmZhbWlseSwga2V5LmZlYXR1cmVzLCBrZXkuY2FwYWJp
bGl0aWVzLnRpZWQoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKIHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXk+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IGZhbHNlOwotfTsKLQotc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlIYXNoIHsKLSAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEp
CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSYgc2xvdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGEuaGFzaCgp
OworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkg
eyBGb250RGVzY3JpcHRpb25LZXkgeyBXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSB9LCB7IH0s
IHsgfSwgeyB9IH07CiAgICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgYikKKyAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIHJldHVybiBrZXkuZGVzY3JpcHRp
b25LZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKICAgICB9Cit9OwogCitzdHJ1Y3QgRm9u
dERhdGFDYWNoZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKQEAgLTE0MSw3ICsxMjIsNyBA
QCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8
Rm9udFBsYXRmb3JtRGF0YT4gewogICAgIH0KICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxl
dGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YSYgc2xvdCkKICAgICB7Ci0gICAgICAgIG5ldyAoTm90
TnVsbCwgJnNsb3QpIEZvbnRQbGF0Zm9ybURhdGEoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAg
ICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHZhbHVlKQogICAgIHsKQEAgLTE3NywxNCArMTU4LDE0IEBA
IEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0b24oKQogICAgIHJldHVybiBnbG9iYWxGb250
Q2FjaGU7CiB9CiAKLUZvbnRDYWNoZTo6fkZvbnRDYWNoZSgpID0gZGVmYXVsdDsKLQogRm9udENh
Y2hlOjpGb250Q2FjaGUoKQogICAgIDogbV9wdXJnZVRpbWVyKCp0aGlzLCAmRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKICAgICAsIG1fZm9udERhdGFDYWNoZXMobWFr
ZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlcz4oKSkKIHsKIH0KIAorRm9udENhY2hlOjp+Rm9udENh
Y2hlKCkgPSBkZWZhdWx0OworCiBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0
ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgaWYgKGF1
dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShmYW1pbHlOYW1lKSkKQEAgLTIyNSw4ICsyMDYsOCBAQCBPcHRpb25hbDxBU0NJSUxpdGVyYWw+
IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUp
CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9udENh
Y2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCi0gICAgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmlu
ZyYgcGFzc2VkRmFtaWx5TmFtZSwKKyAgICBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmZWF0
dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMsIGJv
b2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ZvbnRMb2NrKTsKQEAgLTI0NiwyNCArMjI3LDIz
IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgIHBsYXRmb3JtSW5pdCgpOwogICAg
IH0pOwogCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHlOYW1lLCBmb250
RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAg
ICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5IHsgZm9udERlc2NyaXB0aW9uLCB7IGZhbWls
eU5hbWUgfSwgZmVhdHVyZXMgPyAqZmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzIHsgfSwg
Y2FwYWJpbGl0aWVzIH07CiAKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMt
PnBsYXRmb3JtRGF0YS5hZGQoa2V5LCBudWxscHRyKTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yOwogICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgewotICAgICAgICBpdC0+dmFsdWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VD
YXBhYmlsaXRpZXMpOwotCisgICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmZWF0dXJlcywgY2FwYWJpbGl0aWVzKTsK
ICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRlTmFtZSkgewotICAg
ICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBhIGZvbnQuICBXZSBoYXZlIGEgc21h
bGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCi0gICAgICAgICAg
ICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gIFRy
eSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5hbWUuCisgICAgICAgICAg
ICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gV2UgaGF2ZSBhIHNtYWxsIHNldCBv
ZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAorICAgICAgICAgICAgLy8gZS5n
LiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBldGMuIFRyeSBsb29raW5n
IHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5hbWUuCiAgICAgICAgICAgICBpZiAoYXV0
byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgewotICAg
ICAgICAgICAgICAgIGF1dG8qIGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBm
b250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgLy8gTG9va3VwIHRoZSBrZXkgaW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHBy
ZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZlCi0gICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlk
YXRlZCBieSB0aGUgcmVjdXJzaXZlIGNhbGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgp
LgorICAgICAgICAgICAgICAgIGF1dG8qIGFsdGVybmF0ZURhdGEgPSBjYWNoZWRGb250UGxhdGZv
cm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZlYXR1cmVzLCBjYXBhYmls
aXRpZXMsIHRydWUpOworICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIGtleSBpbiB0aGUg
aGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKKyAgICAg
ICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBj
YWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAgICAgICAgaXQgPSBtX2ZvbnREYXRh
Q2FjaGVzLT5wbGF0Zm9ybURhdGEuZmluZChrZXkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChp
dCAhPSBtX2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9ybURhdGEuZW5kKCkpOwotICAgICAgICAgICAg
ICAgIGlmIChmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlID0gbWFrZVVuaXF1ZTxGb250UGxhdGZvcm1EYXRhPigqZm9udFBsYXRm
b3JtRGF0YUZvckFsdGVybmF0ZU5hbWUpOworICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGVE
YXRhKQorICAgICAgICAgICAgICAgICAgICBpdC0+dmFsdWUgPSBtYWtlVW5pcXVlPEZvbnRQbGF0
Zm9ybURhdGE+KCphbHRlcm5hdGVEYXRhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTI4MiwxMiArMjYyLDEyIEBAIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZv
bnREYXRhID0gMjAwOwogY29uc3QgdW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFj
dGl2ZUZvbnREYXRhID0gNTA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVz
c3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9u
dEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVzLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcywgYm9vbCBjaGVj
a2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgaWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkK
ICAgICAgICAgbV9wdXJnZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogCi0gICAgaWYgKGF1dG8q
IHBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBmYW1pbHksIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUpKQorICAgIGlmIChhdXRvKiBwbGF0Zm9ybURhdGEgPSBjYWNoZWRGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LCBmZWF0dXJlcywgY2FwYWJpbGl0
aWVzLCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpKQogICAgICAgICByZXR1cm4gZm9udEZvclBsYXRm
b3JtRGF0YSgqcGxhdGZvcm1EYXRhKTsKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtMzc1LDMw
ICszNTUsMTUgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25l
ZCBwdXJnZUNvdW50KQogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVDYWNoZUtl
eSYgYSwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYikKIHsKLSAgICBpZiAoYS5mb250RGVz
Y3JpcHRpb25LZXkgIT0gYi5mb250RGVzY3JpcHRpb25LZXkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoYS5mb250U2VsZWN0b3JJZCAhPSBiLmZvbnRTZWxlY3RvcklkIHx8IGEuZm9u
dFNlbGVjdG9yVmVyc2lvbiAhPSBiLmZvbnRTZWxlY3RvclZlcnNpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB1bnNpZ25lZCBzaXplID0gYS5mYW1pbGllcy5zaXplKCk7Ci0gICAgaWYg
KHNpemUgIT0gYi5mYW1pbGllcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICghRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChhLmZhbWlsaWVzW2ldLCBiLmZh
bWlsaWVzW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGEuZm9udERlc2NyaXB0aW9uS2V5ID09IGIuZm9udERlc2NyaXB0
aW9uS2V5CisgICAgICAgICYmIGEuZm9udFNlbGVjdG9ySWQgPT0gYi5mb250U2VsZWN0b3JJZAor
ICAgICAgICAmJiBhLmZvbnRTZWxlY3RvclZlcnNpb24gPT0gYi5mb250U2VsZWN0b3JWZXJzaW9u
CisgICAgICAgICYmIGEuZmFtaWxpZXMgPT0gYi5mYW1pbGllczsKIH0KIAogdW5zaWduZWQgRm9u
dENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5
KQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgaGFzaCB0aGUga2V5IGFuZCB0aGUgZmFtaWx5IG5h
bWUgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBtYWtpbmcgYSBoYXNoIG91dCBvZiBvdGhlciBoYXNo
ZXMuCi0gICAgSGFzaGVyIGhhc2hlcjsKLSAgICBhZGQoaGFzaGVyLCBrZXkuZm9udERlc2NyaXB0
aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwotICAgIGFkZChoYXNoZXIsIGtleS5mb250U2VsZWN0b3JJ
ZCk7Ci0gICAgYWRkKGhhc2hlciwga2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGZvciAo
YXV0byYgZmFtaWx5IDoga2V5LmZhbWlsaWVzKQotICAgICAgICBhZGQoaGFzaGVyLCBmYW1pbHku
aXNOdWxsKCkgPyAwIDogV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFt
ZUhhc2goZmFtaWx5KSk7Ci0gICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgcmV0dXJuIGNv
bXB1dGVIYXNoKGtleS5mb250RGVzY3JpcHRpb25LZXksIGtleS5mb250U2VsZWN0b3JJZCwga2V5
LmZvbnRTZWxlY3RvclZlcnNpb24sIGtleS5mYW1pbGllcyk7CiB9CiAKIHZvaWQgRm9udENhY2hl
OjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCkBAIC00NTYsMTEgKzQyMSwxMSBAQCBSZWY8
Rm9udENhc2NhZGVGb250cz4gRm9udENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29u
c3QgRm9udENhc2NhZGVEZXNjcgogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKICAgICBhdXRvJiBuZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBtYWtlVW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVF
bnRyeT4oV1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGUoV1RGTW92ZShmb250
U2VsZWN0b3IpKSk7CisgICAgbmV3RW50cnkgPSBtYWtlVW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVF
bnRyeT4oRm9udENhc2NhZGVDYWNoZUVudHJ5IHsgV1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZv
bnRzOjpjcmVhdGUoV1RGTW92ZShmb250U2VsZWN0b3IpKSB9KTsKICAgICBSZWY8Rm9udENhc2Nh
ZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdldCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHVucmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwgPSA1MDsKLSAgICBzdGF0aWMg
Y29uc3QgaW50IG1heGltdW1FbnRyaWVzID0gNDAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IG1heGltdW1FbnRyaWVzID0gNDAwOwogICAgIHN0YXRpYyB1bnNpZ25lZCBwcnVuZUNv
dW50ZXI7CiAgICAgLy8gUmVmZXJlbmNlZCBGb250Q2FzY2FkZUZvbnRzIHdvdWxkIGV4aXN0IGFu
eXdheSBzbyBwcnVuaW5nIHRoZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KICAgICBpZiAoISgrK3By
dW5lQ291bnRlciAlIHVucmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwpKQpAQCAtNTE1LDE1ICs0ODAs
MTAgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogI2VuZGlmCiAgICAgaW52YWxpZGF0
ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKIAotICAgIG1fZ2VuZXJhdGlvbisrOwotCi0gICAgVmVjdG9y
PFJlZjxGb250U2VsZWN0b3I+PiBjbGllbnRzOwotICAgIGNsaWVudHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX2NsaWVudHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX2NsaWVudHMu
YmVnaW4oKSwgZW5kID0gbV9jbGllbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGNsaWVudHMudW5jaGVja2VkQXBwZW5kKCoqaXQpOworICAgICsrbV9nZW5lcmF0aW9uOwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsaWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGNsaWVudHNbaV0tPmZvbnRDYWNoZUludmFsaWRhdGVkKCk7CisgICAgZm9yIChhdXRvJiBjbGll
bnQgOiBjb3B5VG9WZWN0b3JPZjxSZWZQdHI8Rm9udFNlbGVjdG9yPj4obV9jbGllbnRzKSkKKyAg
ICAgICAgY2xpZW50LT5mb250Q2FjaGVJbnZhbGlkYXRlZCgpOwogCiAgICAgcHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IDc1MDFjMmRmMGRmMjNmMDQ4YzcwMGFhYzAwYmY3YzJhYjI3OTg4MzcuLjRl
YmE2ZmNmMmY3YzgwNDhmYjgzZDY1NTRiOGZkNmFmODdjMWFjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC03LDEzICs3LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCiAgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKICAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC02NCwxNyArNjQsMTggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250OwogY2xhc3MgRm9udENhc2NhZGU7
CiBjbGFzcyBPcGVuVHlwZVZlcnRpY2FsRGF0YTsKLWNsYXNzIEZvbnQ7Ci1lbnVtIGNsYXNzIElz
Rm9yUGxhdGZvcm1Gb250IDogdWludDhfdDsKIAotI2lmIFBMQVRGT1JNKFdJTikKLSNpZiBVU0Uo
SU1MQU5HX0ZPTlRfTElOSzIpCi10eXBlZGVmIElNTGFuZ0ZvbnRMaW5rMiBJTUxhbmdGb250TGlu
a1R5cGU7Ci0jZWxzZQotdHlwZWRlZiBJTUxhbmdGb250TGluayBJTUxhbmdGb250TGlua1R5cGU7
CitlbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1Gb250IDogYm9vbDsKKworI2lmIFBMQVRGT1JNKFdJ
TikgJiYgVVNFKElNTEFOR19GT05UX0xJTksyKQordXNpbmcgSU1MYW5nRm9udExpbmtUeXBlID0g
SU1MYW5nRm9udExpbmsyOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pICYmICFVU0UoSU1M
QU5HX0ZPTlRfTElOSzIpCit1c2luZyBJTUxhbmdGb250TGlua1R5cGUgPSBJTUxhbmdGb250TGlu
azsKICNlbmRpZgogCiAvLyBUaGlzIGtleSBjb250YWlucyB0aGUgRm9udERlc2NyaXB0aW9uIGZp
ZWxkcyBvdGhlciB0aGFuIGZhbWlseSB0aGF0IG1hdHRlciB3aGVuIGZldGNoaW5nIEZvbnREYXRh
cyAocGxhdGZvcm0gZm9udHMpLgpAQCAtMTEyLDE3ICsxMTMsNyBAQCBzdHJ1Y3QgRm9udERlc2Ny
aXB0aW9uS2V5IHsKIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2lzRGVsZXRlZFZhbHVlOyB9CiAKLSAgICBpbmxpbmUgdW5zaWduZWQgY29tcHV0
ZUhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgSGFzaGVyIGhhc2hlcjsKLSAgICAgICAgYWRk
KGhhc2hlciwgbV9zaXplKTsKLSAgICAgICAgYWRkKGhhc2hlciwgbV9mb250U2VsZWN0aW9uUmVx
dWVzdC50aWVkKCkpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX2xvY2FsZS5leGlzdGluZ0hhc2go
KSk7Ci0gICAgICAgIGFkZChoYXNoZXIsIG1fZmxhZ3MpOwotICAgICAgICBhZGQoaGFzaGVyLCBt
X2ZlYXR1cmVTZXR0aW5ncy5oYXNoKCkpOwotICAgICAgICBhZGQoaGFzaGVyLCBtX3ZhcmlhdGlv
blNldHRpbmdzLmhhc2goKSk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0K
KyAgICBmcmllbmQgdm9pZCBhZGQoSGFzaGVyJiwgY29uc3QgRm9udERlc2NyaXB0aW9uS2V5Jik7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+IG1ha2VGbGFn
c0tleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtMTY1LDIzICsxNTYs
MzYgQEAgcHJpdmF0ZToKICAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgbV92YXJpYXRpb25TZXR0
aW5nczsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgRm9udERl
c2NyaXB0aW9uS2V5JiBrZXkpCit7CisgICAgYWRkKGhhc2hlciwga2V5Lm1fc2l6ZSwga2V5Lm1f
Zm9udFNlbGVjdGlvblJlcXVlc3QsIGtleS5tX2ZsYWdzLCBrZXkubV9sb2NhbGUsIGtleS5tX2Zl
YXR1cmVTZXR0aW5ncywga2V5Lm1fdmFyaWF0aW9uU2V0dGluZ3MpOworfQorCiBzdHJ1Y3QgRm9u
dERlc2NyaXB0aW9uS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9u
dERlc2NyaXB0aW9uS2V5JiBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4ga2V5LmNvbXB1dGVI
YXNoKCk7Ci0gICAgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnREZXNjcmlw
dGlvbktleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRm9udERlc2NyaXB0aW9uS2V5JiBhLCBjb25zdCBGb250RGVzY3JpcHRp
b25LZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OwogCi0gICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRm9udERlc2NyaXB0aW9uS2V5JiBhLCBjb25zdCBGb250RGVzY3JpcHRp
b25LZXkmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KKy8vIFRoaXMg
Y2xhc3MgaG9sZHMgdGhlIG5hbWUgb2YgYSBmb250IGZhbWlseSwgYW5kIGRlZmluZXMgaGFzaGlu
ZyBhbmQgPT0gb2YgdGhpcyBuYW1lIHRvCisvLyB1c2UgdGhlIHJ1bGVzIGZvciBmb250IGZhbWls
eSBuYW1lcyBpbnN0ZWFkIG9mIHVzaW5nIHN0cmFpZ2h0IHN0cmluZyBjb21wYXJpc29uLgorY2xh
c3MgRm9udEZhbWlseU5hbWUgeworcHVibGljOgorICAgIEZvbnRGYW1pbHlOYW1lKCk7CisgICAg
Rm9udEZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpOworICAgIGNvbnN0IEF0b21TdHJpbmcm
IHN0cmluZygpIGNvbnN0OworICAgIGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBGb250
RmFtaWx5TmFtZSYpOwogCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworcHJpdmF0ZToKKyAgICBBdG9tU3RyaW5nIG1fbmFtZTsKIH07
CiAKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RmFtaWx5TmFtZSYsIGNvbnN0IEZvbnRGYW1p
bHlOYW1lJik7Citib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udEZhbWlseU5hbWUmLCBjb25zdCBG
b250RmFtaWx5TmFtZSYpOworCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtleSB7CiAgICAgRm9u
dERlc2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlvbktleTsgLy8gU2hhcmVkIHdpdGggdGhlIGxv
d2VyIGxldmVsIEZvbnRDYWNoZSAoY2FjaGluZyBGb250IG9iamVjdHMpCi0gICAgVmVjdG9yPEF0
b21TdHJpbmcsIDM+IGZhbWlsaWVzOworICAgIFZlY3RvcjxGb250RmFtaWx5TmFtZSwgMz4gZmFt
aWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNl
bGVjdG9yVmVyc2lvbjsKIH07CkBAIC0xODksMjYgKzE5MywyMiBAQCBzdHJ1Y3QgRm9udENhc2Nh
ZGVDYWNoZUtleSB7CiBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYs
IGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmKTsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVF
bnRyeSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRm9udENh
c2NhZGVDYWNoZUVudHJ5KEZvbnRDYXNjYWRlQ2FjaGVLZXkmJiBrZXksIFJlZjxGb250Q2FzY2Fk
ZUZvbnRzPiYmIGZvbnRzKQotICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkpCi0gICAgICAgICwg
Zm9udHMoV1RGTW92ZShmb250cykpCi0gICAgeyB9CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworCiAgICAgRm9udENhc2NhZGVDYWNoZUtleSBrZXk7CiAgICAgUmVmPEZvbnRD
YXNjYWRlRm9udHM+IGZvbnRzOwogfTsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNo
IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZUNh
Y2hlS2V5Jik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2ViQ29yZTo6Rm9udENhc2Nh
ZGVDYWNoZUtleSYgYSwgY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5Jik7CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udENhc2Nh
ZGVDYWNoZUtleSYgYSwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7CiB9OwogCi1zdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFp
dHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXk+
IHsKLSAgICBzdGF0aWMgV2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleSBlbXB0eVZhbHVlKCkg
eyByZXR1cm4geyB9OyB9Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdl
YkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXkmIHNsb3QpIHsgc2xvdC5mb250U2VsZWN0b3JJZCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsgfQotICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXkmIHNsb3Qp
IHsgcmV0dXJuIHNsb3QuZm9udFNlbGVjdG9ySWQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOyB9CitzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHMgOiBI
YXNoVHJhaXRzPEZvbnRDYXNjYWRlQ2FjaGVLZXk+IHsKKyAgICBzdGF0aWMgRm9udENhc2NhZGVD
YWNoZUtleSBlbXB0eVZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29u
c3RydWN0RGVsZXRlZFZhbHVlKEZvbnRDYXNjYWRlQ2FjaGVLZXkmIHNsb3QpIHsgbmV3IChOb3RO
dWxsLCAmc2xvdCkgRm9udENhc2NhZGVDYWNoZUtleSB7IEZvbnREZXNjcmlwdGlvbktleSB7IFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0sIHsgfSwgeyB9LCB7IH0gfTsgfQorICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkgeyBy
ZXR1cm4ga2V5LmZvbnREZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9
CiB9OwogCiB1c2luZyBGb250Q2FzY2FkZUNhY2hlID0gSGFzaE1hcDxGb250Q2FzY2FkZUNhY2hl
S2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udENhc2NhZGVDYWNoZUVudHJ5PiwgRm9udENhc2NhZGVD
YWNoZUtleUhhc2gsIEZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoVHJhaXRzPjsKQEAgLTIyNSw3ICsy
MjUsNyBAQCBwdWJsaWM6CiAgICAgfkZvbnRDYWNoZSgpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9k
cyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgotICAgIGVudW0gY2xhc3MgUHJlZmVy
Q29sb3JlZEZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9OworICAgIGVudW0gY2xhc3MgUHJlZmVy
Q29sb3JlZEZvbnQgOiBib29sIHsgTm8sIFllcyB9OwogICAgIFJlZlB0cjxGb250PiBzeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCog
b3JpZ2luYWxGb250RGF0YSwgSXNGb3JQbGF0Zm9ybUZvbnQsIFByZWZlckNvbG9yZWRGb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBWZWN0b3I8U3Ry
aW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwpAQCAt
MjM1LDYgKzIzNSw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRGb250QWxsb3dsaXN0KGNvbnN0IFZlY3RvcjxTdHJpbmc+
Jik7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBJTUxhbmdGb250TGlua1R5cGUq
IGdldEZvbnRMaW5rSW50ZXJmYWNlKCk7CiAgICAgc3RhdGljIHZvaWQgY29tSW5pdGlhbGl6ZSgp
OwpAQCAtMzAxLDExICszMDIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBydW5lU3lzdGVtRmFs
bGJhY2tGb250cygpOwogICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2Fj
aGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0
b3I+JiYpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJl
IHJlbW92ZWQuCi0gICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGNh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqID0gbnVsbHB0ciwgRm9udFNlbGVj
dGlvblNwZWNpZmllZENhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUgPSBmYWxzZSk7CiAKLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBl
YWNoIHBsYXRmb3JtLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxh
dGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9u
dEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcyk7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBi
eSBlYWNoIHBsYXRmb3JtICh1bmNsZWFyIHdoaWNoIGZ1bmN0aW9ucyB0aGlzIGNvbW1lbnQgYXBw
bGllcyB0bykuCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9y
bURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyk7CiAgICAgCiAgICAgc3RhdGljIE9wdGlvbmFs
PEFTQ0lJTGl0ZXJhbD4gYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBz
dGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgU3RyaW5nJik7CkBAIC0zMzIsNiArMzMyLDcgQEAgcHJpdmF0ZToKIAogICAgIGZyaWVu
ZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKKwogICAgIGZyaWVuZCBjbGFz
cyBGb250OwogfTsKIApAQCAtMzQ4LDcgKzM0OSw2IEBAIGlubGluZSB2b2lkIEZvbnRDYWNoZTo6
cGxhdGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKQogCiAjZW5kaWYKIAotCiBpbmxpbmUgYm9v
bCBGb250Q2FjaGU6OlByZXdhcm1JbmZvcm1hdGlvbjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHNlZW5GYW1pbGllcy5pc0VtcHR5KCkgJiYgZm9udE5hbWVzUmVxdWlyaW5nU3lzdGVt
RmFsbGJhY2suaXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5oCmluZGV4IGFkYWZmM2MxNDZkYzcyMzVmZjA1
OTZkNGZjNDc2Nzk3NWIxNTgyMTMuLjYwNzcwY2Q2NGMzOTE4YjAwMDUxZTc0NTdiYmVmNDM3NGYy
YWVjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRH
ZW5lcmljRmFtaWxpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250R2VuZXJpY0ZhbWlsaWVzLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBVU2NyaXB0Q29kZSB1c2VzIC0xIGFuZCAwIGZvciBVU2NyaXB0SW52YWxpZENvZGUg
YW5kIFVTY3JpcHRDb21tb24uCiAvLyBXZSBuZWVkIHRvIHVzZSAtMiBhbmQgLTMgZm9yIGVtcHR5
IHZhbHVlIGFuZCBkZWxldGVkIHZhbHVlLgotc3RydWN0IFVTY3JpcHRDb2RlSGFzaFRyYWl0cyA6
IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8aW50PiB7CitzdHJ1Y3QgVVNjcmlwdENvZGVIYXNoVHJh
aXRzIDogSGFzaFRyYWl0czxpbnQ+IHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gZmFsc2U7CiAgICAgc3RhdGljIGludCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gLTI7
IH0KICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoaW50JiBzbG90KSB7IHNs
b3QgPSAtMzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oCmluZGV4IGU2MjMzNTA0ZDkzMTAxMzQyMTIyYjdi
YzJjNzAzZmU1MmNmNzRhYTMuLjY2ZjhmZGMxNzViNmEzMTA5NzE4NmYyZDRiYzc3MDFmNzViNDRl
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxl
Y3Rpb25BbGdvcml0aG0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250U2VsZWN0aW9uQWxnb3JpdGhtLmgKQEAgLTI5MSw2ICsyOTEsMTEgQEAgY29uc3RleHByIEZv
bnRTZWxlY3Rpb25WYWx1ZSB1bHRyYUV4cGFuZGVkU3RyZXRjaFZhbHVlKCkKICAgICByZXR1cm4g
Rm9udFNlbGVjdGlvblZhbHVlIHsgMjAwIH07CiB9CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXIm
IGhhc2hlciwgY29uc3QgRm9udFNlbGVjdGlvblZhbHVlJiB2YWx1ZSkKK3sKKyAgICBhZGQoaGFz
aGVyLCB2YWx1ZS5yYXdWYWx1ZSgpKTsKK30KKwogLy8gW0luY2x1c2l2ZSwgSW5jbHVzaXZlXQog
c3RydWN0IEZvbnRTZWxlY3Rpb25SYW5nZSB7CiAgICAgdXNpbmcgVmFsdWUgPSBGb250U2VsZWN0
aW9uVmFsdWU7CkBAIC0zMzQsMTQgKzMzOSw2IEBAIHN0cnVjdCBGb250U2VsZWN0aW9uUmFuZ2Ug
ewogICAgICAgICByZXR1cm4gdGFyZ2V0ID49IG1pbmltdW0gJiYgdGFyZ2V0IDw9IG1heGltdW07
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgbmFtZSBpcyBub3Qgc28gZ3JlYXQuIE1vdmUg
dGhpcyBpbnRvIHRoZSBhZGQgZnVuY3Rpb24gYmVsb3cKLSAgICAvLyBvbmNlIHdlIG1vdmUgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCBmcm9tIEludGVnZXJIYXNoZXIgdG8gSGFzaGVyLAot
ICAgIC8vIGFuZCB0aGVuIGl0IGRvZXNuJ3QgbmVlZCB0byBoYXZlIGEgbmFtZS4KLSAgICBjb25z
dGV4cHIgdWludDMyX3QgdW5pcXVlVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1pbmltdW0ucmF3VmFsdWUoKSA8PCAxNiB8IG1heGltdW0ucmF3VmFsdWUoKTsKLSAgICB9Ci0K
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKIApAQCAtMzc3LDcgKzM3NCw3IEBAIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25SYW5nZT4g
Rm9udFNlbGVjdGlvblJhbmdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIAogaW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250U2VsZWN0aW9uUmFuZ2UmIHJhbmdlKQog
ewotICAgIGFkZChoYXNoZXIsIHJhbmdlLnVuaXF1ZVZhbHVlKCkpOworICAgIGFkZChoYXNoZXIs
IHJhbmdlLm1pbmltdW0sIHJhbmdlLm1heGltdW0pOwogfQogCiBzdHJ1Y3QgRm9udFNlbGVjdGlv
blJlcXVlc3QgewpAQCAtMzg1LDYgKzM4Miw3IEBAIHN0cnVjdCBGb250U2VsZWN0aW9uUmVxdWVz
dCB7CiAKICAgICBWYWx1ZSB3ZWlnaHQ7CiAgICAgVmFsdWUgd2lkdGg7CisKICAgICAvLyBGSVhN
RTogV2UgYXJlIHVzaW5nIGFuIG9wdGlvbmFsIGhlcmUgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlz
aCBiZXR3ZWVuIGFuIGV4cGxpY2l0CiAgICAgLy8gb3IgaW1wbGljaXQgc2xvcGUgKGZvciAiaXRh
bGljIiBhbmQgIm9ibGlxdWUiKSBhbmQgdGhlICJub3JtYWwiIHZhbHVlIHdoaWNoIGhhcyBubwog
ICAgIC8vIHNsb3BlLiBUaGUgIml0YWxpYyIgYW5kICJvYmxpcXVlIiB2YWx1ZXMgY2FuIGJlIGRp
c3Rpbmd1aXNoZWQgYnkgbG9va2luZyBhdCB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250VGFnZ2VkU2V0dGluZ3MuY3BwCmluZGV4IDhhOGM3OTdm
NjQ3MTIzOWYxZTdjZjhhNWQyN2UzMDZkNTg5MzNlYjAuLmJkZWViZTgwMDE0MTQ0OGI1OGM3NDJm
Y2ZiYjRhN2ViOTZkNDU2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmNwcApAQCAtMjcsNDIgKzI3LDExIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCiAKLSNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdGVtcGxhdGUgPD4KLXVuc2lnbmVkIEZvbnRGZWF0dXJlU2V0dGluZ3M6Omhhc2goKSBj
b25zdAotewotICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOwotICAgIGZvciAoYXV0byYgZmVhdHVy
ZSA6IG1fbGlzdCkgewotICAgICAgICBoYXNoZXIuYWRkKEZvdXJDaGFyYWN0ZXJUYWdIYXNoOjpo
YXNoKGZlYXR1cmUudGFnKCkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChmZWF0dXJlLnZhbHVlKCkp
OwotICAgIH0KLSAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLX0KLQotdGVtcGxhdGUgPD4KLXVu
c2lnbmVkIEZvbnRWYXJpYXRpb25TZXR0aW5nczo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoZmxvYXQpID09IHNpemVvZihpbnQpLCAiSW50ZWdlckhhc2hlciBuZWVk
cyB0byBhY2NlcHQgZmxvYXRzIHRvbyIpOwotICAgIHVuaW9uIHsKLSAgICAgICAgZmxvYXQgZjsK
LSAgICAgICAgaW50IGk7Ci0gICAgfSBmbG9hdFRvSW50OwotCi0gICAgSW50ZWdlckhhc2hlciBo
YXNoZXI7Ci0gICAgZm9yIChhdXRvJiB2YXJpYXRpb24gOiBtX2xpc3QpIHsKLSAgICAgICAgaGFz
aGVyLmFkZChGb3VyQ2hhcmFjdGVyVGFnSGFzaDo6aGFzaCh2YXJpYXRpb24udGFnKCkpKTsKLSAg
ICAgICAgZmxvYXRUb0ludC5mID0gdmFyaWF0aW9uLnZhbHVlKCk7Ci0gICAgICAgIGhhc2hlci5h
ZGQoZmxvYXRUb0ludC5pKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci19Ci0K
LVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZvbnRWYXJpYXRp
b25TZXR0aW5ncyYgaXRlbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZvbnRUYWdnZWRTZXR0aW5nczxmbG9hdD4mIGl0ZW0pCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGl0ZW0uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgdmFyaWF0
aW9uID0gaXRlbS5hdChpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRUYWdnZWRTZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFRhZ2dlZFNldHRpbmdzLmgKaW5kZXggYjkyMDM0ZWEyMTY4OWZiYTRlZjU1M2Nl
MmZhOGY1YmM0YWMxZTMxNy4uMTI4ZGFmN2U2M2JjNzNkYTlmZWQxY2MzYTllNDJhY2Y1Njg5Mzk4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRhZ2dl
ZFNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRh
Z2dlZFNldHRpbmdzLmgKQEAgLTM2LDIwICszNiwyNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgc3RkOjphcnJheTxjaGFyLCA0PiBGb250VGFn
OwordXNpbmcgRm9udFRhZyA9IHN0ZDo6YXJyYXk8Y2hhciwgND47CiAKLWlubGluZSBGb250VGFn
IGZvbnRGZWF0dXJlVGFnKGNvbnN0IGNoYXIgYXJyWzRdKSB7IHJldHVybiB7eyBhcnJbMF0sIGFy
clsxXSwgYXJyWzJdLCBhcnJbM10gfX07IH0KK2lubGluZSBGb250VGFnIGZvbnRGZWF0dXJlVGFn
KGNvbnN0IGNoYXIgY2hhcmFjdGVyc1s0XSkgeyByZXR1cm4ge3sgY2hhcmFjdGVyc1swXSwgY2hh
cmFjdGVyc1sxXSwgY2hhcmFjdGVyc1syXSwgY2hhcmFjdGVyc1szXSB9fTsgfQorCitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHN0ZDo6YXJyYXk8Y2hhciwgND4gYXJyYXkpCit7Cisg
ICAgdWludDMyX3QgaW50ZWdlciA9IChzdGF0aWNfY2FzdDx1aW50OF90PihhcnJheVswXSkgPDwg
MjQpIHwgKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFycmF5WzFdKSA8PCAxNikgfCAoc3RhdGljX2Nh
c3Q8dWludDhfdD4oYXJyYXlbMl0pIDw8IDgpIHwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJyYXlb
M10pOworICAgIGFkZChoYXNoZXIsIGludGVnZXIpOworfQogCiBzdHJ1Y3QgRm91ckNoYXJhY3Rl
clRhZ0hhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRUYWcmIGNoYXJh
Y3RlcnMpIHsgcmV0dXJuIChjaGFyYWN0ZXJzWzBdIDw8IDI0KSB8IChjaGFyYWN0ZXJzWzFdIDw8
IDE2KSB8IChjaGFyYWN0ZXJzWzJdIDw8IDgpIHwgY2hhcmFjdGVyc1szXTsgfQotICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEZvbnRUYWcmIGEsIGNvbnN0IEZvbnRUYWcmIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZvbnRUYWcgY2hhcmFjdGVycykg
eyByZXR1cm4gY29tcHV0ZUhhc2goY2hhcmFjdGVycyk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChGb250VGFnIGEsIEZvbnRUYWcgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotc3Ry
dWN0IEZvdXJDaGFyYWN0ZXJUYWdIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxG
b250VGFnPiB7CitzdHJ1Y3QgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFpdHMgOiBIYXNoVHJhaXRz
PEZvbnRUYWc+IHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1
ZTsKICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFRhZyYgc2xvdCkg
eyBuZXcgKE5vdE51bGwsIHN0ZDo6YWRkcmVzc29mKHNsb3QpKSBGb250VGFnKHt7IGZmLCBmZiwg
ZmYsIGZmIH19KTsgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRU
YWcmIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBGb250VGFnKHt7IGZmLCBmZiwgZmYsIGZmIH19
KTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEZvbnRUYWcgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlID09IEZvbnRUYWcoe3sgZmYsIGZmLCBmZiwgZmYgfX0pOyB9CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGZmID0gc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGRik7
CkBAIC01OSwxNCArNjUsMTMgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBGb250VGFn
Z2VkU2V0dGluZyB7CiBwdWJsaWM6CiAgICAgRm9udFRhZ2dlZFNldHRpbmcoKSA9IGRlbGV0ZTsK
LSAgICBGb250VGFnZ2VkU2V0dGluZyhjb25zdCBGb250VGFnJiwgVCB2YWx1ZSk7Ci0gICAgRm9u
dFRhZ2dlZFNldHRpbmcoRm9udFRhZyYmLCBUIHZhbHVlKTsKKyAgICBGb250VGFnZ2VkU2V0dGlu
ZyhGb250VGFnLCBUIHZhbHVlKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250VGFn
Z2VkU2V0dGluZzxUPiYgb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250VGFnZ2VkU2V0dGluZzxUPiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOyB9CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRm9udFRhZ2dlZFNldHRpbmc8VD4mIG90
aGVyKSBjb25zdDsKIAotICAgIGNvbnN0IEZvbnRUYWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1f
dGFnOyB9CisgICAgRm9udFRhZyB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZzsgfQogICAgIFQg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgYm9vbCBlbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gdmFsdWUoKTsgfQogCkBAIC03OSwxOSArODQsMTIgQEAgcHJpdmF0ZToKIH07
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotRm9udFRhZ2dlZFNldHRpbmc8VD46OkZvbnRUYWdn
ZWRTZXR0aW5nKGNvbnN0IEZvbnRUYWcmIHRhZywgVCB2YWx1ZSkKK0ZvbnRUYWdnZWRTZXR0aW5n
PFQ+OjpGb250VGFnZ2VkU2V0dGluZyhGb250VGFnIHRhZywgVCB2YWx1ZSkKICAgICA6IG1fdGFn
KHRhZykKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotRm9udFRhZ2dlZFNldHRpbmc8VD46OkZvbnRUYWdnZWRTZXR0aW5nKEZvbnRUYWcmJiB0YWcs
IFQgdmFsdWUpCi0gICAgOiBtX3RhZyhXVEZNb3ZlKHRhZykpCi0gICAgLCBtX3ZhbHVlKHZhbHVl
KQotewotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGJvb2wgRm9udFRhZ2dlZFNldHRpbmc8
VD46Om9wZXJhdG9yPT0oY29uc3QgRm9udFRhZ2dlZFNldHRpbmc8VD4mIG90aGVyKSBjb25zdAog
ewpAQCAtMTUyLDYgKzE1MCwxMSBAQCBPcHRpb25hbDxGb250VGFnZ2VkU2V0dGluZzxUPj4gRm9u
dFRhZ2dlZFNldHRpbmc8VD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIH19LCAqdmFs
dWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwg
Y29uc3QgRm9udFRhZ2dlZFNldHRpbmc8VD4mIHNldHRpbmcpCit7CisgICAgYWRkKGhhc2hlciwg
c2V0dGluZy50YWcoKSwgc2V0dGluZy52YWx1ZSgpKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiBjbGFzcyBGb250VGFnZ2VkU2V0dGluZ3MgewogcHVibGljOgpAQCAtMjExLDE0ICsyMTQs
MTAgQEAgT3B0aW9uYWw8Rm9udFRhZ2dlZFNldHRpbmdzPFQ+PiBGb250VGFnZ2VkU2V0dGluZ3M8
VD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXR5
cGVkZWYgRm9udFRhZ2dlZFNldHRpbmc8aW50PiBGb250RmVhdHVyZTsKLXR5cGVkZWYgRm9udFRh
Z2dlZFNldHRpbmdzPGludD4gRm9udEZlYXR1cmVTZXR0aW5nczsKLQotdGVtcGxhdGUgPD4gdW5z
aWduZWQgRm9udEZlYXR1cmVTZXR0aW5nczo6aGFzaCgpIGNvbnN0OwotCi10eXBlZGVmIEZvbnRU
YWdnZWRTZXR0aW5nczxmbG9hdD4gRm9udFZhcmlhdGlvblNldHRpbmdzOwotV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0
aW5ncyYpOwordXNpbmcgRm9udEZlYXR1cmUgPSBGb250VGFnZ2VkU2V0dGluZzxpbnQ+OwordXNp
bmcgRm9udEZlYXR1cmVTZXR0aW5ncyA9IEZvbnRUYWdnZWRTZXR0aW5nczxpbnQ+OwordXNpbmcg
Rm9udFZhcmlhdGlvblNldHRpbmdzID0gRm9udFRhZ2dlZFNldHRpbmdzPGZsb2F0PjsKIAotdGVt
cGxhdGUgPD4gdW5zaWduZWQgRm9udFZhcmlhdGlvblNldHRpbmdzOjpoYXNoKCkgY29uc3Q7CitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGb250VGFnZ2VkU2V0dGlu
Z3M8ZmxvYXQ+Jik7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmNwcAppbmRleCBiZjlkMGY4NTkyODE0NzY2MjM4NDU0YTdmYzMzMmU4NTRlM2MxNzdl
Li44ZWIzMjZjNDk2NGVjYTllMGYzZmJjN2UwY2Y4MmI4ZGEzNWYzODliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCkBAIC0zMiw4ICszMiw2IEBA
CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+
CiAKLXVzaW5nIFdURjo6cGFpckludEhhc2g7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVm
PEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKERhdGEmJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CmluZGV4IDUzZWI1ZWNhNjc0NmExOWE4MTZiZGNjOGExMTZjOWRhOTA4ZDVjYWIuLjcwZjZkMDhm
NTNkN2JjODU3MDZkYWM0NWEwN2FiMWYwN2RjMjEzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAg
LTQ4LDEyICs0OCw2IEBACiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAotLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRp
b24gc2hvdWxkIGJlIGluIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPi4KLXVzaW5nIFdURjo6cGFpcklu
dEhhc2g7Ci0KLS8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIHVzaW5nIGRlY2xhcmF0aW9uIHNob3Vs
ZCBiZSBpbiA8d3RmL0hhc2hUcmFpdHMuaD4uCi11c2luZyBXVEY6OkdlbmVyaWNIYXNoVHJhaXRz
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIHNldENHRmlsbENvbG9yKENH
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRp
bWVyLmgKaW5kZXggNWJmMDVkNGUxNDBlZTYyYjMzMjFlNGRiZWY1MWRhYzFkMWIzNGQ5OS4uOWZh
Y2VjNGYwMTQyM2Y0MDU0MzY1YjRiOWI1YjI3ZTE3MTIxNjZkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRo
VGltZXIuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1vbm90b25pY1RpbWUg
bGFzdEFjY2Vzc1RpbWU7CiAgICAgfTsKIAotICAgIHN0cnVjdCBTdWJpbWFnZUNhY2hlRW50cnlU
cmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPFN1YmltYWdlQ2FjaGVFbnRyeT4geworICAg
IHN0cnVjdCBTdWJpbWFnZUNhY2hlRW50cnlUcmFpdHMgOiBIYXNoVHJhaXRzPFN1YmltYWdlQ2Fj
aGVFbnRyeT4gewogICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8UmV0YWluUHRyPENHSW1hZ2VS
ZWY+PiBJbWFnZVRyYWl0czsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3Jl
VGV4dC5jcHAKaW5kZXggMDcxNzIyMWIxMzA2OTJiZjFmOGFlNGZmNDA3NTg2MDU2Y2YwMWZiYi4u
MmJlMzliNzk0MzUxNTFmNGZhODZmYzMxNDkxNDE4YTEyZDI5NDlkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRp
b25Db3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKQEAgLTM3LDYgKzM3LDkgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5
IHsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3I7Cisg
ICAgRm9udERlc2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlvbktleTsKKwogICAgIEZvbnRGYW1p
bHlTcGVjaWZpY2F0aW9uS2V5KCkgPSBkZWZhdWx0OwogCiAgICAgRm9udEZhbWlseVNwZWNpZmlj
YXRpb25LZXkoQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvciwgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC01MCw3ICs1Myw3IEBAIHN0cnVjdCBGb250
RmFtaWx5U3BlY2lmaWNhdGlvbktleSB7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIFdURjo6c2FmZUNGRXF1YWwoZm9udERlc2NyaXB0b3IuZ2V0KCksIG90aGVyLmZvbnREZXNj
cmlwdG9yLmdldCgpKSAmJiBmb250RGVzY3JpcHRpb25LZXkgPT0gb3RoZXIuZm9udERlc2NyaXB0
aW9uS2V5OworICAgICAgICByZXR1cm4gc2FmZUNGRXF1YWwoZm9udERlc2NyaXB0b3IuZ2V0KCks
IG90aGVyLmZvbnREZXNjcmlwdG9yLmdldCgpKSAmJiBmb250RGVzY3JpcHRpb25LZXkgPT0gb3Ro
ZXIuZm9udERlc2NyaXB0aW9uS2V5OwogICAgIH0KIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgb3RoZXIpIGNvbnN0CkBAIC01OSwyMyArNjIs
MTUgQEAgc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKICAgICB9CiAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0
aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLQotICAgIHVuc2lnbmVkIGNvbXB1
dGVIYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdU
Rjo6c2FmZUNGSGFzaChmb250RGVzY3JpcHRvci5nZXQoKSksIGZvbnREZXNjcmlwdGlvbktleS5j
b21wdXRlSGFzaCgpKTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJl
Zj4gZm9udERlc2NyaXB0b3I7Ci0gICAgRm9udERlc2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlv
bktleTsKIH07CiAKIHN0cnVjdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleUhhc2ggewotICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBr
ZXkpIHsgcmV0dXJuIGtleS5jb21wdXRlSGFzaCgpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkmIGtleSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goc2FmZUNGSGFzaChrZXkuZm9udERlc2NyaXB0b3IuZ2V0KCkpLCBrZXkuZm9udERlc2Ny
aXB0aW9uS2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uS2V5JiBhLCBjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdXNpbmcgRm9udE1hcCA9IEhhc2hNYXA8Rm9udEZh
bWlseVNwZWNpZmljYXRpb25LZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwg
Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXlIYXNoLCBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0
czxGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleT4+OwordXNpbmcgRm9udE1hcCA9IEhhc2hNYXA8
Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1E
YXRhPiwgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXlIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXk+PjsKIAogc3RhdGljIEZvbnRNYXAmIGZvbnRN
YXAoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmgKaW5kZXggMGIyNzlh
N2RlZjVjZDQ4ODJhODI1YzM2ODNiZTEzNTJiMjJlNjA3YS4uOWFkMWUwY2M0NTBmMGVhYTgyOTgx
NzM1NTk3ODAwYWMwODA0OTZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4
dC5oCkBAIC03MiwyNyArNzIsMTIgQEAgcHVibGljOgogCiAgICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAg
ICAgICAgICAgIEFTU0VSVCghZm9udE5hbWUuaXNOdWxsKCkpOwotICAgICAgICAgICAgaGFzaGVy
LmFkZChsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwotICAgICAgICAgICAgaGFzaGVyLmFkZChsb2Nh
bGUuaXNOdWxsKCkgPyAwIDogbG9jYWxlLmV4aXN0aW5nSGFzaCgpKTsKLSAgICAgICAgICAgIGhh
c2hlci5hZGQod2VpZ2h0KTsKLSAgICAgICAgICAgIGhhc2hlci5hZGQod2lkdGgpOwotICAgICAg
ICAgICAgaGFzaGVyLmFkZChzaXplKTsKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGFsbG93VXNlckluc3RhbGxlZEZvbnRzKSk7Ci0gICAgICAgICAgICBoYXNo
ZXIuYWRkKGl0YWxpYyk7Ci0gICAgICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICAg
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaChmb250TmFtZSwgbG9jYWxlLCB3ZWlnaHQsIHdpZHRo
LCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cywgaXRhbGljKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0cnVjdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoIDogV1RGOjpQYWlySGFzaDxB
dG9tU3RyaW5nLCBmbG9hdD4gewotICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYg
YSwgY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBiKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgICAgICAgICB9CisgICAgICAgIHN0cnVjdCBI
YXNoIHsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENhc2NhZGVMaXN0
UGFyYW1ldGVycyYgcGFyYW1ldGVycykgeyByZXR1cm4gcGFyYW1ldGVycy5oYXNoKCk7IH0KKyAg
ICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYg
YSwgY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gdHJ1ZTsKICAgICAgICAgfTsKIApAQCAtMTMxLDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IGNvbXB1dGVDYXNj
YWRlTGlzdChDVEZvbnRSZWYsIENGU3RyaW5nUmVmIGxvY2FsZSk7CiAgICAgc3RhdGljIENhc2Nh
ZGVMaXN0UGFyYW1ldGVycyBzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBTeXN0ZW1Gb250S2luZCwgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgSGFzaE1hcDxDYXNjYWRlTGlzdFBhcmFtZXRlcnMs
IFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+LCBDYXNjYWRlTGlzdFBhcmFt
ZXRlcnM6OkNhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gsIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxD
YXNjYWRlTGlzdFBhcmFtZXRlcnM+PiBtX3N5c3RlbUZvbnRDYWNoZTsKKyAgICBIYXNoTWFwPENh
c2NhZGVMaXN0UGFyYW1ldGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
Pj4sIENhc2NhZGVMaXN0UGFyYW1ldGVyczo6SGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENh
c2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOwogCiAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gbV9zZXJpZkZhbWlsaWVzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fc2Fuc1NlcmlmZXJpZkZhbWlsaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CmluZGV4IGExYjk1MTQxZmUxMWI5YTA5MDI4NWRiZGNiYTMxNjhlNmRiOTJjYTIuLmZkNzFmYTA3
OTJkYjI2NGI4NjIwNGI5ZGZkZmUyYTdlZDYwOWY0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVl
VHlwZS5jcHAKQEAgLTE5NSw2ICsxOTUsOSBAQCBwcml2YXRlOgogfTsKIAogc3RydWN0IEZhbGxi
YWNrRm9udERlc2NyaXB0aW9uS2V5IHsKKyAgICBGb250RGVzY3JpcHRpb25LZXkgZGVzY3JpcHRp
b25LZXk7CisgICAgYm9vbCBjb2xvcmVkRm9udCB7IGZhbHNlIH07CisKICAgICBGYWxsYmFja0Zv
bnREZXNjcmlwdGlvbktleSgpID0gZGVmYXVsdDsKIAogICAgIEZhbGxiYWNrRm9udERlc2NyaXB0
aW9uS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRDYWNoZTo6UHJl
ZmVyQ29sb3JlZEZvbnQgcHJlZmVyQ29sb3JlZEZvbnQpCkBAIC0yMjAsMTcgKzIyMywxMCBAQCBz
dHJ1Y3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7IH0KIAotICAgIHVuc2lnbmVkIGNvbXB1dGVIYXNoKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKGRlc2NyaXB0aW9uS2V5LmNvbXB1
dGVIYXNoKCksIFdURjo6RGVmYXVsdEhhc2g8Ym9vbD46Omhhc2goY29sb3JlZEZvbnQpKTsKLSAg
ICB9Ci0KLSAgICBGb250RGVzY3JpcHRpb25LZXkgZGVzY3JpcHRpb25LZXk7Ci0gICAgYm9vbCBj
b2xvcmVkRm9udCB7IGZhbHNlIH07CiB9OwogCiBzdHJ1Y3QgRmFsbGJhY2tGb250RGVzY3JpcHRp
b25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGYWxsYmFja0ZvbnRE
ZXNjcmlwdGlvbktleSYga2V5KSB7IHJldHVybiBrZXkuY29tcHV0ZUhhc2goKTsgfQorICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBrZXkp
IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5kZXNjcmlwdGlvbktleSwga2V5LmNvbG9yZWRGb250
KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9u
S2V5JiBhLCBjb25zdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpp
bmRleCAwMzIwOTY5ODhmY2RlMjE3MTc1OTMzNTAwMTM5MGViM2ZiYjk5YTViLi5lOTAxNzRiZWY0
MzAzMTBhM2I5ZTVkNDU4MWJmYTFhZGVlZWUwN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCkBAIC0xODUsMTMgKzE4NSwxMyBAQCB2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNwLAogICAgICAgICAgICAgQ1RGb250UmVmIHJ1bkNURm9udCA9IHN0YXRpY19jYXN0PENU
Rm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0dHJp
YnV0ZU5hbWUpKTsKICAgICAgICAgICAgIEFTU0VSVChydW5DVEZvbnQgJiYgQ0ZHZXRUeXBlSUQo
cnVuQ1RGb250KSA9PSBDVEZvbnRHZXRUeXBlSUQoKSk7CiAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmpl
Y3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkNURm9udCk7Ci0gICAgICAgICAgICBpZiAoIVdURjo6c2Fm
ZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEo
KS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXNh
ZmVDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRh
KCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8v
IEJlZ2luIHRyeWluZyB0byBzZWUgaWYgcnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMg
aW4gdGhlIGZhbGxiYWNrIGxpc3QuCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JD
aGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9u
dCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoV1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JF
cXVhbGl0eUNoZWNrKCkuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzYWZlQ0ZFcXVhbChydW5Gb250LT5wbGF0Zm9ybURhdGEoKS5v
YmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
cnVuRm9udCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAwYTZl
NWE3ZTk5NTY3ZTRhYzEwN2E3NGQ4MWQ5OWYwYjMxODNiNDEyLi40N2I5NzEzZWVjM2RiODliNWRl
OWVkNWRmZTI1ZjFkZGJiYzY2ZWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzM4LDggKzMzOCw3IEBAIFJl
ZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyCiAKICAgICBpZiAoaGZvbnQpIHsKICAgICAgICAgaWYgKCFm
YW1pbHlOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVz
dWx0ID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0g
Y2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSkpCiAgICAgICAg
ICAgICAgICAgZm9udERhdGEgPSBmb250Rm9yUGxhdGZvcm1EYXRhKCpyZXN1bHQpOwogICAgICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Npemlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgKaW5kZXggYmI4
M2MzOTNlNzllMjBhMmJiNmM3NWVkN2EyMzk1OTZlMTAxMDBkMy4uYjBmOWMyNzZlYTU0Yjc2ZTFk
NzdhMjY1MTEwNjIxNzUyYmRiNTNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvU2l6aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvU2l6aW5nLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVm
UHRyPFRleHQ+PiBtX2F1dG9TaXplZE5vZGVzOwogfTsKIAotc3RydWN0IFRleHRBdXRvU2l6aW5n
VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxUZXh0QXV0b1NpemluZ0tleT4geworc3Ry
dWN0IFRleHRBdXRvU2l6aW5nVHJhaXRzIDogSGFzaFRyYWl0czxUZXh0QXV0b1NpemluZ0tleT4g
ewogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUZXh0QXV0b1NpemluZ0tleSYgc2xvdCkg
eyBuZXcgKE5vdE51bGwsICZzbG90KSBUZXh0QXV0b1NpemluZ0tleShUZXh0QXV0b1NpemluZ0tl
eTo6RGVsZXRlZCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUZXh0
QXV0b1NpemluZ0tleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzRGVsZXRlZCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA0ZjQ1
N2NiM2VmZjk0MTVkYmI3OWRkOTUzMTE0ZGU2NzhjY2I2MGY5Li5lZGYxNzBhOTY5YTkwN2U5OTgz
NjkyZWI5ODg1ODkwMmU3YjM2MzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTQ0OSwxMCArNDQ5LDggQEAgYm9vbCBSZW5kZXJTdHls
ZTo6ZGVzY2VuZGFudEFmZmVjdGluZ05vbkluaGVyaXRlZFByb3BlcnRpZXNFcXVhbChjb25zdCBS
ZW5kZXJTdHkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQpCiB7Ci0gICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgaGFz
aGVyLmFkZChBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRp
b24oKS5maXJzdEZhbWlseSgpKSk7Ci0gICAgaGFzaGVyLmFkZChmb250LmZvbnREZXNjcmlwdGlv
bigpLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgLy8g
RklYTUU6IFdvdWxkIGJlIGJldHRlciB0byBoYXNoIHRoZSBmYW1pbHkgbmFtZSByYXRoZXIgdGhh
biBoYXNoaW5nIGEgaGFzaCBvZiB0aGUgZmFtaWx5IG5hbWUuIEFsc28sIHNob3VsZCB0aGlzIHVz
ZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaD8KKyAgICByZXR1cm4gY29t
cHV0ZUhhc2goQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpoYXNoKGZvbnQuZm9udERlc2NyaXB0
aW9uKCkuZmlyc3RGYW1pbHkoKSksIGZvbnQuZm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6
ZSgpKTsKIH0KIAogdW5zaWduZWQgUmVuZGVyU3R5bGU6Omhhc2hGb3JUZXh0QXV0b3NpemluZygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vydmlj
ZVdvcmtlckNsaWVudElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oCmluZGV4IDY0MDlhNDFjMzgyYThlNTc3
Yzk2MDM2NGZiNjdlNzgxNDQ5Y2IxYjYuLjkzOGJiNTkyZjcyNjhjNjlhYzM3MTgzNzVhNzJiOTY5
NmM3Mjk1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2
aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9TZXJ2aWNlV29ya2VyQ2xpZW50SWRlbnRpZmllci5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkRvY3VtZW50SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJU
eXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODcsMTYg
Kzg4LDEyIEBAIE9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDbGllbnRJZGVudGlmaWVyPiBTZXJ2aWNl
V29ya2VyQ2xpZW50SWRlbnRpZmllcjo6ZGVjb2RlKERlCiAgICAgaWYgKCFjb250ZXh0SWRlbnRp
ZmllcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB7IHsgV1RG
TW92ZSgqc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpLCBXVEZNb3ZlKCpjb250ZXh0SWRlbnRp
ZmllcikgfSB9OworICAgIHJldHVybiB7IHsgKnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLCAq
Y29udGV4dElkZW50aWZpZXIgfSB9OwogfQogCiBpbmxpbmUgdW5zaWduZWQgU2VydmljZVdvcmtl
ckNsaWVudElkZW50aWZpZXI6Omhhc2goKSBjb25zdAogewotICAgIHVuc2lnbmVkIGhhc2hlc1sy
XTsKLSAgICBoYXNoZXNbMF0gPSBXVEY6OmludEhhc2goc2VydmVyQ29ubmVjdGlvbklkZW50aWZp
ZXIudG9VSW50NjQoKSk7Ci0gICAgaGFzaGVzWzFdID0gV1RGOjppbnRIYXNoKGNvbnRleHRJZGVu
dGlmaWVyLnRvVUludDY0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsKKyAgICByZXR1cm4gY29tcHV0ZUhhc2goc2VydmVy
Q29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnRleHRJZGVudGlmaWVyKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCmluZGV4IGRiYTYyMzVlMGI2MDZhODMxM2Mz
YzRjMzFkN2QyY2JmYTYxNmZmZTEuLjE0YWJjYWQ2NGM5OWExYzg3MTM2YmJjMGY2ZDljYzU2MWVm
MjgxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNl
V29ya2VyQ29udGV4dERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
U2VydmljZVdvcmtlckNvbnRleHREYXRhLmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIldvcmtlclR5cGUuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRl
IDx3dGYvVVJMSGFzaC5oPgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZS5oCmluZGV4IGFmYmM0MGU5YzMyYmJhOTEyMGZkOThiNTJhNDFmZjA3Nzc4NzRkOWMuLmM0
M2Q4NjU0NWZjYmI4NjVhM2E1MWI0YjU3OTM2ZjkyMmI4MDk2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEu
aCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmgiCiAjaW5jbHVkZSAiV29y
a2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9j
b250ZXh0L1NXQ29udGV4dE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9jb250ZXh0L1NXQ29udGV4dE1hbmFnZXIuaAppbmRleCBmNTcwY2U0M2Q1YzA4YzkwODgyOTAy
MmExNzI2ZGQyYjhhOTkwZDAxLi40ZDA4ZTc2YmM5ZDYwNjM5Y2UwZDlhZjRjOTlhMDdhOWUxMWJl
NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvY29udGV4dC9T
V0NvbnRleHRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2Nv
bnRleHQvU1dDb250ZXh0TWFuYWdlci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2Vy
dmljZVdvcmtlclRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRocmVhZFByb3h5LmgK
aW5kZXggM2ZlMmI0NDM1YWYyNWMwMjQ5YzFlZmNkZThjODgxZGFmYjhmYWIwMS4uYmZjODdmMjQ5
MDU0NzY2OWY5YjA0MWY4YTI3MWQ3MjdjZWQyZmU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRocmVhZFByb3h5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRo
cmVhZFByb3h5LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJXb3JrZXJEZWJ1Z2dlclBy
b3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25TdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9S
ZWdpc3RyYXRpb25TdG9yZS5oCmluZGV4IGFmODZmMjU0MzU3MmExYTM4YjUxZjk5NDE5ODgxNWE2
ZjRkNTYyNWUuLmJhMTEzMTE1YTY1NDEyZmRlMmRmZGFiNjE2NmU1ZjZlMDg3MjM5NmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lz
dHJhdGlvblN0b3JlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmgKaW5kZXggM2I2ZDFlNzY1MTAyOTcwNDZiYTA3
MmU4ZTg4OTNiMmZhZGU2ZGI3OS4uOTJhYWI4NmMzMTljNGNmNjFkZjM5MTU0Y2YwZGZmMmUyODY1
ODZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dT
ZXJ2ZXIuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyVG9Db250ZXh0Q29u
bmVjdGlvbi5oCmluZGV4IDNhM2Y3YzAwMGNmN2M4NzNjNzRhYjhiYjM3Zjc5ZTUwYjk2MmQyYmQu
LmJhNThmNzg3OGE0Mzg5YjQ1NDU2MmI3MmI1YTVmNWNhNTRlMjM3NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJUb0NvbnRleHRDb25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1Nl
cnZlclRvQ29udGV4dENvbm5lY3Rpb24uaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlNl
cnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJJZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1VS
TEhhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyV29ya2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyV29ya2VyLmgKaW5kZXggZjRjMmMz
Yjc1NmE5ZWY4ZjFkMGY1ZDM2MmYwYWViOTg2MGVhODhiNi4uMWQ0ZmQ4MTdiM2M4YWE4MmQxMTYz
MzgzNWY0MzE2YWZiNTE0NWJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9TV1NlcnZlcldvcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlclRvQ29u
dGV4dENvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdv
cmtlci9XZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uaAppbmRleCAwMGU5YzIxZTg2ZDRm
OWUyZTlmNzdiMDRmMzc2Yzg0YWU4YWYwNDE3Li5lYzc3YzFkYjJlYmNiOWQ0NTA0MmE5MzU4YjRl
OTEzNTVhYTllZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1Nl
cnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyVG9Db250ZXh0
Q29ubmVjdGlvbi5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckZl
dGNoVGFzay5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1NXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9V
UkxIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
LmgKaW5kZXggZTVjNjA1YzUxZjMyNzE1NjNhNmI2ZWUxOTEwYzk0ZWQwMTNmMzQ5My4uYzc1ZDE3
MDRhNzcyZTI5OTk5ZGU0MzA5ZDg1OWFmODE3YTA1NzQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCkBAIC01OSwxMSArNTksNyBA
QCBzdHJ1Y3QgR2xvYmFsRnJhbWVJRCB7CiAKIGlubGluZSB1bnNpZ25lZCBHbG9iYWxGcmFtZUlE
OjpoYXNoKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBoYXNoZXNbMl07Ci0gICAgaGFzaGVzWzBd
ID0gV1RGOjppbnRIYXNoKHdlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKLSAgICBoYXNoZXNbMV0gPSBX
VEY6OmludEhhc2goZnJhbWVJRC50b1VJbnQ2NCgpKTsKLQotICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnkoaGFzaGVzLCBzaXplb2YoaGFzaGVzKSk7CisgICAgcmV0dXJuIGNvbXB1
dGVIYXNoKHdlYlBhZ2VJRCwgZnJhbWVJRCk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgR2xvYmFsRnJhbWVJRCYgYSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgYikKQEAgLTczLDgg
KzY5LDggQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHbG9iYWxGcmFtZUlEJiBhLCBj
b25zdCBHbG9iYWxGcmFtZUlEJiBiKQogICAgIHJldHVybiBhLndlYlBhZ2VJRCA9PSBiLndlYlBh
Z2VJRCAmJiAgYS5mcmFtZUlEID09IGIuZnJhbWVJRDsKIH0KIAotfTsKLX0gLy8gbmFtZXNwYWNl
IE5ldHdvcmtDYWNoZQorfQorfQogCiBuYW1lc3BhY2UgV1RGIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNGM2YjdiYzIzY2YyOTI4MzI3NGI3OTY1OTgz
Y2IxODBjMTY1OTlhYi4uYWVhZjRiOWJlOTMzNTlmZmVjOTQ3NmUyNDNjNjdhM2FjYTQ1OTNlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC02NjksNiArNjY5
LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdNZWRpYVRpbWUnOiBb
Jzx3dGYvTWVkaWFUaW1lLmg+J10sCiAgICAgICAgICdNb25vdG9uaWNUaW1lJzogWyc8d3RmL01v
bm90b25pY1RpbWUuaD4nXSwKICAgICAgICAgJ1NlY29uZHMnOiBbJzx3dGYvU2Vjb25kcy5oPidd
LAorICAgICAgICAnVVJMJzogWyc8d3RmL1VSTEhhc2guaD4nXSwKICAgICAgICAgJ1dhbGxUaW1l
JzogWyc8d3RmL1dhbGxUaW1lLmg+J10sCiAgICAgICAgICdTdHJpbmcnOiBbJzx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4nXSwKICAgICAgICAgJ1BBTDo6U2Vzc2lvbklEJzogWyc8cGFsL1Nlc3Npb25J
RC5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLQnJv
d3NpbmdDb250ZXh0SGFuZGxlLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0SGFuZGxlLm1tCmluZGV4IGM0YmYyYjc5YzM1NGQzOTNiNjM3NGM3ODMy
Yjg0YWZlN2Y1NWY1Y2EuLjE0NzAxMDljZTFmNGI4MDkxNGUzNTk5MTgxNTUxY2RmNzQ1MzQxMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29u
dGV4dEhhbmRsZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tCcm93
c2luZ0NvbnRleHRIYW5kbGUubW0KQEAgLTU1LDcgKzU1LDcgQEAgLSAoaWQpX2luaXRXaXRoUGFn
ZVByb3h5SUQ6KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcilwYWdlUHJveHlJRCBhbmRX
ZWJQYWcKIAogLSAoTlNVSW50ZWdlciloYXNoCiB7Ci0gICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goX3BhZ2VQcm94eUlELnRvVUludDY0KCksIF93ZWJQYWdlSUQudG9VSW50NjQoKSk7CisgICAg
cmV0dXJuIGNvbXB1dGVIYXNoKF9wYWdlUHJveHlJRCwgX3dlYlBhZ2VJRCk7CiB9CiAKIC0gKEJP
T0wpaXNFcXVhbDooaWQpb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaAppbmRl
eCA3NjYyMTg5NTMyODBhY2ExZmVkMGIwZTY5MTA4ZDliYzg3ODlkZGU4Li4wNDU1MmRjNzAwYjE5
ZGYwMGVjYzU2Y2JhYTE0NDRmMmNlNTBhZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0
aW9uLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NXQ29udGV4dE1hbmFn
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJDbGllbnREYXRhLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TZXJ2aWNlV29ya2VyVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMSGFz
aC5oPgogCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3Qu
Y3BwCmluZGV4IGRjNzdmOGY4NGQwMzQzOTAxYjlhZWVhNTU1MGZkMzc4ZDgwMzI4OTYuLjA0MjA1
YjM3MmRhNDc5YmM5ZGI4ZTU2N2M3ZDYyMmU5ZjkyNGZlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTc1
LDcgKzc1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlZ2VyQXJyYXkmIGEs
IGNvbnN0IEludGVnZXJBcnJheSYgYikKICAgICByZXR1cm4gYS5tX2ludGVnZXJzID09IGIubV9p
bnRlZ2VycyAmJiAgYS5tX3NpemUgPT0gYi5tX3NpemU7CiB9CiAKLXN0cnVjdCBJbnRlZ2VyQXJy
YXlIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxJbnRlZ2VyQXJyYXk+IHsKK3N0
cnVjdCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxJbnRlZ2VyQXJyYXk+IHsK
ICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSW50ZWdlckFycmF5JiBzbG90
KSB7IHNsb3QubWFya0RlbGV0ZWQoKTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpIHsgcmV0dXJuIGFycmF5LmlzRGVsZXRlZFZhbHVl
KCk7IH0KIH07Cg==
</data>
<flag name="review"
          id="445390"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>