<?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>227210</bug_id>
          
          <creation_ts>2021-06-21 04:33:26 -0700</creation_ts>
          <short_desc>[Cocoa] Migrate WebRTC UDP socket handling to NW API</short_desc>
          <delta_ts>2021-12-02 18:43:08 -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>WebRTC</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=233752</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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771256</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-21 04:33:26 -0700</bug_when>
    <thetext>[Cocoa] Migrate WebRTC UDP socket handling to NW API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771258</commentid>
    <comment_count>1</comment_count>
      <attachid>431847</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-21 05:02:06 -0700</bug_when>
    <thetext>Created attachment 431847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771260</commentid>
    <comment_count>2</comment_count>
      <attachid>431849</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-21 05:36:16 -0700</bug_when>
    <thetext>Created attachment 431849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771306</commentid>
    <comment_count>3</comment_count>
      <attachid>431867</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-21 09:02:45 -0700</bug_when>
    <thetext>Created attachment 431867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771355</commentid>
    <comment_count>4</comment_count>
      <attachid>431880</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-21 11:06:12 -0700</bug_when>
    <thetext>Created attachment 431880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771375</commentid>
    <comment_count>5</comment_count>
      <attachid>431887</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-21 11:43:08 -0700</bug_when>
    <thetext>Created attachment 431887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771631</commentid>
    <comment_count>6</comment_count>
      <attachid>431951</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-22 02:33:39 -0700</bug_when>
    <thetext>Created attachment 431951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771638</commentid>
    <comment_count>7</comment_count>
      <attachid>431954</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-22 03:48:26 -0700</bug_when>
    <thetext>Created attachment 431954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771648</commentid>
    <comment_count>8</comment_count>
      <attachid>431958</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-22 04:51:30 -0700</bug_when>
    <thetext>Created attachment 431958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773022</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-28 04:34:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/79859045&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773129</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-28 10:45:09 -0700</bug_when>
    <thetext>iOS test failure is probably related to change in the timing, but I do not think this is a regression per se.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773137</commentid>
    <comment_count>11</comment_count>
      <attachid>431958</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-06-28 10:57:08 -0700</bug_when>
    <thetext>Comment on attachment 431958
Patch

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

&gt; Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

Nit: should this be 2021?

&gt; Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

Ditto

&gt; Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:74
&gt; +        if (error)
&gt; +            return;

Is it worth logging this error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773435</commentid>
    <comment_count>12</comment_count>
      <attachid>432493</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-29 10:04:44 -0700</bug_when>
    <thetext>Created attachment 432493
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773677</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-30 00:44:25 -0700</bug_when>
    <thetext>ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773678</commentid>
    <comment_count>14</comment_count>
      <attachid>432570</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-30 00:45:50 -0700</bug_when>
    <thetext>Created attachment 432570
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773679</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-30 00:47:08 -0700</bug_when>
    <thetext>ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773680</commentid>
    <comment_count>16</comment_count>
      <attachid>432571</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-30 00:49:57 -0700</bug_when>
    <thetext>Created attachment 432571
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773697</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-30 01:46:45 -0700</bug_when>
    <thetext>Committed r279405 (239270@main): &lt;https://commits.webkit.org/239270@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432571.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773875</commentid>
    <comment_count>18</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2021-06-30 14:00:49 -0700</bug_when>
    <thetext>t looks like the changes in https://trac.webkit.org/changeset/279405/webkit 

broke 50+ webrtc tests for mac debug https://build.webkit.org/#/builders/23/builds/2608

We should revert this if it is not a quick fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773877</commentid>
    <comment_count>19</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2021-06-30 14:16:26 -0700</bug_when>
    <thetext>Reverted r279405 for reason:

Casued 50+ webrtc crashes on Big Sur Debug

Committed r279432 (239291@main): &lt;https://commits.webkit.org/239291@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774025</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-07-01 00:43:03 -0700</bug_when>
    <thetext>Crash seems to be related to use of nw_endpoint_get_hostname which is not behaving the same in BigSur and Monterey.
I will check endpoint type for extra safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774030</commentid>
    <comment_count>21</comment_count>
      <attachid>432667</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-07-01 01:11:10 -0700</bug_when>
    <thetext>Created attachment 432667
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774065</commentid>
    <comment_count>22</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-01 03:37:45 -0700</bug_when>
    <thetext>Committed r279461 (239317@main): &lt;https://commits.webkit.org/239317@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432667.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774097</commentid>
    <comment_count>23</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-07-01 06:54:23 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774098</commentid>
    <comment_count>24</comment_count>
      <attachid>432687</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-07-01 06:54:26 -0700</bug_when>
    <thetext>Created attachment 432687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774108</commentid>
    <comment_count>25</comment_count>
      <attachid>432691</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-07-01 08:04:40 -0700</bug_when>
    <thetext>Created attachment 432691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774135</commentid>
    <comment_count>26</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-01 08:58:09 -0700</bug_when>
    <thetext>Committed r279464 (239320@main): &lt;https://commits.webkit.org/239320@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432691.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431847</attachid>
            <date>2021-06-21 05:02:06 -0700</date>
            <delta_ts>2021-06-21 05:36:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210621140204.patch</filename>
            <type>text/plain</type>
            <size>54338</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBhZjM5ODMyMTM3ZDIyM2E3ZmJkNzc1M2UzNmFhNmVkZTY1MTZiOTEzLi5hNDNm
NzgwZjRjNzRmYWZkMTRjNzU3NDA5ODRjNGI1OTA3MjMxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0xMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBWaWN0b3IgTS4gSmFxdWV6IEwuIDx2
amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB0byBNOTIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTlhYTA5N2Y1ODljYTlhY2Q0YTc5NTAzNzQ2NTliNjRkY2U1ZDEwZS4uZDVkZDJk
YTE0ZDUzNDcxNDJmZjAyNWM0NzU2NjBjYzgyMjFkMTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MiBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlncmF0
ZSBVRFAgc29ja2V0IGhhbmRsaW5nIGZyb20gV2ViUlRDIHBoeXNpY2FsIHNvY2tldCBzZXJ2ZXIg
dG8gbncgQVBJIGZvciBDb2NvYSBwb3J0cy4KKworICAgICAgICBGb3IgZWFjaCBVRFAgc29ja2V0
IG9wZW5lZCwgd2Ugb3BlbiBhIG53X2xpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gaW5ib3Vu
ZCBjb25uZWN0aW9ucy4KKyAgICAgICAgT24gaW5ib3VuZCBjb25uZWN0aW9uLCB3ZSByZWNlaXZl
IGEgbndfY29ubmVjdGlvbiB0aGF0IHdlIHN0b3JlIGluIGEgYWRkcmVzcyAtPiBjb25uZWN0aW9u
IG1hcC4KKworICAgICAgICBXaGVuZXZlciBzZW5kaW5nIGEgcGFja2V0LCB3ZSBsb29rIGF0IHRo
ZSByZW1vdGUgYWRkcmVzcy4KKyAgICAgICAgSWYgbmVlZGVkLCB3ZSBjcmVhdGUgYSBud19jb25u
ZWN0aW9uIHRvIHRoYXQgcGFydGljdWxhciByZW1vdGUgYWRkcmVzcyBhbmQgc3RvcmUgaXQgaW4g
dGhlIGFkZHJlc3MgLT4gY29ubmVjdGlvbiBtYXAuCisgICAgICAgIFdlIHRoZW4gdXNlIHRoZSBw
cmUtZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCBud19jb25uZWN0aW9uIHRvIHNlbmQgdGhlIHBh
Y2tldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRDUFNvY2tldCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0Q29jb2EuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tLgorICAgICAgICAoV2ViS2l0Ojp0Y3BT
b2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1RDUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLmgu
CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz46Omhhc2gpOgor
ICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZW1wdHlWYWx1ZSk6
CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6Y29uc3RydWN0
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJl
c3M+Ojppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OnVkcFNv
Y2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
cmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnByb2Nlc3NVRFBEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNl
dHVwTldDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hOjpzZW5kVG8pOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDYtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTnVtYmVyIHBhZCBidXR0b24g
aXMgbWlzc2luZyBpdHMgaW1hZ2Ugd2hlbiB0YXBwaW5nIG9uIDxpbnB1dCB0eXBlPXRlbD4gaW4g
d2F0Y2hPUyA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmln
dXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2Zl
OGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9f
Wk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVj
dGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3
QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19J
TlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVv
RW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRl
b0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lO
U18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3
ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRl
ZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQ
ZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3Vy
YXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0
QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
LmlPU3NpbS5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMv
bGlid2VicnRjLmlPU3NpbS5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0
MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndl
YnJ0Yy5pT1NzaW0uZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1
cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRj
MTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9E
ZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlB
dWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2Rl
ckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29k
ZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1
ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMy
M1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBf
X1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29u
bmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25F
TlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVz
czRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5l
eHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
Lm1hYy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4u
MjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJy
dGMubWFjLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAppbmRleCA0MDc3NTEz
NjQzNDcyNWM0MzNlYmFjZmZlNGJjZDhlNDVlZWI4OTc3Li41MzNjMjQxMDU2MmUxZGY2Y2ViZDhk
OGIzZDliNGU2Y2QwNjA2ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKQEAgLTQ2LDcgKzQ2LDgg
QEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk5ldHdvcmtSVENSZXNvbHZlckNv
Y29hLmgiCi0jaW5jbHVkZSAiTmV0d29ya1JUQ1NvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0
d29ya1JUQ1RDUFNvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMzcsNiArMTM4LDE1IEBA
IHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBzdGQ6CiAKIHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVh
dGVVRFBTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBS
VENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50
MTZfdCBtYXhQb3J0KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAgaWYgKGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoaWRlbnRpZmllciwgKnRoaXMsIGFkZHJlc3Mu
dmFsdWUsIG1pblBvcnQsIG1heFBvcnQsIG1faXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpKSB7Cisg
ICAgICAgICAgICBhZGRTb2NrZXQoaWRlbnRpZmllciwgV1RGTW92ZShzb2NrZXQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgQVNTRVJUKG1f
cnRjTmV0d29ya1RocmVhZC5Jc0N1cnJlbnQoKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6
QXN5bmNQYWNrZXRTb2NrZXQ+IHNvY2tldChtX3BhY2tldFNvY2tldEZhY3RvcnktPkNyZWF0ZVVk
cFNvY2tldChhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0KSk7CiAgICAgY3JlYXRlU29j
a2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSwgU29ja2V0OjpUeXBlOjpVRFAsIG1faXBj
Q29ubmVjdGlvbi5jb3B5UmVmKCkpOwpAQCAtMTgyLDcgKzE5Miw3IEBAIHZvaWQgTmV0d29ya1JU
Q1Byb3ZpZGVyOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmCiAgICAgICAgIGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZp
ZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3Mu
dmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFk
ZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRy
ZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENv
cHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
ICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tl
dChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0
aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAq
dGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkp
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29j
a2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
U29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMz
YjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRl
IDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRy
ZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENv
Y29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYp
OwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElk
ZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRU
Q1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9w
dGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3Zp
ZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5Q
dHI8bndfY29ubmVjdGlvbl90PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsg
ZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2Zl
NTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29h
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1
ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4s
IF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0
IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+
IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1Nv
Y2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRl
ciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExT
X0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBy
dGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9u
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhf
dD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBi
dWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5l
Y3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVy
ZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQ
dHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBX
VEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9k
YXRhX3QgY29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBs
ZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsm
XShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2
ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdU
Rk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29u
dGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3Zl
KHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5l
dHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tl
dElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVm
PElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0
aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQ
YWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVt
b3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAg
ICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRv
IGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCks
IFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBv
dGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92
ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0
RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVy
c19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdV
UkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29w
dGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVs
YXkodGNwX29wdGlvbnMsIHRydWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0g
YWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsK
LQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2Nr
ZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIo
bV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1f
Y29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxh
YmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVy
cm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRp
bmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAg
ICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNp
Z25hbENvbm5lY3QoaWRlbnRpZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlk
ZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0g
ICAgICAgICAgICAgICAgcnRjUHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgp
Ci17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nv
bm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVy
LnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29j
b2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBp
cyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0
YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUg
PSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFr
UHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRl
ciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFz
dEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29y
a1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikg
ewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVz
c2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+
bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVu
Z3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVy
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRo
UGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3Ro
V2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBl
bmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQo
KHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAw
eEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6
UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3Nh
Z2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwg
ZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZB
VUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10o
X051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlv
bnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYg
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
ZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2RhMTlkZWMzMzFhOGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0
Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtS
VENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgorCituYW1lc3BhY2Ug
cnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1By
b3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNy
ZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBO
ZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVENQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRDUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5h
bDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRk
cmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKKyAg
ICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBO
ZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOworICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fbndDb25u
ZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4geyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRj
L05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWRkNGY5NzI2MTU0Mjhk
N2Y0Y2E0NjZlN2E2NTc1ZTU5YjFlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCkBAIC0w
LDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRG
T1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxpYldl
YlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJz
aW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxv
Y2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB0Y3BTb2NrZXRRdWV1ZSgpCit7CisgICAgc3Rh
dGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBv
bmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBxdWV1
ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFRDUCBzb2NrZXQgcXVldWUiLCBESVNQ
QVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRp
ZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBt
aWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9UTFNfSU5TRUNVUkUg
YXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E+KGlkZW50aWZpZXIsIHJ0Y1Byb3Zp
ZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1aW50OF90PihWZWN0
b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciA9
IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53Q29ubmVjdGlvbi5n
ZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9uUmVmZXJlbmNlLCAx
LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VCbG9ja1B0cihbbndD
b25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0YSA9IFdURk1vdmUo
cHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3BhdGNoX2RhdGFfdCBj
b250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53
X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAg
ICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3Bh
dGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBwZW5kIHZlcnNpb24u
CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfSkuZ2V0KCkpOworICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0RhdGEoV1RGTW92ZShi
dWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiBjb250ZXh0ICYm
IG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vz
c0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rp
b24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBh
Y2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1v
dGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAg
IGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8g
aG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwg
U3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90
aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zl
cmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRG
YWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJz
X2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VS
QVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0
aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxh
eSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOwor
CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNv
Y2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxl
cihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVu
dGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVs
bGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAh
ZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVj
dGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2Fp
dGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5Ogor
ICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6
U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92
aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsK
KyAgICAgICAgICAgICAgICBydGNQcm92aWRlci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsQ2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHBy
b2Nlc3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1v
dGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9
IG1faXNTVFVOXShhdXRvJiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIFdlYlJU
Qzo6ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUoYnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNz
YWdlVHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVzc2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNz
YWdlLCBhdXRvIHNpemUpIHsKKyAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1l
c3NhZ2UsIHNpemUpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05l
dHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAw
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndD
b25uZWN0aW9uLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNs
b3NlKCkKK3sKKyAgICBpZiAoIW1fbndDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
bndfY29ubmVjdGlvbl9jYW5jZWwobV9ud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fcnRjUHJv
dmlkZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYTo6c2V0T3B0aW9uKGludCwgaW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0
ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9CisKK3N0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0
YV90PiBkYXRhRnJvbVZlY3RvcihWZWN0b3I8dWludDhfdD4mJiB2KQoreworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZl
cigpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShy
YXdQb2ludGVyLCBidWZmZXJTaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBmYXN0RnJlZShyYXdQb2ludGVyKTsKKyAgICB9KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KG1faXNTVFVOKSB7CisgICAgICAgIGF1dG8gbWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNU
VU5PclRVUk5NZXNzYWdlTGVuZ3RocyhkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFtZXNzYWdl
TGVuZ3RocykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoID09IHNpemUpOworICAgICAgICBBU1NFUlQobWVzc2Fn
ZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyA+PSBzaXplKTsKKyAgICAgICAgaWYg
KG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPCBzaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
ICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2Fn
ZUxlbmd0aFdpdGhQYWRkaW5nKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1l
c3NhZ2VMZW5ndGhXaXRoUGFkZGluZyAtIHNpemU7ICsrY3B0cikKKyAgICAgICAgICAgIGJ1ZmZl
ci51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisg
ICAgLy8gUHJlcGVuZCBsZW5ndGguCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBi
dWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplICsgMik7CisgICAgYnVmZmVyLnVuY2hl
Y2tlZEFwcGVuZCgoc2l6ZSA+PiA4KSAmIDB4RkYpOworICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBl
bmQoc2l6ZSAmIDB4RkYpOworICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyhj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gYnVmZmVy
ID0gY3JlYXRlTWVzc2FnZUJ1ZmZlcihkYXRhLCBzaXplKTsKKyAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25u
ZWN0aW9uLmdldCgpLCBkYXRhRnJvbVZlY3RvcihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19D
T05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndfZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRl
bnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAg
IH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDQzM2YzMTlmZGJkYzQ4MWFjMDI4NDQ0ZmI1Mzc1MTJhNDRlZjRkNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5j
bHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1l
c3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3Mp
IHsgcmV0dXJuIGFkZHJlc3MuSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiBhLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGIpIHsgcmV0
dXJuIGEgPT0gYiB8fCAoYS5Jc05pbCgpICYmIGIuSXNOaWwoKSAmJiBhLnNjb3BlX2lkKCkgPT0g
Yi5zY29wZV9pZCgpKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBHZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFk
ZHJlc3M+IHsKKyAgICBzdGF0aWMgcnRjOjpTb2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9
OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNj
b3BlX2lkKCkgPT0gLTE7IH0KK307CisKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRl
VURQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQ
cm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIHVpbnQxNl90IG1pblBvcnQsIHVp
bnQxNl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCisgICAgTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdv
cmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAg
ICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
c2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4gY3JlYXRlTldDb25uZWN0aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYp
OworICAgIHZvaWQgc2V0dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmKTsKKworICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92aWRlciYgbV9ydGNQcm92aWRlcjsK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRB
ZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3Rl
bmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsKKyAgICBIYXNoTWFwPHJ0Yzo6U29j
a2V0QWRkcmVzcywgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4+IG1fbndDb25uZWN0aW9ucyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fbndDb25uZWN0aW9uc0xvY2spOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MGFhZDkzYzlhZDY4
NDNhOTQyZWMxNzg2NDM3ODg5NTU2OGRlOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCkBA
IC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBM
QVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxp
YldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQ
YXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYv
QmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB1ZHBTb2NrZXRRdWV1ZSgpCit7CisgICAg
c3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBx
dWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFVEUCBzb2NrZXQgcXVldWUiLCBE
SVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIHVpbnQxNl90IG1pblBvcnQsIHVpbnQx
Nl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogRGVjaWRlIGhvdyB0byB1c2UgbWluUG9ydC9tYXhQb3J0LgorICAgIHJldHVybiBt
YWtlVW5pcXVlPE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYT4oaWRlbnRpZmllciwgcnRjUHJvdmlk
ZXIsIGFkZHJlc3MsIFdURk1vdmUoY29ubmVjdGlvbikpOworfQorCitOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYShXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCit7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1F
VEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJT04pKTsKKworICAgIHsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IGFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICAgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkp
CisgICAgICAgICAgICBob3N0TmFtZSA9IGFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAg
ICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9z
dChob3N0TmFtZS5jX3N0cigpLCAiMCIpKTsKKyAgICAgICAgbV9hZGRyZXNzID0geyBud19lbmRw
b2ludF9nZXRfaG9zdG5hbWUobG9jYWxFbmRwb2ludC5nZXQoKSksIG53X2VuZHBvaW50X2dldF9w
b3J0KGxvY2FsRW5kcG9pbnQuZ2V0KCkpIH07CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xv
Y2FsX2VuZHBvaW50KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAg
IH0KKworICAgIG1fbndMaXN0ZW5lciA9IGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRlKHBhcmFt
ZXRlcnMuZ2V0KCkpKTsKKyAgICBud19saXN0ZW5lcl9zZXRfcXVldWUobV9ud0xpc3RlbmVyLmdl
dCgpLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKworICAgIC8vIExldCdzIGhvbGQgYSByZWZlcmVuY2Ug
dW50aWwgYmVpbmcgY2FuY2VsZWQuCisgICAgbndfcmV0YWluKG1fbndMaXN0ZW5lci5nZXQoKSk7
CisgICAgbndfbGlzdGVuZXJfc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX253TGlzdGVuZXIu
Z2V0KCksIG1ha2VCbG9ja1B0cihbbndMaXN0ZW5lciA9IG1fbndMaXN0ZW5lci5nZXQoKSwgYWRk
cmVzcyA9IG1fYWRkcmVzcywgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIHBy
b3RlY3RlZFJUQ1Byb3ZpZGVyID0gbWFrZVJlZihtX3J0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9
IG1faWRlbnRpZmllcl0obndfbGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJv
cikgbXV0YWJsZSB7CisgICAgICAgIGVycm5vID0gZXJyb3IgPyBud19lcnJvcl9nZXRfZXJyb3Jf
Y29kZShlcnJvcikgOiAwOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2Ug
bndfbGlzdGVuZXJfc3RhdGVfaW52YWxpZDoKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0
ZV93YWl0aW5nOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJf
c3RhdGVfcmVhZHk6CisgICAgICAgICAgICBhZGRyZXNzLlNldFBvcnQobndfbGlzdGVuZXJfZ2V0
X3BvcnQobndMaXN0ZW5lcikpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsQWRkcmVzc1JlYWR5KGlkZW50aWZpZXIsIFJUQ05l
dHdvcms6OlNvY2tldEFkZHJlc3MoYWRkcmVzcykpLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX2ZhaWxlZDoKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFJUQ1Byb3ZpZGVyLT5jYWxsT25SVENOZXR3b3JrVGhyZWFkKFtwcm90ZWN0ZWRSVENQcm92
aWRlciwgaWRlbnRpZmllcl0geworICAgICAgICAgICAgICAgIHByb3RlY3RlZFJUQ1Byb3ZpZGVy
LT50YWtlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBj
b25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxDbG9zZShp
ZGVudGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugbndf
bGlzdGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAgICAgbndfcmVsZWFzZShud0xpc3Rl
bmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSkuZ2V0KCkpOworCisg
ICAgbndfbGlzdGVuZXJfc2V0X25ld19jb25uZWN0aW9uX2hhbmRsZXIobV9ud0xpc3RlbmVyLmdl
dCgpLCBtYWtlQmxvY2tQdHIoW3RoaXNdKG53X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKSB7Cisg
ICAgICAgIGF1dG8gZW5kcG9pbnQgPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY29weV9lbmRwb2lu
dChjb25uZWN0aW9uKSk7CisgICAgICAgIHJ0Yzo6U29ja2V0QWRkcmVzcyByZW1vdGVBZGRyZXNz
IHsgbndfZW5kcG9pbnRfZ2V0X2hvc3RuYW1lKGVuZHBvaW50LmdldCgpKSwgbndfZW5kcG9pbnRf
Z2V0X3BvcnQoZW5kcG9pbnQuZ2V0KCkpIH07CisKKyAgICAgICAgeworICAgICAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fbndDb25uZWN0aW9uc0xvY2sgfTsKKyAgICAgICAgICAgIG1fbndDb25u
ZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29ubmVjdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0dXBOV0Nvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVtb3RlQWRkcmVzcyk7CisgICAgfSku
Z2V0KCkpOworCisgICAgbndfbGlzdGVuZXJfc3RhcnQobV9ud0xpc3RlbmVyLmdldCgpKTsKK30K
Kwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3NlKCkKK3sKKyAgICBud19saXN0
ZW5lcl9jYW5jZWwobV9ud0xpc3RlbmVyLmdldCgpKTsKKyAgICBtX253TGlzdGVuZXIgPSBudWxs
cHRyOworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9j
ayB9OworICAgICAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX253Q29ubmVjdGlvbnMudmFs
dWVzKCkpCisgICAgICAgICAgICBud19jb25uZWN0aW9uX2NhbmNlbChjb25uZWN0aW9uLmdldCgp
KTsKKyAgICAgICAgbV9ud0Nvbm5lY3Rpb25zLmNsZWFyKCk7CisgICAgfQorCisgICAgbV9ydGNQ
cm92aWRlci50YWtlU29ja2V0KG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hOjpzZXRPcHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6IFZhbGlk
YXRlIHRoaXMgaXMgbm90IG5lZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NV
RFBEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlv
bjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQoreworICAgIGF1
dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nv
bm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZN
b3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSldKGRp
c3BhdGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29s
IGlzQ29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29u
dGVudCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxv
Y2tQdHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgeworICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29tcGxldGUg
JiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0aW9uKSwgV1RGTW92
ZShwcm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsKK30KKworUmV0YWluUHRyPG53X2Nvbm5l
Y3Rpb25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nvbm5lY3Rpb24oY29u
c3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzKQoreworICAgIGF1dG8gaG9zdE5h
bWUgPSByZW1vdGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkp
CisgICAgICAgIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOwor
ICAgIGF1dG8gaG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUu
Y19zdHIoKSwgU3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICBhdXRvIHVkcFBhcmFtZXRlcnMgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY3Jl
YXRlX3NlY3VyZV91ZHAoTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBOV19QQVJBTUVU
RVJTX0RFRkFVTFRfQ09ORklHVVJBVElPTikpOworCisgICAgYXV0byBud0Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHVkcFBhcmFtZXRlcnMuZ2V0
KCkpKTsKKyAgICBzZXR1cE5XQ29ubmVjdGlvbihud0Nvbm5lY3Rpb24uZ2V0KCksIHJlbW90ZUFk
ZHJlc3MpOworICAgIHJldHVybiBud0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hOjpzZXR1cE5XQ29ubmVjdGlvbihud19jb25uZWN0aW9uX3QgbndDb25uZWN0
aW9uLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgbndf
Y29ubmVjdGlvbl9zZXRfcXVldWUobndDb25uZWN0aW9uLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKyAg
ICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobndDb25uZWN0aW9uLCBt
YWtlQmxvY2tQdHIoW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJ0Y1Byb3ZpZGVyID0gbWFr
ZVJlZihtX3J0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCld
KG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJyb3Ip
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKKworICAgICAgICBzd2l0
Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9pbnZhbGlkOgor
ICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGluZzoKKyAgICAgICAgY2FzZSBu
d19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgorICAgICAgICAgICAgY29ubmVjdGlv
bi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsQ29ubmVjdChpZGVudGlm
aWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICAvLyBBZGQgbG9nZ2luZy4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHByb2Nl
c3NVRFBEYXRhKG53Q29ubmVjdGlvbiwgW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5l
Y3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJlZigpLCBpcCA9IHJlbW90ZUFkZHJlc3MuaXBhZGRy
KCksIHBvcnQgPSByZW1vdGVBZGRyZXNzLnBvcnQoKV0oYXV0byogbWVzc2FnZSwgYXV0byBzaXpl
KSBtdXRhYmxlIHsKKyAgICAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEobWVzc2FnZSwgc2l6
ZSk7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6
OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJl
c3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7CisgICAgfSk7CisK
KyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG53Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgTmV0d29y
a1JUQ1VEUFNvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRjOjpQ
YWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rp
b247CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9
OworICAgICAgICBud0Nvbm5lY3Rpb24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90ZUFk
ZHJlc3MsIFt0aGlzLCAmcmVtb3RlQWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZU5XQ29ubmVjdGlvbihyZW1vdGVBZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOworICAgIH0KKworICAgIGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2RhdGFf
Y3JlYXRlKGRhdGEsIHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9ERUZB
VUxUKSk7CisgICAgbndfY29ubmVjdGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0KCks
IE5XX0NPTk5FQ1RJT05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9ja1B0
cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5j
b3B5UmVmKCksIG9wdGlvbnNdKF9OdWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNvbm5l
Y3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNrZXQg
eyBpZGVudGlmaWVyLCBvcHRpb25zLnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwgMCk7
CisgICAgfSkuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IDhjZmM2MDc0ZDA1NjJhYTU4MmM1YzBkMjM0ODhlZTYzNmIyYzlhOWMuLjRlOWUyZmQxMTZl
MzA5OGIyMTgzNDE5ODRhNWI5MDM2ZmExZDE5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAg
LTU0LDcgKzU0LDggQEAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9yLmNw
cAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdvcmtQ
cm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJy
dGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ1NvY2tldENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tl
dENvY29hLm1tCiAKIEdQVVByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQVVNl
cnZpY2VFbnRyeVBvaW50Lm1tCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2EuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBkZTkzMGI2YjljNzcyOWIxMDVkOWQ2MGM2Y2M4MjQyZWEyZWVmMWIy
Li5iZGNhOWZjZGQ5Y2RjMmQ0MTIzMjQ2Yjg1NTFlNzllNGI1ZmM4Y2ZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDYsOCArMzcw
Niw4IEBACiAJCTQxMDNGQkEyMjA2MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZCNTAw
RjAwNkQwIC8qIFJUQ05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUlRDTmV0d29yay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4
MkNDMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJUQ05ldHdvcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENT
b2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkEx
M0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDExMTQzNjMyMEY2NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJbW1l
ZGlhdGVseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2VyU2Ny
aXB0SW1tZWRpYXRlbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQjcy
NjAyMTUyQjAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGggPSBO
ZXR3b3JrL3dlYnJ0Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAvKiBS
VENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRh
Q2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzg0Niw2ICszODQ2LDggQEAKIAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExpYldl
YlJUQ1NvY2tldENsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MURDNDU5QTFFM0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEgLyog
V2ViUlRDUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V2ViUlRDUmVzb2x2ZXIuY3BwOyBwYXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBBOTBD
NzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
TmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0MURENzJBNzI2N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MUUwQTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRDQ29k
ZWNzUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldl
YlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1l
c3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYzOTc5
MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBMaWJXZWJSVENDb2RlY3NQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTg0MDEsOCArODQwMywxMCBAQAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBOZXR3
b3JrUlRDUmVzb2x2ZXIuaCAqLywKIAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyogTmV0
d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzk4
NiAvKiBOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1RjIw
MDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1NzEz
NUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJBMTNB
MjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJCQk0
MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tICov
LAorCQkJCTQxREQ3MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EuaCAqLywKKwkJCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hLm1tICovLAogCQkJCTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENEYXRh
Q2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4MDAw
QjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJNDEx
MjIzQkQyNjAyNEU4MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431849</attachid>
            <date>2021-06-21 05:36:16 -0700</date>
            <delta_ts>2021-06-21 09:02:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210621143613.patch</filename>
            <type>text/plain</type>
            <size>55001</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBhZjM5ODMyMTM3ZDIyM2E3ZmJkNzc1M2UzNmFhNmVkZTY1MTZiOTEzLi5hNDNm
NzgwZjRjNzRmYWZkMTRjNzU3NDA5ODRjNGI1OTA3MjMxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0xMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBWaWN0b3IgTS4gSmFxdWV6IEwuIDx2
amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB0byBNOTIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTlhYTA5N2Y1ODljYTlhY2Q0YTc5NTAzNzQ2NTliNjRkY2U1ZDEwZS4uZDVkZDJk
YTE0ZDUzNDcxNDJmZjAyNWM0NzU2NjBjYzgyMjFkMTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MiBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlncmF0
ZSBVRFAgc29ja2V0IGhhbmRsaW5nIGZyb20gV2ViUlRDIHBoeXNpY2FsIHNvY2tldCBzZXJ2ZXIg
dG8gbncgQVBJIGZvciBDb2NvYSBwb3J0cy4KKworICAgICAgICBGb3IgZWFjaCBVRFAgc29ja2V0
IG9wZW5lZCwgd2Ugb3BlbiBhIG53X2xpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gaW5ib3Vu
ZCBjb25uZWN0aW9ucy4KKyAgICAgICAgT24gaW5ib3VuZCBjb25uZWN0aW9uLCB3ZSByZWNlaXZl
IGEgbndfY29ubmVjdGlvbiB0aGF0IHdlIHN0b3JlIGluIGEgYWRkcmVzcyAtPiBjb25uZWN0aW9u
IG1hcC4KKworICAgICAgICBXaGVuZXZlciBzZW5kaW5nIGEgcGFja2V0LCB3ZSBsb29rIGF0IHRo
ZSByZW1vdGUgYWRkcmVzcy4KKyAgICAgICAgSWYgbmVlZGVkLCB3ZSBjcmVhdGUgYSBud19jb25u
ZWN0aW9uIHRvIHRoYXQgcGFydGljdWxhciByZW1vdGUgYWRkcmVzcyBhbmQgc3RvcmUgaXQgaW4g
dGhlIGFkZHJlc3MgLT4gY29ubmVjdGlvbiBtYXAuCisgICAgICAgIFdlIHRoZW4gdXNlIHRoZSBw
cmUtZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCBud19jb25uZWN0aW9uIHRvIHNlbmQgdGhlIHBh
Y2tldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRDUFNvY2tldCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0Q29jb2EuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tLgorICAgICAgICAoV2ViS2l0Ojp0Y3BT
b2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1RDUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLmgu
CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz46Omhhc2gpOgor
ICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZW1wdHlWYWx1ZSk6
CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6Y29uc3RydWN0
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJl
c3M+Ojppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OnVkcFNv
Y2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
cmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnByb2Nlc3NVRFBEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNl
dHVwTldDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hOjpzZW5kVG8pOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDYtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTnVtYmVyIHBhZCBidXR0b24g
aXMgbWlzc2luZyBpdHMgaW1hZ2Ugd2hlbiB0YXBwaW5nIG9uIDxpbnB1dCB0eXBlPXRlbD4gaW4g
d2F0Y2hPUyA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmln
dXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2Zl
OGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9f
Wk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVj
dGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3
QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19J
TlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVv
RW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRl
b0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lO
U18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3
ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRl
ZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQ
ZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3Vy
YXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0
QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
LmlPU3NpbS5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMv
bGlid2VicnRjLmlPU3NpbS5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0
MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndl
YnJ0Yy5pT1NzaW0uZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1
cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRj
MTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9E
ZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlB
dWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2Rl
ckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29k
ZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1
ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMy
M1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBf
X1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29u
bmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25F
TlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVz
czRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5l
eHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
Lm1hYy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4u
MjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJy
dGMubWFjLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAppbmRleCA0MDc3NTEz
NjQzNDcyNWM0MzNlYmFjZmZlNGJjZDhlNDVlZWI4OTc3Li41MzNjMjQxMDU2MmUxZGY2Y2ViZDhk
OGIzZDliNGU2Y2QwNjA2ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKQEAgLTQ2LDcgKzQ2LDgg
QEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk5ldHdvcmtSVENSZXNvbHZlckNv
Y29hLmgiCi0jaW5jbHVkZSAiTmV0d29ya1JUQ1NvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0
d29ya1JUQ1RDUFNvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMzcsNiArMTM4LDE1IEBA
IHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBzdGQ6CiAKIHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVh
dGVVRFBTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBS
VENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50
MTZfdCBtYXhQb3J0KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAgaWYgKGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoaWRlbnRpZmllciwgKnRoaXMsIGFkZHJlc3Mu
dmFsdWUsIG1pblBvcnQsIG1heFBvcnQsIG1faXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpKSB7Cisg
ICAgICAgICAgICBhZGRTb2NrZXQoaWRlbnRpZmllciwgV1RGTW92ZShzb2NrZXQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgQVNTRVJUKG1f
cnRjTmV0d29ya1RocmVhZC5Jc0N1cnJlbnQoKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6
QXN5bmNQYWNrZXRTb2NrZXQ+IHNvY2tldChtX3BhY2tldFNvY2tldEZhY3RvcnktPkNyZWF0ZVVk
cFNvY2tldChhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0KSk7CiAgICAgY3JlYXRlU29j
a2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSwgU29ja2V0OjpUeXBlOjpVRFAsIG1faXBj
Q29ubmVjdGlvbi5jb3B5UmVmKCkpOwpAQCAtMTgyLDcgKzE5Miw3IEBAIHZvaWQgTmV0d29ya1JU
Q1Byb3ZpZGVyOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmCiAgICAgICAgIGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZp
ZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3Mu
dmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFk
ZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRy
ZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENv
cHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
ICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tl
dChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0
aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAq
dGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkp
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29j
a2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
U29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMz
YjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRl
IDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRy
ZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENv
Y29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYp
OwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElk
ZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRU
Q1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9w
dGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3Zp
ZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5Q
dHI8bndfY29ubmVjdGlvbl90PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsg
ZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2Zl
NTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29h
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1
ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4s
IF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0
IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+
IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1Nv
Y2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRl
ciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExT
X0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBy
dGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9u
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhf
dD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBi
dWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5l
Y3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVy
ZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQ
dHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBX
VEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9k
YXRhX3QgY29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBs
ZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsm
XShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2
ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdU
Rk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29u
dGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3Zl
KHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5l
dHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tl
dElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVm
PElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0
aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQ
YWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVt
b3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAg
ICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRv
IGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCks
IFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBv
dGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92
ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0
RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVy
c19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdV
UkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29w
dGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVs
YXkodGNwX29wdGlvbnMsIHRydWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0g
YWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsK
LQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2Nr
ZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIo
bV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1f
Y29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxh
YmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVy
cm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRp
bmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAg
ICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNp
Z25hbENvbm5lY3QoaWRlbnRpZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlk
ZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0g
ICAgICAgICAgICAgICAgcnRjUHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgp
Ci17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nv
bm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVy
LnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29j
b2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBp
cyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0
YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUg
PSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFr
UHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRl
ciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFz
dEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29y
a1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikg
ewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVz
c2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+
bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVu
Z3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVy
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRo
UGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3Ro
V2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBl
bmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQo
KHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAw
eEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6
UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3Nh
Z2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwg
ZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZB
VUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10o
X051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlv
bnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYg
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
ZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2RhMTlkZWMzMzFhOGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0
Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtS
VENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgorCituYW1lc3BhY2Ug
cnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1By
b3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNy
ZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBO
ZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVENQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRDUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5h
bDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRk
cmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKKyAg
ICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBO
ZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOworICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fbndDb25u
ZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4geyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRj
L05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWRkNGY5NzI2MTU0Mjhk
N2Y0Y2E0NjZlN2E2NTc1ZTU5YjFlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCkBAIC0w
LDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRG
T1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxpYldl
YlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJz
aW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxv
Y2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB0Y3BTb2NrZXRRdWV1ZSgpCit7CisgICAgc3Rh
dGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBv
bmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBxdWV1
ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFRDUCBzb2NrZXQgcXVldWUiLCBESVNQ
QVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRp
ZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBt
aWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9UTFNfSU5TRUNVUkUg
YXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E+KGlkZW50aWZpZXIsIHJ0Y1Byb3Zp
ZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1aW50OF90PihWZWN0
b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciA9
IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53Q29ubmVjdGlvbi5n
ZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9uUmVmZXJlbmNlLCAx
LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VCbG9ja1B0cihbbndD
b25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0YSA9IFdURk1vdmUo
cHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3BhdGNoX2RhdGFfdCBj
b250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53
X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAg
ICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3Bh
dGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBwZW5kIHZlcnNpb24u
CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfSkuZ2V0KCkpOworICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0RhdGEoV1RGTW92ZShi
dWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiBjb250ZXh0ICYm
IG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vz
c0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rp
b24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBh
Y2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1v
dGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAg
IGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8g
aG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwg
U3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90
aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zl
cmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRG
YWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJz
X2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VS
QVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0
aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxh
eSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOwor
CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNv
Y2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxl
cihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVu
dGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVs
bGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAh
ZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVj
dGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2Fp
dGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5Ogor
ICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6
U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92
aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsK
KyAgICAgICAgICAgICAgICBydGNQcm92aWRlci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsQ2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHBy
b2Nlc3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1v
dGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9
IG1faXNTVFVOXShhdXRvJiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIFdlYlJU
Qzo6ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUoYnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNz
YWdlVHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVzc2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNz
YWdlLCBhdXRvIHNpemUpIHsKKyAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1l
c3NhZ2UsIHNpemUpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05l
dHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAw
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndD
b25uZWN0aW9uLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNs
b3NlKCkKK3sKKyAgICBpZiAoIW1fbndDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
bndfY29ubmVjdGlvbl9jYW5jZWwobV9ud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fcnRjUHJv
dmlkZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYTo6c2V0T3B0aW9uKGludCwgaW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0
ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9CisKK3N0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0
YV90PiBkYXRhRnJvbVZlY3RvcihWZWN0b3I8dWludDhfdD4mJiB2KQoreworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZl
cigpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShy
YXdQb2ludGVyLCBidWZmZXJTaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBmYXN0RnJlZShyYXdQb2ludGVyKTsKKyAgICB9KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KG1faXNTVFVOKSB7CisgICAgICAgIGF1dG8gbWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNU
VU5PclRVUk5NZXNzYWdlTGVuZ3RocyhkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFtZXNzYWdl
TGVuZ3RocykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoID09IHNpemUpOworICAgICAgICBBU1NFUlQobWVzc2Fn
ZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyA+PSBzaXplKTsKKyAgICAgICAgaWYg
KG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPCBzaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
ICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2Fn
ZUxlbmd0aFdpdGhQYWRkaW5nKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1l
c3NhZ2VMZW5ndGhXaXRoUGFkZGluZyAtIHNpemU7ICsrY3B0cikKKyAgICAgICAgICAgIGJ1ZmZl
ci51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisg
ICAgLy8gUHJlcGVuZCBsZW5ndGguCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBi
dWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplICsgMik7CisgICAgYnVmZmVyLnVuY2hl
Y2tlZEFwcGVuZCgoc2l6ZSA+PiA4KSAmIDB4RkYpOworICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBl
bmQoc2l6ZSAmIDB4RkYpOworICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyhj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gYnVmZmVy
ID0gY3JlYXRlTWVzc2FnZUJ1ZmZlcihkYXRhLCBzaXplKTsKKyAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25u
ZWN0aW9uLmdldCgpLCBkYXRhRnJvbVZlY3RvcihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19D
T05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndfZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRl
bnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAg
IH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDQzM2YzMTlmZGJkYzQ4MWFjMDI4NDQ0ZmI1Mzc1MTJhNDRlZjRkNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5j
bHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1l
c3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3Mp
IHsgcmV0dXJuIGFkZHJlc3MuSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiBhLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGIpIHsgcmV0
dXJuIGEgPT0gYiB8fCAoYS5Jc05pbCgpICYmIGIuSXNOaWwoKSAmJiBhLnNjb3BlX2lkKCkgPT0g
Yi5zY29wZV9pZCgpKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBHZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFk
ZHJlc3M+IHsKKyAgICBzdGF0aWMgcnRjOjpTb2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9
OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNj
b3BlX2lkKCkgPT0gLTE7IH0KK307CisKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRl
VURQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQ
cm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIHVpbnQxNl90IG1pblBvcnQsIHVp
bnQxNl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCisgICAgTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdv
cmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAg
ICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
c2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4gY3JlYXRlTldDb25uZWN0aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYp
OworICAgIHZvaWQgc2V0dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmKTsKKworICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92aWRlciYgbV9ydGNQcm92aWRlcjsK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRB
ZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3Rl
bmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsKKyAgICBIYXNoTWFwPHJ0Yzo6U29j
a2V0QWRkcmVzcywgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4+IG1fbndDb25uZWN0aW9ucyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fbndDb25uZWN0aW9uc0xvY2spOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmJlZmZmY2ZhYjg1
MjFlMGY2MDRkODExNTkxNmQ0MDJiMjhlY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCkBA
IC0wLDAgKzEsMjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBM
QVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxp
YldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQ
YXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYv
QmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB1ZHBTb2NrZXRRdWV1ZSgpCit7CisgICAg
c3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBx
dWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFVEUCBzb2NrZXQgcXVldWUiLCBE
SVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIHVpbnQxNl90IG1pblBvcnQsIHVpbnQx
Nl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogRGVjaWRlIGhvdyB0byB1c2UgbWluUG9ydC9tYXhQb3J0LgorICAgIHJldHVybiBt
YWtlVW5pcXVlPE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYT4oaWRlbnRpZmllciwgcnRjUHJvdmlk
ZXIsIGFkZHJlc3MsIFdURk1vdmUoY29ubmVjdGlvbikpOworfQorCitOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYShXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCit7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1F
VEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdE5h
bWUgPSBhZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQor
ICAgICAgICAgICAgaG9zdE5hbWUgPSBhZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5nKCk7CisgICAg
ICAgIGF1dG8gbG9jYWxFbmRwb2ludCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3Qo
aG9zdE5hbWUuY19zdHIoKSwgIjAiKSk7CisgICAgICAgIG1fYWRkcmVzcyA9IHsgbndfZW5kcG9p
bnRfZ2V0X2hvc3RuYW1lKGxvY2FsRW5kcG9pbnQuZ2V0KCkpLCBud19lbmRwb2ludF9nZXRfcG9y
dChsb2NhbEVuZHBvaW50LmdldCgpKSB9OworICAgICAgICBud19wYXJhbWV0ZXJzX3NldF9sb2Nh
bF9lbmRwb2ludChwYXJhbWV0ZXJzLmdldCgpLCBsb2NhbEVuZHBvaW50LmdldCgpKTsKKyAgICB9
CisgICAgeworICAgICAgICBhdXRvIHByb3RvY29sU3RhY2sgPSBhZG9wdE5TKG53X3BhcmFtZXRl
cnNfY29weV9kZWZhdWx0X3Byb3RvY29sX3N0YWNrKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICAg
ICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhud19wcm90b2NvbF9zdGFja19jb3B5X2ludGVybmV0
X3Byb3RvY29sKHByb3RvY29sU3RhY2suZ2V0KCkpKTsKKyAgICAgICAgbndfaXBfb3B0aW9uc19z
ZXRfdmVyc2lvbihvcHRpb25zLmdldCgpLCBhZGRyZXNzLmZhbWlseSgpID09IEFGX0lORVQgPyBu
d19pcF92ZXJzaW9uXzQgOiBud19pcF92ZXJzaW9uXzYpOworICAgIH0KKworICAgIG1fbndMaXN0
ZW5lciA9IGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRlKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAg
ICBud19saXN0ZW5lcl9zZXRfcXVldWUobV9ud0xpc3RlbmVyLmdldCgpLCB1ZHBTb2NrZXRRdWV1
ZSgpKTsKKworICAgIC8vIExldCdzIGhvbGQgYSByZWZlcmVuY2UgdW50aWwgYmVpbmcgY2FuY2Vs
ZWQuCisgICAgbndfcmV0YWluKG1fbndMaXN0ZW5lci5nZXQoKSk7CisgICAgbndfbGlzdGVuZXJf
c2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0
cihbbndMaXN0ZW5lciA9IG1fbndMaXN0ZW5lci5nZXQoKSwgYWRkcmVzcyA9IG1fYWRkcmVzcywg
Y29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIHByb3RlY3RlZFJUQ1Byb3ZpZGVy
ID0gbWFrZVJlZihtX3J0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllcl0obndf
bGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAg
ICAgIGVycm5vID0gZXJyb3IgPyBud19lcnJvcl9nZXRfZXJyb3JfY29kZShlcnJvcikgOiAwOwor
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVf
aW52YWxpZDoKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV93YWl0aW5nOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfcmVhZHk6CisgICAg
ICAgICAgICBhZGRyZXNzLlNldFBvcnQobndfbGlzdGVuZXJfZ2V0X3BvcnQobndMaXN0ZW5lcikp
OworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29y
azo6U2lnbmFsQWRkcmVzc1JlYWR5KGlkZW50aWZpZXIsIFJUQ05ldHdvcms6OlNvY2tldEFkZHJl
c3MoYWRkcmVzcykpLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG53X2xp
c3RlbmVyX3N0YXRlX2ZhaWxlZDoKKyAgICAgICAgICAgIHByb3RlY3RlZFJUQ1Byb3ZpZGVyLT5j
YWxsT25SVENOZXR3b3JrVGhyZWFkKFtwcm90ZWN0ZWRSVENQcm92aWRlciwgaWRlbnRpZmllcl0g
eworICAgICAgICAgICAgICAgIHByb3RlY3RlZFJUQ1Byb3ZpZGVyLT50YWtlU29ja2V0KGlkZW50
aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1l
c3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxDbG9zZShpZGVudGlmaWVyLCAtMSksIDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfY2Fu
Y2VsbGVkOgorICAgICAgICAgICAgbndfcmVsZWFzZShud0xpc3RlbmVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSkuZ2V0KCkpOworCisgICAgbndfbGlzdGVuZXJfc2V0
X25ld19jb25uZWN0aW9uX2hhbmRsZXIobV9ud0xpc3RlbmVyLmdldCgpLCBtYWtlQmxvY2tQdHIo
W3RoaXNdKG53X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKSB7CisgICAgICAgIGF1dG8gZW5kcG9p
bnQgPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY29weV9lbmRwb2ludChjb25uZWN0aW9uKSk7Cisg
ICAgICAgIHJ0Yzo6U29ja2V0QWRkcmVzcyByZW1vdGVBZGRyZXNzIHsgbndfZW5kcG9pbnRfZ2V0
X2hvc3RuYW1lKGVuZHBvaW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQoZW5kcG9pbnQu
Z2V0KCkpIH07CisKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbndD
b25uZWN0aW9uc0xvY2sgfTsKKyAgICAgICAgICAgIG1fbndDb25uZWN0aW9ucy5zZXQocmVtb3Rl
QWRkcmVzcywgY29ubmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgc2V0dXBOV0Nvbm5lY3Rp
b24oY29ubmVjdGlvbiwgcmVtb3RlQWRkcmVzcyk7CisgICAgfSkuZ2V0KCkpOworCisgICAgbndf
bGlzdGVuZXJfc3RhcnQobV9ud0xpc3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2E6OmNsb3NlKCkKK3sKKyAgICBud19saXN0ZW5lcl9jYW5jZWwobV9ud0xp
c3RlbmVyLmdldCgpKTsKKyAgICBtX253TGlzdGVuZXIgPSBudWxscHRyOworCisgICAgeworICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9OworICAgICAgICBmb3Ig
KGF1dG8mIGNvbm5lY3Rpb24gOiBtX253Q29ubmVjdGlvbnMudmFsdWVzKCkpCisgICAgICAgICAg
ICBud19jb25uZWN0aW9uX2NhbmNlbChjb25uZWN0aW9uLmdldCgpKTsKKyAgICAgICAgbV9ud0Nv
bm5lY3Rpb25zLmNsZWFyKCk7CisgICAgfQorCisgICAgbV9ydGNQcm92aWRlci50YWtlU29ja2V0
KG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRP
cHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6IFZhbGlkYXRlIHRoaXMgaXMgbm90IG5l
ZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NVRFBEYXRhKFJldGFpblB0cjxu
d19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjx2b2lkKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVm
ZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShu
d0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiks
IHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSldKGRpc3BhdGNoX2RhdGFfdCBjb250
ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53X2Vy
cm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAgICAg
ICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3BhdGNo
X2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAg
ICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwg
c2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KS5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19j
b250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb2Nl
c3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0aW9uKSwgV1RGTW92ZShwcm9jZXNzRGF0YSkpOwor
ICAgIH0pLmdldCgpKTsKK30KKworUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nvbm5lY3Rpb24oY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiByZW1vdGVBZGRyZXNzKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1vdGVBZGRyZXNz
Lmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAgIGhvc3ROYW1l
ID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8gaG9zdCA9IGFk
b3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwgU3RyaW5nOjpu
dW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBhdXRvIHVk
cFBhcmFtZXRlcnMgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAoTldf
UEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklH
VVJBVElPTikpOworCisgICAgeworICAgICAgICBhdXRvIHByb3RvY29sU3RhY2sgPSBhZG9wdE5T
KG53X3BhcmFtZXRlcnNfY29weV9kZWZhdWx0X3Byb3RvY29sX3N0YWNrKHVkcFBhcmFtZXRlcnMu
Z2V0KCkpKTsKKyAgICAgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhud19wcm90b2NvbF9zdGFj
a19jb3B5X2ludGVybmV0X3Byb3RvY29sKHByb3RvY29sU3RhY2suZ2V0KCkpKTsKKyAgICAgICAg
bndfaXBfb3B0aW9uc19zZXRfdmVyc2lvbihvcHRpb25zLmdldCgpLCByZW1vdGVBZGRyZXNzLmZh
bWlseSgpID09IEFGX0lORVQgPyBud19pcF92ZXJzaW9uXzQgOiBud19pcF92ZXJzaW9uXzYpOwor
ICAgIH0KKworICAgIGF1dG8gbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0aW9uX2Ny
ZWF0ZShob3N0LmdldCgpLCB1ZHBQYXJhbWV0ZXJzLmdldCgpKSk7CisKKyAgICBzZXR1cE5XQ29u
bmVjdGlvbihud0Nvbm5lY3Rpb24uZ2V0KCksIHJlbW90ZUFkZHJlc3MpOworICAgIHJldHVybiBu
d0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXR1cE5X
Q29ubmVjdGlvbihud19jb25uZWN0aW9uX3QgbndDb25uZWN0aW9uLCBjb25zdCBydGM6OlNvY2tl
dEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUo
bndDb25uZWN0aW9uLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKyAgICBud19jb25uZWN0aW9uX3NldF9z
dGF0ZV9jaGFuZ2VkX2hhbmRsZXIobndDb25uZWN0aW9uLCBtYWtlQmxvY2tQdHIoW2lkZW50aWZp
ZXIgPSBtX2lkZW50aWZpZXIsIHJ0Y1Byb3ZpZGVyID0gbWFrZVJlZihtX3J0Y1Byb3ZpZGVyKSwg
Y29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVf
dCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChlcnJvciwgIWVycm9yKTsKKworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5l
Y3Rpb25fc3RhdGVfd2FpdGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3By
ZXBhcmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9u
X3N0YXRlX3JlYWR5OgorICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAg
ICAgICAgICAvLyBBZGQgbG9nZ2luZy4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHByb2Nlc3NVRFBEYXRhKG53Q29ubmVjdGlv
biwgW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24u
Y29weVJlZigpLCBpcCA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCksIHBvcnQgPSByZW1vdGVBZGRy
ZXNzLnBvcnQoKV0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSBtdXRhYmxlIHsKKyAgICAgICAg
SVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEobWVzc2FnZSwgc2l6ZSk7CisgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBp
ZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRp
bWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0
YXJ0KG53Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpz
ZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0
QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJiBvcHRpb25z
KQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rpb247CisgICAgeworICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9OworICAgICAgICBud0Nvbm5lY3Rp
b24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90ZUFkZHJlc3MsIFt0aGlzLCAmcmVtb3Rl
QWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5XQ29ubmVjdGlvbihyZW1vdGVB
ZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0KKworICAg
IGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2RhdGFfY3JlYXRlKGRhdGEsIHNpemUsIG51
bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9ERUZBVUxUKSk7CisgICAgbndfY29ubmVj
dGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0KCksIE5XX0NPTk5FQ1RJT05fREVGQVVM
VF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIG9wdGlvbnNdKF9O
dWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNrZXQgeyBpZGVudGlmaWVyLCBvcHRpb25z
LnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwgMCk7CisgICAgfSkuZ2V0KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDhjZmM2MDc0ZDA1NjJhYTU4
MmM1YzBkMjM0ODhlZTYzNmIyYzlhOWMuLjRlOWUyZmQxMTZlMzA5OGIyMTgzNDE5ODRhNWI5MDM2
ZmExZDE5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU0LDcgKzU0LDggQEAgTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9yLmNwcAogTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVy
Q29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1t
CitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCitOZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCiAKIEdQVVByb2Nl
c3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQVVNlcnZpY2VFbnRyeVBvaW50Lm1tCiBH
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZTkz
MGI2YjljNzcyOWIxMDVkOWQ2MGM2Y2M4MjQyZWEyZWVmMWIyLi5iZGNhOWZjZGQ5Y2RjMmQ0MTIz
MjQ2Yjg1NTFlNzllNGI1ZmM4Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDYsOCArMzcwNiw4IEBACiAJCTQxMDNGQkEyMjA2
MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZCNTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUlRDTmV0d29yay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNDMURERDJGQjUwMEYwMDZEMCAv
KiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ05ldHdv
cmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExMzkyNTcxMzVGMjAwMkUy
RjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5l
dHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEw
QkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8q
IE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMTQzNjMyMEY2
NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQjcyNjAyMTUyQjAwQjBBMEI2IC8qIFJU
Q0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBSVENEYXRhQ2hhbm5l
bFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrL3dlYnJ0Yy9SVENEYXRh
Q2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1h
bmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg0Niw2ICszODQ2LDggQEAK
IAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExpYldlYlJUQ1NvY2tldENsaWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWJXZWJSVENTb2NrZXRDbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDU5QTFFM0RCQjI0MDBC
MTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEgLyogV2ViUlRDUmVzb2x2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUlRDUmVzb2x2ZXIuY3BwOyBw
YXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNzI2N0I4QzMxMDBB
OTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUw
QTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYzOTc5MDA1NjEwNjAgLyogTGliV2ViUlRD
Q29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMaWJXZWJSVENDb2RlY3NQcm94
eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MDEsOCArODQwMywxMCBAQAog
CQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBOZXR3b3JrUlRDUmVzb2x2ZXIuaCAqLywK
IAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2Eu
Y3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzk4NiAvKiBOZXR3b3JrUlRDUmVzb2x2
ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRD
U29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29y
a1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJG
OEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tICovLAorCQkJCTQxREQ3MkE3MjY3QjhD
MzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCAqLywKKwkJCQk0MURENzJB
NjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tICovLAogCQkJ
CTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQ
cm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4MDAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFu
bmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJNDExMjIzQkQyNjAyNEU4MTAwQjBBMEI2
IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431867</attachid>
            <date>2021-06-21 09:02:45 -0700</date>
            <delta_ts>2021-06-21 11:06:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210621180242.patch</filename>
            <type>text/plain</type>
            <size>55075</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBhZjM5ODMyMTM3ZDIyM2E3ZmJkNzc1M2UzNmFhNmVkZTY1MTZiOTEzLi5hNDNm
NzgwZjRjNzRmYWZkMTRjNzU3NDA5ODRjNGI1OTA3MjMxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0xMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBWaWN0b3IgTS4gSmFxdWV6IEwuIDx2
amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB0byBNOTIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTlhYTA5N2Y1ODljYTlhY2Q0YTc5NTAzNzQ2NTliNjRkY2U1ZDEwZS4uZDVkZDJk
YTE0ZDUzNDcxNDJmZjAyNWM0NzU2NjBjYzgyMjFkMTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MiBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlncmF0
ZSBVRFAgc29ja2V0IGhhbmRsaW5nIGZyb20gV2ViUlRDIHBoeXNpY2FsIHNvY2tldCBzZXJ2ZXIg
dG8gbncgQVBJIGZvciBDb2NvYSBwb3J0cy4KKworICAgICAgICBGb3IgZWFjaCBVRFAgc29ja2V0
IG9wZW5lZCwgd2Ugb3BlbiBhIG53X2xpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gaW5ib3Vu
ZCBjb25uZWN0aW9ucy4KKyAgICAgICAgT24gaW5ib3VuZCBjb25uZWN0aW9uLCB3ZSByZWNlaXZl
IGEgbndfY29ubmVjdGlvbiB0aGF0IHdlIHN0b3JlIGluIGEgYWRkcmVzcyAtPiBjb25uZWN0aW9u
IG1hcC4KKworICAgICAgICBXaGVuZXZlciBzZW5kaW5nIGEgcGFja2V0LCB3ZSBsb29rIGF0IHRo
ZSByZW1vdGUgYWRkcmVzcy4KKyAgICAgICAgSWYgbmVlZGVkLCB3ZSBjcmVhdGUgYSBud19jb25u
ZWN0aW9uIHRvIHRoYXQgcGFydGljdWxhciByZW1vdGUgYWRkcmVzcyBhbmQgc3RvcmUgaXQgaW4g
dGhlIGFkZHJlc3MgLT4gY29ubmVjdGlvbiBtYXAuCisgICAgICAgIFdlIHRoZW4gdXNlIHRoZSBw
cmUtZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCBud19jb25uZWN0aW9uIHRvIHNlbmQgdGhlIHBh
Y2tldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRDUFNvY2tldCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0Q29jb2EuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tLgorICAgICAgICAoV2ViS2l0Ojp0Y3BT
b2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1RDUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLmgu
CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz46Omhhc2gpOgor
ICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZW1wdHlWYWx1ZSk6
CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6Y29uc3RydWN0
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJl
c3M+Ojppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OnVkcFNv
Y2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
cmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnByb2Nlc3NVRFBEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNl
dHVwTldDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hOjpzZW5kVG8pOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDYtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTnVtYmVyIHBhZCBidXR0b24g
aXMgbWlzc2luZyBpdHMgaW1hZ2Ugd2hlbiB0YXBwaW5nIG9uIDxpbnB1dCB0eXBlPXRlbD4gaW4g
d2F0Y2hPUyA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmln
dXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2Zl
OGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9f
Wk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVj
dGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3
QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19J
TlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVv
RW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRl
b0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lO
U18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3
ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRl
ZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQ
ZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3Vy
YXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0
QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
LmlPU3NpbS5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMv
bGlid2VicnRjLmlPU3NpbS5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0
MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndl
YnJ0Yy5pT1NzaW0uZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1
cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRj
MTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9E
ZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlB
dWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2Rl
ckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29k
ZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1
ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMy
M1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBf
X1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29u
bmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25F
TlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVz
czRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5l
eHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
Lm1hYy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4u
MjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJy
dGMubWFjLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAppbmRleCA0MDc3NTEz
NjQzNDcyNWM0MzNlYmFjZmZlNGJjZDhlNDVlZWI4OTc3Li41MzNjMjQxMDU2MmUxZGY2Y2ViZDhk
OGIzZDliNGU2Y2QwNjA2ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKQEAgLTQ2LDcgKzQ2LDgg
QEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk5ldHdvcmtSVENSZXNvbHZlckNv
Y29hLmgiCi0jaW5jbHVkZSAiTmV0d29ya1JUQ1NvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0
d29ya1JUQ1RDUFNvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMzcsNiArMTM4LDE1IEBA
IHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBzdGQ6CiAKIHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVh
dGVVRFBTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBS
VENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50
MTZfdCBtYXhQb3J0KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAgaWYgKGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoaWRlbnRpZmllciwgKnRoaXMsIGFkZHJlc3Mu
dmFsdWUsIG1pblBvcnQsIG1heFBvcnQsIG1faXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpKSB7Cisg
ICAgICAgICAgICBhZGRTb2NrZXQoaWRlbnRpZmllciwgV1RGTW92ZShzb2NrZXQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgQVNTRVJUKG1f
cnRjTmV0d29ya1RocmVhZC5Jc0N1cnJlbnQoKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6
QXN5bmNQYWNrZXRTb2NrZXQ+IHNvY2tldChtX3BhY2tldFNvY2tldEZhY3RvcnktPkNyZWF0ZVVk
cFNvY2tldChhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0KSk7CiAgICAgY3JlYXRlU29j
a2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSwgU29ja2V0OjpUeXBlOjpVRFAsIG1faXBj
Q29ubmVjdGlvbi5jb3B5UmVmKCkpOwpAQCAtMTgyLDcgKzE5Miw3IEBAIHZvaWQgTmV0d29ya1JU
Q1Byb3ZpZGVyOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmCiAgICAgICAgIGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZp
ZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3Mu
dmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFk
ZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRy
ZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENv
cHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
ICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tl
dChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0
aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAq
dGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkp
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29j
a2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
U29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMz
YjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRl
IDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRy
ZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENv
Y29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYp
OwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElk
ZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRU
Q1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9w
dGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3Zp
ZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5Q
dHI8bndfY29ubmVjdGlvbl90PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsg
ZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2Zl
NTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29h
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1
ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4s
IF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0
IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+
IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1Nv
Y2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRl
ciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExT
X0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBy
dGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9u
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhf
dD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBi
dWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5l
Y3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVy
ZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQ
dHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBX
VEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9k
YXRhX3QgY29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBs
ZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsm
XShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2
ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdU
Rk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29u
dGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3Zl
KHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5l
dHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tl
dElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVm
PElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0
aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQ
YWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVt
b3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAg
ICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRv
IGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCks
IFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBv
dGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92
ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0
RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVy
c19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdV
UkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29w
dGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVs
YXkodGNwX29wdGlvbnMsIHRydWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0g
YWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsK
LQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2Nr
ZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIo
bV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1f
Y29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxh
YmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVy
cm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRp
bmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAg
ICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNp
Z25hbENvbm5lY3QoaWRlbnRpZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlk
ZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0g
ICAgICAgICAgICAgICAgcnRjUHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgp
Ci17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nv
bm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVy
LnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29j
b2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBp
cyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0
YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUg
PSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFr
UHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRl
ciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFz
dEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29y
a1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikg
ewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVz
c2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+
bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVu
Z3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVy
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRo
UGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3Ro
V2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBl
bmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQo
KHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAw
eEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6
UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3Nh
Z2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwg
ZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZB
VUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10o
X051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlv
bnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYg
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
ZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2RhMTlkZWMzMzFhOGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0
Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtS
VENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgorCituYW1lc3BhY2Ug
cnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1By
b3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNy
ZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBO
ZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVENQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRDUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5h
bDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRk
cmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKKyAg
ICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBO
ZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOworICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fbndDb25u
ZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4geyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRj
L05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWRkNGY5NzI2MTU0Mjhk
N2Y0Y2E0NjZlN2E2NTc1ZTU5YjFlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCkBAIC0w
LDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRG
T1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxpYldl
YlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJz
aW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxv
Y2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB0Y3BTb2NrZXRRdWV1ZSgpCit7CisgICAgc3Rh
dGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBv
bmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBxdWV1
ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFRDUCBzb2NrZXQgcXVldWUiLCBESVNQ
QVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRp
ZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBt
aWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9UTFNfSU5TRUNVUkUg
YXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E+KGlkZW50aWZpZXIsIHJ0Y1Byb3Zp
ZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1aW50OF90PihWZWN0
b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciA9
IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53Q29ubmVjdGlvbi5n
ZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9uUmVmZXJlbmNlLCAx
LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VCbG9ja1B0cihbbndD
b25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0YSA9IFdURk1vdmUo
cHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3BhdGNoX2RhdGFfdCBj
b250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53
X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAg
ICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3Bh
dGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBwZW5kIHZlcnNpb24u
CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfSkuZ2V0KCkpOworICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0RhdGEoV1RGTW92ZShi
dWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiBjb250ZXh0ICYm
IG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vz
c0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rp
b24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBh
Y2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1v
dGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAg
IGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8g
aG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwg
U3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90
aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zl
cmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRG
YWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJz
X2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VS
QVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0
aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxh
eSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOwor
CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNv
Y2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxl
cihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVu
dGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVs
bGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAh
ZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVj
dGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2Fp
dGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5Ogor
ICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6
U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92
aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsK
KyAgICAgICAgICAgICAgICBydGNQcm92aWRlci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsQ2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHBy
b2Nlc3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1v
dGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9
IG1faXNTVFVOXShhdXRvJiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIFdlYlJU
Qzo6ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUoYnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNz
YWdlVHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVzc2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNz
YWdlLCBhdXRvIHNpemUpIHsKKyAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1l
c3NhZ2UsIHNpemUpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05l
dHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAw
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndD
b25uZWN0aW9uLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNs
b3NlKCkKK3sKKyAgICBpZiAoIW1fbndDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
bndfY29ubmVjdGlvbl9jYW5jZWwobV9ud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fcnRjUHJv
dmlkZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYTo6c2V0T3B0aW9uKGludCwgaW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0
ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9CisKK3N0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0
YV90PiBkYXRhRnJvbVZlY3RvcihWZWN0b3I8dWludDhfdD4mJiB2KQoreworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZl
cigpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShy
YXdQb2ludGVyLCBidWZmZXJTaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBmYXN0RnJlZShyYXdQb2ludGVyKTsKKyAgICB9KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KG1faXNTVFVOKSB7CisgICAgICAgIGF1dG8gbWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNU
VU5PclRVUk5NZXNzYWdlTGVuZ3RocyhkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFtZXNzYWdl
TGVuZ3RocykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoID09IHNpemUpOworICAgICAgICBBU1NFUlQobWVzc2Fn
ZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyA+PSBzaXplKTsKKyAgICAgICAgaWYg
KG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPCBzaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
ICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2Fn
ZUxlbmd0aFdpdGhQYWRkaW5nKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1l
c3NhZ2VMZW5ndGhXaXRoUGFkZGluZyAtIHNpemU7ICsrY3B0cikKKyAgICAgICAgICAgIGJ1ZmZl
ci51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisg
ICAgLy8gUHJlcGVuZCBsZW5ndGguCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBi
dWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplICsgMik7CisgICAgYnVmZmVyLnVuY2hl
Y2tlZEFwcGVuZCgoc2l6ZSA+PiA4KSAmIDB4RkYpOworICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBl
bmQoc2l6ZSAmIDB4RkYpOworICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyhj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gYnVmZmVy
ID0gY3JlYXRlTWVzc2FnZUJ1ZmZlcihkYXRhLCBzaXplKTsKKyAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25u
ZWN0aW9uLmdldCgpLCBkYXRhRnJvbVZlY3RvcihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19D
T05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndfZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRl
bnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAg
IH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDQzM2YzMTlmZGJkYzQ4MWFjMDI4NDQ0ZmI1Mzc1MTJhNDRlZjRkNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5j
bHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1l
c3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3Mp
IHsgcmV0dXJuIGFkZHJlc3MuSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiBhLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGIpIHsgcmV0
dXJuIGEgPT0gYiB8fCAoYS5Jc05pbCgpICYmIGIuSXNOaWwoKSAmJiBhLnNjb3BlX2lkKCkgPT0g
Yi5zY29wZV9pZCgpKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBHZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFk
ZHJlc3M+IHsKKyAgICBzdGF0aWMgcnRjOjpTb2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9
OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNj
b3BlX2lkKCkgPT0gLTE7IH0KK307CisKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRl
VURQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQ
cm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIHVpbnQxNl90IG1pblBvcnQsIHVp
bnQxNl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCisgICAgTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdv
cmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAg
ICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
c2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4gY3JlYXRlTldDb25uZWN0aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYp
OworICAgIHZvaWQgc2V0dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmKTsKKworICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92aWRlciYgbV9ydGNQcm92aWRlcjsK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRB
ZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3Rl
bmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsKKyAgICBIYXNoTWFwPHJ0Yzo6U29j
a2V0QWRkcmVzcywgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4+IG1fbndDb25uZWN0aW9ucyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fbndDb25uZWN0aW9uc0xvY2spOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTcwMDg1YzcwZjdh
MGIxNDBiNmM2NDdlZDEzZDE4MTQ1NzJiMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCkBA
IC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBM
QVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxp
YldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQ
YXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYv
QmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB1ZHBTb2NrZXRRdWV1ZSgpCit7CisgICAg
c3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBx
dWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFVEUCBzb2NrZXQgcXVldWUiLCBE
SVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIHVpbnQxNl90IG1pblBvcnQsIHVpbnQx
Nl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogRGVjaWRlIGhvdyB0byB1c2UgbWluUG9ydC9tYXhQb3J0LgorICAgIHJldHVybiBt
YWtlVW5pcXVlPE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYT4oaWRlbnRpZmllciwgcnRjUHJvdmlk
ZXIsIGFkZHJlc3MsIFdURk1vdmUoY29ubmVjdGlvbikpOworfQorCitOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYShXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCit7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1F
VEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdE5h
bWUgPSBhZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQor
ICAgICAgICAgICAgaG9zdE5hbWUgPSBhZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5nKCk7CisgICAg
ICAgIGF1dG8gbG9jYWxFbmRwb2ludCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3Qo
aG9zdE5hbWUuY19zdHIoKSwgIjAiKSk7CisgICAgICAgIG1fYWRkcmVzcyA9IHsgbndfZW5kcG9p
bnRfZ2V0X2hvc3RuYW1lKGxvY2FsRW5kcG9pbnQuZ2V0KCkpLCBud19lbmRwb2ludF9nZXRfcG9y
dChsb2NhbEVuZHBvaW50LmdldCgpKSB9OworICAgICAgICBud19wYXJhbWV0ZXJzX3NldF9sb2Nh
bF9lbmRwb2ludChwYXJhbWV0ZXJzLmdldCgpLCBsb2NhbEVuZHBvaW50LmdldCgpKTsKKyAgICB9
CisgICAgeworICAgICAgICBhdXRvIHByb3RvY29sU3RhY2sgPSBhZG9wdE5TKG53X3BhcmFtZXRl
cnNfY29weV9kZWZhdWx0X3Byb3RvY29sX3N0YWNrKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICAg
ICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhud19wcm90b2NvbF9zdGFja19jb3B5X2ludGVybmV0
X3Byb3RvY29sKHByb3RvY29sU3RhY2suZ2V0KCkpKTsKKyAgICAgICAgbndfaXBfb3B0aW9uc19z
ZXRfdmVyc2lvbihvcHRpb25zLmdldCgpLCBhZGRyZXNzLmZhbWlseSgpID09IEFGX0lORVQgPyBu
d19pcF92ZXJzaW9uXzQgOiBud19pcF92ZXJzaW9uXzYpOworICAgIH0KKworICAgIG1fbndMaXN0
ZW5lciA9IGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRlKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAg
ICBud19saXN0ZW5lcl9zZXRfcXVldWUobV9ud0xpc3RlbmVyLmdldCgpLCB1ZHBTb2NrZXRRdWV1
ZSgpKTsKKworICAgIC8vIExldCdzIGhvbGQgYSByZWZlcmVuY2UgdW50aWwgYmVpbmcgY2FuY2Vs
ZWQuCisgICAgbndfcmV0YWluKG1fbndMaXN0ZW5lci5nZXQoKSk7CisgICAgbndfbGlzdGVuZXJf
c2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0
cihbbndMaXN0ZW5lciA9IG1fbndMaXN0ZW5lci5nZXQoKSwgYWRkcmVzcyA9IG1fYWRkcmVzcywg
Y29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIHByb3RlY3RlZFJUQ1Byb3ZpZGVy
ID0gbWFrZVJlZihtX3J0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllcl0obndf
bGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAg
ICAgIGVycm5vID0gZXJyb3IgPyBud19lcnJvcl9nZXRfZXJyb3JfY29kZShlcnJvcikgOiAwOwor
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVf
aW52YWxpZDoKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV93YWl0aW5nOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfcmVhZHk6CisgICAg
ICAgICAgICBhZGRyZXNzLlNldFBvcnQobndfbGlzdGVuZXJfZ2V0X3BvcnQobndMaXN0ZW5lcikp
OworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29y
azo6U2lnbmFsQWRkcmVzc1JlYWR5KGlkZW50aWZpZXIsIFJUQ05ldHdvcms6OlNvY2tldEFkZHJl
c3MoYWRkcmVzcykpLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG53X2xp
c3RlbmVyX3N0YXRlX2ZhaWxlZDoKKyAgICAgICAgICAgIHByb3RlY3RlZFJUQ1Byb3ZpZGVyLT5j
YWxsT25SVENOZXR3b3JrVGhyZWFkKFtwcm90ZWN0ZWRSVENQcm92aWRlciwgaWRlbnRpZmllcl0g
eworICAgICAgICAgICAgICAgIHByb3RlY3RlZFJUQ1Byb3ZpZGVyLT50YWtlU29ja2V0KGlkZW50
aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1l
c3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxDbG9zZShpZGVudGlmaWVyLCAtMSksIDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfY2Fu
Y2VsbGVkOgorICAgICAgICAgICAgbndfcmVsZWFzZShud0xpc3RlbmVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSkuZ2V0KCkpOworCisgICAgbndfbGlzdGVuZXJfc2V0
X25ld19jb25uZWN0aW9uX2hhbmRsZXIobV9ud0xpc3RlbmVyLmdldCgpLCBtYWtlQmxvY2tQdHIo
W3RoaXNdKG53X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKSB7CisgICAgICAgIGF1dG8gZW5kcG9p
bnQgPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY29weV9lbmRwb2ludChjb25uZWN0aW9uKSk7Cisg
ICAgICAgIHJ0Yzo6U29ja2V0QWRkcmVzcyByZW1vdGVBZGRyZXNzIHsgbndfZW5kcG9pbnRfZ2V0
X2hvc3RuYW1lKGVuZHBvaW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQoZW5kcG9pbnQu
Z2V0KCkpIH07CisKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbndD
b25uZWN0aW9uc0xvY2sgfTsKKyAgICAgICAgICAgIG1fbndDb25uZWN0aW9ucy5zZXQocmVtb3Rl
QWRkcmVzcywgY29ubmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgc2V0dXBOV0Nvbm5lY3Rp
b24oY29ubmVjdGlvbiwgcmVtb3RlQWRkcmVzcyk7CisgICAgfSkuZ2V0KCkpOworCisgICAgbndf
bGlzdGVuZXJfc3RhcnQobV9ud0xpc3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2E6OmNsb3NlKCkKK3sKKyAgICBud19saXN0ZW5lcl9jYW5jZWwobV9ud0xp
c3RlbmVyLmdldCgpKTsKKyAgICBud19saXN0ZW5lcl9zZXRfbmV3X2Nvbm5lY3Rpb25faGFuZGxl
cihtX253TGlzdGVuZXIuZ2V0KCksIG51bGxwdHIpOworICAgIG1fbndMaXN0ZW5lciA9IG51bGxw
dHI7CisKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX253Q29ubmVjdGlvbnNMb2Nr
IH07CisgICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fbndDb25uZWN0aW9ucy52YWx1
ZXMoKSkKKyAgICAgICAgICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKGNvbm5lY3Rpb24uZ2V0KCkp
OworICAgICAgICBtX253Q29ubmVjdGlvbnMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBtX3J0Y1By
b3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBGSVhNRTogVmFsaWRh
dGUgdGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1VE
UERhdGEoUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9u
PHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgcHJvY2Vzc0RhdGEpCit7CisgICAgYXV0
byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7CisgICAgbndfY29u
bmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9IFdURk1v
dmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRhKV0oZGlz
cGF0Y2hfZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wg
aXNDb21wbGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250
ZW50KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9j
a1B0cihbJl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGEoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0pLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAm
JiBjb250ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcHJvY2Vzc1VEUERhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3Zl
KHByb2Nlc3NEYXRhKSk7CisgICAgfSkuZ2V0KCkpOworfQorCitSZXRhaW5QdHI8bndfY29ubmVj
dGlvbl90PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZU5XQ29ubmVjdGlvbihjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgYXV0byBob3N0TmFt
ZSA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBpZiAoaG9zdE5hbWUuZW1wdHkoKSkK
KyAgICAgICAgaG9zdE5hbWUgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5nKCk7Cisg
ICAgYXV0byBob3N0ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9zdChob3N0TmFtZS5j
X3N0cigpLCBTdHJpbmc6Om51bWJlcihyZW1vdGVBZGRyZXNzLnBvcnQoKSkudXRmOCgpLmRhdGEo
KSkpOworICAgIGF1dG8gdWRwUGFyYW1ldGVycyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jcmVh
dGVfc2VjdXJlX3VkcChOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIE5XX1BBUkFNRVRF
UlNfREVGQVVMVF9DT05GSUdVUkFUSU9OKSk7CisKKyAgICB7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jb3B5X2RlZmF1bHRfcHJvdG9jb2xfc3Rh
Y2sodWRwUGFyYW1ldGVycy5nZXQoKSkpOworICAgICAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5T
KG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50ZXJuZXRfcHJvdG9jb2wocHJvdG9jb2xTdGFjay5n
ZXQoKSkpOworICAgICAgICBud19pcF9vcHRpb25zX3NldF92ZXJzaW9uKG9wdGlvbnMuZ2V0KCks
IHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0gQUZfSU5FVCA/IG53X2lwX3ZlcnNpb25fNCA6IG53
X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisgICAgYXV0byBud0Nvbm5lY3Rpb24gPSBhZG9wdE5T
KG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHVkcFBhcmFtZXRlcnMuZ2V0KCkpKTsK
KworICAgIHNldHVwTldDb25uZWN0aW9uKG53Q29ubmVjdGlvbi5nZXQoKSwgcmVtb3RlQWRkcmVz
cyk7CisgICAgcmV0dXJuIG53Q29ubmVjdGlvbjsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6OnNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rpb24s
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcykKK3sKKyAgICBud19jb25u
ZWN0aW9uX3NldF9xdWV1ZShud0Nvbm5lY3Rpb24sIHVkcFNvY2tldFF1ZXVlKCkpOworICAgIG53
X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihud0Nvbm5lY3Rpb24sIG1ha2VC
bG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVm
KG1fcnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndf
Y29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFibGUgbndfZXJyb3JfdCBlcnJvcikgewor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOworCisgICAgICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2ludmFsaWQ6CisgICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV93YWl0aW5nOgorICAgICAgICBjYXNlIG53X2Nv
bm5lY3Rpb25fc3RhdGVfcHJlcGFyaW5nOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfcmVhZHk6CisgICAgICAgICAgICBjb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxDb25uZWN0KGlkZW50aWZpZXIp
LCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0
YXRlX2ZhaWxlZDoKKyAgICAgICAgICAgIC8vIEFkZCBsb2dnaW5nLgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfY2FuY2VsbGVkOgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSkuZ2V0KCkpOworCisgICAgcHJvY2Vzc1VE
UERhdGEobndDb25uZWN0aW9uLCBbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwg
cG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpXShhdXRvKiBtZXNzYWdlLCBhdXRvIHNpemUpIG11
dGFibGUgeworICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsK
KyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2ln
bmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05ldHdvcms6OklQQWRkcmVzcyhp
cCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAwKTsKKyAgICB9KTsKKworICAg
IG53X2Nvbm5lY3Rpb25fc3RhcnQobndDb25uZWN0aW9uKTsKK30KKwordm9pZCBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2E6OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBjb25zdCBydGM6OlBhY2tl
dE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbjsK
KyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX253Q29ubmVjdGlvbnNMb2NrIH07Cisg
ICAgICAgIG53Q29ubmVjdGlvbiA9IG1fbndDb25uZWN0aW9ucy5lbnN1cmUocmVtb3RlQWRkcmVz
cywgW3RoaXMsICZyZW1vdGVBZGRyZXNzXSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTldD
b25uZWN0aW9uKHJlbW90ZUFkZHJlc3MpOworICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0
KCk7CisgICAgfQorCisgICAgYXV0byB2YWx1ZSA9IGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVh
dGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQp
KTsKKyAgICBud19jb25uZWN0aW9uX3NlbmQobndDb25uZWN0aW9uLCB2YWx1ZS5nZXQoKSwgTldf
Q09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtp
ZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlS
ZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAgICAgY29ubmVjdGlv
bi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlk
ZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKKyAg
ICB9KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXgg
OGNmYzYwNzRkMDU2MmFhNTgyYzVjMGQyMzQ4OGVlNjM2YjJjOWE5Yy4uNGU5ZTJmZDExNmUzMDk4
YjIxODM0MTk4NGE1YjkwMzZmYTFkMTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNTQs
NyArNTQsOCBAQCBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ01vbml0b3IuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAogTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9O
ZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5jcHAKLU5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDU29ja2V0Q29jb2EubW0KK05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29j
a2V0Q29jb2EubW0KK05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EubW0KIAogR1BVUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvR1BVU2Vydmlj
ZUVudHJ5UG9pbnQubW0KIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGRlOTMwYjZiOWM3NzI5YjEwNWQ5ZDYwYzZjYzgyNDJlYTJlZWYxYjIuLmJk
Y2E5ZmNkZDljZGMyZDQxMjMyNDZiODU1MWU3OWU0YjVmYzhjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzcwNiw4ICszNzA2LDgg
QEAKIAkJNDEwM0ZCQTIyMDYxQkRCODAwQzJFQUY4IC8qIE5ldHdvcmtMb2FkQ2hlY2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrTG9hZENoZWNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA0ODJDQjFEREQyRkI1MDBGMDA2
RDAgLyogUlRDTmV0d29yay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSVENOZXR3b3JrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0Mx
REREMkZCNTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUlRDTmV0d29yay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTBC
QTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1NvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tl
dENvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29y
a1JUQ1RDUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBCQTEzQTI1
NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTExNDM2MzIwRjY3N0IxMDAyNkY5MTIgLyogSW5qZWN0VXNlclNjcmlwdEltbWVkaWF0
ZWx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdFVzZXJTY3JpcHRJ
bW1lZGlhdGVseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTEyMjNCNzI2MDIx
NTJCMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyLm1lc3NhZ2VzLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdv
cmsvd2VicnRjL1JUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQkIyNjAyNEU4MDAwQjBBMEI2IC8qIFJUQ0Rh
dGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0RhdGFDaGFu
bmVsUmVtb3RlTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
ODQ2LDYgKzM4NDYsOCBAQAogCQk0MURDNDU5OTFFM0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRD
U29ja2V0Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExp
YldlYlJUQ1NvY2tldENsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
REM0NTlBMUUzREJCMjQwMEIxMUY1MSAvKiBMaWJXZWJSVENTb2NrZXRDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDU29ja2V0Q2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREM0NUEwMUUzREM1M0MwMEIxMUY1MSAvKiBXZWJS
VENSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJS
VENSZXNvbHZlci5jcHA7IHBhdGggPSBOZXR3b3JrL3dlYnJ0Yy9XZWJSVENSZXNvbHZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxREQ3MkE2MjY3QjhDMzAwMEE5MEM3MSAv
KiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQx
REQ3MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxRTBBN0M2MjNCNjM5NzgwMDU2MTA2MCAvKiBMaWJXZWJSVENDb2RlY3NQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMaWJXZWJSVENDb2RlY3NQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDNzIzQjYzOTc5MDA1NjEwNjAgLyogTGliV2ViUlRD
Q29kZWNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTBBN0M4MjNCNjM5NzkwMDU2
MTA2MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExp
YldlYlJUQ0NvZGVjc1Byb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODQw
MSw4ICs4NDAzLDEwIEBACiAJCQkJNDExMkI1NDgxRjlGRDNBQzAwRTY3ODc1IC8qIE5ldHdvcmtS
VENSZXNvbHZlci5oICovLAogCQkJCTQxMTJCNTQ3MUY5RkQzQUIwMEU2Nzk4NiAvKiBOZXR3b3Jr
UlRDUmVzb2x2ZXJDb2NvYS5jcHAgKi8sCiAJCQkJNDExMkI1NDgxRjlGRDNBQzAwRTY3OTg2IC8q
IE5ldHdvcmtSVENSZXNvbHZlckNvY29hLmggKi8sCi0JCQkJNDEwQkExM0EyNTcxMzVGMjAwMkUy
RjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5oICovLAotCQkJCTQxMEJBMTM5MjU3MTM1RjIw
MDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gKi8sCisJCQkJNDEwQkExM0EyNTcx
MzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovLAorCQkJCTQxMEJB
MTM5MjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0gKi8sCisJ
CQkJNDFERDcyQTcyNjdCOEMzMTAwQTkwQzcxIC8qIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5o
ICovLAorCQkJCTQxREQ3MkE2MjY3QjhDMzAwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EubW0gKi8sCiAJCQkJNDExMjIzQkMyNjAyNEU4MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFu
bmVsUmVtb3RlTWFuYWdlclByb3h5LmNwcCAqLywKIAkJCQk0MTEyMjNCQjI2MDI0RTgwMDBCMEEw
QjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuaCAqLywKIAkJCQk0MTEyMjNC
RDI2MDI0RTgxMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4gKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431880</attachid>
            <date>2021-06-21 11:06:12 -0700</date>
            <delta_ts>2021-06-21 11:43:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210621200610.patch</filename>
            <type>text/plain</type>
            <size>55552</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBhZjM5ODMyMTM3ZDIyM2E3ZmJkNzc1M2UzNmFhNmVkZTY1MTZiOTEzLi5hNDNm
NzgwZjRjNzRmYWZkMTRjNzU3NDA5ODRjNGI1OTA3MjMxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0xMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBWaWN0b3IgTS4gSmFxdWV6IEwuIDx2
amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB0byBNOTIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTlhYTA5N2Y1ODljYTlhY2Q0YTc5NTAzNzQ2NTliNjRkY2U1ZDEwZS4uZDVkZDJk
YTE0ZDUzNDcxNDJmZjAyNWM0NzU2NjBjYzgyMjFkMTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MiBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlncmF0
ZSBVRFAgc29ja2V0IGhhbmRsaW5nIGZyb20gV2ViUlRDIHBoeXNpY2FsIHNvY2tldCBzZXJ2ZXIg
dG8gbncgQVBJIGZvciBDb2NvYSBwb3J0cy4KKworICAgICAgICBGb3IgZWFjaCBVRFAgc29ja2V0
IG9wZW5lZCwgd2Ugb3BlbiBhIG53X2xpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gaW5ib3Vu
ZCBjb25uZWN0aW9ucy4KKyAgICAgICAgT24gaW5ib3VuZCBjb25uZWN0aW9uLCB3ZSByZWNlaXZl
IGEgbndfY29ubmVjdGlvbiB0aGF0IHdlIHN0b3JlIGluIGEgYWRkcmVzcyAtPiBjb25uZWN0aW9u
IG1hcC4KKworICAgICAgICBXaGVuZXZlciBzZW5kaW5nIGEgcGFja2V0LCB3ZSBsb29rIGF0IHRo
ZSByZW1vdGUgYWRkcmVzcy4KKyAgICAgICAgSWYgbmVlZGVkLCB3ZSBjcmVhdGUgYSBud19jb25u
ZWN0aW9uIHRvIHRoYXQgcGFydGljdWxhciByZW1vdGUgYWRkcmVzcyBhbmQgc3RvcmUgaXQgaW4g
dGhlIGFkZHJlc3MgLT4gY29ubmVjdGlvbiBtYXAuCisgICAgICAgIFdlIHRoZW4gdXNlIHRoZSBw
cmUtZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCBud19jb25uZWN0aW9uIHRvIHNlbmQgdGhlIHBh
Y2tldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRDUFNvY2tldCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0Q29jb2EuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tLgorICAgICAgICAoV2ViS2l0Ojp0Y3BT
b2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1RDUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLmgu
CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz46Omhhc2gpOgor
ICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZW1wdHlWYWx1ZSk6
CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6Y29uc3RydWN0
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJl
c3M+Ojppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OnVkcFNv
Y2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
cmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnByb2Nlc3NVRFBEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNl
dHVwTldDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hOjpzZW5kVG8pOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDYtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTnVtYmVyIHBhZCBidXR0b24g
aXMgbWlzc2luZyBpdHMgaW1hZ2Ugd2hlbiB0YXBwaW5nIG9uIDxpbnB1dCB0eXBlPXRlbD4gaW4g
d2F0Y2hPUyA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmln
dXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2Zl
OGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9f
Wk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVj
dGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3
QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19J
TlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVv
RW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRl
b0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lO
U18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3
ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRl
ZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQ
ZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3Vy
YXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0
QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
LmlPU3NpbS5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMv
bGlid2VicnRjLmlPU3NpbS5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0
MjgwZDI5NDI2My4uMjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndl
YnJ0Yy5pT1NzaW0uZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1
cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRj
MTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9E
ZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlB
dWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2Rl
ckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29k
ZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1
ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMy
M1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBf
X1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29u
bmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25F
TlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVz
czRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5l
eHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
Lm1hYy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4u
MjRjZWZhNDljMDA2N2NiMGM3OGVjOGI2OTlhZDYzY2ZlOGU3Mjc4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJy
dGMubWFjLmV4cApAQCAtMzIxLDMgKzMyMSw1IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAppbmRleCA0MDc3NTEz
NjQzNDcyNWM0MzNlYmFjZmZlNGJjZDhlNDVlZWI4OTc3Li41MzNjMjQxMDU2MmUxZGY2Y2ViZDhk
OGIzZDliNGU2Y2QwNjA2ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKQEAgLTQ2LDcgKzQ2LDgg
QEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk5ldHdvcmtSVENSZXNvbHZlckNv
Y29hLmgiCi0jaW5jbHVkZSAiTmV0d29ya1JUQ1NvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0
d29ya1JUQ1RDUFNvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMzcsNiArMTM4LDE1IEBA
IHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBzdGQ6CiAKIHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVh
dGVVRFBTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBS
VENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50
MTZfdCBtYXhQb3J0KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAgaWYgKGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoaWRlbnRpZmllciwgKnRoaXMsIGFkZHJlc3Mu
dmFsdWUsIG1pblBvcnQsIG1heFBvcnQsIG1faXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpKSB7Cisg
ICAgICAgICAgICBhZGRTb2NrZXQoaWRlbnRpZmllciwgV1RGTW92ZShzb2NrZXQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgQVNTRVJUKG1f
cnRjTmV0d29ya1RocmVhZC5Jc0N1cnJlbnQoKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6
QXN5bmNQYWNrZXRTb2NrZXQ+IHNvY2tldChtX3BhY2tldFNvY2tldEZhY3RvcnktPkNyZWF0ZVVk
cFNvY2tldChhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0KSk7CiAgICAgY3JlYXRlU29j
a2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSwgU29ja2V0OjpUeXBlOjpVRFAsIG1faXBj
Q29ubmVjdGlvbi5jb3B5UmVmKCkpOwpAQCAtMTgyLDcgKzE5Miw3IEBAIHZvaWQgTmV0d29ya1JU
Q1Byb3ZpZGVyOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmCiAgICAgICAgIGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZp
ZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3Mu
dmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFk
ZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRy
ZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENv
cHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
ICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tl
dChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0
aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAq
dGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkp
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29j
a2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
U29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMz
YjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRl
IDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRy
ZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENv
Y29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYp
OwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElk
ZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRU
Q1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9w
dGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3Zp
ZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5Q
dHI8bndfY29ubmVjdGlvbl90PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsg
ZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2Zl
NTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29h
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1
ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4s
IF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0
IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+
IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1Nv
Y2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRl
ciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExT
X0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2Nr
ZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBy
dGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9u
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhf
dD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBi
dWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5l
Y3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVy
ZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQ
dHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBX
VEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9k
YXRhX3QgY29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBs
ZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsm
XShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2
ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdU
Rk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29u
dGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3Zl
KHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5l
dHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tl
dElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVm
PElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0
aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQ
YWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVt
b3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAg
ICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRv
IGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCks
IFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBv
dGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92
ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0
RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVy
c19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdV
UkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29w
dGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVs
YXkodGNwX29wdGlvbnMsIHRydWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0g
YWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsK
LQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2Nr
ZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIo
bV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1f
Y29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxh
YmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVy
cm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRp
bmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAg
ICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNp
Z25hbENvbm5lY3QoaWRlbnRpZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlk
ZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0g
ICAgICAgICAgICAgICAgcnRjUHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgp
Ci17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nv
bm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVy
LnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29j
b2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBp
cyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0
YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUg
PSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFr
UHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRl
ciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFz
dEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29y
a1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikg
ewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVz
c2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+
bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVu
Z3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVy
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRo
UGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3Ro
V2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBl
bmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQo
KHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAw
eEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6
UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3Nh
Z2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwg
ZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZB
VUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10o
X051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlv
bnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYg
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
ZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2RhMTlkZWMzMzFhOGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0
Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtS
VENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgorCituYW1lc3BhY2Ug
cnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1By
b3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNy
ZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBO
ZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9u
cywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVENQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRDUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5h
bDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAg
IHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRk
cmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKKyAg
ICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBO
ZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOworICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fbndDb25u
ZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4geyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRj
L05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWRkNGY5NzI2MTU0Mjhk
N2Y0Y2E0NjZlN2E2NTc1ZTU5YjFlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCkBAIC0w
LDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRG
T1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxpYldl
YlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJz
aW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxv
Y2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB0Y3BTb2NrZXRRdWV1ZSgpCit7CisgICAgc3Rh
dGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBv
bmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBxdWV1
ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFRDUCBzb2NrZXQgcXVldWUiLCBESVNQ
QVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRp
ZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBt
aWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9UTFNfSU5TRUNVUkUg
YXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6
Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E+KGlkZW50aWZpZXIsIHJ0Y1Byb3Zp
ZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1aW50OF90PihWZWN0
b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciA9
IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53Q29ubmVjdGlvbi5n
ZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9uUmVmZXJlbmNlLCAx
LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VCbG9ja1B0cihbbndD
b25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0YSA9IFdURk1vdmUo
cHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3BhdGNoX2RhdGFfdCBj
b250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53
X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAg
ICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3Bh
dGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBwZW5kIHZlcnNpb24u
CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfSkuZ2V0KCkpOworICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0RhdGEoV1RGTW92ZShi
dWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiBjb250ZXh0ICYm
IG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vz
c0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rp
b24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBh
Y2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1v
dGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAg
IGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8g
aG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwg
U3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90
aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zl
cmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRG
YWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJz
X2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VS
QVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0
aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxh
eSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOwor
CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNv
Y2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxl
cihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVu
dGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVs
bGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAh
ZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVj
dGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2Fp
dGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5Ogor
ICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6
U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92
aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsK
KyAgICAgICAgICAgICAgICBydGNQcm92aWRlci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsQ2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHBy
b2Nlc3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1v
dGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9
IG1faXNTVFVOXShhdXRvJiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIFdlYlJU
Qzo6ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUoYnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNz
YWdlVHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVzc2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNz
YWdlLCBhdXRvIHNpemUpIHsKKyAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1l
c3NhZ2UsIHNpemUpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05l
dHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAw
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndD
b25uZWN0aW9uLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNs
b3NlKCkKK3sKKyAgICBpZiAoIW1fbndDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
bndfY29ubmVjdGlvbl9jYW5jZWwobV9ud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fcnRjUHJv
dmlkZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYTo6c2V0T3B0aW9uKGludCwgaW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0
ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9CisKK3N0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0
YV90PiBkYXRhRnJvbVZlY3RvcihWZWN0b3I8dWludDhfdD4mJiB2KQoreworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZl
cigpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShy
YXdQb2ludGVyLCBidWZmZXJTaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBmYXN0RnJlZShyYXdQb2ludGVyKTsKKyAgICB9KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KG1faXNTVFVOKSB7CisgICAgICAgIGF1dG8gbWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNU
VU5PclRVUk5NZXNzYWdlTGVuZ3RocyhkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFtZXNzYWdl
TGVuZ3RocykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoID09IHNpemUpOworICAgICAgICBBU1NFUlQobWVzc2Fn
ZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyA+PSBzaXplKTsKKyAgICAgICAgaWYg
KG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPCBzaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
ICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2Fn
ZUxlbmd0aFdpdGhQYWRkaW5nKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1l
c3NhZ2VMZW5ndGhXaXRoUGFkZGluZyAtIHNpemU7ICsrY3B0cikKKyAgICAgICAgICAgIGJ1ZmZl
ci51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisg
ICAgLy8gUHJlcGVuZCBsZW5ndGguCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBi
dWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplICsgMik7CisgICAgYnVmZmVyLnVuY2hl
Y2tlZEFwcGVuZCgoc2l6ZSA+PiA4KSAmIDB4RkYpOworICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBl
bmQoc2l6ZSAmIDB4RkYpOworICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyhj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gYnVmZmVy
ID0gY3JlYXRlTWVzc2FnZUJ1ZmZlcihkYXRhLCBzaXplKTsKKyAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25u
ZWN0aW9uLmdldCgpLCBkYXRhRnJvbVZlY3RvcihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19D
T05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndfZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRl
bnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAg
IH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDQzM2YzMTlmZGJkYzQ4MWFjMDI4NDQ0ZmI1Mzc1MTJhNDRlZjRkNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5j
bHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1l
c3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3Mp
IHsgcmV0dXJuIGFkZHJlc3MuSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiBhLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGIpIHsgcmV0
dXJuIGEgPT0gYiB8fCAoYS5Jc05pbCgpICYmIGIuSXNOaWwoKSAmJiBhLnNjb3BlX2lkKCkgPT0g
Yi5zY29wZV9pZCgpKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBHZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFk
ZHJlc3M+IHsKKyAgICBzdGF0aWMgcnRjOjpTb2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9
OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNj
b3BlX2lkKCkgPT0gLTE7IH0KK307CisKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRl
VURQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQ
cm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIHVpbnQxNl90IG1pblBvcnQsIHVp
bnQxNl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCisgICAgTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdv
cmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAg
ICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQg
c2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisgICAgUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4gY3JlYXRlTldDb25uZWN0aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYp
OworICAgIHZvaWQgc2V0dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmKTsKKworICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92aWRlciYgbV9ydGNQcm92aWRlcjsK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRB
ZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3Rl
bmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsKKyAgICBIYXNoTWFwPHJ0Yzo6U29j
a2V0QWRkcmVzcywgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4+IG1fbndDb25uZWN0aW9ucyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fbndDb25uZWN0aW9uc0xvY2spOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTc0YmIyZWZjN2Q1
MDUwMGVkZTRkOWMxYmI0ODYxZTA5NjU2ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCkBA
IC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBM
QVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxp
YldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQ
YXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYv
QmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB1ZHBTb2NrZXRRdWV1ZSgpCit7CisgICAg
c3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBx
dWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFVEUCBzb2NrZXQgcXVldWUiLCBE
SVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIHVpbnQxNl90IG1pblBvcnQsIHVpbnQx
Nl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogRGVjaWRlIGhvdyB0byB1c2UgbWluUG9ydC9tYXhQb3J0LgorICAgIHJldHVybiBt
YWtlVW5pcXVlPE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYT4oaWRlbnRpZmllciwgcnRjUHJvdmlk
ZXIsIGFkZHJlc3MsIFdURk1vdmUoY29ubmVjdGlvbikpOworfQorCitOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYShXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCit7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1F
VEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdE5h
bWUgPSBhZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQor
ICAgICAgICAgICAgaG9zdE5hbWUgPSBhZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5nKCk7CisgICAg
ICAgIGF1dG8gbG9jYWxFbmRwb2ludCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3Qo
aG9zdE5hbWUuY19zdHIoKSwgIjAiKSk7CisgICAgICAgIG1fYWRkcmVzcyA9IHsgbndfZW5kcG9p
bnRfZ2V0X2hvc3RuYW1lKGxvY2FsRW5kcG9pbnQuZ2V0KCkpLCBud19lbmRwb2ludF9nZXRfcG9y
dChsb2NhbEVuZHBvaW50LmdldCgpKSB9OworICAgICAgICBud19wYXJhbWV0ZXJzX3NldF9sb2Nh
bF9lbmRwb2ludChwYXJhbWV0ZXJzLmdldCgpLCBsb2NhbEVuZHBvaW50LmdldCgpKTsKKyAgICB9
CisgICAgeworICAgICAgICBhdXRvIHByb3RvY29sU3RhY2sgPSBhZG9wdE5TKG53X3BhcmFtZXRl
cnNfY29weV9kZWZhdWx0X3Byb3RvY29sX3N0YWNrKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICAg
ICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhud19wcm90b2NvbF9zdGFja19jb3B5X2ludGVybmV0
X3Byb3RvY29sKHByb3RvY29sU3RhY2suZ2V0KCkpKTsKKyAgICAgICAgbndfaXBfb3B0aW9uc19z
ZXRfdmVyc2lvbihvcHRpb25zLmdldCgpLCBhZGRyZXNzLmZhbWlseSgpID09IEFGX0lORVQgPyBu
d19pcF92ZXJzaW9uXzQgOiBud19pcF92ZXJzaW9uXzYpOworICAgIH0KKworICAgIG1fbndMaXN0
ZW5lciA9IGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRlKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAg
ICBud19saXN0ZW5lcl9zZXRfcXVldWUobV9ud0xpc3RlbmVyLmdldCgpLCB1ZHBTb2NrZXRRdWV1
ZSgpKTsKKworICAgIG53X2xpc3RlbmVyX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0xp
c3RlbmVyLmdldCgpLCBtYWtlQmxvY2tQdHIoW253TGlzdGVuZXIgPSBtX253TGlzdGVuZXIuZ2V0
KCksIGFkZHJlc3MgPSBtX2FkZHJlc3MsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpLCBwcm90ZWN0ZWRSVENQcm92aWRlciA9IG1ha2VSZWYobV9ydGNQcm92aWRlciksIGlkZW50
aWZpZXIgPSBtX2lkZW50aWZpZXJdKG53X2xpc3RlbmVyX3N0YXRlX3Qgc3RhdGUsIG53X2Vycm9y
X3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBlcnJubyA9IGVycm9yID8gbndfZXJyb3JfZ2V0
X2Vycm9yX2NvZGUoZXJyb3IpIDogMDsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAg
ICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX2ludmFsaWQ6CisgICAgICAgIGNhc2UgbndfbGlzdGVu
ZXJfc3RhdGVfd2FpdGluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG53X2xp
c3RlbmVyX3N0YXRlX3JlYWR5OgorICAgICAgICAgICAgYWRkcmVzcy5TZXRQb3J0KG53X2xpc3Rl
bmVyX2dldF9wb3J0KG53TGlzdGVuZXIpKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbEFkZHJlc3NSZWFkeShpZGVudGlmaWVy
LCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzKGFkZHJlc3MpKSwgMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAg
ICBwcm90ZWN0ZWRSVENQcm92aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcHJvdGVjdGVk
UlRDUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRSVENQ
cm92aWRlci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFs
Q2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIG53X2xpc3RlbmVyX3N0YXRlX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7
CisKKyAgICBud19saXN0ZW5lcl9zZXRfbmV3X2Nvbm5lY3Rpb25faGFuZGxlcihtX253TGlzdGVu
ZXIuZ2V0KCksIG1ha2VCbG9ja1B0cihbdGhpc10obndfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24p
IHsKKyAgICAgICAgYXV0byBlbmRwb2ludCA9IGFkb3B0TlMobndfY29ubmVjdGlvbl9jb3B5X2Vu
ZHBvaW50KGNvbm5lY3Rpb24pKTsKKyAgICAgICAgcnRjOjpTb2NrZXRBZGRyZXNzIHJlbW90ZUFk
ZHJlc3MgeyBud19lbmRwb2ludF9nZXRfaG9zdG5hbWUoZW5kcG9pbnQuZ2V0KCkpLCBud19lbmRw
b2ludF9nZXRfcG9ydChlbmRwb2ludC5nZXQoKSkgfTsKKworICAgICAgICB7CisgICAgICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9OworICAgICAgICAgICAgbV9u
d0Nvbm5lY3Rpb25zLnNldChyZW1vdGVBZGRyZXNzLCBjb25uZWN0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICBzZXR1cE5XQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZW1vdGVBZGRyZXNzKTsKKyAg
ICB9KS5nZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9zdGFydChtX253TGlzdGVuZXIuZ2V0KCkp
OworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y2xvc2UoKQoreworICAgIG53
X2xpc3RlbmVyX3NldF9uZXdfY29ubmVjdGlvbl9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQoKSwg
bnVsbHB0cik7CisgICAgbndfbGlzdGVuZXJfc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX253
TGlzdGVuZXIuZ2V0KCksIG51bGxwdHIpOworICAgIG53X2xpc3RlbmVyX2NhbmNlbChtX253TGlz
dGVuZXIuZ2V0KCkpOworICAgIG1fbndMaXN0ZW5lciA9IG51bGxwdHI7CisKKyAgICB7CisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX253Q29ubmVjdGlvbnNMb2NrIH07CisgICAgICAgIGZvciAo
YXV0byYgbndDb25uZWN0aW9uIDogbV9ud0Nvbm5lY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAg
ICAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobndDb25uZWN0aW9u
LmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG53Q29u
bmVjdGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9ud0Nvbm5lY3Rpb25zLmNsZWFy
KCk7CisgICAgfQorCisgICAgbV9ydGNQcm92aWRlci50YWtlU29ja2V0KG1faWRlbnRpZmllcik7
Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24oaW50LCBpbnQp
Cit7CisgICAgLy8gRklYTUU6IFZhbGlkYXRlIHRoaXMgaXMgbm90IG5lZWRlZC4KK30KKworc3Rh
dGljIGlubGluZSB2b2lkIHByb2Nlc3NVRFBEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+
JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYm
IHByb2Nlc3NEYXRhKQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0gbndDb25u
ZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZl
cmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFrZUJsb2Nr
UHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NEYXRhID0g
V1RGTW92ZShwcm9jZXNzRGF0YSldKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50
X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11
dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0
YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICAgICAgICAgIHByb2Nl
c3NEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRf
Z2V0X2lzX2ZpbmFsKGNvbnRleHQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
ZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1v
dmUobndDb25uZWN0aW9uKSwgV1RGTW92ZShwcm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsK
K30KKworUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29h
OjpjcmVhdGVOV0Nvbm5lY3Rpb24oY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRy
ZXNzKQoreworICAgIGF1dG8gdWRwUGFyYW1ldGVycyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19j
cmVhdGVfc2VjdXJlX3VkcChOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIE5XX1BBUkFN
RVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OKSk7CisgICAgeworICAgICAgICBhdXRvIGhvc3RO
YW1lID0gbV9hZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGlmIChob3N0TmFtZS5lbXB0eSgp
KQorICAgICAgICAgICAgaG9zdE5hbWUgPSBtX2FkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsK
KyAgICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVf
aG9zdChob3N0TmFtZS5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2FkZHJlc3MucG9ydCgpKS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xvY2FsX2VuZHBvaW50
KHVkcFBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAgIH0KKyAgICB7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jb3B5
X2RlZmF1bHRfcHJvdG9jb2xfc3RhY2sodWRwUGFyYW1ldGVycy5nZXQoKSkpOworICAgICAgICBh
dXRvIG9wdGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50ZXJuZXRfcHJv
dG9jb2wocHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRpb25zX3NldF92
ZXJzaW9uKG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0gQUZfSU5FVCA/
IG53X2lwX3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisgICAgYXV0byBo
b3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBpZiAoaG9zdE5hbWUuZW1w
dHkoKSkKKyAgICAgICAgaG9zdE5hbWUgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5n
KCk7CisgICAgYXV0byBob3N0ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9zdChob3N0
TmFtZS5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihyZW1vdGVBZGRyZXNzLnBvcnQoKSkudXRmOCgp
LmRhdGEoKSkpOworICAgIGF1dG8gbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0aW9u
X2NyZWF0ZShob3N0LmdldCgpLCB1ZHBQYXJhbWV0ZXJzLmdldCgpKSk7CisKKyAgICBzZXR1cE5X
Q29ubmVjdGlvbihud0Nvbm5lY3Rpb24uZ2V0KCksIHJlbW90ZUFkZHJlc3MpOworICAgIHJldHVy
biBud0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXR1
cE5XQ29ubmVjdGlvbihud19jb25uZWN0aW9uX3QgbndDb25uZWN0aW9uLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVl
dWUobndDb25uZWN0aW9uLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKyAgICBud19jb25uZWN0aW9uX3Nl
dF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobndDb25uZWN0aW9uLCBtYWtlQmxvY2tQdHIoW2lkZW50
aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJ0Y1Byb3ZpZGVyID0gbWFrZVJlZihtX3J0Y1Byb3ZpZGVy
KSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3Rh
dGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChlcnJvciwgIWVycm9yKTsKKworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nv
bm5lY3Rpb25fc3RhdGVfd2FpdGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRl
X3ByZXBhcmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0
aW9uX3N0YXRlX3JlYWR5OgorICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
TGliV2ViUlRDTmV0d29yazo6U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6Cisg
ICAgICAgICAgICAvLyBBZGQgbG9nZ2luZy4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSkuZ2V0
KCkpOworCisgICAgcHJvY2Vzc1VEUERhdGEobndDb25uZWN0aW9uLCBbaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVt
b3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpXShhdXRvKiBt
ZXNzYWdlLCBhdXRvIHNpemUpIG11dGFibGUgeworICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2Ug
ZGF0YShtZXNzYWdlLCBzaXplKTsKKyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
TGliV2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJU
Q05ldHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9
LCAwKTsKKyAgICB9KTsKKworICAgIG53X2Nvbm5lY3Rpb25fc3RhcnQobndDb25uZWN0aW9uKTsK
K30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyhjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRy
ZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbndfY29ubmVj
dGlvbl90IG53Q29ubmVjdGlvbjsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX253
Q29ubmVjdGlvbnNMb2NrIH07CisgICAgICAgIG53Q29ubmVjdGlvbiA9IG1fbndDb25uZWN0aW9u
cy5lbnN1cmUocmVtb3RlQWRkcmVzcywgW3RoaXMsICZyZW1vdGVBZGRyZXNzXSB7CisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTldDb25uZWN0aW9uKHJlbW90ZUFkZHJlc3MpOworICAgICAgICB9
KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgfQorCisgICAgYXV0byB2YWx1ZSA9IGFkb3B0
TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFU
QV9ERVNUUlVDVE9SX0RFRkFVTFQpKTsKKyAgICBud19jb25uZWN0aW9uX3NlbmQobndDb25uZWN0
aW9uLCB2YWx1ZS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwg
dHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9u
ID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3Qp
IHsKKyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6
U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRp
bWVNaWxsaXMoKSB9LCAwKTsKKyAgICB9KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggOGNmYzYwNzRkMDU2MmFhNTgyYzVjMGQyMzQ4OGVlNjM2YjJj
OWE5Yy4uNGU5ZTJmZDExNmUzMDk4YjIxODM0MTk4NGE1YjkwMzZmYTFkMTk1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dApAQCAtNTQsNyArNTQsOCBAQCBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ01vbml0b3IuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3Zp
ZGVyLmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZlci5jcHAKIE5l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5jcHAKLU5ldHdvcmtQ
cm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KK05ldHdvcmtQcm9jZXNzL3dl
YnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0KK05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9O
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW0KIAogR1BVUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29h
L1hQQ1NlcnZpY2UvR1BVU2VydmljZUVudHJ5UG9pbnQubW0KIEdQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlOTMwYjZiOWM3NzI5YjEwNWQ5ZDYw
YzZjYzgyNDJlYTJlZWYxYjIuLmJkY2E5ZmNkZDljZGMyZDQxMjMyNDZiODU1MWU3OWU0YjVmYzhj
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMzcwNiw4ICszNzA2LDggQEAKIAkJNDEwM0ZCQTIyMDYxQkRCODAwQzJFQUY4IC8qIE5l
dHdvcmtMb2FkQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrTG9hZENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTA0ODJDQjFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENOZXR3b3JrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDEwNDgyQ0MxREREMkZCNTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDTmV0d29yay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1Nv
Y2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1NvY2tldENvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJG
OEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENT
b2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBCQTEzOTI1NzEz
NUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tl
dENvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTExNDM2MzIwRjY3N0IxMDAyNkY5MTIgLyogSW5q
ZWN0VXNlclNjcmlwdEltbWVkaWF0ZWx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTEyMjNCNzI2MDIxNTJCMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVN
YW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNz
YWdlcy5pbjsgcGF0aCA9IE5ldHdvcmsvd2VicnRjL1JUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdl
ci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQkIyNjAy
NEU4MDAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zODQ2LDYgKzM4NDYsOCBAQAogCQk0MURDNDU5OTFFM0RCQjI0
MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxREM0NTlBMUUzREJCMjQwMEIxMUY1MSAvKiBMaWJXZWJSVENT
b2NrZXRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRD
U29ja2V0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREM0NUEwMUUz
REM1M0MwMEIxMUY1MSAvKiBXZWJSVENSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJSVENSZXNvbHZlci5jcHA7IHBhdGggPSBOZXR3b3JrL3dlYnJ0
Yy9XZWJSVENSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxREQ3
MkE2MjY3QjhDMzAwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQxREQ3MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1JUQ1VEUFNvY2tldENvY29h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTBBN0M2MjNCNjM5NzgwMDU2MTA2
MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWJXZWJSVENDb2Rl
Y3NQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDNzIzQjYzOTc5
MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTGliV2Vi
UlRDQ29kZWNzUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxRTBBN0M4MjNCNjM5NzkwMDU2MTA2MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODQwMSw4ICs4NDAzLDEwIEBACiAJCQkJNDExMkI1NDgxRjlGRDNB
QzAwRTY3ODc1IC8qIE5ldHdvcmtSVENSZXNvbHZlci5oICovLAogCQkJCTQxMTJCNTQ3MUY5RkQz
QUIwMEU2Nzk4NiAvKiBOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5jcHAgKi8sCiAJCQkJNDExMkI1
NDgxRjlGRDNBQzAwRTY3OTg2IC8qIE5ldHdvcmtSVENSZXNvbHZlckNvY29hLmggKi8sCi0JCQkJ
NDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5oICovLAot
CQkJCTQxMEJBMTM5MjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EubW0g
Ki8sCisJCQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRD
b2NvYS5oICovLAorCQkJCTQxMEJBMTM5MjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2EubW0gKi8sCisJCQkJNDFERDcyQTcyNjdCOEMzMTAwQTkwQzcxIC8qIE5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oICovLAorCQkJCTQxREQ3MkE2MjY3QjhDMzAwMEE5MEM3MSAv
KiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW0gKi8sCiAJCQkJNDExMjIzQkMyNjAyNEU4MTAw
QjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmNwcCAqLywKIAkJCQk0
MTEyMjNCQjI2MDI0RTgwMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJv
eHkuaCAqLywKIAkJCQk0MTEyMjNCRDI2MDI0RTgxMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxS
ZW1vdGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431887</attachid>
            <date>2021-06-21 11:43:08 -0700</date>
            <delta_ts>2021-06-22 02:33:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210621204306.patch</filename>
            <type>text/plain</type>
            <size>55716</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBhZjM5ODMyMTM3ZDIyM2E3ZmJkNzc1M2UzNmFhNmVkZTY1MTZiOTEzLi5hNDNm
NzgwZjRjNzRmYWZkMTRjNzU3NDA5ODRjNGI1OTA3MjMxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0xMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBWaWN0b3IgTS4gSmFxdWV6IEwuIDx2
amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB0byBNOTIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTlhYTA5N2Y1ODljYTlhY2Q0YTc5NTAzNzQ2NTliNjRkY2U1ZDEwZS4uZDVkZDJk
YTE0ZDUzNDcxNDJmZjAyNWM0NzU2NjBjYzgyMjFkMTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MiBAQAorMjAyMS0wNi0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlncmF0
ZSBVRFAgc29ja2V0IGhhbmRsaW5nIGZyb20gV2ViUlRDIHBoeXNpY2FsIHNvY2tldCBzZXJ2ZXIg
dG8gbncgQVBJIGZvciBDb2NvYSBwb3J0cy4KKworICAgICAgICBGb3IgZWFjaCBVRFAgc29ja2V0
IG9wZW5lZCwgd2Ugb3BlbiBhIG53X2xpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gaW5ib3Vu
ZCBjb25uZWN0aW9ucy4KKyAgICAgICAgT24gaW5ib3VuZCBjb25uZWN0aW9uLCB3ZSByZWNlaXZl
IGEgbndfY29ubmVjdGlvbiB0aGF0IHdlIHN0b3JlIGluIGEgYWRkcmVzcyAtPiBjb25uZWN0aW9u
IG1hcC4KKworICAgICAgICBXaGVuZXZlciBzZW5kaW5nIGEgcGFja2V0LCB3ZSBsb29rIGF0IHRo
ZSByZW1vdGUgYWRkcmVzcy4KKyAgICAgICAgSWYgbmVlZGVkLCB3ZSBjcmVhdGUgYSBud19jb25u
ZWN0aW9uIHRvIHRoYXQgcGFydGljdWxhciByZW1vdGUgYWRkcmVzcyBhbmQgc3RvcmUgaXQgaW4g
dGhlIGFkZHJlc3MgLT4gY29ubmVjdGlvbiBtYXAuCisgICAgICAgIFdlIHRoZW4gdXNlIHRoZSBw
cmUtZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCBud19jb25uZWN0aW9uIHRvIHNlbmQgdGhlIHBh
Y2tldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRDUFNvY2tldCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0Q29jb2EuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tLgorICAgICAgICAoV2ViS2l0Ojp0Y3BT
b2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1RDUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLmgu
CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz46Omhhc2gpOgor
ICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZW1wdHlWYWx1ZSk6
CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6Y29uc3RydWN0
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJl
c3M+Ojppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OnVkcFNv
Y2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
cmVhdGVVRFBTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2E6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnByb2Nlc3NVRFBEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVOV0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNl
dHVwTldDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hOjpzZW5kVG8pOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDYtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTnVtYmVyIHBhZCBidXR0b24g
aXMgbWlzc2luZyBpdHMgaW1hZ2Ugd2hlbiB0YXBwaW5nIG9uIDxpbnB1dCB0eXBlPXRlbD4gaW4g
d2F0Y2hPUyA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmln
dXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2NjZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5
MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cApAQCAtMzIxLDMgKzMyMSw2IEBAIF9f
Wk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVj
dGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3
QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19J
TlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVv
RW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRl
b0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lO
U18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3
ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRl
ZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQ
ZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3Vy
YXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0
QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitfX1pOSzNy
dGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cAppbmRleCA3
ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQyODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZm
NmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhw
CkBAIC0zMjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0NlcnRpZmljYXRlRDFFdgogX19aTjZ3
ZWJydGMyN0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQTjNydGM2VGhyZWFkRVMyX1MyX05T
MF8xM3Njb3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1vZHVsZUVFRU5TM19JTlNfMTlBdWRp
b0VuY29kZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVjb2RlckZhY3RvcnlFRUVOU3QzX18x
MTB1bmlxdWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9yeUVOU0FfMTRkZWZhdWx0X2RlbGV0
ZUlTQ19FRUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3RvcnlFTlNEX0lTR19FRUVFTlMzX0lO
U18xMEF1ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9jZXNzaW5nRUVFUE5TXzE5QXVkaW9G
cmFtZVByb2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJhbnNjZWl2ZXJJbnRlcmZhY2UyNkhl
YWRlckV4dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2VicnRjMzBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlJbnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9uRVJLTlNfMjNQZWVyQ29ubmVjdGlv
bkludGVyZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBlZXJDb25uZWN0aW9uRGVwZW5kZW5j
aWVzRQorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hFdgorX19aTkszcnRjMTNTb2NrZXRB
ZGRyZXNzZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1SXNOaWxFdgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMu
ZXhwIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0
Yy5tYWMuZXhwCmluZGV4IDdkMjI1Y2MyYzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQyOTQyNjMu
LjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVjMDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2Vi
cnRjLm1hYy5leHAKQEAgLTMyMSwzICszMjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlmaWNhdGVE
MUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0YzZUaHJl
YWRFUzJfUzJfTlMwXzEzc2NvcGVkX3JlZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxlRUVFTlMz
X0lOU18xOUF1ZGlvRW5jb2RlckZhY3RvcnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVyRmFjdG9y
eUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJTlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5TQV8xNGRl
ZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0JfSU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVOU0RfSVNH
X0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhlckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3NpbmdFRUVQ
TlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29yRQogX19aTks2d2VicnRjMjNSdHBUcmFuc2NlaXZlcklu
dGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9uc05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMzMFBlZXJD
b25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktOU18yM1Bl
ZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZSVENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNvbm5lY3Rp
b25EZXBlbmRlbmNpZXNFCitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2CitfX1pOSzNy
dGMxM1NvY2tldEFkZHJlc3NlcUVSS1MwXworX19aTkszcnRjOUlQQWRkcmVzczVJc05pbEV2CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
UHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29y
a1JUQ1Byb3ZpZGVyLmNwcAppbmRleCA0MDc3NTEzNjQzNDcyNWM0MzNlYmFjZmZlNGJjZDhlNDVl
ZWI4OTc3Li41MzNjMjQxMDU2MmUxZGY2Y2ViZDhkOGIzZDliNGU2Y2QwNjA2ZDBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENQcm92aWRlci5jcHAKQEAgLTQ2LDcgKzQ2LDggQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
I2luY2x1ZGUgIk5ldHdvcmtSVENSZXNvbHZlckNvY29hLmgiCi0jaW5jbHVkZSAiTmV0d29ya1JU
Q1NvY2tldENvY29hLmgiCisjaW5jbHVkZSAiTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmgiCisj
aW5jbHVkZSAiTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC0xMzcsNiArMTM4LDE1IEBAIHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpj
cmVhdGVTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBzdGQ6CiAK
IHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2NrZXQoTGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiBh
ZGRyZXNzLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50MTZfdCBtYXhQb3J0KQogeworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAg
aWYgKGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVVRFBTb2Nr
ZXQoaWRlbnRpZmllciwgKnRoaXMsIGFkZHJlc3MudmFsdWUsIG1pblBvcnQsIG1heFBvcnQsIG1f
aXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpKSB7CisgICAgICAgICAgICBhZGRTb2NrZXQoaWRlbnRp
ZmllciwgV1RGTW92ZShzb2NrZXQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorCiAgICAgQVNTRVJUKG1fcnRjTmV0d29ya1RocmVhZC5Jc0N1cnJlbnQo
KSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6QXN5bmNQYWNrZXRTb2NrZXQ+IHNvY2tldCht
X3BhY2tldFNvY2tldEZhY3RvcnktPkNyZWF0ZVVkcFNvY2tldChhZGRyZXNzLnZhbHVlLCBtaW5Q
b3J0LCBtYXhQb3J0KSk7CiAgICAgY3JlYXRlU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29j
a2V0KSwgU29ja2V0OjpUeXBlOjpVRFAsIG1faXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpOwpAQCAt
MTgyLDcgKzE5Miw3IEBAIHZvaWQgTmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVDbGllbnRUQ1BT
b2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmCiAgICAgICAgIGNhbGxPblJU
Q05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdv
cms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRD
TmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBw
cm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9
IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0Vu
YWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29j
a2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3Rl
QWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0
ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9u
cywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
U29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUy
ZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJO
ZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFt
ZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtS
VENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9w
dGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENv
Y29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRl
ciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25u
ZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tl
dC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmlu
YWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAg
ICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFk
ZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1
aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0g
ICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAg
TmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX253Q29u
bmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0Ep
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9O
ZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZh
NTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdv
cmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09D
T0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0
d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4K
LSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0
YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0
Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsK
LSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0
Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09O
Q1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3Jl
YXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwg
TmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBj
b25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2Fu
ZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYg
KCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8
ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJF
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29y
a1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywg
dGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25u
ZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHBy
b2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBu
d0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVj
dGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUo
bndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVy
ID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndfY29udGVudF9j
b250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFf
YXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwg
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAg
ICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRf
Z2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
ZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEo
V1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZm
ZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29y
a1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0
d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBy
ZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0
aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVy
KHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0g
ICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RV
TikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAg
IGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3Mu
aXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50
X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJl
c3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2Vy
dGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVz
aW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExT
ID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRv
IHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/
IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNB
QkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAg
ICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRydWUpOwotICAg
IH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0
ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1
ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0
aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VC
bG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVm
KHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nv
bm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0
ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAg
Y2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVj
dGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2Ug
bndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRpZmllciksIDAp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVf
ZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQo
W3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRjUHJvdmlkZXIt
PnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlk
ZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2Ugbndf
Y29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0
aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29u
bmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJl
bW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0
YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1
ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3Nh
Z2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAg
ICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNr
ZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBy
dGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0g
ICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQg
TmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0
aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsK
LX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsK
LSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMg
UmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+
JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1Bv
aW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMo
ZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkp
OwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNz
YWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGlmIChz
aXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5n
dGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0g
ICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAg
ICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0g
c2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRk
aW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVz
c2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5h
cHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8
IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIp
Ci0gICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICByZXR1cm4g
YnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIp
OwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBi
dWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRh
dGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tl
dENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAg
aWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rp
b25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZm
ZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwg
bWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAg
ICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFs
U2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxs
aXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0
Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENU
Q1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2Rh
MTlkZWMzMzFhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9S
TShDT0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5l
dHdvcmsvTmV0d29yay5oPgorCituYW1lc3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29j
b2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNyZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3Jl
OjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7
CisKKyAgICBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCitwcml2YXRlOgorICAg
IC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1Nv
Y2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVu
dFRDUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQg
b3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0
aW9ucyYpIGZpbmFsOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJ
ZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBOZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJv
dmlkZXI7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIFJldGFp
blB0cjxud19jb25uZWN0aW9uX3Q+IG1fbndDb25uZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4g
eyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNWRkNGY5NzI2MTU0MjhkN2Y0Y2E0NjZlN2E2NTc1ZTU5YjFlZjM0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIK
KworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0
YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gv
ZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVf
dCB0Y3BTb2NrZXRRdWV1ZSgpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7
CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25j
ZSgmb25jZVRva2VuLCBeeworICAgICAgICBxdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgi
V2ViUlRDIFRDUCBzb2NrZXQgcXVldWUiLCBESVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRD
UHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRU
Q1BTb2NrZXQoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRD
UHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFk
ZHJlc3MsIGludCB0Y3BPcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24p
Cit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtaWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBt
YXliZSBzdXBwb3J0IE9QVF9UTFNfSU5TRUNVUkUgYXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlv
bnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlv
bnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29j
a2V0Q29jb2E+KGlkZW50aWZpZXIsIHJ0Y1Byb3ZpZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRp
b25zLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nl
c3NJbmNvbWluZ0RhdGEoUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24s
IEZ1bmN0aW9uPFZlY3Rvcjx1aW50OF90PihWZWN0b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0Rh
dGEsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciA9IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVj
dGlvblJlZmVyZW5jZSA9IG53Q29ubmVjdGlvbi5nZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3Jl
Y2VpdmUobndDb25uZWN0aW9uUmVmZXJlbmNlLCAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksIG1ha2VCbG9ja1B0cihbbndDb25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5l
Y3Rpb24pLCBwcm9jZXNzRGF0YSA9IFdURk1vdmUocHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZN
b3ZlKGJ1ZmZlcildKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRf
dCBjb250ZXh0LCBib29sIGlzQ29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgewor
ICAgICAgICBpZiAoY29udGVudCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShj
b250ZW50LCBtYWtlQmxvY2tQdHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRy
b2R1Y2UgdW5jaGVja2VkQXBwZW5kIHZlcnNpb24uCisgICAgICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICAgICAg
YnVmZmVyID0gcHJvY2Vzc0RhdGEoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaXNDb21wbGV0ZSAmJiBjb250ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNf
ZmluYWwoY29udGV4dCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvcikK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3Zl
KG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vzc0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOwor
ICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3
b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJl
bW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rp
b24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIo
cnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAg
ICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVO
KQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1vdGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAg
aWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAgIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5p
cGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8gaG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRf
Y3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwgU3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVz
cy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0
aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNp
bmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3ZlcmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMg
PSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8g
dGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8g
TldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FC
TEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAg
ICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxheSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAg
fSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRl
KGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOworCisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVl
dWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNvY2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5l
Y3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFr
ZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VS
ZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndf
Y29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFibGUgbndfZXJyb3JfdCBlcnJvcikgewor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0
YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAg
ICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGluZzoKKyAgICAgICAgY2FzZSBud19jb25u
ZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgorICAgICAgICAgICAgY29ubmVjdGlvbi0+c2Vu
ZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwg
MCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0
ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVh
ZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAgICAgICAgICAgICAgICBydGNQcm92aWRl
ci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Y29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsQ2xvc2Uo
aWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBu
d19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5l
Y3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0g
cmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9IG1faXNTVFVOXShhdXRvJiYgYnVmZmVyKSBt
dXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIFdlYlJUQzo6ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUo
YnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNzYWdlVHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVz
c2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNzYWdlLCBhdXRvIHNpemUpIHsKKyAgICAgICAg
ICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3NhZ2UsIHNpemUpOworICAgICAgICAgICAg
Y29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBh
Y2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05ldHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQs
IHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAwKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisK
KyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndDb25uZWN0aW9uLmdldCgpKTsKK30KKwordm9p
ZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNsb3NlKCkKK3sKKyAgICBpZiAoIW1fbndDb25u
ZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbndfY29ubmVjdGlvbl9jYW5jZWwobV9ud0Nv
bm5lY3Rpb24uZ2V0KCkpOworICAgIG1fcnRjUHJvdmlkZXIudGFrZVNvY2tldChtX2lkZW50aWZp
ZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6c2V0T3B0aW9uKGludCwg
aW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9CisK
K3N0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0YV90PiBkYXRhRnJvbVZlY3RvcihWZWN0b3I8
dWludDhfdD4mJiB2KQoreworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1
dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZlcigpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4g
YWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShyYXdQb2ludGVyLCBidWZmZXJTaXplLCBkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBmYXN0RnJlZShyYXdQb2ludGVyKTsK
KyAgICB9KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6
OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7
CisgICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKG1faXNTVFVOKSB7CisgICAgICAgIGF1dG8g
bWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNUVU5PclRVUk5NZXNzYWdlTGVuZ3RocyhkYXRh
LCBzaXplKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlTGVuZ3RocykKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoID09
IHNpemUpOworICAgICAgICBBU1NFUlQobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRo
UGFkZGluZyA+PSBzaXplKTsKKyAgICAgICAgaWYgKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVu
Z3RoV2l0aFBhZGRpbmcgPCBzaXplKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAg
ICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAgICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nKTsKKyAgICAg
ICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9
IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyAtIHNp
emU7ICsrY3B0cikKKyAgICAgICAgICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAg
ICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisgICAgLy8gUHJlcGVuZCBsZW5ndGguCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzaXplICsgMik7CisgICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgoc2l6ZSA+PiA4KSAmIDB4
RkYpOworICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoc2l6ZSAmIDB4RkYpOworICAgIGJ1ZmZl
ci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwordm9pZCBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25z
JiBvcHRpb25zKQoreworICAgIGF1dG8gYnVmZmVyID0gY3JlYXRlTWVzc2FnZUJ1ZmZlcihkYXRh
LCBzaXplKTsKKyAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25uZWN0aW9uLmdldCgpLCBkYXRhRnJvbVZlY3Rv
cihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19DT05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9D
T05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNv
bm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJlZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndf
ZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENO
ZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRlbnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQs
IHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAgIH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJy
dGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQzM2YzMTlmZGJkYzQ4
MWFjMDI4NDQ0ZmI1Mzc1MTJhNDRlZjRkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgi
CisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFk
ZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsgcmV0dXJuIGFkZHJlc3MuSGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhLCBjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIGIpIHsgcmV0dXJuIGEgPT0gYiB8fCAoYS5Jc05pbCgpICYm
IGIuSXNOaWwoKSAmJiBhLnNjb3BlX2lkKCkgPT0gYi5zY29wZV9pZCgpKTsgfQorICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBH
ZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAgICBzdGF0aWMgcnRjOjpT
b2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJldHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9
OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRk
cmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9
CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNjb3BlX2lkKCkgPT0gLTE7IH0KK307CisKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSBm
aW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRlVURQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJU
Q1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0
QWRkcmVzcyYsIHVpbnQxNl90IG1pblBvcnQsIHVpbnQxNl90IG1heFBvcnQsIFJlZjxJUEM6OkNv
bm5lY3Rpb24+JiYpOworCisgICAgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hKFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6
U29ja2V0QWRkcmVzcyYsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCitwcml2YXRlOgorICAg
IC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1Nv
Y2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsg
fQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9u
LCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYp
IGZpbmFsOworCisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gY3JlYXRlTldDb25uZWN0
aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYpOworICAgIHZvaWQgc2V0dXBOV0Nvbm5lY3Rp
b24obndfY29ubmVjdGlvbl90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmKTsKKworICAgIFdl
YkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdv
cmtSVENQcm92aWRlciYgbV9ydGNQcm92aWRlcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRh
aW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rp
b25zTG9jazsKKyAgICBIYXNoTWFwPHJ0Yzo6U29ja2V0QWRkcmVzcywgUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4+IG1fbndDb25uZWN0aW9ucyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbndDb25u
ZWN0aW9uc0xvY2spOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2Nv
YS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hN2QzNjc2MjU4NzQ0Y2RkN2M0YzNiOTE2OGIwMDI3MjliYTZjMjA0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2Eu
aCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAi
RGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0
Y2gvZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVl
dWVfdCB1ZHBTb2NrZXRRdWV1ZSgpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVl
dWU7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hf
b25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBxdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0
ZSgiV2ViUlRDIFVEUCBzb2NrZXQgcXVldWUiLCBESVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
UlRDUHJvdmlkZXI6OlNvY2tldD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjcmVhdGVVRFBT
b2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3
b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFk
ZHJlc3MsIHVpbnQxNl90IG1pblBvcnQsIHVpbnQxNl90IG1heFBvcnQsIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogRGVjaWRlIGhvdyB0byB1c2Ug
bWluUG9ydC9tYXhQb3J0LgorICAgIHJldHVybiBtYWtlVW5pcXVlPE5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYT4oaWRlbnRpZmllciwgcnRjUHJvdmlkZXIsIGFkZHJlc3MsIFdURk1vdmUoY29ubmVj
dGlvbikpOworfQorCitOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6Ok5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYShXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5l
dHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYg
YWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAg
ICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCit7CisgICAgYXV0byBwYXJhbWV0
ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRF
UlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJT04p
KTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJlc3MgPSBhZGRyZXNzLmlwYWRkcigpLlRv
U3RyaW5nKCk7CisgICAgICAgIGlmIChhZGRyZXNzLmlwYWRkcigpLklzTmlsKCkpCisgICAgICAg
ICAgICBob3N0QWRkcmVzcyA9IGFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICAgICAgYXV0byBsb2Nh
bEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9zdChob3N0QWRkcmVzcy5j
X3N0cigpLCAiMCIpKTsKKyAgICAgICAgbV9hZGRyZXNzID0geyBud19lbmRwb2ludF9nZXRfaG9z
dG5hbWUobG9jYWxFbmRwb2ludC5nZXQoKSksIG53X2VuZHBvaW50X2dldF9wb3J0KGxvY2FsRW5k
cG9pbnQuZ2V0KCkpIH07CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xvY2FsX2VuZHBvaW50
KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jb3B5X2Rl
ZmF1bHRfcHJvdG9jb2xfc3RhY2socGFyYW1ldGVycy5nZXQoKSkpOworICAgICAgICBhdXRvIG9w
dGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50ZXJuZXRfcHJvdG9jb2wo
cHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRpb25zX3NldF92ZXJzaW9u
KG9wdGlvbnMuZ2V0KCksIGFkZHJlc3MuZmFtaWx5KCkgPT0gQUZfSU5FVCA/IG53X2lwX3ZlcnNp
b25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisgICAgbV9ud0xpc3RlbmVyID0gYWRv
cHROUyhud19saXN0ZW5lcl9jcmVhdGUocGFyYW1ldGVycy5nZXQoKSkpOworICAgIG53X2xpc3Rl
bmVyX3NldF9xdWV1ZShtX253TGlzdGVuZXIuZ2V0KCksIHVkcFNvY2tldFF1ZXVlKCkpOworCisg
ICAgbndfbGlzdGVuZXJfc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihtX253TGlzdGVuZXIuZ2V0
KCksIG1ha2VCbG9ja1B0cihbbndMaXN0ZW5lciA9IG1fbndMaXN0ZW5lci5nZXQoKSwgYWRkcmVz
cyA9IG1fYWRkcmVzcywgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIHByb3Rl
Y3RlZFJUQ1Byb3ZpZGVyID0gbWFrZVJlZihtX3J0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllcl0obndfbGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikg
bXV0YWJsZSB7CisgICAgICAgIGVycm5vID0gZXJyb3IgPyBud19lcnJvcl9nZXRfZXJyb3JfY29k
ZShlcnJvcikgOiAwOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2Ugbndf
bGlzdGVuZXJfc3RhdGVfaW52YWxpZDoKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV93
YWl0aW5nOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3Rh
dGVfcmVhZHk6CisgICAgICAgICAgICBhZGRyZXNzLlNldFBvcnQobndfbGlzdGVuZXJfZ2V0X3Bv
cnQobndMaXN0ZW5lcikpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
TGliV2ViUlRDTmV0d29yazo6U2lnbmFsQWRkcmVzc1JlYWR5KGlkZW50aWZpZXIsIFJUQ05ldHdv
cms6OlNvY2tldEFkZHJlc3MoYWRkcmVzcykpLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX2ZhaWxlZDoKKyAgICAgICAgICAgIHByb3RlY3Rl
ZFJUQ1Byb3ZpZGVyLT5jYWxsT25SVENOZXR3b3JrVGhyZWFkKFtwcm90ZWN0ZWRSVENQcm92aWRl
ciwgaWRlbnRpZmllcl0geworICAgICAgICAgICAgICAgIHByb3RlY3RlZFJUQ1Byb3ZpZGVyLT50
YWtlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxDbG9zZShpZGVu
dGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlz
dGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIG53
X2xpc3RlbmVyX3NldF9uZXdfY29ubmVjdGlvbl9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQoKSwg
bWFrZUJsb2NrUHRyKFt0aGlzXShud19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikgeworICAgICAg
ICBhdXRvIGVuZHBvaW50ID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NvcHlfZW5kcG9pbnQoY29u
bmVjdGlvbikpOworICAgICAgICBydGM6OlNvY2tldEFkZHJlc3MgcmVtb3RlQWRkcmVzcyB7IG53
X2VuZHBvaW50X2dldF9ob3N0bmFtZShlbmRwb2ludC5nZXQoKSksIG53X2VuZHBvaW50X2dldF9w
b3J0KGVuZHBvaW50LmdldCgpKSB9OworCisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX253Q29ubmVjdGlvbnNMb2NrIH07CisgICAgICAgICAgICBtX253Q29ubmVjdGlv
bnMuc2V0KHJlbW90ZUFkZHJlc3MsIGNvbm5lY3Rpb24pOworICAgICAgICB9CisgICAgICAgIHNl
dHVwTldDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlbW90ZUFkZHJlc3MpOworICAgIH0pLmdldCgp
KTsKKworICAgIG53X2xpc3RlbmVyX3N0YXJ0KG1fbndMaXN0ZW5lci5nZXQoKSk7Cit9CisKK3Zv
aWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjbG9zZSgpCit7CisgICAgbndfbGlzdGVuZXJf
c2V0X25ld19jb25uZWN0aW9uX2hhbmRsZXIobV9ud0xpc3RlbmVyLmdldCgpLCBudWxscHRyKTsK
KyAgICBud19saXN0ZW5lcl9zZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVyKG1fbndMaXN0ZW5lci5n
ZXQoKSwgbnVsbHB0cik7CisgICAgbndfbGlzdGVuZXJfY2FuY2VsKG1fbndMaXN0ZW5lci5nZXQo
KSk7CisgICAgbV9ud0xpc3RlbmVyID0gbnVsbHB0cjsKKworICAgIHsKKyAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fbndDb25uZWN0aW9uc0xvY2sgfTsKKyAgICAgICAgZm9yIChhdXRvJiBud0Nv
bm5lY3Rpb24gOiBtX253Q29ubmVjdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIG53X2Nv
bm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlcihud0Nvbm5lY3Rpb24uZ2V0KCksIG51
bGxwdHIpOworICAgICAgICAgICAgbndfY29ubmVjdGlvbl9jYW5jZWwobndDb25uZWN0aW9uLmdl
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX253Q29ubmVjdGlvbnMuY2xlYXIoKTsKKyAgICB9
CisKKyAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9p
ZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAv
LyBGSVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgcHJvY2Vzc1VEUERhdGEoUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5l
Y3Rpb24sIEZ1bmN0aW9uPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgcHJvY2Vzc0Rh
dGEpCit7CisgICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0
KCk7CisgICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwg
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29u
bmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHBy
b2Nlc3NEYXRhKV0oZGlzcGF0Y2hfZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90
IGNvbnRleHQsIGJvb2wgaXNDb21wbGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7Cisg
ICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNv
bnRlbnQsIG1ha2VCbG9ja1B0cihbJl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGEoc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXNDb21wbGV0ZSAmJiBjb250ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmlu
YWwoY29udGV4dCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvY2Vzc1VEUERhdGEoV1RGTW92ZShud0Nvbm5l
Y3Rpb24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSk7CisgICAgfSkuZ2V0KCkpOworfQorCitSZXRh
aW5QdHI8bndfY29ubmVjdGlvbl90PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZU5X
Q29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7Cisg
ICAgYXV0byB1ZHBQYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1
cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVSU19ERUZB
VUxUX0NPTkZJR1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJlc3MgPSBt
X2FkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG1fYWRkcmVzcy5pcGFk
ZHIoKS5Jc05pbCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3MuaG9zdG5h
bWUoKTsKKyAgICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9j
cmVhdGVfaG9zdChob3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2FkZHJlc3Mu
cG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xvY2Fs
X2VuZHBvaW50KHVkcFBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAg
IH0KKyAgICB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1l
dGVyc19jb3B5X2RlZmF1bHRfcHJvdG9jb2xfc3RhY2sodWRwUGFyYW1ldGVycy5nZXQoKSkpOwor
ICAgICAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50
ZXJuZXRfcHJvdG9jb2wocHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRp
b25zX3NldF92ZXJzaW9uKG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0g
QUZfSU5FVCA/IG53X2lwX3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisg
ICAgYXV0byByZW1vdGVIb3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJp
bmcoKTsKKyAgICBpZiAocmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICBy
ZW1vdGVIb3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBhdXRvIGhv
c3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KHJlbW90ZUhvc3RBZGRyZXNzLmNf
c3RyKCksIFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgp
KSk7CisgICAgYXV0byBud0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRl
KGhvc3QuZ2V0KCksIHVkcFBhcmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNldHVwTldDb25uZWN0
aW9uKG53Q29ubmVjdGlvbi5nZXQoKSwgcmVtb3RlQWRkcmVzcyk7CisgICAgcmV0dXJuIG53Q29u
bmVjdGlvbjsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNldHVwTldDb25u
ZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rpb24sIGNvbnN0IHJ0Yzo6U29ja2V0QWRk
cmVzcyYgcmVtb3RlQWRkcmVzcykKK3sKKyAgICBud19jb25uZWN0aW9uX3NldF9xdWV1ZShud0Nv
bm5lY3Rpb24sIHVkcFNvY2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRl
X2NoYW5nZWRfaGFuZGxlcihud0Nvbm5lY3Rpb24sIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9
IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKG1fcnRjUHJvdmlkZXIpLCBjb25u
ZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0
YXRlLCBfTnVsbGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VE
KGVycm9yLCAhZXJyb3IpOworCisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2Fz
ZSBud19jb25uZWN0aW9uX3N0YXRlX2ludmFsaWQ6CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV93YWl0aW5nOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfcHJlcGFy
aW5nOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3Rh
dGVfcmVhZHk6CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJS
VENOZXR3b3JrOjpTaWduYWxDb25uZWN0KGlkZW50aWZpZXIpLCAwKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2ZhaWxlZDoKKyAgICAgICAg
ICAgIC8vIEFkZCBsb2dnaW5nLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIG53
X2Nvbm5lY3Rpb25fc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisK
KyAgICBwcm9jZXNzVURQRGF0YShud0Nvbm5lY3Rpb24sIFtpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1vdGVBZGRy
ZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCldKGF1dG8qIG1lc3NhZ2Us
IGF1dG8gc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1l
c3NhZ2UsIHNpemUpOworICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJS
VENOZXR3b3JrOjpTaWduYWxSZWFkUGFja2V0IHsgaWRlbnRpZmllciwgZGF0YSwgUlRDTmV0d29y
azo6SVBBZGRyZXNzKGlwKSwgcG9ydCwgcnRjOjpUaW1lTWlsbGlzKCkgKiAxMDAwIH0sIDApOwor
ICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFydChud0Nvbm5lY3Rpb24pOworfQorCit2
b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6c2VuZFRvKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGNv
bnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBud19jb25uZWN0aW9uX3Qg
bndDb25uZWN0aW9uOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbndDb25uZWN0
aW9uc0xvY2sgfTsKKyAgICAgICAgbndDb25uZWN0aW9uID0gbV9ud0Nvbm5lY3Rpb25zLmVuc3Vy
ZShyZW1vdGVBZGRyZXNzLCBbdGhpcywgJnJlbW90ZUFkZHJlc3NdIHsKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVOV0Nvbm5lY3Rpb24ocmVtb3RlQWRkcmVzcyk7CisgICAgICAgIH0pLml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBhdXRvIHZhbHVlID0gYWRvcHROUyhkaXNw
YXRjaF9kYXRhX2NyZWF0ZShkYXRhLCBzaXplLCBudWxscHRyLCBESVNQQVRDSF9EQVRBX0RFU1RS
VUNUT1JfREVGQVVMVCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2VuZChud0Nvbm5lY3Rpb24sIHZh
bHVlLmdldCgpLCBOV19DT05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBt
YWtlQmxvY2tQdHIoW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nv
bm5lY3Rpb24uY29weVJlZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndfZXJyb3JfdCkgeworICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxT
ZW50UGFja2V0IHsgaWRlbnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxp
cygpIH0sIDApOworICAgIH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAppbmRleCA4Y2ZjNjA3NGQwNTYyYWE1ODJjNWMwZDIzNDg4ZWU2MzZiMmM5YTljLi40
ZTllMmZkMTE2ZTMwOThiMjE4MzQxOTg0YTViOTAzNmZhMWQxOTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CkBAIC01NCw3ICs1NCw4IEBAIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
TW9uaXRvci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3Bw
CiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyLmNwcAogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZlckNvY29hLmNwcAotTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5tbQorTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQorTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYS5tbQogCiBHUFVQcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2Vy
dmljZS9HUFVTZXJ2aWNlRW50cnlQb2ludC5tbQogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTENvY29hLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5MzBiNmI5Yzc3MjliMTA1ZDlkNjBjNmNjODI0
MmVhMmVlZjFiMi4uYmRjYTlmY2RkOWNkYzJkNDEyMzI0NmI4NTUxZTc5ZTRiNWZjOGNmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0z
NzA2LDggKzM3MDYsOCBAQAogCQk0MTAzRkJBMjIwNjFCREI4MDBDMkVBRjggLyogTmV0d29ya0xv
YWRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdv
cmtMb2FkQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNC
MURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJUQ05ldHdvcmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTA0ODJDQzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSVENOZXR3b3JrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQxMEJBMTM5MjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBO
ZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1JUQ1NvY2tldENv
Y29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMEJBMTM5MjU3MTM1RjIwMDJF
MkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2Eu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxMTE0MzYzMjBGNjc3QjEwMDI2RjkxMiAvKiBJbmplY3RVc2Vy
U2NyaXB0SW1tZWRpYXRlbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0VXNlclNjcmlwdEltbWVkaWF0ZWx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxMTIyM0I3MjYwMjE1MkIwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIu
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OyBwYXRoID0gTmV0d29yay93ZWJydGMvUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyLm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTEyMjNCQjI2MDI0RTgwMDBC
MEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTM4NDYsNiArMzg0Niw4IEBACiAJCTQxREM0NTk5MUUzREJCMjQwMEIxMUY1
MSAvKiBMaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGliV2ViUlRDU29ja2V0Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFEQzQ1OUExRTNEQkIyNDAwQjExRjUxIC8qIExpYldlYlJUQ1NvY2tldENs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWJXZWJSVENTb2NrZXRD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEQzQ1QTAxRTNEQzUzQzAw
QjExRjUxIC8qIFdlYlJUQ1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYlJUQ1Jlc29sdmVyLmNwcDsgcGF0aCA9IE5ldHdvcmsvd2VicnRjL1dlYlJU
Q1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFERDcyQTYyNjdC
OEMzMDAwQTkwQzcxIC8qIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDFERDcyQTcyNjdCOEMzMTAwQTkwQzcxIC8qIE5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3QzYyM0I2Mzk3ODAwNTYxMDYwIC8qIExp
YldlYlJUQ0NvZGVjc1Byb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTBBN0M3MjNCNjM5NzkwMDU2MTA2
MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBMaWJXZWJSVENDb2Rl
Y3NQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3
QzgyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04NDAxLDggKzg0MDMsMTAgQEAKIAkJCQk0MTEyQjU0ODFGOUZEM0FDMDBFNjc4
NzUgLyogTmV0d29ya1JUQ1Jlc29sdmVyLmggKi8sCiAJCQkJNDExMkI1NDcxRjlGRDNBQjAwRTY3
OTg2IC8qIE5ldHdvcmtSVENSZXNvbHZlckNvY29hLmNwcCAqLywKIAkJCQk0MTEyQjU0ODFGOUZE
M0FDMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuaCAqLywKLQkJCQk0MTBCQTEz
QTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLmggKi8sCi0JCQkJNDEw
QkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAqLywKKwkJ
CQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmgg
Ki8sCisJCQkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRD
b2NvYS5tbSAqLywKKwkJCQk0MURENzJBNzI2N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLmggKi8sCisJCQkJNDFERDcyQTYyNjdCOEMzMDAwQTkwQzcxIC8qIE5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5tbSAqLywKIAkJCQk0MTEyMjNCQzI2MDI0RTgxMDBCMEEwQjYg
LyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuY3BwICovLAogCQkJCTQxMTIyM0JC
MjYwMjRFODAwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oICov
LAogCQkJCTQxMTIyM0JEMjYwMjRFODEwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431951</attachid>
            <date>2021-06-22 02:33:39 -0700</date>
            <delta_ts>2021-06-22 03:48:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210622113335.patch</filename>
            <type>text/plain</type>
            <size>67025</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBhZjM5ODMyMTM3ZDIyM2E3ZmJkNzc1M2UzNmFhNmVkZTY1MTZiOTEzLi4wNTEz
MDJmODQzOTcyZWE3OGQ0MjE1Yjc1NTc3ZDMwMzg2MmRiNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0xMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+IGFuZCBWaWN0b3IgTS4gSmFxdWV6IEwuIDx2
amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB0byBNOTIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5k
ZXggYzM5ZTA5YTAzOGI2ZDgxZmIwNTVjNzFhMmM0ZWEzMjc1NmViNjU0Ni4uN2JjNjJkZDczNzMw
OWJhZTNiYjkyZjRlMzNiMzFlZDAyYmEzYmE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0w
Ni0yMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29h
XSBNaWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IGV4cGVyaW1l
bnRhbCBmbGFnIGZvciBOVyBiYWNrZWQgVURQIHNvY2tldHMuCisKKyAgICAgICAgKiBTY3JpcHRz
L1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6CisKIDIwMjEtMDYt
MTIgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTnVt
YmVyIHBhZCBidXR0b24gaXMgbWlzc2luZyBpdHMgaW1hZ2Ugd2hlbiB0YXBwaW5nIG9uIDxpbnB1
dCB0eXBlPXRlbD4gaW4gd2F0Y2hPUyA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk1MWFmYTI1YTMyYzhjYWFm
NzdlZWI0ZGNmNGU0NzZiZWQ0NDk1Yi4uNjU0NzlmMjJjZDNhY2I1NzA5YzQyNDExOTM3ZGRhM2Nm
YzRiMzMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTIyICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgV2Vi
UlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW5mcmFzdHJ1Y3R1cmUgdG8gbmV3IGV4cGVy
aW1lbnRhbCBmZWF0dXJlIGZsYWcgZm9yIE5XIGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAg
ICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6d2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRXZWJSVENQ
bGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViUlRDUGxhdGZvcm1V
RFBTb2NrZXRzRW5hYmxlZCk6CisKIDIwMjEtMDYtMTMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIFNpbXVsYXRlZFhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5k
UmVuZGVyaW5nKCkgc2hvdWxkIGNsZWFyIGl0J3MgR3JhcGhpY3NDb250ZXh0R0wgdG8gZW5zdXJl
IHRoZSByZXNvdXJjZSBpcyBjbGVhbmVkIHVwIHF1aWNrbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOTlhYTA5N2Y1
ODljYTlhY2Q0YTc5NTAzNzQ2NTliNjRkY2U1ZDEwZS4uNmJjYjM0ODY1NjQ1Y2M3MmExNjNiMGM1
ZDhhODFiMmIxYTZhNGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NyBAQAorMjAyMS0wNi0yMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdy
YXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlncmF0ZSBVRFAgc29ja2V0IGhhbmRs
aW5nIGZyb20gV2ViUlRDIHBoeXNpY2FsIHNvY2tldCBzZXJ2ZXIgdG8gbncgQVBJIGZvciBDb2Nv
YSBwb3J0cy4KKworICAgICAgICBGb3IgZWFjaCBVRFAgc29ja2V0IG9wZW5lZCwgd2Ugb3BlbiBh
IG53X2xpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gaW5ib3VuZCBjb25uZWN0aW9ucy4KKyAg
ICAgICAgT24gaW5ib3VuZCBjb25uZWN0aW9uLCB3ZSByZWNlaXZlIGEgbndfY29ubmVjdGlvbiB0
aGF0IHdlIHN0b3JlIGluIGEgYWRkcmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKworICAgICAgICBX
aGVuZXZlciBzZW5kaW5nIGEgcGFja2V0LCB3ZSBsb29rIGF0IHRoZSByZW1vdGUgYWRkcmVzcy4K
KyAgICAgICAgSWYgbmVlZGVkLCB3ZSBjcmVhdGUgYSBud19jb25uZWN0aW9uIHRvIHRoYXQgcGFy
dGljdWxhciByZW1vdGUgYWRkcmVzcyBhbmQgc3RvcmUgaXQgaW4gdGhlIGFkZHJlc3MgLT4gY29u
bmVjdGlvbiBtYXAuCisgICAgICAgIFdlIHRoZW4gdXNlIHRoZSBwcmUtZXhpc3Rpbmcgb3IgbmV3
bHkgY3JlYXRlZCBud19jb25uZWN0aW9uIHRvIHNlbmQgdGhlIHBhY2tldC4KKworICAgICAgICBN
YWtlIHN1cmUgdG8gY2FuY2VsIE5XIGNvbm5lY3Rpb24gaW4gY2FzZSBvZiBmYWlsdXJlIGJlZm9y
ZSByZWxlYXNpbmcgdGhlIHNvY2tldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1Byb3ZpZGVyOjpjcmVhdGVVRFBTb2Nr
ZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRD
UFNvY2tldCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92
aWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OnNldFBsYXRmb3Jt
VENQU29ja2V0c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6
OnNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2Eu
aC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1NvY2tldENvY29hLm1tLgorICAgICAgICAoV2ViS2l0Ojp0Y3BTb2NrZXRRdWV1
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xp
ZW50VENQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29h
OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRD
VENQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQU29j
a2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6RGVm
YXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1
bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmVxdWFsKToKKyAgICAgICAgKFdURjo6SGFzaFRy
YWl0czxydGM6OlNvY2tldEFkZHJlc3M+OjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6SGFz
aFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAg
ICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmlzRGVsZXRlZFZhbHVl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29h
Q29ubmVjdGlvbnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYUNvbm5lY3Rpb25zOjpXVEZfR1VBUkRFRF9CWV9MT0NLKToKKyAgICAgICAgKFdlYktp
dDo6dWRwU29ja2V0UXVldWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2E6OmNyZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBT
b2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjp+TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjbG9zZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6c2V0T3B0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZW5kVG8pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6TmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hQ29ubmVjdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2FDb25uZWN0aW9uczo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0T3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
cHJvY2Vzc1VEUERhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2FDb25uZWN0aW9uczo6Y3JlYXRlTldDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OnNldHVwTldDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OnNlbmRU
byk6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvd2VicnRj
L0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENT
b2NrZXRGYWN0b3J5OjpzZXRDb25uZWN0aW9uKToKKwogMjAyMS0wNi0xMiAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBOdW1iZXIgcGFkIGJ1dHRvbiBp
cyBtaXNzaW5nIGl0cyBpbWFnZSB3aGVuIHRhcHBpbmcgb24gPGlucHV0IHR5cGU9dGVsPiBpbiB3
YXRjaE9TIDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1
cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9D
b25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cAppbmRleCA3ZDIyNWNjMmM2NGI2NmJmYmMw
ZjJhZWIwZjYxODQyODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZmNmM4N2Q1YzAzYTJlNTg2NTkw
YmVjNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJh
dGlvbnMvbGlid2VicnRjLmlPUy5leHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCkBAIC0zMjEsMyArMzIxLDYgQEAgX19a
TjNydGMxNFJUQ0NlcnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMyN0NyZWF0ZVBlZXJDb25uZWN0
aW9uRmFjdG9yeUVQTjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Njb3BlZF9yZWZwdHJJTlNfMTdB
dWRpb0RldmljZU1vZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29kZXJGYWN0b3J5RUVFTlMzX0lO
U18xOUF1ZGlvRGVjb2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlxdWVfcHRySU5TXzE5VmlkZW9F
bmNvZGVyRmFjdG9yeUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRUVFTlNCX0lOU18xOVZpZGVv
RGVjb2RlckZhY3RvcnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1ZGlvTWl4ZXJFRUVOUzNfSU5T
XzE1QXVkaW9Qcm9jZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVByb2Nlc3NvckUKIF9fWk5LNndl
YnJ0YzIzUnRwVHJhbnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4dGVuc2lvbnNOZWdvdGlhdGVk
RXYKIF9fWk42d2VicnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UyMENyZWF0ZVBl
ZXJDb25uZWN0aW9uRVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVyZmFjZTE2UlRDQ29uZmlndXJh
dGlvbkVOU18yNlBlZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQorX19aTkszcnRjMTNTb2NrZXRB
ZGRyZXNzNEhhc2hFdgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzZXFFUktTMF8KK19fWk5LM3J0
YzlJUEFkZHJlc3M1SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCmluZGV4IDdk
MjI1Y2MyYzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQyOTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2
Yzg3ZDVjMDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAK
QEAgLTMyMSwzICszMjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlmaWNhdGVEMUV2CiBfX1pONndl
YnJ0YzI3Q3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0YzZUaHJlYWRFUzJfUzJfTlMw
XzEzc2NvcGVkX3JlZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxlRUVFTlMzX0lOU18xOUF1ZGlv
RW5jb2RlckZhY3RvcnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVyRmFjdG9yeUVFRU5TdDNfXzEx
MHVuaXF1ZV9wdHJJTlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5TQV8xNGRlZmF1bHRfZGVsZXRl
SVNDX0VFRUVOU0JfSU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVOU0RfSVNHX0VFRUVOUzNfSU5T
XzEwQXVkaW9NaXhlckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3NpbmdFRUVQTlNfMTlBdWRpb0Zy
YW1lUHJvY2Vzc29yRQogX19aTks2d2VicnRjMjNSdHBUcmFuc2NlaXZlckludGVyZmFjZTI2SGVh
ZGVyRXh0ZW5zaW9uc05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMzMFBlZXJDb25uZWN0aW9uRmFj
dG9yeUludGVyZmFjZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktOU18yM1BlZXJDb25uZWN0aW9u
SW50ZXJmYWNlMTZSVENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNvbm5lY3Rpb25EZXBlbmRlbmNp
ZXNFCitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2CitfX1pOSzNydGMxM1NvY2tldEFk
ZHJlc3NlcUVSS1MwXworX19aTkszcnRjOUlQQWRkcmVzczVJc05pbEV2CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5l
eHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRj
Lm1hYy5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4u
MDlkM2NjZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJy
dGMubWFjLmV4cApAQCAtMzIxLDMgKzMyMSw2IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitfX1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4
cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZl
cmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKaW5kZXggZDQyYjIzYjZhYmJlNzU3NjQzZmFmMTM3ZTNi
Yjk1NDY0MmFjNTg3Zi4uMjY1OTc5MjZmNTc3ZWY5MGE3YmNhZTMxNDgwMjU0YTY2YWQ4ODlkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKQEAgLTEyOTcsMTYgKzEyOTcsMjYgQEAgV2Vi
UlRDUGxhdGZvcm1Db2RlY3NJbkdQVVByb2Nlc3NFbmFibGVkOgogICAgIFdlYkNvcmU6CiAgICAg
ICBkZWZhdWx0OiBmYWxzZQogCi1XZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkOgorV2ViUlRD
UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBodW1hblJlYWRhYmxl
TmFtZTogIldlYlJUQyBQbGF0Zm9ybSBTb2NrZXRzIgotICBodW1hblJlYWRhYmxlRGVzY3JpcHRp
b246ICJFbmFibGUgV2ViUlRDIFBsYXRmb3JtIFNvY2tldHMiCisgIGh1bWFuUmVhZGFibGVOYW1l
OiAiV2ViUlRDIFBsYXRmb3JtIFRDUCBTb2NrZXRzIgorICBodW1hblJlYWRhYmxlRGVzY3JpcHRp
b246ICJFbmFibGUgV2ViUlRDIFBsYXRmb3JtIFRDUCBTb2NrZXRzIgogICB3ZWJjb3JlQmluZGlu
ZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwogICBjb25kaXRpb246IEVOQUJMRShXRUJfUlRDKQog
ICBkZWZhdWx0VmFsdWU6CiAgICAgV2ViS2l0OgogICAgICAgZGVmYXVsdDogdHJ1ZQogCitXZWJS
VENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkOgorICB0eXBlOiBib29sCisgIGh1bWFuUmVhZGFi
bGVOYW1lOiAiV2ViUlRDIFBsYXRmb3JtIFVEUCBTb2NrZXRzIgorICBodW1hblJlYWRhYmxlRGVz
Y3JpcHRpb246ICJFbmFibGUgV2ViUlRDIFBsYXRmb3JtIFVEUCBTb2NrZXRzIgorICB3ZWJjb3Jl
QmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcworICBjb25kaXRpb246IEVOQUJMRShXRUJf
UlRDKQorICBkZWZhdWx0VmFsdWU6CisgICAgV2ViS2l0OgorICAgICAgZGVmYXVsdDogZmFsc2UK
KwogV2ViUlRDVlA5UHJvZmlsZTBDb2RlY0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJXZWJSVEMgVlA5IHByb2ZpbGUgMCBjb2RlYyIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5kZXggZDA3NzRmZDkxMTY2YjJiOTc3
ZjJlOTMwYzU5MDlmMzVhMjE1YmU4ZS4uZTE2Y2I1ZDE1NzYyMTg2NTUwZjk1YmFhYTJmYjRlZThj
YTM2ZDZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgKQEAgLTE2Myw4ICsxNjMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2ViUlRDTUROU0lD
RUNhbmRpZGF0ZXNFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENNRE5TSUNFQ2Fu
ZGlkYXRlc0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHdlYlJUQ0gyNjRTaW11bGNh
c3RFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVk
OyB9CiAgICAgdm9pZCBzZXRXZWJSVENIMjY0U2ltdWxjYXN0RW5hYmxlZChib29sIGlzRW5hYmxl
ZCkgeyBtX2lzV2ViUlRDSDI2NFNpbXVsY2FzdEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KLSAgICBi
b29sIHdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2Vi
UlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZDsgfQotICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZvcm1T
b2NrZXRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1Tb2NrZXRz
RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQorICAgIGJvb2wgd2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFi
bGVkOyB9CisgICAgdm9pZCBzZXRXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKGJvb2wg
aXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0gaXNFbmFi
bGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lk
IHNldFdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9p
c1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KICNlbmRpZgog
CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC0zMTksNyArMzIxLDggQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNXZWJSVENWUDlQcm9maWxlMENvZGVjRW5hYmxlZCB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2lzV2ViUlRDVlA5UHJvZmlsZTJDb2RlY0VuYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc1dlYlJUQ0gyNjRMb3dMYXRlbmN5RW5jb2RlckVuYWJsZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pc1dlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJsZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQgeyBmYWxzZSB9Owog
I2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3Bw
CmluZGV4IDQwNzc1MTM2NDM0NzI1YzQzM2ViYWNmZmU0YmNkOGU0NWVlYjg5NzcuLjU1YTYwMWJi
YmEyMWY4YjY1ZTY1ZTE0ZTE3MDgyNGYyYWFlNjg0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcApA
QCAtNDYsNyArNDYsOCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTmV0d29y
a1JUQ1Jlc29sdmVyQ29jb2EuaCIKLSNpbmNsdWRlICJOZXR3b3JrUlRDU29ja2V0Q29jb2EuaCIK
KyNpbmNsdWRlICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEz
Nyw2ICsxMzgsMTUgQEAgdm9pZCBOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZVNvY2tldChMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIHN0ZDoKIAogdm9pZCBOZXR3b3JrUlRD
UHJvdmlkZXI6OmNyZWF0ZVVEUFNvY2tldChMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50
aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIHVpbnQxNl90
IG1pblBvcnQsIHVpbnQxNl90IG1heFBvcnQpCiB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
aWYgKG1fcGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCkgeworICAgICAgICBpZiAoYXV0byBzb2Nr
ZXQgPSBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZVVEUFNvY2tldChpZGVudGlmaWVy
LCAqdGhpcywgYWRkcmVzcy52YWx1ZSwgbWluUG9ydCwgbWF4UG9ydCwgbV9pcGNDb25uZWN0aW9u
LmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgIGFkZFNvY2tldChpZGVudGlmaWVyLCBXVEZNb3Zl
KHNvY2tldCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlm
CisKICAgICBBU1NFUlQobV9ydGNOZXR3b3JrVGhyZWFkLklzQ3VycmVudCgpKTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8cnRjOjpBc3luY1BhY2tldFNvY2tldD4gc29ja2V0KG1fcGFja2V0U29ja2V0
RmFjdG9yeS0+Q3JlYXRlVWRwU29ja2V0KGFkZHJlc3MudmFsdWUsIG1pblBvcnQsIG1heFBvcnQp
KTsKICAgICBjcmVhdGVTb2NrZXQoaWRlbnRpZmllciwgV1RGTW92ZShzb2NrZXQpLCBTb2NrZXQ6
OlR5cGU6OlVEUCwgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSk7CkBAIC0xODEsOCArMTkxLDgg
QEAgdm9pZCBOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWYKICAgICAgICAgfQogICAgICAgICBjYWxsT25SVENO
ZXR3b3JrVGhyZWFkKFt0aGlzLCBpZGVudGlmaWVyLCBsb2NhbEFkZHJlc3MgPSBSVENOZXR3b3Jr
Ojppc29sYXRlZENvcHkobG9jYWxBZGRyZXNzLnZhbHVlKSwgcmVtb3RlQWRkcmVzcyA9IFJUQ05l
dHdvcms6Omlzb2xhdGVkQ29weShyZW1vdGVBZGRyZXNzLnZhbHVlKSwgcHJveHlJbmZvID0gcHJv
eHlJbmZvRnJvbVNlc3Npb24ocmVtb3RlQWRkcmVzcywgKnNlc3Npb24pLCB1c2VyQWdlbnQgPSBX
VEZNb3ZlKHVzZXJBZ2VudCkuaXNvbGF0ZWRDb3B5KCksIG9wdGlvbnNdKCkgbXV0YWJsZSB7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICBpZiAobV9wbGF0Zm9ybVNvY2tldHNFbmFi
bGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1NvY2tl
dENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoaWRlbnRpZmllciwgKnRoaXMsIHJlbW90ZUFk
ZHJlc3MsIG9wdGlvbnMsIG1faXBjQ29ubmVjdGlvbi5jb3B5UmVmKCkpKSB7CisgICAgICAgICAg
ICBpZiAobV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8gc29ja2V0ID0gTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BT
b2NrZXQoaWRlbnRpZmllciwgKnRoaXMsIHJlbW90ZUFkZHJlc3MsIG9wdGlvbnMsIG1faXBjQ29u
bmVjdGlvbi5jb3B5UmVmKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFNvY2tldChpZGVu
dGlmaWVyLCBXVEZNb3ZlKHNvY2tldCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuaAppbmRleCBiMGNmNzBmMDZlMTE4ZTAyMWQ4
NjRkZWI5OGQ0MTRlZmJhOWU3YzQyLi43NDg2NzFjNjhiZjdkMDJhOGQ4MTY0ODM1YzRiMTZmN2U2
OGEwN2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9O
ZXR3b3JrUlRDUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dl
YnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuaApAQCAtMTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKIAog
ICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1faXBjQ29ubmVjdGlv
bi5nZXQoKTsgfQogCisgICAgdm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2Nr
ZXRJZGVudGlmaWVyKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBOZXR3b3JrUlRDUHJvdmlk
ZXIoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmKTsKICAgICB2b2lkIHN0YXJ0TGlzdGVu
aW5nRm9ySVBDKCk7CkBAIC0xMTIsOSArMTE0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0
ZVNlcnZlclRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBjb25z
dCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3Qg
bWF4UG9ydCwgaW50KTsKICAgICB2b2lkIHdyYXBOZXdUQ1BDb25uZWN0aW9uKFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6TGliV2ViUlRDU29j
a2V0SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0SWRlbnRpZmllcik7CiAgICAgdm9pZCBz
ZW5kVG9Tb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyYmLCBSVENQYWNrZXRP
cHRpb25zJiYpOwotICAgIHZvaWQgY2xvc2VTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllcik7CiAgICAgdm9pZCBzZXRTb2NrZXRPcHRpb24oV2ViQ29yZTo6TGliV2ViUlRD
U29ja2V0SWRlbnRpZmllciwgaW50IG9wdGlvbiwgaW50IHZhbHVlKTsKLSAgICB2b2lkIHNldFBs
YXRmb3JtU29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGxhdGZvcm1Tb2NrZXRzRW5h
YmxlZCA9IGVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFBsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQo
Ym9vbCBlbmFibGVkKSB7IG1fcGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCA9IGVuYWJsZWQ7IH0K
KyAgICB2b2lkIHNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1f
cGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KIAogICAgIHZvaWQgY3JlYXRl
UmVzb2x2ZXIoTGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyLCBTdHJpbmcmJik7CiAgICAgdm9p
ZCBzdG9wUmVzb2x2ZXIoTGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyKTsKQEAgLTE0NCw3ICsx
NDYsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPHJ0Yzo6QXN5bmNQYWNrZXRTb2NrZXQ+PiBtX3BlbmRp
bmdJbmNvbWluZ1NvY2tldHM7CiAgICAgYm9vbCBtX2lzTGlzdGVuaW5nU29ja2V0QXV0aG9yaXpl
ZCB7IHRydWUgfTsKICAgICBib29sIG1fY2FuTG9nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcGxh
dGZvcm1Tb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3BsYXRmb3JtVENQU29j
a2V0c0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFi
bGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1Byb3ZpZGVyLm1lc3NhZ2VzLmluCmluZGV4IDExNzI5OTA3MGZjMjY4MDJmMTBmOTM5OGJkMDE4
NTUzOWMyMzBkN2YuLmJmZGRkYTc5OTgzNmE0NTBkOGI1OTkyZDk1MTgyNTE1OGM2MzFjNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dl
YnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMuaW4KQEAgLTI4LDcgKzI4LDggQEAgbWVz
c2FnZXMgLT4gTmV0d29ya1JUQ1Byb3ZpZGVyIHsKICAgICBDcmVhdGVDbGllbnRUQ1BTb2NrZXQo
V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlJU
Q05ldHdvcms6OlNvY2tldEFkZHJlc3MgbG9jYWxBZGRyZXNzLCBXZWJLaXQ6OlJUQ05ldHdvcms6
OlNvY2tldEFkZHJlc3MgcmVtb3RlQWRkcmVzcywgU3RyaW5nIHVzZXJBZ2VudCwgaW50IG9wdGlv
bnMpCiAgICAgV3JhcE5ld1RDUENvbm5lY3Rpb24oV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5l
d0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKQogCi0gICAgdm9pZCBTZXRQbGF0Zm9ybVNvY2tl
dHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVENQU29ja2V0c0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQorICAgIHZvaWQgU2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiAKICAgICBDcmVhdGVSZXNvbHZlcihXZWJLaXQ6OkxpYldlYlJUQ1Jl
c29sdmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBTdHJpbmcgYWRkcmVzcykKICAgICBTdG9wUmVz
b2x2ZXIoV2ViS2l0OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIgaWRlbnRpZmllcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENT
b2NrZXRDb2NvYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29y
a1JUQ1NvY2tldENvY29hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNWJkMzNi
MGM1NDI2NzhiMmIyYjBmOGRmOGJiNGYwNTJmMGQ4NjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJy
dGMvTmV0d29ya1JUQ1NvY2tldENvY29hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFU
Rk9STShDT0NPQSkKLQotI2luY2x1ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgotI2luY2x1ZGUg
PE5ldHdvcmsvTmV0d29yay5oPgotCi1uYW1lc3BhY2UgcnRjIHsKLWNsYXNzIFNvY2tldEFkZHJl
c3M7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXR3b3JrUlRDU29ja2V0Q29j
b2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNyZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3Jl
OjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7
Ci0KLSAgICBOZXR3b3JrUlRDU29ja2V0Q29jb2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwg
aW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOwotCi1wcml2YXRlOgotICAgIC8v
IE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0LgotICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tl
dElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRD
UDsgfQotICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKLSAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0
aW9uLCBpbnQgdmFsdWUpIGZpbmFsOwotICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9u
cyYpIGZpbmFsOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29u
c3QgdWludDhfdCosIHNpemVfdCk7Ci0KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVu
dGlmaWVyIG1faWRlbnRpZmllcjsKLSAgICBOZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlk
ZXI7Ci0gICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotICAgIFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+IG1fbndDb25uZWN0aW9uOwotICAgIGJvb2wgbV9pc1NUVU4geyBm
YWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoTElC
V0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE1NjUyYjBlNWVkMzkzY2Q2MWQxODM3YWJhOWZjZmU1
MTU2MDExYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2Eu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0d29ya1JUQ1NvY2tldENvY29hLmgiCi0KLSNpZiBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKLQotI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2Uu
aCIKLSNpbmNsdWRlICJMaWJXZWJSVENOZXR3b3JrTWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
Ci0jaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3Qgc29ja2V0UXVl
dWUoKQotewotICAgIHN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlOwotICAgIHN0YXRpYyBk
aXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwg
XnsKLSAgICAgICAgcXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoIldlYlJUQyBzb2NrZXQg
cXVldWUiLCBESVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKLSAgICB9KTsKLSAgICByZXR1cm4g
cXVldWU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4g
TmV0d29ya1JUQ1NvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRDU29j
a2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVy
LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRpb25z
LCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCi17Ci0gICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtaWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9UTFNf
SU5TRUNVUkUgYXMgd2VsbC4KLSAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tl
dEZhY3Rvcnk6Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tl
dEZhY3Rvcnk6Ok9QVF9UTFNfSU5TRUNVUkUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxOZXR3b3JrUlRDU29ja2V0Q29jb2E+KGlkZW50aWZpZXIsIHJ0
Y1Byb3ZpZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5lY3Rpb24p
KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0YWluUHRy
PG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1aW50OF90
PihWZWN0b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90PiYmIGJ1
ZmZlciA9IHsgfSkKLXsKLSAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53Q29ubmVj
dGlvbi5nZXQoKTsKLSAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9uUmVmZXJl
bmNlLCAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VCbG9ja1B0
cihbbndDb25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0YSA9IFdU
Rk1vdmUocHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3BhdGNoX2Rh
dGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxl
dGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoY29udGVudCkgewot
ICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZd
KGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBwZW5kIHZl
cnNpb24uCi0gICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oZGF0YSksIHNpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfSkuZ2V0KCkpOwotICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0RhdGEoV1RG
TW92ZShidWZmZXIpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiBjb250
ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgcHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUo
cHJvY2Vzc0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOwotICAgIH0pLmdldCgpKTsKLX0KLQotTmV0
d29ya1JUQ1NvY2tldENvY29hOjpOZXR3b3JrUlRDU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCi0gICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKLSAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCi0gICAgLCBtX2Nvbm5lY3Rp
b24oV1RGTW92ZShjb25uZWN0aW9uKSkKLSAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBh
Y2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQotewotICAgIGF1dG8gaG9zdE5hbWUgPSByZW1v
dGVBZGRyZXNzLmhvc3RuYW1lKCk7Ci0gICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCi0gICAgICAg
IGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOwotICAgIGF1dG8g
aG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwg
U3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90
aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zl
cmlmeV9ibG9jawotICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRG
YWN0b3J5OjpPUFRfVExTOwotICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJz
X2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VS
QVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0
aW9uc190IHRjcF9vcHRpb25zKSB7Ci0gICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxh
eSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7Ci0gICAgfSkpOwotCi0gICAgbV9ud0Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOwot
Ci0gICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHNvY2tl
dFF1ZXVlKCkpOwotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlciht
X253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFi
bGUgbndfZXJyb3JfdCBlcnJvcikgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJy
b3IpOwotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV9pbnZhbGlkOgotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGlu
ZzoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgotICAg
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2ln
bmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6Ci0gICAgICAgICAgICBydGNQcm92aWRl
ci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKLSAg
ICAgICAgICAgICAgICBydGNQcm92aWRlci0+dGFrZVNvY2tldChpZGVudGlmaWVyKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2Vi
UlRDTmV0d29yazo6U2lnbmFsQ2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0pLmdldCgpKTsKLQotICAgIHByb2Nl
c3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9pZGVu
dGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1vdGVB
ZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9IG1f
aXNTVFVOXShhdXRvJiYgYnVmZmVyKSBtdXRhYmxlIHsKLSAgICAgICAgcmV0dXJuIFdlYlJUQzo6
ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUoYnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNzYWdl
VHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVzc2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNzYWdl
LCBhdXRvIHNpemUpIHsKLSAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3Nh
Z2UsIHNpemUpOwotICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2Vi
UlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05ldHdv
cms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAwKTsK
LSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndDb25u
ZWN0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNsb3NlKCkK
LXsKLSAgICBpZiAoIW1fbndDb25uZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgbndfY29u
bmVjdGlvbl9jYW5jZWwobV9ud0Nvbm5lY3Rpb24uZ2V0KCkpOwotICAgIG1fcnRjUHJvdmlkZXIu
dGFrZVNvY2tldChtX2lkZW50aWZpZXIpOwotfQotCi12b2lkIE5ldHdvcmtSVENTb2NrZXRDb2Nv
YTo6c2V0T3B0aW9uKGludCwgaW50KQotewotICAgIC8vIEZJWE1FOiBWYWxpZGF0ZSB0aGlzIGlz
IG5vdCBuZWVkZWQuCi19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0YV90PiBkYXRh
RnJvbVZlY3RvcihWZWN0b3I8dWludDhfdD4mJiB2KQotewotICAgIGF1dG8gYnVmZmVyU2l6ZSA9
IHYuc2l6ZSgpOwotICAgIGF1dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZlcigpLmxlYWtQ
dHIoKTsKLSAgICByZXR1cm4gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShyYXdQb2ludGVy
LCBidWZmZXJTaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBmYXN0
RnJlZShyYXdQb2ludGVyKTsKLSAgICB9KSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBOZXR3b3Jr
UlRDU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MTZfdD46Om1heCgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKG1faXNTVFVOKSB7
Ci0gICAgICAgIGF1dG8gbWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNUVU5PclRVUk5NZXNz
YWdlTGVuZ3RocyhkYXRhLCBzaXplKTsKLSAgICAgICAgaWYgKCFtZXNzYWdlTGVuZ3RocykKLSAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoID09IHNpemUpOwotICAgICAgICBBU1NFUlQobWVzc2FnZUxlbmd0aHMtPm1l
c3NhZ2VMZW5ndGhXaXRoUGFkZGluZyA+PSBzaXplKTsKLSAgICAgICAgaWYgKG1lc3NhZ2VMZW5n
dGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPCBzaXplKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLQotICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBidWZmZXIu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQ
YWRkaW5nKTsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsKLSAgICAgICAgZm9y
IChzaXplX3QgY3B0ciA9IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhX
aXRoUGFkZGluZyAtIHNpemU7ICsrY3B0cikKLSAgICAgICAgICAgIGJ1ZmZlci51bmNoZWNrZWRB
cHBlbmQoMCk7Ci0gICAgICAgIHJldHVybiBidWZmZXI7Ci0gICAgfQotCi0gICAgLy8gUHJlcGVu
ZCBsZW5ndGguCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICBidWZmZXIucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaXplICsgMik7Ci0gICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgo
c2l6ZSA+PiA4KSAmIDB4RkYpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoc2l6ZSAmIDB4
RkYpOwotICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsK
LX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OnNlbmRUbyhjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3QgcnRjOjpQ
YWNrZXRPcHRpb25zJiBvcHRpb25zKQotewotICAgIGF1dG8gYnVmZmVyID0gY3JlYXRlTWVzc2Fn
ZUJ1ZmZlcihkYXRhLCBzaXplKTsKLSAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25uZWN0aW9uLmdldCgpLCBk
YXRhRnJvbVZlY3RvcihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19DT05ORUNUSU9OX0RFRkFV
TFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lkZW50aWZpZXIgPSBtX2lk
ZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJlZigpLCBvcHRpb25zXShf
TnVsbGFibGUgbndfZXJyb3JfdCkgewotICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRlbnRpZmllciwgb3B0aW9u
cy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOwotICAgIH0pLmdldCgpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQ
TEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJm
ZDlkMzY5MmZjYTUyMTI1MmZiYzFiY2RjZGExOWRlYzMzMWE4YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRD
b2NvYS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiTmV0d29ya1JU
Q1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+CisKK25hbWVzcGFjZSBy
dGMgeworY2xhc3MgU29ja2V0QWRkcmVzczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJv
dmlkZXI6OlNvY2tldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3Jl
YXRlQ2xpZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5l
dHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25z
LCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKworICAgIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2Nv
YShXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXIm
LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJik7CisKK3ByaXZhdGU6CisgICAgLy8gTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQu
CisgICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gVHlwZTo6Q2xpZW50VENQOyB9CisgICAgdm9pZCBjbG9zZSgpIGZpbmFs
OworICAgIHZvaWQgc2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkgZmluYWw7CisgICAg
dm9pZCBzZW5kVG8oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJikgZmluYWw7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4gY3JlYXRlTWVzc2FnZUJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAg
IFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE5l
dHdvcmtSVENQcm92aWRlciYgbV9ydGNQcm92aWRlcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247CisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9ud0Nvbm5l
Y3Rpb247CisgICAgYm9vbCBtX2lzU1RVTiB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxNTIxNGQ0YzQxMTI4OWJj
MTQxZmFhMTdmNWU0NzBkOWUxZWIwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0KQEAgLTAs
MCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIk5l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorCisjaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZP
Uk0oQ09DT0EpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiTGliV2Vi
UlRDTmV0d29ya01lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBhcnNp
bmcuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2luY2x1ZGUgPHd0Zi9CbG9j
a1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHRjcFNvY2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIHF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgVENQIHNvY2tldCBxdWV1ZSIsIERJU1BB
VENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOworICAgIHJldHVybiBxdWV1ZTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChMaWJXZWJSVENTb2NrZXRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgaW50IHRjcE9wdGlvbnMsIFJlZjxJUEM6
OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1p
Z3JhdGUgc3NsdGNwIGNhbmRpZGF0ZXMsIG1heWJlIHN1cHBvcnQgT1BUX1RMU19JTlNFQ1VSRSBh
cyB3ZWxsLgorICAgIGlmICgodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6
T1BUX1RMU19GQUtFKSB8fCAodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6
T1BUX1RMU19JTlNFQ1VSRSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBt
YWtlVW5pcXVlPE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYT4oaWRlbnRpZmllciwgcnRjUHJvdmlk
ZXIsIHJlbW90ZUFkZHJlc3MsIHRjcE9wdGlvbnMsIFdURk1vdmUoY29ubmVjdGlvbikpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc0luY29taW5nRGF0YShSZXRhaW5QdHI8bndfY29u
bmVjdGlvbl90PiYmIG53Q29ubmVjdGlvbiwgRnVuY3Rpb248VmVjdG9yPHVpbnQ4X3Q+KFZlY3Rv
cjx1aW50OF90PiYmKT4mJiBwcm9jZXNzRGF0YSwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyID0g
eyB9KQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdl
dCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEs
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nv
bm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShw
cm9jZXNzRGF0YSksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oZGlzcGF0Y2hfZGF0YV90IGNv
bnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wgaXNDb21wbGV0ZSwgbndf
ZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAg
ICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9ja1B0cihbJl0oZGlzcGF0
Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEludHJvZHVjZSB1bmNoZWNrZWRBcHBlbmQgdmVyc2lvbi4K
KyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9KS5nZXQoKSk7CisgICAgICAgICAgICBidWZmZXIgPSBwcm9jZXNzRGF0YShXVEZNb3ZlKGJ1
ZmZlcikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbXBsZXRlICYmIGNvbnRleHQgJiYg
bndfY29udGVudF9jb250ZXh0X2dldF9pc19maW5hbChjb250ZXh0KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBw
cm9jZXNzSW5jb21pbmdEYXRhKFdURk1vdmUobndDb25uZWN0aW9uKSwgV1RGTW92ZShwcm9jZXNz
RGF0YSksIFdURk1vdmUoYnVmZmVyKSk7CisgICAgfSkuZ2V0KCkpOworfQorCitOZXR3b3JrUlRD
VENQU29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYShMaWJXZWJSVENTb2NrZXRJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNv
bnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgaW50IG9wdGlvbnMsIFJlZjxJ
UEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKKyAgICA6IG1faWRlbnRpZmllcihpZGVudGlm
aWVyKQorICAgICwgbV9ydGNQcm92aWRlcihydGNQcm92aWRlcikKKyAgICAsIG1fY29ubmVjdGlv
bihXVEZNb3ZlKGNvbm5lY3Rpb24pKQorICAgICwgbV9pc1NUVU4ob3B0aW9ucyAmIHJ0Yzo6UGFj
a2V0U29ja2V0RmFjdG9yeTo6T1BUX1NUVU4pCit7CisgICAgYXV0byBob3N0TmFtZSA9IHJlbW90
ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBpZiAoaG9zdE5hbWUuZW1wdHkoKSkKKyAgICAgICAg
aG9zdE5hbWUgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5nKCk7CisgICAgYXV0byBo
b3N0ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9zdChob3N0TmFtZS5jX3N0cigpLCBT
dHJpbmc6Om51bWJlcihyZW1vdGVBZGRyZXNzLnBvcnQoKSkudXRmOCgpLmRhdGEoKSkpOworICAg
IC8vIEZJWE1FOiBIYW5kbGUgVExTIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gbGlrZSBmb3Igb3Ro
ZXIgbmV0d29yayBjb2RlIHBhdGhzLCB1c2luZyBzZWNfcHJvdG9jb2xfb3B0aW9uc19zZXRfdmVy
aWZ5X2Jsb2NrCisgICAgYm9vbCBpc1RMUyA9IG9wdGlvbnMgJiBydGM6OlBhY2tldFNvY2tldEZh
Y3Rvcnk6Ok9QVF9UTFM7CisgICAgYXV0byB0Y3BUTFMgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNf
Y3JlYXRlX3NlY3VyZV90Y3AoaXNUTFMgPyBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklHVVJB
VElPTiA6IE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgXihud19wcm90b2NvbF9vcHRp
b25zX3QgdGNwX29wdGlvbnMpIHsKKyAgICAgICAgbndfdGNwX29wdGlvbnNfc2V0X25vX2RlbGF5
KHRjcF9vcHRpb25zLCB0cnVlKTsKKyAgICB9KSk7CisKKyAgICBtX253Q29ubmVjdGlvbiA9IGFk
b3B0TlMobndfY29ubmVjdGlvbl9jcmVhdGUoaG9zdC5nZXQoKSwgdGNwVExTLmdldCgpKSk7CisK
KyAgICBud19jb25uZWN0aW9uX3NldF9xdWV1ZShtX253Q29ubmVjdGlvbi5nZXQoKSwgdGNwU29j
a2V0UXVldWUoKSk7CisgICAgbndfY29ubmVjdGlvbl9zZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVy
KG1fbndDb25uZWN0aW9uLmdldCgpLCBtYWtlQmxvY2tQdHIoW2lkZW50aWZpZXIgPSBtX2lkZW50
aWZpZXIsIHJ0Y1Byb3ZpZGVyID0gbWFrZVJlZihydGNQcm92aWRlciksIGNvbm5lY3Rpb24gPSBt
X2Nvbm5lY3Rpb24uY29weVJlZigpXShud19jb25uZWN0aW9uX3N0YXRlX3Qgc3RhdGUsIF9OdWxs
YWJsZSBud19lcnJvcl90IGVycm9yKSB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFl
cnJvcik7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19jb25uZWN0
aW9uX3N0YXRlX2ludmFsaWQ6CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV93YWl0
aW5nOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfcHJlcGFyaW5nOgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfcmVhZHk6Cisg
ICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpT
aWduYWxDb25uZWN0KGlkZW50aWZpZXIpLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2ZhaWxlZDoKKyAgICAgICAgICAgIHJ0Y1Byb3Zp
ZGVyLT5jYWxsT25SVENOZXR3b3JrVGhyZWFkKFtydGNQcm92aWRlciwgaWRlbnRpZmllcl0gewor
ICAgICAgICAgICAgICAgIHJ0Y1Byb3ZpZGVyLT5jbG9zZVNvY2tldChpZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsQ2xvc2UoaWRlbnRpZmllciwgLTEpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX2NhbmNlbGxlZDoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIHBy
b2Nlc3NJbmNvbWluZ0RhdGEobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIFtpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1v
dGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCksIGlzU1RVTiA9
IG1faXNTVFVOXShhdXRvJiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIFdlYlJU
Qzo6ZXh0cmFjdE1lc3NhZ2VzKFdURk1vdmUoYnVmZmVyKSwgaXNTVFVOID8gV2ViUlRDOjpNZXNz
YWdlVHlwZTo6U1RVTiA6IFdlYlJUQzo6TWVzc2FnZVR5cGU6OkRhdGEsIFsmXShhdXRvKiBtZXNz
YWdlLCBhdXRvIHNpemUpIHsKKyAgICAgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1l
c3NhZ2UsIHNpemUpOworICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGli
V2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJUQ05l
dHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9LCAw
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0YXJ0KG1fbndD
b25uZWN0aW9uLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNs
b3NlKCkKK3sKKyAgICBpZiAoIW1fbndDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
bndfY29ubmVjdGlvbl9jYW5jZWwobV9ud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fcnRjUHJv
dmlkZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYTo6c2V0T3B0aW9uKGludCwgaW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0
ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9CisKK3N0YXRpYyBSZXRhaW5QdHI8ZGlzcGF0Y2hfZGF0
YV90PiBkYXRhRnJvbVZlY3RvcihWZWN0b3I8dWludDhfdD4mJiB2KQoreworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gcmF3UG9pbnRlciA9IHYucmVsZWFzZUJ1ZmZl
cigpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShy
YXdQb2ludGVyLCBidWZmZXJTaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBmYXN0RnJlZShyYXdQb2ludGVyKTsKKyAgICB9KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPj0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KG1faXNTVFVOKSB7CisgICAgICAgIGF1dG8gbWVzc2FnZUxlbmd0aHMgPSBXZWJSVEM6OmdldFNU
VU5PclRVUk5NZXNzYWdlTGVuZ3RocyhkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFtZXNzYWdl
TGVuZ3RocykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoID09IHNpemUpOworICAgICAgICBBU1NFUlQobWVzc2Fn
ZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyA+PSBzaXplKTsKKyAgICAgICAgaWYg
KG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPCBzaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
ICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXNzYWdlTGVuZ3Rocy0+bWVzc2Fn
ZUxlbmd0aFdpdGhQYWRkaW5nKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkYXRhLCBzaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9IDAgOyBjcHRyIDwgbWVzc2FnZUxlbmd0aHMtPm1l
c3NhZ2VMZW5ndGhXaXRoUGFkZGluZyAtIHNpemU7ICsrY3B0cikKKyAgICAgICAgICAgIGJ1ZmZl
ci51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisg
ICAgLy8gUHJlcGVuZCBsZW5ndGguCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBi
dWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplICsgMik7CisgICAgYnVmZmVyLnVuY2hl
Y2tlZEFwcGVuZCgoc2l6ZSA+PiA4KSAmIDB4RkYpOworICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBl
bmQoc2l6ZSAmIDB4RkYpOworICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNlbmRUbyhj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gYnVmZmVy
ID0gY3JlYXRlTWVzc2FnZUJ1ZmZlcihkYXRhLCBzaXplKTsKKyAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbndfY29ubmVjdGlvbl9zZW5kKG1fbndDb25u
ZWN0aW9uLmdldCgpLCBkYXRhRnJvbVZlY3RvcihXVEZNb3ZlKGJ1ZmZlcikpLmdldCgpLCBOV19D
T05ORUNUSU9OX0RFRkFVTFRfTUVTU0FHRV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpLCBvcHRpb25zXShfTnVsbGFibGUgbndfZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRl
bnRpZmllciwgb3B0aW9ucy5wYWNrZXRfaWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAg
IH0pLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2E3NTEyOWJmZGUyZTY3YjFmYjJmYjAwNTg5ZTlmMjViMDUxM2M0NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5j
bHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1l
c3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+IHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3Mp
IHsgcmV0dXJuIGFkZHJlc3MuSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiBhLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGIpIHsgcmV0
dXJuIGEgPT0gYiB8fCAoYS5Jc05pbCgpICYmIGIuSXNOaWwoKSAmJiBhLnNjb3BlX2lkKCkgPT0g
Yi5zY29wZV9pZCgpKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBHZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFk
ZHJlc3M+IHsKKyAgICBzdGF0aWMgcnRjOjpTb2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9
OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNj
b3BlX2lkKCkgPT0gLTE7IH0KK307CisKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOworCitjbGFzcyBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IGNyZWF0ZVVEUFNvY2tldChX
ZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBj
b25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50MTZfdCBtYXhQ
b3J0LCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKworICAgIE5ldHdvcmtSVENVRFBTb2NrZXRD
b2NvYShXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlk
ZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsK
KyAgICB+TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKCk7CisKK3ByaXZhdGU6CisgICAgLy8gTmV0
d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQuCisgICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6VURQOyB9CisgICAg
dm9pZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQgc2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2
YWx1ZSkgZmluYWw7CisgICAgdm9pZCBzZW5kVG8oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29u
c3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25zJikgZmluYWw7
CisKKyAgICBOZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgV2ViQ29yZTo6
TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgUmVmPE5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zPiBtX253Q29ubmVjdGlvbnM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JN
KENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMzllODVi
ZTgyOWZkYTQzOGFlZWYzOWZkMGRjNTA2MzA2YzUwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2Eu
bW0KQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIgorCisjaWYgVVNFKExJQldFQlJUQykg
JiYgUExBVEZPUk0oQ09DT0EpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVk
ZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU1RVTk1lc3NhZ2VQYXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gv
ZGlzcGF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvQmxvY2tQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitjbGFzcyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FD
b25uZWN0aW9ucz4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya1JUQ1VEUFNvY2tl
dENvY29hQ29ubmVjdGlvbnM+IGNyZWF0ZShXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcHJvdmlkZXIsIGNvbnN0IHJ0Yzo6
U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9u
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zKGlkZW50aWZpZXIsIHByb3ZpZGVyLCBhZGRyZXNzLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKSk7
IH0KKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBp
bnQgdmFsdWUpOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0
IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpOworCitwcml2
YXRlOgorICAgIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zKFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6
U29ja2V0QWRkcmVzcyYsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCisgICAgUmV0YWluUHRy
PG53X2Nvbm5lY3Rpb25fdD4gY3JlYXRlTldDb25uZWN0aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRk
cmVzcyYpOworICAgIHZvaWQgc2V0dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90LCBjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmKTsKKworICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVj
dGlvbjsKKyAgICBydGM6OlNvY2tldEFkZHJlc3MgbV9hZGRyZXNzOworICAgIFJldGFpblB0cjxu
d19saXN0ZW5lcl90PiBtX253TGlzdGVuZXI7CisgICAgTG9jayBtX253Q29ubmVjdGlvbnNMb2Nr
OworICAgIGJvb2wgbV9pc0Nsb3NlZCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbndDb25uZWN0aW9u
c0xvY2spIHsgZmFsc2UgfTsKKyAgICBIYXNoTWFwPHJ0Yzo6U29ja2V0QWRkcmVzcywgUmV0YWlu
UHRyPG53X2Nvbm5lY3Rpb25fdD4+IG1fbndDb25uZWN0aW9ucyBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fbndDb25uZWN0aW9uc0xvY2spOworfTsKKworc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgdWRw
U29ja2V0UXVldWUoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlOworICAg
IHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2VUb2tlbiwgXnsKKyAgICAgICAgcXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoIldlYlJU
QyBVRFAgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7CisgICAgfSk7
CisgICAgcmV0dXJuIHF1ZXVlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3Zp
ZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KFdl
YkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1By
b3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCB1
aW50MTZfdCBtaW5Qb3J0LCB1aW50MTZfdCBtYXhQb3J0LCBSZWY8SVBDOjpDb25uZWN0aW9uPiYm
IGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6IERlY2lkZSBob3cgdG8gdXNlIG1pblBvcnQv
bWF4UG9ydC4KKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E+
KGlkZW50aWZpZXIsIHJ0Y1Byb3ZpZGVyLCBhZGRyZXNzLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsK
K30KKworTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2Eo
V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRD
UHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3Ms
IFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKKyAgICA6IG1fcnRjUHJvdmlkZXIo
cnRjUHJvdmlkZXIpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fbndD
b25uZWN0aW9ucyhOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3JlYXRlKGlk
ZW50aWZpZXIsIHJ0Y1Byb3ZpZGVyLCBhZGRyZXNzLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKSkKK3sK
K30KKworTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjp+TmV0d29ya1JUQ1VEUFNvY2tldENvY29h
KCkKK3sKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3NlKCkKK3sKKyAg
ICBtX253Q29ubmVjdGlvbnMtPmNsb3NlKCk7CisgICAgbV9ydGNQcm92aWRlci50YWtlU29ja2V0
KG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRP
cHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKQoreworICAgIG1fbndDb25uZWN0aW9ucy0+c2V0
T3B0aW9uKG9wdGlvbiwgdmFsdWUpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2Nv
YTo6c2VuZFRvKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmIGFkZHJlc3MsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBtX253Q29ubmVjdGlvbnMtPnNlbmRUbyhkYXRhLCBzaXplLCBhZGRyZXNzLCBvcHRp
b25zKTsKK30KKworTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5l
Y3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fY29ubmVjdGlv
bihXVEZNb3ZlKGNvbm5lY3Rpb24pKQoreworICAgIGF1dG8gcGFyYW1ldGVycyA9IGFkb3B0TlMo
bndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3VkcChOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJP
VE9DT0wsIE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OKSk7CisgICAgeworICAg
ICAgICBhdXRvIGhvc3RBZGRyZXNzID0gYWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAg
ICAgICBpZiAoYWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICAgICAgaG9zdEFkZHJl
c3MgPSBhZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGF1dG8gbG9jYWxFbmRwb2ludCA9IGFk
b3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdEFkZHJlc3MuY19zdHIoKSwgIjAiKSk7
CisgICAgICAgIG1fYWRkcmVzcyA9IHsgbndfZW5kcG9pbnRfZ2V0X2hvc3RuYW1lKGxvY2FsRW5k
cG9pbnQuZ2V0KCkpLCBud19lbmRwb2ludF9nZXRfcG9ydChsb2NhbEVuZHBvaW50LmdldCgpKSB9
OworICAgICAgICBud19wYXJhbWV0ZXJzX3NldF9sb2NhbF9lbmRwb2ludChwYXJhbWV0ZXJzLmdl
dCgpLCBsb2NhbEVuZHBvaW50LmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHBy
b3RvY29sU3RhY2sgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY29weV9kZWZhdWx0X3Byb3RvY29s
X3N0YWNrKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBvcHRpb25zID0gYWRvcHRO
Uyhud19wcm90b2NvbF9zdGFja19jb3B5X2ludGVybmV0X3Byb3RvY29sKHByb3RvY29sU3RhY2su
Z2V0KCkpKTsKKyAgICAgICAgbndfaXBfb3B0aW9uc19zZXRfdmVyc2lvbihvcHRpb25zLmdldCgp
LCBhZGRyZXNzLmZhbWlseSgpID09IEFGX0lORVQgPyBud19pcF92ZXJzaW9uXzQgOiBud19pcF92
ZXJzaW9uXzYpOworICAgIH0KKworICAgIG1fbndMaXN0ZW5lciA9IGFkb3B0TlMobndfbGlzdGVu
ZXJfY3JlYXRlKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICBud19saXN0ZW5lcl9zZXRfcXVldWUo
bV9ud0xpc3RlbmVyLmdldCgpLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKworICAgIG53X2xpc3RlbmVy
X3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0xpc3RlbmVyLmdldCgpLCBtYWtlQmxvY2tQ
dHIoW253TGlzdGVuZXIgPSBtX253TGlzdGVuZXIuZ2V0KCksIGFkZHJlc3MgPSBtX2FkZHJlc3Ms
IGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJlZigpLCBwcm90ZWN0ZWRSVENQcm92aWRl
ciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyXShud19s
aXN0ZW5lcl9zdGF0ZV90IHN0YXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKKyAgICAg
ICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX2ludmFs
aWQ6CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfd2FpdGluZzoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3JlYWR5OgorICAgICAgICAg
ICAgYWRkcmVzcy5TZXRQb3J0KG53X2xpc3RlbmVyX2dldF9wb3J0KG53TGlzdGVuZXIpKTsKKyAg
ICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNp
Z25hbEFkZHJlc3NSZWFkeShpZGVudGlmaWVyLCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzKGFk
ZHJlc3MpKSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5l
cl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyBmYWlsZWQgd2l0aCBlcnJvciAlZCIs
IGVycm9yID8gbndfZXJyb3JfZ2V0X2Vycm9yX2NvZGUoZXJyb3IpIDogMCk7CisgICAgICAgICAg
ICBwcm90ZWN0ZWRSVENQcm92aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcHJvdGVjdGVk
UlRDUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRSVENQ
cm92aWRlci0+Y2xvc2VTb2NrZXQoaWRlbnRpZmllcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBud19saXN0ZW5lcl9zdGF0ZV9jYW5jZWxsZWQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVyX3NldF9uZXdfY29ubmVj
dGlvbl9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQoKSwgbWFrZUJsb2NrUHRyKFtwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldKG53X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKSB7CisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBwcm90ZWN0ZWRUaGlzLT5tX253Q29ubmVjdGlvbnNMb2NrIH07
CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2lzQ2xvc2VkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGF1dG8gZW5kcG9pbnQgPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY29w
eV9lbmRwb2ludChjb25uZWN0aW9uKSk7CisgICAgICAgIHJ0Yzo6U29ja2V0QWRkcmVzcyByZW1v
dGVBZGRyZXNzIHsgbndfZW5kcG9pbnRfZ2V0X2hvc3RuYW1lKGVuZHBvaW50LmdldCgpKSwgbndf
ZW5kcG9pbnRfZ2V0X3BvcnQoZW5kcG9pbnQuZ2V0KCkpIH07CisKKyAgICAgICAgcHJvdGVjdGVk
VGhpcy0+bV9ud0Nvbm5lY3Rpb25zLnNldChyZW1vdGVBZGRyZXNzLCBjb25uZWN0aW9uKTsKKyAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+c2V0dXBOV0Nvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVtb3Rl
QWRkcmVzcyk7CisgICAgfSkuZ2V0KCkpOworCisgICAgbndfbGlzdGVuZXJfc3RhcnQobV9ud0xp
c3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9uczo6Y2xvc2UoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX253Q29ubmVjdGlvbnNMb2Nr
IH07CisgICAgbV9pc0Nsb3NlZCA9IHRydWU7CisKKyAgICBud19saXN0ZW5lcl9jYW5jZWwobV9u
d0xpc3RlbmVyLmdldCgpKTsKKyAgICBtX253TGlzdGVuZXIgPSBudWxscHRyOworCisgICAgZm9y
IChhdXRvJiBud0Nvbm5lY3Rpb24gOiBtX253Q29ubmVjdGlvbnMudmFsdWVzKCkpCisgICAgICAg
IG53X2Nvbm5lY3Rpb25fY2FuY2VsKG53Q29ubmVjdGlvbi5nZXQoKSk7CisgICAgbV9ud0Nvbm5l
Y3Rpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVj
dGlvbnM6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhp
cyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1VEUERhdGEo
UmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPHZvaWQo
Y29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgcHJvY2Vzc0RhdGEpCit7CisgICAgYXV0byBud0Nv
bm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7CisgICAgbndfY29ubmVjdGlv
bl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndD
b25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRhKV0oZGlzcGF0Y2hf
ZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wgaXNDb21w
bGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250ZW50KSB7
CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9ja1B0cihb
Jl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXpl
KSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEpLCBzaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0pLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiBjb250
ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoV2ViUlRDLCAiTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMgZmFp
bGVkIHByb2Nlc3NpbmcgVURQIGRhdGEgd2l0aCBlcnJvciAlZCIsIGVycm9yID8gbndfZXJyb3Jf
Z2V0X2Vycm9yX2NvZGUoZXJyb3IpIDogMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgcHJvY2Vzc1VEUERhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3Zl
KHByb2Nlc3NEYXRhKSk7CisgICAgfSkuZ2V0KCkpOworfQorCitSZXRhaW5QdHI8bndfY29ubmVj
dGlvbl90PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3JlYXRlTldDb25u
ZWN0aW9uKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcykKK3sKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAo
TldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09O
RklHVVJBVElPTikpOworICAgIHsKKyAgICAgICAgYXV0byBob3N0QWRkcmVzcyA9IG1fYWRkcmVz
cy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgICAgICBpZiAobV9hZGRyZXNzLmlwYWRkcigpLklz
TmlsKCkpCisgICAgICAgICAgICBob3N0QWRkcmVzcyA9IG1fYWRkcmVzcy5ob3N0bmFtZSgpOwor
ICAgICAgICBhdXRvIGxvY2FsRW5kcG9pbnQgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9o
b3N0KGhvc3RBZGRyZXNzLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKG1fYWRkcmVzcy5wb3J0KCkp
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgbndfcGFyYW1ldGVyc19zZXRfbG9jYWxfZW5kcG9p
bnQocGFyYW1ldGVycy5nZXQoKSwgbG9jYWxFbmRwb2ludC5nZXQoKSk7CisgICAgfQorICAgIHsK
KyAgICAgICAgYXV0byBwcm90b2NvbFN0YWNrID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NvcHlf
ZGVmYXVsdF9wcm90b2NvbF9zdGFjayhwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgICAgIGF1dG8g
b3B0aW9ucyA9IGFkb3B0TlMobndfcHJvdG9jb2xfc3RhY2tfY29weV9pbnRlcm5ldF9wcm90b2Nv
bChwcm90b2NvbFN0YWNrLmdldCgpKSk7CisgICAgICAgIG53X2lwX29wdGlvbnNfc2V0X3ZlcnNp
b24ob3B0aW9ucy5nZXQoKSwgcmVtb3RlQWRkcmVzcy5mYW1pbHkoKSA9PSBBRl9JTkVUID8gbndf
aXBfdmVyc2lvbl80IDogbndfaXBfdmVyc2lvbl82KTsKKyAgICB9CisKKyAgICBhdXRvIHJlbW90
ZUhvc3RBZGRyZXNzID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGlm
IChyZW1vdGVBZGRyZXNzLmlwYWRkcigpLklzTmlsKCkpCisgICAgICAgIHJlbW90ZUhvc3RBZGRy
ZXNzID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFtZSgpOworICAgIGF1dG8gaG9zdCA9IGFkb3B0TlMo
bndfZW5kcG9pbnRfY3JlYXRlX2hvc3QocmVtb3RlSG9zdEFkZHJlc3MuY19zdHIoKSwgU3RyaW5n
OjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBhdXRv
IG53Q29ubmVjdGlvbiA9IGFkb3B0TlMobndfY29ubmVjdGlvbl9jcmVhdGUoaG9zdC5nZXQoKSwg
cGFyYW1ldGVycy5nZXQoKSkpOworCisgICAgc2V0dXBOV0Nvbm5lY3Rpb24obndDb25uZWN0aW9u
LmdldCgpLCByZW1vdGVBZGRyZXNzKTsKKyAgICByZXR1cm4gbndDb25uZWN0aW9uOworfQorCit2
b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXR1cE5XQ29ubmVjdGlv
bihud19jb25uZWN0aW9uX3QgbndDb25uZWN0aW9uLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3Mm
IHJlbW90ZUFkZHJlc3MpCit7CisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobndDb25uZWN0
aW9uLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKworICAgIHByb2Nlc3NVRFBEYXRhKG53Q29ubmVjdGlv
biwgW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24u
Y29weVJlZigpLCBpcCA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCksIHBvcnQgPSByZW1vdGVBZGRy
ZXNzLnBvcnQoKV0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSBtdXRhYmxlIHsKKyAgICAgICAg
SVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEobWVzc2FnZSwgc2l6ZSk7CisgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBp
ZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRp
bWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7CisgICAgfSk7CisKKyAgICBud19jb25uZWN0aW9uX3N0
YXJ0KG53Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29u
bmVjdGlvbnM6OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgbndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbjsKKyAgICB7
CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX253Q29ubmVjdGlvbnNMb2NrIH07CisgICAgICAg
IG53Q29ubmVjdGlvbiA9IG1fbndDb25uZWN0aW9ucy5lbnN1cmUocmVtb3RlQWRkcmVzcywgW3Ro
aXMsICZyZW1vdGVBZGRyZXNzXSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTldDb25uZWN0
aW9uKHJlbW90ZUFkZHJlc3MpOworICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cisg
ICAgfQorCisgICAgYXV0byB2YWx1ZSA9IGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUoZGF0
YSwgc2l6ZSwgbnVsbHB0ciwgRElTUEFUQ0hfREFUQV9ERVNUUlVDVE9SX0RFRkFVTFQpKTsKKyAg
ICBud19jb25uZWN0aW9uX3NlbmQobndDb25uZWN0aW9uLCB2YWx1ZS5nZXQoKSwgTldfQ09OTkVD
VElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlm
aWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwg
b3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAgICAgY29ubmVjdGlvbi0+c2Vu
ZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZp
ZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKKyAgICB9KS5n
ZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKExJQldF
QlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggOGNmYzYw
NzRkMDU2MmFhNTgyYzVjMGQyMzQ4OGVlNjM2YjJjOWE5Yy4uNGU5ZTJmZDExNmUzMDk4YjIxODM0
MTk4NGE1YjkwMzZmYTFkMTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNTQsNyArNTQs
OCBAQCBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ01vbml0b3IuY3BwCiBOZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAogTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENSZXNvbHZlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUmVzb2x2ZXJDb2NvYS5jcHAKLU5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0Q29jb2EubW0KK05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29j
b2EubW0KK05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW0K
IAogR1BVUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvR1BVU2VydmljZUVudHJ5
UG9pbnQubW0KIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGRlOTMwYjZiOWM3NzI5YjEwNWQ5ZDYwYzZjYzgyNDJlYTJlZWYxYjIuLmJkY2E5ZmNk
ZDljZGMyZDQxMjMyNDZiODU1MWU3OWU0YjVmYzhjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzcwNiw4ICszNzA2LDggQEAKIAkJ
NDEwM0ZCQTIyMDYxQkRCODAwQzJFQUY4IC8qIE5ldHdvcmtMb2FkQ2hlY2tlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrTG9hZENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA0ODJDQjFEREQyRkI1MDBGMDA2RDAgLyog
UlRDTmV0d29yay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENO
ZXR3b3JrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0MxREREMkZC
NTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUlRDTmV0d29yay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTBCQTEzOTI1
NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTmV0d29ya1JUQ1NvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1RDUFNvY2tl
dENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBCQTEzQTI1NzEzNUYy
MDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTExNDM2MzIwRjY3N0IxMDAyNkY5MTIgLyogSW5qZWN0VXNlclNjcmlwdEltbWVkaWF0ZWx5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdFVzZXJTY3JpcHRJbW1lZGlh
dGVseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTEyMjNCNzI2MDIxNTJCMDBC
MEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFJU
Q0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmsvd2Vi
cnRjL1JUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQkIyNjAyNEU4MDAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFu
bmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0RhdGFDaGFubmVsUmVt
b3RlTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ2LDYg
KzM4NDYsOCBAQAogCQk0MURDNDU5OTFFM0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0
Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpYldlYlJU
Q1NvY2tldENsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREM0NTlB
MUUzREJCMjQwMEIxMUY1MSAvKiBMaWJXZWJSVENTb2NrZXRDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDU29ja2V0Q2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxREM0NUEwMUUzREM1M0MwMEIxMUY1MSAvKiBXZWJSVENSZXNv
bHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJSVENSZXNv
bHZlci5jcHA7IHBhdGggPSBOZXR3b3JrL3dlYnJ0Yy9XZWJSVENSZXNvbHZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxREQ3MkE2MjY3QjhDMzAwMEE5MEM3MSAvKiBOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxREQ3MkE3
MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxRTBBN0M2MjNCNjM5NzgwMDU2MTA2MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMaWJXZWJSVENDb2RlY3NQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MUUwQTdDNzIzQjYzOTc5MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNz
UHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTBBN0M4MjNCNjM5NzkwMDU2MTA2MCAv
KiBMaWJXZWJSVENDb2RlY3NQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExpYldlYlJU
Q0NvZGVjc1Byb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODQwMSw4ICs4
NDAzLDEwIEBACiAJCQkJNDExMkI1NDgxRjlGRDNBQzAwRTY3ODc1IC8qIE5ldHdvcmtSVENSZXNv
bHZlci5oICovLAogCQkJCTQxMTJCNTQ3MUY5RkQzQUIwMEU2Nzk4NiAvKiBOZXR3b3JrUlRDUmVz
b2x2ZXJDb2NvYS5jcHAgKi8sCiAJCQkJNDExMkI1NDgxRjlGRDNBQzAwRTY3OTg2IC8qIE5ldHdv
cmtSVENSZXNvbHZlckNvY29hLmggKi8sCi0JCQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8q
IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5oICovLAotCQkJCTQxMEJBMTM5MjU3MTM1RjIwMDJFMkY4
QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gKi8sCisJCQkJNDEwQkExM0EyNTcxMzVGMjAw
MkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovLAorCQkJCTQxMEJBMTM5MjU3
MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0gKi8sCisJCQkJNDFE
RDcyQTcyNjdCOEMzMTAwQTkwQzcxIC8qIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oICovLAor
CQkJCTQxREQ3MkE2MjY3QjhDMzAwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2Eu
bW0gKi8sCiAJCQkJNDExMjIzQkMyNjAyNEU4MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVt
b3RlTWFuYWdlclByb3h5LmNwcCAqLywKIAkJCQk0MTEyMjNCQjI2MDI0RTgwMDBCMEEwQjYgLyog
UlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuaCAqLywKIAkJCQk0MTEyMjNCRDI2MDI0
RTgxMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkubWVzc2FnZXMu
aW4gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJy
dGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
TmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHAKaW5kZXggZDg5N2JiM2Yy
ODQ2NjVjNmMwMzA0ODU3OTU0MmJiYzkzYmExM2QyYi4uNTMyMzNiZWY5ZWYxYjlmYjJhNWUzNzI2
N2QyYmNlNDFmZTM0ODRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRGYWN0b3J5LmNwcApA
QCAtNTQsNyArNTQsOCBAQCB2b2lkIExpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNldENvbm5lY3Rp
b24oUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQogICAgIGlmICghbV9jb25u
ZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtSVENQcm92aWRlcjo6U2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlJUQ1BsYXRmb3JtU29ja2V0c0Vu
YWJsZWQoKSksIDApOworICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1JU
Q1Byb3ZpZGVyOjpTZXRQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCgp
KSwgMCk7CisgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKCkpLCAwKTsK
IAogICAgIHdoaWxlICghbV9wZW5kaW5nTWVzc2FnZVRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAg
bV9wZW5kaW5nTWVzc2FnZVRhc2tzLnRha2VGaXJzdCgpKCptX2Nvbm5lY3Rpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431954</attachid>
            <date>2021-06-22 03:48:26 -0700</date>
            <delta_ts>2021-06-22 04:48:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210622124823.patch</filename>
            <type>text/plain</type>
            <size>66924</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA4NGQ2MmVkMzZhNTVlMmIyYTZiNjA4YjhiZTdhMDg0ZjcxYjcxMjFmLi5iNzc5
ODgwNjJkYzczZDFiN2FmZjFkYjcwMjQzNTQ2NjY5NGM2NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0yMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBsaWJ3
ZWJydGMgQ01CYXNlQ2xhc3Mgb2JqZWN0cyBuZWVkIGFsaWdubWVudCBmaXh1cApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAyZjBh
YzY4NTJmZDEyN2VlYzQ0NjA2OWE3MTY3M2I3NDZlY2JlNjg0Li5iMTYxMWQwZjg4YTY4YmRkNTA0
Yjc2MDcyMjc5OTYxOGJmMDNiMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA2LTIyICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3Jh
dGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgZXhwZXJpbWVudGFsIGZs
YWcgZm9yIE5XIGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVy
ZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKwogMjAyMS0wNi0yMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBgZmV0Y2hgIHBv
cnQgYmxvY2tpbmcgZm9yIHBvcnRzIDk5MCwgOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY5OWVmOWE1NDM2
YjliYjIzMTYwMzI2YTE2NTA1OWMwZWIxYTI1NS4uMjU5MzIzOTk2MzNkZTM2OGJmMDVkNTZiNjc5
YmMxZmU4MjhhYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTIyICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3Jh
dGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW5mcmFzdHJ1Y3R1cmUgdG8gbmV3
IGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcgZm9yIE5XIGJhY2tlZCBVRFAgc29ja2V0cy4KKwor
ICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRX
ZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViUlRDUGxh
dGZvcm1VRFBTb2NrZXRzRW5hYmxlZCk6CisKIDIwMjEtMDYtMjIgIEZyw6lkw6lyaWMgV2FuZyAg
PGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBudWxsIHB0ciBk
ZXJlZiBpbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5k
S2VlcFN0eWxlU3BhbklubGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkOGViY2ViN2ZmYzZmZjFiNTJkNmZlMzg3
OGFlNjYzMmE5NjcwYmI3Li41OGY4MTQ0MjMwOTU1NDliMzhhNzAxYjUxZWM1ZmRmOTg5MDdkMDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA2LTIyICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgV2ViUlRDIFVEUCBz
b2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNaWdyYXRlIFVEUCBzb2NrZXQgaGFuZGxpbmcgZnJvbSBXZWJSVEMg
cGh5c2ljYWwgc29ja2V0IHNlcnZlciB0byBudyBBUEkgZm9yIENvY29hIHBvcnRzLgorCisgICAg
ICAgIEZvciBlYWNoIFVEUCBzb2NrZXQgb3BlbmVkLCB3ZSBvcGVuIGEgbndfbGlzdGVuZXIgdGhh
dCB3aWxsIGxpc3RlbiB0byBpbmJvdW5kIGNvbm5lY3Rpb25zLgorICAgICAgICBPbiBpbmJvdW5k
IGNvbm5lY3Rpb24sIHdlIHJlY2VpdmUgYSBud19jb25uZWN0aW9uIHRoYXQgd2Ugc3RvcmUgaW4g
YSBhZGRyZXNzIC0+IGNvbm5lY3Rpb24gbWFwLgorCisgICAgICAgIFdoZW5ldmVyIHNlbmRpbmcg
YSBwYWNrZXQsIHdlIGxvb2sgYXQgdGhlIHJlbW90ZSBhZGRyZXNzLgorICAgICAgICBJZiBuZWVk
ZWQsIHdlIGNyZWF0ZSBhIG53X2Nvbm5lY3Rpb24gdG8gdGhhdCBwYXJ0aWN1bGFyIHJlbW90ZSBh
ZGRyZXNzIGFuZCBzdG9yZSBpdCBpbiB0aGUgYWRkcmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKyAg
ICAgICAgV2UgdGhlbiB1c2UgdGhlIHByZS1leGlzdGluZyBvciBuZXdseSBjcmVhdGVkIG53X2Nv
bm5lY3Rpb24gdG8gc2VuZCB0aGUgcGFja2V0LgorCisgICAgICAgIE1ha2Ugc3VyZSB0byBjYW5j
ZWwgTlcgY29ubmVjdGlvbiBpbiBjYXNlIG9mIGZhaWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUg
c29ja2V0LgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMKKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmg6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6c2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6c2V0UGxhdGZvcm1VRFBT
b2NrZXRzRW5hYmxlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENQcm92aWRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW06IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0
Q29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OnRjcFNvY2tldFF1ZXVlKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9w
dGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRl
TWVzc2FnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2Nv
YTo6c2VuZFRvKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNv
Y2tldEFkZHJlc3M+OjpoYXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8cnRjOjpTb2Nr
ZXRBZGRyZXNzPjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0
QWRkcmVzcz46OmVtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29j
a2V0QWRkcmVzcz46OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hU
cmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW06IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OldURl9HVUFSREVEX0JZX0xPQ0spOgorICAgICAgICAoV2ViS2l0Ojp1ZHBTb2NrZXRRdWV1
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQ
U29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6On5OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNv
bm5lY3Rpb25zOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpwcm9jZXNzVURQRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpj
cmVhdGVOV0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2VuZFRvKToKKyAgICAgICAgKiBT
b3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0
RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNl
dENvbm5lY3Rpb24pOgorCiAyMDIxLTA2LTIyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVs
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBGb3JjZSBhIGNvcHkgb2YgZm9udCBkYXRh
IHdoZW4gcmVjZWl2aW5nIGl0IGZyb20gdGhlIHVudHJ1c3RlZCB3ZWIgcHJvY2VzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0
Yy5pT1MuZXhwIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xp
YndlYnJ0Yy5pT1MuZXhwCmluZGV4IDdkMjI1Y2MyYzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQy
OTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVjMDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMu
aU9TLmV4cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMv
bGlid2VicnRjLmlPUy5leHAKQEAgLTMyMSwzICszMjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlm
aWNhdGVEMUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0
YzZUaHJlYWRFUzJfUzJfTlMwXzEzc2NvcGVkX3JlZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxl
RUVFTlMzX0lOU18xOUF1ZGlvRW5jb2RlckZhY3RvcnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVy
RmFjdG9yeUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJTlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5T
QV8xNGRlZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0JfSU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVO
U0RfSVNHX0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhlckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3Np
bmdFRUVQTlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29yRQogX19aTks2d2VicnRjMjNSdHBUcmFuc2Nl
aXZlckludGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9uc05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMz
MFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktO
U18yM1BlZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZSVENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNv
bm5lY3Rpb25EZXBlbmRlbmNpZXNFCitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2Citf
X1pOSzNydGMxM1NvY2tldEFkZHJlc3NlcUVSS1MwXworX19aTkszcnRjOUlQQWRkcmVzczVJc05p
bEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlv
bnMvbGlid2VicnRjLmlPU3NpbS5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29u
ZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2NjZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5
MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw2
IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVy
Q29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRy
SU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVF
RU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18x
OVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNf
MTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVF
TlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBf
X1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVn
b3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBD
cmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0Nv
bmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEz
U29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitf
X1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cAppbmRleCA3
ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQyODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZm
NmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5leHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhwCkBAIC0z
MjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0NlcnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMy
N0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQTjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Nj
b3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1vZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29k
ZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVjb2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlx
dWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9yeUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19F
RUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3RvcnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1
ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9jZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVBy
b2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJhbnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4
dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2VicnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJ
bnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9uRVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBlZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQor
X19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hFdgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNz
ZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwg
Yi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50
YWwueWFtbAppbmRleCBkNDJiMjNiNmFiYmU3NTc2NDNmYWYxMzdlM2JiOTU0NjQyYWM1ODdmLi4y
NjU5NzkyNmY1NzdlZjkwYTdiY2FlMzE0ODAyNTRhNjZhZDg4OWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFt
bAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBl
cmltZW50YWwueWFtbApAQCAtMTI5NywxNiArMTI5NywyNiBAQCBXZWJSVENQbGF0Zm9ybUNvZGVj
c0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKLVdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJsZWQ6CitXZWJSVENQbGF0Zm9ybVRDUFNvY2tl
dHNFbmFibGVkOgogICB0eXBlOiBib29sCi0gIGh1bWFuUmVhZGFibGVOYW1lOiAiV2ViUlRDIFBs
YXRmb3JtIFNvY2tldHMiCi0gIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJS
VEMgUGxhdGZvcm0gU29ja2V0cyIKKyAgaHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZv
cm0gVENQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJS
VEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCiAgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzCiAgIGNvbmRpdGlvbjogRU5BQkxFKFdFQl9SVEMpCiAgIGRlZmF1bHRWYWx1ZToK
ICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAKK1dlYlJUQ1BsYXRmb3JtVURQU29j
a2V0c0VuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAgaHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMg
UGxhdGZvcm0gVURQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJs
ZSBXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMiCisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzCisgIGNvbmRpdGlvbjogRU5BQkxFKFdFQl9SVEMpCisgIGRlZmF1bHRW
YWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZhdWx0OiBmYWxzZQorCiBXZWJSVENWUDlQcm9m
aWxlMENvZGVjRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBodW1hblJlYWRhYmxlTmFtZTogIldl
YlJUQyBWUDkgcHJvZmlsZSAwIGNvZGVjIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuaAppbmRleCBkMDc3NGZkOTExNjZiMmI5NzdmMmU5MzBjNTkwOWYzNWEy
MTViZThlLi5lMTZjYjVkMTU3NjIxODY1NTBmOTViYWFhMmZiNGVlOGNhMzZkNmNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMTYzLDggKzE2
MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJs
ZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCA9
IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgd2ViUlRDSDI2NFNpbXVsY2FzdEVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzV2ViUlRDSDI2NFNpbXVsY2FzdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNl
dFdlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENI
MjY0U2ltdWxjYXN0RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQotICAgIGJvb2wgd2ViUlRDUGxhdGZv
cm1Tb2NrZXRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNXZWJSVENQbGF0Zm9ybVNvY2tl
dHNFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkID0gaXNFbmFi
bGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lk
IHNldFdlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9p
c1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29s
IHdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2Vi
UlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZDsgfQorICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZv
cm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1V
RFBTb2NrZXRzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFU
QUxJU1RfRUxFTUVOVCkKQEAgLTMxOSw3ICszMjEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c1dlYlJUQ1ZQOVByb2ZpbGUwQ29kZWNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNX
ZWJSVENWUDlQcm9maWxlMkNvZGVjRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzV2Vi
UlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lz
V2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2Vi
UlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2Vi
UlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShEQVRBTElTVF9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKaW5kZXggZjkzNWExY2Jl
NGE5ZThhNzNlYWVjNmJlZjI0MWE1MDQwNjVlNmFjNi4uZjcyZjJjZmRjZjJjYmQ2MDRiYzRjZDUw
NzkyYjlkN2JmNGE3YTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwCkBAIC00Niw3ICs0Niw4IEBA
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJOZXR3b3JrUlRDUmVzb2x2ZXJDb2Nv
YS5oIgotI2luY2x1ZGUgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2Nv
YS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTMzLDYgKzEzNCwxNSBAQCB2
b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgc3RkOgogCiB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRl
VURQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUlRD
TmV0d29yazo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgdWludDE2X3QgbWluUG9ydCwgdWludDE2
X3QgbWF4UG9ydCkKIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAobV9wbGF0Zm9ybVVE
UFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgIGlmIChhdXRvIHNvY2tldCA9IE5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KGlkZW50aWZpZXIsICp0aGlzLCBhZGRyZXNz
LnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0LCBtX2lwY0Nvbm5lY3Rpb24uY29weVJlZigpKSkgewor
ICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIEFTU0VSVCht
X3J0Y05ldHdvcmtUaHJlYWQuSXNDdXJyZW50KCkpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6
OkFzeW5jUGFja2V0U29ja2V0PiBzb2NrZXQobV9wYWNrZXRTb2NrZXRGYWN0b3J5LT5DcmVhdGVV
ZHBTb2NrZXQoYWRkcmVzcy52YWx1ZSwgbWluUG9ydCwgbWF4UG9ydCkpOwogICAgIGNyZWF0ZVNv
Y2tldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvY2tldCksIFNvY2tldDo6VHlwZTo6VURQLCBtX2lw
Y0Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAgLTE3Nyw4ICsxODcsOCBAQCB2b2lkIE5ldHdvcmtS
VENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZp
ZXIgaWRlbnRpZgogICAgICAgICB9CiAgICAgICAgIGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3Ro
aXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShs
b2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRD
b3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lv
bihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50
KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNs
aWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywg
bV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX3BsYXRmb3Jt
VENQU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVy
LCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUo
c29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENQcm92aWRlci5oCmluZGV4IDk1YjI5MTc2NDYzNDg2ZDA0NTEzMTJlYzQ4MTI1OWQ3Mjdl
M2FjNWEuLjU1MTcxOWM1ZmM4ZTZkNTNlN2RmZWI0NmI4MmQ2NjRiMjlkMTI2ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5oCkBAIC0xMDEsNiArMTAxLDggQEAgcHVibGljOgogCiAgICAgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9pcGNDb25uZWN0aW9uLmdldCgpOyB9CiAKKyAg
ICB2b2lkIGNsb3NlU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIpOwor
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdvcmtSVENQcm92aWRlcihOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYpOwogICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKQEAg
LTExMCw5ICsxMTIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU2VydmVyVENQU29ja2V0
KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNv
Y2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50MTZfdCBtYXhQb3J0LCBpbnQpOwog
ICAgIHZvaWQgd3JhcE5ld1RDUENvbm5lY3Rpb24oV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5l
d0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKTsKICAgICB2b2lkIHNlbmRUb1NvY2tldChXZWJD
b3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
LCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiYsIFJUQ1BhY2tldE9wdGlvbnMmJik7Ci0gICAg
dm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyKTsKICAg
ICB2b2lkIHNldFNvY2tldE9wdGlvbihXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVy
LCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1Tb2NrZXRzRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsg
bV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxh
dGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVVEUFNvY2tl
dHNFbmFibGVkID0gZW5hYmxlZDsgfQogCiAgICAgdm9pZCBjcmVhdGVSZXNvbHZlcihMaWJXZWJS
VENSZXNvbHZlcklkZW50aWZpZXIsIFN0cmluZyYmKTsKICAgICB2b2lkIHN0b3BSZXNvbHZlcihM
aWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIpOwpAQCAtMTQxLDcgKzE0Myw4IEBAIHByaXZhdGU6
CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIHN0ZDo6
dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29ja2V0Pj4gbV9wZW5kaW5nSW5jb21pbmdTb2Nr
ZXRzOwogICAgIGJvb2wgbV9pc0xpc3RlbmluZ1NvY2tldEF1dGhvcml6ZWQgeyB0cnVlIH07Ci0g
ICAgYm9vbCBtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9w
bGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcGxhdGZvcm1V
RFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENQcm92aWRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbgppbmRleCAxMTcyOTkwNzBmYzI2ODAy
ZjEwZjkzOThiZDAxODU1MzljMjMwZDdmLi5iZmRkZGE3OTk4MzZhNDUwZDhiNTk5MmQ5NTE4MjUx
NThjNjMxYzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLm1lc3NhZ2VzLmluCkBAIC0yOCw3
ICsyOCw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtSVENQcm92aWRlciB7CiAgICAgQ3JlYXRlQ2xp
ZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIGxvY2FsQWRkcmVzcywgV2ViS2l0
OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIHJlbW90ZUFkZHJlc3MsIFN0cmluZyB1c2VyQWdl
bnQsIGludCBvcHRpb25zKQogICAgIFdyYXBOZXdUQ1BDb25uZWN0aW9uKFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0SWRlbnRpZmllcikKIAotICAgIHZvaWQgU2V0
UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpCisgICAgdm9pZCBTZXRQbGF0Zm9y
bVRDUFNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVURQ
U29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiAgICAgQ3JlYXRlUmVzb2x2ZXIoV2ViS2l0
OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgU3RyaW5nIGFkZHJlc3Mp
CiAgICAgU3RvcFJlc29sdmVyKFdlYktpdDo6TGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldF
QlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIu
aCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFz
cyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29y
a1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BT
b2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3Zp
ZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNv
bm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29j
a2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJp
dmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBU
eXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRP
cHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6
OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNz
YWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2Vi
UlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVy
JiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsK
LSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29s
IG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29j
b2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFk
MTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5o
IgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJE
YXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRj
aC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1
ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsK
LSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNl
KCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJX
ZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3Zp
ZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0
KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBp
bnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3Vw
cG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRj
OjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRj
OjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihp
ZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92
ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdE
YXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxW
ZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8
dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVu
Y2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29u
bmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJv
Y2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIp
XShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QgY29udGV4dCwg
Ym9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFr
ZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hl
Y2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHBy
b2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29t
cGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRl
eHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rp
b24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQo
KSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBy
dGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQg
b3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAg
ICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRp
b25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhv
c3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0
eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmco
KTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RO
YW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlv
biBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9v
cHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6
UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMo
bndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVG
QVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53
X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAgICAgICBud190Y3Bfb3B0aW9u
c19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRydWUpOwotICAgIH0pKTsKLQotICAgIG1fbndD
b25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BU
TFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9u
LmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFu
Z2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29u
bmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBz
dGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNl
IG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9u
X3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJp
bmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0
ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJU
Q05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRpZmllciksIDApOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfZmFpbGVkOgotICAgICAgICAg
ICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVu
dGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRjUHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRp
Zmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9j
YW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7
Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRp
ZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCks
IGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgp
LCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJl
dHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdl
YlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0o
YXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVu
Y2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBk
YXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAq
IDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9z
dGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENv
Y29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBt
X3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3Jr
UlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFs
aWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNo
X2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRv
IGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VC
dWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVh
dGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsK
LSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlm
IChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRT
VFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2Fn
ZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNz
YWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlm
IChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAg
ICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3Nh
Z2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCi0gICAgICAgICAgICBidWZm
ZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQot
ICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAg
YnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNo
ZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBw
ZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9
IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVj
dGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09O
TkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYo
KSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50
aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9
KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJiZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2RhMTlkZWMzMzFhOGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1
ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgor
CituYW1lc3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMg
TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVy
OjpTb2NrZXQ+IGNyZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJ
ZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3Mm
LCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29y
a1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92
aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUg
dHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRDUDsgfQorICAgIHZvaWQg
Y2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUp
IGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCosIHNp
emVfdCk7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKKyAgICBOZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgUmVmPElQ
Qzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIFJldGFpblB0cjxud19jb25uZWN0aW9u
X3Q+IG1fbndDb25uZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4geyBmYWxzZSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFU
Rk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTUy
MTRkNGM0MTEyODliYzE0MWZhYTE3ZjVlNDcwZDllMWViMGMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RV
Tk1lc3NhZ2VQYXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNs
dWRlIDx3dGYvQmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB0Y3BTb2NrZXRRdWV1ZSgp
Cit7CisgICAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeewor
ICAgICAgICBxdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFRDUCBzb2NrZXQg
cXVldWUiLCBESVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
cXVldWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4g
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRD
U29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3Zp
ZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRp
b25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBtaWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9U
TFNfSU5TRUNVUkUgYXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNv
Y2tldEZhY3Rvcnk6Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNv
Y2tldEZhY3Rvcnk6Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E+KGlkZW50aWZp
ZXIsIHJ0Y1Byb3ZpZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5l
Y3Rpb24pKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0
YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1
aW50OF90PihWZWN0b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90
PiYmIGJ1ZmZlciA9IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53
Q29ubmVjdGlvbi5nZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9u
UmVmZXJlbmNlLCAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VC
bG9ja1B0cihbbndDb25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0
YSA9IFdURk1vdmUocHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3Bh
dGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlz
Q29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVu
dCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQ
dHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
c2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBw
ZW5kIHZlcnNpb24uCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0Rh
dGEoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAm
JiBjb250ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdU
Rk1vdmUocHJvY2Vzc0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30K
KworTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGli
V2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0
Y1Byb3ZpZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBv
cHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50
aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAg
LCBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlv
bnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9z
dE5hbWUgPSByZW1vdGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5
KCkpCisgICAgICAgIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygp
OworICAgIGF1dG8gaG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5h
bWUuY19zdHIoKSwgU3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9u
IGxpa2UgZm9yIG90aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29w
dGlvbnNfc2V0X3ZlcmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQ
YWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhu
d19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZB
VUxUX0NPTkZJR1VSQVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndf
cHJvdG9jb2xfb3B0aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25z
X3NldF9ub19kZWxheSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nv
bm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRM
Uy5nZXQoKSkpOworCisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24u
Z2V0KCksIHRjcFNvY2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2No
YW5nZWRfaGFuZGxlcihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlm
aWVyID0gbV9pZGVudGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBj
b25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90
IHN0YXRlLCBfTnVsbGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGVycm9yLCAhZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNh
c2UgbndfY29ubmVjdGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfd2FpdGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBh
cmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0
YXRlX3JlYWR5OgorICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2Vi
UlRDTmV0d29yazo6U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAg
ICAgICBydGNQcm92aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlk
ZW50aWZpZXJdIHsKKyAgICAgICAgICAgICAgICBydGNQcm92aWRlci0+Y2xvc2VTb2NrZXQoaWRl
bnRpZmllcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwg
MCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0
ZV9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQo
KSk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRl
bnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVm
KCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9y
dCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAg
IHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/
IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBb
Jl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVy
LCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMo
KSAqIDEwMDAgfSwgMCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlv
bl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpjbG9zZSgpCit7CisgICAgaWYgKCFtX253Q29ubmVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsK
KyAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBG
SVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgUmV0YWluUHRy
PGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sK
KyAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2
LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hf
ZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKKyAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitW
ZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVm
ZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID49
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGlmIChtX2lzU1RVTikgeworICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0g
V2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7CisgICAgICAg
IGlmICghbWVzc2FnZUxlbmd0aHMpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKKyAgICAgICAg
QVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7
CisgICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwg
c2l6ZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxl
bmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQo
ZGF0YSwgc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCisgICAg
ICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICByZXR1cm4gYnVmZmVy
OworICAgIH0KKworICAgIC8vIFByZXBlbmQgbGVuZ3RoLgorICAgIFZlY3Rvcjx1aW50OF90PiBi
dWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOworICAg
IGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICBidWZmZXIu
dW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKKyAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNp
emUpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6
U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7CisgICAgaWYg
KGJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25f
c2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIp
KS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFr
ZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25u
ZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAg
ICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2Vu
dFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMo
KSB9LCAwKTsKKyAgICB9KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBT
b2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1
YjA1MTNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdv
cmsvTmV0d29yay5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KKworbmFtZXNwYWNlIHJ0YyB7CitjbGFzcyBTb2NrZXRBZGRyZXNzOworfQorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRB
ZGRyZXNzPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLkhhc2goKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYSwgY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiBiKSB7IHJldHVybiBhID09IGIgfHwgKGEuSXNOaWwoKSAmJiBiLklzTmlsKCkgJiYgYS5z
Y29wZV9pZCgpID09IGIuc2NvcGVfaWQoKSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+IDogR2VuZXJpY0hhc2hUcmFpdHM8
cnRjOjpTb2NrZXRBZGRyZXNzPiB7CisgICAgc3RhdGljIHJ0Yzo6U29ja2V0QWRkcmVzcyBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gcnRjOjpTb2NrZXRBZGRyZXNzIHsgfTsgfQorICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsg
YWRkcmVzcyA9IHsgfTsgYWRkcmVzcy5TZXRTY29wZUlEKC0xKTsgfQorICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1
cm4gYWRkcmVzcy5zY29wZV9pZCgpID09IC0xOyB9Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczsKKworY2xh
c3MgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92
aWRlcjo6U29ja2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVh
dGVVRFBTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JU
Q1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwg
dWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0
d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgUmVmPElQQzo6Q29u
bmVjdGlvbj4mJik7CisgICAgfk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgpOworCitwcml2YXRl
OgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6
OlVEUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQg
b3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0
aW9ucyYpIGZpbmFsOworCisgICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwor
ICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAg
IFJlZjxOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucz4gbV9ud0Nvbm5lY3Rpb25z
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRD
KSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MDM5ZTg1YmU4MjlmZGE0MzhhZWVmMzlmZDBkYzUwNjMwNmM1MDY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVT
RShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgorI2luY2x1
ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hQ29ubmVjdGlvbnMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1JUQ1VE
UFNvY2tldENvY29hQ29ubmVjdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zPiBjcmVhdGUoV2ViQ29yZTo6TGliV2ViUlRD
U29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHByb3ZpZGVy
LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIFJlZjxJUEM6OkNvbm5lY3Rpb24+
JiYgY29ubmVjdGlvbikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2FDb25uZWN0aW9ucyhpZGVudGlmaWVyLCBwcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShj
b25uZWN0aW9uKSkpOyB9CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRPcHRpb24o
aW50IG9wdGlvbiwgaW50IHZhbHVlKTsKKyAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmKTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyhXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXIm
LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKwor
ICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IGNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmKTsKKyAgICB2b2lkIHNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5l
Y3Rpb25fdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJik7CisKKyAgICBXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAg
ICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nv
bm5lY3Rpb25zTG9jazsKKyAgICBib29sIG1faXNDbG9zZWQgV1RGX0dVQVJERURfQllfTE9DSyht
X253Q29ubmVjdGlvbnNMb2NrKSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDxydGM6OlNvY2tldEFk
ZHJlc3MsIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+PiBtX253Q29ubmVjdGlvbnMgV1RGX0dV
QVJERURfQllfTE9DSyhtX253Q29ubmVjdGlvbnNMb2NrKTsKK307CisKK3N0YXRpYyBkaXNwYXRj
aF9xdWV1ZV90IHVkcFNvY2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVf
dCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVf
Y3JlYXRlKCJXZWJSVEMgVURQIHNvY2tldCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJF
TlQpOworICAgIH0pOworICAgIHJldHVybiBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0
ZVVEUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIs
IE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVz
cyYgYWRkcmVzcywgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6
Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBEZWNpZGUgaG93IHRv
IHVzZSBtaW5Qb3J0L21heFBvcnQuCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1VE
UFNvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShj
b25uZWN0aW9uKSk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VE
UFNvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiBhZGRyZXNzLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBt
X3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CisgICAgLCBtX253Q29ubmVjdGlvbnMoTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OmNyZWF0ZShpZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25u
ZWN0aW9uKSkpCit7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6fk5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYSgpCit7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
bG9zZSgpCit7CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5jbG9zZSgpOworICAgIG1fcnRjUHJvdmlk
ZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYTo6c2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkKK3sKKyAgICBtX253Q29u
bmVjdGlvbnMtPnNldE9wdGlvbihvcHRpb24sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2E6OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5zZW5kVG8oZGF0YSwgc2l6ZSwg
YWRkcmVzcywgb3B0aW9ucyk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJv
dmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAg
LCBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKK3sKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAoTldfUEFSQU1FVEVS
U19ESVNBQkxFX1BST1RPQ09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklHVVJBVElPTikp
OworICAgIHsKKyAgICAgICAgYXV0byBob3N0QWRkcmVzcyA9IGFkZHJlc3MuaXBhZGRyKCkuVG9T
dHJpbmcoKTsKKyAgICAgICAgaWYgKGFkZHJlc3MuaXBhZGRyKCkuSXNOaWwoKSkKKyAgICAgICAg
ICAgIGhvc3RBZGRyZXNzID0gYWRkcmVzcy5ob3N0bmFtZSgpOworICAgICAgICBhdXRvIGxvY2Fs
RW5kcG9pbnQgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RBZGRyZXNzLmNf
c3RyKCksICIwIikpOworICAgICAgICBtX2FkZHJlc3MgPSB7IG53X2VuZHBvaW50X2dldF9ob3N0
bmFtZShsb2NhbEVuZHBvaW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQobG9jYWxFbmRw
b2ludC5nZXQoKSkgfTsKKyAgICAgICAgbndfcGFyYW1ldGVyc19zZXRfbG9jYWxfZW5kcG9pbnQo
cGFyYW1ldGVycy5nZXQoKSwgbG9jYWxFbmRwb2ludC5nZXQoKSk7CisgICAgfQorICAgIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbFN0YWNrID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NvcHlfZGVm
YXVsdF9wcm90b2NvbF9zdGFjayhwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgICAgIGF1dG8gb3B0
aW9ucyA9IGFkb3B0TlMobndfcHJvdG9jb2xfc3RhY2tfY29weV9pbnRlcm5ldF9wcm90b2NvbChw
cm90b2NvbFN0YWNrLmdldCgpKSk7CisgICAgICAgIG53X2lwX29wdGlvbnNfc2V0X3ZlcnNpb24o
b3B0aW9ucy5nZXQoKSwgYWRkcmVzcy5mYW1pbHkoKSA9PSBBRl9JTkVUID8gbndfaXBfdmVyc2lv
bl80IDogbndfaXBfdmVyc2lvbl82KTsKKyAgICB9CisKKyAgICBtX253TGlzdGVuZXIgPSBhZG9w
dE5TKG53X2xpc3RlbmVyX2NyZWF0ZShwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgbndfbGlzdGVu
ZXJfc2V0X3F1ZXVlKG1fbndMaXN0ZW5lci5nZXQoKSwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAg
ICBud19saXN0ZW5lcl9zZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQo
KSwgbWFrZUJsb2NrUHRyKFtud0xpc3RlbmVyID0gbV9ud0xpc3RlbmVyLmdldCgpLCBhZGRyZXNz
ID0gbV9hZGRyZXNzLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgcHJvdGVj
dGVkUlRDUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRl
bnRpZmllcl0obndfbGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0
YWJsZSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19saXN0ZW5l
cl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3dhaXRpbmc6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9yZWFk
eToKKyAgICAgICAgICAgIGFkZHJlc3MuU2V0UG9ydChud19saXN0ZW5lcl9nZXRfcG9ydChud0xp
c3RlbmVyKSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJS
VENOZXR3b3JrOjpTaWduYWxBZGRyZXNzUmVhZHkoaWRlbnRpZmllciwgUlRDTmV0d29yazo6U29j
a2V0QWRkcmVzcyhhZGRyZXNzKSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgbndfbGlzdGVuZXJfc3RhdGVfZmFpbGVkOgorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMgZmFpbGVkIHdp
dGggZXJyb3IgJWQiLCBlcnJvciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDAp
OworICAgICAgICAgICAgcHJvdGVjdGVkUlRDUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJl
YWQoW3Byb3RlY3RlZFJUQ1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7CisgICAgICAgICAgICAgICAg
cHJvdGVjdGVkUlRDUHJvdmlkZXItPmNsb3NlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENO
ZXR3b3JrOjpTaWduYWxDbG9zZShpZGVudGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9z
ZXRfbmV3X2Nvbm5lY3Rpb25faGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0
cihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShud19jb25uZWN0aW9uX3QgY29ubmVj
dGlvbikgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgcHJvdGVjdGVkVGhpcy0+bV9ud0Nvbm5l
Y3Rpb25zTG9jayB9OworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0Nsb3NlZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGVuZHBvaW50ID0gYWRvcHROUyhud19j
b25uZWN0aW9uX2NvcHlfZW5kcG9pbnQoY29ubmVjdGlvbikpOworICAgICAgICBydGM6OlNvY2tl
dEFkZHJlc3MgcmVtb3RlQWRkcmVzcyB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShlbmRwb2lu
dC5nZXQoKSksIG53X2VuZHBvaW50X2dldF9wb3J0KGVuZHBvaW50LmdldCgpKSB9OworCisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPm1fbndDb25uZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29u
bmVjdGlvbik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNldHVwTldDb25uZWN0aW9uKGNvbm5l
Y3Rpb24sIHJlbW90ZUFkZHJlc3MpOworICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVy
X3N0YXJ0KG1fbndMaXN0ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tl
dENvY29hQ29ubmVjdGlvbnM6OmNsb3NlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nv
bm5lY3Rpb25zTG9jayB9OworICAgIG1faXNDbG9zZWQgPSB0cnVlOworCisgICAgbndfbGlzdGVu
ZXJfY2FuY2VsKG1fbndMaXN0ZW5lci5nZXQoKSk7CisgICAgbV9ud0xpc3RlbmVyID0gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byYgbndDb25uZWN0aW9uIDogbV9ud0Nvbm5lY3Rpb25zLnZhbHVl
cygpKQorICAgICAgICBud19jb25uZWN0aW9uX2NhbmNlbChud0Nvbm5lY3Rpb24uZ2V0KCkpOwor
ICAgIG1fbndDb25uZWN0aW9ucy5jbGVhcigpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXRPcHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6
IFZhbGlkYXRlIHRoaXMgaXMgbm90IG5lZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHBy
b2Nlc3NVRFBEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBG
dW5jdGlvbjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQorewor
ICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAg
IG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24g
PSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0
YSldKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0
LCBib29sIGlzQ29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBp
ZiAoY29udGVudCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBt
YWtlQmxvY2tQdHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSkgeworICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29t
cGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRl
eHQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNv
bm5lY3Rpb25zIGZhaWxlZCBwcm9jZXNzaW5nIFVEUCBkYXRhIHdpdGggZXJyb3IgJWQiLCBlcnJv
ciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0
aW9uKSwgV1RGTW92ZShwcm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsKK30KKworUmV0YWlu
UHRyPG53X2Nvbm5lY3Rpb25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6
OmNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJl
c3MpCit7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0
ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVS
U19ERUZBVUxUX0NPTkZJR1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJl
c3MgPSBtX2FkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG1fYWRkcmVz
cy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3Mu
aG9zdG5hbWUoKTsKKyAgICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRw
b2ludF9jcmVhdGVfaG9zdChob3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2Fk
ZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0
X2xvY2FsX2VuZHBvaW50KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFy
YW1ldGVyc19jb3B5X2RlZmF1bHRfcHJvdG9jb2xfc3RhY2socGFyYW1ldGVycy5nZXQoKSkpOwor
ICAgICAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50
ZXJuZXRfcHJvdG9jb2wocHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRp
b25zX3NldF92ZXJzaW9uKG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0g
QUZfSU5FVCA/IG53X2lwX3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisg
ICAgYXV0byByZW1vdGVIb3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJp
bmcoKTsKKyAgICBpZiAocmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICBy
ZW1vdGVIb3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBhdXRvIGhv
c3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KHJlbW90ZUhvc3RBZGRyZXNzLmNf
c3RyKCksIFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgp
KSk7CisgICAgYXV0byBud0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRl
KGhvc3QuZ2V0KCksIHBhcmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNldHVwTldDb25uZWN0aW9u
KG53Q29ubmVjdGlvbi5nZXQoKSwgcmVtb3RlQWRkcmVzcyk7CisgICAgcmV0dXJuIG53Q29ubmVj
dGlvbjsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0
dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbiwgY29uc3QgcnRjOjpT
b2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzKQoreworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1
ZXVlKG53Q29ubmVjdGlvbiwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBwcm9jZXNzVURQRGF0
YShud0Nvbm5lY3Rpb24sIFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0
ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCldKGF1dG8qIG1lc3NhZ2UsIGF1dG8gc2l6ZSkgbXV0YWJs
ZSB7CisgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3NhZ2UsIHNpemUpOworICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxS
ZWFkUGFja2V0IHsgaWRlbnRpZmllciwgZGF0YSwgUlRDTmV0d29yazo6SVBBZGRyZXNzKGlwKSwg
cG9ydCwgcnRjOjpUaW1lTWlsbGlzKCkgKiAxMDAwIH0sIDApOworICAgIH0pOworCisgICAgbndf
Y29ubmVjdGlvbl9zdGFydChud0Nvbm5lY3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBT
b2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRj
OjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5l
Y3Rpb247CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9j
ayB9OworICAgICAgICBud0Nvbm5lY3Rpb24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90
ZUFkZHJlc3MsIFt0aGlzLCAmcmVtb3RlQWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZU5XQ29ubmVjdGlvbihyZW1vdGVBZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZh
bHVlLmdldCgpOworICAgIH0KKworICAgIGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2Rh
dGFfY3JlYXRlKGRhdGEsIHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9E
RUZBVUxUKSk7CisgICAgbndfY29ubmVjdGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0
KCksIE5XX0NPTk5FQ1RJT05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9j
a1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlv
bi5jb3B5UmVmKCksIG9wdGlvbnNdKF9OdWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNr
ZXQgeyBpZGVudGlmaWVyLCBvcHRpb25zLnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwg
MCk7CisgICAgfSkuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDI1OWFhOTdhNDQyODY5MGY4MmEwNmJlYjNjNTViYzM3NWVhNjNmZTEuLmI0NGI0YzM4
YTE2YzJkMmI4NzFiMDc2ZmZiZThhNjlkYTY5YTY3ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQK
QEAgLTU0LDcgKzU0LDggQEAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9y
LmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93
ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1NvY2tldENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hLm1tCiAKIEdQVVByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQ
VVNlcnZpY2VFbnRyeVBvaW50Lm1tCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0NWU4ZWE3N2RhZWNlMDI4YTBiMDliZjJjNzY4OGY0NjgzMWE3
MDc4Li40ZjQyYmJiYzA2NWY4YWZhNzdiYjE1MDdmNGQyYmUyNDAyYzNmZGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDMsOCAr
MzcwMyw4IEBACiAJCTQxMDNGQkEyMjA2MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRD
aGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZC
NTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUlRDTmV0d29yay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MDQ4MkNDMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJUQ05ldHdvcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtS
VENTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8q
IE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEw
QkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDExMTQzNjMyMEY2NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJ
bW1lZGlhdGVseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2Vy
U2NyaXB0SW1tZWRpYXRlbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIz
QjcyNjAyMTUyQjAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGgg
PSBOZXR3b3JrL3dlYnJ0Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAv
KiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzg0Myw2ICszODQzLDggQEAKIAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExp
YldlYlJUQ1NvY2tldENsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MURDNDU5QTFFM0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEg
LyogV2ViUlRDUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViUlRDUmVzb2x2ZXIuY3BwOyBwYXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBB
OTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MURENzJBNzI2N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRD
Q29kZWNzUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExp
YldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYz
OTc5MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBMaWJXZWJSVENDb2RlY3NQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTgzOTQsOCArODM5NiwxMCBAQAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBO
ZXR3b3JrUlRDUmVzb2x2ZXIuaCAqLywKIAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyog
TmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2
Nzk4NiAvKiBOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1
RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1
NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJB
MTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJ
CQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1t
ICovLAorCQkJCTQxREQ3MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EuaCAqLywKKwkJCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tICovLAogCQkJCTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4
MDAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJ
NDExMjIzQkQyNjAyNEU4MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L05ldHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCmlu
ZGV4IGQ4OTdiYjNmMjg0NjY1YzZjMDMwNDg1Nzk1NDJiYmM5M2JhMTNkMmIuLjUzMjMzYmVmOWVm
MWI5ZmIyYTVlMzcyNjdkMmJjZTQxZmUzNDg0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRGYWN0b3J5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0
RmFjdG9yeS5jcHAKQEAgLTU0LDcgKzU0LDggQEAgdm9pZCBMaWJXZWJSVENTb2NrZXRGYWN0b3J5
OjpzZXRDb25uZWN0aW9uKFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAg
ICBpZiAoIW1fY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUlRDUHJvdmlkZXI6OlNldFBsYXRmb3JtU29ja2V0c0Vu
YWJsZWQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENQbGF0
Zm9ybVNvY2tldHNFbmFibGVkKCkpLCAwKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtSVENQcm92aWRlcjo6U2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlJUQ1BsYXRmb3JtVENQU29j
a2V0c0VuYWJsZWQoKSksIDApOworICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1JUQ1Byb3ZpZGVyOjpTZXRQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5h
YmxlZCgpKSwgMCk7CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VUYXNrcy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fcGVuZGluZ01lc3NhZ2VUYXNrcy50YWtlRmlyc3QoKSgqbV9jb25uZWN0
aW9uKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431958</attachid>
            <date>2021-06-22 04:51:30 -0700</date>
            <delta_ts>2021-06-29 10:04:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210622135128.patch</filename>
            <type>text/plain</type>
            <size>68966</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA4NGQ2MmVkMzZhNTVlMmIyYTZiNjA4YjhiZTdhMDg0ZjcxYjcxMjFmLi5iNzc5
ODgwNjJkYzczZDFiN2FmZjFkYjcwMjQzNTQ2NjY5NGM2NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4
cDoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cDoKKwogMjAyMS0wNi0yMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBsaWJ3
ZWJydGMgQ01CYXNlQ2xhc3Mgb2JqZWN0cyBuZWVkIGFsaWdubWVudCBmaXh1cApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAyZjBh
YzY4NTJmZDEyN2VlYzQ0NjA2OWE3MTY3M2I3NDZlY2JlNjg0Li5iMTYxMWQwZjg4YTY4YmRkNTA0
Yjc2MDcyMjc5OTYxOGJmMDNiMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA2LTIyICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3Jh
dGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgZXhwZXJpbWVudGFsIGZs
YWcgZm9yIE5XIGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVy
ZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKwogMjAyMS0wNi0yMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBgZmV0Y2hgIHBv
cnQgYmxvY2tpbmcgZm9yIHBvcnRzIDk5MCwgOTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY5OWVmOWE1NDM2
YjliYjIzMTYwMzI2YTE2NTA1OWMwZWIxYTI1NS4uMjU5MzIzOTk2MzNkZTM2OGJmMDVkNTZiNjc5
YmMxZmU4MjhhYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTIyICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3Jh
dGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW5mcmFzdHJ1Y3R1cmUgdG8gbmV3
IGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcgZm9yIE5XIGJhY2tlZCBVRFAgc29ja2V0cy4KKwor
ICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRX
ZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViUlRDUGxh
dGZvcm1VRFBTb2NrZXRzRW5hYmxlZCk6CisKIDIwMjEtMDYtMjIgIEZyw6lkw6lyaWMgV2FuZyAg
PGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBudWxsIHB0ciBk
ZXJlZiBpbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5k
S2VlcFN0eWxlU3BhbklubGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkOGViY2ViN2ZmYzZmZjFiNTJkNmZlMzg3
OGFlNjYzMmE5NjcwYmI3Li41OGY4MTQ0MjMwOTU1NDliMzhhNzAxYjUxZWM1ZmRmOTg5MDdkMDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA2LTIyICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgV2ViUlRDIFVEUCBz
b2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNaWdyYXRlIFVEUCBzb2NrZXQgaGFuZGxpbmcgZnJvbSBXZWJSVEMg
cGh5c2ljYWwgc29ja2V0IHNlcnZlciB0byBudyBBUEkgZm9yIENvY29hIHBvcnRzLgorCisgICAg
ICAgIEZvciBlYWNoIFVEUCBzb2NrZXQgb3BlbmVkLCB3ZSBvcGVuIGEgbndfbGlzdGVuZXIgdGhh
dCB3aWxsIGxpc3RlbiB0byBpbmJvdW5kIGNvbm5lY3Rpb25zLgorICAgICAgICBPbiBpbmJvdW5k
IGNvbm5lY3Rpb24sIHdlIHJlY2VpdmUgYSBud19jb25uZWN0aW9uIHRoYXQgd2Ugc3RvcmUgaW4g
YSBhZGRyZXNzIC0+IGNvbm5lY3Rpb24gbWFwLgorCisgICAgICAgIFdoZW5ldmVyIHNlbmRpbmcg
YSBwYWNrZXQsIHdlIGxvb2sgYXQgdGhlIHJlbW90ZSBhZGRyZXNzLgorICAgICAgICBJZiBuZWVk
ZWQsIHdlIGNyZWF0ZSBhIG53X2Nvbm5lY3Rpb24gdG8gdGhhdCBwYXJ0aWN1bGFyIHJlbW90ZSBh
ZGRyZXNzIGFuZCBzdG9yZSBpdCBpbiB0aGUgYWRkcmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKyAg
ICAgICAgV2UgdGhlbiB1c2UgdGhlIHByZS1leGlzdGluZyBvciBuZXdseSBjcmVhdGVkIG53X2Nv
bm5lY3Rpb24gdG8gc2VuZCB0aGUgcGFja2V0LgorCisgICAgICAgIE1ha2Ugc3VyZSB0byBjYW5j
ZWwgTlcgY29ubmVjdGlvbiBpbiBjYXNlIG9mIGZhaWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUg
c29ja2V0LgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMKKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNyZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmg6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6c2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6c2V0UGxhdGZvcm1VRFBT
b2NrZXRzRW5hYmxlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENQcm92aWRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW06IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0
Q29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OnRjcFNvY2tldFF1ZXVlKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6
Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9w
dGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRl
TWVzc2FnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2Nv
YTo6c2VuZFRvKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNv
Y2tldEFkZHJlc3M+OjpoYXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8cnRjOjpTb2Nr
ZXRBZGRyZXNzPjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0
QWRkcmVzcz46OmVtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29j
a2V0QWRkcmVzcz46OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hU
cmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EubW06IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OldURl9HVUFSREVEX0JZX0xPQ0spOgorICAgICAgICAoV2ViS2l0Ojp1ZHBTb2NrZXRRdWV1
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQ
U29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2E6On5OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNv
bm5lY3Rpb25zOjpzZXRPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpwcm9jZXNzVURQRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpj
cmVhdGVOV0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2VuZFRvKToKKyAgICAgICAgKiBT
b3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0
RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNl
dENvbm5lY3Rpb24pOgorCiAyMDIxLTA2LTIyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVs
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBGb3JjZSBhIGNvcHkgb2YgZm9udCBkYXRh
IHdoZW4gcmVjZWl2aW5nIGl0IGZyb20gdGhlIHVudHJ1c3RlZCB3ZWIgcHJvY2VzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0
Yy5pT1MuZXhwIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xp
YndlYnJ0Yy5pT1MuZXhwCmluZGV4IDdkMjI1Y2MyYzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQy
OTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVjMDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMu
aU9TLmV4cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMv
bGlid2VicnRjLmlPUy5leHAKQEAgLTMyMSwzICszMjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlm
aWNhdGVEMUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0
YzZUaHJlYWRFUzJfUzJfTlMwXzEzc2NvcGVkX3JlZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxl
RUVFTlMzX0lOU18xOUF1ZGlvRW5jb2RlckZhY3RvcnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVy
RmFjdG9yeUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJTlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5T
QV8xNGRlZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0JfSU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVO
U0RfSVNHX0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhlckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3Np
bmdFRUVQTlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29yRQogX19aTks2d2VicnRjMjNSdHBUcmFuc2Nl
aXZlckludGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9uc05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMz
MFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktO
U18yM1BlZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZSVENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNv
bm5lY3Rpb25EZXBlbmRlbmNpZXNFCitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2Citf
X1pOSzNydGMxM1NvY2tldEFkZHJlc3NlcUVSS1MwXworX19aTkszcnRjOUlQQWRkcmVzczVJc05p
bEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlv
bnMvbGlid2VicnRjLmlPU3NpbS5leHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29u
ZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJj
MGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2NjZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5
MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3Vy
YXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw2
IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQxRXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVy
Q29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVhZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRy
SU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNfSU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVF
RU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18x
OVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNf
MTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0dfRUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVF
TlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBOU18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBf
X1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVn
b3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBD
cmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0Nv
bmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlvbkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEz
U29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitf
X1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMubWFjLmV4cAppbmRleCA3
ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQyODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZm
NmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5leHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5tYWMuZXhwCkBAIC0z
MjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0NlcnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMy
N0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQTjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Nj
b3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1vZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29k
ZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVjb2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlx
dWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9yeUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19F
RUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3RvcnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1
ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9jZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVBy
b2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJhbnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4
dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2VicnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJ
bnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9uRVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBlZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQor
X19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hFdgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNz
ZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwg
Yi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50
YWwueWFtbAppbmRleCBkNDJiMjNiNmFiYmU3NTc2NDNmYWYxMzdlM2JiOTU0NjQyYWM1ODdmLi4y
NjU5NzkyNmY1NzdlZjkwYTdiY2FlMzE0ODAyNTRhNjZhZDg4OWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFt
bAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBl
cmltZW50YWwueWFtbApAQCAtMTI5NywxNiArMTI5NywyNiBAQCBXZWJSVENQbGF0Zm9ybUNvZGVj
c0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKLVdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJsZWQ6CitXZWJSVENQbGF0Zm9ybVRDUFNvY2tl
dHNFbmFibGVkOgogICB0eXBlOiBib29sCi0gIGh1bWFuUmVhZGFibGVOYW1lOiAiV2ViUlRDIFBs
YXRmb3JtIFNvY2tldHMiCi0gIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJS
VEMgUGxhdGZvcm0gU29ja2V0cyIKKyAgaHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZv
cm0gVENQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJS
VEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCiAgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzCiAgIGNvbmRpdGlvbjogRU5BQkxFKFdFQl9SVEMpCiAgIGRlZmF1bHRWYWx1ZToK
ICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAKK1dlYlJUQ1BsYXRmb3JtVURQU29j
a2V0c0VuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAgaHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMg
UGxhdGZvcm0gVURQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJs
ZSBXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMiCisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzCisgIGNvbmRpdGlvbjogRU5BQkxFKFdFQl9SVEMpCisgIGRlZmF1bHRW
YWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZhdWx0OiBmYWxzZQorCiBXZWJSVENWUDlQcm9m
aWxlMENvZGVjRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBodW1hblJlYWRhYmxlTmFtZTogIldl
YlJUQyBWUDkgcHJvZmlsZSAwIGNvZGVjIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuaAppbmRleCBkMDc3NGZkOTExNjZiMmI5NzdmMmU5MzBjNTkwOWYzNWEy
MTViZThlLi5lMTZjYjVkMTU3NjIxODY1NTBmOTViYWFhMmZiNGVlOGNhMzZkNmNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMTYzLDggKzE2
MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJs
ZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCA9
IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgd2ViUlRDSDI2NFNpbXVsY2FzdEVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzV2ViUlRDSDI2NFNpbXVsY2FzdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNl
dFdlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENI
MjY0U2ltdWxjYXN0RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQotICAgIGJvb2wgd2ViUlRDUGxhdGZv
cm1Tb2NrZXRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNXZWJSVENQbGF0Zm9ybVNvY2tl
dHNFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkID0gaXNFbmFi
bGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lk
IHNldFdlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9p
c1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29s
IHdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2Vi
UlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZDsgfQorICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZv
cm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1V
RFBTb2NrZXRzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFU
QUxJU1RfRUxFTUVOVCkKQEAgLTMxOSw3ICszMjEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c1dlYlJUQ1ZQOVByb2ZpbGUwQ29kZWNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNX
ZWJSVENWUDlQcm9maWxlMkNvZGVjRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzV2Vi
UlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lz
V2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2Vi
UlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2Vi
UlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShEQVRBTElTVF9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKaW5kZXggZjkzNWExY2Jl
NGE5ZThhNzNlYWVjNmJlZjI0MWE1MDQwNjVlNmFjNi4uZjcyZjJjZmRjZjJjYmQ2MDRiYzRjZDUw
NzkyYjlkN2JmNGE3YTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuY3BwCkBAIC00Niw3ICs0Niw4IEBA
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJOZXR3b3JrUlRDUmVzb2x2ZXJDb2Nv
YS5oIgotI2luY2x1ZGUgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2Nv
YS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTMzLDYgKzEzNCwxNSBAQCB2
b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgc3RkOgogCiB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRl
VURQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUlRD
TmV0d29yazo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgdWludDE2X3QgbWluUG9ydCwgdWludDE2
X3QgbWF4UG9ydCkKIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAobV9wbGF0Zm9ybVVE
UFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgIGlmIChhdXRvIHNvY2tldCA9IE5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KGlkZW50aWZpZXIsICp0aGlzLCBhZGRyZXNz
LnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0LCBtX2lwY0Nvbm5lY3Rpb24uY29weVJlZigpKSkgewor
ICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIEFTU0VSVCht
X3J0Y05ldHdvcmtUaHJlYWQuSXNDdXJyZW50KCkpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6
OkFzeW5jUGFja2V0U29ja2V0PiBzb2NrZXQobV9wYWNrZXRTb2NrZXRGYWN0b3J5LT5DcmVhdGVV
ZHBTb2NrZXQoYWRkcmVzcy52YWx1ZSwgbWluUG9ydCwgbWF4UG9ydCkpOwogICAgIGNyZWF0ZVNv
Y2tldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvY2tldCksIFNvY2tldDo6VHlwZTo6VURQLCBtX2lw
Y0Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAgLTE3Nyw4ICsxODcsOCBAQCB2b2lkIE5ldHdvcmtS
VENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZp
ZXIgaWRlbnRpZgogICAgICAgICB9CiAgICAgICAgIGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3Ro
aXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShs
b2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRyZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRD
b3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lv
bihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVzZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50
KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBtdXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNs
aWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywg
bV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX3BsYXRmb3Jt
VENQU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVy
LCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUo
c29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdv
cmtSVENQcm92aWRlci5oCmluZGV4IDk1YjI5MTc2NDYzNDg2ZDA0NTEzMTJlYzQ4MTI1OWQ3Mjdl
M2FjNWEuLjU1MTcxOWM1ZmM4ZTZkNTNlN2RmZWI0NmI4MmQ2NjRiMjlkMTI2ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5oCkBAIC0xMDEsNiArMTAxLDggQEAgcHVibGljOgogCiAgICAgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9pcGNDb25uZWN0aW9uLmdldCgpOyB9CiAKKyAg
ICB2b2lkIGNsb3NlU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIpOwor
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdvcmtSVENQcm92aWRlcihOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYpOwogICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKQEAg
LTExMCw5ICsxMTIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU2VydmVyVENQU29ja2V0
KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNv
Y2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0LCB1aW50MTZfdCBtYXhQb3J0LCBpbnQpOwog
ICAgIHZvaWQgd3JhcE5ld1RDUENvbm5lY3Rpb24oV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5l
d0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKTsKICAgICB2b2lkIHNlbmRUb1NvY2tldChXZWJD
b3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
LCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiYsIFJUQ1BhY2tldE9wdGlvbnMmJik7Ci0gICAg
dm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyKTsKICAg
ICB2b2lkIHNldFNvY2tldE9wdGlvbihXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVy
LCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1Tb2NrZXRzRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsg
bV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxh
dGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVVEUFNvY2tl
dHNFbmFibGVkID0gZW5hYmxlZDsgfQogCiAgICAgdm9pZCBjcmVhdGVSZXNvbHZlcihMaWJXZWJS
VENSZXNvbHZlcklkZW50aWZpZXIsIFN0cmluZyYmKTsKICAgICB2b2lkIHN0b3BSZXNvbHZlcihM
aWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIpOwpAQCAtMTQxLDcgKzE0Myw4IEBAIHByaXZhdGU6
CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIHN0ZDo6
dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29ja2V0Pj4gbV9wZW5kaW5nSW5jb21pbmdTb2Nr
ZXRzOwogICAgIGJvb2wgbV9pc0xpc3RlbmluZ1NvY2tldEF1dGhvcml6ZWQgeyB0cnVlIH07Ci0g
ICAgYm9vbCBtX3BsYXRmb3JtU29ja2V0c0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9w
bGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcGxhdGZvcm1V
RFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENQcm92aWRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbgppbmRleCAxMTcyOTkwNzBmYzI2ODAy
ZjEwZjkzOThiZDAxODU1MzljMjMwZDdmLi5iZmRkZGE3OTk4MzZhNDUwZDhiNTk5MmQ5NTE4MjUx
NThjNjMxYzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLm1lc3NhZ2VzLmluCkBAIC0yOCw3
ICsyOCw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtSVENQcm92aWRlciB7CiAgICAgQ3JlYXRlQ2xp
ZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIGxvY2FsQWRkcmVzcywgV2ViS2l0
OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIHJlbW90ZUFkZHJlc3MsIFN0cmluZyB1c2VyQWdl
bnQsIGludCBvcHRpb25zKQogICAgIFdyYXBOZXdUQ1BDb25uZWN0aW9uKFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0SWRlbnRpZmllcikKIAotICAgIHZvaWQgU2V0
UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpCisgICAgdm9pZCBTZXRQbGF0Zm9y
bVRDUFNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVURQ
U29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiAgICAgQ3JlYXRlUmVzb2x2ZXIoV2ViS2l0
OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgU3RyaW5nIGFkZHJlc3Mp
CiAgICAgU3RvcFJlc29sdmVyKFdlYktpdDo6TGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhkZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldF
QlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIu
aCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsuaD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFz
cyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29y
a1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BT
b2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3Zp
ZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNv
bm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JUQ1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29j
a2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJp
dmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBU
eXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRP
cHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6
OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNz
YWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2Vi
UlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVy
JiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsK
LSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29s
IG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29j
b2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFk
MTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5o
IgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJE
YXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBhcnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRj
aC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1
ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsK
LSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNl
KCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJX
ZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3Zp
ZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRDb2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0
KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBp
bnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBzc2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3Vw
cG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwuCi0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRj
OjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTX0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRj
OjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTX0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihp
ZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3RlQWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92
ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdE
YXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxW
ZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8
dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0gICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVu
Y2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAgbndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29u
bmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJv
Y2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIp
XShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndfY29udGVudF9jb250ZXh0X3QgY29udGV4dCwg
Ym9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFr
ZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3QsIHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hl
Y2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgpKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHBy
b2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29t
cGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRl
eHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNvbWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rp
b24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RGTW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQo
KSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBy
dGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQg
b3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAg
ICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRp
b25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhv
c3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFtZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0
eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmco
KTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RO
YW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlv
biBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUgcGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9v
cHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBib29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6
UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsKLSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMo
bndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3RjcChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVG
QVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53
X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9ucykgewotICAgICAgICBud190Y3Bfb3B0aW9u
c19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRydWUpOwotICAgIH0pKTsKLQotICAgIG1fbndD
b25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BU
TFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9u
LmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBud19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFu
Z2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29u
bmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBz
dGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNl
IG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoKLSAgICAgICAgY2FzZSBud19jb25uZWN0aW9u
X3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJp
bmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0
ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJU
Q05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRpZmllciksIDApOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfZmFpbGVkOgotICAgICAgICAg
ICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVu
dGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRjUHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRp
Zmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9j
YW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7
Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRp
ZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCks
IGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgp
LCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJl
dHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdl
YlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0o
YXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0gICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVu
Y2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBk
YXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAq
IDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9z
dGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENv
Y29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBt
X3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3Jr
UlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFs
aWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQotCi1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNo
X2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRv
IGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VC
dWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVh
dGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsK
LSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlm
IChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRT
VFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2Fn
ZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNz
YWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlm
IChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAg
ICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3Nh
Z2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5t
ZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCi0gICAgICAgICAgICBidWZm
ZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQot
ICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAg
YnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNo
ZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBw
ZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9
IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVj
dGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09O
TkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYo
KSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50
aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9
KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJiZmQ5ZDM2OTJmY2E1MjEyNTJmYmMxYmNkY2RhMTlkZWMzMzFhOGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1
ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgor
CituYW1lc3BhY2UgcnRjIHsKK2NsYXNzIFNvY2tldEFkZHJlc3M7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgZmluYWwgOiBwdWJsaWMg
TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVy
OjpTb2NrZXQ+IGNyZWF0ZUNsaWVudFRDUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJ
ZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3Mm
LCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29y
a1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgaW50IG9wdGlvbnMsIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+JiYpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtSVENQcm92
aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFR5cGUg
dHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNsaWVudFRDUDsgfQorICAgIHZvaWQg
Y2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFsdWUp
IGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoY29uc3QgdWludDhfdCosIHNp
emVfdCk7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKKyAgICBOZXR3b3JrUlRDUHJvdmlkZXImIG1fcnRjUHJvdmlkZXI7CisgICAgUmVmPElQ
Qzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIFJldGFpblB0cjxud19jb25uZWN0aW9u
X3Q+IG1fbndDb25uZWN0aW9uOworICAgIGJvb2wgbV9pc1NUVU4geyBmYWxzZSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFU
Rk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTUy
MTRkNGM0MTEyODliYzE0MWZhYTE3ZjVlNDcwZDllMWViMGMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1RV
Tk1lc3NhZ2VQYXJzaW5nLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNpbmNs
dWRlIDx3dGYvQmxvY2tQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCB0Y3BTb2NrZXRRdWV1ZSgp
Cit7CisgICAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeewor
ICAgICAgICBxdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiV2ViUlRDIFRDUCBzb2NrZXQg
cXVldWUiLCBESVNQQVRDSF9RVUVVRV9DT05DVVJSRU5UKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
cXVldWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4g
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQoTGliV2ViUlRD
U29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3Zp
ZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCB0Y3BPcHRp
b25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBtaWdyYXRlIHNzbHRjcCBjYW5kaWRhdGVzLCBtYXliZSBzdXBwb3J0IE9QVF9U
TFNfSU5TRUNVUkUgYXMgd2VsbC4KKyAgICBpZiAoKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNv
Y2tldEZhY3Rvcnk6Ok9QVF9UTFNfRkFLRSkgfHwgKHRjcE9wdGlvbnMgJiBydGM6OlBhY2tldFNv
Y2tldEZhY3Rvcnk6Ok9QVF9UTFNfSU5TRUNVUkUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZTxOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E+KGlkZW50aWZp
ZXIsIHJ0Y1Byb3ZpZGVyLCByZW1vdGVBZGRyZXNzLCB0Y3BPcHRpb25zLCBXVEZNb3ZlKGNvbm5l
Y3Rpb24pKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NJbmNvbWluZ0RhdGEoUmV0
YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4mJiBud0Nvbm5lY3Rpb24sIEZ1bmN0aW9uPFZlY3Rvcjx1
aW50OF90PihWZWN0b3I8dWludDhfdD4mJik+JiYgcHJvY2Vzc0RhdGEsIFZlY3Rvcjx1aW50OF90
PiYmIGJ1ZmZlciA9IHsgfSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9IG53
Q29ubmVjdGlvbi5nZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0aW9u
UmVmZXJlbmNlLCAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1ha2VC
bG9ja1B0cihbbndDb25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNzRGF0
YSA9IFdURk1vdmUocHJvY2Vzc0RhdGEpLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKGRpc3Bh
dGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlz
Q29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVu
dCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQ
dHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
c2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdW5jaGVja2VkQXBw
ZW5kIHZlcnNpb24uCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICAgICAgYnVmZmVyID0gcHJvY2Vzc0Rh
dGEoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDb21wbGV0ZSAm
JiBjb250ZXh0ICYmIG53X2NvbnRlbnRfY29udGV4dF9nZXRfaXNfZmluYWwoY29udGV4dCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcHJvY2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdU
Rk1vdmUocHJvY2Vzc0RhdGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30K
KworTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGli
V2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0
Y1Byb3ZpZGVyLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBv
cHRpb25zLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50
aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAg
LCBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlv
bnMgJiBydGM6OlBhY2tldFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9z
dE5hbWUgPSByZW1vdGVBZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5
KCkpCisgICAgICAgIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygp
OworICAgIGF1dG8gaG9zdCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5h
bWUuY19zdHIoKSwgU3RyaW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAvLyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9u
IGxpa2UgZm9yIG90aGVyIG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29w
dGlvbnNfc2V0X3ZlcmlmeV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQ
YWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhu
d19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZB
VUxUX0NPTkZJR1VSQVRJT04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndf
cHJvdG9jb2xfb3B0aW9uc190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25z
X3NldF9ub19kZWxheSh0Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nv
bm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRM
Uy5nZXQoKSkpOworCisgICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24u
Z2V0KCksIHRjcFNvY2tldFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2No
YW5nZWRfaGFuZGxlcihtX253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlm
aWVyID0gbV9pZGVudGlmaWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBj
b25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90
IHN0YXRlLCBfTnVsbGFibGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGVycm9yLCAhZXJyb3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNh
c2UgbndfY29ubmVjdGlvbl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfd2FpdGluZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBh
cmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0
YXRlX3JlYWR5OgorICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2Vi
UlRDTmV0d29yazo6U2lnbmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAg
ICAgICBydGNQcm92aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlk
ZW50aWZpZXJdIHsKKyAgICAgICAgICAgICAgICBydGNQcm92aWRlci0+Y2xvc2VTb2NrZXQoaWRl
bnRpZmllcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwg
MCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0
ZV9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQo
KSk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRl
bnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVm
KCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9y
dCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAg
IHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/
IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBb
Jl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVy
LCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMo
KSAqIDEwMDAgfSwgMCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlv
bl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNv
Y2tldENvY29hOjpjbG9zZSgpCit7CisgICAgaWYgKCFtX253Q29ubmVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsK
KyAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBO
ZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBG
SVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgUmV0YWluUHRy
PGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sK
KyAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2
LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hf
ZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKKyAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitW
ZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVm
ZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID49
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGlmIChtX2lzU1RVTikgeworICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0g
V2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7CisgICAgICAg
IGlmICghbWVzc2FnZUxlbmd0aHMpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKKyAgICAgICAg
QVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7
CisgICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwg
c2l6ZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxl
bmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQo
ZGF0YSwgc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3Nh
Z2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCisgICAg
ICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICByZXR1cm4gYnVmZmVy
OworICAgIH0KKworICAgIC8vIFByZXBlbmQgbGVuZ3RoLgorICAgIFZlY3Rvcjx1aW50OF90PiBi
dWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOworICAg
IGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICBidWZmZXIu
dW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKKyAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNp
emUpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6
U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7CisgICAgaWYg
KGJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25f
c2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIp
KS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFr
ZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25u
ZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAg
ICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2Vu
dFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMo
KSB9LCAwKTsKKyAgICB9KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBT
b2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1
YjA1MTNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKKworI2luY2x1ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdv
cmsvTmV0d29yay5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KKworbmFtZXNwYWNlIHJ0YyB7CitjbGFzcyBTb2NrZXRBZGRyZXNzOworfQorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRB
ZGRyZXNzPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLkhhc2goKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYSwgY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiBiKSB7IHJldHVybiBhID09IGIgfHwgKGEuSXNOaWwoKSAmJiBiLklzTmlsKCkgJiYgYS5z
Y29wZV9pZCgpID09IGIuc2NvcGVfaWQoKSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+IDogR2VuZXJpY0hhc2hUcmFpdHM8
cnRjOjpTb2NrZXRBZGRyZXNzPiB7CisgICAgc3RhdGljIHJ0Yzo6U29ja2V0QWRkcmVzcyBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gcnRjOjpTb2NrZXRBZGRyZXNzIHsgfTsgfQorICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsg
YWRkcmVzcyA9IHsgfTsgYWRkcmVzcy5TZXRTY29wZUlEKC0xKTsgfQorICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1
cm4gYWRkcmVzcy5zY29wZV9pZCgpID09IC0xOyB9Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczsKKworY2xh
c3MgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92
aWRlcjo6U29ja2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVh
dGVVRFBTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JU
Q1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwg
dWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0
d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgUmVmPElQQzo6Q29u
bmVjdGlvbj4mJik7CisgICAgfk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgpOworCitwcml2YXRl
OgorICAgIC8vIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6
OlVEUDsgfQorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQg
b3B0aW9uLCBpbnQgdmFsdWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0
aW9ucyYpIGZpbmFsOworCisgICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwor
ICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAg
IFJlZjxOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucz4gbV9ud0Nvbm5lY3Rpb25z
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRD
KSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MDM5ZTg1YmU4MjlmZGE0MzhhZWVmMzlmZDBkYzUwNjMwNmM1MDY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVT
RShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgorI2luY2x1
ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTmV0d29ya1JUQ1VEUFNvY2tldENv
Y29hQ29ubmVjdGlvbnMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1JUQ1VE
UFNvY2tldENvY29hQ29ubmVjdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zPiBjcmVhdGUoV2ViQ29yZTo6TGliV2ViUlRD
U29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHByb3ZpZGVy
LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MsIFJlZjxJUEM6OkNvbm5lY3Rpb24+
JiYgY29ubmVjdGlvbikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2FDb25uZWN0aW9ucyhpZGVudGlmaWVyLCBwcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShj
b25uZWN0aW9uKSkpOyB9CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRPcHRpb24o
aW50IG9wdGlvbiwgaW50IHZhbHVlKTsKKyAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmKTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyhXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXIm
LCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKwor
ICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IGNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmKTsKKyAgICB2b2lkIHNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5l
Y3Rpb25fdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJik7CisKKyAgICBXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAg
ICBSZXRhaW5QdHI8bndfbGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nv
bm5lY3Rpb25zTG9jazsKKyAgICBib29sIG1faXNDbG9zZWQgV1RGX0dVQVJERURfQllfTE9DSyht
X253Q29ubmVjdGlvbnNMb2NrKSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDxydGM6OlNvY2tldEFk
ZHJlc3MsIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+PiBtX253Q29ubmVjdGlvbnMgV1RGX0dV
QVJERURfQllfTE9DSyhtX253Q29ubmVjdGlvbnNMb2NrKTsKK307CisKK3N0YXRpYyBkaXNwYXRj
aF9xdWV1ZV90IHVkcFNvY2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVf
dCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVf
Y3JlYXRlKCJXZWJSVEMgVURQIHNvY2tldCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJF
TlQpOworICAgIH0pOworICAgIHJldHVybiBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0
ZVVEUFNvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIs
IE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVz
cyYgYWRkcmVzcywgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6
Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBEZWNpZGUgaG93IHRv
IHVzZSBtaW5Qb3J0L21heFBvcnQuCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1VE
UFNvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShj
b25uZWN0aW9uKSk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VE
UFNvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRy
ZXNzJiBhZGRyZXNzLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBt
X3J0Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CisgICAgLCBtX253Q29ubmVjdGlvbnMoTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OmNyZWF0ZShpZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25u
ZWN0aW9uKSkpCit7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6fk5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYSgpCit7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpj
bG9zZSgpCit7CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5jbG9zZSgpOworICAgIG1fcnRjUHJvdmlk
ZXIudGFrZVNvY2tldChtX2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYTo6c2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkKK3sKKyAgICBtX253Q29u
bmVjdGlvbnMtPnNldE9wdGlvbihvcHRpb24sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2E6OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5zZW5kVG8oZGF0YSwgc2l6ZSwg
YWRkcmVzcywgb3B0aW9ucyk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJv
dmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAg
LCBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKK3sKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAoTldfUEFSQU1FVEVS
U19ESVNBQkxFX1BST1RPQ09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklHVVJBVElPTikp
OworICAgIHsKKyAgICAgICAgYXV0byBob3N0QWRkcmVzcyA9IGFkZHJlc3MuaXBhZGRyKCkuVG9T
dHJpbmcoKTsKKyAgICAgICAgaWYgKGFkZHJlc3MuaXBhZGRyKCkuSXNOaWwoKSkKKyAgICAgICAg
ICAgIGhvc3RBZGRyZXNzID0gYWRkcmVzcy5ob3N0bmFtZSgpOworICAgICAgICBhdXRvIGxvY2Fs
RW5kcG9pbnQgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RBZGRyZXNzLmNf
c3RyKCksICIwIikpOworICAgICAgICBtX2FkZHJlc3MgPSB7IG53X2VuZHBvaW50X2dldF9ob3N0
bmFtZShsb2NhbEVuZHBvaW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQobG9jYWxFbmRw
b2ludC5nZXQoKSkgfTsKKyAgICAgICAgbndfcGFyYW1ldGVyc19zZXRfbG9jYWxfZW5kcG9pbnQo
cGFyYW1ldGVycy5nZXQoKSwgbG9jYWxFbmRwb2ludC5nZXQoKSk7CisgICAgfQorICAgIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbFN0YWNrID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NvcHlfZGVm
YXVsdF9wcm90b2NvbF9zdGFjayhwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgICAgIGF1dG8gb3B0
aW9ucyA9IGFkb3B0TlMobndfcHJvdG9jb2xfc3RhY2tfY29weV9pbnRlcm5ldF9wcm90b2NvbChw
cm90b2NvbFN0YWNrLmdldCgpKSk7CisgICAgICAgIG53X2lwX29wdGlvbnNfc2V0X3ZlcnNpb24o
b3B0aW9ucy5nZXQoKSwgYWRkcmVzcy5mYW1pbHkoKSA9PSBBRl9JTkVUID8gbndfaXBfdmVyc2lv
bl80IDogbndfaXBfdmVyc2lvbl82KTsKKyAgICB9CisKKyAgICBtX253TGlzdGVuZXIgPSBhZG9w
dE5TKG53X2xpc3RlbmVyX2NyZWF0ZShwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgbndfbGlzdGVu
ZXJfc2V0X3F1ZXVlKG1fbndMaXN0ZW5lci5nZXQoKSwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAg
ICBud19saXN0ZW5lcl9zZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQo
KSwgbWFrZUJsb2NrUHRyKFtud0xpc3RlbmVyID0gbV9ud0xpc3RlbmVyLmdldCgpLCBhZGRyZXNz
ID0gbV9hZGRyZXNzLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgcHJvdGVj
dGVkUlRDUHJvdmlkZXIgPSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRl
bnRpZmllcl0obndfbGlzdGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0
YWJsZSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19saXN0ZW5l
cl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3dhaXRpbmc6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9yZWFk
eToKKyAgICAgICAgICAgIGFkZHJlc3MuU2V0UG9ydChud19saXN0ZW5lcl9nZXRfcG9ydChud0xp
c3RlbmVyKSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJS
VENOZXR3b3JrOjpTaWduYWxBZGRyZXNzUmVhZHkoaWRlbnRpZmllciwgUlRDTmV0d29yazo6U29j
a2V0QWRkcmVzcyhhZGRyZXNzKSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgbndfbGlzdGVuZXJfc3RhdGVfZmFpbGVkOgorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMgZmFpbGVkIHdp
dGggZXJyb3IgJWQiLCBlcnJvciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDAp
OworICAgICAgICAgICAgcHJvdGVjdGVkUlRDUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJl
YWQoW3Byb3RlY3RlZFJUQ1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7CisgICAgICAgICAgICAgICAg
cHJvdGVjdGVkUlRDUHJvdmlkZXItPmNsb3NlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENO
ZXR3b3JrOjpTaWduYWxDbG9zZShpZGVudGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9z
ZXRfbmV3X2Nvbm5lY3Rpb25faGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0
cihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShud19jb25uZWN0aW9uX3QgY29ubmVj
dGlvbikgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgcHJvdGVjdGVkVGhpcy0+bV9ud0Nvbm5l
Y3Rpb25zTG9jayB9OworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0Nsb3NlZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGVuZHBvaW50ID0gYWRvcHROUyhud19j
b25uZWN0aW9uX2NvcHlfZW5kcG9pbnQoY29ubmVjdGlvbikpOworICAgICAgICBydGM6OlNvY2tl
dEFkZHJlc3MgcmVtb3RlQWRkcmVzcyB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShlbmRwb2lu
dC5nZXQoKSksIG53X2VuZHBvaW50X2dldF9wb3J0KGVuZHBvaW50LmdldCgpKSB9OworCisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPm1fbndDb25uZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29u
bmVjdGlvbik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNldHVwTldDb25uZWN0aW9uKGNvbm5l
Y3Rpb24sIHJlbW90ZUFkZHJlc3MpOworICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVy
X3N0YXJ0KG1fbndMaXN0ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tl
dENvY29hQ29ubmVjdGlvbnM6OmNsb3NlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nv
bm5lY3Rpb25zTG9jayB9OworICAgIG1faXNDbG9zZWQgPSB0cnVlOworCisgICAgbndfbGlzdGVu
ZXJfY2FuY2VsKG1fbndMaXN0ZW5lci5nZXQoKSk7CisgICAgbV9ud0xpc3RlbmVyID0gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byYgbndDb25uZWN0aW9uIDogbV9ud0Nvbm5lY3Rpb25zLnZhbHVl
cygpKQorICAgICAgICBud19jb25uZWN0aW9uX2NhbmNlbChud0Nvbm5lY3Rpb24uZ2V0KCkpOwor
ICAgIG1fbndDb25uZWN0aW9ucy5jbGVhcigpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXRPcHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6
IFZhbGlkYXRlIHRoaXMgaXMgbm90IG5lZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHBy
b2Nlc3NVRFBEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBG
dW5jdGlvbjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQorewor
ICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAg
IG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24g
PSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0
YSldKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0
LCBib29sIGlzQ29tcGxldGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBp
ZiAoY29udGVudCkgeworICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBt
YWtlQmxvY2tQdHIoWyZdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSkgeworICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29t
cGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRl
eHQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNv
bm5lY3Rpb25zIGZhaWxlZCBwcm9jZXNzaW5nIFVEUCBkYXRhIHdpdGggZXJyb3IgJWQiLCBlcnJv
ciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0
aW9uKSwgV1RGTW92ZShwcm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsKK30KKworUmV0YWlu
UHRyPG53X2Nvbm5lY3Rpb25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6
OmNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJl
c3MpCit7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0
ZV9zZWN1cmVfdWRwKE5XX1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVS
U19ERUZBVUxUX0NPTkZJR1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJl
c3MgPSBtX2FkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG1fYWRkcmVz
cy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3Mu
aG9zdG5hbWUoKTsKKyAgICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRw
b2ludF9jcmVhdGVfaG9zdChob3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2Fk
ZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0
X2xvY2FsX2VuZHBvaW50KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFy
YW1ldGVyc19jb3B5X2RlZmF1bHRfcHJvdG9jb2xfc3RhY2socGFyYW1ldGVycy5nZXQoKSkpOwor
ICAgICAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50
ZXJuZXRfcHJvdG9jb2wocHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRp
b25zX3NldF92ZXJzaW9uKG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0g
QUZfSU5FVCA/IG53X2lwX3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisg
ICAgYXV0byByZW1vdGVIb3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJp
bmcoKTsKKyAgICBpZiAocmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICBy
ZW1vdGVIb3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBhdXRvIGhv
c3QgPSBhZG9wdE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KHJlbW90ZUhvc3RBZGRyZXNzLmNf
c3RyKCksIFN0cmluZzo6bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgp
KSk7CisgICAgYXV0byBud0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRl
KGhvc3QuZ2V0KCksIHBhcmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNldHVwTldDb25uZWN0aW9u
KG53Q29ubmVjdGlvbi5nZXQoKSwgcmVtb3RlQWRkcmVzcyk7CisgICAgcmV0dXJuIG53Q29ubmVj
dGlvbjsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0
dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbiwgY29uc3QgcnRjOjpT
b2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzKQoreworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1
ZXVlKG53Q29ubmVjdGlvbiwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBwcm9jZXNzVURQRGF0
YShud0Nvbm5lY3Rpb24sIFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgaXAgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0
ID0gcmVtb3RlQWRkcmVzcy5wb3J0KCldKGF1dG8qIG1lc3NhZ2UsIGF1dG8gc2l6ZSkgbXV0YWJs
ZSB7CisgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3NhZ2UsIHNpemUpOworICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxS
ZWFkUGFja2V0IHsgaWRlbnRpZmllciwgZGF0YSwgUlRDTmV0d29yazo6SVBBZGRyZXNzKGlwKSwg
cG9ydCwgcnRjOjpUaW1lTWlsbGlzKCkgKiAxMDAwIH0sIDApOworICAgIH0pOworCisgICAgbndf
Y29ubmVjdGlvbl9zdGFydChud0Nvbm5lY3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBT
b2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRj
OjpQYWNrZXRPcHRpb25zJiBvcHRpb25zKQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5l
Y3Rpb247CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9j
ayB9OworICAgICAgICBud0Nvbm5lY3Rpb24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90
ZUFkZHJlc3MsIFt0aGlzLCAmcmVtb3RlQWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZU5XQ29ubmVjdGlvbihyZW1vdGVBZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZh
bHVlLmdldCgpOworICAgIH0KKworICAgIGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2Rh
dGFfY3JlYXRlKGRhdGEsIHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9E
RUZBVUxUKSk7CisgICAgbndfY29ubmVjdGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0
KCksIE5XX0NPTk5FQ1RJT05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9j
a1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlv
bi5jb3B5UmVmKCksIG9wdGlvbnNdKF9OdWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNr
ZXQgeyBpZGVudGlmaWVyLCBvcHRpb25zLnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwg
MCk7CisgICAgfSkuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDI1OWFhOTdhNDQyODY5MGY4MmEwNmJlYjNjNTViYzM3NWVhNjNmZTEuLmI0NGI0YzM4
YTE2YzJkMmI4NzFiMDc2ZmZiZThhNjlkYTY5YTY3ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQK
QEAgLTU0LDcgKzU0LDggQEAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9y
LmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93
ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ1NvY2tldENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hLm1tCiAKIEdQVVByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQ
VVNlcnZpY2VFbnRyeVBvaW50Lm1tCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0NWU4ZWE3N2RhZWNlMDI4YTBiMDliZjJjNzY4OGY0NjgzMWE3
MDc4Li40ZjQyYmJiYzA2NWY4YWZhNzdiYjE1MDdmNGQyYmUyNDAyYzNmZGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDMsOCAr
MzcwMyw4IEBACiAJCTQxMDNGQkEyMjA2MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRD
aGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZC
NTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUlRDTmV0d29yay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MDQ4MkNDMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJUQ05ldHdvcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtS
VENTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8q
IE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEw
QkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDExMTQzNjMyMEY2NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJ
bW1lZGlhdGVseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2Vy
U2NyaXB0SW1tZWRpYXRlbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIz
QjcyNjAyMTUyQjAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGgg
PSBOZXR3b3JrL3dlYnJ0Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAv
KiBSVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzg0Myw2ICszODQzLDggQEAKIAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExp
YldlYlJUQ1NvY2tldENsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MURDNDU5QTFFM0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEg
LyogV2ViUlRDUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViUlRDUmVzb2x2ZXIuY3BwOyBwYXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBB
OTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MURENzJBNzI2N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRD
Q29kZWNzUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExp
YldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYz
OTc5MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBMaWJXZWJSVENDb2RlY3NQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTgzOTQsOCArODM5NiwxMCBAQAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBO
ZXR3b3JrUlRDUmVzb2x2ZXIuaCAqLywKIAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyog
TmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2
Nzk4NiAvKiBOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1
RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1
NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJB
MTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJ
CQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1t
ICovLAorCQkJCTQxREQ3MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EuaCAqLywKKwkJCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tICovLAogCQkJCTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4
MDAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJ
NDExMjIzQkQyNjAyNEU4MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L05ldHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCmlu
ZGV4IGQ4OTdiYjNmMjg0NjY1YzZjMDMwNDg1Nzk1NDJiYmM5M2JhMTNkMmIuLjUzMjMzYmVmOWVm
MWI5ZmIyYTVlMzcyNjdkMmJjZTQxZmUzNDg0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRGYWN0b3J5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0
RmFjdG9yeS5jcHAKQEAgLTU0LDcgKzU0LDggQEAgdm9pZCBMaWJXZWJSVENTb2NrZXRGYWN0b3J5
OjpzZXRDb25uZWN0aW9uKFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAg
ICBpZiAoIW1fY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUlRDUHJvdmlkZXI6OlNldFBsYXRmb3JtU29ja2V0c0Vu
YWJsZWQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENQbGF0
Zm9ybVNvY2tldHNFbmFibGVkKCkpLCAwKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtSVENQcm92aWRlcjo6U2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlJUQ1BsYXRmb3JtVENQU29j
a2V0c0VuYWJsZWQoKSksIDApOworICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1JUQ1Byb3ZpZGVyOjpTZXRQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5h
YmxlZCgpKSwgMCk7CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VUYXNrcy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fcGVuZGluZ01lc3NhZ2VUYXNrcy50YWtlRmlyc3QoKSgqbV9jb25uZWN0
aW9uKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGY2ODA3YmY3MTJlOGY1Njc5
YmIzZTRlZTU1MDdiNTMzNjg2MGQ1NWIuLmI5MDBiYmU3Zjg0ZWU0ZjFmOWU5N2NlN2U2MzIzY2Yz
NDg0MzQwNTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDIxLTA2LTIyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ29jb2FdIE1pZ3JhdGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2luZyB0
ZXN0cyBhcyB0aW1pbmcgY2hhbmdlcyBhIGJpdC4KKyAgICAgICAgVGhpcyBhbGlnbnMgd2l0aCBD
aHJvbWUgYW5kIEZpcmVmb3ggYmVoYXZpb3IuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL25vLW1lZGlhLWNhbGwtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMtY2FsbC1leHBlY3RlZC50eHQ6CisKIDIwMjEtMDYt
MjIgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIEltcGxl
bWVudCB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMgb24gc291cmNlIGVsZW1lbnRzIG9mIDxw
aWN0dXJlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2FsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRpYS1jYWxsLWV4cGVj
dGVkLnR4dAppbmRleCBjYWU3NWJmN2ZmMzM4OWJiNTQ5N2E0N2NlNGM4YzYwZGMxZTA3Y2RjLi5h
ZDIxODkzMWQ3NTVlMWY1NjQwMTAzYzMzODAyOGRlMWIwZmQ0MTlkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRpYS1j
YWxsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRpYS1jYWxsLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUg
QEAKIFBBU1MgQ2FuIHNldCB1cCBhIGJhc2ljIFdlYlJUQyBjYWxsIHdpdGggbm8gZGF0YS4KIGlj
ZUNvbm5lY3Rpb25TdGF0ZSBpbmZvCiAKLUZpcnN0OiBjb21wbGV0ZWQKK0ZpcnN0OiBjb25uZWN0
ZWQKIFNlY29uZDogY29ubmVjdGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb21p
c2VzLWNhbGwtZXhwZWN0ZWQudHh0CmluZGV4IGYyNGFhYTBiMDZlMmYxYmVjOTQyZjcxN2IxYzQ4
OTMyZTdjMWRlY2IuLmYzMWZhODRiOTJhYjUzZTJlZWY5ZjZkMzJiYTcyYTBhNGVhYzQ3NDEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
cnRjL3Byb21pc2VzLWNhbGwtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb21pc2VzLWNhbGwtZXhwZWN0ZWQudHh0
CkBAIC0yLDUgKzIsNSBAQAogUEFTUyBDYW4gc2V0IHVwIGEgYmFzaWMgV2ViUlRDIGNhbGwgd2l0
aCBvbmx5IGRhdGEgdXNpbmcgcHJvbWlzZXMuCiBpY2VDb25uZWN0aW9uU3RhdGUgaW5mbwogCi1G
aXJzdDogY29tcGxldGVkCitGaXJzdDogY29ubmVjdGVkCiBTZWNvbmQ6IGNvbm5lY3RlZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432493</attachid>
            <date>2021-06-29 10:04:44 -0700</date>
            <delta_ts>2021-06-30 00:45:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-227210-20210629190443.patch</filename>
            <type>text/plain</type>
            <size>71287</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA5Nzg3M2QxMTkzYTBjNTUxOTBiY2Q0OTY3ZTEzN2JjYzdlOGNlY2M5Li42ZGZl
ODI3ZWE1OTlkZTg3YjBlZDhlYmJmOGMwZDQzZDEyNDVmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBDYXJsc29uLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHA6
CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHA6CisgICAgICAg
ICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5leHA6CisKIDIwMjEtMDYtMjMgIEVyaWMg
Q2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0RGVjb2Rl
ci5oIHNob3VsZCBpbmNsdWRlIFRhcmdldENvbmRpdGlvbmFscy5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYwOTEzZDFhYzQ4
ZjI4MDI2YmY1YTliOTc1NDFhYzI5Y2UwN2E1YmQuLjY0YWYyOTBiYTdhNTMzOTkzMmRmOGQ1MWMw
ZDI2NzBjNDRhNGIyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYtMjggIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBXZWJS
VEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgYSBuZXcgZXhwZXJpbWVudGFsIGZsYWcgZm9yIE5X
IGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKwogMjAyMS0wNi0yNyAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbTW9kZWxdIFtpT1NdIEFkZCBzdXBw
b3J0IGZvciByZW5kZXJpbmcgbW9kZWwgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAyOThjMzBj
ZmRhN2ZlZGJkNjQwZjhiNjM1N2NkNTZjMzJkNWI3MC4uZDdlZmM0YWExODUwM2M3ODkzZGQ1MzYy
MTAwMGNhNzlhYjE4ZGYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1p
Z3JhdGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIHRvIG5l
dyBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnIGZvciBOVyBiYWNrZWQgVURQIHNvY2tldHMuCisK
KyAgICAgICAgKiBwYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0
V2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJSVENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldFdlYlJUQ1Bs
YXRmb3JtVURQU29ja2V0c0VuYWJsZWQpOgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VD
b2NvYSBzaG91bGQgc3VwcG9ydCBvdGhlciBzYW1wbGUgcmF0ZSB0aGFuIDQ4MDAwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGYyNWY3NDBhNDQzYmY0MmFiMDQ2MzgxZjI2ZjVmMDBjOTFkNmFmODguLmNlNzdhZmM5OTVh
YzAyYjc5MDlhNjI5ZDI5YzMxYmQ0MzQ0NzBmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMjEtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAg
IFtDb2NvYV0gTWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBNaWdyYXRlIFVEUCBz
b2NrZXQgaGFuZGxpbmcgZnJvbSBXZWJSVEMgcGh5c2ljYWwgc29ja2V0IHNlcnZlciB0byBudyBB
UEkgZm9yIENvY29hIHBvcnRzLgorCisgICAgICAgIEZvciBlYWNoIFVEUCBzb2NrZXQgb3BlbmVk
LCB3ZSBvcGVuIGEgbndfbGlzdGVuZXIgdGhhdCB3aWxsIGxpc3RlbiB0byBpbmJvdW5kIGNvbm5l
Y3Rpb25zLgorICAgICAgICBPbiBpbmJvdW5kIGNvbm5lY3Rpb24sIHdlIHJlY2VpdmUgYSBud19j
b25uZWN0aW9uIHRoYXQgd2Ugc3RvcmUgaW4gYSBhZGRyZXNzIC0+IGNvbm5lY3Rpb24gbWFwLgor
CisgICAgICAgIFdoZW5ldmVyIHNlbmRpbmcgYSBwYWNrZXQsIHdlIGxvb2sgYXQgdGhlIHJlbW90
ZSBhZGRyZXNzLgorICAgICAgICBJZiBuZWVkZWQsIHdlIGNyZWF0ZSBhIG53X2Nvbm5lY3Rpb24g
dG8gdGhhdCBwYXJ0aWN1bGFyIHJlbW90ZSBhZGRyZXNzIGFuZCBzdG9yZSBpdCBpbiB0aGUgYWRk
cmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKyAgICAgICAgV2UgdGhlbiB1c2UgdGhlIHByZS1leGlz
dGluZyBvciBuZXdseSBjcmVhdGVkIG53X2Nvbm5lY3Rpb24gdG8gc2VuZCB0aGUgcGFja2V0Lgor
CisgICAgICAgIE1ha2Ugc3VyZSB0byBjYW5jZWwgTlcgY29ubmVjdGlvbiBpbiBjYXNlIG9mIGZh
aWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgc29ja2V0LgorCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNy
ZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6Y3Jl
YXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ1Byb3ZpZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6
c2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENQcm92aWRlcjo6c2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENT
b2NrZXRDb2NvYS5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OnRj
cFNvY2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29h
OjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRlTWVzc2FnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6c2VuZFRvKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZXF1YWwpOgorICAgICAgICAo
V1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmVtcHR5VmFsdWUpOgorICAgICAg
ICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmNvbnN0cnVjdERlbGV0ZWRW
YWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNE
ZWxldGVkVmFsdWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OldURl9HVUFSREVEX0JZX0xPQ0spOgorICAg
ICAgICAoV2ViS2l0Ojp1ZHBTb2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6On5OZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3Nl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXRPcHRpb24pOgorICAgICAg
ICAoV2ViS2l0Ojpwcm9jZXNzVURQRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjcmVhdGVOV0Nvbm5lY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9uczo6c2VuZFRvKToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkxpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNldENvbm5lY3Rpb24pOgorCiAyMDIxLTA2LTI4ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgYW5kIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCmluZGV4IDdkMjI1Y2My
YzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQyOTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVj
MDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKQEAgLTMyMSwzICsz
MjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlmaWNhdGVEMUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRl
UGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0YzZUaHJlYWRFUzJfUzJfTlMwXzEzc2NvcGVkX3Jl
ZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxlRUVFTlMzX0lOU18xOUF1ZGlvRW5jb2RlckZhY3Rv
cnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVyRmFjdG9yeUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJ
TlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5TQV8xNGRlZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0Jf
SU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVOU0RfSVNHX0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhl
ckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3NpbmdFRUVQTlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29y
RQogX19aTks2d2VicnRjMjNSdHBUcmFuc2NlaXZlckludGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9u
c05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMzMFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFj
ZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktOU18yM1BlZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZS
VENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNvbm5lY3Rpb25EZXBlbmRlbmNpZXNFCitfX1pOSzNy
dGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2CitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3NlcUVSS1Mw
XworX19aTkszcnRjOUlQQWRkcmVzczVJc05pbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5l
eHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2Nj
ZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMu
aU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw2IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitfX1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3
ZWJydGMubWFjLmV4cCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9u
cy9saWJ3ZWJydGMubWFjLmV4cAppbmRleCA3ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQy
ODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZmNmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2Vi
cnRjLm1hYy5leHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRp
b25zL2xpYndlYnJ0Yy5tYWMuZXhwCkBAIC0zMjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0Nl
cnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMyN0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQ
TjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Njb3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1v
ZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29kZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVj
b2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlxdWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9y
eUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3Rv
cnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9j
ZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVByb2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJh
bnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2Vi
cnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9u
RVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVyZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBl
ZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hF
dgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1
SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlBy
ZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5j
ZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCAzMjNkYzVmMjYyNjIzNGZk
NDlkZmYxODE0OGViNGZhZGZlNjM1YjNmLi41NGE2ZWU2MDM5ZWJmYzdhNDY4ZDkyY2IxZmEwNzA0
OWEzNDc3ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTI5NywxNiArMTI5
NywyNiBAQCBXZWJSVENQbGF0Zm9ybUNvZGVjc0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgICAgV2Vi
Q29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKLVdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQ6CitXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkOgogICB0eXBlOiBib29sCi0gIGh1
bWFuUmVhZGFibGVOYW1lOiAiV2ViUlRDIFBsYXRmb3JtIFNvY2tldHMiCi0gIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gU29ja2V0cyIKKyAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCiAgIHdl
YmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCiAgIGNvbmRpdGlvbjogRU5BQkxF
KFdFQl9SVEMpCiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiB0
cnVlCiAKK1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAg
aHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMiCisgIGh1bWFu
UmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMi
CisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisgIGNvbmRpdGlvbjog
RU5BQkxFKFdFQl9SVEMpCisgIGRlZmF1bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZh
dWx0OiBmYWxzZQorCiBXZWJSVENWUDlQcm9maWxlMENvZGVjRW5hYmxlZDoKICAgdHlwZTogYm9v
bAogICBodW1hblJlYWRhYmxlTmFtZTogIldlYlJUQyBWUDkgcHJvZmlsZSAwIGNvZGVjIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCBkMDc3NGZk
OTExNjZiMmI5NzdmMmU5MzBjNTkwOWYzNWEyMTViZThlLi5lMTZjYjVkMTU3NjIxODY1NTBmOTVi
YWFhMmZiNGVlOGNhMzZkNmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaApAQCAtMTYzLDggKzE2MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRX
ZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJU
Q01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgd2ViUlRD
SDI2NFNpbXVsY2FzdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDSDI2NFNpbXVs
Y2FzdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFdlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVkKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENIMjY0U2ltdWxjYXN0RW5hYmxlZCA9IGlzRW5hYmxl
ZDsgfQotICAgIGJvb2wgd2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRXZWJS
VENQbGF0Zm9ybVNvY2tldHNFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0
Zm9ybVNvY2tldHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9y
bVRDUFNvY2tldHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVENQ
U29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFdlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0Vu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29sIHdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKQEAgLTMxOSw3ICszMjEs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1dlYlJUQ1ZQOVByb2ZpbGUwQ29kZWNFbmFibGVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNXZWJSVENWUDlQcm9maWxlMkNvZGVjRW5hYmxlZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzV2ViUlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxl
ZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3Zp
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5jcHAKaW5kZXggZjkzNWExY2JlNGE5ZThhNzNlYWVjNmJlZjI0MWE1MDQwNjVlNmFj
Ni4uZjcyZjJjZmRjZjJjYmQ2MDRiYzRjZDUwNzkyYjlkN2JmNGE3YTM4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJv
dmlkZXIuY3BwCkBAIC00Niw3ICs0Niw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNs
dWRlICJOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oIgotI2luY2x1ZGUgIk5ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorI2luY2x1
ZGUgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMTMzLDYgKzEzNCwxNSBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRl
U29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgc3RkOgogCiB2b2lk
IE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlVURQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyYgYWRkcmVz
cywgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCkKIHsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBpZiAobV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgIGlm
IChhdXRvIHNvY2tldCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0
KGlkZW50aWZpZXIsICp0aGlzLCBhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0LCBtX2lw
Y0Nvbm5lY3Rpb24uY29weVJlZigpKSkgeworICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZp
ZXIsIFdURk1vdmUoc29ja2V0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisjZW5kaWYKKwogICAgIEFTU0VSVChtX3J0Y05ldHdvcmtUaHJlYWQuSXNDdXJyZW50KCkp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29ja2V0PiBzb2NrZXQobV9w
YWNrZXRTb2NrZXRGYWN0b3J5LT5DcmVhdGVVZHBTb2NrZXQoYWRkcmVzcy52YWx1ZSwgbWluUG9y
dCwgbWF4UG9ydCkpOwogICAgIGNyZWF0ZVNvY2tldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvY2tl
dCksIFNvY2tldDo6VHlwZTo6VURQLCBtX2lwY0Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAgLTE3
Nyw4ICsxODcsOCBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29j
a2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZgogICAgICAgICB9CiAgICAgICAg
IGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9
IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRy
ZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94
eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVz
ZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBt
dXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhp
cywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsK
KyAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0
ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9u
cywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
U29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCmluZGV4IDk1YjI5MTc2
NDYzNDg2ZDA0NTEzMTJlYzQ4MTI1OWQ3MjdlM2FjNWEuLjU1MTcxOWM1ZmM4ZTZkNTNlN2RmZWI0
NmI4MmQ2NjRiMjlkMTI2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCkBAIC0xMDEsNiArMTAxLDggQEAg
cHVibGljOgogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9p
cGNDb25uZWN0aW9uLmdldCgpOyB9CiAKKyAgICB2b2lkIGNsb3NlU29ja2V0KFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdv
cmtSVENQcm92aWRlcihOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOwogICAgIHZvaWQg
c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKQEAgLTExMCw5ICsxMTIsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY3JlYXRlU2VydmVyVENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNvY2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0
LCB1aW50MTZfdCBtYXhQb3J0LCBpbnQpOwogICAgIHZvaWQgd3JhcE5ld1RDUENvbm5lY3Rpb24o
V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5ld0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHNlbmRUb1NvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVy
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiYs
IFJUQ1BhY2tldE9wdGlvbnMmJik7Ci0gICAgdm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldFNvY2tldE9wdGlvbihXZWJDb3Jl
OjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpOwotICAg
IHZvaWQgc2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9y
bVNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1UQ1BTb2Nr
ZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0g
ZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQogCiAgICAg
dm9pZCBjcmVhdGVSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIsIFN0cmluZyYm
KTsKICAgICB2b2lkIHN0b3BSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIpOwpA
QCAtMTQxLDcgKzE0Myw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29j
a2V0Pj4gbV9wZW5kaW5nSW5jb21pbmdTb2NrZXRzOwogICAgIGJvb2wgbV9pc0xpc3RlbmluZ1Nv
Y2tldEF1dGhvcml6ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX3BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fcGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdl
cy5pbgppbmRleCAxMTcyOTkwNzBmYzI2ODAyZjEwZjkzOThiZDAxODU1MzljMjMwZDdmLi5iZmRk
ZGE3OTk4MzZhNDUwZDhiNTk5MmQ5NTE4MjUxNThjNjMxYzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1By
b3ZpZGVyLm1lc3NhZ2VzLmluCkBAIC0yOCw3ICsyOCw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtS
VENQcm92aWRlciB7CiAgICAgQ3JlYXRlQ2xpZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJU
Q1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRB
ZGRyZXNzIGxvY2FsQWRkcmVzcywgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIHJl
bW90ZUFkZHJlc3MsIFN0cmluZyB1c2VyQWdlbnQsIGludCBvcHRpb25zKQogICAgIFdyYXBOZXdU
Q1BDb25uZWN0aW9uKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0
SWRlbnRpZmllcikKIAotICAgIHZvaWQgU2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpCisgICAgdm9pZCBTZXRQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
CiAgICAgQ3JlYXRlUmVzb2x2ZXIoV2ViS2l0OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgU3RyaW5nIGFkZHJlc3MpCiAgICAgU3RvcFJlc29sdmVyKFdlYktpdDo6TGli
V2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhk
ZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNp
bmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsu
aD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGlj
IE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JU
Q1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtS
VENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNs
b3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBm
aW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAg
IFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6
OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90
PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGli
V2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBh
cnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9C
bG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hf
UVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRD
b2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBz
c2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwu
Ci0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3Rl
QWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+
JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+
JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0g
ICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAg
bndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9
IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRh
KSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndf
Y29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3Bh
dGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3Qs
IHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBz
aXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgp
KTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50
X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNv
bWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RG
TW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2Nv
YTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRp
ZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRB
ZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5
OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFt
ZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90
ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJl
bW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRs
ZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUg
cGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBi
b29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsK
LSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3Rj
cChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1F
VEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9u
cykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRy
dWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0
aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rp
b25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBu
d19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0
KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVm
KCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJy
b3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoK
LSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2Ug
bndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRp
ZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdv
cmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRj
UHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1f
bndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwg
cG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1
ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhX
VEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJS
VEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0g
ICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXAp
LCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19
Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253
Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1f
bndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVu
dGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQs
IGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9y
PHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBh
dXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJu
IGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7
Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpj
cmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewot
ICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1l
c3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwg
c2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBz
aXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBh
ZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0
aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAg
IGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAw
IDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXpl
OyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZG
KTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIu
YXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29y
a1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6
ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53
X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RG
TW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVY
VCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0
aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9y
X3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29y
azo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6
OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlNWZhOTRjMzE0N2Q1NTdmNTFk
ZTAxN2U0NjhjYzE0NzhkOGFkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgi
CisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+CisKK25hbWVzcGFjZSBydGMgeworY2xhc3Mg
U29ja2V0QWRkcmVzczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tl
dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRlQ2xpZW50VENQ
U29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpD
b25uZWN0aW9uPiYmKTsKKworICAgIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYShXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisK
K3ByaXZhdGU6CisgICAgLy8gTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQuCisgICAgV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gVHlwZTo6Q2xpZW50VENQOyB9CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQg
c2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBzZW5kVG8o
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3Qg
cnRjOjpQYWNrZXRPcHRpb25zJikgZmluYWw7CisKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlYXRl
TWVzc2FnZUJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92
aWRlciYgbV9ydGNQcm92aWRlcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9ud0Nvbm5lY3Rpb247CisgICAg
Ym9vbCBtX2lzU1RVTiB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZjQwOGM2NmQ5M2I3ZjU3ZTU0NGVlZjJiM2Iw
YTJlNWZjNDAwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0KQEAgLTAsMCArMSwxOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENOZXR3
b3JrTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9T
VFVOTWVzc2FnZVBhcnNpbmcuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2lu
Y2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHRjcFNvY2tldFF1ZXVl
KCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgVENQIHNvY2tl
dCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOworICAgIHJldHVy
biBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJv
dmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgaW50IHRjcE9w
dGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1pZ3JhdGUgc3NsdGNwIGNhbmRpZGF0ZXMsIG1heWJlIHN1cHBvcnQgT1BU
X1RMU19JTlNFQ1VSRSBhcyB3ZWxsLgorICAgIGlmICgodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19GQUtFKSB8fCAodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19JTlNFQ1VSRSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtYWtlVW5pcXVlPE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYT4oaWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIsIHJlbW90ZUFkZHJlc3MsIHRjcE9wdGlvbnMsIFdURk1vdmUoY29u
bmVjdGlvbikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc0luY29taW5nRGF0YShS
ZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiYmIG53Q29ubmVjdGlvbiwgRnVuY3Rpb248VmVjdG9y
PHVpbnQ4X3Q+KFZlY3Rvcjx1aW50OF90PiYmKT4mJiBwcm9jZXNzRGF0YSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgYnVmZmVyID0geyB9KQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0g
bndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rp
b25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFr
ZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NE
YXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oZGlz
cGF0Y2hfZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wg
aXNDb21wbGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250
ZW50KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9j
a1B0cihbJl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEludHJvZHVjZSB1bmNoZWNrZWRB
cHBlbmQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgICAgICBidWZmZXIgPSBwcm9jZXNz
RGF0YShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbXBsZXRl
ICYmIGNvbnRleHQgJiYgbndfY29udGVudF9jb250ZXh0X2dldF9pc19maW5hbChjb250ZXh0KSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgcHJvY2Vz
c0luY29taW5nRGF0YSBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIG53X2Vycm9yX2dldF9lcnJvcl9j
b2RlKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJv
Y2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vzc0Rh
dGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBhY2tl
dFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1vdGVB
ZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAgIGhv
c3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8gaG9z
dCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwgU3Ry
aW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAv
LyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90aGVy
IG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zlcmlm
eV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0
b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJ
T04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0aW9u
c190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxheSh0
Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBhZG9w
dE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOworCisg
ICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNvY2tl
dFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlciht
X253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFi
bGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJy
b3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGlu
ZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgorICAg
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2ln
bmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92aWRl
ci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAg
ICAgICAgICAgICAgICBydGNQcm92aWRlci0+Y2xvc2VTb2NrZXQoaWRlbnRpZmllcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX253Q29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG53
X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKKyAgICBtX3J0Y1Byb3Zp
ZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29j
a2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBGSVhNRTogVmFsaWRhdGUg
dGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFf
dD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sKKyAgICBhdXRvIGJ1ZmZl
clNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIo
KS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3
UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgZmFzdEZyZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitWZWN0b3I8dWludDhfdD4g
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICht
X2lzU1RVTikgeworICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVO
T3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7CisgICAgICAgIGlmICghbWVzc2FnZUxl
bmd0aHMpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEFTU0VSVChtZXNzYWdl
TGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VM
ZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7CisgICAgICAgIGlmICht
ZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VM
ZW5ndGhXaXRoUGFkZGluZyk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNz
YWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCisgICAgICAgICAgICBidWZmZXIu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKworICAg
IC8vIFByZXBlbmQgbGVuZ3RoLgorICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgYnVm
ZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOworICAgIGJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICBidWZmZXIudW5jaGVja2VkQXBwZW5k
KHNpemUgJiAweEZGKTsKKyAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIHJldHVy
biBidWZmZXI7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpzZW5kVG8oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGJ1ZmZlciA9
IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVj
dGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09O
TkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYo
KSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50
aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKKyAgICB9
KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1YjA1MTNjNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1
ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKworbmFtZXNw
YWNlIHJ0YyB7CitjbGFzcyBTb2NrZXRBZGRyZXNzOworfQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPiB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7
IHJldHVybiBhZGRyZXNzLkhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBiKSB7IHJldHVy
biBhID09IGIgfHwgKGEuSXNOaWwoKSAmJiBiLklzTmlsKCkgJiYgYS5zY29wZV9pZCgpID09IGIu
c2NvcGVfaWQoKSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxydGM6OlNvY2tldEFkZHJlc3M+IDogR2VuZXJpY0hhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRy
ZXNzPiB7CisgICAgc3RhdGljIHJ0Yzo6U29ja2V0QWRkcmVzcyBlbXB0eVZhbHVlKCkgeyByZXR1
cm4gcnRjOjpTb2NrZXRBZGRyZXNzIHsgfTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsgYWRkcmVzcyA9IHsgfTsg
YWRkcmVzcy5TZXRTY29wZUlEKC0xKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1cm4gYWRkcmVzcy5zY29w
ZV9pZCgpID09IC0xOyB9Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczsKKworY2xhc3MgTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVVRFBTb2NrZXQoV2Vi
Q29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29u
c3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9y
dCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7Cisg
ICAgfk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdv
cmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZv
aWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFs
dWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0
IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOwor
CisgICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFJlZjxOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucz4gbV9ud0Nvbm5lY3Rpb25zOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDM5ZTg1YmU4
MjlmZGE0MzhhZWVmMzlmZDBkYzUwNjMwNmM1MDY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
CkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYm
IFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworY2xhc3MgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29u
bmVjdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtSVENVRFBTb2NrZXRD
b2NvYUNvbm5lY3Rpb25zPiBjcmVhdGUoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHByb3ZpZGVyLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmIGFkZHJlc3MsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyhpZGVudGlmaWVyLCBwcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpOyB9
CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50
IHZhbHVlKTsKKyAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKTsKKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKworICAgIFJldGFpblB0cjxu
d19jb25uZWN0aW9uX3Q+IGNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJl
c3MmKTsKKyAgICB2b2lkIHNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJik7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVu
dGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndf
bGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsK
KyAgICBib29sIG1faXNDbG9zZWQgV1RGX0dVQVJERURfQllfTE9DSyhtX253Q29ubmVjdGlvbnNM
b2NrKSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDxydGM6OlNvY2tldEFkZHJlc3MsIFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+PiBtX253Q29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyht
X253Q29ubmVjdGlvbnNMb2NrKTsKK307CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHVkcFNv
Y2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
VG9rZW4sIF57CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMg
VURQIHNvY2tldCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOwor
ICAgIHJldHVybiBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZVVEUFNvY2tldChXZWJD
b3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgdWlu
dDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBj
b25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBEZWNpZGUgaG93IHRvIHVzZSBtaW5Qb3J0L21h
eFBvcnQuCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hPihp
ZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSk7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKFdl
YkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1By
b3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBS
ZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX3J0Y1Byb3ZpZGVyKHJ0
Y1Byb3ZpZGVyKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX253Q29u
bmVjdGlvbnMoTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZShpZGVu
dGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpCit7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6fk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgp
Cit7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjbG9zZSgpCit7CisgICAg
bV9ud0Nvbm5lY3Rpb25zLT5jbG9zZSgpOworICAgIG1fcnRjUHJvdmlkZXIudGFrZVNvY2tldCht
X2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6c2V0T3B0
aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkKK3sKKyAgICBtX253Q29ubmVjdGlvbnMtPnNldE9w
dGlvbihvcHRpb24sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6
OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiBhZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5zZW5kVG8oZGF0YSwgc2l6ZSwgYWRkcmVzcywgb3B0aW9u
cyk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0
aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKK3sKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBhZG9wdE5TKG53
X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAoTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RP
Q09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklHVVJBVElPTikpOworICAgIHsKKyAgICAg
ICAgYXV0byBob3N0QWRkcmVzcyA9IGFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAg
ICAgaWYgKGFkZHJlc3MuaXBhZGRyKCkuSXNOaWwoKSkKKyAgICAgICAgICAgIGhvc3RBZGRyZXNz
ID0gYWRkcmVzcy5ob3N0bmFtZSgpOworICAgICAgICBhdXRvIGxvY2FsRW5kcG9pbnQgPSBhZG9w
dE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RBZGRyZXNzLmNfc3RyKCksICIwIikpOwor
ICAgICAgICBtX2FkZHJlc3MgPSB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShsb2NhbEVuZHBv
aW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQobG9jYWxFbmRwb2ludC5nZXQoKSkgfTsK
KyAgICAgICAgbndfcGFyYW1ldGVyc19zZXRfbG9jYWxfZW5kcG9pbnQocGFyYW1ldGVycy5nZXQo
KSwgbG9jYWxFbmRwb2ludC5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBwcm90
b2NvbFN0YWNrID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NvcHlfZGVmYXVsdF9wcm90b2NvbF9z
dGFjayhwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMo
bndfcHJvdG9jb2xfc3RhY2tfY29weV9pbnRlcm5ldF9wcm90b2NvbChwcm90b2NvbFN0YWNrLmdl
dCgpKSk7CisgICAgICAgIG53X2lwX29wdGlvbnNfc2V0X3ZlcnNpb24ob3B0aW9ucy5nZXQoKSwg
YWRkcmVzcy5mYW1pbHkoKSA9PSBBRl9JTkVUID8gbndfaXBfdmVyc2lvbl80IDogbndfaXBfdmVy
c2lvbl82KTsKKyAgICB9CisKKyAgICBtX253TGlzdGVuZXIgPSBhZG9wdE5TKG53X2xpc3RlbmVy
X2NyZWF0ZShwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgbndfbGlzdGVuZXJfc2V0X3F1ZXVlKG1f
bndMaXN0ZW5lci5nZXQoKSwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBud19saXN0ZW5lcl9z
ZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQoKSwgbWFrZUJsb2NrUHRy
KFtud0xpc3RlbmVyID0gbV9ud0xpc3RlbmVyLmdldCgpLCBhZGRyZXNzID0gbV9hZGRyZXNzLCBj
b25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgcHJvdGVjdGVkUlRDUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllcl0obndfbGlz
dGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9pbnZhbGlk
OgorICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3dhaXRpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9yZWFkeToKKyAgICAgICAgICAg
IGFkZHJlc3MuU2V0UG9ydChud19saXN0ZW5lcl9nZXRfcG9ydChud0xpc3RlbmVyKSk7CisgICAg
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWdu
YWxBZGRyZXNzUmVhZHkoaWRlbnRpZmllciwgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyhhZGRy
ZXNzKSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJf
c3RhdGVfZmFpbGVkOgorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiTmV0
d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBl
cnJvciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAg
cHJvdGVjdGVkUlRDUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3Byb3RlY3RlZFJU
Q1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkUlRDUHJv
dmlkZXItPmNsb3NlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxD
bG9zZShpZGVudGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgbndfbGlzdGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9zZXRfbmV3X2Nvbm5lY3Rp
b25faGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0cihbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXShud19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikgeworICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgcHJvdGVjdGVkVGhpcy0+bV9ud0Nvbm5lY3Rpb25zTG9jayB9Owor
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0Nsb3NlZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIGVuZHBvaW50ID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NvcHlf
ZW5kcG9pbnQoY29ubmVjdGlvbikpOworICAgICAgICBydGM6OlNvY2tldEFkZHJlc3MgcmVtb3Rl
QWRkcmVzcyB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShlbmRwb2ludC5nZXQoKSksIG53X2Vu
ZHBvaW50X2dldF9wb3J0KGVuZHBvaW50LmdldCgpKSB9OworCisgICAgICAgIHByb3RlY3RlZFRo
aXMtPm1fbndDb25uZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29ubmVjdGlvbik7CisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPnNldHVwTldDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlbW90ZUFk
ZHJlc3MpOworICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVyX3N0YXJ0KG1fbndMaXN0
ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OmNsb3NlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9
OworICAgIG1faXNDbG9zZWQgPSB0cnVlOworCisgICAgbndfbGlzdGVuZXJfY2FuY2VsKG1fbndM
aXN0ZW5lci5nZXQoKSk7CisgICAgbV9ud0xpc3RlbmVyID0gbnVsbHB0cjsKKworICAgIGZvciAo
YXV0byYgbndDb25uZWN0aW9uIDogbV9ud0Nvbm5lY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBu
d19jb25uZWN0aW9uX2NhbmNlbChud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fbndDb25uZWN0
aW9ucy5jbGVhcigpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpzZXRPcHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6IFZhbGlkYXRlIHRoaXMg
aXMgbm90IG5lZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NVRFBEYXRhKFJl
dGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQoreworICAgIGF1dG8gbndDb25u
ZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25f
cmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29u
bmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSldKGRpc3BhdGNoX2Rh
dGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxl
dGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgewor
ICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZd
KGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkg
eworICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9KS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4
dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zIGZhaWxl
ZCBwcm9jZXNzaW5nIFVEUCBkYXRhIHdpdGggZXJyb3IgJWQiLCBlcnJvciA/IG53X2Vycm9yX2dl
dF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0aW9uKSwgV1RGTW92ZShw
cm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsKK30KKworUmV0YWluUHRyPG53X2Nvbm5lY3Rp
b25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZU5XQ29ubmVj
dGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgYXV0
byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdWRwKE5X
X1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJ
R1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3Mu
aXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG1fYWRkcmVzcy5pcGFkZHIoKS5Jc05p
bCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3MuaG9zdG5hbWUoKTsKKyAg
ICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9z
dChob3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2FkZHJlc3MucG9ydCgpKS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xvY2FsX2VuZHBvaW50
KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jb3B5X2Rl
ZmF1bHRfcHJvdG9jb2xfc3RhY2socGFyYW1ldGVycy5nZXQoKSkpOworICAgICAgICBhdXRvIG9w
dGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50ZXJuZXRfcHJvdG9jb2wo
cHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRpb25zX3NldF92ZXJzaW9u
KG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0gQUZfSU5FVCA/IG53X2lw
X3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisgICAgYXV0byByZW1vdGVI
b3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICBpZiAo
cmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICByZW1vdGVIb3N0QWRkcmVz
cyA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KHJlbW90ZUhvc3RBZGRyZXNzLmNfc3RyKCksIFN0cmluZzo6
bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7CisgICAgYXV0byBu
d0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHBh
cmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNldHVwTldDb25uZWN0aW9uKG53Q29ubmVjdGlvbi5n
ZXQoKSwgcmVtb3RlQWRkcmVzcyk7CisgICAgcmV0dXJuIG53Q29ubmVjdGlvbjsKK30KKwordm9p
ZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5lY3Rpb24o
bndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBy
ZW1vdGVBZGRyZXNzKQoreworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG53Q29ubmVjdGlv
biwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBwcm9jZXNzVURQRGF0YShud0Nvbm5lY3Rpb24s
IFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNv
cHlSZWYoKSwgaXAgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVz
cy5wb3J0KCldKGF1dG8qIG1lc3NhZ2UsIGF1dG8gc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3NhZ2UsIHNpemUpOworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxSZWFkUGFja2V0IHsgaWRl
bnRpZmllciwgZGF0YSwgUlRDTmV0d29yazo6SVBBZGRyZXNzKGlwKSwgcG9ydCwgcnRjOjpUaW1l
TWlsbGlzKCkgKiAxMDAwIH0sIDApOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFy
dChud0Nvbm5lY3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5l
Y3Rpb25zOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25z
JiBvcHRpb25zKQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rpb247CisgICAgewor
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9OworICAgICAgICBu
d0Nvbm5lY3Rpb24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90ZUFkZHJlc3MsIFt0aGlz
LCAmcmVtb3RlQWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5XQ29ubmVjdGlv
bihyZW1vdGVBZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAg
IH0KKworICAgIGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2RhdGFfY3JlYXRlKGRhdGEs
IHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9ERUZBVUxUKSk7CisgICAg
bndfY29ubmVjdGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0KCksIE5XX0NPTk5FQ1RJ
T05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9ja1B0cihbaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIG9w
dGlvbnNdKF9OdWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNrZXQgeyBpZGVudGlmaWVy
LCBvcHRpb25zLnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwgMCk7CisgICAgfSkuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDA2NGVlYjU3
OGVmNzFmNDUyOGQ3ZmJiYzU4ZGIzNjA0NjMxMjk5Y2IuLjY5MzFiNDYyOGUwMzZhNTZhYzJiNWZi
N2RhNDhkNzEyMWM5ZmRiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU0LDcgKzU0LDgg
QEAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9yLmNwcAogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1Jlc29sdmVyQ29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tl
dENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29h
Lm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCiAK
IEdQVVByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQVVNlcnZpY2VFbnRyeVBv
aW50Lm1tCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2Eu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkZGVkYzQ4YjRkNzg1M2E5MTc0MTU5NzMzNWMzYzJhMDFjNWRjMWIxLi4wOWY2MDE3NjMw
OTlhNDJkZTdiNzQ1NjgxNWQ1NGViOWNlODY3ODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDUsOCArMzcwNSw4IEBACiAJCTQx
MDNGQkEyMjA2MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZCNTAwRjAwNkQwIC8qIFJU
Q05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUlRDTmV0
d29yay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNDMURERDJGQjUw
MEYwMDZEMCAvKiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJUQ05ldHdvcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExMzkyNTcx
MzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENUQ1BTb2NrZXRD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExM0EyNTcxMzVGMjAw
MkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEx
MTQzNjMyMEY2NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRl
bHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQjcyNjAyMTUyQjAwQjBB
MEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrL3dlYnJ0
Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5l
bFJlbW90ZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgzOSw2ICsz
ODM5LDggQEAKIAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExpYldlYlJUQ1NvY2tldENs
aWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWJXZWJSVENT
b2NrZXRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDU5QTFF
M0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEgLyogV2ViUlRDUmVzb2x2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUlRDUmVzb2x2
ZXIuY3BwOyBwYXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29y
a1JUQ1VEUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNzI2
N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUUwQTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1By
b3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYzOTc5MDA1NjEwNjAgLyog
TGliV2ViUlRDQ29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMaWJXZWJSVEND
b2RlY3NQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MDYsOCArODQw
OCwxMCBAQAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBOZXR3b3JrUlRDUmVzb2x2
ZXIuaCAqLywKIAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29s
dmVyQ29jb2EuY3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzk4NiAvKiBOZXR3b3Jr
UlRDUmVzb2x2ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBO
ZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEg
LyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJF
MkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJCQk0MTBCQTEzOTI1NzEz
NUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tICovLAorCQkJCTQxREQ3
MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCAqLywKKwkJ
CQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
ICovLAogCQkJCTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4MDAwQjBBMEI2IC8qIFJU
Q0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJNDExMjIzQkQyNjAyNEU4
MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRj
L0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCmluZGV4IGQ4OTdiYjNmMjg0
NjY1YzZjMDMwNDg1Nzk1NDJiYmM5M2JhMTNkMmIuLjUzMjMzYmVmOWVmMWI5ZmIyYTVlMzcyNjdk
MmJjZTQxZmUzNDg0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHAKQEAg
LTU0LDcgKzU0LDggQEAgdm9pZCBMaWJXZWJSVENTb2NrZXRGYWN0b3J5OjpzZXRDb25uZWN0aW9u
KFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAgICBpZiAoIW1fY29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUlRDUHJvdmlkZXI6OlNldFBsYXRmb3JtU29ja2V0c0VuYWJsZWQoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFi
bGVkKCkpLCAwKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtSVENQ
cm92aWRlcjo6U2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQoKSks
IDApOworICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1JUQ1Byb3ZpZGVy
OjpTZXRQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCgpKSwgMCk7CiAK
ICAgICB3aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VUYXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIG1f
cGVuZGluZ01lc3NhZ2VUYXNrcy50YWtlRmlyc3QoKSgqbV9jb25uZWN0aW9uKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAy
NjY3OGIyM2U3YTk0NmU5ZWRhMmEwMGE1YWQ1NmY3ODE5MWVmNjNiLi40NjM3MjA5NWRmNDEyY2I0
MDVkMDY2NzhmODNhMWI0NDcxYTQ1YmIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYt
MjkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0g
TWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzk4NTkwNDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdrMi9UZXN0RXhwZWN0YXRp
b25zOgorICAgICAgICBNYXJrIHRlc3QgYXMgZmFpbGVkLCBhcyB0aGlzIHRlc3QgaXMgdXNpbmcg
dW5zdXBwb3J0ZWQgQVBJICh0cmFuc3BvcnQpLgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VDb2NvYSBzaG91bGQgc3VwcG9ydCBvdGhlciBzYW1wbGUgcmF0ZSB0aGFuIDQ4MDAwCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCBiNzJiMjUwY2IyZjFiOGJmZmI3ZTFhM2ZlNDg0
ZjUzMDkxNmY3MjBhLi43YTcyZTBhZTcxYTkzNjEyNGMwZDM5MzFjMDliMTk1YTRlNjBkYWY4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNi0y
OCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBN
aWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgIFJlYmFzaW5nIHRlc3RzIGFzIHRpbWlu
ZyBjaGFuZ2VzIGEgYml0LgorICAgICAgICBUaGlzIGFsaWducyB3aXRoIENocm9tZSBhbmQgRmly
ZWZveCBiZWhhdmlvci4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8t
bWVkaWEtY2FsbC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wNi0yNSAgWmlyYW4gU3Vu
ICA8enN1bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZ3JpZF0gQ29uc2lkZXIgY29udGFp
bmVyJ3Mgd3JpdGluZyBtb2RlIHRvIGdldCBncmlkIGl0ZW0ncyBtYXJnaW4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1l
ZGlhLWNhbGwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2FsbC1leHBlY3RlZC50eHQKaW5kZXggY2FlNzVi
ZjdmZjMzODliYjU0OTdhNDdjZTRjOGM2MGRjMWUwN2NkYy4uYWQyMTg5MzFkNzU1ZTFmNTY0MDEw
M2MzMzgwMjhkZTFiMGZkNDE5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2FsbC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8t
bWVkaWEtY2FsbC1leHBlY3RlZC50eHQKQEAgLTIsNSArMiw1IEBACiBQQVNTIENhbiBzZXQgdXAg
YSBiYXNpYyBXZWJSVEMgY2FsbCB3aXRoIG5vIGRhdGEuCiBpY2VDb25uZWN0aW9uU3RhdGUgaW5m
bwogCi1GaXJzdDogY29tcGxldGVkCitGaXJzdDogY29ubmVjdGVkCiBTZWNvbmQ6IGNvbm5lY3Rl
ZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvcHJvbWlzZXMtY2FsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4
dAppbmRleCBmMjRhYWEwYjA2ZTJmMWJlYzk0MmY3MTdiMWM0ODkzMmU3YzFkZWNiLi5mMzFmYTg0
YjkyYWI1M2UyZWVmOWY2ZDMyYmE3MmEwYTRlYWM0NzQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUgQEAKIFBB
U1MgQ2FuIHNldCB1cCBhIGJhc2ljIFdlYlJUQyBjYWxsIHdpdGggb25seSBkYXRhIHVzaW5nIHBy
b21pc2VzLgogaWNlQ29ubmVjdGlvblN0YXRlIGluZm8KIAotRmlyc3Q6IGNvbXBsZXRlZAorRmly
c3Q6IGNvbm5lY3RlZAogU2Vjb25kOiBjb25uZWN0ZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy1zaW11bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDNhMTU3
OWRlMTNhOTEyZDhhZjVkZjQ2YjUzZWFjNTZhNDY4ZTc1MmQuLjk3ZDc4YmNlZDdjODAzMTlmYjUz
MDk3NWQzYmYwNzU0ZjI2ODhmZTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2lv
cy1zaW11bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vaW9zLXNpbXVsYXRvci13azIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtOTEsNiArOTEsNyBAQCB3
ZWJraXQub3JnL2IvMjE0NzMwIFsgRGVidWcgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9SVENTY3RwVHJhbgogd2Via2l0Lm9yZy9iLzIxNDY2MSBbIERlYnVnIF0gaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDU2N0cFRyYW5zcG9ydC1ldmVu
dHMuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzIxNDczMCBbIERlYnVnIF0gd2VicnRjL3Np
bXVsY2FzdC1oMjY0Lmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNhbmRpZGF0ZS1pbi1zZHAuaHR0cHMuaHRtbCBb
IFBhc3MgRmFpbHVyZSBdCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9w
cm90b2NvbC9jcnlwdG8tc3VpdGUuaHR0cHMuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3Jn
L2IvMjE0MzU4IGZhc3Qvc2Nyb2xsaW5nL2lvcy9wcm9ncmFtbWF0aWMtc2Nyb2xsLXdoaWxlLXpv
b21lZC5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIApAQCAtMTczLDQgKzE3NCw0IEBAIHdlYmtpdC5v
cmcvYi8yMjUxNjkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93b3JrZXJzL2ludGVy
ZmFjZXMvRGVkaWNhdGVkCiAKIHdlYmtpdC5vcmcvYi8yMjU2NjggaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC9yZWRpcmVjdC1jcm9zcy1vcmlnaW4tdHJpcG1pbmUuaHRtbCBbIFNsb3cgXQogCi13
ZWJraXQub3JnL2IvMjI1ODMwIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nz
cy13aWxsLWNoYW5nZS93aWxsLWNoYW5nZS10cmFuc2Zvcm0taHVnZS1vZmZzZXQtc2Nyb2xsZWQu
aHRtbCAgWyBQYXNzIEltYWdlT25seUZhaWx1cmUgXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKK3dlYmtpdC5vcmcvYi8yMjU4MzAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXdpbGwtY2hhbmdlL3dpbGwtY2hhbmdlLXRyYW5zZm9ybS1odWdlLW9mZnNldC1zY3Jv
bGxlZC5odG1sICBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432570</attachid>
            <date>2021-06-30 00:45:50 -0700</date>
            <delta_ts>2021-06-30 00:49:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-227210-20210630094548.patch</filename>
            <type>text/plain</type>
            <size>70766</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA5Nzg3M2QxMTkzYTBjNTUxOTBiY2Q0OTY3ZTEzN2JjYzdlOGNlY2M5Li42ZGZl
ODI3ZWE1OTlkZTg3YjBlZDhlYmJmOGMwZDQzZDEyNDVmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBDYXJsc29uLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHA6
CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHA6CisgICAgICAg
ICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5leHA6CisKIDIwMjEtMDYtMjMgIEVyaWMg
Q2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0RGVjb2Rl
ci5oIHNob3VsZCBpbmNsdWRlIFRhcmdldENvbmRpdGlvbmFscy5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYwOTEzZDFhYzQ4
ZjI4MDI2YmY1YTliOTc1NDFhYzI5Y2UwN2E1YmQuLjY0YWYyOTBiYTdhNTMzOTkzMmRmOGQ1MWMw
ZDI2NzBjNDRhNGIyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYtMjggIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBXZWJS
VEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgYSBuZXcgZXhwZXJpbWVudGFsIGZsYWcgZm9yIE5X
IGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKwogMjAyMS0wNi0yNyAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbTW9kZWxdIFtpT1NdIEFkZCBzdXBw
b3J0IGZvciByZW5kZXJpbmcgbW9kZWwgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAyOThjMzBj
ZmRhN2ZlZGJkNjQwZjhiNjM1N2NkNTZjMzJkNWI3MC4uZDdlZmM0YWExODUwM2M3ODkzZGQ1MzYy
MTAwMGNhNzlhYjE4ZGYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1p
Z3JhdGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIHRvIG5l
dyBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnIGZvciBOVyBiYWNrZWQgVURQIHNvY2tldHMuCisK
KyAgICAgICAgKiBwYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0
V2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJSVENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldFdlYlJUQ1Bs
YXRmb3JtVURQU29ja2V0c0VuYWJsZWQpOgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VD
b2NvYSBzaG91bGQgc3VwcG9ydCBvdGhlciBzYW1wbGUgcmF0ZSB0aGFuIDQ4MDAwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGYyNWY3NDBhNDQzYmY0MmFiMDQ2MzgxZjI2ZjVmMDBjOTFkNmFmODguLmNlNzdhZmM5OTVh
YzAyYjc5MDlhNjI5ZDI5YzMxYmQ0MzQ0NzBmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMjEtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAg
IFtDb2NvYV0gTWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBNaWdyYXRlIFVEUCBz
b2NrZXQgaGFuZGxpbmcgZnJvbSBXZWJSVEMgcGh5c2ljYWwgc29ja2V0IHNlcnZlciB0byBudyBB
UEkgZm9yIENvY29hIHBvcnRzLgorCisgICAgICAgIEZvciBlYWNoIFVEUCBzb2NrZXQgb3BlbmVk
LCB3ZSBvcGVuIGEgbndfbGlzdGVuZXIgdGhhdCB3aWxsIGxpc3RlbiB0byBpbmJvdW5kIGNvbm5l
Y3Rpb25zLgorICAgICAgICBPbiBpbmJvdW5kIGNvbm5lY3Rpb24sIHdlIHJlY2VpdmUgYSBud19j
b25uZWN0aW9uIHRoYXQgd2Ugc3RvcmUgaW4gYSBhZGRyZXNzIC0+IGNvbm5lY3Rpb24gbWFwLgor
CisgICAgICAgIFdoZW5ldmVyIHNlbmRpbmcgYSBwYWNrZXQsIHdlIGxvb2sgYXQgdGhlIHJlbW90
ZSBhZGRyZXNzLgorICAgICAgICBJZiBuZWVkZWQsIHdlIGNyZWF0ZSBhIG53X2Nvbm5lY3Rpb24g
dG8gdGhhdCBwYXJ0aWN1bGFyIHJlbW90ZSBhZGRyZXNzIGFuZCBzdG9yZSBpdCBpbiB0aGUgYWRk
cmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKyAgICAgICAgV2UgdGhlbiB1c2UgdGhlIHByZS1leGlz
dGluZyBvciBuZXdseSBjcmVhdGVkIG53X2Nvbm5lY3Rpb24gdG8gc2VuZCB0aGUgcGFja2V0Lgor
CisgICAgICAgIE1ha2Ugc3VyZSB0byBjYW5jZWwgTlcgY29ubmVjdGlvbiBpbiBjYXNlIG9mIGZh
aWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgc29ja2V0LgorCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNy
ZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6Y3Jl
YXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ1Byb3ZpZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6
c2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENQcm92aWRlcjo6c2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENT
b2NrZXRDb2NvYS5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OnRj
cFNvY2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29h
OjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRlTWVzc2FnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6c2VuZFRvKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZXF1YWwpOgorICAgICAgICAo
V1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmVtcHR5VmFsdWUpOgorICAgICAg
ICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmNvbnN0cnVjdERlbGV0ZWRW
YWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNE
ZWxldGVkVmFsdWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OldURl9HVUFSREVEX0JZX0xPQ0spOgorICAg
ICAgICAoV2ViS2l0Ojp1ZHBTb2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6On5OZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3Nl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXRPcHRpb24pOgorICAgICAg
ICAoV2ViS2l0Ojpwcm9jZXNzVURQRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjcmVhdGVOV0Nvbm5lY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9uczo6c2VuZFRvKToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkxpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNldENvbm5lY3Rpb24pOgorCiAyMDIxLTA2LTI4ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgYW5kIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCmluZGV4IDdkMjI1Y2My
YzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQyOTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVj
MDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKQEAgLTMyMSwzICsz
MjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlmaWNhdGVEMUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRl
UGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0YzZUaHJlYWRFUzJfUzJfTlMwXzEzc2NvcGVkX3Jl
ZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxlRUVFTlMzX0lOU18xOUF1ZGlvRW5jb2RlckZhY3Rv
cnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVyRmFjdG9yeUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJ
TlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5TQV8xNGRlZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0Jf
SU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVOU0RfSVNHX0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhl
ckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3NpbmdFRUVQTlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29y
RQogX19aTks2d2VicnRjMjNSdHBUcmFuc2NlaXZlckludGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9u
c05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMzMFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFj
ZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktOU18yM1BlZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZS
VENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNvbm5lY3Rpb25EZXBlbmRlbmNpZXNFCitfX1pOSzNy
dGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2CitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3NlcUVSS1Mw
XworX19aTkszcnRjOUlQQWRkcmVzczVJc05pbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5l
eHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2Nj
ZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMu
aU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw2IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitfX1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3
ZWJydGMubWFjLmV4cCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9u
cy9saWJ3ZWJydGMubWFjLmV4cAppbmRleCA3ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQy
ODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZmNmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2Vi
cnRjLm1hYy5leHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRp
b25zL2xpYndlYnJ0Yy5tYWMuZXhwCkBAIC0zMjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0Nl
cnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMyN0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQ
TjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Njb3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1v
ZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29kZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVj
b2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlxdWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9y
eUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3Rv
cnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9j
ZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVByb2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJh
bnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2Vi
cnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9u
RVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVyZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBl
ZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hF
dgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1
SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlBy
ZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5j
ZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCAzMjNkYzVmMjYyNjIzNGZk
NDlkZmYxODE0OGViNGZhZGZlNjM1YjNmLi41NGE2ZWU2MDM5ZWJmYzdhNDY4ZDkyY2IxZmEwNzA0
OWEzNDc3ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTI5NywxNiArMTI5
NywyNiBAQCBXZWJSVENQbGF0Zm9ybUNvZGVjc0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgICAgV2Vi
Q29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKLVdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQ6CitXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkOgogICB0eXBlOiBib29sCi0gIGh1
bWFuUmVhZGFibGVOYW1lOiAiV2ViUlRDIFBsYXRmb3JtIFNvY2tldHMiCi0gIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gU29ja2V0cyIKKyAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCiAgIHdl
YmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCiAgIGNvbmRpdGlvbjogRU5BQkxF
KFdFQl9SVEMpCiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiB0
cnVlCiAKK1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAg
aHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMiCisgIGh1bWFu
UmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMi
CisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisgIGNvbmRpdGlvbjog
RU5BQkxFKFdFQl9SVEMpCisgIGRlZmF1bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZh
dWx0OiBmYWxzZQorCiBXZWJSVENWUDlQcm9maWxlMENvZGVjRW5hYmxlZDoKICAgdHlwZTogYm9v
bAogICBodW1hblJlYWRhYmxlTmFtZTogIldlYlJUQyBWUDkgcHJvZmlsZSAwIGNvZGVjIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCBkMDc3NGZk
OTExNjZiMmI5NzdmMmU5MzBjNTkwOWYzNWEyMTViZThlLi5lMTZjYjVkMTU3NjIxODY1NTBmOTVi
YWFhMmZiNGVlOGNhMzZkNmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaApAQCAtMTYzLDggKzE2MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRX
ZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJU
Q01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgd2ViUlRD
SDI2NFNpbXVsY2FzdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDSDI2NFNpbXVs
Y2FzdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFdlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVkKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENIMjY0U2ltdWxjYXN0RW5hYmxlZCA9IGlzRW5hYmxl
ZDsgfQotICAgIGJvb2wgd2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRXZWJS
VENQbGF0Zm9ybVNvY2tldHNFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0
Zm9ybVNvY2tldHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9y
bVRDUFNvY2tldHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVENQ
U29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFdlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0Vu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29sIHdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKQEAgLTMxOSw3ICszMjEs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1dlYlJUQ1ZQOVByb2ZpbGUwQ29kZWNFbmFibGVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNXZWJSVENWUDlQcm9maWxlMkNvZGVjRW5hYmxlZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzV2ViUlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxl
ZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3Zp
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5jcHAKaW5kZXggZjkzNWExY2JlNGE5ZThhNzNlYWVjNmJlZjI0MWE1MDQwNjVlNmFj
Ni4uZjcyZjJjZmRjZjJjYmQ2MDRiYzRjZDUwNzkyYjlkN2JmNGE3YTM4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJv
dmlkZXIuY3BwCkBAIC00Niw3ICs0Niw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNs
dWRlICJOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oIgotI2luY2x1ZGUgIk5ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorI2luY2x1
ZGUgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMTMzLDYgKzEzNCwxNSBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRl
U29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgc3RkOgogCiB2b2lk
IE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlVURQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyYgYWRkcmVz
cywgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCkKIHsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBpZiAobV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgIGlm
IChhdXRvIHNvY2tldCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0
KGlkZW50aWZpZXIsICp0aGlzLCBhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0LCBtX2lw
Y0Nvbm5lY3Rpb24uY29weVJlZigpKSkgeworICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZp
ZXIsIFdURk1vdmUoc29ja2V0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisjZW5kaWYKKwogICAgIEFTU0VSVChtX3J0Y05ldHdvcmtUaHJlYWQuSXNDdXJyZW50KCkp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29ja2V0PiBzb2NrZXQobV9w
YWNrZXRTb2NrZXRGYWN0b3J5LT5DcmVhdGVVZHBTb2NrZXQoYWRkcmVzcy52YWx1ZSwgbWluUG9y
dCwgbWF4UG9ydCkpOwogICAgIGNyZWF0ZVNvY2tldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvY2tl
dCksIFNvY2tldDo6VHlwZTo6VURQLCBtX2lwY0Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAgLTE3
Nyw4ICsxODcsOCBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29j
a2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZgogICAgICAgICB9CiAgICAgICAg
IGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9
IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRy
ZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94
eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVz
ZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBt
dXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhp
cywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsK
KyAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0
ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9u
cywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
U29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCmluZGV4IDk1YjI5MTc2
NDYzNDg2ZDA0NTEzMTJlYzQ4MTI1OWQ3MjdlM2FjNWEuLjU1MTcxOWM1ZmM4ZTZkNTNlN2RmZWI0
NmI4MmQ2NjRiMjlkMTI2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCkBAIC0xMDEsNiArMTAxLDggQEAg
cHVibGljOgogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9p
cGNDb25uZWN0aW9uLmdldCgpOyB9CiAKKyAgICB2b2lkIGNsb3NlU29ja2V0KFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdv
cmtSVENQcm92aWRlcihOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOwogICAgIHZvaWQg
c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKQEAgLTExMCw5ICsxMTIsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY3JlYXRlU2VydmVyVENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNvY2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0
LCB1aW50MTZfdCBtYXhQb3J0LCBpbnQpOwogICAgIHZvaWQgd3JhcE5ld1RDUENvbm5lY3Rpb24o
V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5ld0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHNlbmRUb1NvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVy
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiYs
IFJUQ1BhY2tldE9wdGlvbnMmJik7Ci0gICAgdm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldFNvY2tldE9wdGlvbihXZWJDb3Jl
OjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpOwotICAg
IHZvaWQgc2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9y
bVNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1UQ1BTb2Nr
ZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0g
ZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQogCiAgICAg
dm9pZCBjcmVhdGVSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIsIFN0cmluZyYm
KTsKICAgICB2b2lkIHN0b3BSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIpOwpA
QCAtMTQxLDcgKzE0Myw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29j
a2V0Pj4gbV9wZW5kaW5nSW5jb21pbmdTb2NrZXRzOwogICAgIGJvb2wgbV9pc0xpc3RlbmluZ1Nv
Y2tldEF1dGhvcml6ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX3BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fcGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdl
cy5pbgppbmRleCAxMTcyOTkwNzBmYzI2ODAyZjEwZjkzOThiZDAxODU1MzljMjMwZDdmLi5iZmRk
ZGE3OTk4MzZhNDUwZDhiNTk5MmQ5NTE4MjUxNThjNjMxYzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1By
b3ZpZGVyLm1lc3NhZ2VzLmluCkBAIC0yOCw3ICsyOCw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtS
VENQcm92aWRlciB7CiAgICAgQ3JlYXRlQ2xpZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJU
Q1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRB
ZGRyZXNzIGxvY2FsQWRkcmVzcywgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIHJl
bW90ZUFkZHJlc3MsIFN0cmluZyB1c2VyQWdlbnQsIGludCBvcHRpb25zKQogICAgIFdyYXBOZXdU
Q1BDb25uZWN0aW9uKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0
SWRlbnRpZmllcikKIAotICAgIHZvaWQgU2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpCisgICAgdm9pZCBTZXRQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
CiAgICAgQ3JlYXRlUmVzb2x2ZXIoV2ViS2l0OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgU3RyaW5nIGFkZHJlc3MpCiAgICAgU3RvcFJlc29sdmVyKFdlYktpdDo6TGli
V2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhk
ZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNp
bmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsu
aD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGlj
IE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JU
Q1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtS
VENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNs
b3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBm
aW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAg
IFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6
OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90
PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGli
V2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBh
cnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9C
bG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hf
UVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRD
b2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBz
c2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwu
Ci0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3Rl
QWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+
JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+
JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0g
ICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAg
bndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9
IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRh
KSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndf
Y29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3Bh
dGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3Qs
IHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBz
aXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgp
KTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50
X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNv
bWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RG
TW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2Nv
YTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRp
ZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRB
ZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5
OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFt
ZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90
ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJl
bW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRs
ZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUg
cGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBi
b29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsK
LSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3Rj
cChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1F
VEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9u
cykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRy
dWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0
aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rp
b25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBu
d19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0
KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVm
KCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJy
b3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoK
LSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2Ug
bndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRp
ZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdv
cmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRj
UHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1f
bndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwg
cG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1
ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhX
VEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJS
VEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0g
ICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXAp
LCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19
Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253
Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1f
bndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVu
dGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQs
IGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9y
PHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBh
dXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJu
IGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7
Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpj
cmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewot
ICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1l
c3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwg
c2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBz
aXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBh
ZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0
aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAg
IGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAw
IDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXpl
OyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZG
KTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIu
YXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29y
a1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6
ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53
X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RG
TW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVY
VCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0
aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9y
X3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29y
azo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6
OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlNWZhOTRjMzE0N2Q1NTdmNTFk
ZTAxN2U0NjhjYzE0NzhkOGFkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgi
CisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+CisKK25hbWVzcGFjZSBydGMgeworY2xhc3Mg
U29ja2V0QWRkcmVzczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tl
dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRlQ2xpZW50VENQ
U29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpD
b25uZWN0aW9uPiYmKTsKKworICAgIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYShXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisK
K3ByaXZhdGU6CisgICAgLy8gTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQuCisgICAgV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gVHlwZTo6Q2xpZW50VENQOyB9CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQg
c2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBzZW5kVG8o
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3Qg
cnRjOjpQYWNrZXRPcHRpb25zJikgZmluYWw7CisKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlYXRl
TWVzc2FnZUJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92
aWRlciYgbV9ydGNQcm92aWRlcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9ud0Nvbm5lY3Rpb247CisgICAg
Ym9vbCBtX2lzU1RVTiB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZjQwOGM2NmQ5M2I3ZjU3ZTU0NGVlZjJiM2Iw
YTJlNWZjNDAwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0KQEAgLTAsMCArMSwxOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENOZXR3
b3JrTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9T
VFVOTWVzc2FnZVBhcnNpbmcuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2lu
Y2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHRjcFNvY2tldFF1ZXVl
KCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgVENQIHNvY2tl
dCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOworICAgIHJldHVy
biBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJv
dmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgaW50IHRjcE9w
dGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1pZ3JhdGUgc3NsdGNwIGNhbmRpZGF0ZXMsIG1heWJlIHN1cHBvcnQgT1BU
X1RMU19JTlNFQ1VSRSBhcyB3ZWxsLgorICAgIGlmICgodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19GQUtFKSB8fCAodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19JTlNFQ1VSRSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtYWtlVW5pcXVlPE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYT4oaWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIsIHJlbW90ZUFkZHJlc3MsIHRjcE9wdGlvbnMsIFdURk1vdmUoY29u
bmVjdGlvbikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc0luY29taW5nRGF0YShS
ZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiYmIG53Q29ubmVjdGlvbiwgRnVuY3Rpb248VmVjdG9y
PHVpbnQ4X3Q+KFZlY3Rvcjx1aW50OF90PiYmKT4mJiBwcm9jZXNzRGF0YSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgYnVmZmVyID0geyB9KQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0g
bndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rp
b25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFr
ZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NE
YXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oZGlz
cGF0Y2hfZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wg
aXNDb21wbGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250
ZW50KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9j
a1B0cihbJl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEludHJvZHVjZSB1bmNoZWNrZWRB
cHBlbmQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgICAgICBidWZmZXIgPSBwcm9jZXNz
RGF0YShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbXBsZXRl
ICYmIGNvbnRleHQgJiYgbndfY29udGVudF9jb250ZXh0X2dldF9pc19maW5hbChjb250ZXh0KSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgcHJvY2Vz
c0luY29taW5nRGF0YSBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIG53X2Vycm9yX2dldF9lcnJvcl9j
b2RlKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJv
Y2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vzc0Rh
dGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBhY2tl
dFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1vdGVB
ZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAgIGhv
c3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8gaG9z
dCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwgU3Ry
aW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAv
LyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90aGVy
IG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zlcmlm
eV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0
b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJ
T04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0aW9u
c190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxheSh0
Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBhZG9w
dE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOworCisg
ICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNvY2tl
dFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlciht
X253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFi
bGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJy
b3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGlu
ZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgorICAg
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2ln
bmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92aWRl
ci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAg
ICAgICAgICAgICAgICBydGNQcm92aWRlci0+Y2xvc2VTb2NrZXQoaWRlbnRpZmllcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX253Q29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG53
X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKKyAgICBtX3J0Y1Byb3Zp
ZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29j
a2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBGSVhNRTogVmFsaWRhdGUg
dGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFf
dD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sKKyAgICBhdXRvIGJ1ZmZl
clNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIo
KS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3
UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgZmFzdEZyZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitWZWN0b3I8dWludDhfdD4g
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICht
X2lzU1RVTikgeworICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVO
T3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7CisgICAgICAgIGlmICghbWVzc2FnZUxl
bmd0aHMpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEFTU0VSVChtZXNzYWdl
TGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VM
ZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7CisgICAgICAgIGlmICht
ZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VM
ZW5ndGhXaXRoUGFkZGluZyk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNz
YWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCisgICAgICAgICAgICBidWZmZXIu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKworICAg
IC8vIFByZXBlbmQgbGVuZ3RoLgorICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgYnVm
ZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOworICAgIGJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICBidWZmZXIudW5jaGVja2VkQXBwZW5k
KHNpemUgJiAweEZGKTsKKyAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIHJldHVy
biBidWZmZXI7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpzZW5kVG8oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGJ1ZmZlciA9
IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVj
dGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09O
TkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYo
KSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50
aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKKyAgICB9
KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1YjA1MTNjNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1
ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKworbmFtZXNw
YWNlIHJ0YyB7CitjbGFzcyBTb2NrZXRBZGRyZXNzOworfQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPiB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7
IHJldHVybiBhZGRyZXNzLkhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBiKSB7IHJldHVy
biBhID09IGIgfHwgKGEuSXNOaWwoKSAmJiBiLklzTmlsKCkgJiYgYS5zY29wZV9pZCgpID09IGIu
c2NvcGVfaWQoKSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxydGM6OlNvY2tldEFkZHJlc3M+IDogR2VuZXJpY0hhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRy
ZXNzPiB7CisgICAgc3RhdGljIHJ0Yzo6U29ja2V0QWRkcmVzcyBlbXB0eVZhbHVlKCkgeyByZXR1
cm4gcnRjOjpTb2NrZXRBZGRyZXNzIHsgfTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsgYWRkcmVzcyA9IHsgfTsg
YWRkcmVzcy5TZXRTY29wZUlEKC0xKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1cm4gYWRkcmVzcy5zY29w
ZV9pZCgpID09IC0xOyB9Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczsKKworY2xhc3MgTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVVRFBTb2NrZXQoV2Vi
Q29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29u
c3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9y
dCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7Cisg
ICAgfk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdv
cmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZv
aWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFs
dWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0
IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOwor
CisgICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFJlZjxOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucz4gbV9ud0Nvbm5lY3Rpb25zOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDM5ZTg1YmU4
MjlmZGE0MzhhZWVmMzlmZDBkYzUwNjMwNmM1MDY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
CkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYm
IFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworY2xhc3MgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29u
bmVjdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtSVENVRFBTb2NrZXRD
b2NvYUNvbm5lY3Rpb25zPiBjcmVhdGUoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHByb3ZpZGVyLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmIGFkZHJlc3MsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyhpZGVudGlmaWVyLCBwcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpOyB9
CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50
IHZhbHVlKTsKKyAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKTsKKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKworICAgIFJldGFpblB0cjxu
d19jb25uZWN0aW9uX3Q+IGNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJl
c3MmKTsKKyAgICB2b2lkIHNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJik7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVu
dGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndf
bGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsK
KyAgICBib29sIG1faXNDbG9zZWQgV1RGX0dVQVJERURfQllfTE9DSyhtX253Q29ubmVjdGlvbnNM
b2NrKSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDxydGM6OlNvY2tldEFkZHJlc3MsIFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+PiBtX253Q29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyht
X253Q29ubmVjdGlvbnNMb2NrKTsKK307CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHVkcFNv
Y2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
VG9rZW4sIF57CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMg
VURQIHNvY2tldCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOwor
ICAgIHJldHVybiBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZVVEUFNvY2tldChXZWJD
b3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgdWlu
dDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBj
b25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBEZWNpZGUgaG93IHRvIHVzZSBtaW5Qb3J0L21h
eFBvcnQuCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hPihp
ZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSk7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKFdl
YkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1By
b3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBS
ZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX3J0Y1Byb3ZpZGVyKHJ0
Y1Byb3ZpZGVyKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX253Q29u
bmVjdGlvbnMoTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZShpZGVu
dGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpCit7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6fk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgp
Cit7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjbG9zZSgpCit7CisgICAg
bV9ud0Nvbm5lY3Rpb25zLT5jbG9zZSgpOworICAgIG1fcnRjUHJvdmlkZXIudGFrZVNvY2tldCht
X2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6c2V0T3B0
aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkKK3sKKyAgICBtX253Q29ubmVjdGlvbnMtPnNldE9w
dGlvbihvcHRpb24sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6
OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiBhZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5zZW5kVG8oZGF0YSwgc2l6ZSwgYWRkcmVzcywgb3B0aW9u
cyk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0
aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKK3sKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBhZG9wdE5TKG53
X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAoTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RP
Q09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklHVVJBVElPTikpOworICAgIHsKKyAgICAg
ICAgYXV0byBob3N0QWRkcmVzcyA9IGFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAg
ICAgaWYgKGFkZHJlc3MuaXBhZGRyKCkuSXNOaWwoKSkKKyAgICAgICAgICAgIGhvc3RBZGRyZXNz
ID0gYWRkcmVzcy5ob3N0bmFtZSgpOworICAgICAgICBhdXRvIGxvY2FsRW5kcG9pbnQgPSBhZG9w
dE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RBZGRyZXNzLmNfc3RyKCksICIwIikpOwor
ICAgICAgICBtX2FkZHJlc3MgPSB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShsb2NhbEVuZHBv
aW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQobG9jYWxFbmRwb2ludC5nZXQoKSkgfTsK
KyAgICAgICAgbndfcGFyYW1ldGVyc19zZXRfbG9jYWxfZW5kcG9pbnQocGFyYW1ldGVycy5nZXQo
KSwgbG9jYWxFbmRwb2ludC5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBwcm90
b2NvbFN0YWNrID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NvcHlfZGVmYXVsdF9wcm90b2NvbF9z
dGFjayhwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMo
bndfcHJvdG9jb2xfc3RhY2tfY29weV9pbnRlcm5ldF9wcm90b2NvbChwcm90b2NvbFN0YWNrLmdl
dCgpKSk7CisgICAgICAgIG53X2lwX29wdGlvbnNfc2V0X3ZlcnNpb24ob3B0aW9ucy5nZXQoKSwg
YWRkcmVzcy5mYW1pbHkoKSA9PSBBRl9JTkVUID8gbndfaXBfdmVyc2lvbl80IDogbndfaXBfdmVy
c2lvbl82KTsKKyAgICB9CisKKyAgICBtX253TGlzdGVuZXIgPSBhZG9wdE5TKG53X2xpc3RlbmVy
X2NyZWF0ZShwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgbndfbGlzdGVuZXJfc2V0X3F1ZXVlKG1f
bndMaXN0ZW5lci5nZXQoKSwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBud19saXN0ZW5lcl9z
ZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQoKSwgbWFrZUJsb2NrUHRy
KFtud0xpc3RlbmVyID0gbV9ud0xpc3RlbmVyLmdldCgpLCBhZGRyZXNzID0gbV9hZGRyZXNzLCBj
b25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgcHJvdGVjdGVkUlRDUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllcl0obndfbGlz
dGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9pbnZhbGlk
OgorICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3dhaXRpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9yZWFkeToKKyAgICAgICAgICAg
IGFkZHJlc3MuU2V0UG9ydChud19saXN0ZW5lcl9nZXRfcG9ydChud0xpc3RlbmVyKSk7CisgICAg
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWdu
YWxBZGRyZXNzUmVhZHkoaWRlbnRpZmllciwgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyhhZGRy
ZXNzKSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJf
c3RhdGVfZmFpbGVkOgorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiTmV0
d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBl
cnJvciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAg
cHJvdGVjdGVkUlRDUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3Byb3RlY3RlZFJU
Q1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkUlRDUHJv
dmlkZXItPmNsb3NlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxD
bG9zZShpZGVudGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgbndfbGlzdGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9zZXRfbmV3X2Nvbm5lY3Rp
b25faGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0cihbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXShud19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikgeworICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgcHJvdGVjdGVkVGhpcy0+bV9ud0Nvbm5lY3Rpb25zTG9jayB9Owor
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0Nsb3NlZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIGVuZHBvaW50ID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NvcHlf
ZW5kcG9pbnQoY29ubmVjdGlvbikpOworICAgICAgICBydGM6OlNvY2tldEFkZHJlc3MgcmVtb3Rl
QWRkcmVzcyB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShlbmRwb2ludC5nZXQoKSksIG53X2Vu
ZHBvaW50X2dldF9wb3J0KGVuZHBvaW50LmdldCgpKSB9OworCisgICAgICAgIHByb3RlY3RlZFRo
aXMtPm1fbndDb25uZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29ubmVjdGlvbik7CisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPnNldHVwTldDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlbW90ZUFk
ZHJlc3MpOworICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVyX3N0YXJ0KG1fbndMaXN0
ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OmNsb3NlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9
OworICAgIG1faXNDbG9zZWQgPSB0cnVlOworCisgICAgbndfbGlzdGVuZXJfY2FuY2VsKG1fbndM
aXN0ZW5lci5nZXQoKSk7CisgICAgbV9ud0xpc3RlbmVyID0gbnVsbHB0cjsKKworICAgIGZvciAo
YXV0byYgbndDb25uZWN0aW9uIDogbV9ud0Nvbm5lY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBu
d19jb25uZWN0aW9uX2NhbmNlbChud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fbndDb25uZWN0
aW9ucy5jbGVhcigpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpzZXRPcHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6IFZhbGlkYXRlIHRoaXMg
aXMgbm90IG5lZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NVRFBEYXRhKFJl
dGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQoreworICAgIGF1dG8gbndDb25u
ZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25f
cmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29u
bmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSldKGRpc3BhdGNoX2Rh
dGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxl
dGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgewor
ICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZd
KGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkg
eworICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9KS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4
dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zIGZhaWxl
ZCBwcm9jZXNzaW5nIFVEUCBkYXRhIHdpdGggZXJyb3IgJWQiLCBlcnJvciA/IG53X2Vycm9yX2dl
dF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0aW9uKSwgV1RGTW92ZShw
cm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsKK30KKworUmV0YWluUHRyPG53X2Nvbm5lY3Rp
b25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZU5XQ29ubmVj
dGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgYXV0
byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdWRwKE5X
X1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJ
R1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3Mu
aXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG1fYWRkcmVzcy5pcGFkZHIoKS5Jc05p
bCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3MuaG9zdG5hbWUoKTsKKyAg
ICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9z
dChob3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2FkZHJlc3MucG9ydCgpKS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xvY2FsX2VuZHBvaW50
KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jb3B5X2Rl
ZmF1bHRfcHJvdG9jb2xfc3RhY2socGFyYW1ldGVycy5nZXQoKSkpOworICAgICAgICBhdXRvIG9w
dGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50ZXJuZXRfcHJvdG9jb2wo
cHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRpb25zX3NldF92ZXJzaW9u
KG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0gQUZfSU5FVCA/IG53X2lw
X3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisgICAgYXV0byByZW1vdGVI
b3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICBpZiAo
cmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICByZW1vdGVIb3N0QWRkcmVz
cyA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KHJlbW90ZUhvc3RBZGRyZXNzLmNfc3RyKCksIFN0cmluZzo6
bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7CisgICAgYXV0byBu
d0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHBh
cmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNldHVwTldDb25uZWN0aW9uKG53Q29ubmVjdGlvbi5n
ZXQoKSwgcmVtb3RlQWRkcmVzcyk7CisgICAgcmV0dXJuIG53Q29ubmVjdGlvbjsKK30KKwordm9p
ZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5lY3Rpb24o
bndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBy
ZW1vdGVBZGRyZXNzKQoreworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG53Q29ubmVjdGlv
biwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBwcm9jZXNzVURQRGF0YShud0Nvbm5lY3Rpb24s
IFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNv
cHlSZWYoKSwgaXAgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVz
cy5wb3J0KCldKGF1dG8qIG1lc3NhZ2UsIGF1dG8gc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3NhZ2UsIHNpemUpOworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxSZWFkUGFja2V0IHsgaWRl
bnRpZmllciwgZGF0YSwgUlRDTmV0d29yazo6SVBBZGRyZXNzKGlwKSwgcG9ydCwgcnRjOjpUaW1l
TWlsbGlzKCkgKiAxMDAwIH0sIDApOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFy
dChud0Nvbm5lY3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5l
Y3Rpb25zOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25z
JiBvcHRpb25zKQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rpb247CisgICAgewor
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9OworICAgICAgICBu
d0Nvbm5lY3Rpb24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90ZUFkZHJlc3MsIFt0aGlz
LCAmcmVtb3RlQWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5XQ29ubmVjdGlv
bihyZW1vdGVBZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAg
IH0KKworICAgIGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2RhdGFfY3JlYXRlKGRhdGEs
IHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9ERUZBVUxUKSk7CisgICAg
bndfY29ubmVjdGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0KCksIE5XX0NPTk5FQ1RJ
T05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9ja1B0cihbaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIG9w
dGlvbnNdKF9OdWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNrZXQgeyBpZGVudGlmaWVy
LCBvcHRpb25zLnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwgMCk7CisgICAgfSkuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDA2NGVlYjU3
OGVmNzFmNDUyOGQ3ZmJiYzU4ZGIzNjA0NjMxMjk5Y2IuLjY5MzFiNDYyOGUwMzZhNTZhYzJiNWZi
N2RhNDhkNzEyMWM5ZmRiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU0LDcgKzU0LDgg
QEAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9yLmNwcAogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1Jlc29sdmVyQ29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tl
dENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29h
Lm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCiAK
IEdQVVByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQVVNlcnZpY2VFbnRyeVBv
aW50Lm1tCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2Eu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkZGVkYzQ4YjRkNzg1M2E5MTc0MTU5NzMzNWMzYzJhMDFjNWRjMWIxLi4wOWY2MDE3NjMw
OTlhNDJkZTdiNzQ1NjgxNWQ1NGViOWNlODY3ODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDUsOCArMzcwNSw4IEBACiAJCTQx
MDNGQkEyMjA2MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZCNTAwRjAwNkQwIC8qIFJU
Q05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUlRDTmV0
d29yay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNDMURERDJGQjUw
MEYwMDZEMCAvKiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJUQ05ldHdvcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExMzkyNTcx
MzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENUQ1BTb2NrZXRD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExM0EyNTcxMzVGMjAw
MkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEx
MTQzNjMyMEY2NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRl
bHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQjcyNjAyMTUyQjAwQjBB
MEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrL3dlYnJ0
Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5l
bFJlbW90ZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgzOSw2ICsz
ODM5LDggQEAKIAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExpYldlYlJUQ1NvY2tldENs
aWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWJXZWJSVENT
b2NrZXRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDU5QTFF
M0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEgLyogV2ViUlRDUmVzb2x2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUlRDUmVzb2x2
ZXIuY3BwOyBwYXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29y
a1JUQ1VEUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNzI2
N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUUwQTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1By
b3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYzOTc5MDA1NjEwNjAgLyog
TGliV2ViUlRDQ29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMaWJXZWJSVEND
b2RlY3NQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MDYsOCArODQw
OCwxMCBAQAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBOZXR3b3JrUlRDUmVzb2x2
ZXIuaCAqLywKIAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29s
dmVyQ29jb2EuY3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzk4NiAvKiBOZXR3b3Jr
UlRDUmVzb2x2ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBO
ZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEg
LyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJF
MkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJCQk0MTBCQTEzOTI1NzEz
NUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tICovLAorCQkJCTQxREQ3
MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCAqLywKKwkJ
CQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
ICovLAogCQkJCTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4MDAwQjBBMEI2IC8qIFJU
Q0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJNDExMjIzQkQyNjAyNEU4
MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRj
L0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCmluZGV4IGQ4OTdiYjNmMjg0
NjY1YzZjMDMwNDg1Nzk1NDJiYmM5M2JhMTNkMmIuLjUzMjMzYmVmOWVmMWI5ZmIyYTVlMzcyNjdk
MmJjZTQxZmUzNDg0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHAKQEAg
LTU0LDcgKzU0LDggQEAgdm9pZCBMaWJXZWJSVENTb2NrZXRGYWN0b3J5OjpzZXRDb25uZWN0aW9u
KFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAgICBpZiAoIW1fY29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUlRDUHJvdmlkZXI6OlNldFBsYXRmb3JtU29ja2V0c0VuYWJsZWQoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFi
bGVkKCkpLCAwKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtSVENQ
cm92aWRlcjo6U2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQoKSks
IDApOworICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1JUQ1Byb3ZpZGVy
OjpTZXRQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCgpKSwgMCk7CiAK
ICAgICB3aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VUYXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIG1f
cGVuZGluZ01lc3NhZ2VUYXNrcy50YWtlRmlyc3QoKSgqbV9jb25uZWN0aW9uKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAy
NjY3OGIyM2U3YTk0NmU5ZWRhMmEwMGE1YWQ1NmY3ODE5MWVmNjNiLi40NjM3MjA5NWRmNDEyY2I0
MDVkMDY2NzhmODNhMWI0NDcxYTQ1YmIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYt
MjkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0g
TWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzk4NTkwNDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdrMi9UZXN0RXhwZWN0YXRp
b25zOgorICAgICAgICBNYXJrIHRlc3QgYXMgZmFpbGVkLCBhcyB0aGlzIHRlc3QgaXMgdXNpbmcg
dW5zdXBwb3J0ZWQgQVBJICh0cmFuc3BvcnQpLgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VDb2NvYSBzaG91bGQgc3VwcG9ydCBvdGhlciBzYW1wbGUgcmF0ZSB0aGFuIDQ4MDAwCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCBiNzJiMjUwY2IyZjFiOGJmZmI3ZTFhM2ZlNDg0
ZjUzMDkxNmY3MjBhLi43YTcyZTBhZTcxYTkzNjEyNGMwZDM5MzFjMDliMTk1YTRlNjBkYWY4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNi0y
OCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBN
aWdyYXRlIFdlYlJUQyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgIFJlYmFzaW5nIHRlc3RzIGFzIHRpbWlu
ZyBjaGFuZ2VzIGEgYml0LgorICAgICAgICBUaGlzIGFsaWducyB3aXRoIENocm9tZSBhbmQgRmly
ZWZveCBiZWhhdmlvci4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8t
bWVkaWEtY2FsbC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wNi0yNSAgWmlyYW4gU3Vu
ICA8enN1bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZ3JpZF0gQ29uc2lkZXIgY29udGFp
bmVyJ3Mgd3JpdGluZyBtb2RlIHRvIGdldCBncmlkIGl0ZW0ncyBtYXJnaW4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1l
ZGlhLWNhbGwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2FsbC1leHBlY3RlZC50eHQKaW5kZXggY2FlNzVi
ZjdmZjMzODliYjU0OTdhNDdjZTRjOGM2MGRjMWUwN2NkYy4uYWQyMTg5MzFkNzU1ZTFmNTY0MDEw
M2MzMzgwMjhkZTFiMGZkNDE5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2FsbC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8t
bWVkaWEtY2FsbC1leHBlY3RlZC50eHQKQEAgLTIsNSArMiw1IEBACiBQQVNTIENhbiBzZXQgdXAg
YSBiYXNpYyBXZWJSVEMgY2FsbCB3aXRoIG5vIGRhdGEuCiBpY2VDb25uZWN0aW9uU3RhdGUgaW5m
bwogCi1GaXJzdDogY29tcGxldGVkCitGaXJzdDogY29ubmVjdGVkCiBTZWNvbmQ6IGNvbm5lY3Rl
ZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvcHJvbWlzZXMtY2FsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4
dAppbmRleCBmMjRhYWEwYjA2ZTJmMWJlYzk0MmY3MTdiMWM0ODkzMmU3YzFkZWNiLi5mMzFmYTg0
YjkyYWI1M2UyZWVmOWY2ZDMyYmE3MmEwYTRlYWM0NzQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9wcm9taXNlcy1jYWxsLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUgQEAKIFBB
U1MgQ2FuIHNldCB1cCBhIGJhc2ljIFdlYlJUQyBjYWxsIHdpdGggb25seSBkYXRhIHVzaW5nIHBy
b21pc2VzLgogaWNlQ29ubmVjdGlvblN0YXRlIGluZm8KIAotRmlyc3Q6IGNvbXBsZXRlZAorRmly
c3Q6IGNvbm5lY3RlZAogU2Vjb25kOiBjb25uZWN0ZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy1zaW11bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDNhMTU3
OWRlMTNhOTEyZDhhZjVkZjQ2YjUzZWFjNTZhNDY4ZTc1MmQuLmI4NjJiYTU4NzkwYTgyYzI0MDVm
YTlmNGRjZTE0OGQyMzgwN2VjZTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2lv
cy1zaW11bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vaW9zLXNpbXVsYXRvci13azIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtOTEsNiArOTEsNyBAQCB3
ZWJraXQub3JnL2IvMjE0NzMwIFsgRGVidWcgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy9SVENTY3RwVHJhbgogd2Via2l0Lm9yZy9iLzIxNDY2MSBbIERlYnVnIF0gaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDU2N0cFRyYW5zcG9ydC1ldmVu
dHMuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzIxNDczMCBbIERlYnVnIF0gd2VicnRjL3Np
bXVsY2FzdC1oMjY0Lmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWNhbmRpZGF0ZS1pbi1zZHAuaHR0cHMuaHRtbCBb
IFBhc3MgRmFpbHVyZSBdCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9w
cm90b2NvbC9jcnlwdG8tc3VpdGUuaHR0cHMuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3Jn
L2IvMjE0MzU4IGZhc3Qvc2Nyb2xsaW5nL2lvcy9wcm9ncmFtbWF0aWMtc2Nyb2xsLXdoaWxlLXpv
b21lZC5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432571</attachid>
            <date>2021-06-30 00:49:57 -0700</date>
            <delta_ts>2021-07-01 01:11:06 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-227210-20210630094956.patch</filename>
            <type>text/plain</type>
            <size>70764</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA5Nzg3M2QxMTkzYTBjNTUxOTBiY2Q0OTY3ZTEzN2JjYzdlOGNlY2M5Li42ZGZl
ODI3ZWE1OTlkZTg3YjBlZDhlYmJmOGMwZDQzZDEyNDVmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBDYXJsc29uLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHA6
CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHA6CisgICAgICAg
ICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5leHA6CisKIDIwMjEtMDYtMjMgIEVyaWMg
Q2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0RGVjb2Rl
ci5oIHNob3VsZCBpbmNsdWRlIFRhcmdldENvbmRpdGlvbmFscy5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYwOTEzZDFhYzQ4
ZjI4MDI2YmY1YTliOTc1NDFhYzI5Y2UwN2E1YmQuLjY0YWYyOTBiYTdhNTMzOTkzMmRmOGQ1MWMw
ZDI2NzBjNDRhNGIyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYtMjggIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBXZWJS
VEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgYSBuZXcgZXhwZXJpbWVudGFsIGZsYWcgZm9yIE5X
IGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKwogMjAyMS0wNi0yNyAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbTW9kZWxdIFtpT1NdIEFkZCBzdXBw
b3J0IGZvciByZW5kZXJpbmcgbW9kZWwgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAyOThjMzBj
ZmRhN2ZlZGJkNjQwZjhiNjM1N2NkNTZjMzJkNWI3MC4uZDdlZmM0YWExODUwM2M3ODkzZGQ1MzYy
MTAwMGNhNzlhYjE4ZGYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1p
Z3JhdGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIHRvIG5l
dyBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnIGZvciBOVyBiYWNrZWQgVURQIHNvY2tldHMuCisK
KyAgICAgICAgKiBwYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0
V2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJSVENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldFdlYlJUQ1Bs
YXRmb3JtVURQU29ja2V0c0VuYWJsZWQpOgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VD
b2NvYSBzaG91bGQgc3VwcG9ydCBvdGhlciBzYW1wbGUgcmF0ZSB0aGFuIDQ4MDAwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGYyNWY3NDBhNDQzYmY0MmFiMDQ2MzgxZjI2ZjVmMDBjOTFkNmFmODguLmNlNzdhZmM5OTVh
YzAyYjc5MDlhNjI5ZDI5YzMxYmQ0MzQ0NzBmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMjEtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAg
IFtDb2NvYV0gTWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBNaWdyYXRlIFVEUCBz
b2NrZXQgaGFuZGxpbmcgZnJvbSBXZWJSVEMgcGh5c2ljYWwgc29ja2V0IHNlcnZlciB0byBudyBB
UEkgZm9yIENvY29hIHBvcnRzLgorCisgICAgICAgIEZvciBlYWNoIFVEUCBzb2NrZXQgb3BlbmVk
LCB3ZSBvcGVuIGEgbndfbGlzdGVuZXIgdGhhdCB3aWxsIGxpc3RlbiB0byBpbmJvdW5kIGNvbm5l
Y3Rpb25zLgorICAgICAgICBPbiBpbmJvdW5kIGNvbm5lY3Rpb24sIHdlIHJlY2VpdmUgYSBud19j
b25uZWN0aW9uIHRoYXQgd2Ugc3RvcmUgaW4gYSBhZGRyZXNzIC0+IGNvbm5lY3Rpb24gbWFwLgor
CisgICAgICAgIFdoZW5ldmVyIHNlbmRpbmcgYSBwYWNrZXQsIHdlIGxvb2sgYXQgdGhlIHJlbW90
ZSBhZGRyZXNzLgorICAgICAgICBJZiBuZWVkZWQsIHdlIGNyZWF0ZSBhIG53X2Nvbm5lY3Rpb24g
dG8gdGhhdCBwYXJ0aWN1bGFyIHJlbW90ZSBhZGRyZXNzIGFuZCBzdG9yZSBpdCBpbiB0aGUgYWRk
cmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKyAgICAgICAgV2UgdGhlbiB1c2UgdGhlIHByZS1leGlz
dGluZyBvciBuZXdseSBjcmVhdGVkIG53X2Nvbm5lY3Rpb24gdG8gc2VuZCB0aGUgcGFja2V0Lgor
CisgICAgICAgIE1ha2Ugc3VyZSB0byBjYW5jZWwgTlcgY29ubmVjdGlvbiBpbiBjYXNlIG9mIGZh
aWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgc29ja2V0LgorCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNy
ZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6Y3Jl
YXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ1Byb3ZpZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6
c2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENQcm92aWRlcjo6c2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENT
b2NrZXRDb2NvYS5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OnRj
cFNvY2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29h
OjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRlTWVzc2FnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6c2VuZFRvKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZXF1YWwpOgorICAgICAgICAo
V1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmVtcHR5VmFsdWUpOgorICAgICAg
ICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmNvbnN0cnVjdERlbGV0ZWRW
YWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNE
ZWxldGVkVmFsdWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OldURl9HVUFSREVEX0JZX0xPQ0spOgorICAg
ICAgICAoV2ViS2l0Ojp1ZHBTb2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6On5OZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3Nl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXRPcHRpb24pOgorICAgICAg
ICAoV2ViS2l0Ojpwcm9jZXNzVURQRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjcmVhdGVOV0Nvbm5lY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9uczo6c2VuZFRvKToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkxpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNldENvbm5lY3Rpb24pOgorCiAyMDIxLTA2LTI4ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgYW5kIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCmluZGV4IDdkMjI1Y2My
YzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQyOTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVj
MDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKQEAgLTMyMSwzICsz
MjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlmaWNhdGVEMUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRl
UGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0YzZUaHJlYWRFUzJfUzJfTlMwXzEzc2NvcGVkX3Jl
ZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxlRUVFTlMzX0lOU18xOUF1ZGlvRW5jb2RlckZhY3Rv
cnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVyRmFjdG9yeUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJ
TlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5TQV8xNGRlZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0Jf
SU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVOU0RfSVNHX0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhl
ckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3NpbmdFRUVQTlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29y
RQogX19aTks2d2VicnRjMjNSdHBUcmFuc2NlaXZlckludGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9u
c05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMzMFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFj
ZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktOU18yM1BlZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZS
VENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNvbm5lY3Rpb25EZXBlbmRlbmNpZXNFCitfX1pOSzNy
dGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2CitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3NlcUVSS1Mw
XworX19aTkszcnRjOUlQQWRkcmVzczVJc05pbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5l
eHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2Nj
ZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMu
aU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw2IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitfX1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3
ZWJydGMubWFjLmV4cCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9u
cy9saWJ3ZWJydGMubWFjLmV4cAppbmRleCA3ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQy
ODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZmNmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2Vi
cnRjLm1hYy5leHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRp
b25zL2xpYndlYnJ0Yy5tYWMuZXhwCkBAIC0zMjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0Nl
cnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMyN0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQ
TjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Njb3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1v
ZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29kZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVj
b2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlxdWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9y
eUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3Rv
cnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9j
ZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVByb2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJh
bnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2Vi
cnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9u
RVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVyZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBl
ZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hF
dgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1
SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlBy
ZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5j
ZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCAzMjNkYzVmMjYyNjIzNGZk
NDlkZmYxODE0OGViNGZhZGZlNjM1YjNmLi41NGE2ZWU2MDM5ZWJmYzdhNDY4ZDkyY2IxZmEwNzA0
OWEzNDc3ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTI5NywxNiArMTI5
NywyNiBAQCBXZWJSVENQbGF0Zm9ybUNvZGVjc0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgICAgV2Vi
Q29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKLVdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQ6CitXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkOgogICB0eXBlOiBib29sCi0gIGh1
bWFuUmVhZGFibGVOYW1lOiAiV2ViUlRDIFBsYXRmb3JtIFNvY2tldHMiCi0gIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gU29ja2V0cyIKKyAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCiAgIHdl
YmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCiAgIGNvbmRpdGlvbjogRU5BQkxF
KFdFQl9SVEMpCiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiB0
cnVlCiAKK1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAg
aHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMiCisgIGh1bWFu
UmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMi
CisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisgIGNvbmRpdGlvbjog
RU5BQkxFKFdFQl9SVEMpCisgIGRlZmF1bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZh
dWx0OiBmYWxzZQorCiBXZWJSVENWUDlQcm9maWxlMENvZGVjRW5hYmxlZDoKICAgdHlwZTogYm9v
bAogICBodW1hblJlYWRhYmxlTmFtZTogIldlYlJUQyBWUDkgcHJvZmlsZSAwIGNvZGVjIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCBkMDc3NGZk
OTExNjZiMmI5NzdmMmU5MzBjNTkwOWYzNWEyMTViZThlLi5lMTZjYjVkMTU3NjIxODY1NTBmOTVi
YWFhMmZiNGVlOGNhMzZkNmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaApAQCAtMTYzLDggKzE2MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRX
ZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJU
Q01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgd2ViUlRD
SDI2NFNpbXVsY2FzdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDSDI2NFNpbXVs
Y2FzdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFdlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVkKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENIMjY0U2ltdWxjYXN0RW5hYmxlZCA9IGlzRW5hYmxl
ZDsgfQotICAgIGJvb2wgd2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRXZWJS
VENQbGF0Zm9ybVNvY2tldHNFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0
Zm9ybVNvY2tldHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9y
bVRDUFNvY2tldHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVENQ
U29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFdlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0Vu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29sIHdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKQEAgLTMxOSw3ICszMjEs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1dlYlJUQ1ZQOVByb2ZpbGUwQ29kZWNFbmFibGVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNXZWJSVENWUDlQcm9maWxlMkNvZGVjRW5hYmxlZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzV2ViUlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxl
ZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3Zp
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5jcHAKaW5kZXggZjkzNWExY2JlNGE5ZThhNzNlYWVjNmJlZjI0MWE1MDQwNjVlNmFj
Ni4uZjcyZjJjZmRjZjJjYmQ2MDRiYzRjZDUwNzkyYjlkN2JmNGE3YTM4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJv
dmlkZXIuY3BwCkBAIC00Niw3ICs0Niw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNs
dWRlICJOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oIgotI2luY2x1ZGUgIk5ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorI2luY2x1
ZGUgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMTMzLDYgKzEzNCwxNSBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRl
U29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgc3RkOgogCiB2b2lk
IE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlVURQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyYgYWRkcmVz
cywgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCkKIHsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBpZiAobV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgIGlm
IChhdXRvIHNvY2tldCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0
KGlkZW50aWZpZXIsICp0aGlzLCBhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0LCBtX2lw
Y0Nvbm5lY3Rpb24uY29weVJlZigpKSkgeworICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZp
ZXIsIFdURk1vdmUoc29ja2V0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisjZW5kaWYKKwogICAgIEFTU0VSVChtX3J0Y05ldHdvcmtUaHJlYWQuSXNDdXJyZW50KCkp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29ja2V0PiBzb2NrZXQobV9w
YWNrZXRTb2NrZXRGYWN0b3J5LT5DcmVhdGVVZHBTb2NrZXQoYWRkcmVzcy52YWx1ZSwgbWluUG9y
dCwgbWF4UG9ydCkpOwogICAgIGNyZWF0ZVNvY2tldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvY2tl
dCksIFNvY2tldDo6VHlwZTo6VURQLCBtX2lwY0Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAgLTE3
Nyw4ICsxODcsOCBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29j
a2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZgogICAgICAgICB9CiAgICAgICAg
IGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9
IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRy
ZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94
eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVz
ZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBt
dXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhp
cywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsK
KyAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0
ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9u
cywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
U29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCmluZGV4IDk1YjI5MTc2
NDYzNDg2ZDA0NTEzMTJlYzQ4MTI1OWQ3MjdlM2FjNWEuLjU1MTcxOWM1ZmM4ZTZkNTNlN2RmZWI0
NmI4MmQ2NjRiMjlkMTI2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCkBAIC0xMDEsNiArMTAxLDggQEAg
cHVibGljOgogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9p
cGNDb25uZWN0aW9uLmdldCgpOyB9CiAKKyAgICB2b2lkIGNsb3NlU29ja2V0KFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdv
cmtSVENQcm92aWRlcihOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOwogICAgIHZvaWQg
c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKQEAgLTExMCw5ICsxMTIsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY3JlYXRlU2VydmVyVENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNvY2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0
LCB1aW50MTZfdCBtYXhQb3J0LCBpbnQpOwogICAgIHZvaWQgd3JhcE5ld1RDUENvbm5lY3Rpb24o
V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5ld0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHNlbmRUb1NvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVy
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiYs
IFJUQ1BhY2tldE9wdGlvbnMmJik7Ci0gICAgdm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldFNvY2tldE9wdGlvbihXZWJDb3Jl
OjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpOwotICAg
IHZvaWQgc2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9y
bVNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1UQ1BTb2Nr
ZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0g
ZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQogCiAgICAg
dm9pZCBjcmVhdGVSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIsIFN0cmluZyYm
KTsKICAgICB2b2lkIHN0b3BSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIpOwpA
QCAtMTQxLDcgKzE0Myw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29j
a2V0Pj4gbV9wZW5kaW5nSW5jb21pbmdTb2NrZXRzOwogICAgIGJvb2wgbV9pc0xpc3RlbmluZ1Nv
Y2tldEF1dGhvcml6ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX3BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fcGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdl
cy5pbgppbmRleCAxMTcyOTkwNzBmYzI2ODAyZjEwZjkzOThiZDAxODU1MzljMjMwZDdmLi5iZmRk
ZGE3OTk4MzZhNDUwZDhiNTk5MmQ5NTE4MjUxNThjNjMxYzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1By
b3ZpZGVyLm1lc3NhZ2VzLmluCkBAIC0yOCw3ICsyOCw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtS
VENQcm92aWRlciB7CiAgICAgQ3JlYXRlQ2xpZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJU
Q1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRB
ZGRyZXNzIGxvY2FsQWRkcmVzcywgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIHJl
bW90ZUFkZHJlc3MsIFN0cmluZyB1c2VyQWdlbnQsIGludCBvcHRpb25zKQogICAgIFdyYXBOZXdU
Q1BDb25uZWN0aW9uKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0
SWRlbnRpZmllcikKIAotICAgIHZvaWQgU2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpCisgICAgdm9pZCBTZXRQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
CiAgICAgQ3JlYXRlUmVzb2x2ZXIoV2ViS2l0OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgU3RyaW5nIGFkZHJlc3MpCiAgICAgU3RvcFJlc29sdmVyKFdlYktpdDo6TGli
V2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhk
ZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNp
bmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsu
aD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGlj
IE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JU
Q1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtS
VENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNs
b3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBm
aW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAg
IFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6
OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90
PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGli
V2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBh
cnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9C
bG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hf
UVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRD
b2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBz
c2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwu
Ci0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3Rl
QWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+
JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+
JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0g
ICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAg
bndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9
IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRh
KSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndf
Y29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3Bh
dGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3Qs
IHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBz
aXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgp
KTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50
X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNv
bWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RG
TW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2Nv
YTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRp
ZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRB
ZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5
OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFt
ZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90
ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJl
bW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRs
ZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUg
cGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBi
b29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsK
LSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3Rj
cChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1F
VEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9u
cykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRy
dWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0
aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rp
b25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBu
d19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0
KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVm
KCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJy
b3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoK
LSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2Ug
bndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRp
ZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdv
cmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRj
UHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1f
bndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwg
cG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1
ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhX
VEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJS
VEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0g
ICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXAp
LCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19
Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253
Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1f
bndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVu
dGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQs
IGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9y
PHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBh
dXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJu
IGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7
Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpj
cmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewot
ICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1l
c3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwg
c2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBz
aXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBh
ZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0
aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAg
IGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAw
IDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXpl
OyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZG
KTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIu
YXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29y
a1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6
ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53
X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RG
TW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVY
VCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0
aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9y
X3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29y
azo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6
OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlNWZhOTRjMzE0N2Q1NTdmNTFk
ZTAxN2U0NjhjYzE0NzhkOGFkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgi
CisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+CisKK25hbWVzcGFjZSBydGMgeworY2xhc3Mg
U29ja2V0QWRkcmVzczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tl
dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRlQ2xpZW50VENQ
U29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpD
b25uZWN0aW9uPiYmKTsKKworICAgIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYShXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisK
K3ByaXZhdGU6CisgICAgLy8gTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQuCisgICAgV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gVHlwZTo6Q2xpZW50VENQOyB9CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQg
c2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBzZW5kVG8o
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3Qg
cnRjOjpQYWNrZXRPcHRpb25zJikgZmluYWw7CisKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlYXRl
TWVzc2FnZUJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92
aWRlciYgbV9ydGNQcm92aWRlcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9ud0Nvbm5lY3Rpb247CisgICAg
Ym9vbCBtX2lzU1RVTiB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZjQwOGM2NmQ5M2I3ZjU3ZTU0NGVlZjJiM2Iw
YTJlNWZjNDAwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0KQEAgLTAsMCArMSwxOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENOZXR3
b3JrTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9T
VFVOTWVzc2FnZVBhcnNpbmcuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2lu
Y2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHRjcFNvY2tldFF1ZXVl
KCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgVENQIHNvY2tl
dCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOworICAgIHJldHVy
biBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJv
dmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgaW50IHRjcE9w
dGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1pZ3JhdGUgc3NsdGNwIGNhbmRpZGF0ZXMsIG1heWJlIHN1cHBvcnQgT1BU
X1RMU19JTlNFQ1VSRSBhcyB3ZWxsLgorICAgIGlmICgodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19GQUtFKSB8fCAodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19JTlNFQ1VSRSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtYWtlVW5pcXVlPE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYT4oaWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIsIHJlbW90ZUFkZHJlc3MsIHRjcE9wdGlvbnMsIFdURk1vdmUoY29u
bmVjdGlvbikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc0luY29taW5nRGF0YShS
ZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiYmIG53Q29ubmVjdGlvbiwgRnVuY3Rpb248VmVjdG9y
PHVpbnQ4X3Q+KFZlY3Rvcjx1aW50OF90PiYmKT4mJiBwcm9jZXNzRGF0YSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgYnVmZmVyID0geyB9KQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0g
bndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rp
b25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFr
ZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NE
YXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oZGlz
cGF0Y2hfZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wg
aXNDb21wbGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250
ZW50KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9j
a1B0cihbJl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEludHJvZHVjZSB1bmNoZWNrZWRB
cHBlbmQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgICAgICBidWZmZXIgPSBwcm9jZXNz
RGF0YShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbXBsZXRl
ICYmIGNvbnRleHQgJiYgbndfY29udGVudF9jb250ZXh0X2dldF9pc19maW5hbChjb250ZXh0KSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgcHJvY2Vz
c0luY29taW5nRGF0YSBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIG53X2Vycm9yX2dldF9lcnJvcl9j
b2RlKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJv
Y2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vzc0Rh
dGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBhY2tl
dFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1vdGVB
ZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAgIGhv
c3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8gaG9z
dCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwgU3Ry
aW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAv
LyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90aGVy
IG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zlcmlm
eV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0
b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJ
T04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0aW9u
c190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxheSh0
Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBhZG9w
dE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOworCisg
ICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNvY2tl
dFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlciht
X253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFi
bGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJy
b3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGlu
ZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgorICAg
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2ln
bmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92aWRl
ci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAg
ICAgICAgICAgICAgICBydGNQcm92aWRlci0+Y2xvc2VTb2NrZXQoaWRlbnRpZmllcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX253Q29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG53
X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKKyAgICBtX3J0Y1Byb3Zp
ZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29j
a2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBGSVhNRTogVmFsaWRhdGUg
dGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFf
dD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sKKyAgICBhdXRvIGJ1ZmZl
clNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIo
KS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3
UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgZmFzdEZyZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitWZWN0b3I8dWludDhfdD4g
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICht
X2lzU1RVTikgeworICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVO
T3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7CisgICAgICAgIGlmICghbWVzc2FnZUxl
bmd0aHMpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEFTU0VSVChtZXNzYWdl
TGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VM
ZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7CisgICAgICAgIGlmICht
ZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VM
ZW5ndGhXaXRoUGFkZGluZyk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNz
YWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCisgICAgICAgICAgICBidWZmZXIu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKworICAg
IC8vIFByZXBlbmQgbGVuZ3RoLgorICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgYnVm
ZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOworICAgIGJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICBidWZmZXIudW5jaGVja2VkQXBwZW5k
KHNpemUgJiAweEZGKTsKKyAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIHJldHVy
biBidWZmZXI7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpzZW5kVG8oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGJ1ZmZlciA9
IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVj
dGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09O
TkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYo
KSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50
aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKKyAgICB9
KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1YjA1MTNjNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1
ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKworbmFtZXNw
YWNlIHJ0YyB7CitjbGFzcyBTb2NrZXRBZGRyZXNzOworfQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPiB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7
IHJldHVybiBhZGRyZXNzLkhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBiKSB7IHJldHVy
biBhID09IGIgfHwgKGEuSXNOaWwoKSAmJiBiLklzTmlsKCkgJiYgYS5zY29wZV9pZCgpID09IGIu
c2NvcGVfaWQoKSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxydGM6OlNvY2tldEFkZHJlc3M+IDogR2VuZXJpY0hhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRy
ZXNzPiB7CisgICAgc3RhdGljIHJ0Yzo6U29ja2V0QWRkcmVzcyBlbXB0eVZhbHVlKCkgeyByZXR1
cm4gcnRjOjpTb2NrZXRBZGRyZXNzIHsgfTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsgYWRkcmVzcyA9IHsgfTsg
YWRkcmVzcy5TZXRTY29wZUlEKC0xKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1cm4gYWRkcmVzcy5zY29w
ZV9pZCgpID09IC0xOyB9Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczsKKworY2xhc3MgTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVVRFBTb2NrZXQoV2Vi
Q29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29u
c3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9y
dCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7Cisg
ICAgfk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdv
cmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZv
aWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFs
dWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0
IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOwor
CisgICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFJlZjxOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucz4gbV9ud0Nvbm5lY3Rpb25zOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDM5ZTg1YmU4
MjlmZGE0MzhhZWVmMzlmZDBkYzUwNjMwNmM1MDY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
CkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYm
IFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworY2xhc3MgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29u
bmVjdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtSVENVRFBTb2NrZXRD
b2NvYUNvbm5lY3Rpb25zPiBjcmVhdGUoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHByb3ZpZGVyLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmIGFkZHJlc3MsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyhpZGVudGlmaWVyLCBwcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpOyB9
CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50
IHZhbHVlKTsKKyAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKTsKKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKworICAgIFJldGFpblB0cjxu
d19jb25uZWN0aW9uX3Q+IGNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJl
c3MmKTsKKyAgICB2b2lkIHNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJik7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVu
dGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndf
bGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsK
KyAgICBib29sIG1faXNDbG9zZWQgV1RGX0dVQVJERURfQllfTE9DSyhtX253Q29ubmVjdGlvbnNM
b2NrKSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDxydGM6OlNvY2tldEFkZHJlc3MsIFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+PiBtX253Q29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyht
X253Q29ubmVjdGlvbnNMb2NrKTsKK307CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHVkcFNv
Y2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
VG9rZW4sIF57CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMg
VURQIHNvY2tldCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOwor
ICAgIHJldHVybiBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZVVEUFNvY2tldChXZWJD
b3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgdWlu
dDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBj
b25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBEZWNpZGUgaG93IHRvIHVzZSBtaW5Qb3J0L21h
eFBvcnQuCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hPihp
ZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSk7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKFdl
YkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1By
b3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBS
ZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX3J0Y1Byb3ZpZGVyKHJ0
Y1Byb3ZpZGVyKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX253Q29u
bmVjdGlvbnMoTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZShpZGVu
dGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpCit7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6fk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgp
Cit7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjbG9zZSgpCit7CisgICAg
bV9ud0Nvbm5lY3Rpb25zLT5jbG9zZSgpOworICAgIG1fcnRjUHJvdmlkZXIudGFrZVNvY2tldCht
X2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6c2V0T3B0
aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkKK3sKKyAgICBtX253Q29ubmVjdGlvbnMtPnNldE9w
dGlvbihvcHRpb24sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6
OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiBhZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5zZW5kVG8oZGF0YSwgc2l6ZSwgYWRkcmVzcywgb3B0aW9u
cyk7Cit9CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0
aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKK3sKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBhZG9wdE5TKG53
X3BhcmFtZXRlcnNfY3JlYXRlX3NlY3VyZV91ZHAoTldfUEFSQU1FVEVSU19ESVNBQkxFX1BST1RP
Q09MLCBOV19QQVJBTUVURVJTX0RFRkFVTFRfQ09ORklHVVJBVElPTikpOworICAgIHsKKyAgICAg
ICAgYXV0byBob3N0QWRkcmVzcyA9IGFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAg
ICAgaWYgKGFkZHJlc3MuaXBhZGRyKCkuSXNOaWwoKSkKKyAgICAgICAgICAgIGhvc3RBZGRyZXNz
ID0gYWRkcmVzcy5ob3N0bmFtZSgpOworICAgICAgICBhdXRvIGxvY2FsRW5kcG9pbnQgPSBhZG9w
dE5TKG53X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3RBZGRyZXNzLmNfc3RyKCksICIwIikpOwor
ICAgICAgICBtX2FkZHJlc3MgPSB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShsb2NhbEVuZHBv
aW50LmdldCgpKSwgbndfZW5kcG9pbnRfZ2V0X3BvcnQobG9jYWxFbmRwb2ludC5nZXQoKSkgfTsK
KyAgICAgICAgbndfcGFyYW1ldGVyc19zZXRfbG9jYWxfZW5kcG9pbnQocGFyYW1ldGVycy5nZXQo
KSwgbG9jYWxFbmRwb2ludC5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBwcm90
b2NvbFN0YWNrID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NvcHlfZGVmYXVsdF9wcm90b2NvbF9z
dGFjayhwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMo
bndfcHJvdG9jb2xfc3RhY2tfY29weV9pbnRlcm5ldF9wcm90b2NvbChwcm90b2NvbFN0YWNrLmdl
dCgpKSk7CisgICAgICAgIG53X2lwX29wdGlvbnNfc2V0X3ZlcnNpb24ob3B0aW9ucy5nZXQoKSwg
YWRkcmVzcy5mYW1pbHkoKSA9PSBBRl9JTkVUID8gbndfaXBfdmVyc2lvbl80IDogbndfaXBfdmVy
c2lvbl82KTsKKyAgICB9CisKKyAgICBtX253TGlzdGVuZXIgPSBhZG9wdE5TKG53X2xpc3RlbmVy
X2NyZWF0ZShwYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgbndfbGlzdGVuZXJfc2V0X3F1ZXVlKG1f
bndMaXN0ZW5lci5nZXQoKSwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBud19saXN0ZW5lcl9z
ZXRfc3RhdGVfY2hhbmdlZF9oYW5kbGVyKG1fbndMaXN0ZW5lci5nZXQoKSwgbWFrZUJsb2NrUHRy
KFtud0xpc3RlbmVyID0gbV9ud0xpc3RlbmVyLmdldCgpLCBhZGRyZXNzID0gbV9hZGRyZXNzLCBj
b25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgcHJvdGVjdGVkUlRDUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllcl0obndfbGlz
dGVuZXJfc3RhdGVfdCBzdGF0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9pbnZhbGlk
OgorICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3dhaXRpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9yZWFkeToKKyAgICAgICAgICAg
IGFkZHJlc3MuU2V0UG9ydChud19saXN0ZW5lcl9nZXRfcG9ydChud0xpc3RlbmVyKSk7CisgICAg
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWdu
YWxBZGRyZXNzUmVhZHkoaWRlbnRpZmllciwgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyhhZGRy
ZXNzKSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgbndfbGlzdGVuZXJf
c3RhdGVfZmFpbGVkOgorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiTmV0
d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBl
cnJvciA/IG53X2Vycm9yX2dldF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAg
cHJvdGVjdGVkUlRDUHJvdmlkZXItPmNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3Byb3RlY3RlZFJU
Q1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkUlRDUHJv
dmlkZXItPmNsb3NlU29ja2V0KGlkZW50aWZpZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxD
bG9zZShpZGVudGlmaWVyLCAtMSksIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgbndfbGlzdGVuZXJfc3RhdGVfY2FuY2VsbGVkOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9zZXRfbmV3X2Nvbm5lY3Rp
b25faGFuZGxlcihtX253TGlzdGVuZXIuZ2V0KCksIG1ha2VCbG9ja1B0cihbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXShud19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikgeworICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgcHJvdGVjdGVkVGhpcy0+bV9ud0Nvbm5lY3Rpb25zTG9jayB9Owor
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0Nsb3NlZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIGVuZHBvaW50ID0gYWRvcHROUyhud19jb25uZWN0aW9uX2NvcHlf
ZW5kcG9pbnQoY29ubmVjdGlvbikpOworICAgICAgICBydGM6OlNvY2tldEFkZHJlc3MgcmVtb3Rl
QWRkcmVzcyB7IG53X2VuZHBvaW50X2dldF9ob3N0bmFtZShlbmRwb2ludC5nZXQoKSksIG53X2Vu
ZHBvaW50X2dldF9wb3J0KGVuZHBvaW50LmdldCgpKSB9OworCisgICAgICAgIHByb3RlY3RlZFRo
aXMtPm1fbndDb25uZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29ubmVjdGlvbik7CisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPnNldHVwTldDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlbW90ZUFk
ZHJlc3MpOworICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVyX3N0YXJ0KG1fbndMaXN0
ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlv
bnM6OmNsb3NlKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9
OworICAgIG1faXNDbG9zZWQgPSB0cnVlOworCisgICAgbndfbGlzdGVuZXJfY2FuY2VsKG1fbndM
aXN0ZW5lci5nZXQoKSk7CisgICAgbV9ud0xpc3RlbmVyID0gbnVsbHB0cjsKKworICAgIGZvciAo
YXV0byYgbndDb25uZWN0aW9uIDogbV9ud0Nvbm5lY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBu
d19jb25uZWN0aW9uX2NhbmNlbChud0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgIG1fbndDb25uZWN0
aW9ucy5jbGVhcigpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rp
b25zOjpzZXRPcHRpb24oaW50LCBpbnQpCit7CisgICAgLy8gRklYTUU6IFZhbGlkYXRlIHRoaXMg
aXMgbm90IG5lZWRlZC4KK30KKworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NVRFBEYXRhKFJl
dGFpblB0cjxud19jb25uZWN0aW9uX3Q+JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIHByb2Nlc3NEYXRhKQoreworICAgIGF1dG8gbndDb25u
ZWN0aW9uUmVmZXJlbmNlID0gbndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25f
cmVjZWl2ZShud0Nvbm5lY3Rpb25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwgbWFrZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29u
bmVjdGlvbiksIHByb2Nlc3NEYXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSldKGRpc3BhdGNoX2Rh
dGFfdCBjb250ZW50LCBud19jb250ZW50X2NvbnRleHRfdCBjb250ZXh0LCBib29sIGlzQ29tcGxl
dGUsIG53X2Vycm9yX3QgZXJyb3IpIG11dGFibGUgeworICAgICAgICBpZiAoY29udGVudCkgewor
ICAgICAgICAgICAgZGlzcGF0Y2hfZGF0YV9hcHBseShjb250ZW50LCBtYWtlQmxvY2tQdHIoWyZd
KGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkg
eworICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9KS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4
dCAmJiBud19jb250ZW50X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zIGZhaWxl
ZCBwcm9jZXNzaW5nIFVEUCBkYXRhIHdpdGggZXJyb3IgJWQiLCBlcnJvciA/IG53X2Vycm9yX2dl
dF9lcnJvcl9jb2RlKGVycm9yKSA6IDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHByb2Nlc3NVRFBEYXRhKFdURk1vdmUobndDb25uZWN0aW9uKSwgV1RGTW92ZShw
cm9jZXNzRGF0YSkpOworICAgIH0pLmdldCgpKTsKK30KKworUmV0YWluUHRyPG53X2Nvbm5lY3Rp
b25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZU5XQ29ubmVj
dGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MpCit7CisgICAgYXV0
byBwYXJhbWV0ZXJzID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2NyZWF0ZV9zZWN1cmVfdWRwKE5X
X1BBUkFNRVRFUlNfRElTQUJMRV9QUk9UT0NPTCwgTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJ
R1VSQVRJT04pKTsKKyAgICB7CisgICAgICAgIGF1dG8gaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3Mu
aXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG1fYWRkcmVzcy5pcGFkZHIoKS5Jc05p
bCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBtX2FkZHJlc3MuaG9zdG5hbWUoKTsKKyAg
ICAgICAgYXV0byBsb2NhbEVuZHBvaW50ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVfaG9z
dChob3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihtX2FkZHJlc3MucG9ydCgpKS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIG53X3BhcmFtZXRlcnNfc2V0X2xvY2FsX2VuZHBvaW50
KHBhcmFtZXRlcnMuZ2V0KCksIGxvY2FsRW5kcG9pbnQuZ2V0KCkpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xTdGFjayA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jb3B5X2Rl
ZmF1bHRfcHJvdG9jb2xfc3RhY2socGFyYW1ldGVycy5nZXQoKSkpOworICAgICAgICBhdXRvIG9w
dGlvbnMgPSBhZG9wdE5TKG53X3Byb3RvY29sX3N0YWNrX2NvcHlfaW50ZXJuZXRfcHJvdG9jb2wo
cHJvdG9jb2xTdGFjay5nZXQoKSkpOworICAgICAgICBud19pcF9vcHRpb25zX3NldF92ZXJzaW9u
KG9wdGlvbnMuZ2V0KCksIHJlbW90ZUFkZHJlc3MuZmFtaWx5KCkgPT0gQUZfSU5FVCA/IG53X2lw
X3ZlcnNpb25fNCA6IG53X2lwX3ZlcnNpb25fNik7CisgICAgfQorCisgICAgYXV0byByZW1vdGVI
b3N0QWRkcmVzcyA9IHJlbW90ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKKyAgICBpZiAo
cmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICByZW1vdGVIb3N0QWRkcmVz
cyA9IHJlbW90ZUFkZHJlc3MuaG9zdG5hbWUoKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KHJlbW90ZUhvc3RBZGRyZXNzLmNfc3RyKCksIFN0cmluZzo6
bnVtYmVyKHJlbW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7CisgICAgYXV0byBu
d0Nvbm5lY3Rpb24gPSBhZG9wdE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHBh
cmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNldHVwTldDb25uZWN0aW9uKG53Q29ubmVjdGlvbi5n
ZXQoKSwgcmVtb3RlQWRkcmVzcyk7CisgICAgcmV0dXJuIG53Q29ubmVjdGlvbjsKK30KKwordm9p
ZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5lY3Rpb24o
bndfY29ubmVjdGlvbl90IG53Q29ubmVjdGlvbiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBy
ZW1vdGVBZGRyZXNzKQoreworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3F1ZXVlKG53Q29ubmVjdGlv
biwgdWRwU29ja2V0UXVldWUoKSk7CisKKyAgICBwcm9jZXNzVURQRGF0YShud0Nvbm5lY3Rpb24s
IFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNv
cHlSZWYoKSwgaXAgPSByZW1vdGVBZGRyZXNzLmlwYWRkcigpLCBwb3J0ID0gcmVtb3RlQWRkcmVz
cy5wb3J0KCldKGF1dG8qIG1lc3NhZ2UsIGF1dG8gc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhKG1lc3NhZ2UsIHNpemUpOworICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJSVENOZXR3b3JrOjpTaWduYWxSZWFkUGFja2V0IHsgaWRl
bnRpZmllciwgZGF0YSwgUlRDTmV0d29yazo6SVBBZGRyZXNzKGlwKSwgcG9ydCwgcnRjOjpUaW1l
TWlsbGlzKCkgKiAxMDAwIH0sIDApOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFy
dChud0Nvbm5lY3Rpb24pOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5l
Y3Rpb25zOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgY29uc3QgcnRjOjpQYWNrZXRPcHRpb25z
JiBvcHRpb25zKQoreworICAgIG53X2Nvbm5lY3Rpb25fdCBud0Nvbm5lY3Rpb247CisgICAgewor
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9ud0Nvbm5lY3Rpb25zTG9jayB9OworICAgICAgICBu
d0Nvbm5lY3Rpb24gPSBtX253Q29ubmVjdGlvbnMuZW5zdXJlKHJlbW90ZUFkZHJlc3MsIFt0aGlz
LCAmcmVtb3RlQWRkcmVzc10geworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5XQ29ubmVjdGlv
bihyZW1vdGVBZGRyZXNzKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAg
IH0KKworICAgIGF1dG8gdmFsdWUgPSBhZG9wdE5TKGRpc3BhdGNoX2RhdGFfY3JlYXRlKGRhdGEs
IHNpemUsIG51bGxwdHIsIERJU1BBVENIX0RBVEFfREVTVFJVQ1RPUl9ERUZBVUxUKSk7CisgICAg
bndfY29ubmVjdGlvbl9zZW5kKG53Q29ubmVjdGlvbiwgdmFsdWUuZ2V0KCksIE5XX0NPTk5FQ1RJ
T05fREVGQVVMVF9NRVNTQUdFX0NPTlRFWFQsIHRydWUsIG1ha2VCbG9ja1B0cihbaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIG9w
dGlvbnNdKF9OdWxsYWJsZSBud19lcnJvcl90KSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbFNlbnRQYWNrZXQgeyBpZGVudGlmaWVy
LCBvcHRpb25zLnBhY2tldF9pZCwgcnRjOjpUaW1lTWlsbGlzKCkgfSwgMCk7CisgICAgfSkuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDA2NGVlYjU3
OGVmNzFmNDUyOGQ3ZmJiYzU4ZGIzNjA0NjMxMjk5Y2IuLjY5MzFiNDYyOGUwMzZhNTZhYzJiNWZi
N2RhNDhkNzEyMWM5ZmRiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU0LDcgKzU0LDgg
QEAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9yLmNwcAogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDUmVzb2x2ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1Jlc29sdmVyQ29jb2EuY3BwCi1OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tl
dENvY29hLm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29h
Lm1tCitOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1tCiAK
IEdQVVByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL0dQVVNlcnZpY2VFbnRyeVBv
aW50Lm1tCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2Eu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkZGVkYzQ4YjRkNzg1M2E5MTc0MTU5NzMzNWMzYzJhMDFjNWRjMWIxLi4wOWY2MDE3NjMw
OTlhNDJkZTdiNzQ1NjgxNWQ1NGViOWNlODY3ODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MDUsOCArMzcwNSw4IEBACiAJCTQx
MDNGQkEyMjA2MUJEQjgwMEMyRUFGOCAvKiBOZXR3b3JrTG9hZENoZWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0xvYWRDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0IxREREMkZCNTAwRjAwNkQwIC8qIFJU
Q05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUlRDTmV0
d29yay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNDMURERDJGQjUw
MEYwMDZEMCAvKiBSVENOZXR3b3JrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJUQ05ldHdvcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwQkExMzkyNTcx
MzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5ldHdvcmtSVENTb2NrZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDEwQkExM0EyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2NrZXRDb2NvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BT
b2NrZXRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENUQ1BTb2NrZXRD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwQkExM0EyNTcxMzVGMjAw
MkUyRjhBIC8qIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEx
MTQzNjMyMEY2NzdCMTAwMjZGOTEyIC8qIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRl
bHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMjIzQjcyNjAyMTUyQjAwQjBB
MEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrL3dlYnJ0
Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5l
bFJlbW90ZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgzOSw2ICsz
ODM5LDggQEAKIAkJNDFEQzQ1OTkxRTNEQkIyNDAwQjExRjUxIC8qIExpYldlYlJUQ1NvY2tldENs
aWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWJXZWJSVENT
b2NrZXRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURDNDU5QTFF
M0RCQjI0MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExpYldlYlJUQ1NvY2tldENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MURDNDVBMDFFM0RDNTNDMDBCMTFGNTEgLyogV2ViUlRDUmVzb2x2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUlRDUmVzb2x2
ZXIuY3BwOyBwYXRoID0gTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29y
a1JUQ1VEUFNvY2tldENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MURENzJBNzI2
N0I4QzMxMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUUwQTdDNjIzQjYzOTc4MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1By
b3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDODIzQjYzOTc5MDA1NjEwNjAgLyog
TGliV2ViUlRDQ29kZWNzUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMaWJXZWJSVEND
b2RlY3NQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MDYsOCArODQw
OCwxMCBAQAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzg3NSAvKiBOZXR3b3JrUlRDUmVzb2x2
ZXIuaCAqLywKIAkJCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29s
dmVyQ29jb2EuY3BwICovLAogCQkJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzk4NiAvKiBOZXR3b3Jr
UlRDUmVzb2x2ZXJDb2NvYS5oICovLAotCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBO
ZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLywKLQkJCQk0MTBCQTEzOTI1NzEzNUYyMDAyRTJGOEEg
LyogTmV0d29ya1JUQ1NvY2tldENvY29hLm1tICovLAorCQkJCTQxMEJBMTNBMjU3MTM1RjIwMDJF
MkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaCAqLywKKwkJCQk0MTBCQTEzOTI1NzEz
NUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLm1tICovLAorCQkJCTQxREQ3
MkE3MjY3QjhDMzEwMEE5MEM3MSAvKiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCAqLywKKwkJ
CQk0MURENzJBNjI2N0I4QzMwMDBBOTBDNzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
ICovLAogCQkJCTQxMTIyM0JDMjYwMjRFODEwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNDExMjIzQkIyNjAyNEU4MDAwQjBBMEI2IC8qIFJU
Q0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5LmggKi8sCiAJCQkJNDExMjIzQkQyNjAyNEU4
MTAwQjBBMEI2IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRj
L0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCmluZGV4IGQ4OTdiYjNmMjg0
NjY1YzZjMDMwNDg1Nzk1NDJiYmM5M2JhMTNkMmIuLjUzMjMzYmVmOWVmMWI5ZmIyYTVlMzcyNjdk
MmJjZTQxZmUzNDg0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHAKQEAg
LTU0LDcgKzU0LDggQEAgdm9pZCBMaWJXZWJSVENTb2NrZXRGYWN0b3J5OjpzZXRDb25uZWN0aW9u
KFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAgICBpZiAoIW1fY29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUlRDUHJvdmlkZXI6OlNldFBsYXRmb3JtU29ja2V0c0VuYWJsZWQoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFi
bGVkKCkpLCAwKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtSVENQ
cm92aWRlcjo6U2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQoKSks
IDApOworICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1JUQ1Byb3ZpZGVy
OjpTZXRQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCgpKSwgMCk7CiAK
ICAgICB3aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VUYXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIG1f
cGVuZGluZ01lc3NhZ2VUYXNrcy50YWtlRmlyc3QoKSgqbV9jb25uZWN0aW9uKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAy
NjY3OGIyM2U3YTk0NmU5ZWRhMmEwMGE1YWQ1NmY3ODE5MWVmNjNiLi43OGJhMDU5ZTE4ZmQ2OGY5
NTJlOTRlYjAwYjM5OTRhMDQ4N2U0MjJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYt
MjkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0g
TWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzk4NTkwNDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29u
LgorCisgICAgICAgICogcGxhdGZvcm0vaW9zLXNpbXVsYXRvci13azIvVGVzdEV4cGVjdGF0aW9u
czoKKyAgICAgICAgTWFyayB0ZXN0IGFzIGZhaWxlZCwgYXMgdGhpcyB0ZXN0IGlzIHVzaW5nIHVu
c3VwcG9ydGVkIEFQSSAodHJhbnNwb3J0KS4KKwogMjAyMS0wNi0yOCAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
Q29jb2Egc2hvdWxkIHN1cHBvcnQgb3RoZXIgc2FtcGxlIHJhdGUgdGhhbiA0ODAwMApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggYjcyYjI1MGNiMmYxYjhiZmZiN2UxYTNmZTQ4NGY1
MzA5MTZmNzIwYS4uN2E3MmUwYWU3MWE5MzYxMjRjMGQzOTMxYzA5YjE5NWE0ZTYwZGFmOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDYtMjgg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWln
cmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBSZWJhc2luZyB0ZXN0cyBhcyB0aW1pbmcg
Y2hhbmdlcyBhIGJpdC4KKyAgICAgICAgVGhpcyBhbGlnbnMgd2l0aCBDaHJvbWUgYW5kIEZpcmVm
b3ggYmVoYXZpb3IuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1l
ZGlhLWNhbGwtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJy
dGMvcHJvbWlzZXMtY2FsbC1leHBlY3RlZC50eHQ6CisKIDIwMjEtMDYtMjUgIFppcmFuIFN1biAg
PHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIENvbnNpZGVyIGNvbnRhaW5l
cidzIHdyaXRpbmcgbW9kZSB0byBnZXQgZ3JpZCBpdGVtJ3MgbWFyZ2luCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRp
YS1jYWxsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VicnRjL25vLW1lZGlhLWNhbGwtZXhwZWN0ZWQudHh0CmluZGV4IGNhZTc1YmY3
ZmYzMzg5YmI1NDk3YTQ3Y2U0YzhjNjBkYzFlMDdjZGMuLmFkMjE4OTMxZDc1NWUxZjU2NDAxMDNj
MzM4MDI4ZGUxYjBmZDQxOWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1lZGlhLWNhbGwtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL25vLW1l
ZGlhLWNhbGwtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQAogUEFTUyBDYW4gc2V0IHVwIGEg
YmFzaWMgV2ViUlRDIGNhbGwgd2l0aCBubyBkYXRhLgogaWNlQ29ubmVjdGlvblN0YXRlIGluZm8K
IAotRmlyc3Q6IGNvbXBsZXRlZAorRmlyc3Q6IGNvbm5lY3RlZAogU2Vjb25kOiBjb25uZWN0ZWQK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjL3Byb21pc2VzLWNhbGwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMtY2FsbC1leHBlY3RlZC50eHQK
aW5kZXggZjI0YWFhMGIwNmUyZjFiZWM5NDJmNzE3YjFjNDg5MzJlN2MxZGVjYi4uZjMxZmE4NGI5
MmFiNTNlMmVlZjlmNmQzMmJhNzJhMGE0ZWFjNDc0MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvbWlzZXMtY2FsbC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvcHJvbWlzZXMtY2FsbC1leHBlY3RlZC50eHQKQEAgLTIsNSArMiw1IEBACiBQQVNT
IENhbiBzZXQgdXAgYSBiYXNpYyBXZWJSVEMgY2FsbCB3aXRoIG9ubHkgZGF0YSB1c2luZyBwcm9t
aXNlcy4KIGljZUNvbm5lY3Rpb25TdGF0ZSBpbmZvCiAKLUZpcnN0OiBjb21wbGV0ZWQKK0ZpcnN0
OiBjb25uZWN0ZWQKIFNlY29uZDogY29ubmVjdGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdrMi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vaW9zLXNpbXVsYXRvci13azIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAzYTE1Nzlk
ZTEzYTkxMmQ4YWY1ZGY0NmI1M2VhYzU2YTQ2OGU3NTJkLi5iODYyYmE1ODc5MGE4MmMyNDA1ZmE5
ZjRkY2UxNDhkMjM4MDdlY2U1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mt
c2ltdWxhdG9yLXdrMi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy1zaW11bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTkxLDYgKzkxLDcgQEAgd2Vi
a2l0Lm9yZy9iLzIxNDczMCBbIERlYnVnIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvUlRDU2N0cFRyYW4KIHdlYmtpdC5vcmcvYi8yMTQ2NjEgWyBEZWJ1ZyBdIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1NjdHBUcmFuc3BvcnQtZXZlbnRz
Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8yMTQ3MzAgWyBEZWJ1ZyBdIHdlYnJ0Yy9zaW11
bGNhc3QtaDI2NC5odG1sIFsgU2tpcCBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1jYW5kaWRhdGUtaW4tc2RwLmh0dHBzLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQoraW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJv
dG9jb2wvY3J5cHRvLXN1aXRlLmh0dHBzLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9i
LzIxNDM1OCBmYXN0L3Njcm9sbGluZy9pb3MvcHJvZ3JhbW1hdGljLXNjcm9sbC13aGlsZS16b29t
ZWQuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432667</attachid>
            <date>2021-07-01 01:11:10 -0700</date>
            <delta_ts>2021-07-01 06:54:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-227210-20210701101109.patch</filename>
            <type>text/plain</type>
            <size>71260</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA5Nzg3M2QxMTkzYTBjNTUxOTBiY2Q0OTY3ZTEzN2JjYzdlOGNlY2M5Li42ZGZl
ODI3ZWE1OTlkZTg3YjBlZDhlYmJmOGMwZDQzZDEyNDVmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNi0yOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNaWdyYXRlIFdlYlJU
QyBVRFAgc29ja2V0IGhhbmRsaW5nIHRvIE5XIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBDYXJsc29uLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHA6
CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHA6CisgICAgICAg
ICogQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLm1hYy5leHA6CisKIDIwMjEtMDYtMjMgIEVyaWMg
Q2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0RGVjb2Rl
ci5oIHNob3VsZCBpbmNsdWRlIFRhcmdldENvbmRpdGlvbmFscy5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYwOTEzZDFhYzQ4
ZjI4MDI2YmY1YTliOTc1NDFhYzI5Y2UwN2E1YmQuLjY0YWYyOTBiYTdhNTMzOTkzMmRmOGQ1MWMw
ZDI2NzBjNDRhNGIyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDYtMjggIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBXZWJS
VEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgYSBuZXcgZXhwZXJpbWVudGFsIGZsYWcgZm9yIE5X
IGJhY2tlZCBVRFAgc29ja2V0cy4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKwogMjAyMS0wNi0yNyAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbTW9kZWxdIFtpT1NdIEFkZCBzdXBw
b3J0IGZvciByZW5kZXJpbmcgbW9kZWwgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAyOThjMzBj
ZmRhN2ZlZGJkNjQwZjhiNjM1N2NkNTZjMzJkNWI3MC4uZDdlZmM0YWExODUwM2M3ODkzZGQ1MzYy
MTAwMGNhNzlhYjE4ZGYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1p
Z3JhdGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIHRvIG5l
dyBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnIGZvciBOVyBiYWNrZWQgVURQIHNvY2tldHMuCisK
KyAgICAgICAgKiBwYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0
V2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJSVENQbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldFdlYlJUQ1Bs
YXRmb3JtVURQU29ja2V0c0VuYWJsZWQpOgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VD
b2NvYSBzaG91bGQgc3VwcG9ydCBvdGhlciBzYW1wbGUgcmF0ZSB0aGFuIDQ4MDAwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGYyNWY3NDBhNDQzYmY0MmFiMDQ2MzgxZjI2ZjVmMDBjOTFkNmFmODguLmNlNzdhZmM5OTVh
YzAyYjc5MDlhNjI5ZDI5YzMxYmQ0MzQ0NzBmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMjEtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAg
IFtDb2NvYV0gTWlncmF0ZSBXZWJSVEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBNaWdyYXRlIFVEUCBz
b2NrZXQgaGFuZGxpbmcgZnJvbSBXZWJSVEMgcGh5c2ljYWwgc29ja2V0IHNlcnZlciB0byBudyBB
UEkgZm9yIENvY29hIHBvcnRzLgorCisgICAgICAgIEZvciBlYWNoIFVEUCBzb2NrZXQgb3BlbmVk
LCB3ZSBvcGVuIGEgbndfbGlzdGVuZXIgdGhhdCB3aWxsIGxpc3RlbiB0byBpbmJvdW5kIGNvbm5l
Y3Rpb25zLgorICAgICAgICBPbiBpbmJvdW5kIGNvbm5lY3Rpb24sIHdlIHJlY2VpdmUgYSBud19j
b25uZWN0aW9uIHRoYXQgd2Ugc3RvcmUgaW4gYSBhZGRyZXNzIC0+IGNvbm5lY3Rpb24gbWFwLgor
CisgICAgICAgIFdoZW5ldmVyIHNlbmRpbmcgYSBwYWNrZXQsIHdlIGxvb2sgYXQgdGhlIHJlbW90
ZSBhZGRyZXNzLgorICAgICAgICBJZiBuZWVkZWQsIHdlIGNyZWF0ZSBhIG53X2Nvbm5lY3Rpb24g
dG8gdGhhdCBwYXJ0aWN1bGFyIHJlbW90ZSBhZGRyZXNzIGFuZCBzdG9yZSBpdCBpbiB0aGUgYWRk
cmVzcyAtPiBjb25uZWN0aW9uIG1hcC4KKyAgICAgICAgV2UgdGhlbiB1c2UgdGhlIHByZS1leGlz
dGluZyBvciBuZXdseSBjcmVhdGVkIG53X2Nvbm5lY3Rpb24gdG8gc2VuZCB0aGUgcGFja2V0Lgor
CisgICAgICAgIE1ha2Ugc3VyZSB0byBjYW5jZWwgTlcgY29ubmVjdGlvbiBpbiBjYXNlIG9mIGZh
aWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgc29ja2V0LgorCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDUHJvdmlkZXI6OmNy
ZWF0ZVVEUFNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6Y3Jl
YXRlQ2xpZW50VENQU29ja2V0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0
d29ya1JUQ1Byb3ZpZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENQcm92aWRlcjo6
c2V0UGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENQcm92aWRlcjo6c2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENvY29hLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENT
b2NrZXRDb2NvYS5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OnRj
cFNvY2tldFF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1RDUFNvY2tldENvY29h
OjpjcmVhdGVDbGllbnRUQ1BTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVENQ
U29ja2V0Q29jb2E6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUlRDVENQU29ja2V0Q29jb2E6OnNldE9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENUQ1BTb2NrZXRDb2NvYTo6Y3JlYXRlTWVzc2FnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYTo6c2VuZFRvKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEZWZhdWx0SGFzaDxydGM6OlNvY2tldEFkZHJlc3M+OjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPjo6ZXF1YWwpOgorICAgICAgICAo
V1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmVtcHR5VmFsdWUpOgorICAgICAg
ICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmNvbnN0cnVjdERlbGV0ZWRW
YWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNE
ZWxldGVkVmFsdWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VURQU29ja2V0Q29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2FDb25uZWN0aW9uczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OldURl9HVUFSREVEX0JZX0xPQ0spOgorICAg
ICAgICAoV2ViS2l0Ojp1ZHBTb2NrZXRRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
VENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JUQ1VEUFNvY2tldENvY29hOjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6On5OZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNsb3Nl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpzZXRPcHRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OnNlbmRUbyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpOZXR3
b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpzZXRPcHRpb24pOgorICAgICAg
ICAoV2ViS2l0Ojpwcm9jZXNzVURQRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjcmVhdGVOV0Nvbm5lY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0
aW9uczo6c2VuZFRvKToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvTGliV2ViUlRDU29ja2V0RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkxpYldlYlJUQ1NvY2tldEZhY3Rvcnk6OnNldENvbm5lY3Rpb24pOgorCiAyMDIxLTA2LTI4ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgYW5kIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1MuZXhwCmluZGV4IDdkMjI1Y2My
YzY0YjY2YmZiYzBmMmFlYjBmNjE4NDI4MGQyOTQyNjMuLjA5ZDNjY2Y1MjdkNzI1NmY2Yzg3ZDVj
MDNhMmU1ODY1OTBiZWM2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMuaU9TLmV4cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPUy5leHAKQEAgLTMyMSwzICsz
MjEsNiBAQCBfX1pOM3J0YzE0UlRDQ2VydGlmaWNhdGVEMUV2CiBfX1pONndlYnJ0YzI3Q3JlYXRl
UGVlckNvbm5lY3Rpb25GYWN0b3J5RVBOM3J0YzZUaHJlYWRFUzJfUzJfTlMwXzEzc2NvcGVkX3Jl
ZnB0cklOU18xN0F1ZGlvRGV2aWNlTW9kdWxlRUVFTlMzX0lOU18xOUF1ZGlvRW5jb2RlckZhY3Rv
cnlFRUVOUzNfSU5TXzE5QXVkaW9EZWNvZGVyRmFjdG9yeUVFRU5TdDNfXzExMHVuaXF1ZV9wdHJJ
TlNfMTlWaWRlb0VuY29kZXJGYWN0b3J5RU5TQV8xNGRlZmF1bHRfZGVsZXRlSVNDX0VFRUVOU0Jf
SU5TXzE5VmlkZW9EZWNvZGVyRmFjdG9yeUVOU0RfSVNHX0VFRUVOUzNfSU5TXzEwQXVkaW9NaXhl
ckVFRU5TM19JTlNfMTVBdWRpb1Byb2Nlc3NpbmdFRUVQTlNfMTlBdWRpb0ZyYW1lUHJvY2Vzc29y
RQogX19aTks2d2VicnRjMjNSdHBUcmFuc2NlaXZlckludGVyZmFjZTI2SGVhZGVyRXh0ZW5zaW9u
c05lZ290aWF0ZWRFdgogX19aTjZ3ZWJydGMzMFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFj
ZTIwQ3JlYXRlUGVlckNvbm5lY3Rpb25FUktOU18yM1BlZXJDb25uZWN0aW9uSW50ZXJmYWNlMTZS
VENDb25maWd1cmF0aW9uRU5TXzI2UGVlckNvbm5lY3Rpb25EZXBlbmRlbmNpZXNFCitfX1pOSzNy
dGMxM1NvY2tldEFkZHJlc3M0SGFzaEV2CitfX1pOSzNydGMxM1NvY2tldEFkZHJlc3NlcUVSS1Mw
XworX19aTkszcnRjOUlQQWRkcmVzczVJc05pbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5leHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2VicnRjLmlPU3NpbS5l
eHAKaW5kZXggN2QyMjVjYzJjNjRiNjZiZmJjMGYyYWViMGY2MTg0MjgwZDI5NDI2My4uMDlkM2Nj
ZjUyN2Q3MjU2ZjZjODdkNWMwM2EyZTU4NjU5MGJlYzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xpYndlYnJ0Yy5pT1NzaW0uZXhwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMu
aU9Tc2ltLmV4cApAQCAtMzIxLDMgKzMyMSw2IEBAIF9fWk4zcnRjMTRSVENDZXJ0aWZpY2F0ZUQx
RXYKIF9fWk42d2VicnRjMjdDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlFUE4zcnRjNlRocmVh
ZEVTMl9TMl9OUzBfMTNzY29wZWRfcmVmcHRySU5TXzE3QXVkaW9EZXZpY2VNb2R1bGVFRUVOUzNf
SU5TXzE5QXVkaW9FbmNvZGVyRmFjdG9yeUVFRU5TM19JTlNfMTlBdWRpb0RlY29kZXJGYWN0b3J5
RUVFTlN0M19fMTEwdW5pcXVlX3B0cklOU18xOVZpZGVvRW5jb2RlckZhY3RvcnlFTlNBXzE0ZGVm
YXVsdF9kZWxldGVJU0NfRUVFRU5TQl9JTlNfMTlWaWRlb0RlY29kZXJGYWN0b3J5RU5TRF9JU0df
RUVFRU5TM19JTlNfMTBBdWRpb01peGVyRUVFTlMzX0lOU18xNUF1ZGlvUHJvY2Vzc2luZ0VFRVBO
U18xOUF1ZGlvRnJhbWVQcm9jZXNzb3JFCiBfX1pOSzZ3ZWJydGMyM1J0cFRyYW5zY2VpdmVySW50
ZXJmYWNlMjZIZWFkZXJFeHRlbnNpb25zTmVnb3RpYXRlZEV2CiBfX1pONndlYnJ0YzMwUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlMjBDcmVhdGVQZWVyQ29ubmVjdGlvbkVSS05TXzIzUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2UxNlJUQ0NvbmZpZ3VyYXRpb25FTlNfMjZQZWVyQ29ubmVjdGlv
bkRlcGVuZGVuY2llc0UKK19fWk5LM3J0YzEzU29ja2V0QWRkcmVzczRIYXNoRXYKK19fWk5LM3J0
YzEzU29ja2V0QWRkcmVzc2VxRVJLUzBfCitfX1pOSzNydGM5SVBBZGRyZXNzNUlzTmlsRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy9saWJ3
ZWJydGMubWFjLmV4cCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9u
cy9saWJ3ZWJydGMubWFjLmV4cAppbmRleCA3ZDIyNWNjMmM2NGI2NmJmYmMwZjJhZWIwZjYxODQy
ODBkMjk0MjYzLi4wOWQzY2NmNTI3ZDcyNTZmNmM4N2Q1YzAzYTJlNTg2NTkwYmVjNjg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGlid2Vi
cnRjLm1hYy5leHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRp
b25zL2xpYndlYnJ0Yy5tYWMuZXhwCkBAIC0zMjEsMyArMzIxLDYgQEAgX19aTjNydGMxNFJUQ0Nl
cnRpZmljYXRlRDFFdgogX19aTjZ3ZWJydGMyN0NyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUVQ
TjNydGM2VGhyZWFkRVMyX1MyX05TMF8xM3Njb3BlZF9yZWZwdHJJTlNfMTdBdWRpb0RldmljZU1v
ZHVsZUVFRU5TM19JTlNfMTlBdWRpb0VuY29kZXJGYWN0b3J5RUVFTlMzX0lOU18xOUF1ZGlvRGVj
b2RlckZhY3RvcnlFRUVOU3QzX18xMTB1bmlxdWVfcHRySU5TXzE5VmlkZW9FbmNvZGVyRmFjdG9y
eUVOU0FfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRUVFTlNCX0lOU18xOVZpZGVvRGVjb2RlckZhY3Rv
cnlFTlNEX0lTR19FRUVFTlMzX0lOU18xMEF1ZGlvTWl4ZXJFRUVOUzNfSU5TXzE1QXVkaW9Qcm9j
ZXNzaW5nRUVFUE5TXzE5QXVkaW9GcmFtZVByb2Nlc3NvckUKIF9fWk5LNndlYnJ0YzIzUnRwVHJh
bnNjZWl2ZXJJbnRlcmZhY2UyNkhlYWRlckV4dGVuc2lvbnNOZWdvdGlhdGVkRXYKIF9fWk42d2Vi
cnRjMzBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UyMENyZWF0ZVBlZXJDb25uZWN0aW9u
RVJLTlNfMjNQZWVyQ29ubmVjdGlvbkludGVyZmFjZTE2UlRDQ29uZmlndXJhdGlvbkVOU18yNlBl
ZXJDb25uZWN0aW9uRGVwZW5kZW5jaWVzRQorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzNEhhc2hF
dgorX19aTkszcnRjMTNTb2NrZXRBZGRyZXNzZXFFUktTMF8KK19fWk5LM3J0YzlJUEFkZHJlc3M1
SXNOaWxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlBy
ZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5j
ZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCAzMjNkYzVmMjYyNjIzNGZk
NDlkZmYxODE0OGViNGZhZGZlNjM1YjNmLi41NGE2ZWU2MDM5ZWJmYzdhNDY4ZDkyY2IxZmEwNzA0
OWEzNDc3ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTI5NywxNiArMTI5
NywyNiBAQCBXZWJSVENQbGF0Zm9ybUNvZGVjc0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgICAgV2Vi
Q29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKLVdlYlJUQ1BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQ6CitXZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkOgogICB0eXBlOiBib29sCi0gIGh1
bWFuUmVhZGFibGVOYW1lOiAiV2ViUlRDIFBsYXRmb3JtIFNvY2tldHMiCi0gIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gU29ja2V0cyIKKyAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCisgIGh1bWFuUmVhZGFi
bGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVENQIFNvY2tldHMiCiAgIHdl
YmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCiAgIGNvbmRpdGlvbjogRU5BQkxF
KFdFQl9SVEMpCiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiB0
cnVlCiAKK1dlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAg
aHVtYW5SZWFkYWJsZU5hbWU6ICJXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMiCisgIGh1bWFu
UmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBXZWJSVEMgUGxhdGZvcm0gVURQIFNvY2tldHMi
CisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisgIGNvbmRpdGlvbjog
RU5BQkxFKFdFQl9SVEMpCisgIGRlZmF1bHRWYWx1ZToKKyAgICBXZWJLaXQ6CisgICAgICBkZWZh
dWx0OiBmYWxzZQorCiBXZWJSVENWUDlQcm9maWxlMENvZGVjRW5hYmxlZDoKICAgdHlwZTogYm9v
bAogICBodW1hblJlYWRhYmxlTmFtZTogIldlYlJUQyBWUDkgcHJvZmlsZSAwIGNvZGVjIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCBkMDc3NGZk
OTExNjZiMmI5NzdmMmU5MzBjNTkwOWYzNWEyMTViZThlLi5lMTZjYjVkMTU3NjIxODY1NTBmOTVi
YWFhMmZiNGVlOGNhMzZkNmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaApAQCAtMTYzLDggKzE2MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRX
ZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJU
Q01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgd2ViUlRD
SDI2NFNpbXVsY2FzdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDSDI2NFNpbXVs
Y2FzdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFdlYlJUQ0gyNjRTaW11bGNhc3RFbmFibGVkKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENIMjY0U2ltdWxjYXN0RW5hYmxlZCA9IGlzRW5hYmxl
ZDsgfQotICAgIGJvb2wgd2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNXZWJSVENQbGF0Zm9ybVNvY2tldHNFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRXZWJS
VENQbGF0Zm9ybVNvY2tldHNFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJSVENQbGF0
Zm9ybVNvY2tldHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisgICAgYm9vbCB3ZWJSVENQbGF0Zm9y
bVRDUFNvY2tldHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYlJUQ1BsYXRmb3JtVENQ
U29ja2V0c0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFdlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0Vu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYlJUQ1BsYXRmb3JtVENQU29ja2V0c0VuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29sIHdlYlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0V2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKQEAgLTMxOSw3ICszMjEs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1dlYlJUQ1ZQOVByb2ZpbGUwQ29kZWNFbmFibGVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNXZWJSVENWUDlQcm9maWxlMkNvZGVjRW5hYmxlZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzV2ViUlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxl
ZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1UQ1BTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2ViUlRDUGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7
IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3Zp
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQ
cm92aWRlci5jcHAKaW5kZXggZjkzNWExY2JlNGE5ZThhNzNlYWVjNmJlZjI0MWE1MDQwNjVlNmFj
Ni4uZjcyZjJjZmRjZjJjYmQ2MDRiYzRjZDUwNzkyYjlkN2JmNGE3YTM4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJv
dmlkZXIuY3BwCkBAIC00Niw3ICs0Niw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNs
dWRlICJOZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5oIgotI2luY2x1ZGUgIk5ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oIgorI2luY2x1
ZGUgIk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMTMzLDYgKzEzNCwxNSBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRl
U29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgc3RkOgogCiB2b2lk
IE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlVURQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUlRDTmV0d29yazo6U29ja2V0QWRkcmVzcyYgYWRkcmVz
cywgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCkKIHsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBpZiAobV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkKSB7CisgICAgICAgIGlm
IChhdXRvIHNvY2tldCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6Y3JlYXRlVURQU29ja2V0
KGlkZW50aWZpZXIsICp0aGlzLCBhZGRyZXNzLnZhbHVlLCBtaW5Qb3J0LCBtYXhQb3J0LCBtX2lw
Y0Nvbm5lY3Rpb24uY29weVJlZigpKSkgeworICAgICAgICAgICAgYWRkU29ja2V0KGlkZW50aWZp
ZXIsIFdURk1vdmUoc29ja2V0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisjZW5kaWYKKwogICAgIEFTU0VSVChtX3J0Y05ldHdvcmtUaHJlYWQuSXNDdXJyZW50KCkp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29ja2V0PiBzb2NrZXQobV9w
YWNrZXRTb2NrZXRGYWN0b3J5LT5DcmVhdGVVZHBTb2NrZXQoYWRkcmVzcy52YWx1ZSwgbWluUG9y
dCwgbWF4UG9ydCkpOwogICAgIGNyZWF0ZVNvY2tldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvY2tl
dCksIFNvY2tldDo6VHlwZTo6VURQLCBtX2lwY0Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAgLTE3
Nyw4ICsxODcsOCBAQCB2b2lkIE5ldHdvcmtSVENQcm92aWRlcjo6Y3JlYXRlQ2xpZW50VENQU29j
a2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZgogICAgICAgICB9CiAgICAgICAg
IGNhbGxPblJUQ05ldHdvcmtUaHJlYWQoW3RoaXMsIGlkZW50aWZpZXIsIGxvY2FsQWRkcmVzcyA9
IFJUQ05ldHdvcms6Omlzb2xhdGVkQ29weShsb2NhbEFkZHJlc3MudmFsdWUpLCByZW1vdGVBZGRy
ZXNzID0gUlRDTmV0d29yazo6aXNvbGF0ZWRDb3B5KHJlbW90ZUFkZHJlc3MudmFsdWUpLCBwcm94
eUluZm8gPSBwcm94eUluZm9Gcm9tU2Vzc2lvbihyZW1vdGVBZGRyZXNzLCAqc2Vzc2lvbiksIHVz
ZXJBZ2VudCA9IFdURk1vdmUodXNlckFnZW50KS5pc29sYXRlZENvcHkoKSwgb3B0aW9uc10oKSBt
dXRhYmxlIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3Jt
U29ja2V0c0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3
b3JrUlRDU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhp
cywgcmVtb3RlQWRkcmVzcywgb3B0aW9ucywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsK
KyAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtVENQU29ja2V0c0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0
ZUNsaWVudFRDUFNvY2tldChpZGVudGlmaWVyLCAqdGhpcywgcmVtb3RlQWRkcmVzcywgb3B0aW9u
cywgbV9pcGNDb25uZWN0aW9uLmNvcHlSZWYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
U29ja2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc29ja2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCmluZGV4IDk1YjI5MTc2
NDYzNDg2ZDA0NTEzMTJlYzQ4MTI1OWQ3MjdlM2FjNWEuLjU1MTcxOWM1ZmM4ZTZkNTNlN2RmZWI0
NmI4MmQ2NjRiMjlkMTI2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5oCkBAIC0xMDEsNiArMTAxLDggQEAg
cHVibGljOgogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9p
cGNDb25uZWN0aW9uLmdldCgpOyB9CiAKKyAgICB2b2lkIGNsb3NlU29ja2V0KFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdv
cmtSVENQcm92aWRlcihOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOwogICAgIHZvaWQg
c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKQEAgLTExMCw5ICsxMTIsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY3JlYXRlU2VydmVyVENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIsIGNvbnN0IFJUQ05ldHdvcms6OlNvY2tldEFkZHJlc3MmLCB1aW50MTZfdCBtaW5Qb3J0
LCB1aW50MTZfdCBtYXhQb3J0LCBpbnQpOwogICAgIHZvaWQgd3JhcE5ld1RDUENvbm5lY3Rpb24o
V2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIG5ld0Nvbm5lY3Rpb25Tb2NrZXRJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHNlbmRUb1NvY2tldChXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVy
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzJiYs
IFJUQ1BhY2tldE9wdGlvbnMmJik7Ci0gICAgdm9pZCBjbG9zZVNvY2tldChXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldFNvY2tldE9wdGlvbihXZWJDb3Jl
OjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpOwotICAg
IHZvaWQgc2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9y
bVNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1UQ1BTb2Nr
ZXRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkID0g
ZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9wbGF0Zm9ybVVEUFNvY2tldHNFbmFibGVkID0gZW5hYmxlZDsgfQogCiAgICAg
dm9pZCBjcmVhdGVSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIsIFN0cmluZyYm
KTsKICAgICB2b2lkIHN0b3BSZXNvbHZlcihMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIpOwpA
QCAtMTQxLDcgKzE0Myw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkxpYldl
YlJUQ1NvY2tldElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxydGM6OkFzeW5jUGFja2V0U29j
a2V0Pj4gbV9wZW5kaW5nSW5jb21pbmdTb2NrZXRzOwogICAgIGJvb2wgbV9pc0xpc3RlbmluZ1Nv
Y2tldEF1dGhvcml6ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX3BsYXRmb3JtU29ja2V0c0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fcGxhdGZvcm1VRFBTb2NrZXRzRW5hYmxlZCB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlci5tZXNzYWdl
cy5pbgppbmRleCAxMTcyOTkwNzBmYzI2ODAyZjEwZjkzOThiZDAxODU1MzljMjMwZDdmLi5iZmRk
ZGE3OTk4MzZhNDUwZDhiNTk5MmQ5NTE4MjUxNThjNjMxYzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUHJvdmlkZXIubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1By
b3ZpZGVyLm1lc3NhZ2VzLmluCkBAIC0yOCw3ICsyOCw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtS
VENQcm92aWRlciB7CiAgICAgQ3JlYXRlQ2xpZW50VENQU29ja2V0KFdlYkNvcmU6OkxpYldlYlJU
Q1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRB
ZGRyZXNzIGxvY2FsQWRkcmVzcywgV2ViS2l0OjpSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzIHJl
bW90ZUFkZHJlc3MsIFN0cmluZyB1c2VyQWdlbnQsIGludCBvcHRpb25zKQogICAgIFdyYXBOZXdU
Q1BDb25uZWN0aW9uKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBuZXdDb25uZWN0aW9uU29ja2V0
SWRlbnRpZmllcikKIAotICAgIHZvaWQgU2V0UGxhdGZvcm1Tb2NrZXRzRW5hYmxlZChib29sIGVu
YWJsZWQpCisgICAgdm9pZCBTZXRQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKKyAgICB2b2lkIFNldFBsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
CiAgICAgQ3JlYXRlUmVzb2x2ZXIoV2ViS2l0OjpMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgU3RyaW5nIGFkZHJlc3MpCiAgICAgU3RvcFJlc29sdmVyKFdlYktpdDo6TGli
V2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzViZDMzYjBjNTQyNjc4YjJiMmIwZjhk
ZjhiYjRmMDUyZjBkODYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0KLSNp
bmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsu
aD4KLQotbmFtZXNwYWNlIHJ0YyB7Ci1jbGFzcyBTb2NrZXRBZGRyZXNzOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1JUQ1NvY2tldENvY29hIGZpbmFsIDogcHVibGlj
IE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBjcmVhdGVDbGllbnRUQ1BTb2NrZXQoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0
SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNz
JiwgaW50IG9wdGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYpOwotCi0gICAgTmV0d29ya1JU
Q1NvY2tldENvY29hKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtS
VENQcm92aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBOZXR3b3JrUlRDUHJvdmlk
ZXI6OlNvY2tldC4KLSAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDbGllbnRUQ1A7IH0KLSAgICB2b2lkIGNs
b3NlKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHZhbHVlKSBm
aW5hbDsKLSAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKSBmaW5hbDsKLQotICAg
IFZlY3Rvcjx1aW50OF90PiBjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOwotCi0gICAgV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7Ci0gICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOwotICAgIFJlZjxJUEM6
OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90
PiBtX253Q29ubmVjdGlvbjsKLSAgICBib29sIG1faXNTVFVOIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0
Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDU29ja2V0Q29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZhNTY1MmIwZTVlZDM5M2NkNjFkMTgzN2FiYTlmY2ZlNTE1NjAxMWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1NvY2tldENvY29hLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIk5ldHdvcmtSVENTb2NrZXRDb2NvYS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTGli
V2ViUlRDTmV0d29ya01lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TVFVOTWVzc2FnZVBh
cnNpbmcuaD4KLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9C
bG9ja1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHNvY2tldFF1ZXVlKCkKLXsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgc29ja2V0IHF1ZXVlIiwgRElTUEFUQ0hf
UVVFVUVfQ09OQ1VSUkVOVCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQ+IE5ldHdvcmtSVENTb2NrZXRD
b2NvYTo6Y3JlYXRlQ2xpZW50VENQU29ja2V0KExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgdGNwT3B0aW9ucywgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWlncmF0ZSBz
c2x0Y3AgY2FuZGlkYXRlcywgbWF5YmUgc3VwcG9ydCBPUFRfVExTX0lOU0VDVVJFIGFzIHdlbGwu
Ci0gICAgaWYgKCh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0ZBS0UpIHx8ICh0Y3BPcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5OjpPUFRfVExT
X0lOU0VDVVJFKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8TmV0d29ya1JUQ1NvY2tldENvY29hPihpZGVudGlmaWVyLCBydGNQcm92aWRlciwgcmVtb3Rl
QWRkcmVzcywgdGNwT3B0aW9ucywgV1RGTW92ZShjb25uZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBwcm9jZXNzSW5jb21pbmdEYXRhKFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+
JiYgbndDb25uZWN0aW9uLCBGdW5jdGlvbjxWZWN0b3I8dWludDhfdD4oVmVjdG9yPHVpbnQ4X3Q+
JiYpPiYmIHByb2Nlc3NEYXRhLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIgPSB7IH0pCi17Ci0g
ICAgYXV0byBud0Nvbm5lY3Rpb25SZWZlcmVuY2UgPSBud0Nvbm5lY3Rpb24uZ2V0KCk7Ci0gICAg
bndfY29ubmVjdGlvbl9yZWNlaXZlKG53Q29ubmVjdGlvblJlZmVyZW5jZSwgMSwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBtYWtlQmxvY2tQdHIoW253Q29ubmVjdGlvbiA9
IFdURk1vdmUobndDb25uZWN0aW9uKSwgcHJvY2Vzc0RhdGEgPSBXVEZNb3ZlKHByb2Nlc3NEYXRh
KSwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndf
Y29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIGRpc3Bh
dGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3Qs
IHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSW50cm9kdWNlIHVuY2hlY2tlZEFwcGVuZCB2ZXJzaW9uLgotICAgICAgICAg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBz
aXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLmdldCgp
KTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHByb2Nlc3NEYXRhKFdURk1vdmUoYnVmZmVyKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgY29udGV4dCAmJiBud19jb250ZW50
X2NvbnRleHRfZ2V0X2lzX2ZpbmFsKGNvbnRleHQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2Nlc3NJbmNv
bWluZ0RhdGEoV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBXVEZNb3ZlKHByb2Nlc3NEYXRhKSwgV1RG
TW92ZShidWZmZXIpKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLU5ldHdvcmtSVENTb2NrZXRDb2Nv
YTo6TmV0d29ya1JUQ1NvY2tldENvY29hKExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRp
ZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRB
ZGRyZXNzJiByZW1vdGVBZGRyZXNzLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4m
JiBjb25uZWN0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3J0
Y1Byb3ZpZGVyKHJ0Y1Byb3ZpZGVyKQotICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVj
dGlvbikpCi0gICAgLCBtX2lzU1RVTihvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0b3J5
OjpPUFRfU1RVTikKLXsKLSAgICBhdXRvIGhvc3ROYW1lID0gcmVtb3RlQWRkcmVzcy5ob3N0bmFt
ZSgpOwotICAgIGlmIChob3N0TmFtZS5lbXB0eSgpKQotICAgICAgICBob3N0TmFtZSA9IHJlbW90
ZUFkZHJlc3MuaXBhZGRyKCkuVG9TdHJpbmcoKTsKLSAgICBhdXRvIGhvc3QgPSBhZG9wdE5TKG53
X2VuZHBvaW50X2NyZWF0ZV9ob3N0KGhvc3ROYW1lLmNfc3RyKCksIFN0cmluZzo6bnVtYmVyKHJl
bW90ZUFkZHJlc3MucG9ydCgpKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgLy8gRklYTUU6IEhhbmRs
ZSBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBsaWtlIGZvciBvdGhlciBuZXR3b3JrIGNvZGUg
cGF0aHMsIHVzaW5nIHNlY19wcm90b2NvbF9vcHRpb25zX3NldF92ZXJpZnlfYmxvY2sKLSAgICBi
b29sIGlzVExTID0gb3B0aW9ucyAmIHJ0Yzo6UGFja2V0U29ja2V0RmFjdG9yeTo6T1BUX1RMUzsK
LSAgICBhdXRvIHRjcFRMUyA9IGFkb3B0TlMobndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3Rj
cChpc1RMUyA/IE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OIDogTldfUEFSQU1F
VEVSU19ESVNBQkxFX1BST1RPQ09MLCBeKG53X3Byb3RvY29sX29wdGlvbnNfdCB0Y3Bfb3B0aW9u
cykgewotICAgICAgICBud190Y3Bfb3B0aW9uc19zZXRfbm9fZGVsYXkodGNwX29wdGlvbnMsIHRy
dWUpOwotICAgIH0pKTsKLQotICAgIG1fbndDb25uZWN0aW9uID0gYWRvcHROUyhud19jb25uZWN0
aW9uX2NyZWF0ZShob3N0LmdldCgpLCB0Y3BUTFMuZ2V0KCkpKTsKLQotICAgIG53X2Nvbm5lY3Rp
b25fc2V0X3F1ZXVlKG1fbndDb25uZWN0aW9uLmdldCgpLCBzb2NrZXRRdWV1ZSgpKTsKLSAgICBu
d19jb25uZWN0aW9uX3NldF9zdGF0ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0Nvbm5lY3Rpb24uZ2V0
KCksIG1ha2VCbG9ja1B0cihbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcnRjUHJvdmlkZXIg
PSBtYWtlUmVmKHJ0Y1Byb3ZpZGVyKSwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVm
KCldKG53X2Nvbm5lY3Rpb25fc3RhdGVfdCBzdGF0ZSwgX051bGxhYmxlIG53X2Vycm9yX3QgZXJy
b3IpIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfaW52YWxpZDoK
LSAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3dhaXRpbmc6Ci0gICAgICAgIGNhc2Ug
bndfY29ubmVjdGlvbl9zdGF0ZV9wcmVwYXJpbmc6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9yZWFkeToKLSAgICAgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENvbm5lY3QoaWRlbnRp
ZmllciksIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIG53X2Nvbm5lY3Rp
b25fc3RhdGVfZmFpbGVkOgotICAgICAgICAgICAgcnRjUHJvdmlkZXItPmNhbGxPblJUQ05ldHdv
cmtUaHJlYWQoW3J0Y1Byb3ZpZGVyLCBpZGVudGlmaWVyXSB7Ci0gICAgICAgICAgICAgICAgcnRj
UHJvdmlkZXItPnRha2VTb2NrZXQoaWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9KS5nZXQoKSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdEYXRhKG1f
bndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKSwg
cG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBtX2lzU1RVTl0oYXV0byYmIGJ1
ZmZlcikgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVybiBXZWJSVEM6OmV4dHJhY3RNZXNzYWdlcyhX
VEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2FnZVR5cGU6OlNUVU4gOiBXZWJS
VEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2FnZSwgYXV0byBzaXplKSB7Ci0g
ICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNzYWdlLCBzaXplKTsKLSAgICAg
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25h
bFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3b3JrOjpJUEFkZHJlc3MoaXAp
LCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotCi0gICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29ubmVjdGlvbi5nZXQoKSk7Ci19
Ci0KLXZvaWQgTmV0d29ya1JUQ1NvY2tldENvY29hOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX253
Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIG53X2Nvbm5lY3Rpb25fY2FuY2VsKG1f
bndDb25uZWN0aW9uLmdldCgpKTsKLSAgICBtX3J0Y1Byb3ZpZGVyLnRha2VTb2NrZXQobV9pZGVu
dGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3JrUlRDU29ja2V0Q29jb2E6OnNldE9wdGlvbihpbnQs
IGludCkKLXsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgdGhpcyBpcyBub3QgbmVlZGVkLgotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFfdD4gZGF0YUZyb21WZWN0b3IoVmVjdG9y
PHVpbnQ4X3Q+JiYgdikKLXsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSB2LnNpemUoKTsKLSAgICBh
dXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJu
IGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgZmFzdEZyZWUocmF3UG9pbnRlcik7
Ci0gICAgfSkpOwotfQotCi1WZWN0b3I8dWludDhfdD4gTmV0d29ya1JUQ1NvY2tldENvY29hOjpj
cmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewot
ICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2lzU1RVTikgewotICAgICAgICBhdXRvIG1l
c3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVOT3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwg
c2l6ZSk7Ci0gICAgICAgIGlmICghbWVzc2FnZUxlbmd0aHMpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgICAgIEFTU0VSVChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBz
aXplKTsKLSAgICAgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBh
ZGRpbmcgPj0gc2l6ZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0
aFdpdGhQYWRkaW5nIDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VMZW5ndGhXaXRoUGFkZGluZyk7Ci0gICAgICAg
IGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAw
IDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXpl
OyArK2NwdHIpCi0gICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIC8vIFByZXBlbmQgbGVuZ3RoLgotICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSArIDIpOwotICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZG
KTsKLSAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKHNpemUgJiAweEZGKTsKLSAgICBidWZmZXIu
YXBwZW5kKGRhdGEsIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTmV0d29y
a1JUQ1NvY2tldENvY29hOjpzZW5kVG8oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBhdXRvIGJ1ZmZlciA9IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6
ZSk7Ci0gICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG53
X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVjdGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RG
TW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09OTkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVY
VCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0
aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYoKSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9y
X3QpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29y
azo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6
OlRpbWVNaWxsaXMoKSB9LCAwKTsKLSAgICB9KS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRD
VENQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlNWZhOTRjMzE0N2Q1NTdmNTFk
ZTAxN2U0NjhjYzE0NzhkOGFkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EuaApAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiTmV0d29ya1JUQ1Byb3ZpZGVyLmgi
CisjaW5jbHVkZSA8TmV0d29yay9OZXR3b3JrLmg+CisKK25hbWVzcGFjZSBydGMgeworY2xhc3Mg
U29ja2V0QWRkcmVzczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtS
VENUQ1BTb2NrZXRDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tl
dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUlRDUHJvdmlkZXI6OlNvY2tldD4gY3JlYXRlQ2xpZW50VENQ
U29ja2V0KFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGludCBvcHRpb25zLCBSZWY8SVBDOjpD
b25uZWN0aW9uPiYmKTsKKworICAgIE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYShXZWJDb3JlOjpM
aWJXZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6
OlNvY2tldEFkZHJlc3MmLCBpbnQgb3B0aW9ucywgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisK
K3ByaXZhdGU6CisgICAgLy8gTmV0d29ya1JUQ1Byb3ZpZGVyOjpTb2NrZXQuCisgICAgV2ViQ29y
ZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gVHlwZTo6Q2xpZW50VENQOyB9CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQg
c2V0T3B0aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkgZmluYWw7CisgICAgdm9pZCBzZW5kVG8o
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgY29uc3Qg
cnRjOjpQYWNrZXRPcHRpb25zJikgZmluYWw7CisKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlYXRl
TWVzc2FnZUJ1ZmZlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE5ldHdvcmtSVENQcm92
aWRlciYgbV9ydGNQcm92aWRlcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9ud0Nvbm5lY3Rpb247CisgICAg
Ym9vbCBtX2lzU1RVTiB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZjQwOGM2NmQ5M2I3ZjU3ZTU0NGVlZjJiM2Iw
YTJlNWZjNDAwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0KQEAgLTAsMCArMSwxOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NP
QSkKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENOZXR3
b3JrTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9T
VFVOTWVzc2FnZVBhcnNpbmcuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2lu
Y2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHRjcFNvY2tldFF1ZXVl
KCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMgVENQIHNvY2tl
dCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOworICAgIHJldHVy
biBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0
PiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2E6OmNyZWF0ZUNsaWVudFRDUFNvY2tldChMaWJXZWJS
VENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92aWRlciYgcnRjUHJv
dmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcywgaW50IHRjcE9w
dGlvbnMsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1pZ3JhdGUgc3NsdGNwIGNhbmRpZGF0ZXMsIG1heWJlIHN1cHBvcnQgT1BU
X1RMU19JTlNFQ1VSRSBhcyB3ZWxsLgorICAgIGlmICgodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19GQUtFKSB8fCAodGNwT3B0aW9ucyAmIHJ0Yzo6UGFja2V0
U29ja2V0RmFjdG9yeTo6T1BUX1RMU19JTlNFQ1VSRSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtYWtlVW5pcXVlPE5ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYT4oaWRlbnRp
ZmllciwgcnRjUHJvdmlkZXIsIHJlbW90ZUFkZHJlc3MsIHRjcE9wdGlvbnMsIFdURk1vdmUoY29u
bmVjdGlvbikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc0luY29taW5nRGF0YShS
ZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiYmIG53Q29ubmVjdGlvbiwgRnVuY3Rpb248VmVjdG9y
PHVpbnQ4X3Q+KFZlY3Rvcjx1aW50OF90PiYmKT4mJiBwcm9jZXNzRGF0YSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgYnVmZmVyID0geyB9KQoreworICAgIGF1dG8gbndDb25uZWN0aW9uUmVmZXJlbmNlID0g
bndDb25uZWN0aW9uLmdldCgpOworICAgIG53X2Nvbm5lY3Rpb25fcmVjZWl2ZShud0Nvbm5lY3Rp
b25SZWZlcmVuY2UsIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgbWFr
ZUJsb2NrUHRyKFtud0Nvbm5lY3Rpb24gPSBXVEZNb3ZlKG53Q29ubmVjdGlvbiksIHByb2Nlc3NE
YXRhID0gV1RGTW92ZShwcm9jZXNzRGF0YSksIGJ1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oZGlz
cGF0Y2hfZGF0YV90IGNvbnRlbnQsIG53X2NvbnRlbnRfY29udGV4dF90IGNvbnRleHQsIGJvb2wg
aXNDb21wbGV0ZSwgbndfZXJyb3JfdCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgIGlmIChjb250
ZW50KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9kYXRhX2FwcGx5KGNvbnRlbnQsIG1ha2VCbG9j
a1B0cihbJl0oZGlzcGF0Y2hfZGF0YV90LCBzaXplX3QsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEludHJvZHVjZSB1bmNoZWNrZWRB
cHBlbmQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9KS5nZXQoKSk7CisgICAgICAgICAgICBidWZmZXIgPSBwcm9jZXNz
RGF0YShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbXBsZXRl
ICYmIGNvbnRleHQgJiYgbndfY29udGVudF9jb250ZXh0X2dldF9pc19maW5hbChjb250ZXh0KSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EgcHJvY2Vz
c0luY29taW5nRGF0YSBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIG53X2Vycm9yX2dldF9lcnJvcl9j
b2RlKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJv
Y2Vzc0luY29taW5nRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vzc0Rh
dGEpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIH0pLmdldCgpKTsKK30KKworTmV0d29ya1JUQ1RD
UFNvY2tldENvY29hOjpOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EoTGliV2ViUlRDU29ja2V0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHJ0Y1Byb3ZpZGVyLCBjb25z
dCBydGM6OlNvY2tldEFkZHJlc3MmIHJlbW90ZUFkZHJlc3MsIGludCBvcHRpb25zLCBSZWY8SVBD
OjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKKyAgICAsIG1fcnRjUHJvdmlkZXIocnRjUHJvdmlkZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1faXNTVFVOKG9wdGlvbnMgJiBydGM6OlBhY2tl
dFNvY2tldEZhY3Rvcnk6Ok9QVF9TVFVOKQoreworICAgIGF1dG8gaG9zdE5hbWUgPSByZW1vdGVB
ZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgaWYgKGhvc3ROYW1lLmVtcHR5KCkpCisgICAgICAgIGhv
c3ROYW1lID0gcmVtb3RlQWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgIGF1dG8gaG9z
dCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdE5hbWUuY19zdHIoKSwgU3Ry
aW5nOjpudW1iZXIocmVtb3RlQWRkcmVzcy5wb3J0KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAv
LyBGSVhNRTogSGFuZGxlIFRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGxpa2UgZm9yIG90aGVy
IG5ldHdvcmsgY29kZSBwYXRocywgdXNpbmcgc2VjX3Byb3RvY29sX29wdGlvbnNfc2V0X3Zlcmlm
eV9ibG9jaworICAgIGJvb2wgaXNUTFMgPSBvcHRpb25zICYgcnRjOjpQYWNrZXRTb2NrZXRGYWN0
b3J5OjpPUFRfVExTOworICAgIGF1dG8gdGNwVExTID0gYWRvcHROUyhud19wYXJhbWV0ZXJzX2Ny
ZWF0ZV9zZWN1cmVfdGNwKGlzVExTID8gTldfUEFSQU1FVEVSU19ERUZBVUxUX0NPTkZJR1VSQVRJ
T04gOiBOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIF4obndfcHJvdG9jb2xfb3B0aW9u
c190IHRjcF9vcHRpb25zKSB7CisgICAgICAgIG53X3RjcF9vcHRpb25zX3NldF9ub19kZWxheSh0
Y3Bfb3B0aW9ucywgdHJ1ZSk7CisgICAgfSkpOworCisgICAgbV9ud0Nvbm5lY3Rpb24gPSBhZG9w
dE5TKG53X2Nvbm5lY3Rpb25fY3JlYXRlKGhvc3QuZ2V0KCksIHRjcFRMUy5nZXQoKSkpOworCisg
ICAgbndfY29ubmVjdGlvbl9zZXRfcXVldWUobV9ud0Nvbm5lY3Rpb24uZ2V0KCksIHRjcFNvY2tl
dFF1ZXVlKCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2V0X3N0YXRlX2NoYW5nZWRfaGFuZGxlciht
X253Q29ubmVjdGlvbi5nZXQoKSwgbWFrZUJsb2NrUHRyKFtpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBydGNQcm92aWRlciA9IG1ha2VSZWYocnRjUHJvdmlkZXIpLCBjb25uZWN0aW9uID0gbV9j
b25uZWN0aW9uLmNvcHlSZWYoKV0obndfY29ubmVjdGlvbl9zdGF0ZV90IHN0YXRlLCBfTnVsbGFi
bGUgbndfZXJyb3JfdCBlcnJvcikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJy
b3IpOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlv
bl9zdGF0ZV9pbnZhbGlkOgorICAgICAgICBjYXNlIG53X2Nvbm5lY3Rpb25fc3RhdGVfd2FpdGlu
ZzoKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3ByZXBhcmluZzoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBud19jb25uZWN0aW9uX3N0YXRlX3JlYWR5OgorICAg
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2ln
bmFsQ29ubmVjdChpZGVudGlmaWVyKSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9mYWlsZWQ6CisgICAgICAgICAgICBydGNQcm92aWRl
ci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcnRjUHJvdmlkZXIsIGlkZW50aWZpZXJdIHsKKyAg
ICAgICAgICAgICAgICBydGNQcm92aWRlci0+Y2xvc2VTb2NrZXQoaWRlbnRpZmllcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlkZW50aWZpZXIsIC0xKSwgMCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgbndfY29ubmVjdGlvbl9zdGF0ZV9jYW5jZWxsZWQ6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KS5nZXQoKSk7CisKKyAgICBwcm9j
ZXNzSW5jb21pbmdEYXRhKG1fbndDb25uZWN0aW9uLmdldCgpLCBbaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVtb3Rl
QWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpLCBpc1NUVU4gPSBt
X2lzU1RVTl0oYXV0byYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBXZWJSVEM6
OmV4dHJhY3RNZXNzYWdlcyhXVEZNb3ZlKGJ1ZmZlciksIGlzU1RVTiA/IFdlYlJUQzo6TWVzc2Fn
ZVR5cGU6OlNUVU4gOiBXZWJSVEM6Ok1lc3NhZ2VUeXBlOjpEYXRhLCBbJl0oYXV0byogbWVzc2Fn
ZSwgYXV0byBzaXplKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShtZXNz
YWdlLCBzaXplKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldl
YlJUQ05ldHdvcms6OlNpZ25hbFJlYWRQYWNrZXQgeyBpZGVudGlmaWVyLCBkYXRhLCBSVENOZXR3
b3JrOjpJUEFkZHJlc3MoaXApLCBwb3J0LCBydGM6OlRpbWVNaWxsaXMoKSAqIDEwMDAgfSwgMCk7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgbndfY29ubmVjdGlvbl9zdGFydChtX253Q29u
bmVjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX253Q29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG53
X2Nvbm5lY3Rpb25fY2FuY2VsKG1fbndDb25uZWN0aW9uLmdldCgpKTsKKyAgICBtX3J0Y1Byb3Zp
ZGVyLnRha2VTb2NrZXQobV9pZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVENQU29j
a2V0Q29jb2E6OnNldE9wdGlvbihpbnQsIGludCkKK3sKKyAgICAvLyBGSVhNRTogVmFsaWRhdGUg
dGhpcyBpcyBub3QgbmVlZGVkLgorfQorCitzdGF0aWMgUmV0YWluUHRyPGRpc3BhdGNoX2RhdGFf
dD4gZGF0YUZyb21WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiYgdikKK3sKKyAgICBhdXRvIGJ1ZmZl
clNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIHJhd1BvaW50ZXIgPSB2LnJlbGVhc2VCdWZmZXIo
KS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoZGlzcGF0Y2hfZGF0YV9jcmVhdGUocmF3
UG9pbnRlciwgYnVmZmVyU2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgZmFzdEZyZWUocmF3UG9pbnRlcik7CisgICAgfSkpOworfQorCitWZWN0b3I8dWludDhfdD4g
TmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpjcmVhdGVNZXNzYWdlQnVmZmVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID49IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICht
X2lzU1RVTikgeworICAgICAgICBhdXRvIG1lc3NhZ2VMZW5ndGhzID0gV2ViUlRDOjpnZXRTVFVO
T3JUVVJOTWVzc2FnZUxlbmd0aHMoZGF0YSwgc2l6ZSk7CisgICAgICAgIGlmICghbWVzc2FnZUxl
bmd0aHMpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEFTU0VSVChtZXNzYWdl
TGVuZ3Rocy0+bWVzc2FnZUxlbmd0aCA9PSBzaXplKTsKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VM
ZW5ndGhzLT5tZXNzYWdlTGVuZ3RoV2l0aFBhZGRpbmcgPj0gc2l6ZSk7CisgICAgICAgIGlmICht
ZXNzYWdlTGVuZ3Rocy0+bWVzc2FnZUxlbmd0aFdpdGhQYWRkaW5nIDwgc2l6ZSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZUxlbmd0aHMtPm1lc3NhZ2VM
ZW5ndGhXaXRoUGFkZGluZyk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwIDsgY3B0ciA8IG1lc3NhZ2VMZW5ndGhzLT5tZXNz
YWdlTGVuZ3RoV2l0aFBhZGRpbmcgLSBzaXplOyArK2NwdHIpCisgICAgICAgICAgICBidWZmZXIu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKworICAg
IC8vIFByZXBlbmQgbGVuZ3RoLgorICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgYnVm
ZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSArIDIpOworICAgIGJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICBidWZmZXIudW5jaGVja2VkQXBwZW5k
KHNpemUgJiAweEZGKTsKKyAgICBidWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIHJldHVy
biBidWZmZXI7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1RDUFNvY2tldENvY29hOjpzZW5kVG8oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYs
IGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGJ1ZmZlciA9
IGNyZWF0ZU1lc3NhZ2VCdWZmZXIoZGF0YSwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG53X2Nvbm5lY3Rpb25fc2VuZChtX253Q29ubmVj
dGlvbi5nZXQoKSwgZGF0YUZyb21WZWN0b3IoV1RGTW92ZShidWZmZXIpKS5nZXQoKSwgTldfQ09O
TkVDVElPTl9ERUZBVUxUX01FU1NBR0VfQ09OVEVYVCwgdHJ1ZSwgbWFrZUJsb2NrUHRyKFtpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9uLmNvcHlSZWYo
KSwgb3B0aW9uc10oX051bGxhYmxlIG53X2Vycm9yX3QpIHsKKyAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6TGliV2ViUlRDTmV0d29yazo6U2lnbmFsU2VudFBhY2tldCB7IGlkZW50
aWZpZXIsIG9wdGlvbnMucGFja2V0X2lkLCBydGM6OlRpbWVNaWxsaXMoKSB9LCAwKTsKKyAgICB9
KS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1YjA1MTNjNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3Jr
UlRDVURQU29ja2V0Q29jb2EuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1
ZGUgIk5ldHdvcmtSVENQcm92aWRlci5oIgorI2luY2x1ZGUgPE5ldHdvcmsvTmV0d29yay5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKworbmFtZXNw
YWNlIHJ0YyB7CitjbGFzcyBTb2NrZXRBZGRyZXNzOworfQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8cnRjOjpTb2NrZXRBZGRyZXNzPiB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7
IHJldHVybiBhZGRyZXNzLkhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHJ0
Yzo6U29ja2V0QWRkcmVzcyYgYSwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBiKSB7IHJldHVy
biBhID09IGIgfHwgKGEuSXNOaWwoKSAmJiBiLklzTmlsKCkgJiYgYS5zY29wZV9pZCgpID09IGIu
c2NvcGVfaWQoKSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxydGM6OlNvY2tldEFkZHJlc3M+IDogR2VuZXJpY0hhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRy
ZXNzPiB7CisgICAgc3RhdGljIHJ0Yzo6U29ja2V0QWRkcmVzcyBlbXB0eVZhbHVlKCkgeyByZXR1
cm4gcnRjOjpTb2NrZXRBZGRyZXNzIHsgfTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShydGM6OlNvY2tldEFkZHJlc3MmIGFkZHJlc3MpIHsgYWRkcmVzcyA9IHsgfTsg
YWRkcmVzcy5TZXRTY29wZUlEKC0xKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1cm4gYWRkcmVzcy5zY29w
ZV9pZCgpID09IC0xOyB9Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczsKKworY2xhc3MgTmV0d29ya1JUQ1VE
UFNvY2tldENvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRlcjo6U29ja2V0PiBjcmVhdGVVRFBTb2NrZXQoV2Vi
Q29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiwgY29u
c3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgdWludDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9y
dCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7CisKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVy
JiwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJik7Cisg
ICAgfk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdv
cmtSVENQcm92aWRlcjo6U29ja2V0LgorICAgIFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlVEUDsgfQorICAgIHZv
aWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgdmFs
dWUpIGZpbmFsOworICAgIHZvaWQgc2VuZFRvKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0
IHJ0Yzo6U29ja2V0QWRkcmVzcyYsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYpIGZpbmFsOwor
CisgICAgTmV0d29ya1JUQ1Byb3ZpZGVyJiBtX3J0Y1Byb3ZpZGVyOworICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1NvY2tldElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFJlZjxOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucz4gbV9ud0Nvbm5lY3Rpb25zOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWJiNjk2NTlj
NzkyZWY0MGZlYzA1ZDkzYzJjZGI5NjBhYjAxMDdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLm1t
CkBAIC0wLDAgKzEsMjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJOZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpICYm
IFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IkxpYldlYlJUQ05ldHdvcmtNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1NUVU5NZXNzYWdlUGFyc2luZy5oPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworY2xhc3MgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnMg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29u
bmVjdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtSVENVRFBTb2NrZXRD
b2NvYUNvbm5lY3Rpb25zPiBjcmVhdGUoV2ViQ29yZTo6TGliV2ViUlRDU29ja2V0SWRlbnRpZmll
ciBpZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImIHByb3ZpZGVyLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmIGFkZHJlc3MsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9u
cyhpZGVudGlmaWVyLCBwcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpOyB9
CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRPcHRpb24oaW50IG9wdGlvbiwgaW50
IHZhbHVlKTsKKyAgICB2b2lkIHNlbmRUbyhjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBy
dGM6OlNvY2tldEFkZHJlc3MmLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmKTsKKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyhXZWJDb3JlOjpMaWJX
ZWJSVENTb2NrZXRJZGVudGlmaWVyLCBOZXR3b3JrUlRDUHJvdmlkZXImLCBjb25zdCBydGM6OlNv
Y2tldEFkZHJlc3MmLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmKTsKKworICAgIFJldGFpblB0cjxu
d19jb25uZWN0aW9uX3Q+IGNyZWF0ZU5XQ29ubmVjdGlvbihjb25zdCBydGM6OlNvY2tldEFkZHJl
c3MmKTsKKyAgICB2b2lkIHNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCwgY29uc3Qg
cnRjOjpTb2NrZXRBZGRyZXNzJik7CisKKyAgICBXZWJDb3JlOjpMaWJXZWJSVENTb2NrZXRJZGVu
dGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgcnRjOjpTb2NrZXRBZGRyZXNzIG1fYWRkcmVzczsKKyAgICBSZXRhaW5QdHI8bndf
bGlzdGVuZXJfdD4gbV9ud0xpc3RlbmVyOworICAgIExvY2sgbV9ud0Nvbm5lY3Rpb25zTG9jazsK
KyAgICBib29sIG1faXNDbG9zZWQgV1RGX0dVQVJERURfQllfTE9DSyhtX253Q29ubmVjdGlvbnNM
b2NrKSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDxydGM6OlNvY2tldEFkZHJlc3MsIFJldGFpblB0
cjxud19jb25uZWN0aW9uX3Q+PiBtX253Q29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyht
X253Q29ubmVjdGlvbnNMb2NrKTsKK307CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IHVkcFNv
Y2tldFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZTsKKyAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
VG9rZW4sIF57CisgICAgICAgIHF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJSVEMg
VURQIHNvY2tldCBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNVUlJFTlQpOworICAgIH0pOwor
ICAgIHJldHVybiBxdWV1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtSVENQcm92aWRl
cjo6U29ja2V0PiBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6OmNyZWF0ZVVEUFNvY2tldChXZWJD
b3JlOjpMaWJXZWJSVENTb2NrZXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtSVENQcm92
aWRlciYgcnRjUHJvdmlkZXIsIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRkcmVzcywgdWlu
dDE2X3QgbWluUG9ydCwgdWludDE2X3QgbWF4UG9ydCwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBj
b25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBEZWNpZGUgaG93IHRvIHVzZSBtaW5Qb3J0L21h
eFBvcnQuCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TmV0d29ya1JUQ1VEUFNvY2tldENvY29hPihp
ZGVudGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSk7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6TmV0d29ya1JUQ1VEUFNvY2tldENvY29hKFdl
YkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya1JUQ1By
b3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzLCBS
ZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisgICAgOiBtX3J0Y1Byb3ZpZGVyKHJ0
Y1Byb3ZpZGVyKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX253Q29u
bmVjdGlvbnMoTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZShpZGVu
dGlmaWVyLCBydGNQcm92aWRlciwgYWRkcmVzcywgV1RGTW92ZShjb25uZWN0aW9uKSkpCit7Cit9
CisKK05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6fk5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYSgp
Cit7Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNvY2tldENvY29hOjpjbG9zZSgpCit7CisgICAg
bV9ud0Nvbm5lY3Rpb25zLT5jbG9zZSgpOworICAgIG1fcnRjUHJvdmlkZXIudGFrZVNvY2tldCht
X2lkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYTo6c2V0T3B0
aW9uKGludCBvcHRpb24sIGludCB2YWx1ZSkKK3sKKyAgICBtX253Q29ubmVjdGlvbnMtPnNldE9w
dGlvbihvcHRpb24sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2E6
OnNlbmRUbyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiBhZGRyZXNzLCBjb25zdCBydGM6OlBhY2tldE9wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgbV9ud0Nvbm5lY3Rpb25zLT5zZW5kVG8oZGF0YSwgc2l6ZSwgYWRkcmVzcywgb3B0aW9u
cyk7Cit9CisKK3N0YXRpYyBydGM6OlNvY2tldEFkZHJlc3Mgc29ja2V0QWRkcmVzc0Zyb21JbmNv
bWluZ0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCit7CisgICAgYXV0byBl
bmRwb2ludCA9IGFkb3B0TlMobndfY29ubmVjdGlvbl9jb3B5X2VuZHBvaW50KGNvbm5lY3Rpb24p
KTsKKyAgICBhdXRvIHR5cGUgPSBud19lbmRwb2ludF9nZXRfdHlwZShlbmRwb2ludC5nZXQoKSk7
CisgICAgaWYgKHR5cGUgPT0gbndfZW5kcG9pbnRfdHlwZV9hZGRyZXNzKSB7CisgICAgICAgIGF1
dG8qIGlwQWRkcmVzcyA9IG53X2VuZHBvaW50X2NvcHlfYWRkcmVzc19zdHJpbmcoZW5kcG9pbnQu
Z2V0KCkpOworICAgICAgICBydGM6OlNvY2tldEFkZHJlc3MgcmVtb3RlQWRkcmVzcyB7IGlwQWRk
cmVzcywgbndfZW5kcG9pbnRfZ2V0X3BvcnQoZW5kcG9pbnQuZ2V0KCkpIH07CisgICAgICAgIGZy
ZWUoaXBBZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIHJlbW90ZUFkZHJlc3M7CisgICAgfQorICAg
IHJldHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyBud19lbmRwb2ludF9nZXRfaG9zdG5hbWUoZW5k
cG9pbnQuZ2V0KCkpLCBud19lbmRwb2ludF9nZXRfcG9ydChlbmRwb2ludC5nZXQoKSkgfTsKK30K
KworTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6Ok5ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYUNvbm5lY3Rpb25zKFdlYkNvcmU6OkxpYldlYlJUQ1NvY2tldElkZW50aWZpZXIgaWRl
bnRpZmllciwgTmV0d29ya1JUQ1Byb3ZpZGVyJiBydGNQcm92aWRlciwgY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiBhZGRyZXNzLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCisg
ICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fY29ubmVjdGlvbihXVEZNb3Zl
KGNvbm5lY3Rpb24pKQoreworICAgIGF1dG8gcGFyYW1ldGVycyA9IGFkb3B0TlMobndfcGFyYW1l
dGVyc19jcmVhdGVfc2VjdXJlX3VkcChOV19QQVJBTUVURVJTX0RJU0FCTEVfUFJPVE9DT0wsIE5X
X1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OKSk7CisgICAgeworICAgICAgICBhdXRv
IGhvc3RBZGRyZXNzID0gYWRkcmVzcy5pcGFkZHIoKS5Ub1N0cmluZygpOworICAgICAgICBpZiAo
YWRkcmVzcy5pcGFkZHIoKS5Jc05pbCgpKQorICAgICAgICAgICAgaG9zdEFkZHJlc3MgPSBhZGRy
ZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGF1dG8gbG9jYWxFbmRwb2ludCA9IGFkb3B0TlMobndf
ZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdEFkZHJlc3MuY19zdHIoKSwgIjAiKSk7CisgICAgICAg
IG1fYWRkcmVzcyA9IHsgbndfZW5kcG9pbnRfZ2V0X2hvc3RuYW1lKGxvY2FsRW5kcG9pbnQuZ2V0
KCkpLCBud19lbmRwb2ludF9nZXRfcG9ydChsb2NhbEVuZHBvaW50LmdldCgpKSB9OworICAgICAg
ICBud19wYXJhbWV0ZXJzX3NldF9sb2NhbF9lbmRwb2ludChwYXJhbWV0ZXJzLmdldCgpLCBsb2Nh
bEVuZHBvaW50LmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHByb3RvY29sU3Rh
Y2sgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY29weV9kZWZhdWx0X3Byb3RvY29sX3N0YWNrKHBh
cmFtZXRlcnMuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhud19wcm90
b2NvbF9zdGFja19jb3B5X2ludGVybmV0X3Byb3RvY29sKHByb3RvY29sU3RhY2suZ2V0KCkpKTsK
KyAgICAgICAgbndfaXBfb3B0aW9uc19zZXRfdmVyc2lvbihvcHRpb25zLmdldCgpLCBhZGRyZXNz
LmZhbWlseSgpID09IEFGX0lORVQgPyBud19pcF92ZXJzaW9uXzQgOiBud19pcF92ZXJzaW9uXzYp
OworICAgIH0KKworICAgIG1fbndMaXN0ZW5lciA9IGFkb3B0TlMobndfbGlzdGVuZXJfY3JlYXRl
KHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICBud19saXN0ZW5lcl9zZXRfcXVldWUobV9ud0xpc3Rl
bmVyLmdldCgpLCB1ZHBTb2NrZXRRdWV1ZSgpKTsKKworICAgIG53X2xpc3RlbmVyX3NldF9zdGF0
ZV9jaGFuZ2VkX2hhbmRsZXIobV9ud0xpc3RlbmVyLmdldCgpLCBtYWtlQmxvY2tQdHIoW253TGlz
dGVuZXIgPSBtX253TGlzdGVuZXIuZ2V0KCksIGFkZHJlc3MgPSBtX2FkZHJlc3MsIGNvbm5lY3Rp
b24gPSBtX2Nvbm5lY3Rpb24uY29weVJlZigpLCBwcm90ZWN0ZWRSVENQcm92aWRlciA9IG1ha2VS
ZWYocnRjUHJvdmlkZXIpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyXShud19saXN0ZW5lcl9z
dGF0ZV90IHN0YXRlLCBud19lcnJvcl90IGVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgc3dpdGNo
IChzdGF0ZSkgeworICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX2ludmFsaWQ6CisgICAg
ICAgIGNhc2UgbndfbGlzdGVuZXJfc3RhdGVfd2FpdGluZzoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIG53X2xpc3RlbmVyX3N0YXRlX3JlYWR5OgorICAgICAgICAgICAgYWRkcmVz
cy5TZXRQb3J0KG53X2xpc3RlbmVyX2dldF9wb3J0KG53TGlzdGVuZXIpKTsKKyAgICAgICAgICAg
IGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbEFkZHJl
c3NSZWFkeShpZGVudGlmaWVyLCBSVENOZXR3b3JrOjpTb2NrZXRBZGRyZXNzKGFkZHJlc3MpKSwg
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBud19saXN0ZW5lcl9zdGF0ZV9m
YWlsZWQ6CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJOZXR3b3JrUlRD
VURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIGVycm9yID8g
bndfZXJyb3JfZ2V0X2Vycm9yX2NvZGUoZXJyb3IpIDogMCk7CisgICAgICAgICAgICBwcm90ZWN0
ZWRSVENQcm92aWRlci0+Y2FsbE9uUlRDTmV0d29ya1RocmVhZChbcHJvdGVjdGVkUlRDUHJvdmlk
ZXIsIGlkZW50aWZpZXJdIHsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRSVENQcm92aWRlci0+
Y2xvc2VTb2NrZXQoaWRlbnRpZmllcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxpYldlYlJUQ05ldHdvcms6OlNpZ25hbENsb3NlKGlk
ZW50aWZpZXIsIC0xKSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBud19s
aXN0ZW5lcl9zdGF0ZV9jYW5jZWxsZWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0pLmdldCgpKTsKKworICAgIG53X2xpc3RlbmVyX3NldF9uZXdfY29ubmVjdGlvbl9oYW5k
bGVyKG1fbndMaXN0ZW5lci5nZXQoKSwgbWFrZUJsb2NrUHRyKFtwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldKG53X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKSB7CisgICAgICAgIExvY2tl
ciBsb2NrZXIgeyBwcm90ZWN0ZWRUaGlzLT5tX253Q29ubmVjdGlvbnNMb2NrIH07CisgICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5tX2lzQ2xvc2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGF1dG8gcmVtb3RlQWRkcmVzcyA9IHNvY2tldEFkZHJlc3NGcm9tSW5jb21pbmdDb25u
ZWN0aW9uKGNvbm5lY3Rpb24pOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX253Q29ubmVjdGlv
bnMuc2V0KHJlbW90ZUFkZHJlc3MsIGNvbm5lY3Rpb24pOworICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5zZXR1cE5XQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZW1vdGVBZGRyZXNzKTsKKyAgICB9KS5n
ZXQoKSk7CisKKyAgICBud19saXN0ZW5lcl9zdGFydChtX253TGlzdGVuZXIuZ2V0KCkpOworfQor
Cit2b2lkIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjbG9zZSgpCit7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IG1fbndDb25uZWN0aW9uc0xvY2sgfTsKKyAgICBtX2lzQ2xvc2Vk
ID0gdHJ1ZTsKKworICAgIG53X2xpc3RlbmVyX2NhbmNlbChtX253TGlzdGVuZXIuZ2V0KCkpOwor
ICAgIG1fbndMaXN0ZW5lciA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIG53Q29ubmVjdGlv
biA6IG1fbndDb25uZWN0aW9ucy52YWx1ZXMoKSkKKyAgICAgICAgbndfY29ubmVjdGlvbl9jYW5j
ZWwobndDb25uZWN0aW9uLmdldCgpKTsKKyAgICBtX253Q29ubmVjdGlvbnMuY2xlYXIoKTsKK30K
Kwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2V0T3B0aW9uKGlu
dCwgaW50KQoreworICAgIC8vIEZJWE1FOiBWYWxpZGF0ZSB0aGlzIGlzIG5vdCBuZWVkZWQuCit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzVURQRGF0YShSZXRhaW5QdHI8bndfY29ubmVj
dGlvbl90PiYmIG53Q29ubmVjdGlvbiwgRnVuY3Rpb248dm9pZChjb25zdCB1aW50OF90Kiwgc2l6
ZV90KT4mJiBwcm9jZXNzRGF0YSkKK3sKKyAgICBhdXRvIG53Q29ubmVjdGlvblJlZmVyZW5jZSA9
IG53Q29ubmVjdGlvbi5nZXQoKTsKKyAgICBud19jb25uZWN0aW9uX3JlY2VpdmUobndDb25uZWN0
aW9uUmVmZXJlbmNlLCAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIG1h
a2VCbG9ja1B0cihbbndDb25uZWN0aW9uID0gV1RGTW92ZShud0Nvbm5lY3Rpb24pLCBwcm9jZXNz
RGF0YSA9IFdURk1vdmUocHJvY2Vzc0RhdGEpXShkaXNwYXRjaF9kYXRhX3QgY29udGVudCwgbndf
Y29udGVudF9jb250ZXh0X3QgY29udGV4dCwgYm9vbCBpc0NvbXBsZXRlLCBud19lcnJvcl90IGVy
cm9yKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGNvbnRlbnQpIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoX2RhdGFfYXBwbHkoY29udGVudCwgbWFrZUJsb2NrUHRyKFsmXShkaXNwYXRjaF9kYXRhX3Qs
IHNpemVfdCwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzRGF0YShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSkuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpc0NvbXBsZXRlICYmIGNvbnRleHQgJiYgbndfY29udGVudF9j
b250ZXh0X2dldF9pc19maW5hbChjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJO
ZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9ucyBmYWlsZWQgcHJvY2Vzc2luZyBVRFAg
ZGF0YSB3aXRoIGVycm9yICVkIiwgZXJyb3IgPyBud19lcnJvcl9nZXRfZXJyb3JfY29kZShlcnJv
cikgOiAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwcm9jZXNz
VURQRGF0YShXVEZNb3ZlKG53Q29ubmVjdGlvbiksIFdURk1vdmUocHJvY2Vzc0RhdGEpKTsKKyAg
ICB9KS5nZXQoKSk7Cit9CisKK1JldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IE5ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zOjpjcmVhdGVOV0Nvbm5lY3Rpb24oY29uc3QgcnRjOjpT
b2NrZXRBZGRyZXNzJiByZW1vdGVBZGRyZXNzKQoreworICAgIGF1dG8gcGFyYW1ldGVycyA9IGFk
b3B0TlMobndfcGFyYW1ldGVyc19jcmVhdGVfc2VjdXJlX3VkcChOV19QQVJBTUVURVJTX0RJU0FC
TEVfUFJPVE9DT0wsIE5XX1BBUkFNRVRFUlNfREVGQVVMVF9DT05GSUdVUkFUSU9OKSk7CisgICAg
eworICAgICAgICBhdXRvIGhvc3RBZGRyZXNzID0gbV9hZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5n
KCk7CisgICAgICAgIGlmIChtX2FkZHJlc3MuaXBhZGRyKCkuSXNOaWwoKSkKKyAgICAgICAgICAg
IGhvc3RBZGRyZXNzID0gbV9hZGRyZXNzLmhvc3RuYW1lKCk7CisgICAgICAgIGF1dG8gbG9jYWxF
bmRwb2ludCA9IGFkb3B0TlMobndfZW5kcG9pbnRfY3JlYXRlX2hvc3QoaG9zdEFkZHJlc3MuY19z
dHIoKSwgU3RyaW5nOjpudW1iZXIobV9hZGRyZXNzLnBvcnQoKSkudXRmOCgpLmRhdGEoKSkpOwor
ICAgICAgICBud19wYXJhbWV0ZXJzX3NldF9sb2NhbF9lbmRwb2ludChwYXJhbWV0ZXJzLmdldCgp
LCBsb2NhbEVuZHBvaW50LmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHByb3Rv
Y29sU3RhY2sgPSBhZG9wdE5TKG53X3BhcmFtZXRlcnNfY29weV9kZWZhdWx0X3Byb3RvY29sX3N0
YWNrKHBhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhu
d19wcm90b2NvbF9zdGFja19jb3B5X2ludGVybmV0X3Byb3RvY29sKHByb3RvY29sU3RhY2suZ2V0
KCkpKTsKKyAgICAgICAgbndfaXBfb3B0aW9uc19zZXRfdmVyc2lvbihvcHRpb25zLmdldCgpLCBy
ZW1vdGVBZGRyZXNzLmZhbWlseSgpID09IEFGX0lORVQgPyBud19pcF92ZXJzaW9uXzQgOiBud19p
cF92ZXJzaW9uXzYpOworICAgIH0KKworICAgIGF1dG8gcmVtb3RlSG9zdEFkZHJlc3MgPSByZW1v
dGVBZGRyZXNzLmlwYWRkcigpLlRvU3RyaW5nKCk7CisgICAgaWYgKHJlbW90ZUFkZHJlc3MuaXBh
ZGRyKCkuSXNOaWwoKSkKKyAgICAgICAgcmVtb3RlSG9zdEFkZHJlc3MgPSByZW1vdGVBZGRyZXNz
Lmhvc3RuYW1lKCk7CisgICAgYXV0byBob3N0ID0gYWRvcHROUyhud19lbmRwb2ludF9jcmVhdGVf
aG9zdChyZW1vdGVIb3N0QWRkcmVzcy5jX3N0cigpLCBTdHJpbmc6Om51bWJlcihyZW1vdGVBZGRy
ZXNzLnBvcnQoKSkudXRmOCgpLmRhdGEoKSkpOworICAgIGF1dG8gbndDb25uZWN0aW9uID0gYWRv
cHROUyhud19jb25uZWN0aW9uX2NyZWF0ZShob3N0LmdldCgpLCBwYXJhbWV0ZXJzLmdldCgpKSk7
CisKKyAgICBzZXR1cE5XQ29ubmVjdGlvbihud0Nvbm5lY3Rpb24uZ2V0KCksIHJlbW90ZUFkZHJl
c3MpOworICAgIHJldHVybiBud0Nvbm5lY3Rpb247Cit9CisKK3ZvaWQgTmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hQ29ubmVjdGlvbnM6OnNldHVwTldDb25uZWN0aW9uKG53X2Nvbm5lY3Rpb25fdCBu
d0Nvbm5lY3Rpb24sIGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgcmVtb3RlQWRkcmVzcykKK3sK
KyAgICBud19jb25uZWN0aW9uX3NldF9xdWV1ZShud0Nvbm5lY3Rpb24sIHVkcFNvY2tldFF1ZXVl
KCkpOworCisgICAgcHJvY2Vzc1VEUERhdGEobndDb25uZWN0aW9uLCBbaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllciwgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbi5jb3B5UmVmKCksIGlwID0gcmVt
b3RlQWRkcmVzcy5pcGFkZHIoKSwgcG9ydCA9IHJlbW90ZUFkZHJlc3MucG9ydCgpXShhdXRvKiBt
ZXNzYWdlLCBhdXRvIHNpemUpIG11dGFibGUgeworICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2Ug
ZGF0YShtZXNzYWdlLCBzaXplKTsKKyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
TGliV2ViUlRDTmV0d29yazo6U2lnbmFsUmVhZFBhY2tldCB7IGlkZW50aWZpZXIsIGRhdGEsIFJU
Q05ldHdvcms6OklQQWRkcmVzcyhpcCksIHBvcnQsIHJ0Yzo6VGltZU1pbGxpcygpICogMTAwMCB9
LCAwKTsKKyAgICB9KTsKKworICAgIG53X2Nvbm5lY3Rpb25fc3RhcnQobndDb25uZWN0aW9uKTsK
K30KKwordm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2VuZFRvKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3Mm
IHJlbW90ZUFkZHJlc3MsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBud19jb25uZWN0aW9uX3QgbndDb25uZWN0aW9uOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IG1fbndDb25uZWN0aW9uc0xvY2sgfTsKKyAgICAgICAgbndDb25uZWN0aW9uID0gbV9u
d0Nvbm5lY3Rpb25zLmVuc3VyZShyZW1vdGVBZGRyZXNzLCBbdGhpcywgJnJlbW90ZUFkZHJlc3Nd
IHsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVOV0Nvbm5lY3Rpb24ocmVtb3RlQWRkcmVzcyk7
CisgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBhdXRvIHZh
bHVlID0gYWRvcHROUyhkaXNwYXRjaF9kYXRhX2NyZWF0ZShkYXRhLCBzaXplLCBudWxscHRyLCBE
SVNQQVRDSF9EQVRBX0RFU1RSVUNUT1JfREVGQVVMVCkpOworICAgIG53X2Nvbm5lY3Rpb25fc2Vu
ZChud0Nvbm5lY3Rpb24sIHZhbHVlLmdldCgpLCBOV19DT05ORUNUSU9OX0RFRkFVTFRfTUVTU0FH
RV9DT05URVhULCB0cnVlLCBtYWtlQmxvY2tQdHIoW2lkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIs
IGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb24uY29weVJlZigpLCBvcHRpb25zXShfTnVsbGFibGUg
bndfZXJyb3JfdCkgeworICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpMaWJXZWJS
VENOZXR3b3JrOjpTaWduYWxTZW50UGFja2V0IHsgaWRlbnRpZmllciwgb3B0aW9ucy5wYWNrZXRf
aWQsIHJ0Yzo6VGltZU1pbGxpcygpIH0sIDApOworICAgIH0pLmdldCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCAwNjRlZWI1NzhlZjcxZjQ1MjhkN2ZiYmM1
OGRiMzYwNDYzMTI5OWNiLi42OTMxYjQ2MjhlMDM2YTU2YWMyYjVmYjdkYTQ4ZDcxMjFjOWZkYmEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01NCw3ICs1NCw4IEBAIE5ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9OZXR3b3JrUlRDTW9uaXRvci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3
b3JrUlRDUHJvdmlkZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29s
dmVyLmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZlckNvY29hLmNw
cAotTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENTb2NrZXRDb2NvYS5tbQorTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbQorTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbQogCiBHUFVQcm9jZXNzL0VudHJ5
UG9pbnQvQ29jb2EvWFBDU2VydmljZS9HUFVTZXJ2aWNlRW50cnlQb2ludC5tbQogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGRlZGM0OGI0ZDc4
NTNhOTE3NDE1OTczMzVjM2MyYTAxYzVkYzFiMS4uMDlmNjAxNzYzMDk5YTQyZGU3Yjc0NTY4MTVk
NTRlYjljZTg2NzgyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zNzA1LDggKzM3MDUsOCBAQAogCQk0MTAzRkJBMjIwNjFCREI4MDBD
MkVBRjggLyogTmV0d29ya0xvYWRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ldHdvcmtMb2FkQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxMDQ4MkNCMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ05ldHdvcmsuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA0ODJDQzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0
d29yay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENOZXR3b3JrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMEJBMTM5MjU3MTM1RjIwMDJFMkY4QSAvKiBO
ZXR3b3JrUlRDU29ja2V0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrUlRD
U29ja2V0Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMEJBMTNBMjU3
MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDU29ja2V0Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmV0d29ya1JUQ1NvY2tldENvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQx
MEJBMTM5MjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrUlRDVENQU29ja2V0Q29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMEJBMTNBMjU3MTM1RjIwMDJFMkY4QSAvKiBOZXR3b3Jr
UlRDVENQU29ja2V0Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1JUQ1RDUFNvY2tldENv
Y29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMTE0MzYzMjBGNjc3QjEwMDI2
RjkxMiAvKiBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5qZWN0VXNlclNjcmlwdEltbWVkaWF0ZWx5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxMTIyM0I3MjYwMjE1MkIwMEIwQTBCNiAvKiBSVENEYXRhQ2hh
bm5lbFJlbW90ZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gUlRDRGF0YUNoYW5uZWxSZW1vdGVN
YW5hZ2VyLm1lc3NhZ2VzLmluOyBwYXRoID0gTmV0d29yay93ZWJydGMvUlRDRGF0YUNoYW5uZWxS
ZW1vdGVNYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTEyMjNCQjI2MDI0RTgwMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4MzksNiArMzgzOSw4IEBACiAJCTQxREM0
NTk5MUUzREJCMjQwMEIxMUY1MSAvKiBMaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGliV2ViUlRDU29ja2V0Q2xpZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEQzQ1OUExRTNEQkIyNDAwQjExRjUxIC8q
IExpYldlYlJUQ1NvY2tldENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMaWJXZWJSVENTb2NrZXRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFEQzQ1QTAxRTNEQzUzQzAwQjExRjUxIC8qIFdlYlJUQ1Jlc29sdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlJUQ1Jlc29sdmVyLmNwcDsgcGF0aCA9IE5l
dHdvcmsvd2VicnRjL1dlYlJUQ1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFERDcyQTYyNjdCOEMzMDAwQTkwQzcxIC8qIE5ldHdvcmtSVENVRFBTb2NrZXRDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFERDcyQTcyNjdCOEMzMTAwQTkwQzcxIC8q
IE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDVURQ
U29ja2V0Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3QzYyM0I2
Mzk3ODAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1Byb3h5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExp
YldlYlJUQ0NvZGVjc1Byb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTBB
N0M3MjNCNjM5NzkwMDU2MTA2MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBMaWJXZWJSVENDb2RlY3NQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFFMEE3QzgyM0I2Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1By
b3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzUHJveHkubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDA2LDggKzg0MDgsMTAgQEAKIAkJCQk0MTEy
QjU0ODFGOUZEM0FDMDBFNjc4NzUgLyogTmV0d29ya1JUQ1Jlc29sdmVyLmggKi8sCiAJCQkJNDEx
MkI1NDcxRjlGRDNBQjAwRTY3OTg2IC8qIE5ldHdvcmtSVENSZXNvbHZlckNvY29hLmNwcCAqLywK
IAkJCQk0MTEyQjU0ODFGOUZEM0FDMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2Eu
aCAqLywKLQkJCQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JUQ1NvY2tldENv
Y29hLmggKi8sCi0JCQkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5ldHdvcmtSVENTb2Nr
ZXRDb2NvYS5tbSAqLywKKwkJCQk0MTBCQTEzQTI1NzEzNUYyMDAyRTJGOEEgLyogTmV0d29ya1JU
Q1RDUFNvY2tldENvY29hLmggKi8sCisJCQkJNDEwQkExMzkyNTcxMzVGMjAwMkUyRjhBIC8qIE5l
dHdvcmtSVENUQ1BTb2NrZXRDb2NvYS5tbSAqLywKKwkJCQk0MURENzJBNzI2N0I4QzMxMDBBOTBD
NzEgLyogTmV0d29ya1JUQ1VEUFNvY2tldENvY29hLmggKi8sCisJCQkJNDFERDcyQTYyNjdCOEMz
MDAwQTkwQzcxIC8qIE5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5tbSAqLywKIAkJCQk0MTEyMjNC
QzI2MDI0RTgxMDBCMEEwQjYgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkuY3Bw
ICovLAogCQkJCTQxMTIyM0JCMjYwMjRFODAwMEIwQTBCNiAvKiBSVENEYXRhQ2hhbm5lbFJlbW90
ZU1hbmFnZXJQcm94eS5oICovLAogCQkJCTQxMTIyM0JEMjYwMjRFODEwMEIwQTBCNiAvKiBSVENE
YXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRG
YWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9MaWJX
ZWJSVENTb2NrZXRGYWN0b3J5LmNwcAppbmRleCBkODk3YmIzZjI4NDY2NWM2YzAzMDQ4NTc5NTQy
YmJjOTNiYTEzZDJiLi41MzIzM2JlZjllZjFiOWZiMmE1ZTM3MjY3ZDJiY2U0MWZlMzQ4NGIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvTGliV2Vi
UlRDU29ja2V0RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvd2VicnRjL0xpYldlYlJUQ1NvY2tldEZhY3RvcnkuY3BwCkBAIC01NCw3ICs1NCw4IEBAIHZv
aWQgTGliV2ViUlRDU29ja2V0RmFjdG9yeTo6c2V0Q29ubmVjdGlvbihSZWZQdHI8SVBDOjpDb25u
ZWN0aW9uPiYmIGNvbm5lY3Rpb24pCiAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1JUQ1Byb3Zp
ZGVyOjpTZXRQbGF0Zm9ybVNvY2tldHNFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViUlRDUGxhdGZvcm1Tb2NrZXRzRW5hYmxlZCgpKSwgMCk7CisgICAg
bV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUlRDUHJvdmlkZXI6OlNldFBsYXRm
b3JtVENQU29ja2V0c0VuYWJsZWQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJSVENQbGF0Zm9ybVRDUFNvY2tldHNFbmFibGVkKCkpLCAwKTsKKyAgICBtX2Nvbm5l
Y3Rpb24tPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtSVENQcm92aWRlcjo6U2V0UGxhdGZvcm1VRFBT
b2NrZXRzRW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YlJUQ1BsYXRmb3JtVURQU29ja2V0c0VuYWJsZWQoKSksIDApOwogCiAgICAgd2hpbGUgKCFtX3Bl
bmRpbmdNZXNzYWdlVGFza3MuaXNFbXB0eSgpKQogICAgICAgICBtX3BlbmRpbmdNZXNzYWdlVGFz
a3MudGFrZUZpcnN0KCkoKm1fY29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjY2NzhiMjNlN2E5NDZlOWVk
YTJhMDBhNWFkNTZmNzgxOTFlZjYzYi4uNzhiYTA1OWUxOGZkNjhmOTUyZTk0ZWIwMGIzOTk0YTA0
ODdlNDIyZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA2LTI5ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgV2ViUlRDIFVE
UCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5ODU5
MDQ1PgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICAqIHBs
YXRmb3JtL2lvcy1zaW11bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgIE1hcmsg
dGVzdCBhcyBmYWlsZWQsIGFzIHRoaXMgdGVzdCBpcyB1c2luZyB1bnN1cHBvcnRlZCBBUEkgKHRy
YW5zcG9ydCkuCisKIDIwMjEtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hIHNob3VsZCBzdXBw
b3J0IG90aGVyIHNhbXBsZSByYXRlIHRoYW4gNDgwMDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nCmluZGV4IGI3MmIyNTBjYjJmMWI4YmZmYjdlMWEzZmU0ODRmNTMwOTE2ZjcyMGEuLjdhNzJl
MGFlNzFhOTM2MTI0YzBkMzkzMWMwOWIxOTVhNGU2MGRhZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgV2ViUlRDIFVEUCBz
b2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjcyMTAKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxz
b24uCisKKyAgICAgICAgUmViYXNpbmcgdGVzdHMgYXMgdGltaW5nIGNoYW5nZXMgYSBiaXQuCisg
ICAgICAgIFRoaXMgYWxpZ25zIHdpdGggQ2hyb21lIGFuZCBGaXJlZm94IGJlaGF2aW9yLgorCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRpYS1jYWxsLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb21pc2VzLWNhbGwt
ZXhwZWN0ZWQudHh0OgorCiAyMDIxLTA2LTI1ICBaaXJhbiBTdW4gIDx6c3VuQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW2Nzcy1ncmlkXSBDb25zaWRlciBjb250YWluZXIncyB3cml0aW5nIG1vZGUg
dG8gZ2V0IGdyaWQgaXRlbSdzIG1hcmdpbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbm8tbWVkaWEtY2FsbC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9u
by1tZWRpYS1jYWxsLWV4cGVjdGVkLnR4dAppbmRleCBjYWU3NWJmN2ZmMzM4OWJiNTQ5N2E0N2Nl
NGM4YzYwZGMxZTA3Y2RjLi5hZDIxODkzMWQ3NTVlMWY1NjQwMTAzYzMzODAyOGRlMWIwZmQ0MTlk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnJ0Yy9uby1tZWRpYS1jYWxsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9uby1tZWRpYS1jYWxsLWV4cGVjdGVk
LnR4dApAQCAtMiw1ICsyLDUgQEAKIFBBU1MgQ2FuIHNldCB1cCBhIGJhc2ljIFdlYlJUQyBjYWxs
IHdpdGggbm8gZGF0YS4KIGljZUNvbm5lY3Rpb25TdGF0ZSBpbmZvCiAKLUZpcnN0OiBjb21wbGV0
ZWQKK0ZpcnN0OiBjb25uZWN0ZWQKIFNlY29uZDogY29ubmVjdGVkCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9wcm9taXNlcy1j
YWxsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvd2VicnRjL3Byb21pc2VzLWNhbGwtZXhwZWN0ZWQudHh0CmluZGV4IGYyNGFhYTBiMDZl
MmYxYmVjOTQyZjcxN2IxYzQ4OTMyZTdjMWRlY2IuLmYzMWZhODRiOTJhYjUzZTJlZWY5ZjZkMzJi
YTcyYTBhNGVhYzQ3NDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb21pc2VzLWNhbGwtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb21pc2Vz
LWNhbGwtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQAogUEFTUyBDYW4gc2V0IHVwIGEgYmFz
aWMgV2ViUlRDIGNhbGwgd2l0aCBvbmx5IGRhdGEgdXNpbmcgcHJvbWlzZXMuCiBpY2VDb25uZWN0
aW9uU3RhdGUgaW5mbwogCi1GaXJzdDogY29tcGxldGVkCitGaXJzdDogY29ubmVjdGVkCiBTZWNv
bmQ6IGNvbm5lY3RlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVs
YXRvci13azIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11
bGF0b3Itd2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggM2ExNTc5ZGUxM2E5MTJkOGFmNWRmNDZi
NTNlYWM1NmE0NjhlNzUyZC4uYjg2MmJhNTg3OTBhODJjMjQwNWZhOWY0ZGNlMTQ4ZDIzODA3ZWNl
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci13azIvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdr
Mi9UZXN0RXhwZWN0YXRpb25zCkBAIC05MSw2ICs5MSw3IEBAIHdlYmtpdC5vcmcvYi8yMTQ3MzAg
WyBEZWJ1ZyBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1NjdHBU
cmFuCiB3ZWJraXQub3JnL2IvMjE0NjYxIFsgRGVidWcgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENTY3RwVHJhbnNwb3J0LWV2ZW50cy5odG1sIFsgU2tpcCBdCiB3
ZWJraXQub3JnL2IvMjE0NzMwIFsgRGVidWcgXSB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCBb
IFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24tY2FuZGlkYXRlLWluLXNkcC5odHRwcy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KK2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb3RvY29sL2NyeXB0by1zdWl0
ZS5odHRwcy5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMTQzNTggZmFzdC9zY3Jv
bGxpbmcvaW9zL3Byb2dyYW1tYXRpYy1zY3JvbGwtd2hpbGUtem9vbWVkLmh0bWwgWyBQYXNzIEZh
aWx1cmUgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432687</attachid>
            <date>2021-07-01 06:54:26 -0700</date>
            <delta_ts>2021-07-01 08:04:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210701155424.patch</filename>
            <type>text/plain</type>
            <size>2190</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzdhZmM5OTVhYzAyYjc5
MDlhNjI5ZDI5YzMxYmQ0MzQ0NzBmNzEuLjZmYTdlYTExMTgzNWU4YzZlZTZlYzM3ZmNmMjIxMzI5
MDQzOGM3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDctMDEgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBXZWJS
VEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Nzk4NTkwNDU+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcG9zdCBjb21taXQgZml4LgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOgor
ICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmNvbnN0cnVjdERl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNz
Pjo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICBObyBuZWVkIHRvIHNldCBhbGwgZGVsZXRlZCB2
YWx1ZSBzbG90cywgaW5zdGVhZCBqdXN0IHJlbHkgb24gc2NvcGUgaWQgYmVpbmcgZXF1YWwgdG8g
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluLgorCiAyMDIxLTA2LTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgV2ViUlRDIFVEUCBz
b2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2EuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCmluZGV4
IDdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1YjA1MTNjNDcuLmU2OTg4ZWYzYWY5ODU2
OGViYzU2Mzk2YzZjYWYxMjE2NzgwMmU2MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5o
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIKICNp
bmNsdWRlIDxOZXR3b3JrL05ldHdvcmsuaD4KKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogCkBAIC00Niw4ICs0Nyw4IEBA
IHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0QWRkcmVzcz4gewogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz4gOiBHZW5lcmlj
SGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+IHsKICAgICBzdGF0aWMgcnRjOjpTb2NrZXRB
ZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJldHVybiBydGM6OlNvY2tldEFkZHJlc3MgeyB9OyB9Ci0g
ICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKHJ0Yzo6U29ja2V0QWRkcmVzcyYg
YWRkcmVzcykgeyBhZGRyZXNzID0geyB9OyBhZGRyZXNzLlNldFNjb3BlSUQoLTEpOyB9Ci0gICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgcnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRy
ZXNzKSB7IHJldHVybiBhZGRyZXNzLnNjb3BlX2lkKCkgPT0gLTE7IH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUocnRjOjpTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7IGFk
ZHJlc3MuU2V0U2NvcGVJRChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsgfQorICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IHJ0Yzo6U29ja2V0QWRkcmVzcyYgYWRk
cmVzcykgeyByZXR1cm4gYWRkcmVzcy5zY29wZV9pZCgpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWluKCk7IH0KIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432691</attachid>
            <date>2021-07-01 08:04:40 -0700</date>
            <delta_ts>2021-07-01 08:58:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227210-20210701170439.patch</filename>
            <type>text/plain</type>
            <size>3744</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzdhZmM5OTVhYzAyYjc5
MDlhNjI5ZDI5YzMxYmQ0MzQ0NzBmNzEuLmQ2YWJlNGJhZWFjZjY3YWRiOGNlMzJkZmIwNWM4Zjk1
N2ZjZThhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDctMDEgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBXZWJS
VEMgVURQIHNvY2tldCBoYW5kbGluZyB0byBOVyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIxMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Nzk4NTkwNDU+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcG9zdCBjb21taXQgZml4LgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5oOgor
ICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRkcmVzcz46OmNvbnN0cnVjdERl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNz
Pjo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICBObyBuZWVkIHRvIHNldCBhbGwgZGVsZXRlZCB2
YWx1ZSBzbG90cywgaW5zdGVhZCBqdXN0IHJlbHkgb24gc2NvcGUgaWQgYmVpbmcgZXF1YWwgdG8g
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluLgorICAgICAgICBBbHNvIGVuc3VyZSB3ZSBkbyBub3Qg
YWRkIGFuIGVtcHR5L2RlbGV0ZWQgYWRkcmVzcyB0byB0aGUgbWFwLgorCiAyMDIxLTA2LTI4ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIE1pZ3Jh
dGUgV2ViUlRDIFVEUCBzb2NrZXQgaGFuZGxpbmcgdG8gTlcgQVBJCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29jb2Eu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYS5oCmluZGV4IDdhNzUxMjliZmRlMmU2N2IxZmIyZmIwMDU4OWU5ZjI1YjA1MTNjNDcu
LmU2OTg4ZWYzYWY5ODU2OGViYzU2Mzk2YzZjYWYxMjE2NzgwMmU2MzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2Nv
YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENV
RFBTb2NrZXRDb2NvYS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJOZXR3b3JrUlRD
UHJvdmlkZXIuaCIKICNpbmNsdWRlIDxOZXR3b3JrL05ldHdvcmsuaD4KKyNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogCkBA
IC00Niw4ICs0Nyw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPHJ0Yzo6U29ja2V0
QWRkcmVzcz4gewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPHJ0Yzo6U29ja2V0QWRk
cmVzcz4gOiBHZW5lcmljSGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+IHsKICAgICBzdGF0
aWMgcnRjOjpTb2NrZXRBZGRyZXNzIGVtcHR5VmFsdWUoKSB7IHJldHVybiBydGM6OlNvY2tldEFk
ZHJlc3MgeyB9OyB9Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKHJ0Yzo6
U29ja2V0QWRkcmVzcyYgYWRkcmVzcykgeyBhZGRyZXNzID0geyB9OyBhZGRyZXNzLlNldFNjb3Bl
SUQoLTEpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgcnRjOjpTb2Nr
ZXRBZGRyZXNzJiBhZGRyZXNzKSB7IHJldHVybiBhZGRyZXNzLnNjb3BlX2lkKCkgPT0gLTE7IH0K
KyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUocnRjOjpTb2NrZXRBZGRyZXNz
JiBhZGRyZXNzKSB7IGFkZHJlc3MuU2V0U2NvcGVJRChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IHJ0Yzo6U29j
a2V0QWRkcmVzcyYgYWRkcmVzcykgeyByZXR1cm4gYWRkcmVzcy5zY29wZV9pZCgpID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2NrZXRDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENVRFBTb2Nr
ZXRDb2NvYS5tbQppbmRleCA3YWJiNjk2NTljNzkyZWY0MGZlYzA1ZDkzYzJjZGI5NjBhYjAxMDdk
Li5kYzUwMzQzNTA5YzllY2VhNmFmOWEzZTU3ZWJlZDNkMmM5ZDhhNDkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JU
Q1VEUFNvY2tldENvY29hLm1tCkBAIC0xNjgsNiArMTY4LDggQEAgTmV0d29ya1JUQ1VEUFNvY2tl
dENvY29hQ29ubmVjdGlvbnM6Ok5ldHdvcmtSVENVRFBTb2NrZXRDb2NvYUNvbm5lY3Rpb25zKFdl
YkNvcmUKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIHJlbW90ZUFkZHJlc3Mg
PSBzb2NrZXRBZGRyZXNzRnJvbUluY29taW5nQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKKyAgICAg
ICAgQVNTRVJUKHJlbW90ZUFkZHJlc3MgIT0gSGFzaFRyYWl0czxydGM6OlNvY2tldEFkZHJlc3M+
OjplbXB0eVZhbHVlKCkgJiYgIUhhc2hUcmFpdHM8cnRjOjpTb2NrZXRBZGRyZXNzPjo6aXNEZWxl
dGVkVmFsdWUocmVtb3RlQWRkcmVzcykpOworCiAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fbndD
b25uZWN0aW9ucy5zZXQocmVtb3RlQWRkcmVzcywgY29ubmVjdGlvbik7CiAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPnNldHVwTldDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlbW90ZUFkZHJlc3MpOwog
ICAgIH0pLmdldCgpKTsKQEAgLTI1Myw2ICsyNTUsMTEgQEAgdm9pZCBOZXR3b3JrUlRDVURQU29j
a2V0Q29jb2FDb25uZWN0aW9uczo6c2V0dXBOV0Nvbm5lY3Rpb24obndfY29ubmVjdGlvbl90IG53
Q28KIAogdm9pZCBOZXR3b3JrUlRDVURQU29ja2V0Q29jb2FDb25uZWN0aW9uczo6c2VuZFRvKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBjb25zdCBydGM6OlNvY2tldEFkZHJlc3Mm
IHJlbW90ZUFkZHJlc3MsIGNvbnN0IHJ0Yzo6UGFja2V0T3B0aW9ucyYgb3B0aW9ucykKIHsKKyAg
ICBib29sIGlzSW5Db3JyZWN0VmFsdWUgPSAocmVtb3RlQWRkcmVzcyA9PSBIYXNoVHJhaXRzPHJ0
Yzo6U29ja2V0QWRkcmVzcz46OmVtcHR5VmFsdWUoKSkgfHwgSGFzaFRyYWl0czxydGM6OlNvY2tl
dEFkZHJlc3M+Ojppc0RlbGV0ZWRWYWx1ZShyZW1vdGVBZGRyZXNzKTsKKyAgICBBU1NFUlQoIWlz
SW5Db3JyZWN0VmFsdWUpOworICAgIGlmIChpc0luQ29ycmVjdFZhbHVlKQorICAgICAgICByZXR1
cm47CisKICAgICBud19jb25uZWN0aW9uX3QgbndDb25uZWN0aW9uOwogICAgIHsKICAgICAgICAg
TG9ja2VyIGxvY2tlciB7IG1fbndDb25uZWN0aW9uc0xvY2sgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>