<?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>29257</bug_id>
          
          <creation_ts>2009-09-14 15:01:09 -0700</creation_ts>
          <short_desc>Chromium needs to be able to inject its own storage event handler into StorageArea</short_desc>
          <delta_ts>2009-09-24 18:22:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>beidson</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>147203</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-14 15:01:09 -0700</bug_when>
    <thetext>Chromium needs to be able to inject its own storage event handler into StorageAreaImpl.  This is because the process the StorageAreaImpl runs in is not the same process that the events need to be dispatched to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147208</commentid>
    <comment_count>1</comment_count>
      <attachid>39575</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-14 15:10:09 -0700</bug_when>
    <thetext>Created attachment 39575
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147415</commentid>
    <comment_count>2</comment_count>
      <attachid>39575</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-09-15 16:31:32 -0700</bug_when>
    <thetext>Comment on attachment 39575
Patch v1

&gt; Index: WebCore/page/DOMWindow.cpp
...
&gt; +    RefPtr&lt;StorageArea&gt; storageArea = page-&gt;group().localStorage()-&gt;storageArea(document-&gt;securityOrigin(), new StorageEventDispatcherImpl); 

I think it is generally better to use the Foo::create() pattern that returns
a PassRefPtr instead of passing a raw pointer.  That way the ownership exchange
is more clearly documented and enforced by the code.


&gt; Index: WebCore/storage/StorageEventDispatcher.h

&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StorageArea.h&quot;
&gt; +
&gt; +#include &lt;wtf/RefCounted.h&gt;

nit: no new line after StorageArea.h


