<?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>234179</bug_id>
          
          <creation_ts>2021-12-10 15:02:44 -0800</creation_ts>
          <short_desc>Move SWServers from NetworkProcess to NetworkSession</short_desc>
          <delta_ts>2021-12-15 14:20:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Service Workers</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=234366</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1823013</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-10 15:02:44 -0800</bug_when>
    <thetext>Move SWServers from NetworkProcess to NetworkSession, since they are per session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823019</commentid>
    <comment_count>1</comment_count>
      <attachid>446824</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-10 15:07:45 -0800</bug_when>
    <thetext>Created attachment 446824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823270</commentid>
    <comment_count>2</comment_count>
      <attachid>446909</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-11 15:33:40 -0800</bug_when>
    <thetext>Created attachment 446909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823992</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-14 07:27:02 -0800</bug_when>
    <thetext>ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824015</commentid>
    <comment_count>4</comment_count>
      <attachid>446909</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-14 09:05:28 -0800</bug_when>
    <thetext>Comment on attachment 446909
Patch

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

&gt; Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:504
&gt; +        auto&amp; server = session-&gt;ensureSWServer();
&gt; +        if (!server.isImportCompleted()) {

Scope it using the semicolon style?

    if (auto&amp; server = session-&gt;ensureSWServer(); !server.isImportCompleted()) {

&gt; Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:509
&gt; +                ASSERT(networkSession() &amp;&amp; networkSession()-&gt;swServer() &amp;&amp; networkSession()-&gt;swServer()-&gt;isImportCompleted());

I would write three separate assertions. Nicer to know which one failed.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1596
&gt; +            // If we are deleting all of the data types that the resource load statistics store monitors
&gt; +            // we do not need to re-grandfather old data.
&gt; +            auto shouldGrandfather = ((monitoredTypesRaw &amp; deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;

The enum makes this harder to read. I hope there’s other code that makes it easier to read.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1664
&gt; +        Vector&lt;String&gt; hosts;
&gt; +        hosts.reserveInitialCapacity(originDatas.size());
&gt; +        for (auto&amp; origin : originDatas)
&gt; +            hosts.uncheckedAppend(origin.host);

Should do this more directly with Vector::map?

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1849
&gt; +        Vector&lt;String&gt; registrableDomainsToDelete;
&gt; +        registrableDomainsToDelete.reserveInitialCapacity(domainsToDeleteAllNonCookieWebsiteDataFor.size());
&gt; +        for (auto&amp; domain : domainsToDeleteAllNonCookieWebsiteDataFor)
&gt; +            registrableDomainsToDelete.uncheckedAppend(domain.string());

Same question.

&gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:553
&gt; +    UNUSED_PARAM(critical);

Could we omit the argument name instead of using UNUSED_PARAM?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824369</commentid>
    <comment_count>5</comment_count>
      <attachid>447236</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-15 08:44:10 -0800</bug_when>
    <thetext>Created attachment 447236
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824420</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-15 10:20:55 -0800</bug_when>
    <thetext>Committed r287084 (245279@main): &lt;https://commits.webkit.org/245279@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447236.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824421</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-15 10:22:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/86530837&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446824</attachid>
            <date>2021-12-10 15:07:45 -0800</date>
            <delta_ts>2021-12-11 15:33:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234179-20211210150744.patch</filename>
            <type>text/plain</type>
            <size>46405</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY3MzUyZGNmMDlmNWFhNmE4N2JjN2Zi
YTJkMmFhOGZiZDRjOGVhYzIuLjg5M2YzMmQyN2NhM2JjZDc4MjcyMWJmYjZkYmUzMjJmM2VkNGI1
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMTItMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNXU2VydmVycyBmcm9tIE5ldHdvcmtQcm9jZXNz
IHRvIE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzQxNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDoKKyAgICAgICAgVXNpbmcg
YSBib29sIGFzIHVuZGVybHlpbmcgdHlwZSBmb3IgdGhvc2UgZW51bSBjbGFzc2VzIGlzIHN1ZmZp
Y2llbnQuCisKIDIwMjEtMTItMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBzaW1wbGVyIGlkaW9tcyBmb3Igc3RkOjpsZXNzIGFuZCBzdGQ6OmdyZWF0ZXIg
cG9zc2libGUgaW4gbW9kZXJuIEMrKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzNTM1YzVkOTVmNzViNzQ2NTg0ODNj
YmM2ZWQzYmE4NDY5OTJlZjIyLi40NjVmNDU4ZmY1ZjA0ZDEyZmI5YmRlYzg1Mzg1ZTA2OWM2OGRm
ODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTEwICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTV1NlcnZlcnMgZnJvbSBOZXR3b3Jr
UHJvY2VzcyB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBTV1NlcnZlcnMgZnJvbSBOZXR3b3JrUHJvY2VzcyB0byBO
ZXR3b3JrU2Vzc2lvbiBzaW5jZSB0aGV5IGFyZSBwZXIgc2Vzc2lvbi4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNjaGVkdWxlUmVzb3VyY2VM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmVz
dGFibGlzaFNXU2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjplc3RhYmxpc2hTV0NvbnRleHRDb25uZWN0aW9uKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRo
V2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRv
U3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cHJvY2Vzc1B1c2hNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hTV1NlcnZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzd1NlcnZlckZvclNlc3Npb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZXhpc3RpbmdTV09yaWdpblN0
b3JlRm9yU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpyZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNlcnZpY2VXb3JrZXJT
ZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3dTZXJ2ZXJGb3JTZXNzaW9u
SWZFeGlzdHMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Omxvd01lbW9yeUhhbmRs
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c3dPcmlnaW5TdG9yZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpyZWdpc3RlclNXU2VydmVyQ29u
bmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyU1dT
ZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmVuc3Vy
ZVNXU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Omhhc1NlcnZp
Y2VXb3JrZXJEYXRhYmFzZVBhdGggY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzd1NlcnZl
cik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlckNv
bm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTV1NlcnZlckNvbm5lY3Rpb246Oldl
YlNXU2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNXU2VydmVyQ29ubmVj
dGlvbjo6fldlYlNXU2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKwogMjAyMS0xMi0xMCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgQWxsb3cgYFBhc3RlYm9hcmQ6OnJlYWRCdWZmZXJgIHRvIHJlYWQg
ZnJvbSB0aGUgcGFzdGVib2FyZCBhcyBhIHdob2xlIGluc3RlYWQgb2YgYSBzcGVjaWZpYyBpdGVt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCmluZGV4IDI3ZTIyMDlmYjlhNzNm
ZDgwZmEwNzQ2NWQ1YTUyZTU2MjgwZWVmNjkuLmExNGM3NGViNzMzODYxZTg3Y2IxNzRlZjc2NzE3
MGZjMjcxZGI1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFu
ZGxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC02
Niw4ICs2Niw4IEBAIGVudW0gY2xhc3MgV2Vic2FtUHJvY2Vzc1N0YXRlIDogdWludDhfdCB7CiAg
ICAgSW5hY3RpdmUsCiB9OwogCi1lbnVtIGNsYXNzIENyaXRpY2FsIDogdWludDhfdCB7IE5vLCBZ
ZXMgfTsKLWVudW0gY2xhc3MgU3luY2hyb25vdXMgOiB1aW50OF90IHsgTm8sIFllcyB9OworZW51
bSBjbGFzcyBDcml0aWNhbCA6IGJvb2wgeyBObywgWWVzIH07CitlbnVtIGNsYXNzIFN5bmNocm9u
b3VzIDogYm9vbCB7IE5vLCBZZXMgfTsKIAogdHlwZWRlZiBXVEY6OkZ1bmN0aW9uPHZvaWQoQ3Jp
dGljYWwsIFN5bmNocm9ub3VzKT4gTG93TWVtb3J5SGFuZGxlcjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCAyOTFjYzk4OTJlODEwMjdkOWNhZWQxZDlkYjcwNjFkNzNlNjc0MTcw
Li4xNGM5OWYxNWIzMGM3MGY1NmMyN2JiYmU1OTNlZDkzMmVjMDM3MTYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcApAQCAtNDk5LDE1ICs0OTksMTggQEAgdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQoTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmEKICAgICBDT05ORUNUSU9OX1JFTEVBU0VfTE9HKExvYWRpbmcsICJzY2hlZHVsZVJlc291
cmNlTG9hZDogKHBhcmVudFBJRD0lZCwgcGFnZVByb3h5SUQ9JSIgUFJJdTY0ICIsIHdlYlBhZ2VJ
RD0lIiBQUkl1NjQgIiwgZnJhbWVJRD0lIiBQUkl1NjQgIiwgcmVzb3VyY2VJRD0lIiBQUkl1NjQg
IiwgZXhpc3RpbmdMb2FkZXJUb1Jlc3VtZT0lIiBQUkl1NjQgIikiLCBsb2FkUGFyYW1ldGVycy5w
YXJlbnRQSUQsIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VQcm94eUlELnRvVUludDY0KCksIGxvYWRQ
YXJhbWV0ZXJzLndlYlBhZ2VJRC50b1VJbnQ2NCgpLCBsb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlE
LnRvVUludDY0KCksIGxvYWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIudG9VSW50NjQoKSwgZXhpc3Rp
bmdMb2FkZXJUb1Jlc3VtZS52YWx1ZV9vcihOZXR3b3JrUmVzb3VyY2VMb2FkSWRlbnRpZmllciB7
IH0pLnRvVUludDY0KCkpOwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGF1dG8m
IHNlcnZlciA9IG1fbmV0d29ya1Byb2Nlc3MtPnN3U2VydmVyRm9yU2Vzc2lvbihtX3Nlc3Npb25J
RCk7Ci0gICAgaWYgKCFzZXJ2ZXIuaXNJbXBvcnRDb21wbGV0ZWQoKSkgewotICAgICAgICBzZXJ2
ZXIud2hlbkltcG9ydElzQ29tcGxldGVkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRo
aXMgfSwgbG9hZFBhcmFtZXRlcnMgPSBXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzKSwgZXhpc3RpbmdM
b2FkZXJUb1Jlc3VtZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGlmICghbV9uZXR3b3JrUHJv
Y2Vzcy0+d2ViUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc0lkZW50aWZpZXIoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3Mt
PnN3U2VydmVyRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCkuaXNJbXBvcnRDb21wbGV0ZWQoKSk7Ci0g
ICAgICAgICAgICBzY2hlZHVsZVJlc291cmNlTG9hZChXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzKSwg
ZXhpc3RpbmdMb2FkZXJUb1Jlc3VtZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8m
IHNlcnZlciA9IHNlc3Npb24tPmVuc3VyZVNXU2VydmVyKCk7CisgICAgICAgIGlmICghc2VydmVy
LmlzSW1wb3J0Q29tcGxldGVkKCkpIHsKKyAgICAgICAgICAgIHNlcnZlci53aGVuSW1wb3J0SXND
b21wbGV0ZWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBsb2FkUGFyYW1l
dGVycyA9IFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBleGlzdGluZ0xvYWRlclRvUmVzdW1lXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghbV9uZXR3b3JrUHJvY2Vzcy0+d2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc0lkZW50aWZpZXIoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIEFTU0VSVChuZXR3b3JrU2Vzc2lvbigpICYm
IG5ldHdvcmtTZXNzaW9uKCktPnN3U2VydmVyKCkgJiYgbmV0d29ya1Nlc3Npb24oKS0+c3dTZXJ2
ZXIoKS0+aXNJbXBvcnRDb21wbGV0ZWQoKSk7CisgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXNv
dXJjZUxvYWQoV1RGTW92ZShsb2FkUGFyYW1ldGVycyksIGV4aXN0aW5nTG9hZGVyVG9SZXN1bWUp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKIApAQCAtMTE1Miw3ICsxMTU1LDExIEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmVzdGFibGlzaFNXU2VydmVyQ29ubmVjdGlvbigpCiAgICAgaWYgKG1fc3dD
b25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzZXJ2ZXIgPSBtX25ldHdv
cmtQcm9jZXNzLT5zd1NlcnZlckZvclNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGF1dG8qIHNl
c3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpOworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byYgc2VydmVyID0gc2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKTsKICAg
ICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPFdlYlNXU2VydmVyQ29ubmVjdGlvbj4obV9u
ZXR3b3JrUHJvY2Vzcywgc2VydmVyLCBtX2Nvbm5lY3Rpb24uZ2V0KCksIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXIpOwogCiAgICAgbV9zd0Nvbm5lY3Rpb24gPSAqY29ubmVjdGlvbjsKQEAgLTExNjEs
OCArMTE2OCw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmVzdGFibGlz
aFNXU2VydmVyQ29ubmVjdGlvbigpCiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmVzdGFibGlzaFNXQ29udGV4dENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciB3
ZWJQYWdlUHJveHlJRCwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllcj4gc2VydmljZVdvcmtl
clBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIHNlcnZlciA9IG1fbmV0d29ya1Byb2Nlc3MtPnN3U2Vy
dmVyRm9yU2Vzc2lvbklmRXhpc3RzKG1fc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zd0NvbnRleHRD
b25uZWN0aW9uID0gbWFrZVVuaXF1ZTxXZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24+KCp0
aGlzLCB3ZWJQYWdlUHJveHlJRCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlcnZpY2VX
b3JrZXJQYWdlSWRlbnRpZmllciwgKnNlcnZlcik7CisgICAgYXV0byogc2Vzc2lvbiA9IG5ldHdv
cmtTZXNzaW9uKCk7CisgICAgaWYgKGF1dG8qIHN3U2VydmVyID0gc2Vzc2lvbiA/IHNlc3Npb24t
PnN3U2VydmVyKCkgOiBudWxscHRyKQorICAgICAgICBtX3N3Q29udGV4dENvbm5lY3Rpb24gPSBt
YWtlVW5pcXVlPFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbj4oKnRoaXMsIHdlYlBhZ2VQ
cm94eUlELCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2VydmljZVdvcmtlclBhZ2VJZGVu
dGlmaWVyLCAqc3dTZXJ2ZXIpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMWVm
MzNhNmU2MjczNzEwNDQ3NzUxYTU3M2MyNzQ4OTdlZDI5NDBhNi4uYzMyNjI0OThkODdhNjg1MTJi
OTlhNWRkN2M4ZjAyYzY0MzNkZDc3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTYwLDkgKzYwLDYgQEAKICNpbmNsdWRlICJXZWJQ
cm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKICNpbmNs
dWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJTV09y
aWdpblN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFGZXRjaE9wdGlvbi5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRl
ICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgpAQCAtODEsNiArNzgsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1l
QXBwbGljYXRpb25DaGVja3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NXU2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRh
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+CkBAIC0xMTYsMTAg
KzExNCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ29udGV4dC5oPgogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0jaW5jbHVkZSAiV2ViU1dTZXJ2ZXJUb0NvbnRleHRD
b25uZWN0aW9uTWVzc2FnZXMuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMTAsMTYgKzMwNCwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQogCiAgICAgV1RGOjpy
ZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKIAotICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewotICAgICAgICBuZXR3b3JrU2Vzc2lvbi5jbGVh
clByZWZldGNoQ2FjaGUoKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW2NyaXRpY2FsXShh
dXRvJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBuZXR3b3JrU2Vzc2lvbi5sb3dNZW1vcnlI
YW5kbGVyKGNyaXRpY2FsKTsKICAgICB9KTsKIAogICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmhh
bmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBmb3IgKGF1dG8mIHN3U2VydmVyIDogbV9zd1NlcnZlcnMudmFsdWVzKCkpCi0gICAgICAgIHN3
U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKQEAgLTQyNyw3ICs0MTYsOCBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
JiYgcGFyYW1ldGVycwogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYg
KGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBzZXNz
aW9uLT5hZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogCiAgICAgbV9zdG9yYWdl
TWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKQEAg
LTU3MCwxMSArNTYwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIG1fc2Vzc2lvbnNDb250cm9sbGVkQnlBdXRvbWF0
aW9uLnJlbW92ZShzZXNzaW9uSUQpOwogICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpkZXN0cm95
RW5naW5lKCp0aGlzLCBzZXNzaW9uSUQpOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIG1fc3dTZXJ2ZXJzLnJlbW92ZShzZXNzaW9uSUQpOwotICAgIG1fc2VydmljZVdvcmtlcklu
Zm8ucmVtb3ZlKHNlc3Npb25JRCk7Ci0jZW5kaWYKLQogICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQt
PnJlbW92ZShzZXNzaW9uSUQpOwogICAgIGlmIChhdXRvIHNlcnZlciA9IG1fd2ViSURCU2VydmVy
cy50YWtlKHNlc3Npb25JRCkpCiAgICAgICAgIHNlcnZlci0+Y2xvc2UoKTsKQEAgLTE0NjgsNiAr
MTQ1Myw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfTsKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYoKm5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMt
Pm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQpAQCAtMTUx
OSw5ICsxNTA1LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9CiAKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcGF0aCA9IG1fc2VydmljZVdvcmtlckluZm8uZ2V0KHNl
c3Npb25JRCkuZGF0YWJhc2VQYXRoOwotICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0
ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25zKSkgewotICAgICAgICBzd1NlcnZlckZvclNlc3Npb24oc2Vzc2lvbklEKS5nZXRPcmln
aW5zV2l0aFJlZ2lzdHJhdGlvbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oY29uc3QgSGFzaFNldDxT
ZWN1cml0eU9yaWdpbkRhdGE+JiBzZWN1cml0eU9yaWdpbnMpIG11dGFibGUgeworICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbnMpICYmIG5ldHdvcmtTZXNzaW9uICYmIG5ldHdvcmtTZXNzaW9uLT5oYXNTZXJ2
aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkpIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24tPmVuc3Vy
ZVNXU2VydmVyKCkuZ2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKFtjYWxsYmFja0FnZ3JlZ2F0
b3JdKGNvbnN0IEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogc2VjdXJpdHlPcmlnaW5z
KQogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRy
aWVzLmFwcGVuZCh7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9ucywgMCB9KTsKICAgICAgICAgfSk7CkBAIC0xNTM2LDIzICsxNTIxLDE5IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogCiAjaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJ
VkVfU0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBv
cmlnaW4gOiBzZXNzaW9uLT5ob3N0TmFtZXNXaXRoQWx0ZXJuYXRpdmVTZXJ2aWNlcygpKQotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZCh7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpBbHRlcm5hdGl2ZVNlcnZpY2VzLCAwIH0p
OwotICAgICAgICB9CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpBbHRlcm5hdGl2ZVNlcnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAg
ICBmb3IgKGF1dG8mIG9yaWdpbiA6IG5ldHdvcmtTZXNzaW9uLT5ob3N0TmFtZXNXaXRoQWx0ZXJu
YXRpdmVTZXJ2aWNlcygpKQorICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kKHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkFsdGVybmF0
aXZlU2VydmljZXMsIDAgfSk7CiAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5URUxMSUdF
TlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICAg
ICAgaWYgKGF1dG8qIHJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBzZXNzaW9uLT5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKCkpIHsKLSAgICAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LT5yZWdpc3RyYWJsZURvbWFpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRvbWFpbnMp
IG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbWFpbnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVE
YXRhLnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmFkZChkb21h
aW5zLnRha2VMYXN0KCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQorICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcykgJiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIHJl
c291cmNlTG9hZFN0YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpKSB7CisgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZWdpc3RyYWJs
ZURvbWFpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRvbWFpbnMpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIHdoaWxlICghZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5yZWdpc3RyYWJsZURvbWFp
bnNXaXRoUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5hZGQoZG9tYWlucy50YWtlTGFzdCgpKTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNTY2LDYgKzE1NDcs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxl
dGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvKiBu
ZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisKICNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKFNPVVApCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpIU1RTQ2FjaGUpKQogICAgICAgICBjbGVhckhTVFNDYWNo
ZShzZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UpOwpAQCAtMTU5OCw0MyArMTU4MSwzNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGJv
b2wgY2xlYXJTZXJ2aWNlV29ya2VycyA9IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpET01DYWNoZSkgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKLSAgICBpZiAoY2xlYXJTZXJ2
aWNlV29ya2VycyAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHN3U2VydmVy
Rm9yU2Vzc2lvbihzZXNzaW9uSUQpLmNsZWFyQWxsKFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsK
KyAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkg
JiYgbmV0d29ya1Nlc3Npb24pCisgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5lbnN1cmVTV1NlcnZl
cigpLmNsZWFyQWxsKFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lv
bihzZXNzaW9uSUQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IG5ldHdvcmtTZXNzaW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGRlbGV0ZWRUeXBlc1JhdyA9IHdlYnNpdGVEYXRhVHlwZXMudG9SYXco
KTsKLSAgICAgICAgICAgICAgICBhdXRvIG1vbml0b3JlZFR5cGVzUmF3ID0gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKS50b1JhdygpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBkZWxldGluZyBhbGwgb2Yg
dGhlIGRhdGEgdHlwZXMgdGhhdCB0aGUgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIHN0b3JlIG1v
bml0b3JzCi0gICAgICAgICAgICAgICAgLy8gd2UgZG8gbm90IG5lZWQgdG8gcmUtZ3JhbmRmYXRo
ZXIgb2xkIGRhdGEuCi0gICAgICAgICAgICAgICAgYXV0byBzaG91bGRHcmFuZGZhdGhlciA9ICgo
bW9uaXRvcmVkVHlwZXNSYXcgJiBkZWxldGVkVHlwZXNSYXcpID09IG1vbml0b3JlZFR5cGVzUmF3
KSA/IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6Tm8gOiBTaG91bGRHcmFuZGZhdGhlclN0
YXRpc3RpY3M6OlllczsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1vZGlm
aWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0g
bmV0d29ya1Nlc3Npb24gPyBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljcygp
IDogbnVsbHB0cikgeworICAgICAgICAgICAgYXV0byBkZWxldGVkVHlwZXNSYXcgPSB3ZWJzaXRl
RGF0YVR5cGVzLnRvUmF3KCk7CisgICAgICAgICAgICBhdXRvIG1vbml0b3JlZFR5cGVzUmF3ID0g
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKS50b1Jh
dygpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZGVsZXRpbmcgYWxsIG9mIHRoZSBkYXRh
IHR5cGVzIHRoYXQgdGhlIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyBzdG9yZSBtb25pdG9ycwor
ICAgICAgICAgICAgLy8gd2UgZG8gbm90IG5lZWQgdG8gcmUtZ3JhbmRmYXRoZXIgb2xkIGRhdGEu
CisgICAgICAgICAgICBhdXRvIHNob3VsZEdyYW5kZmF0aGVyID0gKChtb25pdG9yZWRUeXBlc1Jh
dyAmIGRlbGV0ZWRUeXBlc1JhdykgPT0gbW9uaXRvcmVkVHlwZXNSYXcpID8gU2hvdWxkR3JhbmRm
YXRoZXJTdGF0aXN0aWNzOjpObyA6IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzOwor
CisgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbY2xlYXJU
YXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChh
dXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisg
ICAgaWYgKG5ldHdvcmtTZXNzaW9uKQogICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+cmVtb3ZlTmV0
d29ya1dlYnNpdGVEYXRhKG1vZGlmaWVkU2luY2UsIHN0ZDo6bnVsbG9wdCwgW2NsZWFyVGFza3NI
YW5kbGVyXSB7IH0pOwogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAg
ICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0p
OwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudHMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vz
c2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3
b3JrU2Vzc2lvbi0+Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChbY2xlYXJUYXNrc0hhbmRs
ZXJdIHsgfSk7Ci0gICAgfQorICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzKSAmJiBuZXR3b3JrU2Vzc2lvbikK
KyAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoW2Ns
ZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCiAjaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVf
U0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vz
c2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3
b3JrU2Vzc2lvbi0+Y2xlYXJBbHRlcm5hdGl2ZVNlcnZpY2VzKG1vZGlmaWVkU2luY2UpOwotICAg
IH0KKyAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkFs
dGVybmF0aXZlU2VydmljZXMpICYmIG5ldHdvcmtTZXNzaW9uKQorICAgICAgICBuZXR3b3JrU2Vz
c2lvbi0+Y2xlYXJBbHRlcm5hdGl2ZVNlcnZpY2VzKG1vZGlmaWVkU2luY2UpOwogI2VuZGlmCiAK
ICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklE
KTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCkBAIC0xNjY3LDYgKzE2NDQs
OCBAQCBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpDYWNo
ZSogY2FjaGUsIGNvbnN0IFZlY3RvcjxTZWN1cgogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxl
dGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8U2VjdXJp
dHlPcmlnaW5EYXRhPiYgb3JpZ2luRGF0YXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVI
b3N0TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBIU1RTQ2FjaGVIb3N0TmFtZXMsIGNvbnN0
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIHJlZ2lzdHJhYmxlRG9tYWlucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGF1dG8qIG5ldHdv
cmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKKwogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpIHsKICAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3JhZ2VTZXNzaW9uKHNl
c3Npb25JRCkpCiAgICAgICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMoY29va2llSG9zdE5hbWVzKTsKQEAgLTE2NzgsMjQgKzE2NTcsMjAgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICNlbmRpZgogCiAjaWYgSEFWRShDRk5FVFdPUktfQUxU
RVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGhvc3RzOwotICAgICAgICAgICAgaG9zdHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShvcmlnaW5EYXRhcy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRv
JiBvcmlnaW4gOiBvcmlnaW5EYXRhcykKLSAgICAgICAgICAgICAgICBob3N0cy51bmNoZWNrZWRB
cHBlbmQob3JpZ2luLmhvc3QpOwotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmRlbGV0ZUFs
dGVybmF0aXZlU2VydmljZXNGb3JIb3N0TmFtZXMoaG9zdHMpOwotICAgICAgICB9CisgICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBbHRlcm5hdGl2ZVNl
cnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBob3N0
czsKKyAgICAgICAgaG9zdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5EYXRhcy5zaXpl
KCkpOworICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbkRhdGFzKQorICAgICAgICAg
ICAgaG9zdHMudW5jaGVja2VkQXBwZW5kKG9yaWdpbi5ob3N0KTsKKyAgICAgICAgbmV0d29ya1Nl
c3Npb24tPmRlbGV0ZUFsdGVybmF0aXZlU2VydmljZXNGb3JIb3N0TmFtZXMoaG9zdHMpOwogICAg
IH0KICNlbmRpZgogCiAgICAgYXV0byBjbGVhclRhc2tzSGFuZGxlciA9IFdURjo6Q2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudHMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMt
Pm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3Jp
Z2luRGF0YSA6IG9yaWdpbkRhdGFzKQotICAgICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5j
bGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50Rm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KG9yaWdpbkRhdGEuaG9zdCksIFtjbGVh
clRhc2tzSGFuZGxlcl0geyB9KTsKLSAgICAgICAgfQorICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzKSAmJiBu
ZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkRhdGEgOiBvcmlnaW5E
YXRhcykKKyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhclByaXZhdGVDbGlja01lYXN1
cmVtZW50Rm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENy
ZWF0ZUZyb21Ib3N0KG9yaWdpbkRhdGEuaG9zdCksIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsK
ICAgICB9CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkRPTUNhY2hlKSkgewpAQCAtMTcxNCw4ICsxNjg5LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW8KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBib29sIGNsZWFyU2Vydmlj
ZVdvcmtlcnMgPSB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RE9N
Q2FjaGUpIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9ucyk7Ci0gICAgaWYgKGNsZWFyU2VydmljZVdvcmtlcnMgJiYg
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7Ci0gICAgICAgIGF1dG8mIHNlcnZlciA9IHN3U2Vy
dmVyRm9yU2Vzc2lvbihzZXNzaW9uSUQpOworICAgIGlmIChjbGVhclNlcnZpY2VXb3JrZXJzICYm
ICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBh
dXRvJiBzZXJ2ZXIgPSBuZXR3b3JrU2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKTsKICAgICAgICAg
Zm9yIChhdXRvJiBvcmlnaW5EYXRhIDogb3JpZ2luRGF0YXMpCiAgICAgICAgICAgICBzZXJ2ZXIu
Y2xlYXIob3JpZ2luRGF0YSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogICAgIH0KQEAgLTE3
MzYsMTIgKzE3MTEsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAKICNpZiBF
TkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKLSAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNz
aW9uKHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZG9tYWluIDogcmVnaXN0
cmFibGVEb21haW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljcygpKQotICAg
ICAgICAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZW1vdmVEYXRhRm9yRG9t
YWluKGRvbWFpbiwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotICAgICAgICAgICAgfQorICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcykgJiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgZm9yIChhdXRvJiBk
b21haW4gOiByZWdpc3RyYWJsZURvbWFpbnMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24tPnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKSkKKyAgICAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZW1vdmVEYXRh
Rm9yRG9tYWluKGRvbWFpbiwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogICAgICAgICB9CiAg
ICAgfQogI2VuZGlmCkBAIC0xNzQ5LDcgKzE3MjIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRp
bwogICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9u
SUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKICAgICAgICAgaXRlcmF0
b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIG9yaWdpbkRhdGFzLCBbY2xl
YXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0
aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7CisgICAgaWYgKG5ldHdvcmtTZXNzaW9u
KSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNU
b0RlbGV0ZU5ldHdvcmtEYXRhRm9yOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkRhdGEgOiBv
cmlnaW5EYXRhcykKICAgICAgICAgICAgIGRvbWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRhRm9yLmFk
ZChXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qob3Jp
Z2luRGF0YS5ob3N0KSk7CkBAIC0xODAzLDYgKzE3NzYsOCBAQCBzdGF0aWMgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gZmlsdGVyRm9yUmVnaXN0cmFibGVEb21haW5zKGNvbnN0
IEhhcwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRh
Rm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgUmVnaXN0cmFibGVEb21haW5zVG9E
ZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3ImJiBkb21haW5zLCBib29sIHNob3VsZE5vdGlm
eVBhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lv
biA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisKICAgICBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zID0gV2Vic2l0ZURhdGFGZXRjaE9wdGlv
bjo6RG9Ob3RDcmVhdGVQcm9jZXNzZXM7CiAKICAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9y
IGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4g
ewpAQCAtMTg2NywxNCArMTg0MiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRS
ZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogI2VuZGlm
CiAKICNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmICh3ZWJz
aXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWx0ZXJuYXRpdmVTZXJ2aWNl
cykpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nl
c3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcmVnaXN0cmFi
bGVEb21haW5zVG9EZWxldGU7Ci0gICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0
ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNp
dGVEYXRhRm9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQotICAgICAgICAgICAgICAgIHJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlLnVuY2hlY2tlZEFwcGVuZChkb21haW4uc3RyaW5nKCkp
OwotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmRlbGV0ZUFsdGVybmF0aXZlU2VydmljZXNG
b3JIb3N0TmFtZXMocmVnaXN0cmFibGVEb21haW5zVG9EZWxldGUpOwotICAgICAgICB9CisgICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBbHRlcm5hdGl2
ZVNlcnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBy
ZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZTsKKyAgICAgICAgcmVnaXN0cmFibGVEb21haW5zVG9E
ZWxldGUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVX
ZWJzaXRlRGF0YUZvci5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQorICAgICAgICAgICAgcmVnaXN0
cmFibGVEb21haW5zVG9EZWxldGUudW5jaGVja2VkQXBwZW5kKGRvbWFpbi5zdHJpbmcoKSk7Cisg
ICAgICAgIG5ldHdvcmtTZXNzaW9uLT5kZWxldGVBbHRlcm5hdGl2ZVNlcnZpY2VzRm9ySG9zdE5h
bWVzKHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTkz
OCwxNSArMTkxMSwxNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdl
YnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogICAgIH0KICAgICAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcGF0aCA9IG1fc2VydmljZVdvcmtlckluZm8u
Z2V0KHNlc3Npb25JRCkuZGF0YWJhc2VQYXRoOwogICAgIGJvb2wgY2xlYXJTZXJ2aWNlV29ya2Vy
cyA9IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpET01DYWNoZSkg
fHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25zKTsKLSAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiAhcGF0aC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgc3dTZXJ2ZXJGb3JTZXNzaW9uKHNlc3Npb25JRCkuZ2V0T3Jp
Z2luc1dpdGhSZWdpc3RyYXRpb25zKFt0aGlzLCBzZXNzaW9uSUQsIGRvbWFpbnNUb0RlbGV0ZUFs
bE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3JdKGNvbnN0IEhhc2hT
ZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBtdXRhYmxlIHsKKyAgICBp
ZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiBuZXR3b3JrU2Vzc2lvbiAmJiBuZXR3b3JrU2Vzc2lv
bi0+aGFzU2VydmljZVdvcmtlckRhdGFiYXNlUGF0aCgpKSB7CisgICAgICAgIG5ldHdvcmtTZXNz
aW9uLT5lbnN1cmVTV1NlcnZlcigpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhbZG9tYWlu
c1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIGNhbGxiYWNrQWdncmVnYXRvciwg
bmV0d29ya1Nlc3Npb24gPSBXZWFrUHRyIHsgKm5ldHdvcmtTZXNzaW9uIH1dKGNvbnN0IEhhc2hT
ZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgc2VjdXJpdHlPcmlnaW4gOiBzZWN1cml0eU9yaWdpbnMpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIWRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRh
Rm9yLmNvbnRhaW5zKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChz
ZWN1cml0eU9yaWdpbi5ob3N0KSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qoc2VjdXJpdHlPcmlnaW4uaG9zdCkpOwot
ICAgICAgICAgICAgICAgIHN3U2VydmVyRm9yU2Vzc2lvbihzZXNzaW9uSUQpLmNsZWFyKHNlY3Vy
aXR5T3JpZ2luLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgICAgICAgICAgICAgIGlm
IChuZXR3b3JrU2Vzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmVu
c3VyZVNXU2VydmVyKCkuY2xlYXIoc2VjdXJpdHlPcmlnaW4sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTIwMDYsNiArMTk3
OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgUmVnaXN0cmFiCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJl
Z2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIGJvb2wgc2hvdWxk
Tm90aWZ5UGFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lv
biA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisKICAgICBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zID0gV2Vic2l0ZURhdGFGZXRjaE9wdGlv
bjo6RG9Ob3RDcmVhdGVQcm9jZXNzZXM7CiAgICAgCiAgICAgc3RydWN0IENhbGxiYWNrQWdncmVn
YXRvciBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0
b3I+IHsKQEAgLTIwNzksOSArMjA1NCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlZ2lzdHJh
YmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsCiAgICAg
fQogICAgIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBwYXRoID0gbV9zZXJ2aWNl
V29ya2VySW5mby5nZXQoc2Vzc2lvbklEKS5kYXRhYmFzZVBhdGg7Ci0gICAgaWYgKCFwYXRoLmlz
RW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbnMpKSB7Ci0gICAgICAgIHN3U2VydmVyRm9yU2Vzc2lvbihz
ZXNzaW9uSUQpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhbY2FsbGJhY2tBZ2dyZWdhdG9y
XShjb25zdCBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4mIHNlY3VyaXR5T3JpZ2lucykgbXV0
YWJsZSB7CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucykgJiYgbmV0d29ya1Nlc3Npb24gJiYgbmV0d29y
a1Nlc3Npb24tPmhhc1NlcnZpY2VXb3JrZXJEYXRhYmFzZVBhdGgoKSkgeworICAgICAgICBuZXR3
b3JrU2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKS5nZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMo
W2NhbGxiYWNrQWdncmVnYXRvcl0oY29uc3QgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+JiBz
ZWN1cml0eU9yaWdpbnMpIG11dGFibGUgewogICAgICAgICAgICAgZm9yIChhdXRvJiBzZWN1cml0
eU9yaWdpbiA6IHNlY3VyaXR5T3JpZ2lucykKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoeyBzZWN1cml0eU9yaWdpbiwgV2Vi
c2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucywgMCB9KTsKICAgICAgICAg
fSk7CkBAIC0yMjk1LDE4ICsyMjY5LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZXBhcmVU
b1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlvbkhhbmRsCiAKICAg
ICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAg
ICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhuZXR3b3JrU2Vzc2lvbi5zZXNzaW9uSUQoKSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAg
ICAgIGlmIChhdXRvKiBzd1NlcnZlciA9IG5ldHdvcmtTZXNzaW9uLnN3U2VydmVyKCkpCisgICAg
ICAgICAgICBzd1NlcnZlci0+c3RhcnRTdXNwZW5zaW9uKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisjZW5kaWYKICAgICB9KTsKIAogICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fd2Vi
UHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygpKQogICAgICAgICBjb25uZWN0aW9uLT5jbGVhbnVw
Rm9yU3VzcGVuc2lvbihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCi0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9zd1NlcnZlcnMudmFsdWVz
KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3dTZXJ2ZXJzLmdldChzZXJ2ZXItPnNlc3Npb25JRCgp
KSA9PSBzZXJ2ZXIuZ2V0KCkpOwotICAgICAgICBzZXJ2ZXItPnN0YXJ0U3VzcGVuc2lvbihbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KLSNlbmRpZgotCiAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCkBAIC0yMzM3
LDggKzIzMDgsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAgICBQQ006OlN0
b3JlOjpwcm9jZXNzRGlkUmVzdW1lKCk7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX3N3U2VydmVycy52YWx1ZXMoKSkKLSAgICAgICAgc2Vy
dmVyLT5lbmRTdXNwZW5zaW9uKCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsmXSAoYXV0
byYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8gc3dTZXJ2ZXIgPSBuZXR3b3Jr
U2Vzc2lvbi5zd1NlcnZlcigpKQorICAgICAgICAgICAgc3dTZXJ2ZXItPmVuZFN1c3BlbnNpb24o
KTsKKyAgICB9KTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZm9yIChh
dXRvJiBzZXJ2ZXIgOiBtX3dlYklEQlNlcnZlcnMudmFsdWVzKCkpCkBAIC0yNDg2LDc2ICsyNDU5
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hTV1NlcnZlcihjb25zdCBGdW5jdGlv
bjx2b2lkKFNXU2VydmVyJik+JiBjYWxsYmFjaykKLXsKLSAgICBmb3IgKGF1dG8mIHNlcnZlciA6
IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQotICAgICAgICBjYWxsYmFjaygqc2VydmVyKTsKLX0KLQot
U1dTZXJ2ZXImIE5ldHdvcmtQcm9jZXNzOjpzd1NlcnZlckZvclNlc3Npb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zd1NlcnZlcnMuZW5zdXJlKHNl
c3Npb25JRCwgWyZdIHsKLSAgICAgICAgYXV0byBpbmZvID0gbV9zZXJ2aWNlV29ya2VySW5mby5n
ZXQoc2Vzc2lvbklEKTsKLSAgICAgICAgYXV0byBwYXRoID0gaW5mby5kYXRhYmFzZVBhdGg7Ci0g
ICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHJlYWR5IGJlIGEgcmVnaXN0ZXJlZCBwYXRoIGZvciB0
aGlzIFBBTDo6U2Vzc2lvbklELgotICAgICAgICAvLyBJZiB0aGVyZSdzIG5vdCwgdGhlbiB3aGVy
ZSBkaWQgdGhpcyBQQUw6OlNlc3Npb25JRCBjb21lIGZyb20/Ci0gICAgICAgIEFTU0VSVChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSB8fCAhcGF0aC5pc0VtcHR5KCkpOwotICAgICAgICAKLSNpZiBF
TkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCi0gICAgICAgIGF1dG8gYXBwQm91bmREb21haW5zQ2Fs
bGJhY2sgPSBbdGhpcywgc2Vzc2lvbklEXShhdXRvJiYgY29tcGxldGlvbkhhbmRsZXIpIHsKLSAg
ICAgICAgICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R2V0QXBwQm91bmREb21haW5zIHsgc2Vzc2lv
bklEIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCAwKTsKLSAgICAgICAgfTsKLSNlbHNl
Ci0gICAgICAgIGF1dG8gYXBwQm91bmREb21haW5zQ2FsbGJhY2sgPSBbXSAoYXV0byYmIGNvbXBs
ZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAg
ICAgICB9OwotI2VuZGlmCi0gICAgICAgIGJvb2wgc2hvdWxkUnVuU2VydmljZVdvcmtlcnNPbk1h
aW5UaHJlYWRGb3JUZXN0aW5nID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBzZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIHNob3VsZFJ1blNlcnZpY2VX
b3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZyA9IHNlc3Npb24tPnNob3VsZFJ1blNlcnZpY2VX
b3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZygpOwotICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxTV1NlcnZlcj4obWFrZVVuaXF1ZVJlZjxXZWJTV09yaWdpblN0b3JlPigpLCBpbmZvLnByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXRoKSwgc2Vzc2lvbklELCBzaG91
bGRSdW5TZXJ2aWNlV29ya2Vyc09uTWFpblRocmVhZEZvclRlc3RpbmcsIHBhcmVudFByb2Nlc3NI
YXNTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgW3RoaXMsIHNlc3Npb25JRF0oYXV0byYmIGpv
YkRhdGEsIGJvb2wgc2hvdWxkUmVmcmVzaENhY2hlLCBhdXRvJiYgcmVxdWVzdCwgYXV0byYmIGNv
bXBsZXRpb25IYW5kbGVyKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIFNlcnZpY2VXb3JrZXJTb2Z0
VXBkYXRlTG9hZGVyOjpzdGFydChuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpLCBXVEZNb3ZlKGpv
YkRhdGEpLCBzaG91bGRSZWZyZXNoQ2FjaGUsIFdURk1vdmUocmVxdWVzdCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSwgW3RoaXMsIHNlc3Npb25JRF0oYXV0byYgcmVn
aXN0cmFibGVEb21haW4sIHN0ZDo6b3B0aW9uYWw8U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50
aWZpZXI+IHNlcnZpY2VXb3JrZXJQYWdlSWRlbnRpZmllciwgYXV0byYmIGNvbXBsZXRpb25IYW5k
bGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXJlZ2lzdHJhYmxlRG9tYWluLmlzRW1wdHkoKSk7
Ci0gICAgICAgICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkVzdGFibGlzaFdvcmtlckNvbnRleHRD
b25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyB7IHJlZ2lzdHJhYmxlRG9tYWluLCBzZXJ2aWNlV29y
a2VyUGFnZUlkZW50aWZpZXIsIHNlc3Npb25JRCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgMCk7Ci0gICAgICAgIH0sIFdURk1vdmUoYXBwQm91bmREb21haW5zQ2FsbGJhY2spKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdlYlNXT3Jp
Z2luU3RvcmUqIE5ldHdvcmtQcm9jZXNzOjpleGlzdGluZ1NXT3JpZ2luU3RvcmVGb3JTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICBhdXRvKiBzd1NlcnZlciA9
IG1fc3dTZXJ2ZXJzLmdldChzZXNzaW9uSUQpOwotICAgIGlmICghc3dTZXJ2ZXIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8V2ViU1dPcmlnaW5TdG9y
ZSY+KHN3U2VydmVyLT5vcmlnaW5TdG9yZSgpKTsKLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oV2ViU1dTZXJ2ZXJDb25uZWN0aW9uJiBjb25uZWN0
aW9uKQotewotICAgIGF1dG8qIHN0b3JlID0gZXhpc3RpbmdTV09yaWdpblN0b3JlRm9yU2Vzc2lv
bihjb25uZWN0aW9uLnNlc3Npb25JRCgpKTsKLSAgICBBU1NFUlQoc3RvcmUpOwotICAgIGlmIChz
dG9yZSkKLSAgICAgICAgc3RvcmUtPnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjp1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0
aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBpZiAoYXV0byog
c3RvcmUgPSBleGlzdGluZ1NXT3JpZ2luU3RvcmVGb3JTZXNzaW9uKGNvbm5lY3Rpb24uc2Vzc2lv
bklEKCkpKQotICAgICAgICBzdG9yZS0+dW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbihjb25u
ZWN0aW9uKTsKLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgU2VydmljZVdvcmtl
ckluZm8gaW5mbyB7Ci0gICAgICAgIFdURk1vdmUoc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSksCi0gICAgICAgIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAotICAgIH07
Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3NlcnZpY2VXb3JrZXJJbmZvLmFkZChzZXNzaW9uSUQs
IFdURk1vdmUoaW5mbykpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7Ci19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJQdXNoTWVzc2Fn
ZT4mKT4mJiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoQlVJTFRfSU5fTk9USUZJQ0FUSU9OUykK
QEAgLTI1NjksNyArMjQ3Miw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldFBlbmRpbmdQdXNo
TWVzc2FnZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uCiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnByb2Nlc3NQdXNoTWVzc2FnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFdlYlB1c2hNZXNzYWdlJiYgcHVzaE1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY2FsbGJhY2spCiB7Ci0gICAgc3dTZXJ2ZXJGb3JTZXNzaW9uKHNlc3Npb25JRCkucHJv
Y2Vzc1B1c2hNZXNzYWdlKFdURk1vdmUocHVzaE1lc3NhZ2UucHVzaERhdGEpLCBXVEZNb3ZlKHB1
c2hNZXNzYWdlLnJlZ2lzdHJhdGlvblVSTCksIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBpZiAo
YXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Np
b24tPmVuc3VyZVNXU2VydmVyKCkucHJvY2Vzc1B1c2hNZXNzYWdlKFdURk1vdmUocHVzaE1lc3Nh
Z2UucHVzaERhdGEpLCBXVEZNb3ZlKHB1c2hNZXNzYWdlLnJlZ2lzdHJhdGlvblVSTCksIFdURk1v
dmUoY2FsbGJhY2spKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA4ODAx
N2M0NGExMDVmMWMwZmRlNTViMjRjMmZlMDk5Yjc2NmZhZjgxLi44NDNjZjA1YjM2NmU3NDY2ODBh
OTg1OGQ2NmJjMzc4YTM1NTRiN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC04NSw3ICs4NSw2IEBAIGNsYXNzIFByb3RlY3Rpb25TcGFj
ZTsKIGNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXI7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Np
b247CiBjbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgU1dTZXJ2ZXI7CiBjbGFzcyBVc2VyQ29u
dGVudFVSTFBhdHRlcm47CiBlbnVtIGNsYXNzIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgOiB1aW50
OF90OwogZW51bSBjbGFzcyBJbmNsdWRlSHR0cE9ubHlDb29raWVzIDogYm9vbDsKQEAgLTEwOSw4
ICsxMDgsNiBAQCBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXI7CiBjbGFzcyBQcm9jZXNzQXNz
ZXJ0aW9uOwogY2xhc3MgU3RvcmFnZU1hbmFnZXJTZXQ7CiBjbGFzcyBXZWJQYWdlTmV0d29ya1Bh
cmFtZXRlcnM7Ci1jbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247Ci1jbGFzcyBXZWJTV1NlcnZl
clRvQ29udGV4dENvbm5lY3Rpb247CiBlbnVtIGNsYXNzIENhbGxEb3dubG9hZERpZFN0YXJ0IDog
Ym9vbDsKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKIGVu
dW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CkBAIC0xMjAsMTAgKzExNyw2
IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJQ
dXNoTWVzc2FnZTsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLWNsYXNzIFdlYlNXT3JpZ2luU3RvcmU7Ci0jZW5kaWYKLQog
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBlbnVtIGNsYXNzIENhY2hlT3B0aW9uIDogdWludDhf
dDsKIH0KQEAgLTMxMCwxNSArMzAzLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTdG9yYWdl
KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJiwgY29u
c3QgVVJMJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViQ29yZTo6U1dT
ZXJ2ZXIqIHN3U2VydmVyRm9yU2Vzc2lvbklmRXhpc3RzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkgeyByZXR1cm4gbV9zd1NlcnZlcnMuZ2V0KHNlc3Npb25JRCk7IH0KLSAgICBXZWJDb3JlOjpT
V1NlcnZlciYgc3dTZXJ2ZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKLSAgICB2b2lkIHJl
Z2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYpOwotICAgIHZv
aWQgdW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbihXZWJTV1NlcnZlckNvbm5lY3Rpb24mKTsK
LSAgICAKLSAgICB2b2lkIGZvckVhY2hTV1NlcnZlcihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6OlNXU2VydmVyJik+Jik7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgYm9vbCBwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkgY29uc3Q7
CiAgICAgdm9pZCBkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCk7CkBAIC01MDIsMTgg
KzQ4Niw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVXZWJJREJTZXJ2ZXJJZlBvc3NpYmxl
KFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN1c3BlbmRJREJTZXJ2ZXJzKGJvb2wgaXNTdXNw
ZW5zaW9uSW1taW5lbnQpOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQg
ZGlkQ3JlYXRlV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6QXR0YWNo
bWVudCYpOwotCi0gICAgdm9pZCBwb3N0TWVzc2FnZVRvU2VydmljZVdvcmtlcihQQUw6OlNlc3Np
b25JRCwgV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXIgZGVzdGluYXRpb24sIFdlYkNv
cmU6Ok1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYsIGNvbnN0IFdlYkNvcmU6OlNlcnZpY2VXb3Jr
ZXJPckNsaWVudElkZW50aWZpZXImIHNvdXJjZSwgV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9u
SWRlbnRpZmllcik7Ci0gICAgCi0gICAgdm9pZCBkaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5KCk7Ci0gICAgCi0gICAgV2ViU1dPcmlnaW5TdG9yZSogZXhpc3RpbmdT
V09yaWdpblN0b3JlRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0KLSAgICB2b2lk
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBib29sIHByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7Ci0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgdm9pZCBzZXRJc0hvbGRpbmdMb2NrZWRGaWxlcyhi
b29sKTsKICNlbmRpZgpAQCAtNjAyLDE1ICs1NzQsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9z
aG91bGRTdXNwZW5kSURCU2VydmVycyB7IGZhbHNlIH07CiAgICAgdWludDY0X3QgbV9zdXNwZW5z
aW9uSWRlbnRpZmllciB7IDAgfTsKICAgICAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgc3RydWN0IFNlcnZpY2VXb3JrZXJJbmZvIHsKLSAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0
aDsKLSAgICAgICAgYm9vbCBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgeyB0cnVlIH07
Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTZXJ2aWNlV29ya2VySW5mbz4g
bV9zZXJ2aWNlV29ya2VySW5mbzsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1dTZXJ2ZXI+PiBtX3N3U2VydmVyczsKLSNlbmRpZgotICAgIAog
I2lmIEVOQUJMRShXRUJfUlRDKQogICAgIFJlZlB0cjxSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFn
ZXJQcm94eT4gbV9ydGNEYXRhQ2hhbm5lbFByb3h5OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IGZhMDMwZWU1ODA0ZDVi
Zjk3ZTk1NDc1ZjEwODMwNGNlZGJlMDM3MTMuLmNhMWI2N2VjMjdiMWJlOGY1ZjE1OWI5YmIyNTNl
NTI2YzVmMTcwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJTV09yaWdpblN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViU29j
a2V0VGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KQEAgLTU0Nyw2ICs1NDgsMTggQEAgU3RyaW5nIE5ldHdv
cmtTZXNzaW9uOjphdHRyaWJ1dGVkQnVuZGxlSWRlbnRpZmllckZyb21QYWdlSWRlbnRpZmllcihX
ZWJQYWdlUHJveHkKICAgICByZXR1cm4gbV9hdHRyaWJ1dGVkQnVuZGxlSWRlbnRpZmllckZyb21Q
YWdlSWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXIpOwogfQogCit2b2lkIE5ldHdvcmtTZXNzaW9u
Ojpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQoreworICAgIFVOVVNFRF9QQVJB
TShjcml0aWNhbCk7CisKKyAgICBjbGVhclByZWZldGNoQ2FjaGUoKTsKKworI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKKyAgICBpZiAobV9zd1NlcnZlcikKKyAgICAgICAgbV9zd1NlcnZlci0+
aGFuZGxlTG93TWVtb3J5V2FybmluZygpOworI2VuZGlmCit9CisKICNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtTZXNzaW9uOjphZGROYXZpZ2F0aW9uUHJlbG9hZGVyVGFz
ayhTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrJiB0YXNrKQogewpAQCAtNTYyLDYgKzU3NSw3MCBAQCBT
ZXJ2aWNlV29ya2VyRmV0Y2hUYXNrKiBOZXR3b3JrU2Vzc2lvbjo6bmF2aWdhdGlvblByZWxvYWRl
clRhc2tGcm9tRmV0Y2hJZGVudGlmaQogewogICAgIHJldHVybiBtX25hdmlnYXRpb25QcmVsb2Fk
ZXJzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKIH0KKworV2ViU1dPcmlnaW5TdG9yZSogTmV0d29y
a1Nlc3Npb246OnN3T3JpZ2luU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N3U2VydmVy
ID8gJnN0YXRpY19jYXN0PFdlYlNXT3JpZ2luU3RvcmUmPihtX3N3U2VydmVyLT5vcmlnaW5TdG9y
ZSgpKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Npb246OnJlZ2lzdGVyU1dTZXJ2
ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBh
dXRvKiBzdG9yZSA9IHN3T3JpZ2luU3RvcmUoKTsKKyAgICBBU1NFUlQoc3RvcmUpOworICAgIGlm
IChzdG9yZSkKKyAgICAgICAgc3RvcmUtPnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKGNvbm5l
Y3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25u
ZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBpZiAoYXV0
byogc3RvcmUgPSBzd09yaWdpblN0b3JlKCkpCisgICAgICAgIHN0b3JlLT51bnJlZ2lzdGVyU1dT
ZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb24pOworfQorCitTV1NlcnZlciYgTmV0d29ya1Nlc3Np
b246OmVuc3VyZVNXU2VydmVyKCkKK3sKKyAgICBpZiAoIW1fc3dTZXJ2ZXIpIHsKKyAgICAgICAg
YXV0byBpbmZvID0gbV9zZXJ2aWNlV29ya2VySW5mby52YWx1ZV9vcihTZXJ2aWNlV29ya2VySW5m
byB7IH0pOworICAgICAgICBhdXRvIHBhdGggPSBpbmZvLmRhdGFiYXNlUGF0aDsKKyAgICAgICAg
Ly8gVGhlcmUgc2hvdWxkIGFscmVhZHkgYmUgYSByZWdpc3RlcmVkIHBhdGggZm9yIHRoaXMgUEFM
OjpTZXNzaW9uSUQuCisgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm90LCB0aGVuIHdoZXJlIGRpZCB0
aGlzIFBBTDo6U2Vzc2lvbklEIGNvbWUgZnJvbT8KKyAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbklE
LmlzRXBoZW1lcmFsKCkgfHwgIXBhdGguaXNFbXB0eSgpKTsKKworI2lmIEVOQUJMRShBUFBfQk9V
TkRfRE9NQUlOUykKKyAgICAgICAgYXV0byBhcHBCb3VuZERvbWFpbnNDYWxsYmFjayA9IFt0aGlz
XShhdXRvJiYgY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R2V0QXBwQm91bmREb21haW5zIHsgbV9zZXNzaW9uSUQg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIDApOworICAgICAgICB9OworI2Vsc2UKKyAg
ICAgICAgYXV0byBhcHBCb3VuZERvbWFpbnNDYWxsYmFjayA9IFtdIChhdXRvJiYgY29tcGxldGlv
bkhhbmRsZXIpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAg
IH07CiAjZW5kaWYKKyAgICAgICAgbV9zd1NlcnZlciA9IG1ha2VVbmlxdWU8U1dTZXJ2ZXI+KG1h
a2VVbmlxdWVSZWY8V2ViU1dPcmlnaW5TdG9yZT4oKSwgaW5mby5wcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQsIFdURk1vdmUocGF0aCksIG1fc2Vzc2lvbklELCBzaG91bGRSdW5TZXJ2aWNl
V29ya2Vyc09uTWFpblRocmVhZEZvclRlc3RpbmcoKSwgbV9uZXR3b3JrUHJvY2Vzcy0+cGFyZW50
UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCBbdGhpc10oYXV0byYmIGpvYkRh
dGEsIGJvb2wgc2hvdWxkUmVmcmVzaENhY2hlLCBhdXRvJiYgcmVxdWVzdCwgYXV0byYmIGNvbXBs
ZXRpb25IYW5kbGVyKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFNlcnZpY2VXb3JrZXJTb2Z0VXBk
YXRlTG9hZGVyOjpzdGFydCh0aGlzLCBXVEZNb3ZlKGpvYkRhdGEpLCBzaG91bGRSZWZyZXNoQ2Fj
aGUsIFdURk1vdmUocmVxdWVzdCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgfSwgW3RoaXNdKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluLCBzdGQ6Om9wdGlvbmFsPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyPiBzZXJ2aWNlV29ya2VyUGFnZUlkZW50aWZpZXIs
IGF1dG8mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICAgICAgQVNTRVJUKCFyZWdpc3Ry
YWJsZURvbWFpbi5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpFc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgeyByZWdpc3RyYWJsZURvbWFpbiwgc2VydmljZVdvcmtlclBhZ2VJZGVudGlmaWVy
LCBtX3Nlc3Npb25JRCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgMCk7CisgICAgICAg
IH0sIFdURk1vdmUoYXBwQm91bmREb21haW5zQ2FsbGJhY2spKTsKKyAgICB9CisgICAgcmV0dXJu
ICptX3N3U2VydmVyOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjphZGRTZXJ2aWNlV29ya2Vy
U2Vzc2lvbihib29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBoYW5kbGUpCit7CisgICAgYm9vbCBoYWRTZXJ2aWNlV29ya2VySW5mbyA9ICEhbV9z
ZXJ2aWNlV29ya2VySW5mbzsKKyAgICBtX3NlcnZpY2VXb3JrZXJJbmZvID0gU2VydmljZVdvcmtl
ckluZm8geworICAgICAgICBXVEZNb3ZlKHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkpLAorICAgICAgICBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQKKyAgICB9OworICAg
IGlmICghaGFkU2VydmljZVdvcmtlckluZm8pCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOworfQorCitib29sIE5ldHdvcmtTZXNzaW9uOjpoYXNT
ZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXJ2aWNl
V29ya2VySW5mbyAmJiAhbV9zZXJ2aWNlV29ya2VySW5mby0+ZGF0YWJhc2VQYXRoLmlzRW1wdHko
KTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmgKaW5kZXggNGI4MGU1MjhhNDRjOGQwNzRkZWY4ODU0NzY0MDAxMTg2M2VhM2U0YS4uYzEzYzA1
ZWQ2NzQ4NjE4OGEzNDMwMzEzYTA0MDg4ZWVlZDFiZmIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAtNTUsMTEgKzU1LDE2IEBAIGNsYXNz
IENlcnRpZmljYXRlSW5mbzsKIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBTV1NlcnZlcjsKIGVu
dW0gY2xhc3MgSW5jbHVkZUh0dHBPbmx5Q29va2llcyA6IGJvb2w7CiBlbnVtIGNsYXNzIFNob3Vs
ZFNhbXBsZSA6IGJvb2w7CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogfQogCituYW1lc3Bh
Y2UgV1RGIHsKK2VudW0gY2xhc3MgQ3JpdGljYWwgOiBib29sOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrOwpAQCAtNzIsNiArNzcsOCBAQCBjbGFzcyBT
ZXJ2aWNlV29ya2VyRmV0Y2hUYXNrOwogY2xhc3MgV2ViUGFnZU5ldHdvcmtQYXJhbWV0ZXJzOwog
Y2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogY2xhc3MgV2ViU29ja2V0VGFz
azsKK2NsYXNzIFdlYlNXT3JpZ2luU3RvcmU7CitjbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247
CiBzdHJ1Y3QgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgU2Vzc2lv
blNldDsKIApAQCAtMTc2LDEyICsxODMsMjQgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1N0YWxl
V2hpbGVSZXZhbGlkYXRlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGFsZVdoaWxlUmV2
YWxpZGF0ZUVuYWJsZWQ7IH0KIAorICAgIHZvaWQgbG93TWVtb3J5SGFuZGxlcihXVEY6OkNyaXRp
Y2FsKTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICB2b2lkIGFkZFNvZnRVcGRh
dGVMb2FkZXIoc3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VXb3JrZXJTb2Z0VXBkYXRlTG9hZGVyPiYm
IGxvYWRlcikgeyBtX3NvZnRVcGRhdGVMb2FkZXJzLmFkZChXVEZNb3ZlKGxvYWRlcikpOyB9CiAg
ICAgdm9pZCByZW1vdmVTb2Z0VXBkYXRlTG9hZGVyKFNlcnZpY2VXb3JrZXJTb2Z0VXBkYXRlTG9h
ZGVyKiBsb2FkZXIpIHsgbV9zb2Z0VXBkYXRlTG9hZGVycy5yZW1vdmUobG9hZGVyKTsgfQogICAg
IHZvaWQgYWRkTmF2aWdhdGlvblByZWxvYWRlclRhc2soU2VydmljZVdvcmtlckZldGNoVGFzayYp
OwogICAgIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2sqIG5hdmlnYXRpb25QcmVsb2FkZXJUYXNrRnJv
bUZldGNoSWRlbnRpZmllcihXZWJDb3JlOjpGZXRjaElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVt
b3ZlTmF2aWdhdGlvblByZWxvYWRlclRhc2soU2VydmljZVdvcmtlckZldGNoVGFzayYpOworCisg
ICAgV2ViQ29yZTo6U1dTZXJ2ZXIqIHN3U2VydmVyKCkgeyByZXR1cm4gbV9zd1NlcnZlci5nZXQo
KTsgfQorICAgIFdlYkNvcmU6OlNXU2VydmVyJiBlbnN1cmVTV1NlcnZlcigpOworICAgIFdlYlNX
T3JpZ2luU3RvcmUqIHN3T3JpZ2luU3RvcmUoKSBjb25zdDsgLy8gRklYTUU6IENhbiBiZSBwcml2
YXRlPworICAgIHZvaWQgcmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oV2ViU1dTZXJ2ZXJDb25u
ZWN0aW9uJik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2Vy
dmVyQ29ubmVjdGlvbiYpOworCisgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRo
KCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKGJvb2wgcHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICNlbmRpZgog
CiAgICAgTmV0d29ya0xvYWRTY2hlZHVsZXImIG5ldHdvcmtMb2FkU2NoZWR1bGVyKCk7CkBAIC0y
NjcsNiArMjg2LDEzIEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAg
ICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZVdvcmtlclNvZnRVcGRhdGVMb2FkZXI+
PiBtX3NvZnRVcGRhdGVMb2FkZXJzOwogICAgIEhhc2hNYXA8V2ViQ29yZTo6RmV0Y2hJZGVudGlm
aWVyLCBXZWFrUHRyPFNlcnZpY2VXb3JrZXJGZXRjaFRhc2s+PiBtX25hdmlnYXRpb25QcmVsb2Fk
ZXJzOworCisgICAgc3RydWN0IFNlcnZpY2VXb3JrZXJJbmZvIHsKKyAgICAgICAgU3RyaW5nIGRh
dGFiYXNlUGF0aDsKKyAgICAgICAgYm9vbCBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
eyB0cnVlIH07CisgICAgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJJbmZvPiBt
X3NlcnZpY2VXb3JrZXJJbmZvOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTV1NlcnZl
cj4gbV9zd1NlcnZlcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJD
b25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtl
ci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IDExMjQ0MjgyODJjZDZlNGM5NTU4OTZh
ODZhYWMyZjcwZjQ1NTZjYWMuLjQ3MmEyMzEzOWY3NjhiMDkxM2M2YWMxNDQxOWY3ZDhiZGYyNDJl
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtl
ci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVz
c2FnZXMuaCIKQEAgLTY5LDEyICs3MCwxNCBAQCBXZWJTV1NlcnZlckNvbm5lY3Rpb246OldlYlNX
U2VydmVyQ29ubmVjdGlvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIFNXUwogICAg
ICwgbV9jb250ZW50Q29ubmVjdGlvbihjb25uZWN0aW9uKQogICAgICwgbV9uZXR3b3JrUHJvY2Vz
cyhuZXR3b3JrUHJvY2VzcykKIHsKLSAgICBuZXR3b3JrUHJvY2Vzcy5yZWdpc3RlclNXU2VydmVy
Q29ubmVjdGlvbigqdGhpcyk7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSB0aGlzLT5zZXNzaW9u
KCkpCisgICAgICAgIHNlc3Npb24tPnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKCp0aGlzKTsK
IH0KIAogV2ViU1dTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViU1dTZXJ2ZXJDb25uZWN0aW9uKCkKIHsK
LSAgICBtX25ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKCp0aGlz
KTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IHRoaXMtPnNlc3Npb24oKSkKKyAgICAgICAgc2Vz
c2lvbi0+dW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbigqdGhpcyk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBrZXlWYWx1ZSA6IG1fY2xpZW50T3JpZ2lucykKICAgICAgICAgc2VydmVyKCkudW5y
ZWdpc3RlclNlcnZpY2VXb3JrZXJDbGllbnQoa2V5VmFsdWUudmFsdWUsIGtleVZhbHVlLmtleSk7
CiAgICAgZm9yIChhdXRvJiBjb21wbGV0aW9uSGFuZGxlciA6IG1fdW5yZWdpc3RlckpvYnMudmFs
dWVzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXgg
ZDhiODFhOWNlOTNkYTA3NmIzOTc5ZTE3YTM3NmIyMjZlNjQ5NzRkNi4uZjQ2MjdiNWNjOGQxNjBm
ZTI4ODQ5MWU5MDg4NzdlYzczNWNkZDkxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTczLDcgKzE3Myw3IEBAIE9CSkNfQ0xBU1MgV0tBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdDsKICNkZWZpbmUgRU5BQkxFX1ZJRVdQT1JUX1JFU0laSU5HIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAKIG5hbWVzcGFjZSBXVEYgewotZW51bSBjbGFzcyBDcml0aWNh
bCA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIENyaXRpY2FsIDogYm9vbDsKIH0KIAogbmFtZXNwYWNl
IEFQSSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446909</attachid>
            <date>2021-12-11 15:33:40 -0800</date>
            <delta_ts>2021-12-15 08:44:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234179-20211211153339.patch</filename>
            <type>text/plain</type>
            <size>46753</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY3MzUyZGNmMDlmNWFhNmE4N2JjN2Zi
YTJkMmFhOGZiZDRjOGVhYzIuLjg5M2YzMmQyN2NhM2JjZDc4MjcyMWJmYjZkYmUzMjJmM2VkNGI1
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMTItMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNXU2VydmVycyBmcm9tIE5ldHdvcmtQcm9jZXNz
IHRvIE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzQxNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDoKKyAgICAgICAgVXNpbmcg
YSBib29sIGFzIHVuZGVybHlpbmcgdHlwZSBmb3IgdGhvc2UgZW51bSBjbGFzc2VzIGlzIHN1ZmZp
Y2llbnQuCisKIDIwMjEtMTItMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBzaW1wbGVyIGlkaW9tcyBmb3Igc3RkOjpsZXNzIGFuZCBzdGQ6OmdyZWF0ZXIg
cG9zc2libGUgaW4gbW9kZXJuIEMrKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzNTM1YzVkOTVmNzViNzQ2NTg0ODNj
YmM2ZWQzYmE4NDY5OTJlZjIyLi40NjVmNDU4ZmY1ZjA0ZDEyZmI5YmRlYzg1Mzg1ZTA2OWM2OGRm
ODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTEwICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTV1NlcnZlcnMgZnJvbSBOZXR3b3Jr
UHJvY2VzcyB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBTV1NlcnZlcnMgZnJvbSBOZXR3b3JrUHJvY2VzcyB0byBO
ZXR3b3JrU2Vzc2lvbiBzaW5jZSB0aGV5IGFyZSBwZXIgc2Vzc2lvbi4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNjaGVkdWxlUmVzb3VyY2VM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmVz
dGFibGlzaFNXU2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjplc3RhYmxpc2hTV0NvbnRleHRDb25uZWN0aW9uKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRo
V2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRv
U3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cHJvY2Vzc1B1c2hNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hTV1NlcnZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzd1NlcnZlckZvclNlc3Npb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZXhpc3RpbmdTV09yaWdpblN0
b3JlRm9yU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpyZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNlcnZpY2VXb3JrZXJT
ZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3dTZXJ2ZXJGb3JTZXNzaW9u
SWZFeGlzdHMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Omxvd01lbW9yeUhhbmRs
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c3dPcmlnaW5TdG9yZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpyZWdpc3RlclNXU2VydmVyQ29u
bmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyU1dT
ZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmVuc3Vy
ZVNXU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Omhhc1NlcnZp
Y2VXb3JrZXJEYXRhYmFzZVBhdGggY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzd1NlcnZl
cik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlckNv
bm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTV1NlcnZlckNvbm5lY3Rpb246Oldl
YlNXU2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNXU2VydmVyQ29ubmVj
dGlvbjo6fldlYlNXU2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKwogMjAyMS0xMi0xMCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgQWxsb3cgYFBhc3RlYm9hcmQ6OnJlYWRCdWZmZXJgIHRvIHJlYWQg
ZnJvbSB0aGUgcGFzdGVib2FyZCBhcyBhIHdob2xlIGluc3RlYWQgb2YgYSBzcGVjaWZpYyBpdGVt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCmluZGV4IDI3ZTIyMDlmYjlhNzNm
ZDgwZmEwNzQ2NWQ1YTUyZTU2MjgwZWVmNjkuLmExNGM3NGViNzMzODYxZTg3Y2IxNzRlZjc2NzE3
MGZjMjcxZGI1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFu
ZGxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC02
Niw4ICs2Niw4IEBAIGVudW0gY2xhc3MgV2Vic2FtUHJvY2Vzc1N0YXRlIDogdWludDhfdCB7CiAg
ICAgSW5hY3RpdmUsCiB9OwogCi1lbnVtIGNsYXNzIENyaXRpY2FsIDogdWludDhfdCB7IE5vLCBZ
ZXMgfTsKLWVudW0gY2xhc3MgU3luY2hyb25vdXMgOiB1aW50OF90IHsgTm8sIFllcyB9OworZW51
bSBjbGFzcyBDcml0aWNhbCA6IGJvb2wgeyBObywgWWVzIH07CitlbnVtIGNsYXNzIFN5bmNocm9u
b3VzIDogYm9vbCB7IE5vLCBZZXMgfTsKIAogdHlwZWRlZiBXVEY6OkZ1bmN0aW9uPHZvaWQoQ3Jp
dGljYWwsIFN5bmNocm9ub3VzKT4gTG93TWVtb3J5SGFuZGxlcjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCAyOTFjYzk4OTJlODEwMjdkOWNhZWQxZDlkYjcwNjFkNzNlNjc0MTcw
Li4xNGM5OWYxNWIzMGM3MGY1NmMyN2JiYmU1OTNlZDkzMmVjMDM3MTYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcApAQCAtNDk5LDE1ICs0OTksMTggQEAgdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQoTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmEKICAgICBDT05ORUNUSU9OX1JFTEVBU0VfTE9HKExvYWRpbmcsICJzY2hlZHVsZVJlc291
cmNlTG9hZDogKHBhcmVudFBJRD0lZCwgcGFnZVByb3h5SUQ9JSIgUFJJdTY0ICIsIHdlYlBhZ2VJ
RD0lIiBQUkl1NjQgIiwgZnJhbWVJRD0lIiBQUkl1NjQgIiwgcmVzb3VyY2VJRD0lIiBQUkl1NjQg
IiwgZXhpc3RpbmdMb2FkZXJUb1Jlc3VtZT0lIiBQUkl1NjQgIikiLCBsb2FkUGFyYW1ldGVycy5w
YXJlbnRQSUQsIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VQcm94eUlELnRvVUludDY0KCksIGxvYWRQ
YXJhbWV0ZXJzLndlYlBhZ2VJRC50b1VJbnQ2NCgpLCBsb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlE
LnRvVUludDY0KCksIGxvYWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIudG9VSW50NjQoKSwgZXhpc3Rp
bmdMb2FkZXJUb1Jlc3VtZS52YWx1ZV9vcihOZXR3b3JrUmVzb3VyY2VMb2FkSWRlbnRpZmllciB7
IH0pLnRvVUludDY0KCkpOwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGF1dG8m
IHNlcnZlciA9IG1fbmV0d29ya1Byb2Nlc3MtPnN3U2VydmVyRm9yU2Vzc2lvbihtX3Nlc3Npb25J
RCk7Ci0gICAgaWYgKCFzZXJ2ZXIuaXNJbXBvcnRDb21wbGV0ZWQoKSkgewotICAgICAgICBzZXJ2
ZXIud2hlbkltcG9ydElzQ29tcGxldGVkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRo
aXMgfSwgbG9hZFBhcmFtZXRlcnMgPSBXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzKSwgZXhpc3RpbmdM
b2FkZXJUb1Jlc3VtZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGlmICghbV9uZXR3b3JrUHJv
Y2Vzcy0+d2ViUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc0lkZW50aWZpZXIoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3Mt
PnN3U2VydmVyRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCkuaXNJbXBvcnRDb21wbGV0ZWQoKSk7Ci0g
ICAgICAgICAgICBzY2hlZHVsZVJlc291cmNlTG9hZChXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzKSwg
ZXhpc3RpbmdMb2FkZXJUb1Jlc3VtZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8m
IHNlcnZlciA9IHNlc3Npb24tPmVuc3VyZVNXU2VydmVyKCk7CisgICAgICAgIGlmICghc2VydmVy
LmlzSW1wb3J0Q29tcGxldGVkKCkpIHsKKyAgICAgICAgICAgIHNlcnZlci53aGVuSW1wb3J0SXND
b21wbGV0ZWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBsb2FkUGFyYW1l
dGVycyA9IFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBleGlzdGluZ0xvYWRlclRvUmVzdW1lXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghbV9uZXR3b3JrUHJvY2Vzcy0+d2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc0lkZW50aWZpZXIoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIEFTU0VSVChuZXR3b3JrU2Vzc2lvbigpICYm
IG5ldHdvcmtTZXNzaW9uKCktPnN3U2VydmVyKCkgJiYgbmV0d29ya1Nlc3Npb24oKS0+c3dTZXJ2
ZXIoKS0+aXNJbXBvcnRDb21wbGV0ZWQoKSk7CisgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXNv
dXJjZUxvYWQoV1RGTW92ZShsb2FkUGFyYW1ldGVycyksIGV4aXN0aW5nTG9hZGVyVG9SZXN1bWUp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKIApAQCAtMTE1Miw3ICsxMTU1LDExIEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmVzdGFibGlzaFNXU2VydmVyQ29ubmVjdGlvbigpCiAgICAgaWYgKG1fc3dD
b25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzZXJ2ZXIgPSBtX25ldHdv
cmtQcm9jZXNzLT5zd1NlcnZlckZvclNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGF1dG8qIHNl
c3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpOworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byYgc2VydmVyID0gc2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKTsKICAg
ICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPFdlYlNXU2VydmVyQ29ubmVjdGlvbj4obV9u
ZXR3b3JrUHJvY2Vzcywgc2VydmVyLCBtX2Nvbm5lY3Rpb24uZ2V0KCksIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXIpOwogCiAgICAgbV9zd0Nvbm5lY3Rpb24gPSAqY29ubmVjdGlvbjsKQEAgLTExNjEs
OCArMTE2OCw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmVzdGFibGlz
aFNXU2VydmVyQ29ubmVjdGlvbigpCiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmVzdGFibGlzaFNXQ29udGV4dENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciB3
ZWJQYWdlUHJveHlJRCwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllcj4gc2VydmljZVdvcmtl
clBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIHNlcnZlciA9IG1fbmV0d29ya1Byb2Nlc3MtPnN3U2Vy
dmVyRm9yU2Vzc2lvbklmRXhpc3RzKG1fc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zd0NvbnRleHRD
b25uZWN0aW9uID0gbWFrZVVuaXF1ZTxXZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24+KCp0
aGlzLCB3ZWJQYWdlUHJveHlJRCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlcnZpY2VX
b3JrZXJQYWdlSWRlbnRpZmllciwgKnNlcnZlcik7CisgICAgYXV0byogc2Vzc2lvbiA9IG5ldHdv
cmtTZXNzaW9uKCk7CisgICAgaWYgKGF1dG8qIHN3U2VydmVyID0gc2Vzc2lvbiA/IHNlc3Npb24t
PnN3U2VydmVyKCkgOiBudWxscHRyKQorICAgICAgICBtX3N3Q29udGV4dENvbm5lY3Rpb24gPSBt
YWtlVW5pcXVlPFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbj4oKnRoaXMsIHdlYlBhZ2VQ
cm94eUlELCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2VydmljZVdvcmtlclBhZ2VJZGVu
dGlmaWVyLCAqc3dTZXJ2ZXIpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMWVm
MzNhNmU2MjczNzEwNDQ3NzUxYTU3M2MyNzQ4OTdlZDI5NDBhNi4uMDUyODhlYzJiZWVjNDI0YzQ3
NzA5NDkyMzZjMDBhOTdmYTgxMTY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTYwLDkgKzYwLDYgQEAKICNpbmNsdWRlICJXZWJQ
cm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKICNpbmNs
dWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJTV09y
aWdpblN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFGZXRjaE9wdGlvbi5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRl
ICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgpAQCAtODEsNiArNzgsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1l
QXBwbGljYXRpb25DaGVja3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NXU2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRh
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+CkBAIC0xMTYsMTAg
KzExNCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ29udGV4dC5oPgogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0jaW5jbHVkZSAiV2ViU1dTZXJ2ZXJUb0NvbnRleHRD
b25uZWN0aW9uTWVzc2FnZXMuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMTAsMTYgKzMwNCwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQogCiAgICAgV1RGOjpy
ZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKIAotICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewotICAgICAgICBuZXR3b3JrU2Vzc2lvbi5jbGVh
clByZWZldGNoQ2FjaGUoKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW2NyaXRpY2FsXShh
dXRvJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBuZXR3b3JrU2Vzc2lvbi5sb3dNZW1vcnlI
YW5kbGVyKGNyaXRpY2FsKTsKICAgICB9KTsKIAogICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmhh
bmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBmb3IgKGF1dG8mIHN3U2VydmVyIDogbV9zd1NlcnZlcnMudmFsdWVzKCkpCi0gICAgICAgIHN3
U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKQEAgLTQyNiwxMyArNDE1LDE0IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzCiAKICAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAotI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2Vu
ZGlmCi0KICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogCiAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdl
YnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKworI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtT
ZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24tPmFkZFNlcnZpY2VXb3JrZXJTZXNz
aW9uKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxl
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkp
LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVs
dFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNh
Y2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY2FjaGVSb290UGF0aEhhbmRs
ZSkKQEAgLTU3MCwxMSArNTYwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIG1fc2Vzc2lvbnNDb250cm9sbGVkQnlB
dXRvbWF0aW9uLnJlbW92ZShzZXNzaW9uSUQpOwogICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpk
ZXN0cm95RW5naW5lKCp0aGlzLCBzZXNzaW9uSUQpOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotICAgIG1fc3dTZXJ2ZXJzLnJlbW92ZShzZXNzaW9uSUQpOwotICAgIG1fc2VydmljZVdv
cmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7Ci0jZW5kaWYKLQogICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwogICAgIGlmIChhdXRvIHNlcnZlciA9IG1fd2ViSURC
U2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAgICAgICAgIHNlcnZlci0+Y2xvc2UoKTsKQEAgLTE0
NjgsNiArMTQ1Myw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfTsKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYoKm5ldyBDYWxsYmFja0FnZ3JlZ2F0b3Io
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9
IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CiAKICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQpA
QCAtMTUxOSw5ICsxNTA1LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9CiAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcGF0aCA9IG1fc2VydmljZVdvcmtlckluZm8u
Z2V0KHNlc3Npb25JRCkuZGF0YWJhc2VQYXRoOwotICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYg
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25zKSkgewotICAgICAgICBzd1NlcnZlckZvclNlc3Npb24oc2Vzc2lvbklEKS5n
ZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oY29uc3QgSGFz
aFNldDxTZWN1cml0eU9yaWdpbkRhdGE+JiBzZWN1cml0eU9yaWdpbnMpIG11dGFibGUgeworICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbnMpICYmIG5ldHdvcmtTZXNzaW9uICYmIG5ldHdvcmtTZXNzaW9uLT5o
YXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkpIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24t
PmVuc3VyZVNXU2VydmVyKCkuZ2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdKGNvbnN0IEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmln
aW5zKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogc2VjdXJpdHlP
cmlnaW5zKQogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0
YS5lbnRyaWVzLmFwcGVuZCh7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9ucywgMCB9KTsKICAgICAgICAgfSk7CkBAIC0xNTM2LDIzICsxNTIxLDE5IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogCiAjaWYgSEFWRShDRk5FVFdPUktfQUxU
RVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBz
ZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBvcmlnaW4gOiBzZXNzaW9uLT5ob3N0TmFtZXNXaXRoQWx0ZXJuYXRpdmVTZXJ2aWNlcygp
KQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRy
aWVzLmFwcGVuZCh7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpBbHRlcm5hdGl2ZVNlcnZpY2Vz
LCAwIH0pOwotICAgICAgICB9CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpBbHRlcm5hdGl2ZVNlcnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgewor
ICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG5ldHdvcmtTZXNzaW9uLT5ob3N0TmFtZXNXaXRo
QWx0ZXJuYXRpdmVTZXJ2aWNlcygpKQorICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5t
X3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkFs
dGVybmF0aXZlU2VydmljZXMsIDAgfSk7CiAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5U
RUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8qIHJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBzZXNzaW9uLT5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKCkpIHsKLSAgICAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLT5yZWdpc3RyYWJsZURvbWFpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRv
bWFpbnMpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbWFpbnMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dl
YnNpdGVEYXRhLnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmFk
ZChkb21haW5zLnRha2VMYXN0KCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fQorICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcykgJiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1
dG8qIHJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljcygpKSB7CisgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZWdp
c3RyYWJsZURvbWFpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRvbWFpbnMpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIHdoaWxlICghZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5yZWdpc3RyYWJs
ZURvbWFpbnNXaXRoUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5hZGQoZG9tYWlucy50YWtlTGFzdCgp
KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNTY2LDYg
KzE1NDcsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2Us
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBh
dXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisK
ICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKFNPVVApCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpIU1RTQ2FjaGUpKQogICAgICAgICBjbGVhckhT
VFNDYWNoZShzZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UpOwpAQCAtMTU5OCw0MyArMTU4MSwzNyBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
ICAgIGJvb2wgY2xlYXJTZXJ2aWNlV29ya2VycyA9IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpET01DYWNoZSkgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKLSAgICBpZiAoY2xl
YXJTZXJ2aWNlV29ya2VycyAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHN3
U2VydmVyRm9yU2Vzc2lvbihzZXNzaW9uSUQpLmNsZWFyQWxsKFtjbGVhclRhc2tzSGFuZGxlcl0g
eyB9KTsKKyAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiAhc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkgJiYgbmV0d29ya1Nlc3Npb24pCisgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5lbnN1cmVT
V1NlcnZlcigpLmNsZWFyQWxsKFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCiAgICAgaWYgKHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3Jr
U2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IG5ldHdvcmtTZXNzaW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGRlbGV0ZWRUeXBlc1JhdyA9IHdlYnNpdGVEYXRhVHlwZXMu
dG9SYXcoKTsKLSAgICAgICAgICAgICAgICBhdXRvIG1vbml0b3JlZFR5cGVzUmF3ID0gV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKS50b1JhdygpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBkZWxldGluZyBh
bGwgb2YgdGhlIGRhdGEgdHlwZXMgdGhhdCB0aGUgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIHN0
b3JlIG1vbml0b3JzCi0gICAgICAgICAgICAgICAgLy8gd2UgZG8gbm90IG5lZWQgdG8gcmUtZ3Jh
bmRmYXRoZXIgb2xkIGRhdGEuCi0gICAgICAgICAgICAgICAgYXV0byBzaG91bGRHcmFuZGZhdGhl
ciA9ICgobW9uaXRvcmVkVHlwZXNSYXcgJiBkZWxldGVkVHlwZXNSYXcpID09IG1vbml0b3JlZFR5
cGVzUmF3KSA/IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6Tm8gOiBTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3M6OlllczsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsg
fSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzID0gbmV0d29ya1Nlc3Npb24gPyBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpIDogbnVsbHB0cikgeworICAgICAgICAgICAgYXV0byBkZWxldGVkVHlwZXNSYXcgPSB3
ZWJzaXRlRGF0YVR5cGVzLnRvUmF3KCk7CisgICAgICAgICAgICBhdXRvIG1vbml0b3JlZFR5cGVz
UmF3ID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMo
KS50b1JhdygpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZGVsZXRpbmcgYWxsIG9mIHRo
ZSBkYXRhIHR5cGVzIHRoYXQgdGhlIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyBzdG9yZSBtb25p
dG9ycworICAgICAgICAgICAgLy8gd2UgZG8gbm90IG5lZWQgdG8gcmUtZ3JhbmRmYXRoZXIgb2xk
IGRhdGEuCisgICAgICAgICAgICBhdXRvIHNob3VsZEdyYW5kZmF0aGVyID0gKChtb25pdG9yZWRU
eXBlc1JhdyAmIGRlbGV0ZWRUeXBlc1JhdykgPT0gbW9uaXRvcmVkVHlwZXNSYXcpID8gU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpObyA6IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6
WWVzOworCisgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBb
Y2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAg
IGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25J
RCkpCisgICAgaWYgKG5ldHdvcmtTZXNzaW9uKQogICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+cmVt
b3ZlTmV0d29ya1dlYnNpdGVEYXRhKG1vZGlmaWVkU2luY2UsIHN0ZDo6bnVsbG9wdCwgW2NsZWFy
VGFza3NIYW5kbGVyXSB7IH0pOwogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVy
XSB7IH0pOwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgICAg
ICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChbY2xlYXJUYXNr
c0hhbmRsZXJdIHsgfSk7Ci0gICAgfQorICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzKSAmJiBuZXR3b3JrU2Vz
c2lvbikKKyAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCiAjaWYgSEFWRShDRk5FVFdPUktfQUxURVJO
QVRJVkVfU0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgICAg
ICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJBbHRlcm5hdGl2ZVNlcnZpY2VzKG1vZGlmaWVkU2luY2Up
OwotICAgIH0KKyAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkFsdGVybmF0aXZlU2VydmljZXMpICYmIG5ldHdvcmtTZXNzaW9uKQorICAgICAgICBuZXR3
b3JrU2Vzc2lvbi0+Y2xlYXJBbHRlcm5hdGl2ZVNlcnZpY2VzKG1vZGlmaWVkU2luY2UpOwogI2Vu
ZGlmCiAKICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vz
c2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCkBAIC0xNjY3LDYg
KzE2NDQsOCBAQCBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hl
OjpDYWNoZSogY2FjaGUsIGNvbnN0IFZlY3RvcjxTZWN1cgogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2luRGF0YXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBj
b29raWVIb3N0TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBIU1RTQ2FjaGVIb3N0TmFtZXMs
IGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIHJlZ2lzdHJhYmxlRG9tYWlucywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGF1dG8q
IG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKKwogICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykp
IHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3JhZ2VTZXNz
aW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29va2llSG9zdE5hbWVzKTsKQEAgLTE2NzgsMjQgKzE2NTcs
MjAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICNlbmRpZgogCiAjaWYgSEFWRShDRk5FVFdP
UktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGhvc3RzOwotICAgICAgICAgICAgaG9zdHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5EYXRhcy5zaXplKCkpOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBvcmlnaW4gOiBvcmlnaW5EYXRhcykKLSAgICAgICAgICAgICAgICBob3N0cy51bmNo
ZWNrZWRBcHBlbmQob3JpZ2luLmhvc3QpOwotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmRl
bGV0ZUFsdGVybmF0aXZlU2VydmljZXNGb3JIb3N0TmFtZXMoaG9zdHMpOwotICAgICAgICB9Cisg
ICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBbHRlcm5h
dGl2ZVNlcnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBob3N0czsKKyAgICAgICAgaG9zdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5EYXRh
cy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbkRhdGFzKQorICAg
ICAgICAgICAgaG9zdHMudW5jaGVja2VkQXBwZW5kKG9yaWdpbi5ob3N0KTsKKyAgICAgICAgbmV0
d29ya1Nlc3Npb24tPmRlbGV0ZUFsdGVybmF0aXZlU2VydmljZXNGb3JIb3N0TmFtZXMoaG9zdHMp
OwogICAgIH0KICNlbmRpZgogCiAgICAgYXV0byBjbGVhclRhc2tzSGFuZGxlciA9IFdURjo6Q2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudHMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9
IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgb3JpZ2luRGF0YSA6IG9yaWdpbkRhdGFzKQotICAgICAgICAgICAgICAgIG5ldHdvcmtTZXNz
aW9uLT5jbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50Rm9yUmVnaXN0cmFibGVEb21haW4oUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KG9yaWdpbkRhdGEuaG9zdCks
IFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLSAgICAgICAgfQorICAgIGlmICh3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRz
KSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkRhdGEgOiBv
cmlnaW5EYXRhcykKKyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhclByaXZhdGVDbGlj
a01lYXN1cmVtZW50Rm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW46OnVuY2hl
Y2tlZENyZWF0ZUZyb21Ib3N0KG9yaWdpbkRhdGEuaG9zdCksIFtjbGVhclRhc2tzSGFuZGxlcl0g
eyB9KTsKICAgICB9CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkRPTUNhY2hlKSkgewpAQCAtMTcxNCw4ICsxNjg5LDggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgT3B0aW8KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBib29sIGNsZWFy
U2VydmljZVdvcmtlcnMgPSB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6RE9NQ2FjaGUpIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucyk7Ci0gICAgaWYgKGNsZWFyU2VydmljZVdvcmtl
cnMgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7Ci0gICAgICAgIGF1dG8mIHNlcnZlciA9
IHN3U2VydmVyRm9yU2Vzc2lvbihzZXNzaW9uSUQpOworICAgIGlmIChjbGVhclNlcnZpY2VXb3Jr
ZXJzICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAg
ICAgICBhdXRvJiBzZXJ2ZXIgPSBuZXR3b3JrU2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKTsKICAg
ICAgICAgZm9yIChhdXRvJiBvcmlnaW5EYXRhIDogb3JpZ2luRGF0YXMpCiAgICAgICAgICAgICBz
ZXJ2ZXIuY2xlYXIob3JpZ2luRGF0YSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogICAgIH0K
QEAgLTE3MzYsMTIgKzE3MTEsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAK
ICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKLSAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3MpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdv
cmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZG9tYWluIDog
cmVnaXN0cmFibGVEb21haW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljcygp
KQotICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZW1vdmVEYXRh
Rm9yRG9tYWluKGRvbWFpbiwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotICAgICAgICAgICAg
fQorICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcykgJiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgZm9yIChh
dXRvJiBkb21haW4gOiByZWdpc3RyYWJsZURvbWFpbnMpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24tPnJlc291cmNlTG9hZFN0
YXRpc3RpY3MoKSkKKyAgICAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZW1v
dmVEYXRhRm9yRG9tYWluKGRvbWFpbiwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogICAgICAg
ICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNzQ5LDcgKzE3MjIsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBPcHRpbwogICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChz
ZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKICAgICAgICAg
aXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIG9yaWdpbkRhdGFz
LCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Np
b24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7CisgICAgaWYgKG5ldHdvcmtT
ZXNzaW9uKSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRv
bWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRhRm9yOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkRh
dGEgOiBvcmlnaW5EYXRhcykKICAgICAgICAgICAgIGRvbWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRh
Rm9yLmFkZChXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhv
c3Qob3JpZ2luRGF0YS5ob3N0KSk7CkBAIC0xODAzLDYgKzE3NzYsOCBAQCBzdGF0aWMgVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gZmlsdGVyRm9yUmVnaXN0cmFibGVEb21haW5z
KGNvbnN0IEhhcwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNp
dGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgUmVnaXN0cmFibGVEb21h
aW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3ImJiBkb21haW5zLCBib29sIHNob3Vs
ZE5vdGlmeVBhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvKiBuZXR3b3Jr
U2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisKICAgICBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zID0gV2Vic2l0ZURhdGFGZXRj
aE9wdGlvbjo6RG9Ob3RDcmVhdGVQcm9jZXNzZXM7CiAKICAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dy
ZWdhdG9yIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxiYWNrQWdncmVn
YXRvcj4gewpAQCAtMTg2NywxNCArMTg0MiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxl
dGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzcwog
I2VuZGlmCiAKICNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWx0ZXJuYXRpdmVT
ZXJ2aWNlcykpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0
d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcmVn
aXN0cmFibGVEb21haW5zVG9EZWxldGU7Ci0gICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tp
ZVdlYnNpdGVEYXRhRm9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6
IGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQotICAgICAgICAgICAg
ICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlLnVuY2hlY2tlZEFwcGVuZChkb21haW4uc3Ry
aW5nKCkpOwotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmRlbGV0ZUFsdGVybmF0aXZlU2Vy
dmljZXNGb3JIb3N0TmFtZXMocmVnaXN0cmFibGVEb21haW5zVG9EZWxldGUpOwotICAgICAgICB9
CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBbHRl
cm5hdGl2ZVNlcnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZTsKKyAgICAgICAgcmVnaXN0cmFibGVEb21h
aW5zVG9EZWxldGUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW5zVG9EZWxldGVBbGxOb25D
b29raWVXZWJzaXRlRGF0YUZvci5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6
IGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQorICAgICAgICAgICAg
cmVnaXN0cmFibGVEb21haW5zVG9EZWxldGUudW5jaGVja2VkQXBwZW5kKGRvbWFpbi5zdHJpbmco
KSk7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5kZWxldGVBbHRlcm5hdGl2ZVNlcnZpY2VzRm9y
SG9zdE5hbWVzKHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlKTsKICAgICB9CiAjZW5kaWYKIApA
QCAtMTkzOCwxNSArMTkxMSwxNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0
cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogICAgIH0KICAg
ICAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcGF0aCA9IG1fc2VydmljZVdvcmtl
ckluZm8uZ2V0KHNlc3Npb25JRCkuZGF0YWJhc2VQYXRoOwogICAgIGJvb2wgY2xlYXJTZXJ2aWNl
V29ya2VycyA9IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpET01D
YWNoZSkgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKLSAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiAh
cGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3dTZXJ2ZXJGb3JTZXNzaW9uKHNlc3Npb25JRCku
Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKFt0aGlzLCBzZXNzaW9uSUQsIGRvbWFpbnNUb0Rl
bGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3JdKGNvbnN0
IEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBtdXRhYmxlIHsK
KyAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiBuZXR3b3JrU2Vzc2lvbiAmJiBuZXR3b3Jr
U2Vzc2lvbi0+aGFzU2VydmljZVdvcmtlckRhdGFiYXNlUGF0aCgpKSB7CisgICAgICAgIG5ldHdv
cmtTZXNzaW9uLT5lbnN1cmVTV1NlcnZlcigpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhb
ZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIGNhbGxiYWNrQWdncmVn
YXRvciwgbmV0d29ya1Nlc3Npb24gPSBXZWFrUHRyIHsgKm5ldHdvcmtTZXNzaW9uIH1dKGNvbnN0
IEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgc2VjdXJpdHlPcmlnaW4gOiBzZWN1cml0eU9yaWdpbnMp
IHsKICAgICAgICAgICAgICAgICBpZiAoIWRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNp
dGVEYXRhRm9yLmNvbnRhaW5zKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
SG9zdChzZWN1cml0eU9yaWdpbi5ob3N0KSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qoc2VjdXJpdHlPcmlnaW4uaG9z
dCkpOwotICAgICAgICAgICAgICAgIHN3U2VydmVyRm9yU2Vzc2lvbihzZXNzaW9uSUQpLmNsZWFy
KHNlY3VyaXR5T3JpZ2luLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgICAgICAgICAg
ICAgIGlmIChuZXR3b3JrU2Vzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgbmV0d29ya1Nlc3Np
b24tPmVuc3VyZVNXU2VydmVyKCkuY2xlYXIoc2VjdXJpdHlPcmlnaW4sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTIwMDYs
NiArMTk3OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5n
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUmVnaXN0cmFiCiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIGJvb2wg
c2hvdWxkTm90aWZ5UGFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvKiBuZXR3b3Jr
U2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisKICAgICBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zID0gV2Vic2l0ZURhdGFGZXRj
aE9wdGlvbjo6RG9Ob3RDcmVhdGVQcm9jZXNzZXM7CiAgICAgCiAgICAgc3RydWN0IENhbGxiYWNr
QWdncmVnYXRvciBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsYmFja0Fn
Z3JlZ2F0b3I+IHsKQEAgLTIwNzksOSArMjA1NCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJl
Z2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
CiAgICAgfQogICAgIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBwYXRoID0gbV9z
ZXJ2aWNlV29ya2VySW5mby5nZXQoc2Vzc2lvbklEKS5kYXRhYmFzZVBhdGg7Ci0gICAgaWYgKCFw
YXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMpKSB7Ci0gICAgICAgIHN3U2VydmVyRm9yU2Vz
c2lvbihzZXNzaW9uSUQpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhbY2FsbGJhY2tBZ2dy
ZWdhdG9yXShjb25zdCBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4mIHNlY3VyaXR5T3JpZ2lu
cykgbXV0YWJsZSB7CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucykgJiYgbmV0d29ya1Nlc3Npb24gJiYg
bmV0d29ya1Nlc3Npb24tPmhhc1NlcnZpY2VXb3JrZXJEYXRhYmFzZVBhdGgoKSkgeworICAgICAg
ICBuZXR3b3JrU2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKS5nZXRPcmlnaW5zV2l0aFJlZ2lzdHJh
dGlvbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oY29uc3QgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRh
dGE+JiBzZWN1cml0eU9yaWdpbnMpIG11dGFibGUgewogICAgICAgICAgICAgZm9yIChhdXRvJiBz
ZWN1cml0eU9yaWdpbiA6IHNlY3VyaXR5T3JpZ2lucykKICAgICAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoeyBzZWN1cml0eU9yaWdp
biwgV2Vic2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucywgMCB9KTsKICAg
ICAgICAgfSk7CkBAIC0yMjk1LDE4ICsyMjY5LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBy
ZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlvbkhhbmRs
CiAKICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikg
ewogICAgICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhuZXR3b3JrU2Vzc2lvbi5zZXNzaW9uSUQo
KSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CisgICAgICAgIGlmIChhdXRvKiBzd1NlcnZlciA9IG5ldHdvcmtTZXNzaW9uLnN3U2VydmVyKCkp
CisgICAgICAgICAgICBzd1NlcnZlci0+c3RhcnRTdXNwZW5zaW9uKFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisjZW5kaWYKICAgICB9KTsKIAogICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6
IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygpKQogICAgICAgICBjb25uZWN0aW9uLT5j
bGVhbnVwRm9yU3VzcGVuc2lvbihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9zd1NlcnZlcnMu
dmFsdWVzKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3dTZXJ2ZXJzLmdldChzZXJ2ZXItPnNlc3Np
b25JRCgpKSA9PSBzZXJ2ZXIuZ2V0KCkpOwotICAgICAgICBzZXJ2ZXItPnN0YXJ0U3VzcGVuc2lv
bihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KLSNlbmRpZgotCiAgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCkBA
IC0yMzM3LDggKzIzMDgsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAgICBQ
Q006OlN0b3JlOjpwcm9jZXNzRGlkUmVzdW1lKCk7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX3N3U2VydmVycy52YWx1ZXMoKSkKLSAgICAg
ICAgc2VydmVyLT5lbmRTdXNwZW5zaW9uKCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsm
XSAoYXV0byYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8gc3dTZXJ2ZXIgPSBu
ZXR3b3JrU2Vzc2lvbi5zd1NlcnZlcigpKQorICAgICAgICAgICAgc3dTZXJ2ZXItPmVuZFN1c3Bl
bnNpb24oKTsKKyAgICB9KTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
Zm9yIChhdXRvJiBzZXJ2ZXIgOiBtX3dlYklEQlNlcnZlcnMudmFsdWVzKCkpCkBAIC0yNDg2LDc2
ICsyNDU5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKIH0KIAogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hTV1NlcnZlcihjb25zdCBG
dW5jdGlvbjx2b2lkKFNXU2VydmVyJik+JiBjYWxsYmFjaykKLXsKLSAgICBmb3IgKGF1dG8mIHNl
cnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQotICAgICAgICBjYWxsYmFjaygqc2VydmVyKTsK
LX0KLQotU1dTZXJ2ZXImIE5ldHdvcmtQcm9jZXNzOjpzd1NlcnZlckZvclNlc3Npb24oUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zd1NlcnZlcnMuZW5z
dXJlKHNlc3Npb25JRCwgWyZdIHsKLSAgICAgICAgYXV0byBpbmZvID0gbV9zZXJ2aWNlV29ya2Vy
SW5mby5nZXQoc2Vzc2lvbklEKTsKLSAgICAgICAgYXV0byBwYXRoID0gaW5mby5kYXRhYmFzZVBh
dGg7Ci0gICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHJlYWR5IGJlIGEgcmVnaXN0ZXJlZCBwYXRo
IGZvciB0aGlzIFBBTDo6U2Vzc2lvbklELgotICAgICAgICAvLyBJZiB0aGVyZSdzIG5vdCwgdGhl
biB3aGVyZSBkaWQgdGhpcyBQQUw6OlNlc3Npb25JRCBjb21lIGZyb20/Ci0gICAgICAgIEFTU0VS
VChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCAhcGF0aC5pc0VtcHR5KCkpOwotICAgICAgICAK
LSNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCi0gICAgICAgIGF1dG8gYXBwQm91bmREb21h
aW5zQ2FsbGJhY2sgPSBbdGhpcywgc2Vzc2lvbklEXShhdXRvJiYgY29tcGxldGlvbkhhbmRsZXIp
IHsKLSAgICAgICAgICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R2V0QXBwQm91bmREb21haW5zIHsg
c2Vzc2lvbklEIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCAwKTsKLSAgICAgICAgfTsK
LSNlbHNlCi0gICAgICAgIGF1dG8gYXBwQm91bmREb21haW5zQ2FsbGJhY2sgPSBbXSAoYXV0byYm
IGNvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0p
OwotICAgICAgICB9OwotI2VuZGlmCi0gICAgICAgIGJvb2wgc2hvdWxkUnVuU2VydmljZVdvcmtl
cnNPbk1haW5UaHJlYWRGb3JUZXN0aW5nID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBzZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIHNob3VsZFJ1blNl
cnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZyA9IHNlc3Npb24tPnNob3VsZFJ1blNl
cnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZygpOwotICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxTV1NlcnZlcj4obWFrZVVuaXF1ZVJlZjxXZWJTV09yaWdpblN0b3JlPigpLCBpbmZv
LnByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXRoKSwgc2Vzc2lvbklE
LCBzaG91bGRSdW5TZXJ2aWNlV29ya2Vyc09uTWFpblRocmVhZEZvclRlc3RpbmcsIHBhcmVudFBy
b2Nlc3NIYXNTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgW3RoaXMsIHNlc3Npb25JRF0oYXV0
byYmIGpvYkRhdGEsIGJvb2wgc2hvdWxkUmVmcmVzaENhY2hlLCBhdXRvJiYgcmVxdWVzdCwgYXV0
byYmIGNvbXBsZXRpb25IYW5kbGVyKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIFNlcnZpY2VXb3Jr
ZXJTb2Z0VXBkYXRlTG9hZGVyOjpzdGFydChuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpLCBXVEZN
b3ZlKGpvYkRhdGEpLCBzaG91bGRSZWZyZXNoQ2FjaGUsIFdURk1vdmUocmVxdWVzdCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSwgW3RoaXMsIHNlc3Npb25JRF0oYXV0
byYgcmVnaXN0cmFibGVEb21haW4sIHN0ZDo6b3B0aW9uYWw8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dElkZW50aWZpZXI+IHNlcnZpY2VXb3JrZXJQYWdlSWRlbnRpZmllciwgYXV0byYmIGNvbXBsZXRp
b25IYW5kbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXJlZ2lzdHJhYmxlRG9tYWluLmlzRW1w
dHkoKSk7Ci0gICAgICAgICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyB7IHJlZ2lzdHJhYmxlRG9tYWluLCBzZXJ2
aWNlV29ya2VyUGFnZUlkZW50aWZpZXIsIHNlc3Npb25JRCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgMCk7Ci0gICAgICAgIH0sIFdURk1vdmUoYXBwQm91bmREb21haW5zQ2FsbGJhY2sp
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLVdl
YlNXT3JpZ2luU3RvcmUqIE5ldHdvcmtQcm9jZXNzOjpleGlzdGluZ1NXT3JpZ2luU3RvcmVGb3JT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICBhdXRvKiBzd1Nl
cnZlciA9IG1fc3dTZXJ2ZXJzLmdldChzZXNzaW9uSUQpOwotICAgIGlmICghc3dTZXJ2ZXIpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8V2ViU1dPcmln
aW5TdG9yZSY+KHN3U2VydmVyLT5vcmlnaW5TdG9yZSgpKTsKLX0KLQotdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oV2ViU1dTZXJ2ZXJDb25uZWN0aW9uJiBj
b25uZWN0aW9uKQotewotICAgIGF1dG8qIHN0b3JlID0gZXhpc3RpbmdTV09yaWdpblN0b3JlRm9y
U2Vzc2lvbihjb25uZWN0aW9uLnNlc3Npb25JRCgpKTsKLSAgICBBU1NFUlQoc3RvcmUpOwotICAg
IGlmIChzdG9yZSkKLSAgICAgICAgc3RvcmUtPnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKGNv
bm5lY3Rpb24pOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjp1bnJlZ2lzdGVyU1dTZXJ2ZXJD
b25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBpZiAo
YXV0byogc3RvcmUgPSBleGlzdGluZ1NXT3JpZ2luU3RvcmVGb3JTZXNzaW9uKGNvbm5lY3Rpb24u
c2Vzc2lvbklEKCkpKQotICAgICAgICBzdG9yZS0+dW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlv
bihjb25uZWN0aW9uKTsKLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2VydmljZVdvcmtl
clNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHByb2Nlc3NUZXJtaW5hdGlv
bkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgU2Vydmlj
ZVdvcmtlckluZm8gaW5mbyB7Ci0gICAgICAgIFdURk1vdmUoc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSksCi0gICAgICAgIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAot
ICAgIH07Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3NlcnZpY2VXb3JrZXJJbmZvLmFkZChzZXNz
aW9uSUQsIFdURk1vdmUoaW5mbykpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7Ci19Ci0K
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJQdXNo
TWVzc2FnZT4mKT4mJiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoQlVJTFRfSU5fTk9USUZJQ0FU
SU9OUykKQEAgLTI1NjksNyArMjQ3Miw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldFBlbmRp
bmdQdXNoTWVzc2FnZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uCiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NQdXNoTWVzc2FnZShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIFdlYlB1c2hNZXNzYWdlJiYgcHVzaE1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY2FsbGJhY2spCiB7Ci0gICAgc3dTZXJ2ZXJGb3JTZXNzaW9uKHNlc3Npb25J
RCkucHJvY2Vzc1B1c2hNZXNzYWdlKFdURk1vdmUocHVzaE1lc3NhZ2UucHVzaERhdGEpLCBXVEZN
b3ZlKHB1c2hNZXNzYWdlLnJlZ2lzdHJhdGlvblVSTCksIFdURk1vdmUoY2FsbGJhY2spKTsKKyAg
ICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAg
IHNlc3Npb24tPmVuc3VyZVNXU2VydmVyKCkucHJvY2Vzc1B1c2hNZXNzYWdlKFdURk1vdmUocHVz
aE1lc3NhZ2UucHVzaERhdGEpLCBXVEZNb3ZlKHB1c2hNZXNzYWdlLnJlZ2lzdHJhdGlvblVSTCks
IFdURk1vdmUoY2FsbGJhY2spKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRl
eCA4ODAxN2M0NGExMDVmMWMwZmRlNTViMjRjMmZlMDk5Yjc2NmZhZjgxLi44NDNjZjA1YjM2NmU3
NDY2ODBhOTg1OGQ2NmJjMzc4YTM1NTRiN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC04NSw3ICs4NSw2IEBAIGNsYXNzIFByb3RlY3Rp
b25TcGFjZTsKIGNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXI7CiBjbGFzcyBOZXR3b3JrU3RvcmFn
ZVNlc3Npb247CiBjbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgU1dTZXJ2ZXI7CiBjbGFzcyBV
c2VyQ29udGVudFVSTFBhdHRlcm47CiBlbnVtIGNsYXNzIEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
OiB1aW50OF90OwogZW51bSBjbGFzcyBJbmNsdWRlSHR0cE9ubHlDb29raWVzIDogYm9vbDsKQEAg
LTEwOSw4ICsxMDgsNiBAQCBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXI7CiBjbGFzcyBQcm9j
ZXNzQXNzZXJ0aW9uOwogY2xhc3MgU3RvcmFnZU1hbmFnZXJTZXQ7CiBjbGFzcyBXZWJQYWdlTmV0
d29ya1BhcmFtZXRlcnM7Ci1jbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247Ci1jbGFzcyBXZWJT
V1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb247CiBlbnVtIGNsYXNzIENhbGxEb3dubG9hZERpZFN0
YXJ0IDogYm9vbDsKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9v
bDsKIGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CkBAIC0xMjAsMTAg
KzExNyw2IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVj
dCBXZWJQdXNoTWVzc2FnZTsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLWNsYXNzIFdlYlNXT3JpZ2luU3RvcmU7Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBlbnVtIGNsYXNzIENhY2hlT3B0aW9uIDog
dWludDhfdDsKIH0KQEAgLTMxMCwxNSArMzAzLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJT
dG9yYWdlKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJM
JiwgY29uc3QgVVJMJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViQ29y
ZTo6U1dTZXJ2ZXIqIHN3U2VydmVyRm9yU2Vzc2lvbklmRXhpc3RzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkgeyByZXR1cm4gbV9zd1NlcnZlcnMuZ2V0KHNlc3Npb25JRCk7IH0KLSAgICBXZWJD
b3JlOjpTV1NlcnZlciYgc3dTZXJ2ZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKLSAgICB2
b2lkIHJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYpOwot
ICAgIHZvaWQgdW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbihXZWJTV1NlcnZlckNvbm5lY3Rp
b24mKTsKLSAgICAKLSAgICB2b2lkIGZvckVhY2hTV1NlcnZlcihjb25zdCBGdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OlNXU2VydmVyJik+Jik7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgYm9vbCBwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkg
Y29uc3Q7CiAgICAgdm9pZCBkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCk7CkBAIC01
MDIsMTggKzQ4Niw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVXZWJJREJTZXJ2ZXJJZlBv
c3NpYmxlKFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN1c3BlbmRJREJTZXJ2ZXJzKGJvb2wg
aXNTdXNwZW5zaW9uSW1taW5lbnQpOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IHZvaWQgZGlkQ3JlYXRlV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6
QXR0YWNobWVudCYpOwotCi0gICAgdm9pZCBwb3N0TWVzc2FnZVRvU2VydmljZVdvcmtlcihQQUw6
OlNlc3Npb25JRCwgV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXIgZGVzdGluYXRpb24s
IFdlYkNvcmU6Ok1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYsIGNvbnN0IFdlYkNvcmU6OlNlcnZp
Y2VXb3JrZXJPckNsaWVudElkZW50aWZpZXImIHNvdXJjZSwgV2ViQ29yZTo6U1dTZXJ2ZXJDb25u
ZWN0aW9uSWRlbnRpZmllcik7Ci0gICAgCi0gICAgdm9pZCBkaXNhYmxlU2VydmljZVdvcmtlclBy
b2Nlc3NUZXJtaW5hdGlvbkRlbGF5KCk7Ci0gICAgCi0gICAgV2ViU1dPcmlnaW5TdG9yZSogZXhp
c3RpbmdTV09yaWdpblN0b3JlRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBib29sIHByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgdm9pZCBzZXRJc0hvbGRpbmdMb2NrZWRG
aWxlcyhib29sKTsKICNlbmRpZgpAQCAtNjAyLDE1ICs1NzQsNiBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9zaG91bGRTdXNwZW5kSURCU2VydmVycyB7IGZhbHNlIH07CiAgICAgdWludDY0X3QgbV9z
dXNwZW5zaW9uSWRlbnRpZmllciB7IDAgfTsKICAgICAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgc3RydWN0IFNlcnZpY2VXb3JrZXJJbmZvIHsKLSAgICAgICAgU3RyaW5nIGRhdGFi
YXNlUGF0aDsKLSAgICAgICAgYm9vbCBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgeyB0
cnVlIH07Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTZXJ2aWNlV29ya2Vy
SW5mbz4gbV9zZXJ2aWNlV29ya2VySW5mbzsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1dTZXJ2ZXI+PiBtX3N3U2VydmVyczsKLSNlbmRpZgot
ICAgIAogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIFJlZlB0cjxSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eT4gbV9ydGNEYXRhQ2hhbm5lbFByb3h5OwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IGZhMDMwZWU1
ODA0ZDViZjk3ZTk1NDc1ZjEwODMwNGNlZGJlMDM3MTMuLmNhMWI2N2VjMjdiMWJlOGY1ZjE1OWI5
YmIyNTNlNTI2YzVmMTcwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTV09yaWdpblN0b3JlLmgiCiAjaW5jbHVkZSAi
V2ViU29ja2V0VGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KQEAgLTU0Nyw2ICs1NDgsMTggQEAgU3RyaW5n
IE5ldHdvcmtTZXNzaW9uOjphdHRyaWJ1dGVkQnVuZGxlSWRlbnRpZmllckZyb21QYWdlSWRlbnRp
ZmllcihXZWJQYWdlUHJveHkKICAgICByZXR1cm4gbV9hdHRyaWJ1dGVkQnVuZGxlSWRlbnRpZmll
ckZyb21QYWdlSWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXIpOwogfQogCit2b2lkIE5ldHdvcmtT
ZXNzaW9uOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQoreworICAgIFVOVVNF
RF9QQVJBTShjcml0aWNhbCk7CisKKyAgICBjbGVhclByZWZldGNoQ2FjaGUoKTsKKworI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBpZiAobV9zd1NlcnZlcikKKyAgICAgICAgbV9zd1Nl
cnZlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOworI2VuZGlmCit9CisKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtTZXNzaW9uOjphZGROYXZpZ2F0aW9uUHJlbG9h
ZGVyVGFzayhTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrJiB0YXNrKQogewpAQCAtNTYyLDYgKzU3NSw3
MCBAQCBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrKiBOZXR3b3JrU2Vzc2lvbjo6bmF2aWdhdGlvblBy
ZWxvYWRlclRhc2tGcm9tRmV0Y2hJZGVudGlmaQogewogICAgIHJldHVybiBtX25hdmlnYXRpb25Q
cmVsb2FkZXJzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKIH0KKworV2ViU1dPcmlnaW5TdG9yZSog
TmV0d29ya1Nlc3Npb246OnN3T3JpZ2luU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N3
U2VydmVyID8gJnN0YXRpY19jYXN0PFdlYlNXT3JpZ2luU3RvcmUmPihtX3N3U2VydmVyLT5vcmln
aW5TdG9yZSgpKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Npb246OnJlZ2lzdGVy
U1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sK
KyAgICBhdXRvKiBzdG9yZSA9IHN3T3JpZ2luU3RvcmUoKTsKKyAgICBBU1NFUlQoc3RvcmUpOwor
ICAgIGlmIChzdG9yZSkKKyAgICAgICAgc3RvcmUtPnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyU1dTZXJ2
ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBp
ZiAoYXV0byogc3RvcmUgPSBzd09yaWdpblN0b3JlKCkpCisgICAgICAgIHN0b3JlLT51bnJlZ2lz
dGVyU1dTZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb24pOworfQorCitTV1NlcnZlciYgTmV0d29y
a1Nlc3Npb246OmVuc3VyZVNXU2VydmVyKCkKK3sKKyAgICBpZiAoIW1fc3dTZXJ2ZXIpIHsKKyAg
ICAgICAgYXV0byBpbmZvID0gbV9zZXJ2aWNlV29ya2VySW5mby52YWx1ZV9vcihTZXJ2aWNlV29y
a2VySW5mbyB7IH0pOworICAgICAgICBhdXRvIHBhdGggPSBpbmZvLmRhdGFiYXNlUGF0aDsKKyAg
ICAgICAgLy8gVGhlcmUgc2hvdWxkIGFscmVhZHkgYmUgYSByZWdpc3RlcmVkIHBhdGggZm9yIHRo
aXMgUEFMOjpTZXNzaW9uSUQuCisgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm90LCB0aGVuIHdoZXJl
IGRpZCB0aGlzIFBBTDo6U2Vzc2lvbklEIGNvbWUgZnJvbT8KKyAgICAgICAgQVNTRVJUKG1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkgfHwgIXBhdGguaXNFbXB0eSgpKTsKKworI2lmIEVOQUJMRShB
UFBfQk9VTkRfRE9NQUlOUykKKyAgICAgICAgYXV0byBhcHBCb3VuZERvbWFpbnNDYWxsYmFjayA9
IFt0aGlzXShhdXRvJiYgY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R2V0QXBwQm91bmREb21haW5zIHsgbV9zZXNz
aW9uSUQgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIDApOworICAgICAgICB9OworI2Vs
c2UKKyAgICAgICAgYXV0byBhcHBCb3VuZERvbWFpbnNDYWxsYmFjayA9IFtdIChhdXRvJiYgY29t
cGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Cisg
ICAgICAgIH07CiAjZW5kaWYKKyAgICAgICAgbV9zd1NlcnZlciA9IG1ha2VVbmlxdWU8U1dTZXJ2
ZXI+KG1ha2VVbmlxdWVSZWY8V2ViU1dPcmlnaW5TdG9yZT4oKSwgaW5mby5wcm9jZXNzVGVybWlu
YXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGF0aCksIG1fc2Vzc2lvbklELCBzaG91bGRSdW5T
ZXJ2aWNlV29ya2Vyc09uTWFpblRocmVhZEZvclRlc3RpbmcoKSwgbV9uZXR3b3JrUHJvY2Vzcy0+
cGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCBbdGhpc10oYXV0byYm
IGpvYkRhdGEsIGJvb2wgc2hvdWxkUmVmcmVzaENhY2hlLCBhdXRvJiYgcmVxdWVzdCwgYXV0byYm
IGNvbXBsZXRpb25IYW5kbGVyKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFNlcnZpY2VXb3JrZXJT
b2Z0VXBkYXRlTG9hZGVyOjpzdGFydCh0aGlzLCBXVEZNb3ZlKGpvYkRhdGEpLCBzaG91bGRSZWZy
ZXNoQ2FjaGUsIFdURk1vdmUocmVxdWVzdCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICAgICAgfSwgW3RoaXNdKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluLCBzdGQ6Om9wdGlvbmFs
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyPiBzZXJ2aWNlV29ya2VyUGFnZUlkZW50
aWZpZXIsIGF1dG8mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICAgICAgQVNTRVJUKCFy
ZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpFc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MgeyByZWdpc3RyYWJsZURvbWFpbiwgc2VydmljZVdvcmtlclBhZ2VJZGVu
dGlmaWVyLCBtX3Nlc3Npb25JRCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgMCk7Cisg
ICAgICAgIH0sIFdURk1vdmUoYXBwQm91bmREb21haW5zQ2FsbGJhY2spKTsKKyAgICB9CisgICAg
cmV0dXJuICptX3N3U2VydmVyOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjphZGRTZXJ2aWNl
V29ya2VyU2Vzc2lvbihib29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5n
JiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgYm9vbCBoYWRTZXJ2aWNlV29ya2VySW5mbyA9
ICEhbV9zZXJ2aWNlV29ya2VySW5mbzsKKyAgICBtX3NlcnZpY2VXb3JrZXJJbmZvID0gU2Vydmlj
ZVdvcmtlckluZm8geworICAgICAgICBXVEZNb3ZlKHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkpLAorICAgICAgICBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQKKyAgICB9
OworICAgIGlmICghaGFkU2VydmljZVdvcmtlckluZm8pCisgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOworfQorCitib29sIE5ldHdvcmtTZXNzaW9u
OjpoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
ZXJ2aWNlV29ya2VySW5mbyAmJiAhbV9zZXJ2aWNlV29ya2VySW5mby0+ZGF0YWJhc2VQYXRoLmlz
RW1wdHkoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmgKaW5kZXggNGI4MGU1MjhhNDRjOGQwNzRkZWY4ODU0NzY0MDAxMTg2M2VhM2U0YS4u
YzEzYzA1ZWQ2NzQ4NjE4OGEzNDMwMzEzYTA0MDg4ZWVlZDFiZmIyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAtNTUsMTEgKzU1LDE2IEBA
IGNsYXNzIENlcnRpZmljYXRlSW5mbzsKIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKIGNs
YXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBTV1NlcnZl
cjsKIGVudW0gY2xhc3MgSW5jbHVkZUh0dHBPbmx5Q29va2llcyA6IGJvb2w7CiBlbnVtIGNsYXNz
IFNob3VsZFNhbXBsZSA6IGJvb2w7CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogfQogCitu
YW1lc3BhY2UgV1RGIHsKK2VudW0gY2xhc3MgQ3JpdGljYWwgOiBib29sOworfQorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrOwpAQCAtNzIsNiArNzcsOCBAQCBj
bGFzcyBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrOwogY2xhc3MgV2ViUGFnZU5ldHdvcmtQYXJhbWV0
ZXJzOwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogY2xhc3MgV2ViU29j
a2V0VGFzazsKK2NsYXNzIFdlYlNXT3JpZ2luU3RvcmU7CitjbGFzcyBXZWJTV1NlcnZlckNvbm5l
Y3Rpb247CiBzdHJ1Y3QgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3Qg
U2Vzc2lvblNldDsKIApAQCAtMTc2LDEyICsxODMsMjQgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c1N0YWxlV2hpbGVSZXZhbGlkYXRlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGFsZVdo
aWxlUmV2YWxpZGF0ZUVuYWJsZWQ7IH0KIAorICAgIHZvaWQgbG93TWVtb3J5SGFuZGxlcihXVEY6
OkNyaXRpY2FsKTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICB2b2lkIGFkZFNv
ZnRVcGRhdGVMb2FkZXIoc3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VXb3JrZXJTb2Z0VXBkYXRlTG9h
ZGVyPiYmIGxvYWRlcikgeyBtX3NvZnRVcGRhdGVMb2FkZXJzLmFkZChXVEZNb3ZlKGxvYWRlcikp
OyB9CiAgICAgdm9pZCByZW1vdmVTb2Z0VXBkYXRlTG9hZGVyKFNlcnZpY2VXb3JrZXJTb2Z0VXBk
YXRlTG9hZGVyKiBsb2FkZXIpIHsgbV9zb2Z0VXBkYXRlTG9hZGVycy5yZW1vdmUobG9hZGVyKTsg
fQogICAgIHZvaWQgYWRkTmF2aWdhdGlvblByZWxvYWRlclRhc2soU2VydmljZVdvcmtlckZldGNo
VGFzayYpOwogICAgIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2sqIG5hdmlnYXRpb25QcmVsb2FkZXJU
YXNrRnJvbUZldGNoSWRlbnRpZmllcihXZWJDb3JlOjpGZXRjaElkZW50aWZpZXIpOwogICAgIHZv
aWQgcmVtb3ZlTmF2aWdhdGlvblByZWxvYWRlclRhc2soU2VydmljZVdvcmtlckZldGNoVGFzayYp
OworCisgICAgV2ViQ29yZTo6U1dTZXJ2ZXIqIHN3U2VydmVyKCkgeyByZXR1cm4gbV9zd1NlcnZl
ci5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlNXU2VydmVyJiBlbnN1cmVTV1NlcnZlcigpOworICAg
IFdlYlNXT3JpZ2luU3RvcmUqIHN3T3JpZ2luU3RvcmUoKSBjb25zdDsgLy8gRklYTUU6IENhbiBi
ZSBwcml2YXRlPworICAgIHZvaWQgcmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oV2ViU1dTZXJ2
ZXJDb25uZWN0aW9uJik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdl
YlNXU2VydmVyQ29ubmVjdGlvbiYpOworCisgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRGF0YWJh
c2VQYXRoKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKGJvb2wg
cHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICNl
bmRpZgogCiAgICAgTmV0d29ya0xvYWRTY2hlZHVsZXImIG5ldHdvcmtMb2FkU2NoZWR1bGVyKCk7
CkBAIC0yNjcsNiArMjg2LDEzIEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiAgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZVdvcmtlclNvZnRVcGRhdGVM
b2FkZXI+PiBtX3NvZnRVcGRhdGVMb2FkZXJzOwogICAgIEhhc2hNYXA8V2ViQ29yZTo6RmV0Y2hJ
ZGVudGlmaWVyLCBXZWFrUHRyPFNlcnZpY2VXb3JrZXJGZXRjaFRhc2s+PiBtX25hdmlnYXRpb25Q
cmVsb2FkZXJzOworCisgICAgc3RydWN0IFNlcnZpY2VXb3JrZXJJbmZvIHsKKyAgICAgICAgU3Ry
aW5nIGRhdGFiYXNlUGF0aDsKKyAgICAgICAgYm9vbCBwcm9jZXNzVGVybWluYXRpb25EZWxheUVu
YWJsZWQgeyB0cnVlIH07CisgICAgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJJ
bmZvPiBtX3NlcnZpY2VXb3JrZXJJbmZvOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
V1NlcnZlcj4gbV9zd1NlcnZlcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dT
ZXJ2ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2Vydmlj
ZVdvcmtlci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IDExMjQ0MjgyODJjZDZlNGM5
NTU4OTZhODZhYWMyZjcwZjQ1NTZjYWMuLjQ3MmEyMzEzOWY3NjhiMDkxM2M2YWMxNDQxOWY3ZDhi
ZGYyNDJlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2Vydmlj
ZVdvcmtlci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKQEAgLTY5LDEyICs3MCwxNCBAQCBXZWJTV1NlcnZlckNvbm5lY3Rpb246
OldlYlNXU2VydmVyQ29ubmVjdGlvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIFNX
UwogICAgICwgbV9jb250ZW50Q29ubmVjdGlvbihjb25uZWN0aW9uKQogICAgICwgbV9uZXR3b3Jr
UHJvY2VzcyhuZXR3b3JrUHJvY2VzcykKIHsKLSAgICBuZXR3b3JrUHJvY2Vzcy5yZWdpc3RlclNX
U2VydmVyQ29ubmVjdGlvbigqdGhpcyk7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSB0aGlzLT5z
ZXNzaW9uKCkpCisgICAgICAgIHNlc3Npb24tPnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKCp0
aGlzKTsKIH0KIAogV2ViU1dTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViU1dTZXJ2ZXJDb25uZWN0aW9u
KCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9u
KCp0aGlzKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IHRoaXMtPnNlc3Npb24oKSkKKyAgICAg
ICAgc2Vzc2lvbi0+dW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbigqdGhpcyk7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBrZXlWYWx1ZSA6IG1fY2xpZW50T3JpZ2lucykKICAgICAgICAgc2VydmVy
KCkudW5yZWdpc3RlclNlcnZpY2VXb3JrZXJDbGllbnQoa2V5VmFsdWUudmFsdWUsIGtleVZhbHVl
LmtleSk7CiAgICAgZm9yIChhdXRvJiBjb21wbGV0aW9uSGFuZGxlciA6IG1fdW5yZWdpc3Rlckpv
YnMudmFsdWVzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
aW5kZXggZDhiODFhOWNlOTNkYTA3NmIzOTc5ZTE3YTM3NmIyMjZlNjQ5NzRkNi4uZjQ2MjdiNWNj
OGQxNjBmZTI4ODQ5MWU5MDg4NzdlYzczNWNkZDkxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTczLDcgKzE3Myw3IEBAIE9CSkNfQ0xBU1MgV0tB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdDsKICNkZWZpbmUgRU5BQkxFX1ZJRVdQT1JUX1JFU0la
SU5HIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIG5hbWVzcGFjZSBXVEYgewotZW51bSBjbGFzcyBD
cml0aWNhbCA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIENyaXRpY2FsIDogYm9vbDsKIH0KIAogbmFt
ZXNwYWNlIEFQSSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447236</attachid>
            <date>2021-12-15 08:44:10 -0800</date>
            <delta_ts>2021-12-15 10:20:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234179-20211215084409.patch</filename>
            <type>text/plain</type>
            <size>46083</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDg3ODEzMDBkMDljOGFjZDdmMTg5MTc1
NDIwZjExMzI4MmM3ODQzMzIuLjJjYmRkNjdhODhiNzdiYmJiYWY4N2E4ZjUwNmM4YzQ4YTVjNWMy
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMTItMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNXU2VydmVycyBmcm9tIE5ldHdvcmtQcm9jZXNz
IHRvIE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzQxNzkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDoKKyAgICAgICAgVXNpbmcgYSBi
b29sIGFzIHVuZGVybHlpbmcgdHlwZSBmb3IgdGhvc2UgZW51bSBjbGFzc2VzIGlzIHN1ZmZpY2ll
bnQuCisKIDIwMjEtMTItMTUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1ha2UgdXNlIG9mIFBMQVRGT1JNKENPQ09BKSBpbiBNZWRpYVJlY29yZGVyIFdlYlBy
ZWZlcmVuY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggYTNmODMwNDRkZDExOWMyMzdlYmNjNmNlM2E0NTk4MWU2NmNh
N2JhNC4uNzdjOWUxMzhhM2ZmNTNhYzQ5ZjQ1N2M2Mjc5OTUxNjVhMzAyMzMxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MSBAQAorMjAyMS0xMi0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIE1vdmUgU1dTZXJ2ZXJzIGZyb20gTmV0d29ya1Byb2Nlc3MgdG8gTmV0
d29ya1Nlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDE3OQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IE1vdmUgU1dTZXJ2ZXJzIGZyb20gTmV0d29ya1Byb2Nlc3MgdG8gTmV0d29ya1Nlc3Npb24gc2lu
Y2UgdGhleSBhcmUgcGVyIHNlc3Npb24uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzY2hlZHVsZVJlc291cmNlTG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjplc3RhYmxpc2hTV1NlcnZlckNv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZXN0YWJsaXNoU1dDb250ZXh0Q29ubmVjdGlvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
bG93TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRX
ZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlc3Ry
b3lTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJl
c3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OnByb2Nlc3NQdXNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoU1dTZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3dTZXJ2ZXJGb3JTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmV4aXN0aW5nU1dPcmlnaW5TdG9yZUZvclNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVnaXN0ZXJT
V1NlcnZlckNvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6dW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN3U2VydmVyRm9yU2Vzc2lvbklmRXhpc3RzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpsb3dNZW1vcnlIYW5kbGVyKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb246OnN3T3JpZ2luU3RvcmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU2Vzc2lvbjo6cmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6dW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjplbnN1cmVTV1NlcnZlcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQ
YXRoIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c3dTZXJ2ZXIpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViU1dTZXJ2ZXJDb25uZWN0aW9uOjpXZWJTV1NlcnZlckNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTV1NlcnZlckNvbm5lY3Rpb246On5XZWJTV1NlcnZl
ckNvbm5lY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisK
IDIwMjEtMTItMTUgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1NdW1dQXSBBZGQgYWNjZXNzIHRvIHJlcXVpcmVkIHN5c2NhbGwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXggMjdlMjIwOWZiOWE3M2ZkODBmYTA3NDY1ZDVh
NTJlNTYyODBlZWY2OS4uYTE0Yzc0ZWI3MzM4NjFlODdjYjE3NGVmNzY3MTcwZmMyNzFkYjVjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIv
U291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTY2LDggKzY2LDggQEAg
ZW51bSBjbGFzcyBXZWJzYW1Qcm9jZXNzU3RhdGUgOiB1aW50OF90IHsKICAgICBJbmFjdGl2ZSwK
IH07CiAKLWVudW0gY2xhc3MgQ3JpdGljYWwgOiB1aW50OF90IHsgTm8sIFllcyB9OwotZW51bSBj
bGFzcyBTeW5jaHJvbm91cyA6IHVpbnQ4X3QgeyBObywgWWVzIH07CitlbnVtIGNsYXNzIENyaXRp
Y2FsIDogYm9vbCB7IE5vLCBZZXMgfTsKK2VudW0gY2xhc3MgU3luY2hyb25vdXMgOiBib29sIHsg
Tm8sIFllcyB9OwogCiB0eXBlZGVmIFdURjo6RnVuY3Rpb248dm9pZChDcml0aWNhbCwgU3luY2hy
b25vdXMpPiBMb3dNZW1vcnlIYW5kbGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmlu
ZGV4IGI4ODBiNzZiNzMwZWU0NTljM2YxOWRjMjVmZWZhMjFhMTAzZTY2NDguLjRkN2VhNjQ5Njdm
ZTM0M2I2ODc3OTMxNTBkNDFiOGQ0NjU4OTJjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCkBAIC00OTksMTUgKzQ5OSwxOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpzY2hlZHVsZVJlc291cmNlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYQogICAgIENP
Tk5FQ1RJT05fUkVMRUFTRV9MT0coTG9hZGluZywgInNjaGVkdWxlUmVzb3VyY2VMb2FkOiAocGFy
ZW50UElEPSVkLCBwYWdlUHJveHlJRD0lIiBQUkl1NjQgIiwgd2ViUGFnZUlEPSUiIFBSSXU2NCAi
LCBmcmFtZUlEPSUiIFBSSXU2NCAiLCByZXNvdXJjZUlEPSUiIFBSSXU2NCAiLCBleGlzdGluZ0xv
YWRlclRvUmVzdW1lPSUiIFBSSXU2NCAiKSIsIGxvYWRQYXJhbWV0ZXJzLnBhcmVudFBJRCwgbG9h
ZFBhcmFtZXRlcnMud2ViUGFnZVByb3h5SUQudG9VSW50NjQoKSwgbG9hZFBhcmFtZXRlcnMud2Vi
UGFnZUlELnRvVUludDY0KCksIGxvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQudG9VSW50NjQoKSwg
bG9hZFBhcmFtZXRlcnMuaWRlbnRpZmllci50b1VJbnQ2NCgpLCBleGlzdGluZ0xvYWRlclRvUmVz
dW1lLnZhbHVlX29yKE5ldHdvcmtSZXNvdXJjZUxvYWRJZGVudGlmaWVyIHsgfSkudG9VSW50NjQo
KSk7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYXV0byYgc2VydmVyID0gbV9u
ZXR3b3JrUHJvY2Vzcy0+c3dTZXJ2ZXJGb3JTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICBpZiAo
IXNlcnZlci5pc0ltcG9ydENvbXBsZXRlZCgpKSB7Ci0gICAgICAgIHNlcnZlci53aGVuSW1wb3J0
SXNDb21wbGV0ZWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBsb2FkUGFy
YW1ldGVycyA9IFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBleGlzdGluZ0xvYWRlclRvUmVzdW1l
XSgpIG11dGFibGUgewotICAgICAgICAgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzLT53ZWJQcm9j
ZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzSWRlbnRpZmllcigpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcy0+c3dTZXJ2ZXJGb3JT
ZXNzaW9uKG1fc2Vzc2lvbklEKS5pc0ltcG9ydENvbXBsZXRlZCgpKTsKLSAgICAgICAgICAgIHNj
aGVkdWxlUmVzb3VyY2VMb2FkKFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBleGlzdGluZ0xvYWRl
clRvUmVzdW1lKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byog
c2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKCkpIHsKKyAgICAgICAgaWYgKGF1dG8mIHNlcnZlciA9
IHNlc3Npb24tPmVuc3VyZVNXU2VydmVyKCk7ICFzZXJ2ZXIuaXNJbXBvcnRDb21wbGV0ZWQoKSkg
eworICAgICAgICAgICAgc2VydmVyLndoZW5JbXBvcnRJc0NvbXBsZXRlZChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGxvYWRQYXJhbWV0ZXJzID0gV1RGTW92ZShsb2FkUGFy
YW1ldGVycyksIGV4aXN0aW5nTG9hZGVyVG9SZXN1bWVdKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzLT53ZWJQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9j
ZXNzSWRlbnRpZmllcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAgICAgQVNTRVJUKG5ldHdvcmtTZXNzaW9uKCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChuZXR3b3JrU2Vzc2lvbigpLT5zd1NlcnZlcigpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bmV0d29ya1Nlc3Npb24oKS0+c3dTZXJ2ZXIoKS0+aXNJbXBvcnRDb21wbGV0ZWQoKSk7CisgICAg
ICAgICAgICAgICAgc2NoZWR1bGVSZXNvdXJjZUxvYWQoV1RGTW92ZShsb2FkUGFyYW1ldGVycyks
IGV4aXN0aW5nTG9hZGVyVG9SZXN1bWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIApAQCAtMTE1MSw3ICsxMTU1LDExIEBA
IHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmVzdGFibGlzaFNXU2VydmVyQ29u
bmVjdGlvbigpCiAgICAgaWYgKG1fc3dDb25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvJiBzZXJ2ZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zd1NlcnZlckZvclNlc3Npb24obV9z
ZXNzaW9uSUQpOworICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpOworICAgIGlm
ICghc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc2VydmVyID0gc2Vzc2lv
bi0+ZW5zdXJlU1dTZXJ2ZXIoKTsKICAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPFdl
YlNXU2VydmVyQ29ubmVjdGlvbj4obV9uZXR3b3JrUHJvY2Vzcywgc2VydmVyLCBtX2Nvbm5lY3Rp
b24uZ2V0KCksIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIpOwogCiAgICAgbV9zd0Nvbm5lY3Rpb24g
PSAqY29ubmVjdGlvbjsKQEAgLTExNjAsOCArMTE2OCw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmVzdGFibGlzaFNXU2VydmVyQ29ubmVjdGlvbigpCiAKIHZvaWQgTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmVzdGFibGlzaFNXQ29udGV4dENvbm5lY3Rpb24o
V2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUmVnaXN0cmFibGVEb21haW4m
JiByZWdpc3RyYWJsZURvbWFpbiwgc3RkOjpvcHRpb25hbDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllcj4gc2VydmljZVdvcmtlclBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIHNlcnZlciA9
IG1fbmV0d29ya1Byb2Nlc3MtPnN3U2VydmVyRm9yU2Vzc2lvbklmRXhpc3RzKG1fc2Vzc2lvbklE
KSkKLSAgICAgICAgbV9zd0NvbnRleHRDb25uZWN0aW9uID0gbWFrZVVuaXF1ZTxXZWJTV1NlcnZl
clRvQ29udGV4dENvbm5lY3Rpb24+KCp0aGlzLCB3ZWJQYWdlUHJveHlJRCwgV1RGTW92ZShyZWdp
c3RyYWJsZURvbWFpbiksIHNlcnZpY2VXb3JrZXJQYWdlSWRlbnRpZmllciwgKnNlcnZlcik7Cisg
ICAgYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKCk7CisgICAgaWYgKGF1dG8qIHN3U2Vy
dmVyID0gc2Vzc2lvbiA/IHNlc3Npb24tPnN3U2VydmVyKCkgOiBudWxscHRyKQorICAgICAgICBt
X3N3Q29udGV4dENvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPFdlYlNXU2VydmVyVG9Db250ZXh0Q29u
bmVjdGlvbj4oKnRoaXMsIHdlYlBhZ2VQcm94eUlELCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWlu
KSwgc2VydmljZVdvcmtlclBhZ2VJZGVudGlmaWVyLCAqc3dTZXJ2ZXIpOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKaW5kZXggMjdhZjkxZTRmNTlmMzM0MTM3OGI2YWJhZmViODdhNWQ3Nzdm
OGQwNi4uYWQ2MzY2MmRmODU0ZTI4NmNkOGNlZDIwYmE0MWFiNmNlNmJlYTA5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTYwLDkg
KzYwLDYgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
V2ViUHVzaE1lc3NhZ2UuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaCIKLSNpbmNsdWRlICJXZWJTV09yaWdpblN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViU1dTZXJ2
ZXJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgogI2luY2x1ZGUgIldlYnNp
dGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgpA
QCAtODEsNiArNzgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NXU2Vy
dmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmg+CkBAIC0xMTYsMTAgKzExNCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJs
Q29udGV4dC5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0jaW5jbHVk
ZSAiV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uTWVzc2FnZXMuaCIKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMDksMTUg
KzMwMywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2Fs
IGNyaXRpY2FsKQogCiAgICAgV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKIAot
ICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewotICAg
ICAgICBuZXR3b3JrU2Vzc2lvbi5jbGVhclByZWZldGNoQ2FjaGUoKTsKKyAgICBmb3JFYWNoTmV0
d29ya1Nlc3Npb24oW2NyaXRpY2FsXShhdXRvJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBu
ZXR3b3JrU2Vzc2lvbi5sb3dNZW1vcnlIYW5kbGVyKGNyaXRpY2FsKTsKICAgICB9KTsKIAotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBmb3IgKGF1dG8mIHN3U2VydmVyIDogbV9zd1Nl
cnZlcnMudmFsdWVzKCkpCi0gICAgICAgIHN3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5n
KCk7Ci0jZW5kaWYKLQogICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJz
LnZhbHVlcygpKQogICAgICAgICBtYW5hZ2VyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiB9
CkBAIC00MjUsMTEgKzQxNCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0
YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycwogCiAgICAgYWRk
SW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAKKyAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURh
dGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOworCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQor
ICAgICAgICBzZXNzaW9uLT5hZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0g
ICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9u
KCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6
YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1
aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNv
bnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBjYWNo
ZVJvb3RQYXRoSGFuZGxlKQpAQCAtNTY4LDExICs1NTgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpkZXN0cm95U2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXNzaW9u
c0NvbnRyb2xsZWRCeUF1dG9tYXRpb24ucmVtb3ZlKHNlc3Npb25JRCk7CiAgICAgQ2FjaGVTdG9y
YWdlOjpFbmdpbmU6OmRlc3Ryb3lFbmdpbmUoKnRoaXMsIHNlc3Npb25JRCk7CiAKLSNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgbV9zd1NlcnZlcnMucmVtb3ZlKHNlc3Npb25JRCk7Ci0g
ICAgbV9zZXJ2aWNlV29ya2VySW5mby5yZW1vdmUoc2Vzc2lvbklEKTsKLSNlbmRpZgotCiAgICAg
aWYgKGF1dG8gc2VydmVyID0gbV93ZWJJREJTZXJ2ZXJzLnRha2Uoc2Vzc2lvbklEKSkKICAgICAg
ICAgc2VydmVyLT5jbG9zZSgpOwogICAgIHJlbW92ZVN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihz
ZXNzaW9uSUQpOwpAQCAtMTQ2Niw2ICsxNDUxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0
Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQK
ICAgICB9OwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZigqbmV3IENh
bGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIGF1dG8q
IG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKIAogICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykp
IHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3JhZ2VTZXNz
aW9uKHNlc3Npb25JRCkpCkBAIC0xNTAzLDkgKzE0ODksOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpdAogICAgIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBwYXRoID0gbV9z
ZXJ2aWNlV29ya2VySW5mby5nZXQoc2Vzc2lvbklEKS5kYXRhYmFzZVBhdGg7Ci0gICAgaWYgKCFw
YXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMpKSB7Ci0gICAgICAgIHN3U2VydmVyRm9yU2Vz
c2lvbihzZXNzaW9uSUQpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhbY2FsbGJhY2tBZ2dy
ZWdhdG9yXShjb25zdCBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4mIHNlY3VyaXR5T3JpZ2lu
cykgbXV0YWJsZSB7CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucykgJiYgbmV0d29ya1Nlc3Npb24gJiYg
bmV0d29ya1Nlc3Npb24tPmhhc1NlcnZpY2VXb3JrZXJEYXRhYmFzZVBhdGgoKSkgeworICAgICAg
ICBuZXR3b3JrU2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKS5nZXRPcmlnaW5zV2l0aFJlZ2lzdHJh
dGlvbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oY29uc3QgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRh
dGE+JiBzZWN1cml0eU9yaWdpbnMpIG11dGFibGUgewogICAgICAgICAgICAgZm9yIChhdXRvJiBv
cmlnaW4gOiBzZWN1cml0eU9yaWdpbnMpCiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5
cGU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zLCAwIH0pOwogICAgICAgICB9KTsKQEAgLTE1
MjAsMjMgKzE1MDUsMTkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9CiAKICNpZiBI
QVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWx0ZXJuYXRpdmVTZXJ2aWNlcykpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHNlc3Npb24tPmhvc3ROYW1lc1dpdGhBbHRl
cm5hdGl2ZVNlcnZpY2VzKCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5t
X3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkFs
dGVybmF0aXZlU2VydmljZXMsIDAgfSk7Ci0gICAgICAgIH0KKyAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpICYmIG5l
dHdvcmtTZXNzaW9uKSB7CisgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogbmV0d29ya1Nlc3Np
b24tPmhvc3ROYW1lc1dpdGhBbHRlcm5hdGl2ZVNlcnZpY2VzKCkpCisgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoeyBvcmlnaW4sIFdl
YnNpdGVEYXRhVHlwZTo6QWx0ZXJuYXRpdmVTZXJ2aWNlcywgMCB9KTsKICAgICB9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQotICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcykpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihz
ZXNzaW9uSUQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IHNlc3Npb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSkgewotICAgICAgICAgICAgICAg
IHJlc291cmNlTG9hZFN0YXRpc3RpY3MtPnJlZ2lzdHJhYmxlRG9tYWlucyhbY2FsbGJhY2tBZ2dy
ZWdhdG9yXShhdXRvJiYgZG9tYWlucykgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIHdo
aWxlICghZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEucmVnaXN0cmFibGVEb21haW5zV2l0aFJlc291cmNl
TG9hZFN0YXRpc3RpY3MuYWRkKGRvbWFpbnMudGFrZUxhc3QoKSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSAmJiBuZXR3b3JrU2Vzc2lvbikg
eworICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG5ldHdvcmtTZXNz
aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpIHsKKyAgICAgICAgICAgIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3MtPnJlZ2lzdHJhYmxlRG9tYWlucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRv
JiYgZG9tYWlucykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCFkb21haW5zLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNp
dGVEYXRhLnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmFkZChk
b21haW5zLnRha2VMYXN0KCkpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKQEAgLTE1NTIsNiArMTUzMyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vi
c2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgV2FsbFRp
bWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogeworICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Np
b24oc2Vzc2lvbklEKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoU09VUCkKICAgICBp
ZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSkp
CiAgICAgICAgIGNsZWFySFNUU0NhY2hlKHNlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSk7CkBAIC0x
NTc4LDQzICsxNTYxLDMzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRh
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgYm9vbCBjbGVhclNlcnZpY2VXb3JrZXJzID0gd2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSB8fCB3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bnMpOwotICAgIGlmIChjbGVhclNlcnZpY2VXb3JrZXJzICYmICFzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKLSAgICAgICAgc3dTZXJ2ZXJGb3JTZXNzaW9uKHNlc3Npb25JRCkuY2xlYXJBbGwoW2Ns
ZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChjbGVhclNlcnZpY2VXb3JrZXJzICYmICFz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiBuZXR3b3JrU2Vzc2lvbikKKyAgICAgICAgbmV0d29y
a1Nlc3Npb24tPmVuc3VyZVNXU2VydmVyKCkuY2xlYXJBbGwoW2NsZWFyVGFza3NIYW5kbGVyXSB7
IH0pOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElP
TikKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3MpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lv
biA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIGlmIChh
dXRvKiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24tPnJlc291cmNlTG9h
ZFN0YXRpc3RpY3MoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZGVsZXRlZFR5cGVzUmF3ID0g
d2Vic2l0ZURhdGFUeXBlcy50b1JhdygpOwotICAgICAgICAgICAgICAgIGF1dG8gbW9uaXRvcmVk
VHlwZXNSYXcgPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFU
eXBlcygpLnRvUmF3KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gSWYg
d2UgYXJlIGRlbGV0aW5nIGFsbCBvZiB0aGUgZGF0YSB0eXBlcyB0aGF0IHRoZSByZXNvdXJjZSBs
b2FkIHN0YXRpc3RpY3Mgc3RvcmUgbW9uaXRvcnMKLSAgICAgICAgICAgICAgICAvLyB3ZSBkbyBu
b3QgbmVlZCB0byByZS1ncmFuZGZhdGhlciBvbGQgZGF0YS4KLSAgICAgICAgICAgICAgICBhdXRv
IHNob3VsZEdyYW5kZmF0aGVyID0gKChtb25pdG9yZWRUeXBlc1JhdyAmIGRlbGV0ZWRUeXBlc1Jh
dykgPT0gbW9uaXRvcmVkVHlwZXNSYXcpID8gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpO
byA6IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQobW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtjbGVh
clRhc2tzSGFuZGxlcl0geyB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIHJl
c291cmNlTG9hZFN0YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbiA/IG5ldHdvcmtTZXNzaW9uLT5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICAvLyBJZiB3
ZSBhcmUgZGVsZXRpbmcgYWxsIG9mIHRoZSBkYXRhIHR5cGVzIHRoYXQgdGhlIHJlc291cmNlIGxv
YWQgc3RhdGlzdGljcyBzdG9yZSBtb25pdG9ycworICAgICAgICAgICAgLy8gd2UgZG8gbm90IG5l
ZWQgdG8gcmUtZ3JhbmRmYXRoZXIgb2xkIGRhdGEuCisgICAgICAgICAgICBhdXRvIHNob3VsZEdy
YW5kZmF0aGVyID0gd2Vic2l0ZURhdGFUeXBlcy5jb250YWluc0FsbChXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpKSA/IFNob3VsZEdyYW5kZmF0aGVy
U3RhdGlzdGljczo6Tm8gOiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllczsKKyAgICAg
ICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtjbGVhclRhc2tzSGFu
ZGxlcl0geyB9KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIG5l
dHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAo
bmV0d29ya1Nlc3Npb24pCiAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5yZW1vdmVOZXR3b3JrV2Vi
c2l0ZURhdGEobW9kaWZpZWRTaW5jZSwgc3RkOjpudWxsb3B0LCBbY2xlYXJUYXNrc0hhbmRsZXJd
IHsgfSk7CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkRpc2tDYWNoZSkgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBjbGVh
ckRpc2tDYWNoZShtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAg
ICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50cykpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0g
dGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtTZXNz
aW9uLT5jbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50KFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKLSAgICB9CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHMpICYmIG5ldHdvcmtTZXNzaW9uKQorICAgICAg
ICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChbY2xlYXJUYXNr
c0hhbmRsZXJdIHsgfSk7CiAKICNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNF
KQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWx0
ZXJuYXRpdmVTZXJ2aWNlcykpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0g
dGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtTZXNz
aW9uLT5jbGVhckFsdGVybmF0aXZlU2VydmljZXMobW9kaWZpZWRTaW5jZSk7Ci0gICAgfQorICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWx0ZXJuYXRp
dmVTZXJ2aWNlcykgJiYgbmV0d29ya1Nlc3Npb24pCisgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5j
bGVhckFsdGVybmF0aXZlU2VydmljZXMobW9kaWZpZWRTaW5jZSk7CiAjZW5kaWYKIAogICAgIGlm
IChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMp
KSB7CkBAIC0xNjQ5LDYgKzE2MjIsOCBAQCBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJp
ZXMoTmV0d29ya0NhY2hlOjpDYWNoZSogY2FjaGUsIGNvbnN0IFZlY3RvcjxTZWN1cgogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVz
LCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2luRGF0YXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBIU1RT
Q2FjaGVIb3N0TmFtZXMsIGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIHJlZ2lzdHJh
YmxlRG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogeworICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vz
c2lvbklEKTsKKwogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6Q29va2llcykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lv
biA9IHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24tPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29va2llSG9zdE5hbWVzKTsKQEAg
LTE2NjAsMjQgKzE2MzUsMTcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICNlbmRpZgogCiAj
aWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkFsdGVybmF0aXZlU2VydmljZXMpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9u
KHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGhvc3RzOwotICAgICAg
ICAgICAgaG9zdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5EYXRhcy5zaXplKCkpOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5EYXRhcykKLSAgICAgICAgICAg
ICAgICBob3N0cy51bmNoZWNrZWRBcHBlbmQob3JpZ2luLmhvc3QpOwotICAgICAgICAgICAgbmV0
d29ya1Nlc3Npb24tPmRlbGV0ZUFsdGVybmF0aXZlU2VydmljZXNGb3JIb3N0TmFtZXMoaG9zdHMp
OwotICAgICAgICB9CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpBbHRlcm5hdGl2ZVNlcnZpY2VzKSAmJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAg
ICBhdXRvIGhvc3RzID0gb3JpZ2luRGF0YXMubWFwKFtdKGF1dG8mIG9yaWdpbkRhdGEpIHsgcmV0
dXJuIG9yaWdpbkRhdGEuaG9zdDsgfSk7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5kZWxldGVB
bHRlcm5hdGl2ZVNlcnZpY2VzRm9ySG9zdE5hbWVzKGhvc3RzKTsKICAgICB9CiAjZW5kaWYKIAog
ICAgIGF1dG8gY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lv
bihzZXNzaW9uSUQpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkRhdGEgOiBvcmln
aW5EYXRhcykKLSAgICAgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNo
ZWNrZWRDcmVhdGVGcm9tSG9zdChvcmlnaW5EYXRhLmhvc3QpLCBbY2xlYXJUYXNrc0hhbmRsZXJd
IHsgfSk7Ci0gICAgICAgIH0KKyAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50cykgJiYgbmV0d29ya1Nlc3Npb24p
IHsKKyAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5EYXRhIDogb3JpZ2luRGF0YXMpCisgICAgICAg
ICAgICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZvclJlZ2lz
dHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChv
cmlnaW5EYXRhLmhvc3QpLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgfQogCiAgICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpET01DYWNoZSkp
IHsKQEAgLTE2OTAsOCArMTY1OCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNp
dGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYm9vbCBjbGVhclNlcnZpY2VXb3JrZXJzID0gd2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSB8fCB3ZWJz
aXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbnMpOwotICAgIGlmIChjbGVhclNlcnZpY2VXb3JrZXJzICYmICFzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkgewotICAgICAgICBhdXRvJiBzZXJ2ZXIgPSBzd1NlcnZlckZvclNlc3Npb24o
c2Vzc2lvbklEKTsKKyAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiAhc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkgJiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgYXV0byYgc2VydmVyID0g
bmV0d29ya1Nlc3Npb24tPmVuc3VyZVNXU2VydmVyKCk7CiAgICAgICAgIGZvciAoYXV0byYgb3Jp
Z2luRGF0YSA6IG9yaWdpbkRhdGFzKQogICAgICAgICAgICAgc2VydmVyLmNsZWFyKG9yaWdpbkRh
dGEsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKICAgICB9CkBAIC0xNzEyLDEyICsxNjgwLDEw
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgfQogCiAjaWYgRU5BQkxFKElOVEVMTElH
RU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQp
KSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IHJlZ2lzdHJhYmxlRG9tYWlucykg
ewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0
d29ya1Nlc3Npb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVtb3ZlRGF0YUZvckRvbWFpbihkb21haW4sIFtj
bGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
ICYmIG5ldHdvcmtTZXNzaW9uKSB7CisgICAgICAgIGZvciAoYXV0byYgZG9tYWluIDogcmVnaXN0
cmFibGVEb21haW5zKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IG5ldHdvcmtTZXNzaW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpCisgICAgICAg
ICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVtb3ZlRGF0YUZvckRvbWFpbihkb21h
aW4sIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpA
QCAtMTcyNyw3ICsxNjkzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgICAg
IGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmlnaW5EYXRh
cywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBuZXR3
b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKKyAgICBpZiAo
bmV0d29ya1Nlc3Npb24pIHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4gZG9tYWluc1RvRGVsZXRlTmV0d29ya0RhdGFGb3I7CiAgICAgICAgIGZvciAoYXV0byYg
b3JpZ2luRGF0YSA6IG9yaWdpbkRhdGFzKQogICAgICAgICAgICAgZG9tYWluc1RvRGVsZXRlTmV0
d29ya0RhdGFGb3IuYWRkKFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tSG9zdChvcmlnaW5EYXRhLmhvc3QpKTsKQEAgLTE3ODEsNiArMTc0Nyw4IEBAIHN0YXRp
YyBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBmaWx0ZXJGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoY29uc3QgSGFzCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3Ry
aWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBSZWdpc3Ry
YWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYmIGRvbWFpbnMsIGJv
b2wgc2hvdWxkTm90aWZ5UGFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGF1dG8q
IG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKKwogICAg
IE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMgPSBXZWJzaXRl
RGF0YUZldGNoT3B0aW9uOjpEb05vdENyZWF0ZVByb2Nlc3NlczsKIAogICAgIHN0cnVjdCBDYWxs
YmFja0FnZ3JlZ2F0b3IgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q2FsbGJh
Y2tBZ2dyZWdhdG9yPiB7CkBAIC0xODQ1LDE0ICsxODEzLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6
OlNlc3MKICNlbmRpZgogCiAjaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkK
LSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkFsdGVy
bmF0aXZlU2VydmljZXMpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRo
aXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlOwotICAgICAgICAgICAgcmVnaXN0cmFibGVE
b21haW5zVG9EZWxldGUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW5zVG9EZWxldGVBbGxO
b25Db29raWVXZWJzaXRlRGF0YUZvci5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcikKLSAgICAg
ICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZS51bmNoZWNrZWRBcHBlbmQoZG9t
YWluLnN0cmluZygpKTsKLSAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5kZWxldGVBbHRlcm5h
dGl2ZVNlcnZpY2VzRm9ySG9zdE5hbWVzKHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlKTsKLSAg
ICAgICAgfQorICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6QWx0ZXJuYXRpdmVTZXJ2aWNlcykgJiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgYXV0
byByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZSA9IGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tp
ZVdlYnNpdGVEYXRhRm9yLm1hcChbXShhdXRvJiBkb21haW4pIHsgcmV0dXJuIGRvbWFpbi5zdHJp
bmcoKTsgfSk7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5kZWxldGVBbHRlcm5hdGl2ZVNlcnZp
Y2VzRm9ySG9zdE5hbWVzKHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlKTsKICAgICB9CiAjZW5k
aWYKIApAQCAtMTg5NCwxNSArMTg1NywxNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVB
bmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogICAg
IH0KICAgICAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcGF0aCA9IG1fc2Vydmlj
ZVdvcmtlckluZm8uZ2V0KHNlc3Npb25JRCkuZGF0YWJhc2VQYXRoOwogICAgIGJvb2wgY2xlYXJT
ZXJ2aWNlV29ya2VycyA9IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpET01DYWNoZSkgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKLSAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2Vy
cyAmJiAhcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3dTZXJ2ZXJGb3JTZXNzaW9uKHNlc3Np
b25JRCkuZ2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKFt0aGlzLCBzZXNzaW9uSUQsIGRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
KGNvbnN0IEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBtdXRh
YmxlIHsKKyAgICBpZiAoY2xlYXJTZXJ2aWNlV29ya2VycyAmJiBuZXR3b3JrU2Vzc2lvbiAmJiBu
ZXR3b3JrU2Vzc2lvbi0+aGFzU2VydmljZVdvcmtlckRhdGFiYXNlUGF0aCgpKSB7CisgICAgICAg
IG5ldHdvcmtTZXNzaW9uLT5lbnN1cmVTV1NlcnZlcigpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0
aW9ucyhbZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIGNhbGxiYWNr
QWdncmVnYXRvciwgbmV0d29ya1Nlc3Npb24gPSBXZWFrUHRyIHsgKm5ldHdvcmtTZXNzaW9uIH1d
KGNvbnN0IEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYgc2VjdXJpdHlPcmlnaW5zKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2VjdXJpdHlPcmlnaW4gOiBzZWN1cml0eU9y
aWdpbnMpIHsKICAgICAgICAgICAgICAgICBpZiAoIWRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tp
ZVdlYnNpdGVEYXRhRm9yLmNvbnRhaW5zKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tSG9zdChzZWN1cml0eU9yaWdpbi5ob3N0KSkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFk
ZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qoc2VjdXJpdHlPcmln
aW4uaG9zdCkpOwotICAgICAgICAgICAgICAgIHN3U2VydmVyRm9yU2Vzc2lvbihzZXNzaW9uSUQp
LmNsZWFyKHNlY3VyaXR5T3JpZ2luLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgICAg
ICAgICAgICAgIGlmIChuZXR3b3JrU2Vzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgbmV0d29y
a1Nlc3Npb24tPmVuc3VyZVNXU2VydmVyKCkuY2xlYXIoc2VjdXJpdHlPcmlnaW4sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAg
LTE5NjQsNiArMTkyNyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUmVnaXN0cmFiCiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMs
IGJvb2wgc2hvdWxkTm90aWZ5UGFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvKiBu
ZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisKICAgICBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zID0gV2Vic2l0ZURh
dGFGZXRjaE9wdGlvbjo6RG9Ob3RDcmVhdGVQcm9jZXNzZXM7CiAgICAgCiAgICAgc3RydWN0IENh
bGxiYWNrQWdncmVnYXRvciBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxs
YmFja0FnZ3JlZ2F0b3I+IHsKQEAgLTIwMzcsOSArMjAwMiw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsCiAgICAgfQogICAgIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBwYXRo
ID0gbV9zZXJ2aWNlV29ya2VySW5mby5nZXQoc2Vzc2lvbklEKS5kYXRhYmFzZVBhdGg7Ci0gICAg
aWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMpKSB7Ci0gICAgICAgIHN3U2VydmVy
Rm9yU2Vzc2lvbihzZXNzaW9uSUQpLmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhbY2FsbGJh
Y2tBZ2dyZWdhdG9yXShjb25zdCBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4mIHNlY3VyaXR5
T3JpZ2lucykgbXV0YWJsZSB7CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucykgJiYgbmV0d29ya1Nlc3Np
b24gJiYgbmV0d29ya1Nlc3Npb24tPmhhc1NlcnZpY2VXb3JrZXJEYXRhYmFzZVBhdGgoKSkgewor
ICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKS5nZXRPcmlnaW5zV2l0aFJl
Z2lzdHJhdGlvbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oY29uc3QgSGFzaFNldDxTZWN1cml0eU9y
aWdpbkRhdGE+JiBzZWN1cml0eU9yaWdpbnMpIG11dGFibGUgewogICAgICAgICAgICAgZm9yIChh
dXRvJiBzZWN1cml0eU9yaWdpbiA6IHNlY3VyaXR5T3JpZ2lucykKICAgICAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoeyBzZWN1cml0
eU9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucywgMCB9
KTsKICAgICAgICAgfSk7CkBAIC0yMjUzLDE4ICsyMjE3LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlv
bkhhbmRsCiAKICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZdIChhdXRvJiBuZXR3b3JrU2Vz
c2lvbikgewogICAgICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhuZXR3b3JrU2Vzc2lvbi5zZXNz
aW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCisgICAgICAgIGlmIChhdXRvKiBzd1NlcnZlciA9IG5ldHdvcmtTZXNzaW9uLnN3U2Vy
dmVyKCkpCisgICAgICAgICAgICBzd1NlcnZlci0+c3RhcnRTdXNwZW5zaW9uKFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisjZW5kaWYKICAgICB9KTsKIAogICAgIGZvciAoYXV0byYgY29ubmVj
dGlvbiA6IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygpKQogICAgICAgICBjb25uZWN0
aW9uLT5jbGVhbnVwRm9yU3VzcGVuc2lvbihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9zd1Nl
cnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3dTZXJ2ZXJzLmdldChzZXJ2ZXIt
PnNlc3Npb25JRCgpKSA9PSBzZXJ2ZXIuZ2V0KCkpOwotICAgICAgICBzZXJ2ZXItPnN0YXJ0U3Vz
cGVuc2lvbihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KLSNlbmRpZgotCiAgICAg
Zm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCiAgICAgICAg
IG1hbmFnZXItPnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KQEAgLTIyOTYs
OCArMjI1NywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgIFBDTTo6U3Rv
cmU6OnByb2Nlc3NEaWRSZXN1bWUoKTsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBmb3IgKGF1dG8mIHNlcnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQotICAgICAgICBzZXJ2
ZXItPmVuZFN1c3BlbnNpb24oKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZdIChhdXRv
JiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byBzd1NlcnZlciA9IG5ldHdvcmtT
ZXNzaW9uLnN3U2VydmVyKCkpCisgICAgICAgICAgICBzd1NlcnZlci0+ZW5kU3VzcGVuc2lvbigp
OworICAgIH0pOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBmb3IgKGF1
dG8mIHNlcnZlciA6IG1fd2ViSURCU2VydmVycy52YWx1ZXMoKSkKQEAgLTI0NDUsNzYgKzI0MDgs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVQogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaFNXU2VydmVyKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoU1dTZXJ2ZXImKT4mIGNhbGxiYWNrKQotewotICAgIGZvciAoYXV0byYgc2VydmVyIDog
bV9zd1NlcnZlcnMudmFsdWVzKCkpCi0gICAgICAgIGNhbGxiYWNrKCpzZXJ2ZXIpOwotfQotCi1T
V1NlcnZlciYgTmV0d29ya1Byb2Nlc3M6OnN3U2VydmVyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3N3U2VydmVycy5lbnN1cmUoc2Vz
c2lvbklELCBbJl0gewotICAgICAgICBhdXRvIGluZm8gPSBtX3NlcnZpY2VXb3JrZXJJbmZvLmdl
dChzZXNzaW9uSUQpOwotICAgICAgICBhdXRvIHBhdGggPSBpbmZvLmRhdGFiYXNlUGF0aDsKLSAg
ICAgICAgLy8gVGhlcmUgc2hvdWxkIGFscmVhZHkgYmUgYSByZWdpc3RlcmVkIHBhdGggZm9yIHRo
aXMgUEFMOjpTZXNzaW9uSUQuCi0gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm90LCB0aGVuIHdoZXJl
IGRpZCB0aGlzIFBBTDo6U2Vzc2lvbklEIGNvbWUgZnJvbT8KLSAgICAgICAgQVNTRVJUKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpIHx8ICFwYXRoLmlzRW1wdHkoKSk7Ci0gICAgICAgIAotI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykKLSAgICAgICAgYXV0byBhcHBCb3VuZERvbWFpbnNDYWxs
YmFjayA9IFt0aGlzLCBzZXNzaW9uSURdKGF1dG8mJiBjb21wbGV0aW9uSGFuZGxlcikgewotICAg
ICAgICAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpHZXRBcHBCb3VuZERvbWFpbnMgeyBzZXNzaW9u
SUQgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIDApOwotICAgICAgICB9OwotI2Vsc2UK
LSAgICAgICAgYXV0byBhcHBCb3VuZERvbWFpbnNDYWxsYmFjayA9IFtdIChhdXRvJiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAg
ICAgIH07Ci0jZW5kaWYKLSAgICAgICAgYm9vbCBzaG91bGRSdW5TZXJ2aWNlV29ya2Vyc09uTWFp
blRocmVhZEZvclRlc3RpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBu
ZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICAgICAgc2hvdWxkUnVuU2VydmljZVdv
cmtlcnNPbk1haW5UaHJlYWRGb3JUZXN0aW5nID0gc2Vzc2lvbi0+c2hvdWxkUnVuU2VydmljZVdv
cmtlcnNPbk1haW5UaHJlYWRGb3JUZXN0aW5nKCk7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PFNXU2VydmVyPihtYWtlVW5pcXVlUmVmPFdlYlNXT3JpZ2luU3RvcmU+KCksIGluZm8ucHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhdGgpLCBzZXNzaW9uSUQsIHNob3Vs
ZFJ1blNlcnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZywgcGFyZW50UHJvY2Vzc0hh
c1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCBbdGhpcywgc2Vzc2lvbklEXShhdXRvJiYgam9i
RGF0YSwgYm9vbCBzaG91bGRSZWZyZXNoQ2FjaGUsIGF1dG8mJiByZXF1ZXN0LCBhdXRvJiYgY29t
cGxldGlvbkhhbmRsZXIpIG11dGFibGUgewotICAgICAgICAgICAgU2VydmljZVdvcmtlclNvZnRV
cGRhdGVMb2FkZXI6OnN0YXJ0KG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCksIFdURk1vdmUoam9i
RGF0YSksIHNob3VsZFJlZnJlc2hDYWNoZSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9LCBbdGhpcywgc2Vzc2lvbklEXShhdXRvJiByZWdp
c3RyYWJsZURvbWFpbiwgc3RkOjpvcHRpb25hbDxTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRp
Zmllcj4gc2VydmljZVdvcmtlclBhZ2VJZGVudGlmaWVyLCBhdXRvJiYgY29tcGxldGlvbkhhbmRs
ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghcmVnaXN0cmFibGVEb21haW4uaXNFbXB0eSgpKTsK
LSAgICAgICAgICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6RXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHsgcmVnaXN0cmFibGVEb21haW4sIHNlcnZpY2VXb3Jr
ZXJQYWdlSWRlbnRpZmllciwgc2Vzc2lvbklEIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCAwKTsKLSAgICAgICAgfSwgV1RGTW92ZShhcHBCb3VuZERvbWFpbnNDYWxsYmFjaykpOwotICAg
IH0pOwotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotV2ViU1dPcmln
aW5TdG9yZSogTmV0d29ya1Byb2Nlc3M6OmV4aXN0aW5nU1dPcmlnaW5TdG9yZUZvclNlc3Npb24o
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdAotewotICAgIGF1dG8qIHN3U2VydmVyID0g
bV9zd1NlcnZlcnMuZ2V0KHNlc3Npb25JRCk7Ci0gICAgaWYgKCFzd1NlcnZlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuICZzdGF0aWNfY2FzdDxXZWJTV09yaWdpblN0b3Jl
Jj4oc3dTZXJ2ZXItPm9yaWdpblN0b3JlKCkpOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpy
ZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbihXZWJTV1NlcnZlckNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24pCi17Ci0gICAgYXV0byogc3RvcmUgPSBleGlzdGluZ1NXT3JpZ2luU3RvcmVGb3JTZXNzaW9u
KGNvbm5lY3Rpb24uc2Vzc2lvbklEKCkpOwotICAgIEFTU0VSVChzdG9yZSk7Ci0gICAgaWYgKHN0
b3JlKQotICAgICAgICBzdG9yZS0+cmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlv
bik7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OnVucmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rp
b24oV2ViU1dTZXJ2ZXJDb25uZWN0aW9uJiBjb25uZWN0aW9uKQotewotICAgIGlmIChhdXRvKiBz
dG9yZSA9IGV4aXN0aW5nU1dPcmlnaW5TdG9yZUZvclNlc3Npb24oY29ubmVjdGlvbi5zZXNzaW9u
SUQoKSkpCi0gICAgICAgIHN0b3JlLT51bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKGNvbm5l
Y3Rpb24pOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lv
bihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgcHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBTZXJ2aWNlV29ya2Vy
SW5mbyBpbmZvIHsKLSAgICAgICAgV1RGTW92ZShzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KSwKLSAgICAgICAgcHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkCi0gICAgfTsK
LSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc2VydmljZVdvcmtlckluZm8uYWRkKHNlc3Npb25JRCwg
V1RGTW92ZShpbmZvKSk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlKTsKLX0KLQogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYlB1c2hNZXNzYWdl
PiYpPiYmIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShCVUlMVF9JTl9OT1RJRklDQVRJT05TKQpA
QCAtMjUyOCw3ICsyNDIxLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0UGVuZGluZ1B1c2hN
ZXNzYWdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb24KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
V2ViUHVzaE1lc3NhZ2UmJiBwdXNoTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjYWxsYmFjaykKIHsKLSAgICBzd1NlcnZlckZvclNlc3Npb24oc2Vzc2lvbklEKS5wcm9j
ZXNzUHVzaE1lc3NhZ2UoV1RGTW92ZShwdXNoTWVzc2FnZS5wdXNoRGF0YSksIFdURk1vdmUocHVz
aE1lc3NhZ2UucmVnaXN0cmF0aW9uVVJMKSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIGlmIChh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lv
bi0+ZW5zdXJlU1dTZXJ2ZXIoKS5wcm9jZXNzUHVzaE1lc3NhZ2UoV1RGTW92ZShwdXNoTWVzc2Fn
ZS5wdXNoRGF0YSksIFdURk1vdmUocHVzaE1lc3NhZ2UucmVnaXN0cmF0aW9uVVJMKSwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDVhMjBh
N2NmOTcwMTcwZTk0ZGQ3YWE4ZTM4ZmJhZGI5NTQ2YTA1YzMuLmNkYjAzOTg5ZGY2YWQ1YWNjYzE0
YjM0YzUzNTcwNDg4OTI3MzljNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKQEAgLTg1LDcgKzg1LDYgQEAgY2xhc3MgUHJvdGVjdGlvblNwYWNl
OwogY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlcjsKIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjsKIGNsYXNzIFJlc291cmNlRXJyb3I7Ci1jbGFzcyBTV1NlcnZlcjsKIGNsYXNzIFVzZXJDb250
ZW50VVJMUGF0dGVybjsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFjY2VwdFBvbGljeSA6IHVpbnQ4
X3Q7CiBlbnVtIGNsYXNzIEluY2x1ZGVIdHRwT25seUNvb2tpZXMgOiBib29sOwpAQCAtMTA4LDgg
KzEwNyw2IEBAIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjsKIGNsYXNzIFByb2Nlc3NBc3NlcnRpb247CiBjbGFzcyBXZWJQYWdlTmV0d29y
a1BhcmFtZXRlcnM7Ci1jbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247Ci1jbGFzcyBXZWJTV1Nl
cnZlclRvQ29udGV4dENvbm5lY3Rpb247CiBlbnVtIGNsYXNzIENhbGxEb3dubG9hZERpZFN0YXJ0
IDogYm9vbDsKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsK
IGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CkBAIC0xMTksMTAgKzEx
Niw2IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBX
ZWJQdXNoTWVzc2FnZTsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLWNsYXNzIFdlYlNXT3JpZ2luU3RvcmU7Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBlbnVtIGNsYXNzIENhY2hlT3B0aW9uIDogdWlu
dDhfdDsKIH0KQEAgLTMwOCwxNSArMzAxLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTdG9y
YWdlKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViQ29yZTo6
U1dTZXJ2ZXIqIHN3U2VydmVyRm9yU2Vzc2lvbklmRXhpc3RzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkgeyByZXR1cm4gbV9zd1NlcnZlcnMuZ2V0KHNlc3Npb25JRCk7IH0KLSAgICBXZWJDb3Jl
OjpTV1NlcnZlciYgc3dTZXJ2ZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKLSAgICB2b2lk
IHJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYpOwotICAg
IHZvaWQgdW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlvbihXZWJTV1NlcnZlckNvbm5lY3Rpb24m
KTsKLSAgICAKLSAgICB2b2lkIGZvckVhY2hTV1NlcnZlcihjb25zdCBGdW5jdGlvbjx2b2lkKFdl
YkNvcmU6OlNXU2VydmVyJik+Jik7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgYm9vbCBwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkgY29u
c3Q7CiAgICAgdm9pZCBkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCk7CkBAIC01MDAs
MTggKzQ4NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVXZWJJREJTZXJ2ZXJJZlBvc3Np
YmxlKFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN1c3BlbmRJREJTZXJ2ZXJzKGJvb2wgaXNT
dXNwZW5zaW9uSW1taW5lbnQpOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZv
aWQgZGlkQ3JlYXRlV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6QXR0
YWNobWVudCYpOwotCi0gICAgdm9pZCBwb3N0TWVzc2FnZVRvU2VydmljZVdvcmtlcihQQUw6OlNl
c3Npb25JRCwgV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXIgZGVzdGluYXRpb24sIFdl
YkNvcmU6Ok1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYsIGNvbnN0IFdlYkNvcmU6OlNlcnZpY2VX
b3JrZXJPckNsaWVudElkZW50aWZpZXImIHNvdXJjZSwgV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0
aW9uSWRlbnRpZmllcik7Ci0gICAgCi0gICAgdm9pZCBkaXNhYmxlU2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5KCk7Ci0gICAgCi0gICAgV2ViU1dPcmlnaW5TdG9yZSogZXhpc3Rp
bmdTV09yaWdpblN0b3JlRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0KLSAgICB2
b2lkIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBib29sIHByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7Ci0jZW5kaWYKLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgdm9pZCBzZXRJc0hvbGRpbmdMb2NrZWRGaWxl
cyhib29sKTsKICNlbmRpZgpAQCAtNTk4LDE1ICs1NzAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9zaG91bGRTdXNwZW5kSURCU2VydmVycyB7IGZhbHNlIH07CiAgICAgdWludDY0X3QgbV9zdXNw
ZW5zaW9uSWRlbnRpZmllciB7IDAgfTsKICAgICAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgc3RydWN0IFNlcnZpY2VXb3JrZXJJbmZvIHsKLSAgICAgICAgU3RyaW5nIGRhdGFiYXNl
UGF0aDsKLSAgICAgICAgYm9vbCBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgeyB0cnVl
IH07Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTZXJ2aWNlV29ya2VySW5m
bz4gbV9zZXJ2aWNlV29ya2VySW5mbzsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1dTZXJ2ZXI+PiBtX3N3U2VydmVyczsKLSNlbmRpZgotICAg
IAogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIFJlZlB0cjxSVENEYXRhQ2hhbm5lbFJlbW90ZU1h
bmFnZXJQcm94eT4gbV9ydGNEYXRhQ2hhbm5lbFByb3h5OwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IGZhMDMwZWU1ODA0
ZDViZjk3ZTk1NDc1ZjEwODMwNGNlZGJlMDM3MTMuLmM1M2EwYTg0MGNmY2E5ZDllOTE4NDgyMWNm
ZjRkNmUyYWQ3N2M5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTV09yaWdpblN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vi
U29ja2V0VGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KQEAgLTU0Nyw2ICs1NDgsMTYgQEAgU3RyaW5nIE5l
dHdvcmtTZXNzaW9uOjphdHRyaWJ1dGVkQnVuZGxlSWRlbnRpZmllckZyb21QYWdlSWRlbnRpZmll
cihXZWJQYWdlUHJveHkKICAgICByZXR1cm4gbV9hdHRyaWJ1dGVkQnVuZGxlSWRlbnRpZmllckZy
b21QYWdlSWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXIpOwogfQogCit2b2lkIE5ldHdvcmtTZXNz
aW9uOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsKQoreworICAgIGNsZWFyUHJlZmV0Y2hDYWNo
ZSgpOworCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIGlmIChtX3N3U2VydmVyKQor
ICAgICAgICBtX3N3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CisjZW5kaWYKK30K
KwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Nlc3Npb246OmFkZE5h
dmlnYXRpb25QcmVsb2FkZXJUYXNrKFNlcnZpY2VXb3JrZXJGZXRjaFRhc2smIHRhc2spCiB7CkBA
IC01NjIsNiArNTczLDcwIEBAIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2sqIE5ldHdvcmtTZXNzaW9u
OjpuYXZpZ2F0aW9uUHJlbG9hZGVyVGFza0Zyb21GZXRjaElkZW50aWZpCiB7CiAgICAgcmV0dXJu
IG1fbmF2aWdhdGlvblByZWxvYWRlcnMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwogfQorCitXZWJT
V09yaWdpblN0b3JlKiBOZXR3b3JrU2Vzc2lvbjo6c3dPcmlnaW5TdG9yZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc3dTZXJ2ZXIgPyAmc3RhdGljX2Nhc3Q8V2ViU1dPcmlnaW5TdG9yZSY+KG1f
c3dTZXJ2ZXItPm9yaWdpblN0b3JlKCkpIDogbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3JrU2Vz
c2lvbjo6cmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oV2ViU1dTZXJ2ZXJDb25uZWN0aW9uJiBj
b25uZWN0aW9uKQoreworICAgIGF1dG8qIHN0b3JlID0gc3dPcmlnaW5TdG9yZSgpOworICAgIEFT
U0VSVChzdG9yZSk7CisgICAgaWYgKHN0b3JlKQorICAgICAgICBzdG9yZS0+cmVnaXN0ZXJTV1Nl
cnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Npb246OnVu
cmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oV2ViU1dTZXJ2ZXJDb25uZWN0aW9uJiBjb25uZWN0
aW9uKQoreworICAgIGlmIChhdXRvKiBzdG9yZSA9IHN3T3JpZ2luU3RvcmUoKSkKKyAgICAgICAg
c3RvcmUtPnVucmVnaXN0ZXJTV1NlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbik7Cit9CisKK1NX
U2VydmVyJiBOZXR3b3JrU2Vzc2lvbjo6ZW5zdXJlU1dTZXJ2ZXIoKQoreworICAgIGlmICghbV9z
d1NlcnZlcikgeworICAgICAgICBhdXRvIGluZm8gPSBtX3NlcnZpY2VXb3JrZXJJbmZvLnZhbHVl
X29yKFNlcnZpY2VXb3JrZXJJbmZvIHsgfSk7CisgICAgICAgIGF1dG8gcGF0aCA9IGluZm8uZGF0
YWJhc2VQYXRoOworICAgICAgICAvLyBUaGVyZSBzaG91bGQgYWxyZWFkeSBiZSBhIHJlZ2lzdGVy
ZWQgcGF0aCBmb3IgdGhpcyBQQUw6OlNlc3Npb25JRC4KKyAgICAgICAgLy8gSWYgdGhlcmUncyBu
b3QsIHRoZW4gd2hlcmUgZGlkIHRoaXMgUEFMOjpTZXNzaW9uSUQgY29tZSBmcm9tPworICAgICAg
ICBBU1NFUlQobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCAhcGF0aC5pc0VtcHR5KCkpOwor
CisjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQorICAgICAgICBhdXRvIGFwcEJvdW5kRG9t
YWluc0NhbGxiYWNrID0gW3RoaXNdKGF1dG8mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpHZXRBcHBCb3VuZERv
bWFpbnMgeyBtX3Nlc3Npb25JRCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgMCk7Cisg
ICAgICAgIH07CisjZWxzZQorICAgICAgICBhdXRvIGFwcEJvdW5kRG9tYWluc0NhbGxiYWNrID0g
W10gKGF1dG8mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKKyAgICAgICAgfTsKICNlbmRpZgorICAgICAgICBtX3N3U2VydmVyID0gbWFr
ZVVuaXF1ZTxTV1NlcnZlcj4obWFrZVVuaXF1ZVJlZjxXZWJTV09yaWdpblN0b3JlPigpLCBpbmZv
LnByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXRoKSwgbV9zZXNzaW9u
SUQsIHNob3VsZFJ1blNlcnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZygpLCBtX25l
dHdvcmtQcm9jZXNzLT5wYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCks
IFt0aGlzXShhdXRvJiYgam9iRGF0YSwgYm9vbCBzaG91bGRSZWZyZXNoQ2FjaGUsIGF1dG8mJiBy
ZXF1ZXN0LCBhdXRvJiYgY29tcGxldGlvbkhhbmRsZXIpIG11dGFibGUgeworICAgICAgICAgICAg
U2VydmljZVdvcmtlclNvZnRVcGRhdGVMb2FkZXI6OnN0YXJ0KHRoaXMsIFdURk1vdmUoam9iRGF0
YSksIHNob3VsZFJlZnJlc2hDYWNoZSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgICAgICB9LCBbdGhpc10oYXV0byYgcmVnaXN0cmFibGVEb21haW4s
IHN0ZDo6b3B0aW9uYWw8U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXI+IHNlcnZpY2VX
b3JrZXJQYWdlSWRlbnRpZmllciwgYXV0byYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIXJlZ2lzdHJhYmxlRG9tYWluLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyB7IHJlZ2lzdHJhYmxlRG9tYWluLCBzZXJ2aWNl
V29ya2VyUGFnZUlkZW50aWZpZXIsIG1fc2Vzc2lvbklEIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCAwKTsKKyAgICAgICAgfSwgV1RGTW92ZShhcHBCb3VuZERvbWFpbnNDYWxsYmFjaykp
OworICAgIH0KKyAgICByZXR1cm4gKm1fc3dTZXJ2ZXI7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Np
b246OmFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKGJvb2wgcHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBib29sIGhhZFNlcnZp
Y2VXb3JrZXJJbmZvID0gISFtX3NlcnZpY2VXb3JrZXJJbmZvOworICAgIG1fc2VydmljZVdvcmtl
ckluZm8gPSBTZXJ2aWNlV29ya2VySW5mbyB7CisgICAgICAgIFdURk1vdmUoc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksCisgICAgICAgIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
RW5hYmxlZAorICAgIH07CisgICAgaWYgKCFoYWRTZXJ2aWNlV29ya2VySW5mbykKKyAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7Cit9CisKK2Jvb2wg
TmV0d29ya1Nlc3Npb246Omhhc1NlcnZpY2VXb3JrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NlcnZpY2VXb3JrZXJJbmZvICYmICFtX3NlcnZpY2VXb3JrZXJJbmZvLT5k
YXRhYmFzZVBhdGguaXNFbXB0eSgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRleCA0YjgwZTUyOGE0NGM4ZDA3NGRlZjg4NTQ3NjQw
MDExODYzZWEzZTRhLi5jMTNjMDVlZDY3NDg2MTg4YTM0MzAzMTNhMDQwODhlZWVkMWJmYjJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC01
NSwxMSArNTUsMTYgQEAgY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsK
K2NsYXNzIFNXU2VydmVyOwogZW51bSBjbGFzcyBJbmNsdWRlSHR0cE9ubHlDb29raWVzIDogYm9v
bDsKIGVudW0gY2xhc3MgU2hvdWxkU2FtcGxlIDogYm9vbDsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkRhdGE7CiB9CiAKK25hbWVzcGFjZSBXVEYgeworZW51bSBjbGFzcyBDcml0aWNhbCA6IGJvb2w7
Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CkBAIC03
Miw2ICs3Nyw4IEBAIGNsYXNzIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2s7CiBjbGFzcyBXZWJQYWdl
TmV0d29ya1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7
CiBjbGFzcyBXZWJTb2NrZXRUYXNrOworY2xhc3MgV2ViU1dPcmlnaW5TdG9yZTsKK2NsYXNzIFdl
YlNXU2VydmVyQ29ubmVjdGlvbjsKIHN0cnVjdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVyczsKIHN0cnVjdCBTZXNzaW9uU2V0OwogCkBAIC0xNzYsMTIgKzE4MywyNCBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzU3RhbGVXaGlsZVJldmFsaWRhdGVFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1N0YWxlV2hpbGVSZXZhbGlkYXRlRW5hYmxlZDsgfQogCisgICAgdm9pZCBsb3dNZW1v
cnlIYW5kbGVyKFdURjo6Q3JpdGljYWwpOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
ICAgIHZvaWQgYWRkU29mdFVwZGF0ZUxvYWRlcihzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZVdvcmtl
clNvZnRVcGRhdGVMb2FkZXI+JiYgbG9hZGVyKSB7IG1fc29mdFVwZGF0ZUxvYWRlcnMuYWRkKFdU
Rk1vdmUobG9hZGVyKSk7IH0KICAgICB2b2lkIHJlbW92ZVNvZnRVcGRhdGVMb2FkZXIoU2Vydmlj
ZVdvcmtlclNvZnRVcGRhdGVMb2FkZXIqIGxvYWRlcikgeyBtX3NvZnRVcGRhdGVMb2FkZXJzLnJl
bW92ZShsb2FkZXIpOyB9CiAgICAgdm9pZCBhZGROYXZpZ2F0aW9uUHJlbG9hZGVyVGFzayhTZXJ2
aWNlV29ya2VyRmV0Y2hUYXNrJik7CiAgICAgU2VydmljZVdvcmtlckZldGNoVGFzayogbmF2aWdh
dGlvblByZWxvYWRlclRhc2tGcm9tRmV0Y2hJZGVudGlmaWVyKFdlYkNvcmU6OkZldGNoSWRlbnRp
Zmllcik7CiAgICAgdm9pZCByZW1vdmVOYXZpZ2F0aW9uUHJlbG9hZGVyVGFzayhTZXJ2aWNlV29y
a2VyRmV0Y2hUYXNrJik7CisKKyAgICBXZWJDb3JlOjpTV1NlcnZlciogc3dTZXJ2ZXIoKSB7IHJl
dHVybiBtX3N3U2VydmVyLmdldCgpOyB9CisgICAgV2ViQ29yZTo6U1dTZXJ2ZXImIGVuc3VyZVNX
U2VydmVyKCk7CisgICAgV2ViU1dPcmlnaW5TdG9yZSogc3dPcmlnaW5TdG9yZSgpIGNvbnN0OyAv
LyBGSVhNRTogQ2FuIGJlIHByaXZhdGU/CisgICAgdm9pZCByZWdpc3RlclNXU2VydmVyQ29ubmVj
dGlvbihXZWJTV1NlcnZlckNvbm5lY3Rpb24mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTV1NlcnZl
ckNvbm5lY3Rpb24oV2ViU1dTZXJ2ZXJDb25uZWN0aW9uJik7CisKKyAgICBib29sIGhhc1NlcnZp
Y2VXb3JrZXJEYXRhYmFzZVBhdGgoKSBjb25zdDsKKworICAgIHZvaWQgYWRkU2VydmljZVdvcmtl
clNlc3Npb24oYm9vbCBwcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFN0cmluZyYmIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIGNvbnN0IFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYpOwogI2VuZGlmCiAKICAgICBOZXR3b3JrTG9hZFNjaGVkdWxlciYgbmV0d29ya0xv
YWRTY2hlZHVsZXIoKTsKQEAgLTI2Nyw2ICsyODYsMTMgQEAgcHJvdGVjdGVkOgogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKICAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlV29y
a2VyU29mdFVwZGF0ZUxvYWRlcj4+IG1fc29mdFVwZGF0ZUxvYWRlcnM7CiAgICAgSGFzaE1hcDxX
ZWJDb3JlOjpGZXRjaElkZW50aWZpZXIsIFdlYWtQdHI8U2VydmljZVdvcmtlckZldGNoVGFzaz4+
IG1fbmF2aWdhdGlvblByZWxvYWRlcnM7CisKKyAgICBzdHJ1Y3QgU2VydmljZVdvcmtlckluZm8g
eworICAgICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoOworICAgICAgICBib29sIHByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZCB7IHRydWUgfTsKKyAgICB9OworICAgIHN0ZDo6b3B0aW9uYWw8
U2VydmljZVdvcmtlckluZm8+IG1fc2VydmljZVdvcmtlckluZm87CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNXU2VydmVyPiBtX3N3U2VydmVyOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2Vydmlj
ZVdvcmtlci9XZWJTV1NlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXggMTEy
NDQyODI4MmNkNmU0Yzk1NTg5NmE4NmFhYzJmNzBmNDU1NmNhYy4uNDcyYTIzMTM5Zjc2OGIwOTEz
YzZhYzE0NDE5ZjdkOGJkZjI0MmVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyQ29ubmVj
dGlvbi5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgog
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjksMTIgKzcwLDE0IEBAIFdlYlNXU2Vy
dmVyQ29ubmVjdGlvbjo6V2ViU1dTZXJ2ZXJDb25uZWN0aW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3
b3JrUHJvY2VzcywgU1dTCiAgICAgLCBtX2NvbnRlbnRDb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAg
ICAgLCBtX25ldHdvcmtQcm9jZXNzKG5ldHdvcmtQcm9jZXNzKQogewotICAgIG5ldHdvcmtQcm9j
ZXNzLnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKCp0aGlzKTsKKyAgICBpZiAoYXV0byogc2Vz
c2lvbiA9IHRoaXMtPnNlc3Npb24oKSkKKyAgICAgICAgc2Vzc2lvbi0+cmVnaXN0ZXJTV1NlcnZl
ckNvbm5lY3Rpb24oKnRoaXMpOwogfQogCiBXZWJTV1NlcnZlckNvbm5lY3Rpb246On5XZWJTV1Nl
cnZlckNvbm5lY3Rpb24oKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTV1Nl
cnZlckNvbm5lY3Rpb24oKnRoaXMpOworICAgIGlmIChhdXRvKiBzZXNzaW9uID0gdGhpcy0+c2Vz
c2lvbigpKQorICAgICAgICBzZXNzaW9uLT51bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKCp0
aGlzKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlIDogbV9jbGllbnRPcmlnaW5zKQog
ICAgICAgICBzZXJ2ZXIoKS51bnJlZ2lzdGVyU2VydmljZVdvcmtlckNsaWVudChrZXlWYWx1ZS52
YWx1ZSwga2V5VmFsdWUua2V5KTsKICAgICBmb3IgKGF1dG8mIGNvbXBsZXRpb25IYW5kbGVyIDog
bV91bnJlZ2lzdGVySm9icy52YWx1ZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCAzYmJkNTM1NDgwZDA1NzYxM2M0M2RiM2Q5ZmFkNDdhZmJjNjIx
MzQ3Li42YmZhNDA4NGJjOGY1NzhjMjY4MDU5YWYxMGNiZmUxOTcxZGJiMzhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xNzMsNyArMTczLDcgQEAg
T0JKQ19DTEFTUyBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0OwogI2RlZmluZSBFTkFCTEVf
VklFV1BPUlRfUkVTSVpJTkcgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogbmFtZXNwYWNlIFdURiB7
Ci1lbnVtIGNsYXNzIENyaXRpY2FsIDogdWludDhfdDsKK2VudW0gY2xhc3MgQ3JpdGljYWwgOiBi
b29sOwogfQogCiBuYW1lc3BhY2UgQVBJIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>