Otherwise, LG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147417</commentid>
    <comment_count>3</comment_count>
      <attachid>39622</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-15 16:42:23 -0700</bug_when>
    <thetext>Created attachment 39622
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148835</commentid>
    <comment_count>4</comment_count>
      <attachid>39879</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-21 14:40:41 -0700</bug_when>
    <thetext>Created attachment 39879
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148842</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-21 14:47:27 -0700</bug_when>
    <thetext>Fishd: Ugh....I accidentally re-uploaded which cleared the r+.  :-(  Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149913</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-24 18:22:12 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=29655 is a better way to solve this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39575</attachid>
            <date>2009-09-14 15:10:09 -0700</date>
            <delta_ts>2009-09-15 16:41:52 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29257-20090914151008.patch</filename>
            <type>text/plain</type>
            <size>42582</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDktMTQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hyb21pdW0gbmVlZHMgdG8gYmUgYWJsZSB0byBpbmplY3QgaXRzIG93biBzdG9yYWdlIGV2ZW50
IGhhbmRsZXIgaW50byBTdG9yYWdlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNTcKKworICAgICAgICBDaHJvbWl1bSBuZWVkcyB0byBiZSBh
YmxlIHRvIGluamVjdCBpdHMgb3duIHN0b3JhZ2UgZXZlbnQgaGFuZGxlciBpbnRvCisgICAgICAg
IFN0b3JhZ2VBcmVhSW1wbC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgcHJvY2VzcyB0aGUgU3RvcmFn
ZUFyZWFJbXBsIHJ1bnMgaW4gaXMKKyAgICAgICAgbm90IHRoZSBzYW1lIHByb2Nlc3MgdGhhdCB0
aGUgZXZlbnRzIG5lZWQgdG8gYmUgZGlzcGF0Y2hlZCB0by4KKworICAgICAgICBBbHNvIGEgYml0
IG9mIGRlYWQgY29kZSAoYW5kIHByZS1wcm9jZXNzb3IpIGNsZWFudXAuCisKKyAgICAgICAgQmVo
YXZpb3Igc2hvdWxkIG5vdCBoYXZlIGNoYW5nZWQsIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2Vz
c2lvblN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Up
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpj
bGVhcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaDoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjp+U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcik6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6On5TdG9yYWdlRXZlbnREaXNw
YXRjaGVySW1wbCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAwOS0wOS0xNCAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA0ODM1NykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTIyMjIsNiArMjIyMiw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUV2ZW50LmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKKwlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlckltcGwuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMwMTQsNiArMzAxNCw5IEBACiAgICAgICAg
ICAgICAnc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9T
dG9yYWdlRXZlbnQuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VFdmVudC5oJywK
KyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCcsCisgICAgICAg
ICAgICAnc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAnLAorICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TdG9yYWdlTWFwLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlTWFw
LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAnLApJbmRleDog
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wJKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsNiArMTA1Niw3IEBAIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
Y3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAogICAgICAgICBzdG9yYWdl
L1N0b3JhZ2VFdmVudC5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYWNoZXJJ
bXBsLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1h
cC5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDgzNTcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTEwMCw2ICszMTEwMCwxOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdl
RXZlbnREaXNwYXRjaGVySW1wbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlTWFwLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUwMiw2ICs0NTAyLDkgQEAKIAkJQzUxNjBFRUIx
MDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0
b3JhZ2VBcmVhSW1wbC5oICovOyB9OwogCQlDNTVFMzhCRjEwMDQwRDVEMDBBNTZCREIgLyogU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1w
bC5oICovOyB9OwogCQlDNTVFMzhDMDEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU1RTM4QkMxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLzsg
fTsKKwkJQzVFQkREODMxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
RUJERDgwMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAg
Ki87IH07CisJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRj
aGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUVC
REQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovOyB9Owor
CQlDNUVCREQ4NTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgy
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oICovOyB9Owog
CQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5
QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2
RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFB
MjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUNF
NTRGRDM4MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U1NEZEMzcxMDE2RDlBNjAw
OEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1OTAsNiArOTU5Myw5IEBACiAJCUM1MTYwRUU5
MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIg
LyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNUVCREQ4MDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUVC
REQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1RUJERDgyMTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBBMDAw
QjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRT
b3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRT
b3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOTksNiAr
MTAyMDUsOSBAQAogCQkJCTUxRTBCQUJBMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQu
Y3BwICovLAogCQkJCTUxRTBCQUI5MERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaCAq
LywKIAkJCQk1MUUwQkFCRDBEQTU1NDg0MDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAqLywK
KwkJCQlDNUVCREQ4MDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcklt
cGwuY3BwICovLAorCQkJCUM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmggKi8sCisJCQkJQzVFQkREODIxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsLmggKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlFNDE3IC8q
IFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9y
YWdlTWFwLmggKi8sCiAJCQkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1l
c3BhY2UuY3BwICovLApAQCAtMTc3OTksNiArMTc4MDgsOCBAQAogCQkJCTUxMEQ0QTRGMTAzMTc3
QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBE
NEE1MDEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFBQkFFNDUxMDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFr
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3Jh
Z2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1RUJERDg1MTA1RURERUMw
MDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xOTkyNSw2ICsxOTkzNiw3IEBACiAJCQkJNTlDNzdGMkExMDU0NUIzQjAwNTA2MTA0IC8qIEdl
b2xvY2F0aW9uU2VydmljZU1vY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwRDRBNEUxMDMx
NzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFBQkFFNDQxMDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlDNUVCREQ4MzEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNp
b24gNDgzNTcpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiRE9NVGltZXIuaCIKICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCkBAIC01
NSw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiTWVkaWEuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQu
aCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25DZW50ZXIu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TY3JlZW4uaCIKQEAgLTYyLDI5ICs2NSwxNSBAQAogI2luY2x1ZGUgIlNjcmVlbi5o
IgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJT
dG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2Uu
aCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgIldlYktpdFBvaW50
LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
LSNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIlN0b3JhZ2UuaCIKLSNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJET01BcHBsaWNh
dGlvbkNhY2hlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgotI2VuZGlmCi0KIHVzaW5nIHN0ZDo6bWluOwogdXNp
bmcgc3RkOjptYXg7CiAKQEAgLTU2NSw3ICs1NTQsNyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OnNl
c3Npb25TdG9yYWdlKCkgY29uCiAgICAgaWYgKCFwYWdlLT5zZXR0aW5ncygpLT5zZXNzaW9uU3Rv
cmFnZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8U3RvcmFnZUFy
ZWE+IHN0b3JhZ2VBcmVhID0gcGFnZS0+c2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEoZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFn
ZUFyZWEgPSBwYWdlLT5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKSwgbmV3IFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsKTsKICAgICBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFyZWEuZ2V0
KCksIGZhbHNlLCBtX2ZyYW1lKTsKIAogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBTdG9yYWdlOjpj
cmVhdGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsKQEAgLTU4OCwxMyArNTc3LDEw
IEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICAgICBpZiAoIXBh
Z2UtPnNldHRpbmdzKCktPmxvY2FsU3RvcmFnZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UgPSBwYWdlLT5ncm91cCgpLmxv
Y2FsU3RvcmFnZSgpOwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBsb2Nh
bFN0b3JhZ2UgPyBsb2NhbFN0b3JhZ2UtPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpKSA6IDA7IAotICAgIGlmIChzdG9yYWdlQXJlYSkgewotICAgICAgICBwYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFyZWEuZ2V0KCksIHRy
dWUsIG1fZnJhbWUpOwotICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZSht
X2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gcGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKS0+c3RvcmFn
ZUFyZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIG5ldyBTdG9yYWdlRXZlbnREaXNwYXRj
aGVySW1wbCk7IAorICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkVXNlRE9NU3Rv
cmFnZShzdG9yYWdlQXJlYS5nZXQoKSwgdHJ1ZSwgbV9mcmFtZSk7CiAKKyAgICBtX2xvY2FsU3Rv
cmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOwog
ICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZS5nZXQoKTsKIH0KICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE1ICsyOCw5IEBA
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgot
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNs
dWRlICJTdG9yYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKICNpbmNs
dWRlICJTdG9yYWdlTWFwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCkBAIC00
NywxMCArNDEsMTEgQEAgU3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKCkKIHsKIH0K
IAotU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5
cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUlt
cGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyLCBTdG9yYWdl
RXZlbnREaXNwYXRjaGVyKiBldmVudERpc3BhdGNoZXIpCiAgICAgOiBtX3N0b3JhZ2VUeXBlKHN0
b3JhZ2VUeXBlKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCiAgICAgLCBtX3N0b3Jh
Z2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCisgICAgLCBtX2V2ZW50RGlzcGF0Y2hlcihldmVu
dERpc3BhdGNoZXIpCiAgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKICNp
Zm5kZWYgTkRFQlVHCiAgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCkBAIC01OCw2ICs1Myw3IEBA
IFN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2UKIHsKICAgICBBU1NFUlQo
bV9zZWN1cml0eU9yaWdpbik7CiAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAgQVNTRVJU
KG1fZXZlbnREaXNwYXRjaGVyKTsKIAogICAgIC8vIEZJWE1FOiBJZiB0aGVyZSdzIG5vIGJhY2tp
bmcgc3RvcmFnZSBmb3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Ig
c2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKICAgICAvLyBub3Qgc2lsZW50bHkg
aWdub3JpbmcgaXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4
OTQKQEAgLTc3LDYgKzczLDcgQEAgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3Rv
cmFnZQogICAgIDogbV9zdG9yYWdlVHlwZShhcmVhLT5tX3N0b3JhZ2VUeXBlKQogICAgICwgbV9z
ZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5T3JpZ2luKQogICAgICwgbV9zdG9yYWdlTWFw
KGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAgICAsIG1fZXZlbnREaXNwYXRjaGVyKGFyZWEtPm1fZXZl
bnREaXNwYXRjaGVyKQogICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoYXJlYS0+bV9zdG9yYWdl
U3luY01hbmFnZXIpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9pc1NodXRkb3duKGFyZWEtPm1f
aXNTaHV0ZG93bikKQEAgLTg0LDYgKzgxLDcgQEAgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJl
YUltcGwoU3RvcmFnZQogewogICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKICAgICBBU1NF
UlQobV9zdG9yYWdlTWFwKTsKKyAgICBBU1NFUlQobV9ldmVudERpc3BhdGNoZXIpOwogICAgIEFT
U0VSVCghbV9pc1NodXRkb3duKTsKIH0KIApAQCAtMTQ5LDcgKzE0Nyw3IEBAIHZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpzZXRJdGVtKGNvbnN0IFN0cmkKICAgICBpZiAob2xkVmFsdWUgIT0gdmFsdWUp
IHsKICAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQogICAgICAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCB2YWx1ZSk7Ci0gICAgICAgIGRpc3Bh
dGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBmcmFtZSk7CisgICAgICAgIG1f
ZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCB2YWx1
ZSwgbV9zdG9yYWdlVHlwZSwgbV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgZnJhbWUpOwogICAgIH0K
IH0KIApAQCAtMTcwLDcgKzE2OCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVt
KGNvbnN0IFMKICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtX3N0
b3JhZ2VBcmVhU3luYykKICAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0
ZW1Gb3JTeW5jKGtleSwgU3RyaW5nKCkpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChr
ZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgZnJhbWUpOworICAgICAgICBtX2V2ZW50RGlzcGF0Y2hl
ci0+ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIG1fc3RvcmFn
ZVR5cGUsIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZyYW1lKTsKICAgICB9CiB9CiAKQEAgLTE4
Niw3ICsxODQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1lCiAK
ICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5z
Y2hlZHVsZUNsZWFyKCk7Ci0gICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmlu
ZygpLCBTdHJpbmcoKSwgZnJhbWUpOworICAgIG1fZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaFN0
b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBtX3N0b3JhZ2VUeXBlLCBt
X3NlY3VyaXR5T3JpZ2luLmdldCgpLCBmcmFtZSk7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFJbXBs
Ojpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKQEAgLTIyNCw0NSArMjIyLDYgQEAg
dm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDbwogICAgICAgICBtX3N0b3Jh
Z2VBcmVhU3luYy0+YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiB9CiAKLXZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZy
YW1lKQotewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIEZJWE1FOiBFdmVudHMgYXJl
IGN1cnJlbnRseSBicm9rZW4gaW4gQ2hyb21pdW0uCi0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAg
ICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFdlIG5lZWQgdG8gY29weSBhbGwgcmVsZXZhbnQgZnJhbWVz
IGZyb20gZXZlcnkgcGFnZSB0byBhIHZlY3RvciBzaW5jZSBzZW5kaW5nIHRoZSBldmVudCB0byBv
bmUgZnJhbWUgbWlnaHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCi0gICAgLy8gb2YgYW55IGdpdmVu
IHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0aGUgcGFnZSBncm91cCBpdHNlbGYuCi0gICAg
VmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7Ci0gICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0g
U2Vzc2lvblN0b3JhZ2UpIHsKLSAgICAgICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFn
ZS4KLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmln
aW4oKSkpCi0gICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KFN0
b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFs
dWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291
cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5zZXNzaW9uU3Rv
cmFnZSgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gU2VuZCBldmVudHMgdG8gZXZlcnkg
cGFnZS4KLSAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZS0+Z3JvdXAo
KS5wYWdlcygpOwotICAgICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cGFnZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkpKQotICAg
ICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93
RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVS
SSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxv
Y2FsU3RvcmFnZSgpKSk7Ci0gICAgfQotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NU
T1JBR0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCShyZXZpc2lvbiA0ODM1NykK
KysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAogI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIgogCiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCkBAIC00MCw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIFN0b3JhZ2VBcmVhSW1wbCA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7CiAgICAg
cHVibGljOgotICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOworICAgICAg
ICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIq
KTsKICAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWFJbXBsKCk7CiAKICAgICAgICAgLy8gVGhl
IEhUTUw1IERPTSBTdG9yYWdlIEFQSSAoYW5kIGNvbnRhaW5zKQpAQCAtNjQsMTEgKzY1LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFs
dWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KICAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdl
VHlwZTsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwog
ICAgICAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOworICAgICAgICBSZWZQdHI8
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcj4gbV9ldmVudERpc3BhdGNoZXI7CiAKICAgICAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhU3luYz4gbV9zdG9yYWdlQXJlYVN5bmM7CiAgICAgICAgIFJlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IG1fc3RvcmFnZVN5bmNNYW5hZ2VyOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcl9oCisjZGVmaW5lIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXJfaAorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gVGhpcyBpbnRlcmZhY2Ug
aXMgcmVxdWlyZWQgZm9yIENocm9taXVtIHNpbmNlIHRoZXNlIGFjdGlvbnMgbmVlZCB0byBiZSBw
cm94aWVkIGJldHdlZW4gcHJvY2Vzc2VzLgorICAgIGNsYXNzIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlRXZlbnREaXNwYXRjaGVyPiB7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlRXZlbnREaXNwYXRjaGVyKCkgeyB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdl
VHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKKyAgICB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0Up
CisKKyNlbmRpZiAvLyBTdG9yYWdlRXZlbnREaXNwYXRjaGVyX2gKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcAkocmV2aXNpb24gNDgzNTcp
CShmcm9tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOjQ4MzU3KQorKysgV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwu
aCIKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VNYXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTdG9yYWdlQXJlYUltcGw6On5TdG9yYWdlQXJlYUltcGwo
KQoreworfQorCitTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSBz
dG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBQYXNzUmVmUHRy
PFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCisgICAgOiBtX3N0b3JhZ2VUeXBlKHN0
b3JhZ2VUeXBlKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCisgICAgLCBtX3N0b3Jh
Z2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCisgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihz
eW5jTWFuYWdlcikKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisj
ZW5kaWYKK3sKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7CisgICAgQVNTRVJUKG1fc3Rv
cmFnZU1hcCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlcmUncyBubyBiYWNraW5nIHN0b3JhZ2Ug
Zm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3VsZCBiZSB0
aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVudGx5IGlnbm9yaW5nIGl0
LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0CisgICAgaWYg
KG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7CisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jID0gU3Rv
cmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdlU3luY01hbmFnZXIsIHRoaXMpOworICAgICAg
ICBBU1NFUlQobV9zdG9yYWdlQXJlYVN5bmMpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y29weSgpCit7CisgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJbXBsKHRoaXMp
KTsKK30KKworU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJbXBs
KiBhcmVhKQorICAgIDogbV9zdG9yYWdlVHlwZShhcmVhLT5tX3N0b3JhZ2VUeXBlKQorICAgICwg
bV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5T3JpZ2luKQorICAgICwgbV9zdG9yYWdl
TWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEt
Pm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faXNTaHV0ZG93
bihhcmVhLT5tX2lzU2h1dGRvd24pCisjZW5kaWYKK3sKKyAgICBBU1NFUlQobV9zZWN1cml0eU9y
aWdpbik7CisgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOworfQorCitzdGF0aWMgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKEZyYW1lKiBmcmFt
ZSkKK3sKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlciBj
YW4gYmUgTlVMTCBpbiBDaHJvbWl1bSBzaW5jZSB0aGlzIGNhbGwgaXMgbWFkZSBpbiBhIGRpZmZl
cmVudAorICAgIC8vIHByb2Nlc3MgZnJvbSB3aGVyZSB0aGUgRnJhbWUgb2JqZWN0IGV4aXN0cy4g
IEx1Y2tpbHksIHByaXZhdGUgYnJvd3NlaW5nIGlzCisgICAgLy8gaW1wbGVtZW50ZWQgZGlmZmVy
ZW50bHkgaW4gQ2hyb21pdW0sIHNvIGl0J2QgbmV2ZXIgcmV0dXJuIHRydWUgYW55d2F5LgorICAg
IEFTU0VSVCghZnJhbWUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZy
YW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKKyNlbmRp
ZgorfQorCit1bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgp
OworfQorCitTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjprZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpOworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmtleShpbmRleCk7Cit9CisKK1N0cmlu
ZyBTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OworCisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOworfQorCit2b2lkIFN0
b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1f
aXNTaHV0ZG93bik7CisgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CisgICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7CisKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFt
ZSkpIHsKKyAgICAgICAgZWMgPSBRVU9UQV9FWENFRURFRF9FUlI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogRm9yIExvY2FsU3RvcmFnZSB3aGVyZSBhIGRpc2sgcXVv
dGEgd2lsbCBiZSBlbmZvcmNlZCwgaGVyZSBpcyB3aGVyZSB3ZSBuZWVkIHRvIGRvIHF1b3RhIGNo
ZWNraW5nLgorICAgIC8vICAgICAgICBJZiB3ZSBkZWNpZGUgdG8gZW5mb3JjZSBhIG1lbW9yeSBx
dW90YSBmb3IgU2Vzc2lvblN0b3JhZ2UsIHRoaXMgaXMgd2hlcmUgd2UnZCBkbyB0aGF0LCBhbHNv
LgorICAgIC8vIGlmICg8b3ZlciBxdW90YT4pIHsKKyAgICAvLyAgICAgZWMgPSBRVU9UQV9FWENF
RURFRF9FUlI7CisgICAgLy8gICAgIHJldHVybjsKKyAgICAvLyB9CisKKyAgICBTdHJpbmcgb2xk
VmFsdWU7CisgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0
SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSk7CisKKyAgICBpZiAobmV3TWFwKQorICAgICAgICBt
X3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOworCisgICAgLy8gT25seSBub3RpZnkgdGhl
IGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBjaGFuZ2VkCisgICAgaWYgKG9sZFZhbHVl
ICE9IHZhbHVlKSB7CisgICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgICAg
IG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgdmFsdWUpOworICAg
ICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOwor
ICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5n
JiBrZXksIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAg
ICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtl
eSwgb2xkVmFsdWUpOworICAgIGlmIChuZXdNYXApCisgICAgICAgIG1fc3RvcmFnZU1hcCA9IG5l
d01hcC5yZWxlYXNlKCk7CisKKyAgICAvLyBPbmx5IG5vdGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0
ZW0gd2FzIGFjdHVhbGx5IHJlbW92ZWQKKyAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgU3RyaW5nKCkpOworICAgICAgICBkaXNwYXRj
aFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgZnJhbWUpOworICAgIH0KK30K
Kwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAg
ICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOworCisgICAgaWYgKG1fc3Rv
cmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigp
OworICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCks
IGZyYW1lKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5KSBjb25zdAoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5z
KGtleSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjppbXBvcnRJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKKyAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5LCB2YWx1ZSk7Cit9CisKK1NlY3Vy
aXR5T3JpZ2luKiBTdG9yYWdlQXJlYUltcGw6OnNlY3VyaXR5T3JpZ2luKCkKK3sKKyAgICByZXR1
cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmNs
b3NlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFy
ZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1faXNT
aHV0ZG93biA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5j
KQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7
Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1
ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQoreworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8v
IEZJWE1FOiBFdmVudHMgYXJlIGN1cnJlbnRseSBicm9rZW4gaW4gQ2hyb21pdW0uCisgICAgcmV0
dXJuOworI2VuZGlmCisKKyAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5lZWQgdG8gY29weSBh
bGwgcmVsZXZhbnQgZnJhbWVzIGZyb20gZXZlcnkgcGFnZSB0byBhIHZlY3RvciBzaW5jZSBzZW5k
aW5nIHRoZSBldmVudCB0byBvbmUgZnJhbWUgbWlnaHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCisg
ICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0aGUgcGFnZSBn
cm91cCBpdHNlbGYuCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7CisgICAgaWYg
KG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpIHsKKyAgICAgICAgLy8gU2VuZCBldmVu
dHMgb25seSB0byBvdXIgcGFnZS4KKyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChm
cmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJh
bWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNw
YXRjaFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdl
RXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRVUkkoKSwgc291cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdp
bmRvdygpLT5zZXNzaW9uU3RvcmFnZSgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2Vu
ZCBldmVudHMgdG8gZXZlcnkgcGFnZS4KKyAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBh
Z2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygpOworICAgICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxQYWdl
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3Vy
aXR5T3JpZ2luKCkpKQorICAgICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50
KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tp
XS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7CisgICAgfQorfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsMjEzICsyNCwyMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
dG9yYWdlQXJlYUltcGwuaCIKKyNpbmNsdWRlICJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5o
IgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZUV2ZW50LmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCi0jaW5j
bHVkZSAiU3RvcmFnZU1hcC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0b3JhZ2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1wbCgp
Cit2b2lkIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewotfQotCi1TdG9yYWdlQXJlYUltcGw6OlN0
b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFn
ZXIpCi0gICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQotICAgICwgbV9zZWN1cml0eU9y
aWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCi0g
ICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCi0jZW5kaWYKLXsKLSAgICBBU1NFUlQobV9zZWN1cml0
eU9yaWdpbik7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0KLSAgICAvLyBGSVhNRTogSWYg
dGhlcmUncyBubyBiYWNraW5nIHN0b3JhZ2UgZm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQg
V2ViS2l0IGJlaGF2aW9yIHNob3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAg
Ly8gbm90IHNpbGVudGx5IGlnbm9yaW5nIGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI1ODk0Ci0gICAgaWYgKG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7Ci0gICAg
ICAgIG1fc3RvcmFnZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdl
U3luY01hbmFnZXIsIHRoaXMpOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYVN5bmMpOwot
ICAgIH0KLX0KLQotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6
Y29weSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RvcmFnZUFyZWFJbXBsKHRoaXMpKTsKLX0KLQotU3RvcmFnZUFyZWFJbXBsOjpTdG9y
YWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJbXBsKiBhcmVhKQotICAgIDogbV9zdG9yYWdlVHlwZShh
cmVhLT5tX3N0b3JhZ2VUeXBlKQotICAgICwgbV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3Vy
aXR5T3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKLSAgICAs
IG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQotI2lmbmRl
ZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCi0jZW5kaWYK
LXsKLSAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZU1h
cCk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotfQotCi1zdGF0aWMgYm9vbCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkKEZyYW1lKiBmcmFtZSkKLXsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkK
LSAgICAvLyBUaGUgZnJhbWUgcG9pbnRlciBjYW4gYmUgTlVMTCBpbiBDaHJvbWl1bSBzaW5jZSB0
aGlzIGNhbGwgaXMgbWFkZSBpbiBhIGRpZmZlcmVudAotICAgIC8vIHByb2Nlc3MgZnJvbSB3aGVy
ZSB0aGUgRnJhbWUgb2JqZWN0IGV4aXN0cy4gIEx1Y2tpbHksIHByaXZhdGUgYnJvd3NlaW5nIGlz
Ci0gICAgLy8gaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gQ2hyb21pdW0sIHNvIGl0J2QgbmV2
ZXIgcmV0dXJuIHRydWUgYW55d2F5LgotICAgIEFTU0VSVCghZnJhbWUpOwotICAgIHJldHVybiBm
YWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZh
dGVCcm93c2luZ0VuYWJsZWQoKTsKLSNlbmRpZgotfQotCi11bnNpZ25lZCBTdG9yYWdlQXJlYUlt
cGw6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJl
dHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwotfQotCi1TdHJpbmcgU3RvcmFnZUFyZWFJbXBs
OjprZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotICAgIHJldHVybiBtX3N0b3JhZ2VN
YXAtPmtleShpbmRleCk7Ci19Ci0KLVN0cmluZyBTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0oY29u
c3QgU3RyaW5nJiBrZXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAg
IGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+
Z2V0SXRlbShrZXkpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1l
KiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgQVNTRVJUKCF2YWx1
ZS5pc051bGwoKSk7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICBpZiAo
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpIHsKLSAgICAgICAgZWMgPSBRVU9UQV9FWENF
RURFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRm9yIExv
Y2FsU3RvcmFnZSB3aGVyZSBhIGRpc2sgcXVvdGEgd2lsbCBiZSBlbmZvcmNlZCwgaGVyZSBpcyB3
aGVyZSB3ZSBuZWVkIHRvIGRvIHF1b3RhIGNoZWNraW5nLgotICAgIC8vICAgICAgICBJZiB3ZSBk
ZWNpZGUgdG8gZW5mb3JjZSBhIG1lbW9yeSBxdW90YSBmb3IgU2Vzc2lvblN0b3JhZ2UsIHRoaXMg
aXMgd2hlcmUgd2UnZCBkbyB0aGF0LCBhbHNvLgotICAgIC8vIGlmICg8b3ZlciBxdW90YT4pIHsK
LSAgICAvLyAgICAgZWMgPSBRVU9UQV9FWENFRURFRF9FUlI7Ci0gICAgLy8gICAgIHJldHVybjsK
LSAgICAvLyB9Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+
IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSk7Ci0K
LSAgICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgp
OwotCi0gICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxs
eSBjaGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgIGlmIChtX3N0
b3JhZ2VBcmVhU3luYykKLSAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0
ZW1Gb3JTeW5jKGtleSwgdmFsdWUpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXks
IG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYUlt
cGw6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBB
U1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0K
LSAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0g
bV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwotICAgIGlmIChuZXdNYXAp
Ci0gICAgICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7Ci0KLSAgICAvLyBPbmx5
IG5vdGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVhbGx5IHJlbW92ZWQKLSAgICBp
ZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykK
LSAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwg
U3RyaW5nKCkpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBT
dHJpbmcoKSwgZnJhbWUpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFy
KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChm
cmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6
OmNyZWF0ZSgpOwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3Jh
Z2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0
cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIGZyYW1lKTsKLX0KLQotYm9vbCBTdG9yYWdlQXJl
YUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIEFTU0VSVCgh
bV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLQotICAgIHJl
dHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJ
bXBsOjppbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0
ZW0oa2V5LCB2YWx1ZSk7Ci19Ci0KLVNlY3VyaXR5T3JpZ2luKiBTdG9yYWdlQXJlYUltcGw6OnNl
Y3VyaXR5T3JpZ2luKCkKLXsKLSAgICByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsKLX0K
LQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJl
YVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1faXNTaHV0ZG93biA9IHRydWU7Ci0jZW5kaWYKLX0KLQot
dm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpk
aXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRW
YWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIEZJWE1FOiBFdmVudHMgYXJlIGN1cnJlbnRseSBi
cm9rZW4gaW4gQ2hyb21pdW0uCi0gICAgcmV0dXJuOwotI2VuZGlmCi0KICAgICBQYWdlKiBwYWdl
ID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsK
QEAgLTIzOCwxMCArNDcsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFn
ZUV2ZQogICAgIC8vIFdlIG5lZWQgdG8gY29weSBhbGwgcmVsZXZhbnQgZnJhbWVzIGZyb20gZXZl
cnkgcGFnZSB0byBhIHZlY3RvciBzaW5jZSBzZW5kaW5nIHRoZSBldmVudCB0byBvbmUgZnJhbWUg
bWlnaHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCiAgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4g
dGhlIGdyb3VwIG9yIG11dGF0ZSB0aGUgcGFnZSBncm91cCBpdHNlbGYuCiAgICAgVmVjdG9yPFJl
ZlB0cjxGcmFtZT4gPiBmcmFtZXM7Ci0gICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0
b3JhZ2UpIHsKKyAgICBpZiAoc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAg
ICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KICAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICBpZiAo
ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2lu
KSkKICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgfQogCkBA
IC0yNTMsNyArNjIsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGlzcGF0Y2hTdG9yYWdlRXZl
CiAgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQo
KTsKICAgICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAg
ICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0
eU9yaWdpbikpCiAgICAgICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckltcGwuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVySW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
dG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbF9oCisjZGVmaW5lIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXJJbXBsX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUgIlN0b3JhZ2VF
dmVudERpc3BhdGNoZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlckltcGwgOiBwdWJsaWMgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1w
bCgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdW
YWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsK
KyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKKyNlbmRpZiAvLyBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbF9oCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKICAg
ICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOwog
CiAgICAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgcmVxdWlyZWQgZm9yIENocm9taXVtIHNpbmNlIHRo
ZXNlIGFjdGlvbnMgbmVlZCB0byBiZSBwcm94aWVkIGJldHdlZW4gcHJvY2Vzc2VzLgogICAgIGNs
YXNzIFN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlTmFtZXNwYWNl
PiB7CkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKTsK
IAogICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlKCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEo
U2VjdXJpdHlPcmlnaW4qLCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyKikgPSAwOwogICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpID0gMDsKICAgICAgICAg
dmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCkg
PSAwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZp
c2lvbiA0ODM1NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBTdG9yYWdlTmFtZQogICAgIHJldHVybiBhZG9wdFJlZihuZXdOYW1lc3BhY2UpOwogfQog
Ci1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyKiBldmVudERpc3BhdGNoZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CkBAIC0xMDgsNyArMTA4LDcg
QEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZQogICAgIGlmIChzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBz
dG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAKLSAgICBzdG9yYWdlQXJlYSA9IGFkb3B0UmVmKG5ldyBT
dG9yYWdlQXJlYUltcGwobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2VyKSk7Cisg
ICAgc3RvcmFnZUFyZWEgPSBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJbXBsKG1fc3RvcmFnZVR5
cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlciwgZXZlbnREaXNwYXRjaGVyKSk7CiAgICAgbV9zdG9y
YWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0b3JhZ2VB
cmVhLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5oCShyZXZpc2lvbiA0ODM1NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UoKTsKIAogICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlSW1w
bCgpOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luKik7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyKik7
CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5sb2Nr
KCk7
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39622</attachid>
            <date>2009-09-15 16:42:23 -0700</date>
            <delta_ts>2009-09-21 14:40:07 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29257-20090915164220.patch</filename>
            <type>text/plain</type>
            <size>42818</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDktMTQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hyb21pdW0gbmVlZHMgdG8gYmUgYWJsZSB0byBpbmplY3QgaXRzIG93biBzdG9yYWdlIGV2ZW50
IGhhbmRsZXIgaW50byBTdG9yYWdlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNTcKKworICAgICAgICBDaHJvbWl1bSBuZWVkcyB0byBiZSBh
YmxlIHRvIGluamVjdCBpdHMgb3duIHN0b3JhZ2UgZXZlbnQgaGFuZGxlciBpbnRvCisgICAgICAg
IFN0b3JhZ2VBcmVhSW1wbC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgcHJvY2VzcyB0aGUgU3RvcmFn
ZUFyZWFJbXBsIHJ1bnMgaW4gaXMKKyAgICAgICAgbm90IHRoZSBzYW1lIHByb2Nlc3MgdGhhdCB0
aGUgZXZlbnRzIG5lZWQgdG8gYmUgZGlzcGF0Y2hlZCB0by4KKworICAgICAgICBBbHNvIGEgYml0
IG9mIGRlYWQgY29kZSAoYW5kIHByZS1wcm9jZXNzb3IpIGNsZWFudXAuCisKKyAgICAgICAgQmVo
YXZpb3Igc2hvdWxkIG5vdCBoYXZlIGNoYW5nZWQsIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2Vz
c2lvblN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Up
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpj
bGVhcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaDoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjp+U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcik6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6On5TdG9yYWdlRXZlbnREaXNw
YXRjaGVySW1wbCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAwOS0wOS0xNCAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA0ODM1NykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTIyMjIsNiArMjIyMiw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUV2ZW50LmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKKwlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlckltcGwuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMwMTQsNiArMzAxNCw5IEBACiAgICAgICAg
ICAgICAnc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9T
dG9yYWdlRXZlbnQuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VFdmVudC5oJywK
KyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCcsCisgICAgICAg
ICAgICAnc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAnLAorICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TdG9yYWdlTWFwLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlTWFw
LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAnLApJbmRleDog
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wJKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsNiArMTA1Niw3IEBAIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
Y3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAogICAgICAgICBzdG9yYWdl
L1N0b3JhZ2VFdmVudC5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYWNoZXJJ
bXBsLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1h
cC5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDgzNTcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTEwMCw2ICszMTEwMCwxOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdl
RXZlbnREaXNwYXRjaGVySW1wbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlTWFwLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUwMiw2ICs0NTAyLDkgQEAKIAkJQzUxNjBFRUIx
MDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0
b3JhZ2VBcmVhSW1wbC5oICovOyB9OwogCQlDNTVFMzhCRjEwMDQwRDVEMDBBNTZCREIgLyogU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1w
bC5oICovOyB9OwogCQlDNTVFMzhDMDEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU1RTM4QkMxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLzsg
fTsKKwkJQzVFQkREODMxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
RUJERDgwMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAg
Ki87IH07CisJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRj
aGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUVC
REQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovOyB9Owor
CQlDNUVCREQ4NTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgy
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oICovOyB9Owog
CQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5
QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2
RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFB
MjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUNF
NTRGRDM4MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U1NEZEMzcxMDE2RDlBNjAw
OEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1OTAsNiArOTU5Myw5IEBACiAJCUM1MTYwRUU5
MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIg
LyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNUVCREQ4MDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUVC
REQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1RUJERDgyMTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBBMDAw
QjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRT
b3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRT
b3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOTksNiAr
MTAyMDUsOSBAQAogCQkJCTUxRTBCQUJBMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQu
Y3BwICovLAogCQkJCTUxRTBCQUI5MERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaCAq
LywKIAkJCQk1MUUwQkFCRDBEQTU1NDg0MDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAqLywK
KwkJCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5o
ICovLAorCQkJCUM1RUJERDgwMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRj
aGVySW1wbC5jcHAgKi8sCisJCQkJQzVFQkREODIxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsLmggKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlFNDE3IC8q
IFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9y
YWdlTWFwLmggKi8sCiAJCQkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1l
c3BhY2UuY3BwICovLApAQCAtMTc3OTksNiArMTc4MDgsOCBAQAogCQkJCTUxMEQ0QTRGMTAzMTc3
QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBE
NEE1MDEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFBQkFFNDUxMDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFr
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3Jh
Z2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1RUJERDg1MTA1RURERUMw
MDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xOTkyNSw2ICsxOTkzNiw3IEBACiAJCQkJNTlDNzdGMkExMDU0NUIzQjAwNTA2MTA0IC8qIEdl
b2xvY2F0aW9uU2VydmljZU1vY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwRDRBNEUxMDMx
NzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFBQkFFNDQxMDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlDNUVCREQ4MzEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNp
b24gNDgzNTcpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiRE9NVGltZXIuaCIKICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCkBAIC01
NSw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiTWVkaWEuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQu
aCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25DZW50ZXIu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TY3JlZW4uaCIKQEAgLTYyLDI5ICs2NSwxNSBAQAogI2luY2x1ZGUgIlNjcmVlbi5o
IgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJT
dG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2Uu
aCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgIldlYktpdFBvaW50
LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
LSNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIlN0b3JhZ2UuaCIKLSNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJET01BcHBsaWNh
dGlvbkNhY2hlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgotI2VuZGlmCi0KIHVzaW5nIHN0ZDo6bWluOwogdXNp
bmcgc3RkOjptYXg7CiAKQEAgLTU2NSw3ICs1NTQsNyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OnNl
c3Npb25TdG9yYWdlKCkgY29uCiAgICAgaWYgKCFwYWdlLT5zZXR0aW5ncygpLT5zZXNzaW9uU3Rv
cmFnZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8U3RvcmFnZUFy
ZWE+IHN0b3JhZ2VBcmVhID0gcGFnZS0+c2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEoZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFn
ZUFyZWEgPSBwYWdlLT5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKSwgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6OmNyZWF0ZSgpKTsKICAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFy
ZWEuZ2V0KCksIGZhbHNlLCBtX2ZyYW1lKTsKIAogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBTdG9y
YWdlOjpjcmVhdGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsKQEAgLTU4OCwxMyAr
NTc3LDEwIEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICAgICBp
ZiAoIXBhZ2UtPnNldHRpbmdzKCktPmxvY2FsU3RvcmFnZUVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UgPSBwYWdlLT5ncm91
cCgpLmxvY2FsU3RvcmFnZSgpOwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBsb2NhbFN0b3JhZ2UgPyBsb2NhbFN0b3JhZ2UtPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpKSA6IDA7IAotICAgIGlmIChzdG9yYWdlQXJlYSkgewotICAgICAgICBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFyZWEuZ2V0
KCksIHRydWUsIG1fZnJhbWUpOwotICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2U6OmNy
ZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBSZWZQdHI8
U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gcGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKS0+
c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXJJbXBsOjpjcmVhdGUoKSk7IAorICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
ZGlkVXNlRE9NU3RvcmFnZShzdG9yYWdlQXJlYS5nZXQoKSwgdHJ1ZSwgbV9mcmFtZSk7CiAKKyAg
ICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5y
ZWxlYXNlKCkpOwogICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZS5nZXQoKTsKIH0KICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDQ4MzU3KQorKysg
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDE1ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRlICJET01X
aW5kb3cuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5
bmMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5h
Z2VyLmgiCkBAIC00NywxMCArNDEsMTEgQEAgU3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJ
bXBsKCkKIHsKIH0KIAotU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5
cGUgc3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgUGFzc1Jl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorU3RvcmFnZUFyZWFJbXBsOjpT
dG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5h
Z2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VFdmVudERpc3BhdGNoZXI+IGV2ZW50RGlzcGF0Y2hlcikK
ICAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2lu
KG9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKKyAgICAs
IG1fZXZlbnREaXNwYXRjaGVyKGV2ZW50RGlzcGF0Y2hlcikKICAgICAsIG1fc3RvcmFnZVN5bmNN
YW5hZ2VyKHN5bmNNYW5hZ2VyKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1faXNTaHV0ZG93bihm
YWxzZSkKQEAgLTU4LDYgKzUzLDcgQEAgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZQogewogICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKICAgICBBU1NFUlQobV9z
dG9yYWdlTWFwKTsKKyAgICBBU1NFUlQobV9ldmVudERpc3BhdGNoZXIpOwogCiAgICAgLy8gRklY
TUU6IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBk
ZWZhdWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5n
LAogICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NApAQCAtNzcsNiArNzMsNyBAQCBTdG9yYWdlQXJlYUlt
cGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlCiAgICAgOiBtX3N0b3JhZ2VUeXBlKGFyZWEtPm1f
c3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKGFyZWEtPm1fc2VjdXJpdHlPcmln
aW4pCiAgICAgLCBtX3N0b3JhZ2VNYXAoYXJlYS0+bV9zdG9yYWdlTWFwKQorICAgICwgbV9ldmVu
dERpc3BhdGNoZXIoYXJlYS0+bV9ldmVudERpc3BhdGNoZXIpCiAgICAgLCBtX3N0b3JhZ2VTeW5j
TWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdlcikKICNpZm5kZWYgTkRFQlVHCiAgICAg
LCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQpAQCAtODQsNiArODEsNyBAQCBTdG9y
YWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlCiB7CiAgICAgQVNTRVJUKG1fc2Vj
dXJpdHlPcmlnaW4pOwogICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOworICAgIEFTU0VSVChtX2V2
ZW50RGlzcGF0Y2hlcik7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogfQogCkBAIC0xNDks
NyArMTQ3LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oY29uc3QgU3RyaQogICAg
IGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkgewogICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMp
CiAgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXks
IHZhbHVlKTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFs
dWUsIGZyYW1lKTsKKyAgICAgICAgbV9ldmVudERpc3BhdGNoZXItPmRpc3BhdGNoU3RvcmFnZUV2
ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2lu
LmdldCgpLCBmcmFtZSk7CiAgICAgfQogfQogCkBAIC0xNzAsNyArMTY4LDcgQEAgdm9pZCBTdG9y
YWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0oY29uc3QgUwogICAgIGlmICghb2xkVmFsdWUuaXNOdWxs
KCkpIHsKICAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQogICAgICAgICAgICAgbV9zdG9y
YWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7Ci0gICAgICAg
IGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBmcmFtZSk7Cisg
ICAgICAgIG1fZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZh
bHVlLCBTdHJpbmcoKSwgbV9zdG9yYWdlVHlwZSwgbV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgZnJh
bWUpOwogICAgIH0KIH0KIApAQCAtMTg2LDcgKzE4NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBs
OjpjbGVhcihGcmFtZSogZnJhbWUKIAogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAgICAg
ICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKLSAgICBkaXNwYXRjaFN0b3Jh
Z2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBmcmFtZSk7CisgICAgbV9ldmVu
dERpc3BhdGNoZXItPmRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwgU3Ry
aW5nKCksIG1fc3RvcmFnZVR5cGUsIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZyYW1lKTsKIH0K
IAogYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dApAQCAtMjI0LDQ1ICsyMjIsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbElt
cG9ydENvCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxl
dGUoKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0g
ICAgLy8gRklYTUU6IEV2ZW50cyBhcmUgY3VycmVudGx5IGJyb2tlbiBpbiBDaHJvbWl1bS4KLSAg
ICByZXR1cm47Ci0jZW5kaWYKLQotICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgp
OwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbmVlZCB0byBj
b3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNl
IHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRy
ZWUKLSAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBw
YWdlIGdyb3VwIGl0c2VsZi4KLSAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKLSAg
ICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgewotICAgICAgICAvLyBTZW5k
IGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBmcmFtZXMuYXBw
ZW5kKGZyYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmcmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCkt
PmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0
b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVu
dCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+
ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgotICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2Uq
PiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0
PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwo
c2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJh
bWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGZyYW1lc1tpXS0+ZG9j
dW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUt
PmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJh
bWVzW2ldLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCkpKTsKLSAgICB9Ci19Ci0KIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJ
bXBsLmgJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQogCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQwLDcgKzQxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU3RvcmFnZUFyZWFJbXBsIDogcHVi
bGljIFN0b3JhZ2VBcmVhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0b3JhZ2VBcmVhSW1wbChT
dG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwg
UGFzc1JlZlB0cjxTdG9yYWdlRXZlbnREaXNwYXRjaGVyPik7CiAgICAgICAgIHZpcnR1YWwgflN0
b3JhZ2VBcmVhSW1wbCgpOwogCiAgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBBUEkg
KGFuZCBjb250YWlucykKQEAgLTY0LDExICs2NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKIAotICAgICAg
ICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUp
OwotCiAgICAgICAgIFN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7CiAgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKICAgICAgICAgUmVmUHRyPFN0b3JhZ2VN
YXA+IG1fc3RvcmFnZU1hcDsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VFdmVudERpc3BhdGNoZXI+
IG1fZXZlbnREaXNwYXRjaGVyOwogCiAgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1f
c3RvcmFnZUFyZWFTeW5jOwogICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0
b3JhZ2VTeW5jTWFuYWdlcjsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNw
YXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3Bh
dGNoZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNw
YXRjaGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXJfaAorI2RlZmluZSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyX2gKKworI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICAvLyBUaGlzIGludGVyZmFjZSBpcyByZXF1aXJlZCBmb3IgQ2hyb21pdW0g
c2luY2UgdGhlc2UgYWN0aW9ucyBuZWVkIHRvIGJlIHByb3hpZWQgYmV0d2VlbiBwcm9jZXNzZXMu
CisgICAgY2xhc3MgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVkPFN0
b3JhZ2VFdmVudERpc3BhdGNoZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflN0
b3JhZ2VFdmVudERpc3BhdGNoZXIoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIEZy
YW1lKiBzb3VyY2VGcmFtZSkgPSAwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXJfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNo
ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlckltcGwuY3BwCShyZXZpc2lvbiA0ODM1NykJKGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5jcHA6NDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0
b3JhZ2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1wbCgpCit7Cit9CisKK1N0b3JhZ2VBcmVhSW1w
bDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5j
TWFuYWdlcikKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3Vy
aXR5T3JpZ2luKG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUo
KSkKKyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVC
VUcKKyAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX3Nl
Y3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsKKworICAgIC8vIEZJWE1F
OiBJZiB0aGVyZSdzIG5vIGJhY2tpbmcgc3RvcmFnZSBmb3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVm
YXVsdCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywK
KyAgICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKKyAgICBpZiAobV9zdG9yYWdlU3luY01hbmFnZXIpIHsK
KyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMgPSBTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShtX3N0
b3JhZ2VTeW5jTWFuYWdlciwgdGhpcyk7CisgICAgICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhU3lu
Yyk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gU3RvcmFnZUFyZWFJ
bXBsOjpjb3B5KCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdG9yYWdlQXJlYUltcGwodGhpcykpOworfQorCitTdG9yYWdlQXJlYUltcGw6
OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYUltcGwqIGFyZWEpCisgICAgOiBtX3N0b3JhZ2VU
eXBlKGFyZWEtPm1fc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKGFyZWEtPm1f
c2VjdXJpdHlPcmlnaW4pCisgICAgLCBtX3N0b3JhZ2VNYXAoYXJlYS0+bV9zdG9yYWdlTWFwKQor
ICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoYXJlYS0+bV9zdG9yYWdlU3luY01hbmFnZXIpCisj
aWZuZGVmIE5ERUJVRworICAgICwgbV9pc1NodXRkb3duKGFyZWEtPm1faXNTaHV0ZG93bikKKyNl
bmRpZgoreworICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9y
YWdlTWFwKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cit9CisKK3N0YXRpYyBib29sIHBy
aXZhdGVCcm93c2luZ0VuYWJsZWQoRnJhbWUqIGZyYW1lKQoreworI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorICAgIC8vIFRoZSBmcmFtZSBwb2ludGVyIGNhbiBiZSBOVUxMIGluIENocm9taXVtIHNp
bmNlIHRoaXMgY2FsbCBpcyBtYWRlIGluIGEgZGlmZmVyZW50CisgICAgLy8gcHJvY2VzcyBmcm9t
IHdoZXJlIHRoZSBGcmFtZSBvYmplY3QgZXhpc3RzLiAgTHVja2lseSwgcHJpdmF0ZSBicm93c2Vp
bmcgaXMKKyAgICAvLyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBpbiBDaHJvbWl1bSwgc28gaXQn
ZCBuZXZlciByZXR1cm4gdHJ1ZSBhbnl3YXkuCisgICAgQVNTRVJUKCFmcmFtZSk7CisgICAgcmV0
dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworI2VuZGlmCit9CisKK3Vuc2lnbmVkIFN0b3JhZ2VB
cmVhSW1wbDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cisg
ICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7Cit9CisKK1N0cmluZyBTdG9yYWdlQXJl
YUltcGw6OmtleSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgcmV0dXJuIG1fc3Rv
cmFnZU1hcC0+a2V5KGluZGV4KTsKK30KKworU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRl
bShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7
CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICByZXR1cm4gbV9zdG9yYWdl
TWFwLT5nZXRJdGVtKGtleSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywg
RnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBBU1NFUlQo
IXZhbHVlLmlzTnVsbCgpKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAg
IGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZyYW1lKSkgeworICAgICAgICBlYyA9IFFVT1RB
X0VYQ0VFREVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBG
b3IgTG9jYWxTdG9yYWdlIHdoZXJlIGEgZGlzayBxdW90YSB3aWxsIGJlIGVuZm9yY2VkLCBoZXJl
IGlzIHdoZXJlIHdlIG5lZWQgdG8gZG8gcXVvdGEgY2hlY2tpbmcuCisgICAgLy8gICAgICAgIElm
IHdlIGRlY2lkZSB0byBlbmZvcmNlIGEgbWVtb3J5IHF1b3RhIGZvciBTZXNzaW9uU3RvcmFnZSwg
dGhpcyBpcyB3aGVyZSB3ZSdkIGRvIHRoYXQsIGFsc28uCisgICAgLy8gaWYgKDxvdmVyIHF1b3Rh
PikgeworICAgIC8vICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAgICAvLyAgICAgcmV0
dXJuOworICAgIC8vIH0KKworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBSZWZQdHI8U3RvcmFn
ZU1hcD4gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVl
KTsKKworICAgIGlmIChuZXdNYXApCisgICAgICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxl
YXNlKCk7CisKKyAgICAvLyBPbmx5IG5vdGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFj
dHVhbGx5IGNoYW5nZWQKKyAgICBpZiAob2xkVmFsdWUgIT0gdmFsdWUpIHsKKyAgICAgICAgaWYg
KG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVk
dWxlSXRlbUZvclN5bmMoa2V5LCB2YWx1ZSk7CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50
KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBmcmFtZSk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQorewor
ICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KTsKKworICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZyYW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdN
YXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgaWYgKG5l
d01hcCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2UoKTsKKworICAgIC8v
IE9ubHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRlbSB3YXMgYWN0dWFsbHkgcmVtb3ZlZAor
ICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFT
eW5jKQorICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMo
a2V5LCBTdHJpbmcoKSk7CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFs
dWUsIFN0cmluZygpLCBmcmFtZSk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6
Y2xlYXIoRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBi
bG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFi
bGVkKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFn
ZU1hcDo6Y3JlYXRlKCk7CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1f
c3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZl
bnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgZnJhbWUpOworfQorCitib29sIFN0b3Jh
Z2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworCisg
ICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKK30KKwordm9pZCBTdG9yYWdl
QXJlYUltcGw6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIG1fc3RvcmFnZU1hcC0+aW1w
b3J0SXRlbShrZXksIHZhbHVlKTsKK30KKworU2VjdXJpdHlPcmlnaW4qIFN0b3JhZ2VBcmVhSW1w
bDo6c2VjdXJpdHlPcmlnaW4oKQoreworICAgIHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgp
OworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5j
KCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyNlbmRpZgor
fQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29u
c3QKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit7
CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8gRklYTUU6IEV2ZW50cyBhcmUgY3VycmVu
dGx5IGJyb2tlbiBpbiBDaHJvbWl1bS4KKyAgICByZXR1cm47CisjZW5kaWYKKworICAgIFBhZ2Uq
IHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBl
dmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFt
ZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRyZWUKKyAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBp
biB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBwYWdlIGdyb3VwIGl0c2VsZi4KKyAgICBWZWN0b3I8
UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9u
U3RvcmFnZSkgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgorICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkK
KyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3
VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFt
ZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgor
ICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2Vz
KCk7CisgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5l
bmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
YWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChT
dG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNv
dXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+bG9jYWxTdG9y
YWdlKCkpKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNw
cAkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyMTMgKzI0LDIyIEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmgiCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKLSNp
bmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCi0jaW5j
bHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3Rv
cmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKCkKK3ZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlckltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBGcmFtZSogc291cmNlRnJh
bWUpCiB7Ci19Ci0KLVN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBl
IHN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQ
dHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKLSAgICA6IG1fc3RvcmFnZVR5cGUo
c3RvcmFnZVR5cGUpCi0gICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKLSAgICAsIG1fc3Rv
cmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKLSAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2Vy
KHN5bmNNYW5hZ2VyKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkK
LSNlbmRpZgotewotICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKLSAgICBBU1NFUlQobV9z
dG9yYWdlTWFwKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGVyZSdzIG5vIGJhY2tpbmcgc3RvcmFn
ZSBmb3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJl
IHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKLSAgICAvLyBub3Qgc2lsZW50bHkgaWdub3Jpbmcg
aXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKLSAgICBp
ZiAobV9zdG9yYWdlU3luY01hbmFnZXIpIHsKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMgPSBT
dG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShtX3N0b3JhZ2VTeW5jTWFuYWdlciwgdGhpcyk7Ci0gICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhU3luYyk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhSW1wbD4gU3RvcmFnZUFyZWFJbXBsOjpjb3B5KCkKLXsKLSAgICBBU1NFUlQoIW1f
aXNTaHV0ZG93bik7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYUltcGwodGhp
cykpOwotfQotCi1TdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYUlt
cGwqIGFyZWEpCi0gICAgOiBtX3N0b3JhZ2VUeXBlKGFyZWEtPm1fc3RvcmFnZVR5cGUpCi0gICAg
LCBtX3NlY3VyaXR5T3JpZ2luKGFyZWEtPm1fc2VjdXJpdHlPcmlnaW4pCi0gICAgLCBtX3N0b3Jh
Z2VNYXAoYXJlYS0+bV9zdG9yYWdlTWFwKQotICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoYXJl
YS0+bV9zdG9yYWdlU3luY01hbmFnZXIpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9pc1NodXRk
b3duKGFyZWEtPm1faXNTaHV0ZG93bikKLSNlbmRpZgotewotICAgIEFTU0VSVChtX3NlY3VyaXR5
T3JpZ2luKTsKLSAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsKLSAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7Ci19Ci0KLXN0YXRpYyBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQoRnJhbWUqIGZy
YW1lKQotewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIFRoZSBmcmFtZSBwb2ludGVy
IGNhbiBiZSBOVUxMIGluIENocm9taXVtIHNpbmNlIHRoaXMgY2FsbCBpcyBtYWRlIGluIGEgZGlm
ZmVyZW50Ci0gICAgLy8gcHJvY2VzcyBmcm9tIHdoZXJlIHRoZSBGcmFtZSBvYmplY3QgZXhpc3Rz
LiAgTHVja2lseSwgcHJpdmF0ZSBicm93c2VpbmcgaXMKLSAgICAvLyBpbXBsZW1lbnRlZCBkaWZm
ZXJlbnRseSBpbiBDaHJvbWl1bSwgc28gaXQnZCBuZXZlciByZXR1cm4gdHJ1ZSBhbnl3YXkuCi0g
ICAgQVNTRVJUKCFmcmFtZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICByZXR1cm4g
ZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotI2Vu
ZGlmCi19Ci0KLXVuc2lnbmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3Ro
KCk7Ci19Ci0KLVN0cmluZyBTdG9yYWdlQXJlYUltcGw6OmtleSh1bnNpZ25lZCBpbmRleCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCk7Ci0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+a2V5KGluZGV4KTsKLX0KLQotU3Ry
aW5nIFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRl
KCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5nZXRJdGVtKGtleSk7Ci19Ci0KLXZvaWQg
U3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVCgh
bV9pc1NodXRkb3duKTsKLSAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKLSAgICBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKTsKLQotICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZy
YW1lKSkgewotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBGb3IgTG9jYWxTdG9yYWdlIHdoZXJlIGEgZGlzayBx
dW90YSB3aWxsIGJlIGVuZm9yY2VkLCBoZXJlIGlzIHdoZXJlIHdlIG5lZWQgdG8gZG8gcXVvdGEg
Y2hlY2tpbmcuCi0gICAgLy8gICAgICAgIElmIHdlIGRlY2lkZSB0byBlbmZvcmNlIGEgbWVtb3J5
IHF1b3RhIGZvciBTZXNzaW9uU3RvcmFnZSwgdGhpcyBpcyB3aGVyZSB3ZSdkIGRvIHRoYXQsIGFs
c28uCi0gICAgLy8gaWYgKDxvdmVyIHF1b3RhPikgewotICAgIC8vICAgICBlYyA9IFFVT1RBX0VY
Q0VFREVEX0VSUjsKLSAgICAvLyAgICAgcmV0dXJuOwotICAgIC8vIH0KLQotICAgIFN0cmluZyBv
bGRWYWx1ZTsKLSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5z
ZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlKTsKLQotICAgIGlmIChuZXdNYXApCi0gICAgICAg
IG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7Ci0KLSAgICAvLyBPbmx5IG5vdGlmeSB0
aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVhbGx5IGNoYW5nZWQKLSAgICBpZiAob2xkVmFs
dWUgIT0gdmFsdWUpIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICAg
ICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCB2YWx1ZSk7Ci0g
ICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBmcmFtZSk7
Ci0gICAgfQotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAg
ICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLQotICAgIGlmIChwcml2YXRlQnJvd3NpbmdF
bmFibGVkKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG9sZFZhbHVlOwot
ICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0o
a2V5LCBvbGRWYWx1ZSk7Ci0gICAgaWYgKG5ld01hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0g
bmV3TWFwLnJlbGVhc2UoKTsKLQotICAgIC8vIE9ubHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4g
aXRlbSB3YXMgYWN0dWFsbHkgcmVtb3ZlZAotICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsK
LSAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICAgICAgbV9zdG9yYWdlQXJl
YVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7Ci0gICAgICAgIGRpc3Bh
dGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBmcmFtZSk7Ci0gICAgfQot
fQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1lKQotewotICAgIEFT
U0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLQot
ICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAobV9z
dG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFy
KCk7Ci0gICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmco
KSwgZnJhbWUpOwotfQotCi1ib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3Ry
aW5nJiBrZXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFp
bnMoa2V5KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOwotICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbShrZXksIHZhbHVlKTsKLX0KLQotU2Vj
dXJpdHlPcmlnaW4qIFN0b3JhZ2VBcmVhSW1wbDo6c2VjdXJpdHlPcmlnaW4oKQotewotICAgIHJl
dHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6
Y2xvc2UoKQotewotICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKLSAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9p
c1NodXRkb3duID0gdHJ1ZTsKLSNlbmRpZgotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Ymxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAg
Ly8gRklYTUU6IEV2ZW50cyBhcmUgY3VycmVudGx5IGJyb2tlbiBpbiBDaHJvbWl1bS4KLSAgICBy
ZXR1cm47Ci0jZW5kaWYKLQogICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOwog
ICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDEwICs0NywxMCBAQCB2b2lk
IFN0b3JhZ2VBcmVhSW1wbDo6ZGlzcGF0Y2hTdG9yYWdlRXZlCiAgICAgLy8gV2UgbmVlZCB0byBj
b3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNl
IHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRy
ZWUKICAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBw
YWdlIGdyb3VwIGl0c2VsZi4KICAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKLSAg
ICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgeworICAgIGlmIChzdG9yYWdl
VHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgewogICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRv
IG91ciBwYWdlLgogICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1
cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQogICAgICAgICAgICAgICAgIGZyYW1l
cy5hcHBlbmQoZnJhbWUpOwogICAgICAgICB9CiAKQEAgLTI1Myw3ICs2Miw3IEBAIHZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmUKICAgICAgICAgSGFzaFNldDxQYWdlKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hTZXQ8
UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChz
ZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKSkKICAgICAgICAgICAgICAg
ICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBs
X2gKKyNkZWZpbmUgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGxfaAorCisjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQorCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbCA6
IHB1YmxpYyBTdG9yYWdlRXZlbnREaXNwYXRjaGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VFdmVudERpc3BhdGNoZXI+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbCk7IH0KKyAgICAgICAgdmly
dHVhbCB+U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwoKSB7IH0KKworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0
eU9yaWdpbiosIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBT
dG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbCgpIHsgfQorICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0
b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2UuaAkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3JhZ2VBcmVhOworICAg
IGNsYXNzIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI7CiAKICAgICAvLyBUaGlzIGludGVyZmFjZSBp
cyByZXF1aXJlZCBmb3IgQ2hyb21pdW0gc2luY2UgdGhlc2UgYWN0aW9ucyBuZWVkIHRvIGJlIHBy
b3hpZWQgYmV0d2VlbiBwcm9jZXNzZXMuCiAgICAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VOYW1lc3BhY2U+IHsKQEAgLTQ1LDcgKzQ2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCiAgICAgICAgIHZpcnR1YWwgflN0b3Jh
Z2VOYW1lc3BhY2UoKSB7IH0KLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQ
dHI8U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcj4pID0gMDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBj
bG9zZSgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpID0gMDsKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24gNDgzNTcpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5h
bWUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3TmFtZXNwYWNlKTsKIH0KIAotUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdl
RXZlbnREaXNwYXRjaGVyPiBldmVudERpc3BhdGNoZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CkBAIC0xMDgsNyArMTA4LDcgQEAg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZQogICAgIGlmIChzdG9yYWdl
QXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBzdG9y
YWdlQXJlYS5yZWxlYXNlKCk7CiAKLSAgICBzdG9yYWdlQXJlYSA9IGFkb3B0UmVmKG5ldyBTdG9y
YWdlQXJlYUltcGwobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2VyKSk7CisgICAg
c3RvcmFnZUFyZWEgPSBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJbXBsKG1fc3RvcmFnZVR5cGUs
IG9yaWdpbiwgbV9zeW5jTWFuYWdlciwgZXZlbnREaXNwYXRjaGVyKSk7CiAgICAgbV9zdG9yYWdl
QXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0b3JhZ2VBcmVh
LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5o
CShyZXZpc2lvbiA0ODM1NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UoKTsKIAogICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlSW1wbCgp
OwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKik7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4g
c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXI+KTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNv
cHkoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCB1bmxvY2soKTs=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39879</attachid>
            <date>2009-09-21 14:40:41 -0700</date>
            <delta_ts>2009-09-22 15:20:29 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29257-20090921144040.patch</filename>
            <type>text/plain</type>
            <size>45848</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDktMjEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hyb21pdW0gbmVlZHMgdG8gYmUgYWJsZSB0byBpbmplY3QgaXRzIG93biBzdG9yYWdlIGV2ZW50
IGhhbmRsZXIgaW50byBTdG9yYWdlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNTcKKworICAgICAgICBDaHJvbWl1bSBuZWVkcyB0byBiZSBh
YmxlIHRvIGluamVjdCBpdHMgb3duIHN0b3JhZ2UgZXZlbnQgaGFuZGxlciBpbnRvCisgICAgICAg
IFN0b3JhZ2VBcmVhSW1wbC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgcHJvY2VzcyB0aGUgU3RvcmFn
ZUFyZWFJbXBsIHJ1bnMgaW4gaXMKKyAgICAgICAgbm90IHRoZSBzYW1lIHByb2Nlc3MgdGhhdCB0
aGUgZXZlbnRzIG5lZWQgdG8gYmUgZGlzcGF0Y2hlZCB0by4KKworICAgICAgICBBbHNvIGEgYml0
IG9mIGRlYWQgY29kZSAoYW5kIHByZS1wcm9jZXNzb3IpIGNsZWFudXAuCisKKyAgICAgICAgQmVo
YXZpb3Igc2hvdWxkIG5vdCBoYXZlIGNoYW5nZWQsIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2Vz
c2lvblN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Up
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpj
bGVhcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaDoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjp+U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcik6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6On5TdG9yYWdlRXZlbnREaXNw
YXRjaGVySW1wbCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAwOS0wOS0yMSAgRGFyaW4gRmlzaGVyICA8ZGFy
aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNDg1OTIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjI0LDYgKzIyMjQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VFdmVudC5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaCBcCisJV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBcCisJV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VFdmVudERpc3BhdGNoZXJJbXBsLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNw
cCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2UuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMDE3LDYgKzMwMTcsOSBAQAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlRXZlbnQuaCcs
CisgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgnLAorICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwJywKKyAgICAgICAg
ICAgICdzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmgnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZU1h
cC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwJywKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1LDYgKzEwNTUsNyBAQCBUaGlzIGZpbGUgY29udGFp
bnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKICAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlRXZlbnQuY3BwCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGFjaGVy
SW1wbC5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcAogICAgICAgICBz
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VN
YXAuY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDQ4NTkyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzEwNjAsNiArMzEwNjAsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlRXZlbnREaXNwYXRj
aGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlckltcGwuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU1hcC5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDQ4NTkyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1MDIsNiArNDUwMiw5IEBACiAJCUM1MTYwRUVC
MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBT
dG9yYWdlQXJlYUltcGwuaCAqLzsgfTsKIAkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaCAqLzsgfTsKIAkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi87
IH07CisJCUM1RUJERDgzMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVy
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NUVCREQ4MDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3Bw
ICovOyB9OworCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVF
QkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsK
KwkJQzVFQkREODUxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUVCREQ4
MjEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCAqLzsgfTsK
IAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMw
OUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwogCQlD
NkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlB
QTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovOyB9OwogCQlD
RTU0RkQzODEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYw
MDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NTk4LDYgKzk2MDEsOSBAQAogCQlDNTE2MEVF
OTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZUltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1RTM4QkMxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzVFQkREODAxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXJJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzVF
QkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUVCREQ4MjEwNUVEREVDMDA1NjgxNkYgLyogU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0
U291cmNlUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
U291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjIwLDYg
KzEwMjI2LDkgQEAKIAkJCQk1MUUwQkFCQTBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50
LmNwcCAqLywKIAkJCQk1MUUwQkFCOTBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50Lmgg
Ki8sCiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8s
CisJCQkJQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIu
aCAqLywKKwkJCQlDNUVCREQ4MDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlckltcGwuY3BwICovLAorCQkJCUM1RUJERDgyMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdl
RXZlbnREaXNwYXRjaGVySW1wbC5oICovLAogCQkJCTUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAv
KiBTdG9yYWdlTWFwLmNwcCAqLywKIAkJCQk1MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcgLyogU3Rv
cmFnZU1hcC5oICovLAogCQkJCUM1MEQwRTgwMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFt
ZXNwYWNlLmNwcCAqLywKQEAgLTE3ODUzLDYgKzE3ODYyLDggQEAKIAkJCQk1MTBENEE0RjEwMzE3
N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
RDRBNTAxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWxDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxQUJBRTQ1MTA0M0FCNEEwMDhDNTI2MCAvKiBXZWJTb2NrZXRIYW5kc2hh
a2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNUVCREQ4NTEwNUVEREVD
MDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZBQkU3MkY1MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGQUJFNzJGNzEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MSW5saW5lQ29udGFp
bmVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFCRTcyRjkxMDU5QzFFQjAwRDk5OURE
IC8qIE1hdGhNTE1hdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE5OTgwLDYgKzE5OTkx
LDcgQEAKIAkJCQk1MUEwNTIzNDEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0b3JhZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwRDRBNEUxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNv
Y2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQkFFNDQxMDQzQUI0QTAwOEM1
MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNUVCREQ4
MzEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkFCRTcyRjQxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjYxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhN
TElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjgx
MDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTE1hdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDQ4NTkyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1
ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1
ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiUGFn
ZVRyYW5zaXRpb25FdmVudC5oIgpAQCAtNTUsNiArNTcsNyBAQAogI2luY2x1ZGUgIk1lZGlhLmgi
CiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5j
bHVkZSAiTm90aWZpY2F0aW9uQ2VudGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC02MiwyOSArNjUs
MTUgQEAKICNpbmNsdWRlICJTY3JlZW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCIKKyNp
bmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVybWluYXRpb24u
aCIKICNpbmNsdWRlICJXZWJLaXRQb2ludC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSNpbmNsdWRl
ICJTdG9yYWdlLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJTdG9yYWdl
TmFtZXNwYWNlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCi0jaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoTk9USUZJQ0FUSU9OUykKLSNpbmNsdWRlICJOb3RpZmljYXRpb25DZW50ZXIuaCIKLSNlbmRp
ZgotCiB1c2luZyBzdGQ6Om1pbjsKIHVzaW5nIHN0ZDo6bWF4OwogCkBAIC01NjUsNyArNTU0LDcg
QEAgU3RvcmFnZSogRE9NV2luZG93OjpzZXNzaW9uU3RvcmFnZSgpIGNvbgogICAgIGlmICghcGFn
ZS0+c2V0dGluZ3MoKS0+c2Vzc2lvblN0b3JhZ2VFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IHBhZ2UtPnNlc3Npb25T
dG9yYWdlKCktPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gcGFnZS0+c2Vzc2lvblN0b3JhZ2UoKS0+
c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXJJbXBsOjpjcmVhdGUoKSk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFyZWEuZ2V0KCks
IGZhbHNlLCBtX2ZyYW1lKTsKICNlbmRpZgpAQCAtNTkwLDE1ICs1NzksMTIgQEAgU3RvcmFnZSog
RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2UoKSBjb25zdAogICAgIGlmICghcGFnZS0+c2V0dGluZ3Mo
KS0+bG9jYWxTdG9yYWdlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFN0b3Jh
Z2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCk7
Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFnZSA/IGxv
Y2FsU3RvcmFnZS0+c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpIDogMDsg
Ci0gICAgaWYgKHN0b3JhZ2VBcmVhKSB7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdl
QXJlYSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCktPnN0b3JhZ2VBcmVhKGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbDo6Y3JlYXRlKCkp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+ZGlkVXNlRE9NU3RvcmFnZShzdG9yYWdlQXJlYS5nZXQoKSwgdHJ1ZSwgbV9mcmFtZSk7
CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaWRVc2VET01TdG9yYWdlKHN0b3Jh
Z2VBcmVhLmdldCgpLCB0cnVlLCBtX2ZyYW1lKTsKICNlbmRpZgotICAgICAgICBtX2xvY2FsU3Rv
cmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOwot
ICAgIH0KIAorICAgIG1fbG9jYWxTdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKG1fZnJhbWUsIHN0
b3JhZ2VBcmVhLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwog
fQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkocmV2aXNpb24g
NDg1OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTUgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhU3luYy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKICNpbmNsdWRlICJTdG9y
YWdlU3luY01hbmFnZXIuaCIKQEAgLTQ3LDEwICs0MSwxMSBAQCBTdG9yYWdlQXJlYUltcGw6On5T
dG9yYWdlQXJlYUltcGwoKQogewogfQogCi1TdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1w
bChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3Jp
Z2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCitTdG9yYWdl
QXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gc3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcj4gZXZlbnRE
aXNwYXRjaGVyKQogICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKICAgICAsIG1fc2Vj
dXJpdHlPcmlnaW4ob3JpZ2luKQogICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0
ZSgpKQorICAgICwgbV9ldmVudERpc3BhdGNoZXIoZXZlbnREaXNwYXRjaGVyKQogICAgICwgbV9z
dG9yYWdlU3luY01hbmFnZXIoc3luY01hbmFnZXIpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9p
c1NodXRkb3duKGZhbHNlKQpAQCAtNTgsNiArNTMsNyBAQCBTdG9yYWdlQXJlYUltcGw6OlN0b3Jh
Z2VBcmVhSW1wbChTdG9yYWdlCiB7CiAgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOwogICAg
IEFTU0VSVChtX3N0b3JhZ2VNYXApOworICAgIEFTU0VSVChtX2V2ZW50RGlzcGF0Y2hlcik7CiAK
ICAgICAvLyBGSVhNRTogSWYgdGhlcmUncyBubyBiYWNraW5nIHN0b3JhZ2UgZm9yIExvY2FsU3Rv
cmFnZSwgdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3VsZCBiZSB0aGF0IG9mIHByaXZh
dGUgYnJvd3NpbmcsCiAgICAgLy8gbm90IHNpbGVudGx5IGlnbm9yaW5nIGl0LiAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0CkBAIC03Nyw2ICs3Myw3IEBAIFN0
b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2UKICAgICA6IG1fc3RvcmFnZVR5
cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKICAgICAsIG1fc2VjdXJpdHlPcmlnaW4oYXJlYS0+bV9z
ZWN1cml0eU9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCisg
ICAgLCBtX2V2ZW50RGlzcGF0Y2hlcihhcmVhLT5tX2V2ZW50RGlzcGF0Y2hlcikKICAgICAsIG1f
c3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQogI2lmbmRlZiBO
REVCVUcKICAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCkBAIC04NCw2ICs4
MSw3IEBAIFN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2UKIHsKICAgICBB
U1NFUlQobV9zZWN1cml0eU9yaWdpbik7CiAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAg
QVNTRVJUKG1fZXZlbnREaXNwYXRjaGVyKTsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiB9
CiAKQEAgLTE0OSw3ICsxNDcsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25z
dCBTdHJpCiAgICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7CiAgICAgICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKICAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1G
b3JTeW5jKGtleSwgdmFsdWUpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9s
ZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOworICAgICAgICBtX2V2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0
Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIG1fc3RvcmFnZVR5cGUsIG1fc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIGZyYW1lKTsKICAgICB9CiB9CiAKQEAgLTE3MCw3ICsxNjgsNyBA
QCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTCiAgICAgaWYgKCFvbGRW
YWx1ZS5pc051bGwoKSkgewogICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAg
ICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygp
KTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCks
IGZyYW1lKTsKKyAgICAgICAgbV9ldmVudERpc3BhdGNoZXItPmRpc3BhdGNoU3RvcmFnZUV2ZW50
KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2lu
LmdldCgpLCBmcmFtZSk7CiAgICAgfQogfQogCkBAIC0xODYsNyArMTg0LDcgQEAgdm9pZCBTdG9y
YWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBmcmFtZQogCiAgICAgaWYgKG1fc3RvcmFnZUFyZWFT
eW5jKQogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotICAgIGRp
c3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIGZyYW1lKTsK
KyAgICBtX2V2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0
cmluZygpLCBTdHJpbmcoKSwgbV9zdG9yYWdlVHlwZSwgbV9zZWN1cml0eU9yaWdpbi5nZXQoKSwg
ZnJhbWUpOwogfQogCiBib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0CkBAIC0yMjQsNDUgKzIyMiw2IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpi
bG9ja1VudGlsSW1wb3J0Q28KICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50aWxJ
bXBvcnRDb21wbGV0ZSgpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSNpZiBQTEFURk9STShD
SFJPTUlVTSkKLSAgICAvLyBGSVhNRTogRXZlbnRzIGFyZSBjdXJyZW50bHkgYnJva2VuIGluIENo
cm9taXVtLgotICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgUGFnZSogcGFnZSA9IHNvdXJjZUZy
YW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2
ZWN0b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZlbnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0
aGUgZnJhbWUgdHJlZQotICAgIC8vIG9mIGFueSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCBvciBt
dXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmLgotICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4g
ZnJhbWVzOwotICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IFNlc3Npb25TdG9yYWdlKSB7Ci0gICAg
ICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2UuCi0gICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAg
IGZyYW1lcy5hcHBlbmQoZnJhbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGZyYW1lc1tpXS0+
ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJh
bWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwg
ZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+c2Vzc2lvblN0b3JhZ2UoKSkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5IHBhZ2UuCi0gICAgICAgIGNvbnN0IEhh
c2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKLSAgICAgICAgSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwotICAgICAgICBm
b3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVz
LmFwcGVuZChmcmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgZnJh
bWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291cmNlRnJhbWUtPmRvbVdp
bmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoKSkpOwotICAgIH0K
LX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuaAkocmV2aXNpb24gNDg1OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUg
U3RvcmFnZUFyZWFJbXBsX2gKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQogI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIgogCiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIFN0b3JhZ2VBcmVhSW1wbCA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7
CiAgICAgcHVibGljOgotICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUsIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwor
ICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlcj4pOwogICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYUltcGwoKTsK
IAogICAgICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3JhZ2UgQVBJIChhbmQgY29udGFpbnMpCkBA
IC02NCwxMSArNjQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBkaXNwYXRjaFN0
b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLQogICAgICAgICBTdG9y
YWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1f
c2VjdXJpdHlPcmlnaW47CiAgICAgICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7
CisgICAgICAgIFJlZlB0cjxTdG9yYWdlRXZlbnREaXNwYXRjaGVyPiBtX2V2ZW50RGlzcGF0Y2hl
cjsKIAogICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBtX3N0b3JhZ2VBcmVhU3luYzsK
ICAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zdG9yYWdlU3luY01hbmFnZXI7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUg
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcl9oCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8g
VGhpcyBpbnRlcmZhY2UgaXMgcmVxdWlyZWQgZm9yIENocm9taXVtIHNpbmNlIHRoZXNlIGFjdGlv
bnMgbmVlZCB0byBiZSBwcm94aWVkIGJldHdlZW4gcHJvY2Vzc2VzLgorICAgIGNsYXNzIFN0b3Jh
Z2VFdmVudERpc3BhdGNoZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlRXZlbnREaXNwYXRj
aGVyPiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlRXZlbnREaXNwYXRj
aGVyKCkgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBGcmFtZSogc291cmNlRnJhbWUp
ID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBTdG9yYWdlRXZlbnREaXNwYXRjaGVyX2gKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcAko
cmV2aXNpb24gNDgzNTcpCShmcm9tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3Bw
OjQ4MzU3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYUltcGwuaCIKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhU3luYy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlU3lu
Y01hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdG9yYWdlQXJlYUltcGw6On5T
dG9yYWdlQXJlYUltcGwoKQoreworfQorCitTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1w
bChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3Jp
Z2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCisgICAgOiBt
X3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihvcmlnaW4p
CisgICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCisgICAgLCBtX3N0b3Jh
Z2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1
dGRvd24oZmFsc2UpCisjZW5kaWYKK3sKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7Cisg
ICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlcmUncyBubyBi
YWNraW5nIHN0b3JhZ2UgZm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2
aW9yIHNob3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVu
dGx5IGlnbm9yaW5nIGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI1ODk0CisgICAgaWYgKG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7CisgICAgICAgIG1fc3RvcmFn
ZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdlU3luY01hbmFnZXIs
IHRoaXMpOworICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYVN5bmMpOworICAgIH0KK30KKwor
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y29weSgpCit7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFn
ZUFyZWFJbXBsKHRoaXMpKTsKK30KKworU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZUFyZWFJbXBsKiBhcmVhKQorICAgIDogbV9zdG9yYWdlVHlwZShhcmVhLT5tX3N0b3Jh
Z2VUeXBlKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5T3JpZ2luKQor
ICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAgICAsIG1fc3RvcmFnZVN5
bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVCVUcKKyAg
ICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCisjZW5kaWYKK3sKKyAgICBBU1NF
UlQobV9zZWN1cml0eU9yaWdpbik7CisgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOworfQorCitzdGF0aWMgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkKEZyYW1lKiBmcmFtZSkKK3sKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBUaGUg
ZnJhbWUgcG9pbnRlciBjYW4gYmUgTlVMTCBpbiBDaHJvbWl1bSBzaW5jZSB0aGlzIGNhbGwgaXMg
bWFkZSBpbiBhIGRpZmZlcmVudAorICAgIC8vIHByb2Nlc3MgZnJvbSB3aGVyZSB0aGUgRnJhbWUg
b2JqZWN0IGV4aXN0cy4gIEx1Y2tpbHksIHByaXZhdGUgYnJvd3NlaW5nIGlzCisgICAgLy8gaW1w
bGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gQ2hyb21pdW0sIHNvIGl0J2QgbmV2ZXIgcmV0dXJuIHRy
dWUgYW55d2F5LgorICAgIEFTU0VSVCghZnJhbWUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbHNl
CisgICAgcmV0dXJuIGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0Vu
YWJsZWQoKTsKKyNlbmRpZgorfQorCit1bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBtX3N0b3Jh
Z2VNYXAtPmxlbmd0aCgpOworfQorCitTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjprZXkodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmtleShpbmRl
eCk7Cit9CisKK1N0cmluZyBTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJ
bXBvcnRDb21wbGV0ZSgpOworCisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkp
OworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKK3sK
KyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7
CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICBpZiAocHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChmcmFtZSkpIHsKKyAgICAgICAgZWMgPSBRVU9UQV9FWENFRURFRF9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRm9yIExvY2FsU3RvcmFnZSB3
aGVyZSBhIGRpc2sgcXVvdGEgd2lsbCBiZSBlbmZvcmNlZCwgaGVyZSBpcyB3aGVyZSB3ZSBuZWVk
IHRvIGRvIHF1b3RhIGNoZWNraW5nLgorICAgIC8vICAgICAgICBJZiB3ZSBkZWNpZGUgdG8gZW5m
b3JjZSBhIG1lbW9yeSBxdW90YSBmb3IgU2Vzc2lvblN0b3JhZ2UsIHRoaXMgaXMgd2hlcmUgd2Un
ZCBkbyB0aGF0LCBhbHNvLgorICAgIC8vIGlmICg8b3ZlciBxdW90YT4pIHsKKyAgICAvLyAgICAg
ZWMgPSBRVU9UQV9FWENFRURFRF9FUlI7CisgICAgLy8gICAgIHJldHVybjsKKyAgICAvLyB9CisK
KyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1f
c3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSk7CisKKyAgICBpZiAobmV3
TWFwKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOworCisgICAgLy8g
T25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBjaGFuZ2VkCisg
ICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7CisgICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3lu
YykKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtl
eSwgdmFsdWUpOworICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCB2
YWx1ZSwgZnJhbWUpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0
ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICBpZiAocHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyBvbGRWYWx1ZTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0gbV9zdG9yYWdlTWFw
LT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIGlmIChuZXdNYXApCisgICAgICAgIG1f
c3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7CisKKyAgICAvLyBPbmx5IG5vdGlmeSB0aGUg
Y2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVhbGx5IHJlbW92ZWQKKyAgICBpZiAoIW9sZFZhbHVl
LmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgICAg
IG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgU3RyaW5nKCkpOwor
ICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgZnJh
bWUpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCk7CisKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOwor
CisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
c2NoZWR1bGVDbGVhcigpOworICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJp
bmcoKSwgU3RyaW5nKCksIGZyYW1lKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIHJldHVybiBtX3N0b3Jh
Z2VNYXAtPmNvbnRhaW5zKGtleSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjppbXBvcnRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKKyAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5LCB2YWx1
ZSk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBTdG9yYWdlQXJlYUltcGw6OnNlY3VyaXR5T3JpZ2lu
KCkKK3sKKyAgICByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsKK30KKwordm9pZCBTdG9y
YWdlQXJlYUltcGw6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAg
ICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOworCisjaWZuZGVmIE5E
RUJVRworICAgIG1faXNTaHV0ZG93biA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBTdG9yYWdl
QXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbElt
cG9ydENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3Jh
Z2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3Qg
U3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQoreworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorICAgIC8vIEZJWE1FOiBFdmVudHMgYXJlIGN1cnJlbnRseSBicm9rZW4gaW4gQ2hy
b21pdW0uCisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBQYWdlKiBwYWdlID0gc291cmNlRnJh
bWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdl
IG5lZWQgdG8gY29weSBhbGwgcmVsZXZhbnQgZnJhbWVzIGZyb20gZXZlcnkgcGFnZSB0byBhIHZl
Y3RvciBzaW5jZSBzZW5kaW5nIHRoZSBldmVudCB0byBvbmUgZnJhbWUgbWlnaHQgbXV0YXRlIHRo
ZSBmcmFtZSB0cmVlCisgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11
dGF0ZSB0aGUgcGFnZSBncm91cCBpdHNlbGYuCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBm
cmFtZXM7CisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpIHsKKyAgICAg
ICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KKyAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAgICAg
ZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ldLT5k
b2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBm
cmFtZXNbaV0tPmRvbVdpbmRvdygpLT5zZXNzaW9uU3RvcmFnZSgpKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gU2VuZCBldmVudHMgdG8gZXZlcnkgcGFnZS4KKyAgICAgICAgY29uc3QgSGFz
aFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygpOworICAgICAgICBIYXNo
U2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7CisgICAgICAgIGZv
ciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAgICAgICAgICAgICBmcmFtZXMu
YXBwZW5kKGZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmcmFt
ZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2lu
ZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7CisgICAgfQor
fQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAJKHJldmlzaW9uIDQ4MzU3
KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwyMzYgKzEsNTAgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmgiCiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdG9yYWdlRXZl
bnQuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFw
LmgiCi0jaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKCkKLXsKLX0KLQotU3RvcmFn
ZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IHN5bmNNYW5hZ2VyKQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKLSAgICAs
IG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6
OmNyZWF0ZSgpKQotICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoc3luY01hbmFnZXIpCi0jaWZu
ZGVmIE5ERUJVRwotICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgQVNT
RVJUKG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwotCi0gICAg
Ly8gRklYTUU6IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2Us
IHRoZSBkZWZhdWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJy
b3dzaW5nLAotICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAotICAgIGlmIChtX3N0b3JhZ2VTeW5jTWFu
YWdlcikgewotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3Jl
YXRlKG1fc3RvcmFnZVN5bmNNYW5hZ2VyLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFn
ZUFyZWFTeW5jKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBTdG9y
YWdlQXJlYUltcGw6OmNvcHkoKQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVhSW1wbCh0aGlzKSk7Ci19Ci0KLVN0b3JhZ2VB
cmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCogYXJlYSkKLSAgICA6IG1f
c3RvcmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKLSAgICAsIG1fc2VjdXJpdHlPcmlnaW4o
YXJlYS0+bV9zZWN1cml0eU9yaWdpbikKLSAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3Jh
Z2VNYXApCi0gICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFu
YWdlcikKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRk
b3duKQotI2VuZGlmCi17Ci0gICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VS
VChtX3N0b3JhZ2VNYXApOwotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLX0KLQotc3RhdGlj
IGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChGcmFtZSogZnJhbWUpCi17Ci0jaWYgUExBVEZP
Uk0oQ0hST01JVU0pCi0gICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIgY2FuIGJlIE5VTEwgaW4gQ2hy
b21pdW0gc2luY2UgdGhpcyBjYWxsIGlzIG1hZGUgaW4gYSBkaWZmZXJlbnQKLSAgICAvLyBwcm9j
ZXNzIGZyb20gd2hlcmUgdGhlIEZyYW1lIG9iamVjdCBleGlzdHMuICBMdWNraWx5LCBwcml2YXRl
IGJyb3dzZWluZyBpcwotICAgIC8vIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IGluIENocm9taXVt
LCBzbyBpdCdkIG5ldmVyIHJldHVybiB0cnVlIGFueXdheS4KLSAgICBBU1NFUlQoIWZyYW1lKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBmcmFtZS0+cGFnZSgpLT5zZXR0
aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0jZW5kaWYKLX0KLQotdW5zaWduZWQg
U3RvcmFnZUFyZWFJbXBsOjpsZW5ndGgoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5sZW5ndGgoKTsKLX0KLQotU3RyaW5nIFN0
b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2lnbmVkIGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVCgh
bV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICByZXR1
cm4gbV9zdG9yYWdlTWFwLT5rZXkoaW5kZXgpOwotfQotCi1TdHJpbmcgU3RvcmFnZUFyZWFJbXBs
OjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLQotICAgIHJldHVybiBt
X3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAg
IEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OwotCi0gICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQoZnJhbWUpKSB7Ci0gICAgICAgIGVj
ID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
RklYTUU6IEZvciBMb2NhbFN0b3JhZ2Ugd2hlcmUgYSBkaXNrIHF1b3RhIHdpbGwgYmUgZW5mb3Jj
ZWQsIGhlcmUgaXMgd2hlcmUgd2UgbmVlZCB0byBkbyBxdW90YSBjaGVja2luZy4KLSAgICAvLyAg
ICAgICAgSWYgd2UgZGVjaWRlIHRvIGVuZm9yY2UgYSBtZW1vcnkgcXVvdGEgZm9yIFNlc3Npb25T
dG9yYWdlLCB0aGlzIGlzIHdoZXJlIHdlJ2QgZG8gdGhhdCwgYWxzby4KLSAgICAvLyBpZiAoPG92
ZXIgcXVvdGE+KSB7Ci0gICAgLy8gICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgIC8v
ICAgICByZXR1cm47Ci0gICAgLy8gfQotCi0gICAgU3RyaW5nIG9sZFZhbHVlOwotICAgIFJlZlB0
cjxTdG9yYWdlTWFwPiBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwg
b2xkVmFsdWUpOwotCi0gICAgaWYgKG5ld01hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3
TWFwLnJlbGVhc2UoKTsKLQotICAgIC8vIE9ubHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRl
bSB3YXMgYWN0dWFsbHkgY2hhbmdlZAotICAgIGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkgewotICAg
ICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3lu
Yy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZhbHVlKTsKLSAgICAgICAgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIGZyYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQg
U3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogZnJh
bWUpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOwotCi0gICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQoZnJhbWUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VN
YXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKLSAg
ICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOwot
Ci0gICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBy
ZW1vdmVkCi0gICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgewotICAgICAgICBpZiAobV9zdG9y
YWdlQXJlYVN5bmMpCi0gICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVt
Rm9yU3luYyhrZXksIFN0cmluZygpKTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5
LCBvbGRWYWx1ZSwgU3RyaW5nKCksIGZyYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjpjbGVhcihGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgaWYgKHByaXZhdGVCcm93
c2luZ0VuYWJsZWQoZnJhbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VNYXAg
PSBTdG9yYWdlTWFwOjpjcmVhdGUoKTsKLQotICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKLSAg
ICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKLSAgICBkaXNwYXRjaFN0
b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBmcmFtZSk7Ci19Ci0KLWJv
b2wgU3RvcmFnZUFyZWFJbXBsOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK3Zv
aWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luLCBGcmFtZSogc291cmNlRnJhbWUpCiB7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwot
ICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1h
cC0+Y29udGFpbnMoa2V5KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOwotICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbShrZXksIHZhbHVlKTsK
LX0KLQotU2VjdXJpdHlPcmlnaW4qIFN0b3JhZ2VBcmVhSW1wbDo6c2VjdXJpdHlPcmlnaW4oKQot
ewotICAgIHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOwotfQotCi12b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6Y2xvc2UoKQotewotICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKLSAgICAgICAg
bV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKLSNlbmRpZgotfQotCi12b2lkIFN0b3JhZ2VBcmVh
SW1wbDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdG9y
YWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0
Q29tcGxldGUoKTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2
ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0jaWYgUExBVEZPUk0oQ0hST01J
VU0pCi0gICAgLy8gRklYTUU6IEV2ZW50cyBhcmUgY3VycmVudGx5IGJyb2tlbiBpbiBDaHJvbWl1
bS4KLSAgICByZXR1cm47Ci0jZW5kaWYKLQogICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+
cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDEwICs1Miwx
MCBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGlzcGF0Y2hTdG9yYWdlRXZlCiAgICAgLy8gV2Ug
bmVlZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVj
dG9yIHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhl
IGZyYW1lIHRyZWUKICAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0
YXRlIHRoZSBwYWdlIGdyb3VwIGl0c2VsZi4KICAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZy
YW1lczsKLSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgeworICAgIGlm
IChzdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgewogICAgICAgICAvLyBTZW5kIGV2ZW50
cyBvbmx5IHRvIG91ciBwYWdlLgogICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5l
cXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQogICAgICAgICAgICAg
ICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwogICAgICAgICB9CiAKQEAgLTI1Myw3ICs2Nyw3IEBA
IHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmUKICAgICAgICAgSGFzaFNl
dDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKSkKICAgICAg
ICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1w
bC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNo
ZXJJbXBsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXJJbXBsX2gKKyNkZWZpbmUgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGxfaAorCisjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdG9yYWdlRXZlbnREaXNwYXRj
aGVySW1wbCA6IHB1YmxpYyBTdG9yYWdlRXZlbnREaXNwYXRjaGVyIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VFdmVudERpc3BhdGNoZXI+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbCk7IH0KKyAg
ICAgICAgdmlydHVhbCB+U3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwoKSB7IH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBl
LCBTZWN1cml0eU9yaWdpbiosIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbCgpIHsgfQorICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2Vu
ZGlmIC8vIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTmFtZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2UuaAkocmV2aXNpb24gNDg1OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3JhZ2VB
cmVhOworICAgIGNsYXNzIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI7CiAKICAgICAvLyBUaGlzIGlu
dGVyZmFjZSBpcyByZXF1aXJlZCBmb3IgQ2hyb21pdW0gc2luY2UgdGhlc2UgYWN0aW9ucyBuZWVk
IHRvIGJlIHByb3hpZWQgYmV0d2VlbiBwcm9jZXNzZXMuCiAgICAgY2xhc3MgU3RvcmFnZU5hbWVz
cGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VOYW1lc3BhY2U+IHsKQEAgLTQ1LDcgKzQ2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9y
YWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCiAgICAgICAgIHZpcnR1
YWwgflN0b3JhZ2VOYW1lc3BhY2UoKSB7IH0KLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopID0gMDsKKyAgICAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbios
IFBhc3NSZWZQdHI8U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcj4pID0gMDsKICAgICAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBjbG9zZSgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpID0gMDsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24g
NDg1OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4g
U3RvcmFnZU5hbWUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3TmFtZXNwYWNlKTsKIH0KIAotUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0
cjxTdG9yYWdlRXZlbnREaXNwYXRjaGVyPiBldmVudERpc3BhdGNoZXIpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CkBAIC0xMDgsNyAr
MTA4LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZQogICAgIGlm
IChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAKLSAgICBzdG9yYWdlQXJlYSA9IGFkb3B0UmVm
KG5ldyBTdG9yYWdlQXJlYUltcGwobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2Vy
KSk7CisgICAgc3RvcmFnZUFyZWEgPSBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJbXBsKG1fc3Rv
cmFnZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlciwgZXZlbnREaXNwYXRjaGVyKSk7CiAgICAg
bV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0
b3JhZ2VBcmVhLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5oCShyZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UoKTsKIAogICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNw
YWNlSW1wbCgpOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3Jh
Z2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VF
dmVudERpc3BhdGNoZXI+KTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1l
c3BhY2U+IGNvcHkoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCB1bmxvY2soKTs=
</data>
<flag name="review"
          id="21022"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="21104"
          type_id="3"
          status="-"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>