<?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>230503</bug_id>
          
          <creation_ts>2021-09-20 13:01:06 -0700</creation_ts>
          <short_desc>Reduce use of makeRefPtr() and use RefPtr { } directly</short_desc>
          <delta_ts>2021-09-20 14:46:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1795223</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-09-20 13:01:06 -0700</bug_when>
    <thetext>Reduce use of makeRefPtr() and use RefPtr { } directly instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795228</commentid>
    <comment_count>1</comment_count>
      <attachid>438716</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-09-20 13:08:26 -0700</bug_when>
    <thetext>Created attachment 438716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795265</commentid>
    <comment_count>2</comment_count>
      <attachid>438716</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-09-20 13:53:14 -0700</bug_when>
    <thetext>Comment on attachment 438716
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795297</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-20 14:45:48 -0700</bug_when>
    <thetext>Committed r282784 (241919@main): &lt;https://commits.webkit.org/241919@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438716.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795298</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-20 14:46:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/83325372&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438716</attachid>
            <date>2021-09-20 13:08:26 -0700</date>
            <delta_ts>2021-09-20 14:45:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230503-20210920130826.patch</filename>
            <type>text/plain</type>
            <size>148731</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA3Zjg5M2Y5N2IyMmI2NmQzOTU1MTgy
YWFmYWJlNjBiYjI1YWMxMTcuLjQ0NzdhMWMwYzVkMDYyMjg3ZWVlMjhlY2U2ODYxNDFkOTNkODdk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDktMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2UgdXNlIG9mIG1ha2VSZWZQdHIoKSBhbmQgdXNl
IFJlZlB0ciB7IH0gZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0Nyb3NzVGhyZWFkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVh
dGVDcm9zc1RocmVhZFRhc2spOgorCiAyMDIxLTA5LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgU3RvcCB1c2luZyBtYWtlUmVmKCp0aGlzKSAvIG1ha2VSZWZQ
dHIodGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4OGNhNjZlMDI2ZmNmMjkyMGRhMTY2NTBjZjAxYzNlOGY2
YmEzMDEzLi43NzU5NzU3NmU3YjJhNTQ5NWRmM2YwNjFhODUwODFhNzczNjhmOTJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQxIEBACisyMDIxLTA5LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIHVzZSBvZiBtYWtlUmVmUHRyKCkgYW5kIHVzZSBS
ZWZQdHIgeyB9IGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzA1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnJlYWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZDo6d3JpdGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6cmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OmdldFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xpcGJvYXJkOjp3cml0ZSk6CisgICAgICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQv
Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpnZXRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OmNvbGxlY3REYXRhRm9yV3JpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpp
bnZva2VDb21wbGV0aW9uSGFuZGxlcik6CisgICAgICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9h
cmQvQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZTo6Z2V0VHlwZSk6CisgICAgICAg
ICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpmaW5kTm9kZVN0YXJ0aW5nQXRQYXRoQ29tcG9uZW50SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwSGlnaGxpZ2h0U3RvcmFn
ZTo6YXR0ZW1wdFRvUmVzdG9yZUhpZ2hsaWdodEFuZFNjcm9sbCk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
c0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzZXNzaW9uL01lZGlhU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNl
c3Npb246Ok1lZGlhU2Vzc2lvbik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNlc3Npb24vTWVk
aWFTZXNzaW9uQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9u
Q29vcmRpbmF0b3I6OmpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ29vcmRp
bmF0b3I6OnNlZWtUbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25Db29yZGluYXRv
cjo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25Db29yZGluYXRvcjo6cGF1
c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ29vcmRpbmF0b3I6OnNldFRyYWNr
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc2Vzc2lvbi9NZWRpYVNlc3Npb25Db29yZGluYXRv
clByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQ
cml2YXRlOjpzZXRMb2dnZXIpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhY2tQcml2YXRlVmVjdG9yKToK
KyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpzaGlwcGluZ0FkZHJlc3NDaGFuZ2VkKToK
KyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6U3BlZWNoUmVjb2duaXRpb24pOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayk6CisgICAgICAgICogTW9kdWxl
cy93ZWJ4ci9XZWJYUklucHV0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSSW5w
dXRTb3VyY2U6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUklucHV0U291cmNlOjpw
b2xsRXZlbnRzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSSW5wdXRTb3VyY2VBcnJh
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUklucHV0U291cmNlQXJyYXk6OnVwZGF0ZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViWFJTZXNzaW9uOjpkaWRDb21wbGV0ZVNodXRkb3duKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElz
b2xhdGVkVHJlZTo6dHJlZUZvclBhZ2VJRCk6CisgICAgICAgICogYW5pbWF0aW9uL0RvY3VtZW50
VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRpbWVs
aW5lc0NvbnRyb2xsZXI6OmNhY2hlQ3VycmVudFRpbWUpOgorICAgICAgICAqIGFuaW1hdGlvbi9L
ZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0
VGFyZ2V0KToKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6ZmluaXNoTm90aWZpY2F0aW9uU3RlcHMpOgorICAgICAg
ICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZPckNoaWxkTm9k
ZXNGb3JJbnNlcnRpb24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmltcGxpY2l0Q2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92
ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVw
YXJlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpjb21tYW5kKToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpvZmZzZXRMZWZ0Rm9yQmluZGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6b2Zmc2V0VG9wRm9yQmluZGluZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6Zm9jdXMpOgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KToKKyAgICAgICAgKiBk
b20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbkZv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKiBkb20vSWRsZURlYWRsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklkbGVEZWFkbGluZTo6dGltZVJlbWFpbmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJZGxlRGVhZGxpbmU6OmRpZFRpbWVvdXQgY29uc3QpOgorICAgICAgICAqIGRvbS9NdXRhdGlv
bk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRpc2Nv
bm5lY3QpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6Zmlyc3ROb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VCb3VuZGFy
eVBvaW50KToKKyAgICAgICAgKiBkb20vU2xvdEFzc2lnbm1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2xvdEFzc2lnbm1lbnQ6OnJlbW92ZVNsb3RFbGVtZW50QnlOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNsb3RBc3NpZ25tZW50OjpkaWRDaGFuZ2VTbG90KToKKyAgICAgICAgKiBkb20v
bWVzc2FnZXBvcnRzL1dvcmtlck1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjp0YWtlQWxsTWVz
c2FnZXNGb3JQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2VQb3J0Q2hhbm5l
bFByb3ZpZGVyOjpjaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eSk6CisgICAgICAgICogZWRpdGlu
Zy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJ
Zk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9y
c1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6
cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6Omhp
Z2hlc3RFbWJlZGRpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRhaW5zTm9uRWRpdGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3Rp
bmdJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1l
cmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dElmSWRlbnRpY2FsKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMp
OgorICAgICAgICAqIGVkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNoYW5nZUxpc3RUeXBlQ29tbWFuZDo6bGlzdENvbnZlcnNpb25UeXBlKToKKyAg
ICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBZnRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2Vz
dG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRh
YlNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRleHROb2Rl
Rm9yUmViYWxhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xlYW51cEFmdGVyRGVsZXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAg
ICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNUYWJsZVJvd0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0SW5TcGVjaWFsRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0SW5TcGVjaWFsRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXplUG9zaXRpb25EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNwZWNp
YWxDYXNlQlJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RFZGl0YWJsZVBvc2l0aW9u
SW5Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92
ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0
eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHlsZUxv
c3MpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2Vu
ZXJhbERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpt
ZXJnZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlUHJldmlvdXNseVNlbGVjdGVkRW1wdHlUYWJsZVJvd3MpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50QmxvY2tzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVu
aW5nKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
aG91bGRJbnNlcnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VT
ZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2Vs
ZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRl
cmVkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9u
T3JkZXJlZExpc3RTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpub3RpZnlUZXh0RnJvbUNvbnRyb2xzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6d2lsbEFwcGx5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVy
RGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZv
clNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29uZmly
bU9yQ2FuY2VsQ29tcG9zaXRpb25BbmROb3RpZnlDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVRl
eHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5RWRpdGluZ1N0
eWxlVG9Cb2R5RWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRmlyc3RNYXJr
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBl
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjplZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRl
c2NlbmRpbmdPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1dGVz
QXRTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5
U2VsZWN0ZWQpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmZpeE9ycGhhbmVkTGlzdENoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhcGgp
OgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TmVzdGVkTGlzdENvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zZXJ0TmVzdGVkTGlzdENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAq
IGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlVW5yZW5kZXJlZE5vZGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVyY2hhbmdl
Tm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3Vs
ZE1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1v
dmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptYWtlSW5zZXJ0ZWRDb250ZW50Um91bmRUcmlw
cGFibGVXaXRoSFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjptb3ZlTm9kZU91dE9mQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRF
bmRPZkluc2VydGVkQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVTdHls
ZVNwYW5zQmVmb3JlSW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2lu
Z0lubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9B
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxk
UGVyZm9ybVNtYXJ0UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNpbmdsZUNoaWxkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZWVwZXN0U2luZ2xlQ2hp
bGRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNl
cnRBc0xpc3RJdGVtcyk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNlZEVsZW1lbnQpOgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdy
YXBocyk6CisgICAgICAgIChXZWJDb3JlOjp0b2tlbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
aXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVPYnNlcnZhdGlvblVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFj
ZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmRvY3VtZW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0
aW9uOjpjcmVhdGVFbGVtZW50Rm9ySW1hZ2VPdmVybGF5KToKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50
UmVhZGVyOjpyZWFkRGF0YUJ1ZmZlcik6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVudEluRG9j
dW1lbnQpOgorICAgICAgICAqIHBhZ2UvVmlzdWFsVmlld3BvcnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzdWFsVmlld3BvcnQ6OnVwZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8v
Y29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
YW1wbGVEYXRhU291cmNlOjpzZXR1cENvbnZlcnRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24ubW06
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb246OmVucXVldWVT
YW1wbGUpOgorCiAyMDIxLTA5LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBpT1MgZGVidWcgYnVpbGQgZml4IGFmdGVyIHIyODI3NTUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Dcm9zc1RocmVhZFRhc2suaCBiL1NvdXJjZS9XVEYv
d3RmL0Nyb3NzVGhyZWFkVGFzay5oCmluZGV4IGY4NWE4YzlhNmFkYjYyNjFiMWMwMGVkOGUyZWVk
MzRkMTA3YzJkMWQuLjViMTlhY2IwYjAzMjY2NjVjNjZhZThkYjVlOWY0ZWQ0YTRjZGQ1YTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0Nyb3NzVGhyZWFkVGFzay5oCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgY2FsbE1lbWJl
ckZ1bmN0aW9uRm9yQ3Jvc3NUaHJlYWRUYXNrKEMqIG9iamVjdCwgTUYgZnVuY3Rpb24sIEFyZ3NU
dXBsZSYmIGFyCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX2Jhc2Vfb2Y8VGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlLCBUPjo6dmFsdWUsIGludD46
OnR5cGUgPSAwLCB0eXBlbmFtZS4uLiBQYXJhbWV0ZXJzLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiBDcm9zc1RocmVhZFRhc2sgY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKFQmIGNhbGxlZSwgdm9pZCAo
VDo6Km1ldGhvZCkoUGFyYW1ldGVycy4uLiksIGNvbnN0IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRz
KQogewotICAgIHJldHVybiBDcm9zc1RocmVhZFRhc2soW2NhbGxlZSA9IG1ha2VSZWZQdHIoJmNh
bGxlZSksIG1ldGhvZCwgYXJndW1lbnRzID0gc3RkOjptYWtlX3R1cGxlKGNyb3NzVGhyZWFkQ29w
eShhcmd1bWVudHMpLi4uKV0oKSBtdXRhYmxlIHsKKyAgICByZXR1cm4gQ3Jvc3NUaHJlYWRUYXNr
KFtjYWxsZWUgPSBSZWZQdHIgeyAmY2FsbGVlIH0sIG1ldGhvZCwgYXJndW1lbnRzID0gc3RkOjpt
YWtlX3R1cGxlKGNyb3NzVGhyZWFkQ29weShhcmd1bWVudHMpLi4uKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgY2FsbE1lbWJlckZ1bmN0aW9uRm9yQ3Jvc3NUaHJlYWRUYXNrKGNhbGxlZS5nZXQoKSwg
bWV0aG9kLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZC5jcHAKaW5kZXggMTA1
NGU5NzY3YmQ0YmRlNzVlMjcyOGJiZGFjYWJjZDU2ZjM2NmMzZS4uZWI1NzA4OTYxNWI2ZjkyNTRm
NjcxMDQ5MzVhODcwZTlhYTViMDM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogQ2xpcGJvYXJkOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKIAogdm9pZCBDbGlwYm9hcmQ6OnJlYWRUZXh0KFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSkKIHsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0aGlzLT5mcmFtZSgpKTsK
KyAgICBSZWZQdHIgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpIHsKICAg
ICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdEFsbG93ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsK
QEAgLTEzNyw4ICsxMzcsOCBAQCB2b2lkIENsaXBib2FyZDo6cmVhZFRleHQoUmVmPERlZmVycmVk
UHJvbWlzZT4mJiBwcm9taXNlKQogCiB2b2lkIENsaXBib2FyZDo6d3JpdGVUZXh0KGNvbnN0IFN0
cmluZyYgZGF0YSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewotICAgIGF1dG8g
ZnJhbWUgPSBtYWtlUmVmUHRyKHRoaXMtPmZyYW1lKCkpOwotICAgIGF1dG8gZG9jdW1lbnQgPSBt
YWtlUmVmUHRyKGZyYW1lID8gZnJhbWUtPmRvY3VtZW50KCkgOiBudWxscHRyKTsKKyAgICBSZWZQ
dHIgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIFJlZlB0ciBkb2N1bWVudCA9IGZyYW1lID8g
ZnJhbWUtPmRvY3VtZW50KCkgOiBudWxscHRyOwogICAgIGlmICghZG9jdW1lbnQgfHwgIXNob3Vs
ZFByb2NlZWRXaXRoQ2xpcGJvYXJkV3JpdGUoKmZyYW1lKSkgewogICAgICAgICBwcm9taXNlLT5y
ZWplY3QoTm90QWxsb3dlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTU4LDcgKzE1OCw3
IEBAIHZvaWQgQ2xpcGJvYXJkOjpyZWFkKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
ICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdEFsbG93ZWRFcnJvcik7CiAgICAgfTsKIAotICAg
IGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHRoaXMtPmZyYW1lKCkpOworICAgIFJlZlB0ciBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkgewogICAgICAgICByZWplY3RQcm9t
aXNlQW5kQ2xlYXJBY3RpdmVTZXNzaW9uKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE5Niw3ICsx
OTYsNyBAQCB2b2lkIENsaXBib2FyZDo6Z2V0VHlwZShDbGlwYm9hcmRJdGVtJiBpdGVtLCBjb25z
dCBTdHJpbmcmIHR5cGUsIFJlZjxEZWZlcnJlZFBybwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUoKSk7CisgICAgUmVmUHRy
IGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIG1fYWN0
aXZlU2Vzc2lvbiA9IHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdEFs
bG93ZWRFcnJvcik7CkBAIC0yNzEsNyArMjcxLDcgQEAgQ2xpcGJvYXJkOjpTZXNzaW9uSXNWYWxp
ZCBDbGlwYm9hcmQ6OnVwZGF0ZVNlc3Npb25WYWxpZGl0eSgpCiAKIHZvaWQgQ2xpcGJvYXJkOjp3
cml0ZShjb25zdCBWZWN0b3I8UmVmUHRyPENsaXBib2FyZEl0ZW0+PiYgaXRlbXMsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0
aGlzLT5mcmFtZSgpKTsKKyAgICBSZWZQdHIgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlm
ICghZnJhbWUgfHwgIXNob3VsZFByb2NlZWRXaXRoQ2xpcGJvYXJkV3JpdGUoKmZyYW1lKSkgewog
ICAgICAgICBwcm9taXNlLT5yZWplY3QoTm90QWxsb3dlZEVycm9yKTsKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAppbmRl
eCAxYTEyZTA5OTJhNzZjZmI0NDJmNWE4NmRjNjhmNGMxMzVjNDUzY2ZjLi44YzVlMzg1ZDcwMDMy
MDM1MjE0NmU1OTk2ZGFhNTE4YjMxYmNlNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJ
dGVtQmluZGluZ3NEYXRhU291cmNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENsaXBib2Fy
ZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OmdldFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8
RGVmZXJyZWRQcgogICAgIH0KIAogICAgIGF1dG8gaXRlbVByb21pc2UgPSBtX2l0ZW1Qcm9taXNl
c1ttYXRjaEluZGV4XS52YWx1ZTsKLSAgICBpdGVtUHJvbWlzZS0+d2hlblNldHRsZWQoW2l0ZW1Q
cm9taXNlLCBwcm9taXNlID0gbWFrZVJlZlB0cihwcm9taXNlLmdldCgpKSwgdHlwZV0gKCkgbXV0
YWJsZSB7CisgICAgaXRlbVByb21pc2UtPndoZW5TZXR0bGVkKFtpdGVtUHJvbWlzZSwgcHJvbWlz
ZSA9IFdURk1vdmUocHJvbWlzZSksIHR5cGVdICgpIG11dGFibGUgewogICAgICAgICBpZiAoaXRl
bVByb21pc2UtPnN0YXR1cygpICE9IERPTVByb21pc2U6OlN0YXR1czo6RnVsZmlsbGVkKSB7CiAg
ICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoQWJvcnRFcnJvcik7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlOjpjb2xsZWN0RGF0YUZvcldyaXRpbmcoQ2xpcGJvYXJkJiBkZXN0aW5hdGkKICAgICAgICAg
fSk7CiAKICAgICAgICAgYXV0byBwcm9taXNlID0gdHlwZUFuZEl0ZW0udmFsdWU7Ci0gICAgICAg
IHByb21pc2UtPndoZW5TZXR0bGVkKFt0aGlzLCBwcm90ZWN0ZWRJdGVtID0gbWFrZVJlZlB0ciht
X2l0ZW0pLCBkZXN0aW5hdGlvbiA9IG1fd3JpdGluZ0Rlc3RpbmF0aW9uLCBwcm9taXNlLCB0eXBl
LCB3ZWFrSXRlbVR5cGVMb2FkZXIgPSBtYWtlV2Vha1B0cihpdGVtVHlwZUxvYWRlci5wdHIoKSld
ICgpIG11dGFibGUgeworICAgICAgICBwcm9taXNlLT53aGVuU2V0dGxlZChbdGhpcywgcHJvdGVj
dGVkSXRlbSA9IFJlZiB7IG1faXRlbSB9LCBkZXN0aW5hdGlvbiA9IG1fd3JpdGluZ0Rlc3RpbmF0
aW9uLCBwcm9taXNlLCB0eXBlLCB3ZWFrSXRlbVR5cGVMb2FkZXIgPSBtYWtlV2Vha1B0cihpdGVt
VHlwZUxvYWRlci5wdHIoKSldICgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrSXRl
bVR5cGVMb2FkZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0xNTIsNyArMTUyLDcg
QEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpjb2xsZWN0RGF0YUZvcldy
aXRpbmcoQ2xpcGJvYXJkJiBkZXN0aW5hdGkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8gY2xpcGJvYXJkID0gbWFrZVJlZlB0cihkZXN0
aW5hdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBSZWZQdHIgY2xpcGJvYXJkID0gZGVzdGluYXRp
b24uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIWNsaXBib2FyZCkgewogICAgICAgICAgICAgICAg
IGl0ZW1UeXBlTG9hZGVyLT5kaWRGYWlsVG9SZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZTo6Y29sbGVjdERhdGFGb3JXcml0aW5nKENsaXBib2FyZCYgZGVzdGluYXRpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoYXV0byBi
bG9iID0gbWFrZVJlZlB0cihKU0Jsb2I6OnRvV3JhcHBlZChyZXN1bHQuZ2V0T2JqZWN0KCktPnZt
KCksIHJlc3VsdC5nZXRPYmplY3QoKSkpKQorICAgICAgICAgICAgaWYgKFJlZlB0ciBibG9iID0g
SlNCbG9iOjp0b1dyYXBwZWQocmVzdWx0LmdldE9iamVjdCgpLT52bSgpLCByZXN1bHQuZ2V0T2Jq
ZWN0KCkpKQogICAgICAgICAgICAgICAgIGl0ZW1UeXBlTG9hZGVyLT5kaWRSZXNvbHZlVG9CbG9i
KCpjbGlwYm9hcmQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmxvYi5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpdGVtVHlwZUxvYWRlci0+
ZGlkRmFpbFRvUmVzb2x2ZSgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRl
bUJpbmRpbmdzRGF0YVNvdXJjZTo6aW52b2tlQ29tcGxldGlvbkhhbmRsZXIoKQogCiAgICAgYXV0
byBjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9jb21wbGV0aW9uSGFuZGxlciwg
eyB9KTsKICAgICBhdXRvIGl0ZW1UeXBlTG9hZGVycyA9IHN0ZDo6ZXhjaGFuZ2UobV9pdGVtVHlw
ZUxvYWRlcnMsIHsgfSk7Ci0gICAgYXV0byBjbGlwYm9hcmQgPSBtYWtlUmVmUHRyKG1fd3JpdGlu
Z0Rlc3RpbmF0aW9uLmdldCgpKTsKKyAgICBSZWZQdHIgY2xpcGJvYXJkID0gbV93cml0aW5nRGVz
dGluYXRpb24uZ2V0KCk7CiAgICAgbV93cml0aW5nRGVzdGluYXRpb24gPSBudWxscHRyOwogCiAg
ICAgYXV0byBkb2N1bWVudCA9IGRvY3VtZW50RnJvbUNsaXBib2FyZChjbGlwYm9hcmQuZ2V0KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHAK
aW5kZXggMWViYmEzZWU5YjljNTU3MmQwMGQ3MDlkN2JlYmIxNWYwNzI0ZTVmMS4uMzdiMWY3NGQ4
MGE1OGExNTRjZmI4YjYzNWE3Y2EzMTQ5ZTYwZjUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlw
Ym9hcmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuY3BwCkBAIC00OSw3ICs0OSw3IEBAIFZlY3Rv
cjxTdHJpbmc+IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZTo6dHlwZXMoKSBjb25z
dAogCiB2b2lkIENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZTo6Z2V0VHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKLSAgICBp
ZiAoYXV0byBjbGlwYm9hcmQgPSBtYWtlUmVmUHRyKG1faXRlbS5jbGlwYm9hcmQoKSkpCisgICAg
aWYgKFJlZlB0ciBjbGlwYm9hcmQgPSBtX2l0ZW0uY2xpcGJvYXJkKCkpCiAgICAgICAgIGNsaXBi
b2FyZC0+Z2V0VHlwZShtX2l0ZW0sIHR5cGUsIFdURk1vdmUocHJvbWlzZSkpOwogICAgIGVsc2UK
ICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdEFsbG93ZWRFcnJvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3Bw
CmluZGV4IGJiNTY5YTIxYzAzNGYzZjU0NDgyMDlmNjM4YzFiMzY4ZmM1NjM0NzguLmFmNjhkNWI0
MDkxZDM4ZjFlYjQ1YmY5MDUxZTZjNWQ3MjI5YzZlZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwCkBAIC03
MSw3ICs3MSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8UmVmUHRyPE5vZGU+LCBzaXplX3Q+IGZpbmRO
b2RlU3RhcnRpbmdBdFBhdGhDb21wb25lbnRJbmRleChjb25zCiAgICAgaWYgKGluaXRpYWxJbmRl
eFRvRm9sbG93ID49IHBhdGguc2l6ZSgpKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBpbml0
aWFsSW5kZXhUb0ZvbGxvdyB9OwogCi0gICAgYXV0byBjdXJyZW50Tm9kZSA9IG1ha2VSZWZQdHIo
aW5pdGlhbE5vZGUpOworICAgIFJlZlB0ciBjdXJyZW50Tm9kZSA9ICZpbml0aWFsTm9kZTsKICAg
ICBzaXplX3QgY3VycmVudFBhdGhJbmRleCA9IGluaXRpYWxJbmRleFRvRm9sbG93OwogICAgIGZv
ciAoOyBjdXJyZW50UGF0aEluZGV4IDwgcGF0aC5zaXplKCk7ICsrY3VycmVudFBhdGhJbmRleCkg
ewogICAgICAgICBhdXRvJiBjb21wb25lbnQgPSBwYXRoW2N1cnJlbnRQYXRoSW5kZXhdOwpAQCAt
MTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmluZE5vZGUoY29uc3QgQXBwSGln
aGxpZ2h0UmFuZ2VEYXRhOjpOb2RlUGF0aCYgcGF0aCwgRG9jdW1lCiAgICAgICAgIGlmIChjb21w
b25lbnQuaWRlbnRpZmllci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBhdXRvIGVsZW1lbnRXaXRoSWRlbnRpZmllciA9IG1ha2VSZWZQdHIoZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoY29tcG9uZW50LmlkZW50aWZpZXIpKTsKKyAgICAgICAgUmVmUHRyIGVsZW1l
bnRXaXRoSWRlbnRpZmllciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbXBvbmVudC5pZGVu
dGlmaWVyKTsKICAgICAgICAgaWYgKCFlbGVtZW50V2l0aElkZW50aWZpZXIgfHwgZWxlbWVudFdp
dGhJZGVudGlmaWVyLT5ub2RlTmFtZSgpICE9IGNvbXBvbmVudC5ub2RlTmFtZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBBcHBIaWdobGlnaHRTdG9y
YWdlOjphdHRlbXB0VG9SZXN0b3JlSGlnaGxpZ2h0QW5kU2Nyb2xsKEFwcEhpZ2hsaWdodFJhbmdl
RGEKICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBhdXRvIHN0cm9uZ0RvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LmdldCgpKTsKKyAg
ICBSZWZQdHIgc3Ryb25nRG9jdW1lbnQgPSBtX2RvY3VtZW50LmdldCgpOwogICAgIAogICAgIGF1
dG8gcmFuZ2UgPSBmaW5kUmFuZ2UoaGlnaGxpZ2h0LCAqc3Ryb25nRG9jdW1lbnQpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCmluZGV4IDFhNjViZGQ4NjJlZmUzZDAzZWI3ZGQ4NzQzNzMzYzk4ZmY1N2FhZmUuLjBiNzU1
Yzg4N2I4MGFmYjYwMzFiZTg5MTMyZGQwMmIwMDUyYjViY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTM5MCw3ICsz
OTAsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRP
ckFkZChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVgogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QmIGV4ZWNT
dGF0ZSwgSURCS2V5UmFuZ2UqIGtleVJhbmdlKQogewogICAgIHJldHVybiBkb0RlbGV0ZShleGVj
U3RhdGUsIFtrZXlSYW5nZV0oKSB7Ci0gICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGtleVJhbmdl
KTsKKyAgICAgICAgcmV0dXJuIFJlZlB0ciB7IGtleVJhbmdlIH07CiAgICAgfSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRy
b2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFD
b250cm9sc0hvc3QuY3BwCmluZGV4IDMxNjU5Njk2MDA0YWUwMjdmODJiNDAzZGY1ZTNlNzNkOTYx
NjFmMTkuLmQwOWNiN2RhNWJjODZmNzllMzNmZTQ5MTlmNDk3ZDBkZGFkN2RmNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9z
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmNwcApAQCAtNjAwLDcgKzYwMCw3IEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6
OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHZ0dEN1ZSA9IGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGFwdGVyTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbSht
YWtlUmVmUHRyKHZ0dEN1ZSksIHZ0dEN1ZS50ZXh0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXB0ZXJNZW51SXRlbXMuYXBwZW5kKGNyZWF0ZU1lbnVJdGVtKFJlZlB0ciB7ICZ2dHRD
dWUgfSwgdnR0Q3VlLnRleHQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lv
bi9NZWRpYVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24v
TWVkaWFTZXNzaW9uLmNwcAppbmRleCAwNWIzNmMzOTBjNzY0ZTMzYTNmZmNhOWRiZDliNjlhNTEy
NTBmMGQxLi5jN2Q3NDhjZDNlZGJiMmRhNDM4MWU1NmYxYjI1MjYyMDM4OGZkNjRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9NZWRpYVNlc3Npb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL01lZGlhU2Vzc2lvbi5j
cHAKQEAgLTE0OSw3ICsxNDksNyBAQCBNZWRpYVNlc3Npb246Ok1lZGlhU2Vzc2lvbihOYXZpZ2F0
b3ImIG5hdmlnYXRvcikKICAgICAsIG1fY29vcmRpbmF0b3IoTWVkaWFTZXNzaW9uQ29vcmRpbmF0
b3I6OmNyZWF0ZShuYXZpZ2F0b3Iuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICNlbmRpZgog
ewotICAgIG1fbG9nZ2VyID0gbWFrZVJlZlB0cihEb2N1bWVudDo6c2hhcmVkTG9nZ2VyKCkpOwor
ICAgIG1fbG9nZ2VyID0gJkRvY3VtZW50OjpzaGFyZWRMb2dnZXIoKTsKICAgICBtX2xvZ0lkZW50
aWZpZXIgPSBuZXh0TG9nSWRlbnRpZmllcigpOwogCiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05f
Q09PUkRJTkFUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vz
c2lvbi9NZWRpYVNlc3Npb25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc2Vzc2lvbi9NZWRpYVNlc3Npb25Db29yZGluYXRvci5jcHAKaW5kZXggMTAxZDBiZjhi
NDBjZjliZTNiYmQwYzYzODkwODdhNWVjZTZmOGQzMi4uNmQ3MzRkNTRiYWIzYmRiZGY5ZDZiZWYz
YjA2ODA1OTc1ZWRjOTJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNlc3Npb24vTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzZXNzaW9uL01lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yLmNwcApAQCAtOTks
NyArOTksNyBAQCB2b2lkIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yOjpqb2luKERPTVByb21pc2VE
ZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCiAgICAgfQogICAgIEFTU0VSVChtX3ByaXZhdGVDb29y
ZGluYXRvciwgIldlIG11c3QgYmUgaW4gV2FpdGluZyBzdGF0ZSBpZiBubyBwcml2YXRlIGNvb3Jk
aW5hdG9yIGlzIHNldCIpOwogCi0gICAgbV9wcml2YXRlQ29vcmRpbmF0b3ItPmpvaW4oW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKSwgaWRlbnRpZmllciwgcHJvbWlzZSA9IFdURk1v
dmUocHJvbWlzZSldIChzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4mJiBleGNlcHRpb24pIG11dGFi
bGUgeworICAgIG1fcHJpdmF0ZUNvb3JkaW5hdG9yLT5qb2luKFtwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgaWRlbnRpZmllciwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldIChzdGQ6
Om9wdGlvbmFsPEV4Y2VwdGlvbj4mJiBleGNlcHRpb24pIG11dGFibGUgewogICAgICAgICBpZiAo
IXByb3RlY3RlZFRoaXMtPm1fc2Vzc2lvbikgewogICAgICAgICAgICAgcHJvbWlzZS5yZWplY3Qo
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfSk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBNZWRpYVNlc3Npb25Db29yZGluYXRvcjo6c2Vla1RvKGRv
dWJsZSB0aW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm8KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fcHJpdmF0ZUNvb3JkaW5hdG9yLT5zZWVrVG8odGltZSwgW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKSwgaWRlbnRpZmllciwgcHJvbWlzZSA9IFdURk1v
dmUocHJvbWlzZSldIChzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4mJiBleGNlcHRpb24pIG11dGFi
bGUgeworICAgIG1fcHJpdmF0ZUNvb3JkaW5hdG9yLT5zZWVrVG8odGltZSwgW3Byb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9LCBpZGVudGlmaWVyLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNl
KV0gKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmIGV4Y2VwdGlvbikgbXV0YWJsZSB7CiAgICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9zZXNzaW9uKSB7CiAgICAgICAgICAgICBwcm9taXNl
LnJlamVjdChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9KTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yOjpw
bGF5KERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX3ByaXZhdGVDb29yZGluYXRvci0+cGxheShbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWZQdHIoKnRoaXMpLCBpZGVudGlmaWVyLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNl
KV0gKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmIGV4Y2VwdGlvbikgbXV0YWJsZSB7CisgICAg
bV9wcml2YXRlQ29vcmRpbmF0b3ItPnBsYXkoW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBpZGVudGlmaWVyLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKHN0ZDo6b3B0aW9uYWw8
RXhjZXB0aW9uPiYmIGV4Y2VwdGlvbikgbXV0YWJsZSB7CiAgICAgICAgIGlmICghcHJvdGVjdGVk
VGhpcy0+bV9zZXNzaW9uKSB7CiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIyMiw3ICsy
MjIsNyBAQCB2b2lkIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yOjpwYXVzZShET01Qcm9taXNlRGVm
ZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9w
cml2YXRlQ29vcmRpbmF0b3ItPnBhdXNlKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cigqdGhp
cyksIGlkZW50aWZpZXIsIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoc3RkOjpvcHRpb25h
bDxFeGNlcHRpb24+JiYgZXhjZXB0aW9uKSBtdXRhYmxlIHsKKyAgICBtX3ByaXZhdGVDb29yZGlu
YXRvci0+cGF1c2UoW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpZGVudGlmaWVyLCBw
cm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmIGV4
Y2VwdGlvbikgbXV0YWJsZSB7CiAgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9zZXNzaW9u
KSB7CiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVF
cnJvciB9KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIE1l
ZGlhU2Vzc2lvbkNvb3JkaW5hdG9yOjpzZXRUcmFjayhjb25zdCBTdHJpbmcmIHRyYWNrLCBET01Q
cm9taXNlRGVmZXJyZWQ8dgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wcml2YXRl
Q29vcmRpbmF0b3ItPnNldFRyYWNrKHRyYWNrLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIo
KnRoaXMpLCBpZGVudGlmaWVyLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKHN0ZDo6b3B0
aW9uYWw8RXhjZXB0aW9uPiYmIGV4Y2VwdGlvbikgbXV0YWJsZSB7CisgICAgbV9wcml2YXRlQ29v
cmRpbmF0b3ItPnNldFRyYWNrKHRyYWNrLCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IGlkZW50aWZpZXIsIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoc3RkOjpvcHRpb25hbDxF
eGNlcHRpb24+JiYgZXhjZXB0aW9uKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCFwcm90ZWN0ZWRU
aGlzLT5tX3Nlc3Npb24pIHsKICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yIH0pOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vTWVkaWFTZXNzaW9uQ29vcmRpbmF0
b3JQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL01lZGlh
U2Vzc2lvbkNvb3JkaW5hdG9yUHJpdmF0ZS5jcHAKaW5kZXggZDgwMjRlMGU5NDNlOThlZWM5ZjJl
YTgyY2VlOWY4ZDJmNzI4ODMwYS4uOTRkNjZkZjcwYmUyOTM3MDJiZGNlZWE2YmU5YmVmNGQ3ZjVm
ZTdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vTWVk
aWFTZXNzaW9uQ29vcmRpbmF0b3JQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc2Vzc2lvbi9NZWRpYVNlc3Npb25Db29yZGluYXRvclByaXZhdGUuY3BwCkBAIC0z
NSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBNZWRpYVNlc3Npb25Db29y
ZGluYXRvclByaXZhdGU6OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwgY29uc3Qgdm9p
ZCogbG9nSWRlbnRpZmllcikKIHsKLSAgICBtX2xvZ2dlciA9IG1ha2VSZWZQdHIobG9nZ2VyKTsK
KyAgICBtX2xvZ2dlciA9ICZsb2dnZXI7CiAgICAgbV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRp
ZmllcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLmNwcAppbmRleCBjYTIwYTZlMWJjMGJmMTNhYzFhNDA3OWFmMTVkMzk1YTA0MjE2
ZjM2Li4zODE2OGVlNzVhZGIxZTY4MmQ5ZDk4NzM4OTE2ZDgwZGQ0MzI0NTdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcApAQCAt
NjYsNyArNjYsNyBAQCBSZWY8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBSZWY8TWVkaWFTdHJlYW1Qcml2YXRlPgogc3RhdGljIGlubGluZSBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciBjcmVhdGVUcmFja1ByaXZhdGVWZWN0b3IoY29uc3Qg
TWVkaWFTdHJlYW1UcmFja1ZlY3RvciYgdHJhY2tzKQogewogICAgIHJldHVybiBtYXAodHJhY2tz
LCBbXShhdXRvJiB0cmFjaykgewotICAgICAgICByZXR1cm4gbWFrZVJlZlB0cigmdHJhY2stPnBy
aXZhdGVUcmFjaygpKTsKKyAgICAgICAgcmV0dXJuIFJlZlB0ciB7ICZ0cmFjay0+cHJpdmF0ZVRy
YWNrKCkgfTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcAppbmRleCBiMWU5NTU1MzYyMjc4
MWU5NTJmYzYzNDM4OWU3ZGM4ZmY0NTBhOWUwLi5lNDRiMzFjMWU0YjA3OGIwMzMxOGM4MjE5NmIz
ZWVmODcwMzE4ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRy
ZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHN0ZDo6
b3B0aW9uYWw8UGF5bWVudFNoaXBwaW5nVHlwZT4gUGF5bWVudFJlcXVlc3Q6OnNoaXBwaW5nVHlw
ZSgpIGNvbnN0CiAKIHZvaWQgUGF5bWVudFJlcXVlc3Q6OnNoaXBwaW5nQWRkcmVzc0NoYW5nZWQo
UmVmPFBheW1lbnRBZGRyZXNzPiYmIHNoaXBwaW5nQWRkcmVzcykKIHsKLSAgICB3aGVuRGV0YWls
c1NldHRsZWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBzaGlwcGluZ0Fk
ZHJlc3MgPSBtYWtlUmVmUHRyKHNoaXBwaW5nQWRkcmVzcy5nZXQoKSldKCkgbXV0YWJsZSB7Cisg
ICAgd2hlbkRldGFpbHNTZXR0bGVkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fSwgc2hpcHBpbmdBZGRyZXNzID0gV1RGTW92ZShzaGlwcGluZ0FkZHJlc3MpXSgpIG11dGFibGUg
ewogICAgICAgICBtX3NoaXBwaW5nQWRkcmVzcyA9IFdURk1vdmUoc2hpcHBpbmdBZGRyZXNzKTsK
ICAgICAgICAgZGlzcGF0Y2hBbmRDaGVja1VwZGF0ZUV2ZW50KFBheW1lbnRSZXF1ZXN0VXBkYXRl
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2hpcHBpbmdhZGRyZXNzY2hhbmdlRXZlbnQpKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFJlY29nbml0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uLmNwcAppbmRleCAxNTg0YzE3OTVlYWIyODYzMGZiMDk2MDU5NWNhZDI2NWRkMzY4
ZmY1Li44MmZmZmU0N2ExMGQ2MjJlMWRiN2ViMGQ5YWIyYzU4MGUyZDcxYTBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwCkBA
IC01Miw3ICs1Miw3IEBAIFNwZWVjaFJlY29nbml0aW9uOjpTcGVlY2hSZWNvZ25pdGlvbihEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQpCiB7CiAgICAg
aWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpIHsKLSAgICAgICAgbV9jb25uZWN0aW9u
ID0gbWFrZVJlZlB0cihwYWdlLT5zcGVlY2hSZWNvZ25pdGlvbkNvbm5lY3Rpb24oKSk7CisgICAg
ICAgIG1fY29ubmVjdGlvbiA9ICZwYWdlLT5zcGVlY2hSZWNvZ25pdGlvbkNvbm5lY3Rpb24oKTsK
ICAgICAgICAgbV9jb25uZWN0aW9uLT5yZWdpc3RlckNsaWVudCgqdGhpcyk7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAppbmRl
eCA4MDE4OGRkMWQ5YTFiMmViYTNjZDlmNzcyMzY0YWU0YzdjMDcwOTk5Li5iMDFkOWU4NWNhZTgy
NWUwOWYwZjFiNGE3ZjkyMTNhZTk0YWExMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNjk4LDcgKzY5OCw3IEBAIHZvaWQgRGF0
YWJhc2U6OnJ1blRyYW5zYWN0aW9uKFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiYmIGNh
bGxiYWNrLCBSZWZQdHI8CiAKIHZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxs
YmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiB7Ci0gICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYW5zYWN0aW9uID0gbWFr
ZVJlZlB0cih0cmFuc2FjdGlvbildKCkgbXV0YWJsZSB7CisgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYW5zYWN0aW9uID0gUmVmUHRy
IHsgdHJhbnNhY3Rpb24gfV0oKSBtdXRhYmxlIHsKICAgICAgICAgbV9kb2N1bWVudC0+ZXZlbnRM
b29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0cmFuc2FjdGlvbiA9IFdU
Rk1vdmUodHJhbnNhY3Rpb24pXSB7CiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+cGVyZm9ybVBl
bmRpbmdDYWxsYmFjaygpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSSW5wdXRTb3VyY2UuY3BwCmluZGV4IDI2M2JiNTgyNmZkODNkM2UzYTg1
Y2JhNjMxN2JjZTkwYjM1YTczYTkuLjk5NTA1N2Q0NTE2YmY3NzlmOTI1ODc2ZDlmNjJkODY0ZDdi
ODc0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1
dFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0
U291cmNlLmNwcApAQCAtNjcsNyArNjcsNyBAQCBXZWJYUlNlc3Npb24qIFdlYlhSSW5wdXRTb3Vy
Y2U6OnNlc3Npb24oKQogCiB2b2lkIFdlYlhSSW5wdXRTb3VyY2U6OnVwZGF0ZShkb3VibGUgdGlt
ZXN0YW1wLCBjb25zdCBQbGF0Zm9ybVhSOjpEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2Um
IHNvdXJjZSkKIHsKLSAgICBhdXRvIHNlc3Npb24gPSBtYWtlUmVmUHRyKG1fc2Vzc2lvbi5nZXQo
KSk7CisgICAgUmVmUHRyIHNlc3Npb24gPSBtX3Nlc3Npb24uZ2V0KCk7CiAgICAgaWYgKCFzZXNz
aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwNiwxNCArMTA2LDE0IEBAIHZvaWQgV2ViWFJJ
bnB1dFNvdXJjZTo6ZGlzY29ubmVjdCgpCiAKIHZvaWQgV2ViWFJJbnB1dFNvdXJjZTo6cG9sbEV2
ZW50cyhWZWN0b3I8UmVmPFhSSW5wdXRTb3VyY2VFdmVudD4+JiBldmVudHMpCiB7Ci0gICAgYXV0
byBzZXNzaW9uID0gbWFrZVJlZlB0cihtX3Nlc3Npb24uZ2V0KCkpOworICAgIFJlZlB0ciBzZXNz
aW9uID0gbV9zZXNzaW9uLmdldCgpOwogICAgIGlmICghc2Vzc2lvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXV0byBjcmVhdGVFdmVudCA9IFt0aGlzLCBzZXNzaW9uXShjb25zdCBBdG9tU3Ry
aW5nJiBuYW1lKSAtPiBSZWY8WFJJbnB1dFNvdXJjZUV2ZW50PiB7CiAgICAgICAgIFhSSW5wdXRT
b3VyY2VFdmVudDo6SW5pdCBpbml0OwogICAgICAgICBpbml0LmZyYW1lID0gV2ViWFJGcmFtZTo6
Y3JlYXRlKCpzZXNzaW9uLCBXZWJYUkZyYW1lOjpJc0FuaW1hdGlvbkZyYW1lOjpObyk7Ci0gICAg
ICAgIGluaXQuaW5wdXRTb3VyY2UgPSBtYWtlUmVmUHRyKCp0aGlzKTsKKyAgICAgICAgaW5pdC5p
bnB1dFNvdXJjZSA9IFJlZlB0ciB7IHRoaXMgfTsKIAogICAgICAgICByZXR1cm4gWFJJbnB1dFNv
dXJjZUV2ZW50OjpjcmVhdGUobmFtZSwgaW5pdCk7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcAppbmRleCAy
NzMyMTk3MjM5MmYyMmVhN2M5ODJkN2E1ZmM2YmNkNTY3ODAxYjNmLi40YTZjZTI1NmNkOWY1Yjdm
YWUzMWI1NmVjOTc1MDlhYWZkZWYyMDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSSW5wdXRTb3VyY2VBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291cmNlQXJyYXkuY3BwCkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBXZWJYUklucHV0U291cmNlQXJyYXk6OnVwZGF0ZShkb3VibGUgdGltZXN0YW1wLCBj
b25zdCBJbnB1dFNvdXJjZUxpc3QmIGlucHUKICAgICAgICAgLy8gNS4gU2V0IGZyYW1l4oCZcyBh
Y3RpdmUgYm9vbGVhbiB0byBmYWxzZS4KIAogICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogaW5w
dXRFdmVudHMpIHsKLSAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrS2VlcGlu
Z09iamVjdEFsaXZlKG1fc2Vzc2lvbiwgVGFza1NvdXJjZTo6V2ViWFIsIFtzZXNzaW9uID0gbWFr
ZVJlZlB0cihtX3Nlc3Npb24pLCBldmVudCA9IFdURk1vdmUoZXZlbnQpXSgpIHsKKyAgICAgICAg
ICAgIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKG1fc2Vzc2lv
biwgVGFza1NvdXJjZTo6V2ViWFIsIFtzZXNzaW9uID0gUmVmIHsgbV9zZXNzaW9uIH0sIGV2ZW50
ID0gV1RGTW92ZShldmVudCldKCkgewogICAgICAgICAgICAgICAgIGV2ZW50LT5zZXRGcmFtZUFj
dGl2ZSh0cnVlKTsKICAgICAgICAgICAgICAgICBzZXNzaW9uLT5kaXNwYXRjaEV2ZW50KGV2ZW50
LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICAgICAgZXZlbnQtPnNldEZyYW1lQWN0aXZlKGZhbHNl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcAppbmRl
eCBmODA2YTQ1YzQ2ZmQ3ZWFmMDllMzU4NjA3ZTM4MzRjMmE5ZDQzYTY2Li40ZTdmZWRmNTFiNDM2
ZGM5YTBkNmIzZmFkNjZlZTM4NjMwNjgwMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBXZWJYUlNl
c3Npb246OmRpZENvbXBsZXRlU2h1dGRvd24oKQogCiAgICAgLy8gRnJvbSBodHRwczovL2ltbWVy
c2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNzaHV0LWRvd24tdGhlLXNlc3Npb24KICAgICAvLyA3
LiBRdWV1ZSBhIHRhc2sgdGhhdCBmaXJlcyBhbiBYUlNlc3Npb25FdmVudCBuYW1lZCBlbmQgb24g
c2Vzc2lvbi4KLSAgICBhdXRvIGV2ZW50ID0gWFJTZXNzaW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuZW5kRXZlbnQsIHsgbWFrZVJlZlB0cigqdGhpcykgfSk7CisgICAgYXV0byBldmVudCA9
IFhSU2Vzc2lvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZEV2ZW50LCB7IFJlZlB0ciB7
IHRoaXMgfSB9KTsKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3Vy
Y2U6OldlYlhSLCBXVEZNb3ZlKGV2ZW50KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGYzNTdhNjEyNTZjYjA4MmJlOTRiNTIy
MzEyMTgxZTU2OTYwNDZlMDAuLmRlNzQyM2ZjMGNhZjJkM2M0ZWY4NzgxZjc0ZjQ1NDkzNmUyNWE3
MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cApAQCAtMTY3MSw3ICsxNjcxLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhRXhw
YW5kZWRDaGFuZ2UoTm9kZSogbm9kZSkKICAgICAvLyBBbiBhcmlhLWV4cGFuZGVkIGNoYW5nZSBj
YW4gY2F1c2UgdHdvIG5vdGlmaWNhdGlvbnMgdG8gYmUgcG9zdGVkOgogICAgIC8vIFJvd0NvdW50
Q2hhbmdlZCBmb3IgdGhlIHRyZWUgb3IgdGFibGUgYW5jZXN0b3Igb2YgdGhpcyBvYmplY3QsIGFu
ZAogICAgIC8vIFJvd0V4cGFuZGVkL0NvbGxhcHNlZCBmb3IgdGhpcyBvYmplY3QuCi0gICAgaWYg
KGF1dG8gb2JqZWN0ID0gbWFrZVJlZlB0cihnZXQobm9kZSkpKSB7CisgICAgaWYgKFJlZlB0ciBv
YmplY3QgPSBnZXQobm9kZSkpIHsKICAgICAgICAgLy8gRmluZCB0aGUgYW5jZXN0b3IgdGhhdCBz
dXBwb3J0cyBSb3dDb3VudENoYW5nZWQgaWYgZXhpc3RzLgogICAgICAgICBhdXRvKiBhbmNlc3Rv
ciA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigqb2Jq
ZWN0LCBmYWxzZSwgW10gKGF1dG8mIGNhbmRpZGF0ZSkgewogICAgICAgICAgICAgcmV0dXJuIGNh
bmRpZGF0ZS5zdXBwb3J0c1Jvd0NvdW50Q2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAK
aW5kZXggODRhOTllYjVhMjdhYjk0Njk1ZTQ2MTgyNTllZWU4Mzc4MTE2ZDFjMS4uYzFkYmE0MTEy
YjY0NjE2OWZkYTI2YWI2NWU3YzY1NTBjODVlMDMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNw
cApAQCAtMTM0LDcgKzEzNCw3IEBAIFJlZlB0cjxBWElzb2xhdGVkVHJlZT4gQVhJc29sYXRlZFRy
ZWU6OnRyZWVGb3JQYWdlSUQoUGFnZUlkZW50aWZpZXIgcGFnZUlEKQogICAgIExvY2tlciBsb2Nr
ZXIgeyBzX2NhY2hlTG9jayB9OwogCiAgICAgaWYgKGF1dG8gdHJlZSA9IHRyZWVQYWdlQ2FjaGUo
KS5nZXQocGFnZUlEKSkKLSAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIodHJlZSk7CisgICAgICAg
IHJldHVybiBSZWZQdHIgeyB0cmVlIH07CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJv
bGxlci5jcHAKaW5kZXggYzZmMTNjYjdjNGRkMGI2OTA4YWZmNzY2YzM2NmJhZmE0N2UxMDAxYS4u
ZjkxNTBhMWFhYjcxYTdkOGUxOGQ2NWZhMGM3M2M0NmE1OGYzZWJmYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5j
cHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIERvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlcjo6
Y2FjaGVDdXJyZW50VGltZShSZWR1Y2VkUmVzb2x1dGlvblNlY29uZHMgbmV3QwogICAgIH0KICAg
ICAvLyBXZSBleHRlbnQgdGhlIGFzc29jaWF0ZWQgRG9jdW1lbnQncyBsaWZlY3ljbGUgdW50aWwg
dGhlIFZNIGJlY2FtZSBpZGxlIHNpbmNlIHRoZSBEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIK
ICAgICAvLyBpcyBvd25lZCBieSB0aGUgRG9jdW1lbnQuCi0gICAgbV9kb2N1bWVudC52bSgpLndo
ZW5JZGxlKFt0aGlzLCBwcm90ZWN0ZWREb2N1bWVudCA9IG1ha2VSZWZQdHIobV9kb2N1bWVudCld
KCkgeworICAgIG1fZG9jdW1lbnQudm0oKS53aGVuSWRsZShbdGhpcywgcHJvdGVjdGVkRG9jdW1l
bnQgPSBSZWYgeyBtX2RvY3VtZW50IH1dKCkgewogICAgICAgICBtX3dhaXRpbmdPblZNSWRsZSA9
IGZhbHNlOwogICAgICAgICBtYXliZUNsZWFyQ2FjaGVkQ3VycmVudFRpbWUoKTsKICAgICB9KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IGFkZjdk
ZTkxMGVkNDJmZjg1YTM4YTE2ZGMxNWE2ZjgyZDYzZmYzNDIuLmI0OTEwOGIwY2JjM2ExNTcyYTdl
MjlkNTk5YmIwM2Q3ODgyM2Y1ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZy
YW1lRWZmZWN0LmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6
c2V0VGFyZ2V0KFJlZlB0cjxFbGVtZW50PiYmIG5ld1RhcmdldCkKICAgICBhdXRvJiBwcmV2aW91
c1RhcmdldFN0eWxlYWJsZSA9IHRhcmdldFN0eWxlYWJsZSgpOwogICAgIFJlZlB0cjxFbGVtZW50
PiBwcm90ZWN0b3I7CiAgICAgaWYgKHByZXZpb3VzVGFyZ2V0U3R5bGVhYmxlKQotICAgICAgICBw
cm90ZWN0b3IgPSBtYWtlUmVmUHRyKHByZXZpb3VzVGFyZ2V0U3R5bGVhYmxlLT5lbGVtZW50KTsK
KyAgICAgICAgcHJvdGVjdG9yID0gJnByZXZpb3VzVGFyZ2V0U3R5bGVhYmxlLT5lbGVtZW50Owog
ICAgIG1fdGFyZ2V0ID0gV1RGTW92ZShuZXdUYXJnZXQpOwogICAgIGRpZENoYW5nZVRhcmdldFN0
eWxlYWJsZShwcmV2aW91c1RhcmdldFN0eWxlYWJsZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9XZWJBbmltYXRpb24uY3BwCmluZGV4IGY0NzlmZjU5OTkxZDFlN2M2ZWViYzhhZjQxNzM4
MjE5ZDczNThiMjkuLmZiNzM5MzU4OWRhMmU2OGQ0YWVmYWJkZTk2YWI1MzliNjIwNjE2YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCkBAIC05MDksNyArOTA5
LDcgQEAgdm9pZCBXZWJBbmltYXRpb246OmZpbmlzaE5vdGlmaWNhdGlvblN0ZXBzKCkKICAgICBl
bnF1ZXVlQW5pbWF0aW9uUGxheWJhY2tFdmVudChldmVudE5hbWVzKCkuZmluaXNoRXZlbnQsIGN1
cnJlbnRUaW1lKCksIG1fdGltZWxpbmUgPyBtX3RpbWVsaW5lLT5jdXJyZW50VGltZSgpIDogc3Rk
OjpudWxsb3B0KTsKIAogICAgIGlmIChpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7Ci0g
ICAgICAgIGlmIChhdXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoZG93bmNhc3Q8S2V5ZnJhbWVFZmZl
Y3Q+KCptX2VmZmVjdCkudGFyZ2V0KCkpKSB7CisgICAgICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0g
ZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkudGFyZ2V0KCkpIHsKICAgICAgICAg
ICAgIGlmIChhdXRvKiBwYWdlID0gdGFyZ2V0LT5kb2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hbmltYXRpb25EaWRGaW5pc2hGb3JFbGVt
ZW50KCp0YXJnZXQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9vYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmNwcAppbmRleCAzMTcwNGJhMjIzYzcxMzgzOGNhZDBkNzg1ZTk2ZTA5YmE0ZTMxN2VmLi5k
MDFiYmY1NDBiZGNjZmQ0YjI2ZTE4MTM0MzZhMmFkMTBlMTgwM2UyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKQEAgLTIyOCw3ICsyMjgsNyBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY29udmVydFJ1bnRpbWVPYmplY3RUb1ByaW1pdGl2ZSwgKEpTR2xvYmFs
T2JqZWN0KiBsZXhpYwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFJ1bnRp
bWVPYmplY3QqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCF0aGlzT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgIlJ1bnRpbWVPYmplY3RbU3ltYm9sLnRvUHJpbWl0aXZlXSBtZXRob2QgY2FsbGVk
IG9uIGluY29tcGF0aWJsZSB8dGhpc3wgdmFsdWUuIl9zKTsKLSAgICBhdXRvIGluc3RhbmNlID0g
bWFrZVJlZlB0cih0aGlzT2JqZWN0LT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOworICAgIFJlZlB0
ciBpbnN0YW5jZSA9IHRoaXNPYmplY3QtPmdldEludGVybmFsSW5zdGFuY2UoKTsKICAgICBpZiAo
IWluc3RhbmNlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93UnVudGltZU9i
amVjdEludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSkpOwogICAg
IGF1dG8gaGludCA9IHRvUHJlZmVycmVkUHJpbWl0aXZlVHlwZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAppbmRleCBhMzdkMDcxNDAzYTNlMDdiYTlkNmZlMTIyZmU2OGQ0ZWU4MDFmZDdjLi40OWViMDM1
NjBmNjM5NTdlODcxNjIzMDU3ZDQxZGZmYzNkZTMzYWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFp
bmVyTm9kZTo6cmVtb3ZlU2VsZk9yQ2hpbGROb2Rlc0Zvckluc2VydGlvbihOb2RlJiBjaGlsZCwK
IHsKICAgICBpZiAoIWlzPERvY3VtZW50RnJhZ21lbnQ+KGNoaWxkKSkgewogICAgICAgICBub2Rl
c0Zvckluc2VydGlvbi5hcHBlbmQoY2hpbGQpOwotICAgICAgICBhdXRvIG9sZFBhcmVudCA9IG1h
a2VSZWZQdHIoY2hpbGQucGFyZW50Tm9kZSgpKTsKKyAgICAgICAgUmVmUHRyIG9sZFBhcmVudCA9
IGNoaWxkLnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFvbGRQYXJlbnQpCiAgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgICAgICByZXR1cm4gb2xkUGFyZW50LT5yZW1vdmVDaGlsZChjaGls
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0NTY5ZjRmNjhhZTVkNTdkMjgxZjZjOTZi
MDc1YWM5MWVhM2MyNDlkLi42YmNiNzBiYzNlN2FjZjY4NjRmNGFkZGE2NzBiYmYzOWRmMTljYjkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE3MzQsNyArMTczNCw3IEBAIHZvaWQgRG9j
dW1lbnQ6OnVwZGF0ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQogICAg
IGlmICghbV91cGRhdGVUaXRsZVRhc2tTY2hlZHVsZWQpIHsKICAgICAgICAgZXZlbnRMb29wKCku
cXVldWVUYXNrKFRhc2tTb3VyY2U6OkRPTU1hbmlwdWxhdGlvbiwgW3Byb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCB0aGlzXSgpIG11dGFibGUgewogICAgICAgICAgICAgbV91cGRhdGVUaXRs
ZVRhc2tTY2hlZHVsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChhdXRvIGRvY3VtZW50TG9h
ZGVyID0gbWFrZVJlZlB0cihsb2FkZXIoKSkpCisgICAgICAgICAgICBpZiAoUmVmUHRyIGRvY3Vt
ZW50TG9hZGVyID0gbG9hZGVyKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNl
dFRpdGxlKG1fdGl0bGUpOwogICAgICAgICB9KTsKICAgICAgICAgbV91cGRhdGVUaXRsZVRhc2tT
Y2hlZHVsZWQgPSB0cnVlOwpAQCAtMzIxNyw3ICszMjE3LDcgQEAgdm9pZCBEb2N1bWVudDo6aW1w
bGljaXRDbG9zZSgpCiAKICAgICBtX3Byb2Nlc3NpbmdMb2FkRXZlbnQgPSBmYWxzZTsKIAotICAg
IGlmIChhdXRvIGZvbnRGYWNlU2V0ID0gbWFrZVJlZlB0cihmb250U2VsZWN0b3IoKS5mb250RmFj
ZVNldElmRXhpc3RzKCkpKQorICAgIGlmIChSZWZQdHIgZm9udEZhY2VTZXQgPSBmb250U2VsZWN0
b3IoKS5mb250RmFjZVNldElmRXhpc3RzKCkpCiAgICAgICAgIGZvbnRGYWNlU2V0LT5kb2N1bWVu
dERpZEZpbmlzaExvYWRpbmcoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShX
SU4pIHx8IFBMQVRGT1JNKEdUSykKQEAgLTM3MzksNyArMzczOSw3IEBAIHZvaWQgRG9jdW1lbnQ6
OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCkKICAgICBpZiAobV9nb3RvQW5jaG9yTmVl
ZGVkQWZ0ZXJTdHlsZXNoZWV0c0xvYWQpIHsKICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NpbmctdGhlLXdlYi5odG1sI3RyeS10by1zY3JvbGwt
dG8tdGhlLWZyYWdtZW50CiAgICAgICAgIGV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNl
OjpOZXR3b3JraW5nLCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXNdIHsKLSAg
ICAgICAgICAgIGF1dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cih2aWV3KCkpOworICAgICAgICAg
ICAgUmVmUHRyIGZyYW1lVmlldyA9IHZpZXcoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVWaWV3
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGlmICghaGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKCkpIHsKQEAgLTQwODIsNyArNDA4Miw3IEBAIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMgRG9jdW1lbnQ6OnByZXBhcmVNb3VzZUV2ZW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByCiAKICAgICBhdXRvIGNhcHR1cmVFbGVtZW50Q2hhbmdlZCA9IENhcHR1cmVDaGFuZ2U6Ok5v
OwogICAgIGlmICghcmVxdWVzdC5yZWFkT25seSgpKSB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0RWxl
bWVudCA9IG1ha2VSZWZQdHIocmVzdWx0LnRhcmdldEVsZW1lbnQoKSk7CisgICAgICAgIFJlZlB0
ciB0YXJnZXRFbGVtZW50ID0gcmVzdWx0LnRhcmdldEVsZW1lbnQoKTsKICAgICAgICAgaWYgKGF1
dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKICAgICAgICAgICAgIC8vIEJlZm9yZSB3ZSBkaXNw
YXRjaCBhIG5ldyBtb3VzZSBldmVudCwgd2UgbXVzdCBydW4gdGhlIFByb2Nlc3MgUGVuZGluZyBD
YXB0dXJlIEVsZW1lbnQgc3RlcHMgYXMgZGVmaW5lZAogICAgICAgICAgICAgLy8gaW4gaHR0cHM6
Ly93M2MuZ2l0aHViLmlvL3BvaW50ZXJldmVudHMvI3Byb2Nlc3MtcGVuZGluZy1wb2ludGVyLWNh
cHR1cmUuCkBAIC01Nzk3LDcgKzU3OTcsNyBAQCBzdGF0aWMgRWRpdG9yOjpDb21tYW5kIGNvbW1h
bmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBibwogCiAg
ICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAotICAgIGF1dG8gZnJhbWUgPSBt
YWtlUmVmUHRyKGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICBSZWZQdHIgZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKIAogICAgIGlmICghZnJhbWUgfHwgZnJhbWUtPmRvY3VtZW50KCkgIT0gZG9j
dW1lbnQpCiAgICAgICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCAyMzIwOGI2YWI5MTk0M2QzNzRmYTRjNmE1MzVkNWU0YTcwNGIyMjIxLi4yNzMx
NzNmMGVmNDIzYWNmMDIwODFmNzg0NjJmMGVjODc0MzE2ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC0xMDEyLDcgKzEwMTIsNyBAQCB2b2lkIEVsZW1lbnQ6OnNjcm9sbFRvKGNvbnN0IFNj
cm9sbFRvT3B0aW9ucyYgb3B0aW9ucywgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsCiAgICAgICAg
IC8vIElmIHRoZSBlbGVtZW50IGlzIHRoZSBzY3JvbGxpbmcgZWxlbWVudCBhbmQgaXMgbm90IHBv
dGVudGlhbGx5IHNjcm9sbGFibGUsCiAgICAgICAgIC8vIGludm9rZSBzY3JvbGwoKSBvbiB3aW5k
b3cgd2l0aCBvcHRpb25zIGFzIHRoZSBvbmx5IGFyZ3VtZW50LCBhbmQgdGVybWluYXRlIHRoZXNl
IHN0ZXBzLgogICAgICAgICAvLyBGSVhNRTogU2Nyb2xsaW5nIGFuIGluZGVwZW5kZW50bHkgc2Ny
b2xsYWJsZSBib2R5IGlzIGJyb2tlbjogd2Via2l0Lm9yZy9iLzE2MTYxMi4KLSAgICAgICAgYXV0
byB3aW5kb3cgPSBtYWtlUmVmUHRyKGRvY3VtZW50KCkuZG9tV2luZG93KCkpOworICAgICAgICBS
ZWZQdHIgd2luZG93ID0gZG9jdW1lbnQoKS5kb21XaW5kb3coKTsKICAgICAgICAgaWYgKCF3aW5k
b3cpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTExMzgsNyArMTEzOCw3IEBAIGludCBFbGVt
ZW50OjpvZmZzZXRMZWZ0Rm9yQmluZGluZ3MoKQogewogICAgIGF1dG8gb2Zmc2V0ID0gb2Zmc2V0
TGVmdCgpOwogCi0gICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKG9mZnNldFBhcmVudCgpKTsK
KyAgICBSZWZQdHIgcGFyZW50ID0gb2Zmc2V0UGFyZW50KCk7CiAgICAgaWYgKCFwYXJlbnQgfHwg
IXBhcmVudC0+aXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgcmV0dXJuIG9mZnNldDsKIApAQCAt
MTE2Nyw3ICsxMTY3LDcgQEAgaW50IEVsZW1lbnQ6Om9mZnNldFRvcEZvckJpbmRpbmdzKCkKIHsK
ICAgICBhdXRvIG9mZnNldCA9IG9mZnNldFRvcCgpOwogCi0gICAgYXV0byBwYXJlbnQgPSBtYWtl
UmVmUHRyKG9mZnNldFBhcmVudCgpKTsKKyAgICBSZWZQdHIgcGFyZW50ID0gb2Zmc2V0UGFyZW50
KCk7CiAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNJblNoYWRvd1RyZWUoKSkKICAgICAg
ICAgcmV0dXJuIG9mZnNldDsKIApAQCAtMzA4MSw3ICszMDgxLDcgQEAgdm9pZCBFbGVtZW50Ojpm
b2N1cyhjb25zdCBGb2N1c09wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChhdXRvIHJvb3QgPSBzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKCp0aGlzKSkgewot
ICAgICAgICBhdXRvIGN1cnJlbnRseUZvY3VzZWRFbGVtZW50ID0gbWFrZVJlZlB0cihkb2N1bWVu
dC0+Zm9jdXNlZEVsZW1lbnQoKSk7CisgICAgICAgIFJlZlB0ciBjdXJyZW50bHlGb2N1c2VkRWxl
bWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBpZiAocm9vdC0+Y29u
dGFpbnNJbmNsdWRpbmdTaGFkb3dET00oY3VycmVudGx5Rm9jdXNlZEVsZW1lbnQuZ2V0KCkpKSB7
CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1
bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5lbGVtZW50RGlkUmVmb2N1cygqY3VycmVu
dGx5Rm9jdXNlZEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCmluZGV4IDM5ZGJl
NDU1OTYwOTYzODAzZWY5ZmQ3NDI2NGUzY2ExZWE3NWEzYzEuLjk0Zjk4ZTk5OWE1YmExNzFkY2E4
MjUwZjJkOWRkNzQ2NWU5YTgyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKQEAgLTEx
MiwxNCArMTEyLDE0IEBAIGlubGluZSBFdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChUeXBlIHR5
cGUsIE5vZGUqIG5vZGUsIFJlZlB0cjxFdmVudFRhcmdldD4mJiBjCiB9CiAKIGlubGluZSBFdmVu
dENvbnRleHQ6OkV2ZW50Q29udGV4dChUeXBlIHR5cGUsIE5vZGUqIG5vZGUsIEV2ZW50VGFyZ2V0
KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogb3JpZ2luLCBpbnQgY2xvc2VkU2hhZG93RGVw
dGgpCi0gICAgOiBFdmVudENvbnRleHQodHlwZSwgbm9kZSwgbWFrZVJlZlB0cihjdXJyZW50VGFy
Z2V0KSwgb3JpZ2luLCBjbG9zZWRTaGFkb3dEZXB0aCkKKyAgICA6IEV2ZW50Q29udGV4dCh0eXBl
LCBub2RlLCBSZWZQdHIgeyBjdXJyZW50VGFyZ2V0IH0sIG9yaWdpbiwgY2xvc2VkU2hhZG93RGVw
dGgpCiB7CiAgICAgQVNTRVJUKCFpczxOb2RlPihjdXJyZW50VGFyZ2V0KSk7CiB9CiAKIC8vIFRo
aXMgdmFyaWFudCBhdm9pZHMgY2FsbGluZyBFdmVudFRhcmdldDo6cmVmKCkgd2hpY2ggaXMgYSB2
aXJ0dWFsIGZ1bmN0aW9uIGNhbGwuCiBpbmxpbmUgRXZlbnRDb250ZXh0OjpFdmVudENvbnRleHQo
VHlwZSB0eXBlLCBOb2RlJiBub2RlLCBOb2RlKiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCog
b3JpZ2luLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpCi0gICAgOiBFdmVudENvbnRleHQodHlwZSwg
Jm5vZGUsIG1ha2VSZWZQdHIoY3VycmVudFRhcmdldCksIG9yaWdpbiwgY2xvc2VkU2hhZG93RGVw
dGgsIGN1cnJlbnRUYXJnZXQgJiYgY3VycmVudFRhcmdldC0+aXNJblNoYWRvd1RyZWUoKSkKKyAg
ICA6IEV2ZW50Q29udGV4dCh0eXBlLCAmbm9kZSwgUmVmUHRyIHsgY3VycmVudFRhcmdldCB9LCBv
cmlnaW4sIGNsb3NlZFNoYWRvd0RlcHRoLCBjdXJyZW50VGFyZ2V0ICYmIGN1cnJlbnRUYXJnZXQt
PmlzSW5TaGFkb3dUcmVlKCkpCiB7CiAgICAgbV9jb250ZXh0Tm9kZUlzRm9ybUVsZW1lbnQgPSBp
czxIVE1MRm9ybUVsZW1lbnQ+KG5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmNwcAppbmRleCBjZDFkYmM4NjA4ZjRlYzFmMWIxM2RiMGM5ZTU3MWVkNWU2ZWMxMjFlLi4z
OTkxMjE0ZWMxNDNkMzg0YjY4YmFmNjU1OTljMjlmNzY2NTM2NmViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTQ3LDggKzE0Nyw4IEBAIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUmIG5vZGUsIEV2ZW50JiBldmVudCkKICAgICAKICAg
ICBMT0dfV0lUSF9TVFJFQU0oRXZlbnRzLCBzdHJlYW0gPDwgIkV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudCAiIDw8IGV2ZW50IDw8ICIgb24gbm9kZSAiIDw8IG5vZGUpOwogCi0gICAgYXV0
byBwcm90ZWN0ZWROb2RlID0gbWFrZVJlZihub2RlKTsKLSAgICBhdXRvIHByb3RlY3RlZFZpZXcg
PSBtYWtlUmVmUHRyKG5vZGUuZG9jdW1lbnQoKS52aWV3KCkpOworICAgIFJlZiBwcm90ZWN0ZWRO
b2RlIHsgbm9kZSB9OworICAgIFJlZlB0ciBwcm90ZWN0ZWRWaWV3IHsgbm9kZS5kb2N1bWVudCgp
LnZpZXcoKSB9OwogCiAgICAgRXZlbnRQYXRoIGV2ZW50UGF0aCB7IG5vZGUsIGV2ZW50IH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGJiYjcyZDM5YjBl
OWM1MDE0ZTUyZjQwNTBmYTQyZWE1N2FmNzJlNjYuLmFkYTU1MmYxYjMxM2RlNWE4MjIxOGQ3MjA2
MTE5OWJhN2I2OThkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVu
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNw
cApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RGdWxs
c2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsc2NyZWVuCiAKICAgICBtX3Bl
bmRpbmdGdWxsc2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7CiAKLSAgICBtX2RvY3VtZW50LmV2ZW50
TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpNZWRpYUVsZW1lbnQsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgZWxlbWVudCA9IG1ha2VSZWZQdHIoZWxlbWVudCksIGNo
ZWNrVHlwZSwgaGFzS2V5Ym9hcmRBY2Nlc3MsIGZhaWxlZFByZWZsaWdodHMsIGlkZW50aWZpZXIg
PSBMT0dJREVOVElGSUVSXSAoKSBtdXRhYmxlIHsKKyAgICBtX2RvY3VtZW50LmV2ZW50TG9vcCgp
LnF1ZXVlVGFzayhUYXNrU291cmNlOjpNZWRpYUVsZW1lbnQsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgZWxlbWVudCA9IFJlZlB0ciB7IGVsZW1lbnQgfSwgY2hlY2tUeXBl
LCBoYXNLZXlib2FyZEFjY2VzcywgZmFpbGVkUHJlZmxpZ2h0cywgaWRlbnRpZmllciA9IExPR0lE
RU5USUZJRVJdICgpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwogCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBGdWxsc2NyZWVuTWFuYWdlcjo6
ZXhpdEZ1bGxzY3JlZW4oKQogCiAgICAgLy8gNi4gUmV0dXJuLCBhbmQgcnVuIHRoZSByZW1haW5p
bmcgc3RlcHMgYXN5bmNocm9ub3VzbHkuCiAgICAgLy8gNy4gT3B0aW9uYWxseSwgcGVyZm9ybSBz
b21lIGFuaW1hdGlvbi4KLSAgICBtX2RvY3VtZW50LmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNr
U291cmNlOjpNZWRpYUVsZW1lbnQsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgbmV3VG9wID0gbWFrZVJlZlB0cihuZXdUb3ApLCBmdWxsc2NyZWVuRWxlbWVudCA9IG1fZnVs
bHNjcmVlbkVsZW1lbnQsIGlkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSXSB7CisgICAgbV9kb2N1
bWVudC5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50LCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIG5ld1RvcCA9IFJlZlB0ciB7IG5ld1Rv
cCB9LCBmdWxsc2NyZWVuRWxlbWVudCA9IG1fZnVsbHNjcmVlbkVsZW1lbnQsIGlkZW50aWZpZXIg
PSBMT0dJREVOVElGSUVSXSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZGxlRGVhZGxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0lkbGVEZWFkbGluZS5jcHAKaW5kZXggYTE5M2ZiNGM1NjIz
YmE2NTA3ODI2NmQ4ZDdmMGIzYzZiNmU3N2M5Yy4uNDgwYTJjNDE2OTMwNDA1M2ZmM2Q4OTU3NmZh
NzJiMTk3Mjg5ZTdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lkbGVEZWFkbGlu
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkbGVEZWFkbGluZS5jcHAKQEAgLTM1LDcg
KzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBET01IaWdoUmVzVGltZVN0YW1wIElkbGVE
ZWFkbGluZTo6dGltZVJlbWFpbmluZyhEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0CiB7Ci0gICAg
YXV0byB3aW5kb3cgPSBtYWtlUmVmUHRyKGRvY3VtZW50LmRvbVdpbmRvdygpKTsKKyAgICBSZWZQ
dHIgd2luZG93IHsgZG9jdW1lbnQuZG9tV2luZG93KCkgfTsKICAgICBpZiAoIXdpbmRvdykKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHdpbmRvdy0+cGVyZm9ybWFuY2UoKS5yZWxhdGl2
ZVRpbWVGcm9tVGltZU9yaWdpbkluUmVkdWNlZFJlc29sdXRpb24obV9kZWFkbGluZSk7CkBAIC00
Myw3ICs0Myw3IEBAIERPTUhpZ2hSZXNUaW1lU3RhbXAgSWRsZURlYWRsaW5lOjp0aW1lUmVtYWlu
aW5nKERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKIAogYm9vbCBJZGxlRGVhZGxpbmU6OmRpZFRp
bWVvdXQoRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAogewotICAgIGF1dG8gd2luZG93ID0gbWFr
ZVJlZlB0cihkb2N1bWVudC5kb21XaW5kb3coKSk7CisgICAgUmVmUHRyIHdpbmRvdyB7IGRvY3Vt
ZW50LmRvbVdpbmRvdygpIH07CiAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAKaW5kZXggZTkwM2RjYTE3
ZjYyMGY2ZGRiMzY1MmRhZmVjYjRkMmU3NWM1MTM5YS4uZmRmNjFlM2I4MTgzZmEyOWQ3MGVjMzli
YmUzZjdmMmZhNzc5MWRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
T2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNw
cApAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgp
CiAgICAgbV9yZWNvcmRzLmNsZWFyKCk7CiAgICAgV2Vha0hhc2hTZXQgcmVnaXN0cmF0aW9ucyB7
IG1fcmVnaXN0cmF0aW9ucyB9OwogICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogcmVnaXN0
cmF0aW9ucykgewotICAgICAgICBhdXRvIG5vZGVSZWYgPSBtYWtlUmVmUHRyKHJlZ2lzdHJhdGlv
bi5ub2RlKCkpOworICAgICAgICBSZWYgbm9kZVJlZiB7IHJlZ2lzdHJhdGlvbi5ub2RlKCkgfTsK
ICAgICAgICAgbm9kZVJlZi0+dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIocmVnaXN0cmF0aW9u
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCA2ZjlhMWQzYmZiNjVhMzk2
M2M1ODJhMTkzMGRmMzc4MmM2YWI2NTYyLi5iYmFlMTFhMmU0ZjE3MTM5MjQwOGViYzQxMGJiMTcx
ZDUwOGFiOWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCBQ
b3NpdGlvbiBQb3NpdGlvbjo6cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkgY29uc3QKIAogUmVm
UHRyPE5vZGU+IFBvc2l0aW9uOjpmaXJzdE5vZGUoKSBjb25zdAogewotICAgIGF1dG8gY29udGFp
bmVyID0gbWFrZVJlZlB0cihjb250YWluZXJOb2RlKCkpOworICAgIFJlZlB0ciBjb250YWluZXIg
eyBjb250YWluZXJOb2RlKCkgfTsKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KCpjb250YWluZXIpKQpAQCAtMTYx
MCw3ICsxNjEwLDcgQEAgUG9zaXRpb24gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihjb25z
dCBCb3VuZGFyeVBvaW50JiBwb2ludCkKIAogc3RkOjpvcHRpb25hbDxCb3VuZGFyeVBvaW50PiBt
YWtlQm91bmRhcnlQb2ludChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgYXV0byBj
b250YWluZXIgPSBtYWtlUmVmUHRyKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSk7CisgICAgUmVm
UHRyIGNvbnRhaW5lciB7IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSB9OwogICAgIGlmICghY29u
dGFpbmVyKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBCb3VuZGFy
eVBvaW50IHsgY29udGFpbmVyLnJlbGVhc2VOb25OdWxsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1Nsb3RBc3NpZ25tZW50LmNwcAppbmRleCA2YjdjNjI2OTBmMmYwMWNjYWI3YWRjYTEwYWFh
YmZlM2M2NDZmMzE0Li40YzFjMWU2ZGUwY2UzMjFhMzVlZjU0NWNjNjBiMzg1ZGU0YzAxODA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2
b2lkIFNsb3RBc3NpZ25tZW50OjpyZW1vdmVTbG90RWxlbWVudEJ5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBuYW1lLCBIVE1MU2xvdEVsZQogICAgIEFTU0VSVChtX3Nsb3RFbGVtZW50Q291bnQgPiAw
KTsKICAgICBtX3Nsb3RFbGVtZW50Q291bnQtLTsKIAotICAgIGlmIChhdXRvIGhvc3QgPSBtYWtl
UmVmUHRyKHNoYWRvd1Jvb3QuaG9zdCgpKSkgeworICAgIGlmIChSZWZQdHIgaG9zdCA9IHNoYWRv
d1Jvb3QuaG9zdCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBk
byBhIHRhcmdldGVkIHJlY29uc3RydWN0aW9uLgogICAgICAgICBob3N0LT5pbnZhbGlkYXRlU3R5
bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmICghbV9zbG90RWxlbWVudENv
dW50KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgU2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNs
b3QoY29uc3QgQXRvbVN0cmluZyYgc2xvdEF0dHJWYWx1ZSwgU2hhZG93Um9vdCYKICAgICBzbG90
LT5hc3NpZ25lZE5vZGVzLmNsZWFyKCk7CiAgICAgbV9zbG90QXNzaWdubWVudHNJc1ZhbGlkID0g
ZmFsc2U7CiAKLSAgICBhdXRvIHNsb3RFbGVtZW50ID0gbWFrZVJlZlB0cihmaW5kRmlyc3RTbG90
RWxlbWVudCgqc2xvdCkpOworICAgIFJlZlB0ciBzbG90RWxlbWVudCB7IGZpbmRGaXJzdFNsb3RF
bGVtZW50KCpzbG90KSB9OwogICAgIGlmICghc2xvdEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9Xb3JrZXJNZXNz
YWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBv
cnRzL1dvcmtlck1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNwcAppbmRleCA3MWQzZTE4NjI4
NjQxYWFhYmM4YmJkMDQ1ZTVlODYyNzVhNWJhNDJkLi5lMjI0ZmMzZWVkODU5Mzk2NDIyN2U2NzA5
MTYwNjhlOTJlMzNlMjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBv
cnRzL1dvcmtlck1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vbWVzc2FnZXBvcnRzL1dvcmtlck1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNw
cApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVy
Ojp0YWtlQWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SQogICAgIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciA9ICsrbV9sYXN0Q2FsbGJhY2tJZGVudGlmaWVyOwogICAgIG1f
dGFrZUFsbE1lc3NhZ2VzQ2FsbGJhY2tzLmFkZChjYWxsYmFja0lkZW50aWZpZXIsIFdURk1vdmUo
Y2FsbGJhY2spKTsKIAotICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdvcmtlclRocmVhZCA9
IG1ha2VSZWZQdHIobV9zY29wZS53b3JrZXJPcldvcmtsZXRUaHJlYWQoKSksIGNhbGxiYWNrSWRl
bnRpZmllciwgaWRlbnRpZmllcl0oKSBtdXRhYmxlIHsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0
aGlzLCB3b3JrZXJUaHJlYWQgPSBSZWZQdHIgeyBtX3Njb3BlLndvcmtlck9yV29ya2xldFRocmVh
ZCgpIH0sIGNhbGxiYWNrSWRlbnRpZmllciwgaWRlbnRpZmllcl0oKSBtdXRhYmxlIHsKICAgICAg
ICAgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OnNpbmdsZXRvbigpLnRha2VBbGxNZXNzYWdl
c0ZvclBvcnQoaWRlbnRpZmllciwgW3RoaXMsIHdvcmtlclRocmVhZCA9IFdURk1vdmUod29ya2Vy
VGhyZWFkKSwgY2FsbGJhY2tJZGVudGlmaWVyXShWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9y
dHM+JiYgbWVzc2FnZXMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewog
ICAgICAgICAgICAgd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKFt0aGlz
LCBjYWxsYmFja0lkZW50aWZpZXIsIG1lc3NhZ2VzID0gV1RGTW92ZShtZXNzYWdlcyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mKSBtdXRhYmxl
IHsKICAgICAgICAgICAgICAgICBtX3Rha2VBbGxNZXNzYWdlc0NhbGxiYWNrcy50YWtlKGNhbGxi
YWNrSWRlbnRpZmllcikoV1RGTW92ZShtZXNzYWdlcyksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewpAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgV29ya2VyTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OmNoZWNrUmVtb3RlUG9ydEZv
ckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQCiAgICAgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
ID0gKyttX2xhc3RDYWxsYmFja0lkZW50aWZpZXI7CiAgICAgbV9hY3Rpdml0eUNhbGxiYWNrcy5h
ZGQoY2FsbGJhY2tJZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCB3b3JrZXJUaHJlYWQgPSBtYWtlUmVmUHRyKG1fc2NvcGUud29ya2Vy
T3JXb3JrbGV0VGhyZWFkKCkpLCBjYWxsYmFja0lkZW50aWZpZXIsIHJlbW90ZVRhcmdldF0oKSBt
dXRhYmxlIHsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3b3JrZXJUaHJlYWQgPSBSZWZQ
dHIgeyBtX3Njb3BlLndvcmtlck9yV29ya2xldFRocmVhZCgpIH0sIGNhbGxiYWNrSWRlbnRpZmll
ciwgcmVtb3RlVGFyZ2V0XSgpIG11dGFibGUgewogICAgICAgICBNZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlcjo6c2luZ2xldG9uKCkuY2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkocmVtb3RlVGFy
Z2V0LCBbdGhpcywgd29ya2VyVGhyZWFkID0gV1RGTW92ZSh3b3JrZXJUaHJlYWQpLCBjYWxsYmFj
a0lkZW50aWZpZXJdKGF1dG8gaGFzQWN0aXZpdHkpIHsKICAgICAgICAgICAgIHdvcmtlclRocmVh
ZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShbdGhpcywgY2FsbGJhY2tJZGVudGlmaWVyLCBo
YXNBY3Rpdml0eV0oYXV0byYpIG11dGFibGUgewogICAgICAgICAgICAgICAgIG1fYWN0aXZpdHlD
YWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpKGhhc0FjdGl2aXR5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAppbmRl
eCA2ODVkMDg4ODZkMTU0YTEyNzcyMWJmMzUzNTJjNzY4MTc1NzUyYWU2Li5jZjUxOWQwODE5ZDE3
MzQ5YjhlNzMyMGZmYjYwYzFlMjE5OWFmYmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCkBAIC0yODksNyArMjg5LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6ZW5kT2ZOZXh0UGFyYWdy
YXBoU3BsaXR0aW5nVGV4dE5vZGVzSWYKICAgICAvLyBJZiBlbmRPZk5leHRQYXJhZ3JhcGggd2Fz
IHBvaW50aW5nIGF0IHRoaXMgc2FtZSB0ZXh0IG5vZGUsIGVuZE9mTmV4dFBhcmFncmFwaCB3aWxs
IGJlIHNoaWZ0ZWQgYnkgb25lIHBhcmFncmFwaC4KICAgICAvLyBBdm9pZCB0aGlzIGJ5IHNwbGl0
dGluZyAiXG4iCiAgICAgc3BsaXRUZXh0Tm9kZSgqdGV4dCwgMSk7Ci0gICAgYXV0byBwcmV2aW91
c1NpYmxpbmdPZlRleHQgPSBtYWtlUmVmUHRyKHRleHQtPnByZXZpb3VzU2libGluZygpKTsKKyAg
ICBhdXRvIHByZXZpb3VzU2libGluZ09mVGV4dCA9IFJlZlB0ciB7IHRleHQtPnByZXZpb3VzU2li
bGluZygpIH07CiAKICAgICBpZiAodGV4dCA9PSBzdGFydC5jb250YWluZXJOb2RlKCkgJiYgcHJl
dmlvdXNTaWJsaW5nT2ZUZXh0ICYmIGlzPFRleHQ+KHByZXZpb3VzU2libGluZ09mVGV4dCkpIHsK
ICAgICAgICAgQVNTRVJUKHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwgcG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAppbmRleCA1MjM3Y2ZjMGY5NTc1ZDRlY2FhZDNiOWFhNmE5MzM4ZWMw
NmNkZDhjLi5iZTBmMDY1MzkyODQzMGJlNzlkOGNjYzU0NjEzZjBlOWI5ZjE5YjdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtMjQyLDcgKzI0
Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUmIHN0eWxlKQogICAgIC8vIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2lu
dHMgdXNpbmcgdGhlaXIgaW5kaWNlcyBpbiB0aGUgZWRpdGFibGUgcm9vdCwgc2luY2UKICAgICAv
LyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVt
b3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRp
Y2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBhdXRv
IHNjb3BlUm9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNpYmxlU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0ciBzY29wZVJvb3QgeyBoaWdoZXN0RWRpdGFi
bGVSb290KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSB9OwogICAgIGlmICghc2NvcGVS
b290KQogICAgICAgICByZXR1cm47CiAKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5
bGUpCiAgICAgICAgIGJleW9uZEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmVuZC5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICAKICAgICBzdGFydCA9IHN0YXJ0LnVwc3RyZWFtKCk7IC8vIE1vdmUg
dXBzdHJlYW0gdG8gZW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVkdW5kYW50IHNwYW5zLgotICAgIGF1
dG8gc3RhcnROb2RlID0gbWFrZVJlZlB0cihzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBS
ZWZQdHIgc3RhcnROb2RlIHsgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSB9OwogCiAgICAgLy8gTWFr
ZSBzdXJlIHdlJ3JlIG5vdCBhbHJlYWR5IGF0IHRoZSBlbmQgb3IgdGhlIG5leHQgTm9kZVRyYXZl
cnNhbDo6bmV4dCgpIHdpbGwgdHJhdmVyc2UgcGFzdCBpdC4KICAgICBpZiAoc3RhcnROb2RlID09
IGJleW9uZEVuZCkKQEAgLTQ1NywxNCArNDU3LDE0IEBAIFJlZlB0cjxIVE1MRWxlbWVudD4gQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKE5vZGUqIG5vZGUs
CiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgdG8gbGVhdmUgdGhlIGhpZ2hlc3QgYW5jZXN0b3Ig
d2l0aCB1bmljb2RlLWJpZGkgdW5zcGxpdCBpZiBpdCBpcyB1bmljb2RlLWJpZGk6IGVtYmVkIGFu
ZCBkaXJlY3Rpb246IGFsbG93ZWREaXJlY3Rpb24uCiAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSBy
ZXR1cm4gdGhlIHVuc3BsaXQgYW5jZXN0b3IuIE90aGVyd2lzZSwgd2UgcmV0dXJuIDAuCi0gICAg
YXV0byBibG9jayA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2sobm9kZSkpOworICAgIFJlZlB0
ciBibG9jayB7IGVuY2xvc2luZ0Jsb2NrKG5vZGUpIH07CiAgICAgaWYgKCFibG9jayB8fCBibG9j
ayA9PSBub2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxOb2RlPiBo
aWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHRIaWdo
ZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGk7CiAgICAgaW50IGhpZ2hlc3RBbmNlc3RvclVuaWNv
ZGVCaWRpID0gMDsKLSAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBtYWtlUmVmUHRyKG5vZGUtPnBh
cmVudE5vZGUoKSk7IGFuY2VzdG9yICE9IGJsb2NrOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnROb2RlKCkpIHsKKyAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBSZWZQdHIgeyBub2RlLT5wYXJl
bnROb2RlKCkgfTsgYW5jZXN0b3IgIT0gYmxvY2s7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVu
dE5vZGUoKSkgewogICAgICAgICBpbnQgdW5pY29kZUJpZGkgPSB0b0lkZW50aWZpZXIoQ29tcHV0
ZWRTdHlsZUV4dHJhY3RvcihhbmNlc3Rvci5nZXQoKSkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eVVuaWNvZGVCaWRpKSk7CiAgICAgICAgIGlmICh1bmljb2RlQmlkaSAmJiB1bmljb2RlQmlkaSAh
PSBDU1NWYWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgaGlnaGVzdEFuY2VzdG9yVW5pY29kZUJp
ZGkgPSB1bmljb2RlQmlkaTsKQEAgLTUwNSw3ICs1MDUsNyBAQCBSZWZQdHI8SFRNTEVsZW1lbnQ+
IEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBu
b2RlLAogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9z
aW5nQmxvY2soTm9kZSogbm9kZSwgTm9kZSogdW5zcGxpdEFuY2VzdG9yKQogewotICAgIGF1dG8g
YmxvY2sgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKG5vZGUpKTsKKyAgICBSZWZQdHIgYmxv
Y2sgeyBlbmNsb3NpbmdCbG9jayhub2RlKSB9OwogICAgIGlmICghYmxvY2sgfHwgYmxvY2sgPT0g
bm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKE5vZGUqIG5vZGUs
IE5vZGUqIHVuc3AKIAogc3RhdGljIFJlZlB0cjxOb2RlPiBoaWdoZXN0RW1iZWRkaW5nQW5jZXN0
b3IoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmNsb3NpbmdOb2RlKQogewotICAgIGZvciAoYXV0
byBjdXJyZW50Tm9kZSA9IG1ha2VSZWZQdHIoc3RhcnROb2RlKTsgY3VycmVudE5vZGUgJiYgY3Vy
cmVudE5vZGUgIT0gZW5jbG9zaW5nTm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgZm9yIChSZWZQdHIgY3VycmVudE5vZGUgPSBzdGFydE5vZGU7IGN1
cnJlbnROb2RlICYmIGN1cnJlbnROb2RlICE9IGVuY2xvc2luZ05vZGU7IGN1cnJlbnROb2RlID0g
Y3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlz
SFRNTEVsZW1lbnQoKSAmJiB0b0lkZW50aWZpZXIoQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcihjdXJy
ZW50Tm9kZS5nZXQoKSkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKSkgPT0g
Q1NTVmFsdWVFbWJlZCkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTsKICAgICB9CkBA
IC02ODEsNyArNjgxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5n
ZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8gc3RhcnROb2RlID0gbWFr
ZVJlZlB0cihzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBSZWZQdHIgc3RhcnROb2RlIHsg
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKSB9OwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgc3Rh
cnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3RhcnROb2RlKTsKQEAgLTY4OSw3ICs2ODks
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUAogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gcGFzdEVuZE5vZGUgPSBtYWtlUmVmUHRyKGVuZC5kZXByZWNhdGVkTm9kZSgp
KTsKKyAgICBSZWZQdHIgcGFzdEVuZE5vZGUgeyBlbmQuZGVwcmVjYXRlZE5vZGUoKSB9OwogICAg
IGlmIChlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldCgqcGFz
dEVuZE5vZGUpKQogICAgICAgICBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKCpwYXN0RW5kTm9kZSk7CiAKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxl
JiBzdHlsZSwgY29uc3QgUAogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxh
cmdlIG9uIDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVk
ZSB0aGUgZm9udCBlbGVtZW50IGluIG91ciBydW4KICAgICAvLyB0byBnZW5lcmF0ZSA8Zm9udCBj
b2xvcj0iYmx1ZSIgc2l6ZT0iNCI+aGVsbG88L2ZvbnQ+IGluc3RlYWQgb2YgPGZvbnQgY29sb3I9
ImJsdWUiPjxmb250IHNpemU9IjQiPmhlbGxvPC9mb250PjwvZm9udD4KICAgICBhdXRvIHJhbmdl
ID0gKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKLSAgICBhdXRvIGVkaXRhYmxlUm9vdCA9
IG1ha2VSZWZQdHIoc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkpOworICAgIFJlZlB0
ciBlZGl0YWJsZVJvb3QgeyBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB9OwogICAg
IGlmIChzdGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7CiAgICAgICAgIHdoaWxlIChlZGl0YWJs
ZVJvb3QgJiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYmIGlzTm9k
ZVZpc2libHlDb250YWluZWRXaXRoaW4oKnN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpLCByYW5nZSkp
CiAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnBhcmVudE5vZGUoKTsKQEAgLTcx
Nyw4ICs3MTcsOCBAQCBzdGF0aWMgYm9vbCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vZGUm
IG5vZGUpCiAgICAgaWYgKCFub2RlLmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBhdXRvIHNpYmxpbmcgPSBtYWtlUmVmUHRyKE5vZGVUcmF2ZXJzYWw6Om5l
eHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpKTsKLSAgICBmb3IgKGF1dG8gZGVzY2VuZGFudCA9IG1h
a2VSZWZQdHIobm9kZS5maXJzdENoaWxkKCkpOyBkZXNjZW5kYW50ICYmIGRlc2NlbmRhbnQgIT0g
c2libGluZzsgZGVzY2VuZGFudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmRlc2NlbmRhbnQpKSB7
CisgICAgUmVmUHRyIHNpYmxpbmcgeyBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihub2RlKSB9OworICAgIGZvciAoUmVmUHRyIGRlc2NlbmRhbnQgPSBub2RlLmZpcnN0Q2hpbGQo
KTsgZGVzY2VuZGFudCAmJiBkZXNjZW5kYW50ICE9IHNpYmxpbmc7IGRlc2NlbmRhbnQgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpkZXNjZW5kYW50KSkgewogICAgICAgICBpZiAoIWRlc2NlbmRhbnQt
Pmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTc3Miw3ICs3NzIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxl
VG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSYgcwogICAgICAgICAgICAgLy8g
QWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGluZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0cyBjb250
ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC5pbmxpbmVTdHls
ZSgpKTsKLSAgICAgICAgICAgIGlmIChhdXRvIG90aGVyU3R5bGUgPSBtYWtlUmVmUHRyKHN0eWxl
LnN0eWxlKCkpKQorICAgICAgICAgICAgaWYgKFJlZlB0ciBvdGhlclN0eWxlID0gc3R5bGUuc3R5
bGUoKSkKICAgICAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29u
ZmxpY3QoKm90aGVyU3R5bGUpOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50
LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwpAQCAtNzkzLDE0ICs3
OTMsMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJh
bmdlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIE5vZGUmIHMKIAogICAgICAgICBhdXRvIHJ1blN0YXJ0
ID0gbm9kZTsKICAgICAgICAgYXV0byBydW5FbmQgPSBub2RlOwotICAgICAgICBhdXRvIHNpYmxp
bmcgPSBtYWtlUmVmUHRyKG5vZGUtPm5leHRTaWJsaW5nKCkpOworICAgICAgICBSZWZQdHIgc2li
bGluZyB7IG5vZGUtPm5leHRTaWJsaW5nKCkgfTsKICAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYg
c2libGluZyAhPSBwYXN0RW5kTm9kZSAmJiAhc2libGluZy0+Y29udGFpbnMocGFzdEVuZE5vZGUp
ICYmICghaXNCbG9jayhzaWJsaW5nLmdldCgpKSB8fCBzaWJsaW5nLT5oYXNUYWdOYW1lKGJyVGFn
KSkgJiYgIWNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24oKnNpYmxpbmcpKSB7CiAgICAgICAgICAg
ICBydW5FbmQgPSBzaWJsaW5nOwogICAgICAgICAgICAgc2libGluZyA9IHJ1bkVuZC0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgfQogICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4oKnJ1bkVuZCk7CiAKLSAgICAgICAgYXV0byBwYXN0RW5kTm9kZSA9IG1h
a2VSZWZQdHIoTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKnJ1bkVuZCkpOwor
ICAgICAgICBSZWZQdHIgcGFzdEVuZE5vZGUgeyBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbigqcnVuRW5kKSB9OwogICAgICAgICBpZiAoIXNob3VsZEFwcGx5SW5saW5lU3R5bGVU
b1J1bihzdHlsZSwgcnVuU3RhcnQuZ2V0KCksIHBhc3RFbmROb2RlLmdldCgpKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCkBAIC04MzYsNyArODM2LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFu
ZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHlsZSYgc3R5bGUsIE5vZGUq
IHIKIHsKICAgICBBU1NFUlQocnVuU3RhcnQpOwogCi0gICAgZm9yIChhdXRvIG5vZGUgPSBtYWtl
UmVmUHRyKHJ1blN0YXJ0KTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKKyAgICBmb3IgKFJlZlB0ciBub2RlID0gcnVuU3Rh
cnQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgLy8gV2UgZG9uJ3QgY29uc2lkZXIgbV9pc0lubGluZUVs
ZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB3ZSBuZXZlciBhcHBseSBzdHlsZSB3
aGVuIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpcyBzcGVjaWZpZWQKQEAgLTk2
OCw5ICs5NjgsOSBAQCBSZWZQdHI8SFRNTEVsZW1lbnQ+IEFwcGx5U3R5bGVDb21tYW5kOjpoaWdo
ZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gcmVzdWx0OwotICAgIGF1dG8gdW5zcGxp
dHRhYmxlRWxlbWVudCA9IG1ha2VSZWZQdHIodW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9u
KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSkpOworICAgIFJlZlB0ciB1bnNwbGl0
dGFibGVFbGVtZW50ID0gdW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlKSk7CiAKLSAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBtYWtl
UmVmUHRyKG5vZGUpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgp
KSB7CisgICAgZm9yIChSZWZQdHIgYW5jZXN0b3IgPSBub2RlOyBhbmNlc3RvcjsgYW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
KmFuY2VzdG9yKSAmJiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBk
b3duY2FzdDxIVE1MRWxlbWVudD4oKmFuY2VzdG9yKSkpCiAgICAgICAgICAgICByZXN1bHQgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxFbGVtZW50PihhbmNlc3Rvcik7CiAgICAgICAgIC8vIFNo
b3VsZCBzdG9wIGF0IHRoZSBlZGl0YWJsZSByb290IChjYW5ub3QgY3Jvc3MgZWRpdGluZyBib3Vu
ZGFyeSkgYW5kCkBAIC0xMDgxLDEzICsxMDgxLDEzIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBz
CiAgICAgLy8gSWYgdGhlIHB1c2hEb3duU3RhcnQgaXMgYXQgdGhlIGVuZCBvZiBhIHRleHQgbm9k
ZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLgogICAgIC8vIE1vdmUgaXQg
dG8gdGhlIG5leHQgZGVlcCBxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhl
IHN0eWxlIGZyb20gdGhpcyBub2RlLgogICAgIC8vIGUuZy4gaWYgcHVzaERvd25TdGFydCB3YXMg
YXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9kaXY+PC9iPiwg
d2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLgotICAgIGF1dG8gcHVzaERvd25T
dGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIocHVzaERvd25TdGFydC5jb250YWluZXJOb2RlKCkp
OworICAgIFJlZlB0ciBwdXNoRG93blN0YXJ0Q29udGFpbmVyIHsgcHVzaERvd25TdGFydC5jb250
YWluZXJOb2RlKCkgfTsKICAgICBpZiAoaXM8VGV4dD4ocHVzaERvd25TdGFydENvbnRhaW5lcikg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHB1c2hEb3duU3RhcnQuY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSA9PSBkb3duY2FzdDxUZXh0PigqcHVzaERvd25TdGFydENvbnRhaW5lciku
bGVuZ3RoKCkpCiAgICAgICAgIHB1c2hEb3duU3RhcnQgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShwdXNoRG93blN0YXJ0KTsKICAgICAvLyBJZiBwdXNoRG93bkVuZCBpcyBhdCB0aGUg
c3RhcnQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhpcyBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3Rl
ZC4KICAgICAvLyBNb3ZlIGl0IHRvIHRoZSBwcmV2aW91cyBkZWVwIGVxdWl2YWxlbnQgcG9zaXRp
b24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxlIGZyb20gdGhpcyBub2RlLgogICAgIFBvc2l0
aW9uIHB1c2hEb3duRW5kID0gZW5kLnVwc3RyZWFtKCk7Ci0gICAgYXV0byBwdXNoRG93bkVuZENv
bnRhaW5lciA9IG1ha2VSZWZQdHIocHVzaERvd25FbmQuY29udGFpbmVyTm9kZSgpKTsKKyAgICBS
ZWZQdHIgcHVzaERvd25FbmRDb250YWluZXIgeyBwdXNoRG93bkVuZC5jb250YWluZXJOb2RlKCkg
fTsKICAgICBpZiAoaXM8VGV4dD4ocHVzaERvd25FbmRDb250YWluZXIpICYmICFwdXNoRG93bkVu
ZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgIHB1c2hEb3duRW5kID0g
cHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHB1c2hEb3duRW5kKTsKIApAQCAtMTI0
OCw3ICsxMjQ4LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRp
b25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIAogYm9vbCBBcHBseVN0eWxl
Q29tbWFuZDo6bWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHN0YXJ0Tm9kZSA9IG1h
a2VSZWZQdHIoc3RhcnQuY29udGFpbmVyTm9kZSgpKTsKKyAgICBSZWZQdHIgc3RhcnROb2RlIHsg
c3RhcnQuY29udGFpbmVyTm9kZSgpIH07CiAgICAgaWYgKHN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjYxLDcgKzEyNjEs
NyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVu
dGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICB9CiAKLSAgICBhdXRvIHByZXZpb3VzU2libGluZyA9IG1h
a2VSZWZQdHIoc3RhcnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgUmVmUHRyIHByZXZp
b3VzU2libGluZyB7IHN0YXJ0Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkgfTsKICAgICBpZiAoIXBy
ZXZpb3VzU2libGluZyB8fCAhYXJlSWRlbnRpY2FsRWxlbWVudHMoKnN0YXJ0Tm9kZSwgKnByZXZp
b3VzU2libGluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTI4MSw3ICsxMjgxLDcg
QEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRp
Y2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKIAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVy
Z2VFbmRXaXRoTmV4dElmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKGVuZC5jb250YWlu
ZXJOb2RlKCkpOworICAgIFJlZlB0ciBlbmROb2RlIHsgZW5kLmNvbnRhaW5lck5vZGUoKSB9Owog
CiAgICAgaWYgKGlzQXRvbWljTm9kZShlbmROb2RlLmdldCgpKSkgewogICAgICAgICBpbnQgZW5k
T2Zmc2V0ID0gZW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKQEAgLTEyOTQsNyAr
MTI5NCw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlRW5kV2l0aE5leHRJZklkZW50
aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgaWYgKGVuZE5vZGUtPmhhc1Rh
Z05hbWUoYnJUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIG5leHRTaWJs
aW5nID0gbWFrZVJlZlB0cihlbmROb2RlLT5uZXh0U2libGluZygpKTsKKyAgICBSZWZQdHIgbmV4
dFNpYmxpbmcgeyBlbmROb2RlLT5uZXh0U2libGluZygpIH07CiAgICAgaWYgKCFuZXh0U2libGlu
ZyB8fCAhYXJlSWRlbnRpY2FsRWxlbWVudHMoKmVuZE5vZGUsICpuZXh0U2libGluZykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTM0MSw3ICsxMzQxLDcgQEAgYm9vbCBBcHBseVN0eWxl
Q29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChOb2RlJiBzdGFydE5vZGUsIE5v
ZGUmIGVuZE4KICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCBkb3duY2Fz
dDxFbGVtZW50PigqbmV4dFNpYmxpbmcpKTsKIAogICAgIGlmIChpczxFbGVtZW50PihwcmV2aW91
c1NpYmxpbmcpICYmIHByZXZpb3VzU2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7Ci0gICAg
ICAgIGF1dG8gbWVyZ2VkRWxlbWVudCA9IG1ha2VSZWZQdHIocHJldmlvdXNTaWJsaW5nLT5uZXh0
U2libGluZygpKTsKKyAgICAgICAgUmVmUHRyIG1lcmdlZEVsZW1lbnQgeyBwcmV2aW91c1NpYmxp
bmctPm5leHRTaWJsaW5nKCkgfTsKICAgICAgICAgQVNTRVJUKG1lcmdlZEVsZW1lbnQpOwogICAg
ICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aGFzRWRpdGFibGVTdHlsZSgpICYmIGFyZUlkZW50aWNh
bEVsZW1lbnRzKCpwcmV2aW91c1NpYmxpbmcsICptZXJnZWRFbGVtZW50KSkKICAgICAgICAgICAg
IG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZG93bmNhc3Q8RWxlbWVudD4oKnByZXZpb3VzU2libGlu
ZyksIGRvd25jYXN0PEVsZW1lbnQ+KCptZXJnZWRFbGVtZW50KSk7CkBAIC0xNTAyLDcgKzE1MDIs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMoTm9kZSogbm9k
ZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjbwogICAgICAgICB0ZXh0Tm9kZXMuYXBwZW5kKCp0
ZXh0Tm9kZSk7CiAKICAgICBmb3IgKGF1dG8mIGNoaWxkVGV4dCA6IHRleHROb2RlcykgewotICAg
ICAgICBhdXRvIG5leHQgPSBtYWtlUmVmUHRyKGNoaWxkVGV4dC0+bmV4dFNpYmxpbmcoKSk7Cisg
ICAgICAgIFJlZlB0ciBuZXh0IHsgY2hpbGRUZXh0LT5uZXh0U2libGluZygpIH07CiAgICAgICAg
IGlmICghaXM8VGV4dD4obmV4dCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcAppbmRleCAz
NWUxOTgzOTc0YTY4MzBkMDhiOTdjNzk0NTBlZmFiZmU3MDAwNGExLi45M2E0MDBkOGQwNTMwNGI4
ZjhiOWYwYTY5MWVkNTFmZmNlZGMxMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPHN0ZDo6cGFpcjxDaGFuZ2VMaXN0VHlwZUNvbW1hbmQ6OlR5cGUsIFJlZjxIVE1M
RWxlbWVudD4+PiBsCiAKIHN0ZDo6b3B0aW9uYWw8Q2hhbmdlTGlzdFR5cGVDb21tYW5kOjpUeXBl
PiBDaGFuZ2VMaXN0VHlwZUNvbW1hbmQ6Omxpc3RDb252ZXJzaW9uVHlwZShEb2N1bWVudCYgZG9j
dW1lbnQpCiB7Ci0gICAgaWYgKGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKGRvY3VtZW50LmZyYW1l
KCkpKSB7CisgICAgaWYgKFJlZlB0ciBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCkpIHsKICAgICAg
ICAgaWYgKGF1dG8gdHlwZUFuZEVsZW1lbnQgPSBsaXN0Q29udmVyc2lvblR5cGVGb3JTZWxlY3Rp
b24oZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0
eXBlQW5kRWxlbWVudC0+Zmlyc3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA0NjMzZGZiZjkzNzgwYzczYTgyNTg2NmI3
Njk4MzM3MmEyNWQwOThhLi5lZGFhYzM2ODU2MzQ4NzE4MmE2ZTMyNjRiNzU1MGFmY2YyZjQyZGEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cApAQCAtMTUyLDcgKzE1Miw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5VW5kb1JlcGxhY2VkVGV4
dDo6dGV4dERlbGV0ZWRCeVJlYXBwbHkoKQogc3RhdGljIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNl
cnRlZFRleHQpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKLSAgICBhdXRvIG5vZGUgPSBtYWtlUmVm
UHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRp
dGFibGVBWFJvbGUpKTsKKyAgICBSZWZQdHIgbm9kZSB7IGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRpdGFibGVBWFJvbGUpIH07CiAgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGluc2VydGVkVGV4dC5sZW5ndGgoKSAmJiBk
ZWxldGVkVGV4dC5sZW5ndGgoKSkKQEAgLTU1Myw3ICs1NTMsNyBAQCBib29sIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjppc1JlbW92YWJsZUJsb2NrKGNvbnN0IE5vZGUqIG5vZGUpCiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoUmVmPE5vZGU+JiYgaW5zZXJ0Q2hp
bGQsIE5vZGUmIHJlZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBz
aG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKLSAgICBhdXRvIHBhcmVudCA9
IG1ha2VSZWZQdHIocmVmQ2hpbGQucGFyZW50Tm9kZSgpKTsKKyAgICBSZWZQdHIgcGFyZW50IHsg
cmVmQ2hpbGQucGFyZW50Tm9kZSgpIH07CiAgICAgaWYgKCFwYXJlbnQgfHwgKCFwYXJlbnQtPmhh
c0VkaXRhYmxlU3R5bGUoKSAmJiBwYXJlbnQtPnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmNy
ZWF0ZShXVEZNb3ZlKGluc2VydENoaWxkKSwgcmVmQ2hpbGQsIHNob3VsZEFzc3VtZUNvbnRlbnRJ
c0Fsd2F5c0VkaXRhYmxlLCBlZGl0aW5nQWN0aW9uKCkpKTsKQEAgLTU2MSw3ICs1NjEsNyBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlKFJlZjxOb2RlPiYmIGlu
c2VydENoaWxkLCBOb2RlJiByZWZDaAogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNl
cnROb2RlQWZ0ZXIoUmVmPE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIE5vZGUmIHJlZkNoaWxkKQogewot
ICAgIGF1dG8gcGFyZW50ID0gbWFrZVJlZlB0cihyZWZDaGlsZC5wYXJlbnROb2RlKCkpOworICAg
IFJlZlB0ciBwYXJlbnQgeyByZWZDaGlsZC5wYXJlbnROb2RlKCkgfTsKICAgICBpZiAoIXBhcmVu
dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01ODAsMTEgKzU4MCwxMSBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoUmVmPE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIGNvbnN0
IFBvc2l0aW9uJgogICAgIC8vIEZvciBlZGl0aW5nIHBvc2l0aW9ucyBsaWtlIFt0YWJsZSwgMF0s
IGluc2VydCBiZWZvcmUgdGhlIHRhYmxlLAogICAgIC8vIGxpa2V3aXNlIGZvciByZXBsYWNlZCBl
bGVtZW50cywgYnJzLCBldGMuCiAgICAgUG9zaXRpb24gcCA9IGVkaXRpbmdQb3NpdGlvbi5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBhdXRvIHJlZkNoaWxkID0gbWFrZVJlZlB0cihw
LmRlcHJlY2F0ZWROb2RlKCkpOworICAgIFJlZlB0ciByZWZDaGlsZCB7IHAuZGVwcmVjYXRlZE5v
ZGUoKSB9OwogICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgCiAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKnJlZkNoaWxkKSkgewotICAg
ICAgICBhdXRvIGNoaWxkID0gbWFrZVJlZlB0cihyZWZDaGlsZC0+Zmlyc3RDaGlsZCgpKTsKKyAg
ICAgICAgUmVmUHRyIGNoaWxkIHsgcmVmQ2hpbGQtPmZpcnN0Q2hpbGQoKSB9OwogICAgICAgICBm
b3IgKGludCBpID0gMDsgY2hpbGQgJiYgaSA8IG9mZnNldDsgaSsrKQogICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNoaWxkKQpAQCAtNjEzLDcg
KzYxMyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUoUmVmPE5vZGU+
JiYgbm9kZSwgUmVmPENvbnRhaW5lck5vZGU+JiYgcGFyCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYgbm9kZSwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gY2hpbGRyZW47Ci0gICAgYXV0byBj
aGlsZCA9IG1ha2VSZWZQdHIobm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChmcm9tKSk7CisgICAgUmVm
UHRyIGNoaWxkIHsgbm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChmcm9tKSB9OwogICAgIGZvciAodW5z
aWduZWQgaSA9IGZyb207IGNoaWxkICYmIGkgPCB0bzsgaSsrLCBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNoaWxkKTsKIApAQCAtNjM1LDcg
KzYzNSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhOb2RlJiBub2RlKQogewotICAgIGF1
dG8gcGFyZW50ID0gbWFrZVJlZlB0cihub2RlLnBhcmVudE5vZGUoKSk7CisgICAgUmVmUHRyIHBh
cmVudCB7IG5vZGUucGFyZW50Tm9kZSgpIH07CiAgICAgcmVtb3ZlTm9kZShub2RlKTsKICAgICBw
cnVuZShwYXJlbnQuZ2V0KCkpOwogfQpAQCAtNjc4LDcgKzY3OCw3IEBAIEhUTUxFbGVtZW50KiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGls
ZHJlbkFuZEF0CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKE5vZGUqIG5vZGUp
CiB7Ci0gICAgaWYgKGF1dG8gaGlnaGVzdE5vZGVUb1JlbW92ZSA9IG1ha2VSZWZQdHIoaGlnaGVz
dE5vZGVUb1JlbW92ZUluUHJ1bmluZyhub2RlKSkpCisgICAgaWYgKFJlZlB0ciBoaWdoZXN0Tm9k
ZVRvUmVtb3ZlID0gaGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1bmluZyhub2RlKSkKICAgICAgICAg
cmVtb3ZlTm9kZSgqaGlnaGVzdE5vZGVUb1JlbW92ZSk7CiB9CiAKQEAgLTgyMyw3ICs4MjMsNyBA
QCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50
QWZ0ZXJOb2RlKHBvc2l0aW9uLmFuY2hvck5vZGUoKSk7CiAgICAgfQogCi0gICAgYXV0byB0YWJT
cGFuID0gbWFrZVJlZlB0cih0YWJTcGFuTm9kZShwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKTsK
KyAgICBSZWZQdHIgdGFiU3BhbiB7IHRhYlNwYW5Ob2RlKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KSkgfTsKIAogICAgIGlmIChwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8PSBjYXJl
dE1pbk9mZnNldCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHRhYlNwYW4uZ2V0KCkpOwpAQCAtODg5LDcgKzg4OSw3
IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNob3VsZFJlYmFsYW5jZUxlYWRpbmdXaGl0
ZXNwYWNlRm9yKGNvbnN0IFN0cmluZyYgdGV4CiAKIFJlZlB0cjxUZXh0PiBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6dGV4dE5vZGVGb3JSZWJhbGFuY2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBj
b25zdAogewotICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKTsKKyAgICBSZWZQdHIgbm9kZSB7IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSB9OwogICAg
IGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciB8fCAhaXM8VGV4dD4obm9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC05NjAsNyArOTYwLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hp
dGVzcGFjZU9uVGV4dFN1YnN0cmluZyhUZXh0JiB0ZXh0Tm9kZSwgaW4KIAogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRp
b24mIHBvc2l0aW9uKQogewotICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKSk7CisgICAgUmVmUHRyIG5vZGUgeyBwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpIH07CiAgICAgaWYgKCFpczxUZXh0Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRl
eHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpAQCAtMTMzNiw3ICsxMzM2LDcg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xlYW51cEFmdGVyRGVsZXRpb24oVmlzaWJs
ZVBvc2l0aW9uIGRlc3RpbmF0aW9uKQogICAgIGlmICghY2FyZXRBZnRlckRlbGV0ZS5lcXVhbHMo
ZGVzdGluYXRpb24pICYmIGlzU3RhcnRPZlBhcmFncmFwaChjYXJldEFmdGVyRGVsZXRlKSAmJiBp
c0VuZE9mUGFyYWdyYXBoKGNhcmV0QWZ0ZXJEZWxldGUpKSB7CiAgICAgICAgIC8vIE5vdGU6IFdl
IHdhbnQgdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUuCiAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9u
ID0gY2FyZXRBZnRlckRlbGV0ZS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKLSAgICAg
ICAgYXV0byBub2RlID0gbWFrZVJlZlB0cihwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICAgICAgUmVmUHRyIG5vZGUgeyBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpIH07CiAgICAgICAg
IEFTU0VSVChub2RlKTsKICAgICAgICAgLy8gTm9ybWFsbHkgZGVsZXRpb24gd2lsbCBsZWF2ZSBh
IGJyIGFzIGEgcGxhY2Vob2xkZXIuCiAgICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9k
ZSkpCkBAIC0xNTc0LDcgKzE1NzQsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVh
a091dE9mRW1wdHlMaXN0SXRlbSgpCiAgICAgc3R5bGUtPm1lcmdlVHlwaW5nU3R5bGUoZG9jdW1l
bnQoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbmV3QmxvY2s7Ci0gICAgaWYgKGF1dG8gYmxv
Y2tFbmNsb3NpbmdMaXN0ID0gbWFrZVJlZlB0cihsaXN0Tm9kZS0+cGFyZW50Tm9kZSgpKSkgewor
ICAgIGlmIChSZWZQdHIgYmxvY2tFbmNsb3NpbmdMaXN0ID0gbGlzdE5vZGUtPnBhcmVudE5vZGUo
KSkgewogICAgICAgICBpZiAoaXM8SFRNTExJRWxlbWVudD4oKmJsb2NrRW5jbG9zaW5nTGlzdCkp
IHsgLy8gbGlzdE5vZGUgaXMgaW5zaWRlIGFub3RoZXIgbGlzdCBpdGVtCiAgICAgICAgICAgICBp
ZiAodmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCpibG9ja0VuY2xvc2luZ0xpc3QpID09IHZpc2li
bGVQb3NpdGlvbkFmdGVyTm9kZSgqbGlzdE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYg
bGlzdE5vZGUgYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZSBvdXRlciBsaXN0IGl0ZW0sIHRoZW4g
bW92ZSBsaXN0Tm9kZSBvdXRzaWRlIG9mIHRoaXMgbGlzdCBpdGVtCkBAIC0xNjI5LDcgKzE2Mjks
NyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2tx
dW90ZWRQYXJhZ3JhcGgoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIFZp
c2libGVQb3NpdGlvbiBjYXJldChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0g
ICAgYXV0byBoaWdoZXN0QmxvY2txdW90ZSA9IG1ha2VSZWZQdHIoaGlnaGVzdEVuY2xvc2luZ05v
ZGVPZlR5cGUoY2FyZXQuZGVlcEVxdWl2YWxlbnQoKSwgJmlzTWFpbEJsb2NrcXVvdGUpKTsKKyAg
ICBSZWZQdHIgaGlnaGVzdEJsb2NrcXVvdGUgeyBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShj
YXJldC5kZWVwRXF1aXZhbGVudCgpLCAmaXNNYWlsQmxvY2txdW90ZSkgfTsKICAgICBpZiAoIWhp
Z2hlc3RCbG9ja3F1b3RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2NjUsNyArMTY2
NSw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9j
a3F1b3RlZFBhcmFncmFwaCgpCiAgICAgZWxzZSBpZiAoaXM8VGV4dD4oKmNhcmV0UG9zLmRlcHJl
Y2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIEFTU0VSVChjYXJldFBvcy5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpID09IDApOwogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KCpjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICAgICAgYXV0byBwYXJlbnROb2RlID0g
bWFrZVJlZlB0cih0ZXh0Tm9kZS5wYXJlbnROb2RlKCkpOworICAgICAgICBSZWZQdHIgcGFyZW50
Tm9kZSB7IHRleHROb2RlLnBhcmVudE5vZGUoKSB9OwogICAgICAgICAvLyBUaGUgcHJlc2VydmVk
IG5ld2xpbmUgbXVzdCBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIG5vZGUsIHNpbmNlIG90aGVy
d2lzZSB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gcGFyYWdyYXBoIHdvdWxkIGJlIHF1b3RlZCwg
YW5kIHdlIHZlcmlmaWVkIHRoYXQgaXQgd2Fzbid0IGFib3ZlLgogICAgICAgICBkZWxldGVUZXh0
RnJvbU5vZGUodGV4dE5vZGUsIDAsIDEpOwpAQCAtMTY4NSw3ICsxNjg1LDcgQEAgUG9zaXRpb24g
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5k
YXJ5KGNvbnN0IFBvc2kKICAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgICAgICAKICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhvcmlnaW5hbCk7Ci0gICAgYXV0byBlbmNsb3NpbmdB
bmNob3IgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0FuY2hvckVsZW1lbnQob3JpZ2luYWwpKTsKKyAg
ICBSZWZQdHIgZW5jbG9zaW5nQW5jaG9yIHsgZW5jbG9zaW5nQW5jaG9yRWxlbWVudChvcmlnaW5h
bCkgfTsKICAgICBQb3NpdGlvbiByZXN1bHQgPSBvcmlnaW5hbDsKIAogICAgIGlmICghZW5jbG9z
aW5nQW5jaG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKaW5kZXggNDZjNDY3ZjdmOGQ2NmFiM2I1YTJhOThjNmMwMzkzMzM5ZmNhZDA3
YS4uMzI5YWMzMmIxYTFmYWQxNTJlNjUzZGFmOTljMWY0YjI1Yjc5ODg0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC02Nyw3
ICs2Nyw3IEBAIHN0YXRpYyBib29sIGlzVGFibGVSb3dFbXB0eShOb2RlKiByb3cpCiAgICAgaWYg
KCFpc1RhYmxlUm93KHJvdykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoYXV0
byBjaGlsZCA9IG1ha2VSZWZQdHIocm93LT5maXJzdENoaWxkKCkpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVmUHRyIGNoaWxkID0gcm93LT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmIChpc1RhYmxlQ2VsbChjaGlsZC5nZXQoKSkgJiYgIWlzVGFibGVDZWxsRW1wdHkoY2hpbGQu
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEwMyw4ICsxMDMs
OCBAQCBzdGF0aWMgYm9vbCBpc1NwZWNpYWxIVE1MRWxlbWVudChjb25zdCBOb2RlJiBub2RlKQog
CiBzdGF0aWMgUmVmUHRyPEhUTUxFbGVtZW50PiBmaXJzdEluU3BlY2lhbEVsZW1lbnQoY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKQogewotICAgIGF1dG8gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG1h
a2VSZWZQdHIocG9zaXRpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKLSAgICBmb3IgKGF1dG8g
bm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7IG5vZGUgJiYgbm9k
ZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBSZWZQdHIgcm9vdEVkaXRhYmxlRWxlbWVudCB7IHBv
c2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB9OworICAgIGZvciAoUmVmUHRyIG5vZGUgPSBw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOyBub2RlICYmIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgIGlmICghaXNTcGVjaWFsSFRNTEVsZW1lbnQoKm5vZGUpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBwb3Np
dGlvbjsKQEAgLTExOSw4ICsxMTksOCBAQCBzdGF0aWMgUmVmUHRyPEhUTUxFbGVtZW50PiBmaXJz
dEluU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogCiBzdGF0aWMgUmVm
UHRyPEhUTUxFbGVtZW50PiBsYXN0SW5TcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pCiB7Ci0gICAgYXV0byByb290RWRpdGFibGVFbGVtZW50ID0gbWFrZVJlZlB0cihwb3Np
dGlvbi5yb290RWRpdGFibGVFbGVtZW50KCkpOwotICAgIGZvciAoYXV0byBub2RlID0gbWFrZVJl
ZlB0cihwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKTsgbm9kZSAmJiBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkgeworICAgIFJlZlB0ciByb290RWRpdGFibGVFbGVtZW50IHsgcG9zaXRpb24ucm9vdEVk
aXRhYmxlRWxlbWVudCgpIH07CisgICAgZm9yIChSZWZQdHIgbm9kZSA9IHBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCk7IG5vZGUgJiYgbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RF
ZGl0YWJsZUVsZW1lbnQ7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYg
KCFpc1NwZWNpYWxIVE1MRWxlbWVudCgqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbiA9IHBvc2l0aW9uOwpAQCAtMzIx
LDggKzMyMSw4IEBAIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVBvc2l0
aW9uRGF0YSgpCiAgICAgLy8gRG9uJ3QgbW92ZSBjb250ZW50IG91dCBvZiBhIHRhYmxlIGNlbGwu
CiAgICAgLy8gSWYgdGhlIGNlbGwgaXMgbm9uLWVkaXRhYmxlLCBlbmNsb3NpbmdOb2RlT2ZUeXBl
IHdvbid0IHJldHVybiBpdCBieSBkZWZhdWx0LCBzbwogICAgIC8vIHRlbGwgdGhhdCBmdW5jdGlv
biB0aGF0IHdlIGRvbid0IGNhcmUgaWYgaXQgcmV0dXJucyBub24tZWRpdGFibGUgbm9kZXMuCi0g
ICAgYXV0byBzdGFydENlbGwgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ05vZGVPZlR5cGUobV91cHN0
cmVhbVN0YXJ0LCAmaXNUYWJsZUNlbGwsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7Ci0gICAg
YXV0byBlbmRDZWxsID0gbWFrZVJlZlB0cihlbmNsb3NpbmdOb2RlT2ZUeXBlKG1fZG93bnN0cmVh
bUVuZCwgJmlzVGFibGVDZWxsLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpOworICAgIFJlZlB0
ciBzdGFydENlbGwgeyBlbmNsb3NpbmdOb2RlT2ZUeXBlKG1fdXBzdHJlYW1TdGFydCwgJmlzVGFi
bGVDZWxsLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkgfTsKKyAgICBSZWZQdHIgZW5kQ2VsbCB7
IGVuY2xvc2luZ05vZGVPZlR5cGUobV9kb3duc3RyZWFtRW5kLCAmaXNUYWJsZUNlbGwsIENhbkNy
b3NzRWRpdGluZ0JvdW5kYXJ5KSB9OwogICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IHJpZ2h0LiAg
QSBib3JkZXJsZXNzIHRhYmxlIHdpdGggdHdvIHJvd3MgYW5kIGEgc2luZ2xlIGNvbHVtbiB3b3Vs
ZCBhcHBlYXIgYXMgdHdvIHBhcmFncmFwaHMuCiAgICAgaWYgKGVuZENlbGwgJiYgZW5kQ2VsbCAh
PSBzdGFydENlbGwpCiAgICAgICAgIG1fbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IGZhbHNlOwpA
QCAtNDM0LDEwICs0MzQsMTAgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlw
aW5nU3R5bGVTdGF0ZSgpCiAKIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3Bl
Y2lhbENhc2VCUkRlbGV0ZSgpCiB7Ci0gICAgYXV0byBub2RlQWZ0ZXJVcHN0cmVhbVN0YXJ0ID0g
bWFrZVJlZlB0cihtX3Vwc3RyZWFtU3RhcnQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkpOwot
ICAgIGF1dG8gbm9kZUFmdGVyRG93bnN0cmVhbVN0YXJ0ID0gbWFrZVJlZlB0cihtX2Rvd25zdHJl
YW1TdGFydC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSk7CisgICAgUmVmUHRyIG5vZGVBZnRl
clVwc3RyZWFtU3RhcnQgeyBtX3Vwc3RyZWFtU3RhcnQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9u
KCkgfTsKKyAgICBSZWZQdHIgbm9kZUFmdGVyRG93bnN0cmVhbVN0YXJ0IHsgbV9kb3duc3RyZWFt
U3RhcnQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkgfTsKICAgICAvLyBVcHN0cmVhbSBlbmQg
d2lsbCBhcHBlYXIgYmVmb3JlIEJSIGR1ZSB0byBjYW5vbmljYWxpemF0aW9uCi0gICAgYXV0byBu
b2RlQWZ0ZXJVcHN0cmVhbUVuZCA9IG1ha2VSZWZQdHIobV91cHN0cmVhbUVuZC5jb21wdXRlTm9k
ZUFmdGVyUG9zaXRpb24oKSk7CisgICAgUmVmUHRyIG5vZGVBZnRlclVwc3RyZWFtRW5kIHsgbV91
cHN0cmVhbUVuZC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSB9OwogCiAgICAgaWYgKCFub2Rl
QWZ0ZXJVcHN0cmVhbVN0YXJ0IHx8ICFub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTQ2OSw3ICs0NjksNyBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZVNwZWNpYWxDYXNlQlJEZWxldGUoKQogc3RhdGljIFBvc2l0aW9uIGZpcnN0
RWRpdGFibGVQb3NpdGlvbkluTm9kZShOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsK
LSAgICBhdXRvIG5leHQgPSBtYWtlUmVmUHRyKG5vZGUpOworICAgIFJlZlB0ciBuZXh0IHsgbm9k
ZSB9OwogICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpuZXh0LCBub2RlKTsKICAgICByZXR1cm4g
bmV4dCA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShuZXh0LmdldCgpKSA6IFBvc2l0aW9u
KCk7CkBAIC01MjcsOSArNTI3LDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1v
dmVOb2RlKE5vZGUmIG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0UKICAgICAgICAg
ICAgIGlmICghbm9kZS5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgLy8gU2VhcmNoIHRoaXMgbm9uLWVkaXRhYmxlIHJlZ2lvbiBmb3IgZWRpdGFibGUg
cmVnaW9ucyB0byBlbXB0eS4KLSAgICAgICAgICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKG5v
ZGUuZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIFJlZlB0ciBjaGlsZCB7IG5vZGUuZmlyc3RD
aGlsZCgpIH07CiAgICAgICAgICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIG5leHRDaGlsZCA9IG1ha2VSZWZQdHIoY2hpbGQtPm5leHRTaWJsaW5nKCkpOworICAgICAg
ICAgICAgICAgIFJlZlB0ciBuZXh0Q2hpbGQgeyBjaGlsZC0+bmV4dFNpYmxpbmcoKSB9OwogICAg
ICAgICAgICAgICAgIHJlbW92ZU5vZGUoKmNoaWxkLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSk7CiAgICAgICAgICAgICAgICAgLy8gQmFpbCBpZiBuZXh0Q2hpbGQgaXMgbm8g
bG9uZ2VyIG5vZGUncyBjaGlsZC4KICAgICAgICAgICAgICAgICBpZiAobmV4dENoaWxkICYmIG5l
eHRDaGlsZC0+cGFyZW50Tm9kZSgpICE9ICZub2RlKQpAQCAtNTQ1LDEzICs1NDUsMTMgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUmIG5vZGUsIFNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0UKICAgICBpZiAoc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkobm9k
ZSkpIHsKICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBhbiBlbGVtZW50IG9mIHRhYmxlIHN0cnVj
dHVyZTsgcmVtb3ZlIGl0cyBjb250ZW50cy4KICAgICAgICAgLy8gTGlrZXdpc2UgZm9yIHRoZSBy
b290IGVkaXRhYmxlIGVsZW1lbnQuCi0gICAgICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgJm5vZGUpKTsKKyAgICAgICAgUmVmUHRyIGNoaWxkIHsg
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmbm9kZSkgfTsKICAgICAgICAgd2hpbGUgKGNoaWxk
KSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkoKmNoaWxkKSkgewog
ICAgICAgICAgICAgICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqY2hpbGQsICZub2Rl
KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gbmV4dENoaWxkID0gbWFrZVJlZlB0cihOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbigqY2hpbGQsICZub2RlKSk7CisgICAgICAgICAgICBSZWZQdHIgbmV4dENoaWxkIHsg
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmNoaWxkLCAmbm9kZSkgfTsKICAg
ICAgICAgICAgIHJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcygqY2hpbGQsIHNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICAgICAgICAgIGNoaWxkID0gV1RGTW92ZShuZXh0
Q2hpbGQpOwogICAgICAgICB9CkBAIC01NjAsOSArNTYwLDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUmIG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fs
d2F5c0UKICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwog
ICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGluc2VydCBhIHBsYWNlaG9sZGVyIGZv
ciBkZXNjZW5kYW50IHRhYmxlIGNlbGxzLgotICAgICAgICBhdXRvIGRlc2NlbmRhbnQgPSBtYWtl
UmVmUHRyKEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgJmVsZW1lbnQpKTsKKyAgICAg
ICAgUmVmUHRyIGRlc2NlbmRhbnQgeyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsICZl
bGVtZW50KSB9OwogICAgICAgICB3aGlsZSAoZGVzY2VuZGFudCkgewotICAgICAgICAgICAgYXV0
byBuZXh0RGVzY2VuZGFudCA9IG1ha2VSZWZQdHIoRWxlbWVudFRyYXZlcnNhbDo6bmV4dCgqZGVz
Y2VuZGFudCwgJmVsZW1lbnQpKTsKKyAgICAgICAgICAgIFJlZlB0ciBuZXh0RGVzY2VuZGFudCB7
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoKmRlc2NlbmRhbnQsICZlbGVtZW50KSB9OwogICAgICAg
ICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlckZvclRhYmxlQ2VsbElmTmVlZGVkKCpkZXNjZW5k
YW50KTsKICAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBXVEZNb3ZlKG5leHREZXNjZW5kYW50KTsK
ICAgICAgICAgfQpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6bWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByCiAg
ICAgICAgICAgICBub2Rlcy5hZHZhbmNlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
bm9kZXMuYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGlmIChhdXRvIHJv
b3RFZGl0YWJsZUVsZW1lbnQgPSBtYWtlUmVmUHRyKG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSkpIHsKKyAgICAgICAgICAgIGlmIChSZWZQdHIgcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9k
ZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZShub2RlLmdldCgpLCAqcm9vdEVk
aXRhYmxlRWxlbWVudCk7CiAgICAgICAgICAgICB9CkBAIC02MjIsNyArNjIyLDcgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7Ci0gICAgYXV0byBzdGFydE5vZGUgPSBtYWtlUmVmUHRyKG1fdXBzdHJl
YW1TdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBSZWZQdHIgc3RhcnROb2RlIHsgbV91cHN0
cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgfTsKIAogICAgIG1ha2VTdHlsaW5nRWxlbWVudHNE
aXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKCk7CiAKQEAgLTY5
OCw3ICs2OTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxE
ZWxldGUoKQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwogICAgICAgICAgICAg
ICAgIG5vZGUgPSBuZXh0Tm9kZS5nZXQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBsYXN0RGVzY2VuZGFudCA9IG1ha2VSZWZQdHIobm9kZS0+bGFzdERlc2Nl
bmRhbnQoKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyIGxhc3REZXNjZW5kYW50IHsgbm9kZS0+
bGFzdERlc2NlbmRhbnQoKSB9OwogICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQu
ZGVwcmVjYXRlZE5vZGUoKSA9PSBsYXN0RGVzY2VuZGFudCAmJiBtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldCgqbGFzdERlc2NlbmRhbnQp
KSB7CiAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlID0gbnVsbHB0cjsKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIShzdGFydE5vZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlICYmICFtX3Vwc3RyZWFt
U3RhcnQuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKSkgewogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAobV91cHN0cmVh
bVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBuID0gbWFr
ZVJlZlB0cihtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSZWZQdHIgbiB7IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpIH07
CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5wYXJlbnROb2RlKCkgIT0g
bV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
KQpAQCAtNzg4LDcgKzc4OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKCkKICAgICAKICAgICAvLyBtX2Rvd25zdHJlYW1FbmQncyBibG9jayBoYXMgYmVl
biBlbXB0aWVkIG91dCBieSBkZWxldGlvbi4gIFRoZXJlIGlzIG5vIGNvbnRlbnQgaW5zaWRlIG9m
IGl0IHRvCiAgICAgLy8gbW92ZSwgc28ganVzdCByZW1vdmUgaXQuCi0gICAgYXV0byBlbmRCbG9j
ayA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCkpKTsKKyAgICBSZWZQdHIgZW5kQmxvY2sgeyBlbmNsb3NpbmdCbG9jayhtX2Rvd25zdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgfTsKICAgICBpZiAoIWVuZEJsb2NrKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTgxNSw3ICs4MTUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
Om1lcmdlUGFyYWdyYXBocygpCiAgICAgLy8gRklYTUU6IENvbnNpZGVyIFJUTC4KICAgICBpZiAo
IW1fc3RhcnRzQXRFbXB0eUxpbmUgJiYgaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRp
b24pICYmIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA+
IG1lcmdlRGVzdGluYXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSkgewogICAgICAgICBp
ZiAobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNh
dGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAgICAgICAgYXV0byBub2RlVG9S
ZW1vdmUgPSBtYWtlUmVmUHRyKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3du
c3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICBSZWZQdHIgbm9kZVRvUmVt
b3ZlIHsgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXBy
ZWNhdGVkTm9kZSgpIH07CiAgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMo
Km5vZGVUb1JlbW92ZSk7CiAgICAgICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
ODU3LDkgKzg1Nyw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUHJldmlv
dXNseVNlbGVjdGVkRW1wdHlUYWJsZVJvd3MoKQogICAgIC8vIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OnJlbW92ZU5vZGUgZG9lcyBub3QgcmVtb3ZlIHJvd3MgYnV0IG9ubHkgZW1wdGllcyB0aGVt
IGluIHByZXBhcmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uLgogICAgIC8vIEluc3RlYWQsIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcyBpcyB1c2VkIGJlbG93
LCB3aGljaCBjYWxscyBhIHJhdyBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZSBhbmQg
YWRqdXN0cyBzZWxlY3Rpb24uCiAgICAgaWYgKG1fZW5kVGFibGVSb3cgJiYgbV9lbmRUYWJsZVJv
dy0+aXNDb25uZWN0ZWQoKSAmJiBtX2VuZFRhYmxlUm93ICE9IG1fc3RhcnRUYWJsZVJvdykgewot
ICAgICAgICBhdXRvIHJvdyA9IG1ha2VSZWZQdHIobV9lbmRUYWJsZVJvdy0+cHJldmlvdXNTaWJs
aW5nKCkpOworICAgICAgICBSZWZQdHIgcm93IHsgbV9lbmRUYWJsZVJvdy0+cHJldmlvdXNTaWJs
aW5nKCkgfTsKICAgICAgICAgd2hpbGUgKHJvdyAmJiByb3cgIT0gbV9zdGFydFRhYmxlUm93KSB7
Ci0gICAgICAgICAgICBhdXRvIHByZXZpb3VzUm93ID0gbWFrZVJlZlB0cihyb3ctPnByZXZpb3Vz
U2libGluZygpKTsKKyAgICAgICAgICAgIFJlZlB0ciBwcmV2aW91c1JvdyB7IHJvdy0+cHJldmlv
dXNTaWJsaW5nKCkgfTsKICAgICAgICAgICAgIGlmIChpc1RhYmxlUm93RW1wdHkocm93LmdldCgp
KSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlVXBkYXRpbmdTdGF0ZXMoKnJvdywgRG9Ob3RB
c3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgICAgICAgICByb3cgPSBXVEZNb3Zl
KHByZXZpb3VzUm93KTsKQEAgLTg2OCw5ICs4NjgsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnJlbW92ZVByZXZpb3VzbHlTZWxlY3RlZEVtcHR5VGFibGVSb3dzKCkKICAgICAKICAg
ICAvLyBSZW1vdmUgZW1wdHkgcm93cyBhZnRlciB0aGUgc3RhcnQgcm93LgogICAgIGlmIChtX3N0
YXJ0VGFibGVSb3cgJiYgbV9zdGFydFRhYmxlUm93LT5pc0Nvbm5lY3RlZCgpICYmIG1fc3RhcnRU
YWJsZVJvdyAhPSBtX2VuZFRhYmxlUm93KSB7Ci0gICAgICAgIGF1dG8gcm93ID0gbWFrZVJlZlB0
cihtX3N0YXJ0VGFibGVSb3ctPm5leHRTaWJsaW5nKCkpOworICAgICAgICBSZWZQdHIgcm93IHsg
bV9zdGFydFRhYmxlUm93LT5uZXh0U2libGluZygpIH07CiAgICAgICAgIHdoaWxlIChyb3cgJiYg
cm93ICE9IG1fZW5kVGFibGVSb3cpIHsKLSAgICAgICAgICAgIGF1dG8gbmV4dFJvdyA9IG1ha2VS
ZWZQdHIocm93LT5uZXh0U2libGluZygpKTsKKyAgICAgICAgICAgIFJlZlB0ciBuZXh0Um93IHsg
cm93LT5uZXh0U2libGluZygpIH07CiAgICAgICAgICAgICBpZiAoaXNUYWJsZVJvd0VtcHR5KHJv
dy5nZXQoKSkpCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVVwZGF0aW5nU3RhdGVzKCpyb3cs
IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgICAgICAgICAgcm93ID0g
V1RGTW92ZShuZXh0Um93KTsKQEAgLTk1MywxMCArOTUzLDEwIEBAIFN0cmluZyBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdP
ZlNlbGVjCiAvLyBUaGlzIG1ldGhvZCByZW1vdmVzIGRpdiBlbGVtZW50cyB3aXRoIG5vIGF0dHJp
YnV0ZXMgdGhhdCBoYXZlIG9ubHkgb25lIGNoaWxkIG9yIG5vIGNoaWxkcmVuIGF0IGFsbC4KIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50QmxvY2tzKCkKIHsKLSAg
ICBhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKG1fZW5kaW5nUG9zaXRpb24uY29udGFpbmVyTm9kZSgp
KTsKKyAgICBSZWZQdHIgbm9kZSB7IG1fZW5kaW5nUG9zaXRpb24uY29udGFpbmVyTm9kZSgpIH07
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byByb290Tm9kZSA9IG1h
a2VSZWZQdHIobm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICBSZWZQdHIgcm9vdE5v
ZGUgeyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgfTsKICAgIAogICAgIHdoaWxlIChub2Rl
ICYmIG5vZGUgIT0gcm9vdE5vZGUpIHsKICAgICAgICAgaWYgKGlzUmVtb3ZhYmxlQmxvY2sobm9k
ZS5nZXQoKSkpIHsKQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSWYgdGhlIGRlbGV0aW9uIGlzIG9jY3VycmluZyBpbiBh
IHRleHQgZmllbGQsIGFuZCB3ZSdyZSBub3QgZGVsZXRpbmcgdG8gcmVwbGFjZSB0aGUgc2VsZWN0
aW9uLCB0aGVuIGxldCB0aGUgZnJhbWUgY2FsbCBhY3Jvc3MgdGhlIGJyaWRnZSB0byBub3RpZnkg
dGhlIGZvcm0gZGVsZWdhdGUuIAogICAgIGlmICghbV9yZXBsYWNlKSB7Ci0gICAgICAgIGlmIChh
dXRvIHRleHRDb250cm9sID0gbWFrZVJlZlB0cihlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9z
ZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7IHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5m
b2N1c2VkKCkpCisgICAgICAgIGlmIChSZWZQdHIgdGV4dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsgdGV4dENvbnRyb2wgJiYg
dGV4dENvbnRyb2wtPmZvY3VzZWQoKSkKICAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbC5nZXQoKSk7CiAgICAgfQog
CkBAIC05OTksNyArOTk5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgLy8gRG9uJ3QgbmVlZCBhIHBsYWNlaG9sZGVyIHdoZW4gZGVsZXRpbmcgYSBz
ZWxlY3Rpb24gdGhhdCBzdGFydHMganVzdCBiZWZvcmUgYSB0YWJsZQogICAgICAgICAvLyBhbmQg
ZW5kcyBpbnNpZGUgaXQgKHdlIGRvIG5lZWQgcGxhY2Vob2xkZXJzIHRvIGhvbGQgb3BlbiBlbXB0
eSBjZWxscywgYnV0IHRoYXQncwogICAgICAgICAvLyBoYW5kbGVkIGVsc2V3aGVyZSkuCi0gICAg
ICAgIGlmIChhdXRvIHRhYmxlID0gbWFrZVJlZlB0cihpc0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxl
KG1fc2VsZWN0aW9uVG9EZWxldGUudmlzaWJsZVN0YXJ0KCkpKSkgeworICAgICAgICBpZiAoUmVm
UHRyIHRhYmxlID0gaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShtX3NlbGVjdGlvblRvRGVsZXRl
LnZpc2libGVTdGFydCgpKSkgewogICAgICAgICAgICAgaWYgKG1fc2VsZWN0aW9uVG9EZWxldGUu
ZW5kKCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoKnRhYmxlKSkKICAgICAgICAg
ICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IGZhbHNlOwogICAgICAgICB9CkBAIC0xMDQ4LDcg
KzEwNDgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ym9vbCBzaG91bGRSZWJhbGFjZVdoaXRlU3BhY2UgPSB0cnVlOwogICAgIGlmICghZG9jdW1lbnQo
KS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2VzSW5TZWN1cmVG
aWVsZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKG1fZW5kaW5n
UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7IGlzPFRleHQ+KGVuZE5vZGUpKSB7CisgICAgICAg
IGlmIChSZWZQdHIgZW5kTm9kZSA9IG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsg
aXM8VGV4dD4oZW5kTm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNh
c3Q8VGV4dD4oKmVuZE5vZGUpOwogICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIHNj
cmlwdERpc2FsbG93ZWRTY29wZTsKICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZS5sZW5ndGgoKSAm
JiB0ZXh0Tm9kZS5yZW5kZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cAppbmRleCA5MGVjZTRjY2JjM2MyNjBjYzhkODI5NzAxZTg2NTJhOWYwYzcxZDgwLi5mOTVhMzFj
NTM5MTJkMDNiYWZmNGNjODU3MDAyYjVjMWNkMzU5OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRDb21tYW5kLmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3Qg
U3RyCiAgICAgYXV0byogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
OwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIG5vZGUgPSBtYWtl
UmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFz
RWRpdGFibGVBWFJvbGUpKTsKKyAgICBSZWZQdHIgbm9kZSB7IGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRpdGFibGVBWFJvbGUpIH07CiAgICAgY2Fj
aGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obm9kZS5nZXQoKSwgdHlwZSwgdGV4
dCwgcG9zaXRpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBiZWZi
NzBmNmMyYTIxZmQ2M2I5NzIyMmE4NzU2ZmQ1NGU3ZmYyMWEyLi45MGZkYjRjMGQ1OTRjYWM4NGRh
Y2ViMWZmZGYxY2E0M2Y4MDhiZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTU1MCw3ICs1NTAsNyBAQCBOb2RlKiBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKE5vZGUq
IG5vZGUpCiB7CiAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gbnVsbHB0cjsKICAgICBhdXRvKiBy
b290RWRpdGFibGVFbGVtZW50ID0gbm9kZSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6
IG51bGxwdHI7Ci0gICAgZm9yIChhdXRvIGN1cnJlbnROb2RlID0gbWFrZVJlZlB0cihub2RlKTsg
Y3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkgewor
ICAgIGZvciAoUmVmUHRyIGN1cnJlbnROb2RlID0gbm9kZTsgY3VycmVudE5vZGU7IGN1cnJlbnRO
b2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoYXV0byogcmVu
ZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKCFyZW5k
ZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkgfHwgaGFzQVJlbmRlcmVkRGVzY2VuZGFudChjdXJyZW50
Tm9kZS5nZXQoKSwgcHJldmlvdXNOb2RlKSB8fCByb290RWRpdGFibGVFbGVtZW50ID09IGN1cnJl
bnROb2RlLmdldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c05vZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNDk1M2IxMzk0N2JlMGJjOTA4MDJkNDMwMjc1MTdm
YjFlYTZhMjhkOC4uNDYwOWY1YTczZjliODc1Mzg0ZWIzMGE0YzQwYTEwYmEyY2I0ZTY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjgzLDcgKzI4Myw3IEBAIFZpc2libGVTZWxl
Y3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbjsKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgdGV4dCBjb250cm9s
LCBhbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIG91dHNpZGUgb2YgaXRzIHNoYWRvdyB0cmVl
LAogICAgIC8vIHRoZW4gdXNlIHRoZSBzYXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgdGV4dCBjb250
cm9sLgotICAgIGlmIChhdXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoZXZlbnQtPnRhcmdldCgpKTsg
aXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KHRhcmdldCkgJiYgZG93bmNhc3Q8RWxlbWVu
dD4oKnRhcmdldCkuaXNUZXh0RmllbGQoKSkgeworICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0gZXZl
bnQtPnRhcmdldCgpOyBpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4odGFyZ2V0KSAmJiBk
b3duY2FzdDxFbGVtZW50PigqdGFyZ2V0KS5pc1RleHRGaWVsZCgpKSB7CiAgICAgICAgIGF1dG8g
c3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8
IHRhcmdldCAhPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQpKSB7CiAgICAgICAgICAg
ICBpZiAoYXV0byByYW5nZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigq
dGFyZ2V0KS5zZWxlY3Rpb24oKSkKQEAgLTY2OSw3ICs2NjksNyBAQCBib29sIEVkaXRvcjo6c2hv
dWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IHN0ZDo6
b3B0aW9uYQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICBhdXRvIGNoaWxkID0gbWFrZVJlZlB0cihmcmFnbWVudC5maXJzdENoaWxkKCkpOworICAg
IFJlZlB0ciBjaGlsZCB7IGZyYWdtZW50LmZpcnN0Q2hpbGQoKSB9OwogICAgIGlmIChpczxDaGFy
YWN0ZXJEYXRhPihjaGlsZCkgJiYgZnJhZ21lbnQubGFzdENoaWxkKCkgPT0gY2hpbGQpCiAgICAg
ICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dChkb3duY2FzdDxDaGFyYWN0ZXJE
YXRhPigqY2hpbGQpLmRhdGEoKSwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVuQWN0aW9uKTsKIApA
QCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKCFpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIG5vZGVUb0NoZWNrID0gbWFrZVJlZlB0cihzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVu
dCgpKTsKKyAgICBSZWZQdHIgbm9kZVRvQ2hlY2sgeyBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxl
bWVudCgpIH07CiAgICAgaWYgKCFub2RlVG9DaGVjaykKICAgICAgICAgcmV0dXJuOwogCkBAIC03
ODAsNyArNzgwLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmcKIHZvaWQgRWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0
aW9uKQogewogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7
Ci0gICAgICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoZW5kaW5nU2VsZWN0aW9uLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgIFJlZlB0ciBub2RlIHsgZW5kaW5nU2VsZWN0aW9u
LnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSB9OwogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAg
Y2FjaGUtPnBvc3ROb3RpZmljYXRpb24obm9kZS5nZXQoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1
ZUNoYW5nZWQsIFBvc3RUYXJnZXQ6Ok9ic2VydmFibGVQYXJlbnQpOwogICAgIH0KQEAgLTc5OSw3
ICs3OTksNyBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiAgICAgUmVm
UHRyPE5vZGU+IHN0YXJ0Tm9kZTsKICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpIHsKICAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICBh
dXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgUmVmUHRyIGVu
ZE5vZGUgeyBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKSB9OwogICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2soc3RhcnRO
b2RlLmdldCgpKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlLmdldCgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKQEAgLTgyOSw4ICs4MjksOCBAQCBUcmlTdGF0ZSBF
ZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmIChl
bmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAg
ICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAg
IGF1dG8gc3RhcnROb2RlID0gbWFrZVJlZlB0cihlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSk7Ci0gICAgICAg
IGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpKTsKKyAgICAgICAgUmVm
UHRyIHN0YXJ0Tm9kZSB7IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpIH07CisgICAgICAgIFJlZlB0ciBlbmRO
b2RlIHsgZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSwgdWxUYWcpIH07CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9k
ZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6
VHJ1ZTsKICAgICB9CkBAIC04NDQsOCArODQ0LDggQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rp
b25PcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKICAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcp
KQogICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwogICAgIH0gZWxzZSBpZiAobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byBzdGFydE5vZGUg
PSBtYWtlUmVmUHRyKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKTsKLSAgICAgICAgYXV0byBlbmROb2RlID0g
bWFrZVJlZlB0cihlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZykpOworICAgICAgICBSZWZQdHIgc3RhcnROb2RlIHsg
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpLCBvbFRhZykgfTsKKyAgICAgICAgUmVmUHRyIGVuZE5vZGUgeyBlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBv
bFRhZykgfTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9
PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwogICAgIH0KQEAg
LTkzNCw3ICs5MzQsNyBAQCB2b2lkIEVkaXRvcjo6Y2xlYXJMYXN0RWRpdENvbW1hbmQoKQogCiBS
ZWZQdHI8RWxlbWVudD4gRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIHsKLSAgICBhdXRvIHRhcmdldCA9IG1ha2VSZWZQ
dHIoc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpKTsKKyAgICBSZWZQdHIgdGFyZ2V0IHsgc2Vs
ZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpIH07CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHRh
cmdldCA9IGRvY3VtZW50KCkuYm9keU9yRnJhbWVzZXQoKTsKICAgICBpZiAoIXRhcmdldCkKQEAg
LTk2NCw3ICs5NjQsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0
eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAKICAgICBTdHJpbmcgaW5w
dXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24p
OwogICAgIFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0
eWxlQW5kQWN0aW9uKCpzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgYXV0byBlbGVtZW50ID0g
bWFrZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSk7CisgICAgUmVmUHRyIGVsZW1lbnQgeyBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB9OwogCiAgICAgaWYgKGVsZW1lbnQg
JiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5w
dXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CkBAIC05OTksNyArOTk5LDcgQEAgdm9pZCBF
ZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW8KIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBl
TmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZl
bnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5bGUsIGVk
aXRpbmdBY3Rpb24pOwotICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkpOworICAgIFJlZlB0
ciBlbGVtZW50IHsgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFi
bGVFbGVtZW50KCkgfTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2
ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKQEAgLTEwNzks
OCArMTA3OSw4IEBAIHZvaWQgRWRpdG9yOjpvdXRkZW50KCkKIAogc3RhdGljIHZvaWQgbm90aWZ5
VGV4dEZyb21Db250cm9scyhFbGVtZW50KiBzdGFydFJvb3QsIEVsZW1lbnQqIGVuZFJvb3QpCiB7
Ci0gICAgYXV0byBzdGFydGluZ1RleHRDb250cm9sID0gIG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4
dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFydFJvb3QpKSk7Ci0g
ICAgYXV0byBlbmRpbmdUZXh0Q29udHJvbCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbmRSb290KSkpOworICAgIFJlZlB0
ciBzdGFydGluZ1RleHRDb250cm9sIHsgZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShzdGFydFJvb3QpKSB9OworICAgIFJlZlB0ciBlbmRpbmdUZXh0
Q29udHJvbCB7IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUoZW5kUm9vdCkpIH07CiAgICAgaWYgKHN0YXJ0aW5nVGV4dENvbnRyb2wpCiAgICAgICAg
IHN0YXJ0aW5nVGV4dENvbnRyb2wtPmRpZEVkaXRJbm5lclRleHRWYWx1ZSgpOwogICAgIGlmIChl
bmRpbmdUZXh0Q29udHJvbCAmJiBzdGFydGluZ1RleHRDb250cm9sICE9IGVuZGluZ1RleHRDb250
cm9sKQpAQCAtMTExMiw3ICsxMTEyLDcgQEAgYm9vbCBFZGl0b3I6OndpbGxBcHBseUVkaXRpbmco
Q29tcG9zaXRlRWRpdENvbW1hbmQmIGNvbW1hbmQsIFZlY3RvcjxSZWZQdHI8U3RhdGkKICAgICBp
ZiAoIWNvbW1hbmQuc2hvdWxkRGlzcGF0Y2hJbnB1dEV2ZW50cygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGF1dG8gY29tcG9zaXRpb24gPSBtYWtlUmVmUHRyKGNvbW1hbmQuY29tcG9z
aXRpb24oKSk7CisgICAgUmVmUHRyIGNvbXBvc2l0aW9uIHsgY29tbWFuZC5jb21wb3NpdGlvbigp
IH07CiAgICAgaWYgKCFjb21wb3NpdGlvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTEz
MDMsNyArMTMwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0
RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgLy8gdGhhdCBpcyBj
b250YWluZWQgaW4gdGhlIGV2ZW50IHRhcmdldC4KICAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb25G
b3JDb21tYW5kKHRyaWdnZXJpbmdFdmVudCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHNlbGVjdGlvblN0YXJ0ID0gbWFrZVJlZlB0
cihzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgICAgICBpZiAoUmVm
UHRyIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkg
ewogICAgICAgICAgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudChzZWxlY3Rpb25TdGFydC0+ZG9j
dW1lbnQoKSk7CiAKICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdGV4dApAQCAtMTYwNCw3ICsx
NjA0LDcgQEAgUGFzdGVib2FyZFdyaXRlckRhdGE6OlVSTERhdGEgRWRpdG9yOjpwYXN0ZWJvYXJk
V3JpdGVyVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdAogCiB2b2lkIEVkaXRvcjo6Y29weUltYWdl
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBhdXRvIGVsZW1lbnQgPSBtYWtl
UmVmUHRyKHJlc3VsdC5pbm5lck5vblNoYXJlZEVsZW1lbnQoKSk7CisgICAgUmVmUHRyIGVsZW1l
bnQgeyByZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50KCkgfTsKICAgICBpZiAoIWVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTY0Myw3ICsxNjQzLDcgQEAgdm9pZCBFZGl0b3I6OnJl
bmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9p
bWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7
CisgICAgUmVmUHRyIHN0YXJ0Q29udGFpbmVyIHsgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSB9OwogICAgIGlmICghc3RhcnRDb250YWlu
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg4Nyw3ICsxODg3LDcgQEAgdm9pZCBFZGl0b3I6
OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAg
ICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIGF1dG8gZm9jdXNlZEVsZW1lbnQgPSBtYWtlUmVm
UHRyKGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSk7CisgICAgUmVmUHRyIGZvY3VzZWRFbGVt
ZW50IHsgZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpIH07CiAgICAgaWYgKGZvY3VzZWRFbGVt
ZW50ICYmIGZvY3VzZWRFbGVtZW50LT5pc1RleHRGaWVsZCgpKSB7CiAgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gV3JpdGluZ0RpcmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE5MTQsNyArMTkxNCw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGlu
Z0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICBhdXRvIHJlc3VsdCA9IFdy
aXRpbmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCiAgICAgUG9zaXRpb24gcG9zID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVu
dCgpOwotICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zLmRlcHJlY2F0ZWROb2RlKCkpOwor
ICAgIFJlZlB0ciBub2RlIHsgcG9zLmRlcHJlY2F0ZWROb2RlKCkgfTsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTE5NjUsNyArMTk2NSw3IEBAIHZvaWQgRWRp
dG9yOjpjb25maXJtT3JDYW5jZWxDb21wb3NpdGlvbkFuZE5vdGlmeUNsaWVudCgpCiAgICAgaWYg
KCFoYXNDb21wb3NpdGlvbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGZyYW1lID0g
bWFrZVJlZlB0cihtX2RvY3VtZW50LmZyYW1lKCkpOworICAgIFJlZlB0ciBmcmFtZSB7IG1fZG9j
dW1lbnQuZnJhbWUoKSB9OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjA4Nyw3ICsyMDg3LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICBjbGllbnQoKS0+
c3RhcnREZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9ucygpOwog
I2VuZGlmCiAKLSAgICBhdXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS5mb2N1c2Vk
RWxlbWVudCgpKTsKKyAgICBSZWZQdHIgdGFyZ2V0IHsgZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVu
dCgpIH07CiAgICAgaWYgKHRhcmdldCkgewogICAgICAgICAvLyBEaXNwYXRjaCBhbiBhcHByb3By
aWF0ZSBjb21wb3NpdGlvbiBldmVudCB0byB0aGUgZm9jdXNlZCBub2RlLgogICAgICAgICAvLyBX
ZSBjaGVjayB0aGUgY29tcG9zaXRpb24gc3RhdHVzIGFuZCBjaG9vc2UgYW4gYXBwcm9wcmlhdGUg
Y29tcG9zaXRpb24gZXZlbnQgc2luY2UgdGhpcwpAQCAtMjEzNyw5ICsyMTM3LDkgQEAgdm9pZCBF
ZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUg
Y29tcG9zaXRpb24gbm93LgogICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOwogICAgICAgICBQb3NpdGlv
biBleHRlbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwot
ICAgICAgICBhdXRvIGJhc2VOb2RlID0gbWFrZVJlZlB0cihiYXNlLmRlcHJlY2F0ZWROb2RlKCkp
OworICAgICAgICBSZWZQdHIgYmFzZU5vZGUgeyBiYXNlLmRlcHJlY2F0ZWROb2RlKCkgfTsKICAg
ICAgICAgdW5zaWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKLSAgICAgICAgYXV0byBleHRlbnROb2RlID0gbWFrZVJlZlB0cihleHRlbnQuZGVwcmVjYXRl
ZE5vZGUoKSk7CisgICAgICAgIFJlZlB0ciBleHRlbnROb2RlIHsgZXh0ZW50LmRlcHJlY2F0ZWRO
b2RlKCkgfTsKICAgICAgICAgdW5zaWduZWQgZXh0ZW50T2Zmc2V0ID0gZXh0ZW50LmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKGlzPFRleHQ+KGJhc2VOb2RlKSAmJiBi
YXNlTm9kZSA9PSBleHRlbnROb2RlICYmIGJhc2VPZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpID09IGV4
dGVudE9mZnNldCkgewpAQCAtMjI1MSw3ICsyMjUxLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIAogICAg
IC8vIHRvcE5vZGUgZGVmaW5lcyB0aGUgd2hvbGUgcmFuZ2Ugd2Ugd2FudCB0byBvcGVyYXRlIG9u
IAotICAgIGF1dG8gdG9wTm9kZSA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChwb3Np
dGlvbikpOworICAgIFJlZlB0ciB0b3BOb2RlIHsgaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlv
bikgfTsKICAgICBpZiAodG9wTm9kZSkKICAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS5lbmQg
PSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCp0b3BOb2RlKTsKIApAQCAtMjU2
Myw3ICsyNTYzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1Rv
V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHdvcmRTdGFydCwKICAgICAgICAgICAgIGlmIChu
ZXh0UG9zaXRpb24uaXNOdWxsKCkgfHwgbmV4dFBvc2l0aW9uID09IHNwZWxsQ2hlY2tpbmdFbmQp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGlmIChhdXRvIGNvbnRhaW5l
ckVsZW1lbnQgPSBtYWtlUmVmUHRyKG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnVwc3Ry
ZWFtKCkuY29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoUmVm
UHRyIGNvbnRhaW5lckVsZW1lbnQgPSBuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51cHN0
cmVhbSgpLmNvbnRhaW5lck9yUGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFjb250YWluZXJFbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjY3MiwxMSArMjY3MiwxMSBAQCBi
b29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAog
ewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gZWxlbWVu
dCA9IG1ha2VSZWZQdHIoaXM8RWxlbWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50KCkpOworICAgIFJlZlB0ciBlbGVtZW50ID0gaXM8RWxl
bWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVt
ZW50KCk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KGVsZW1lbnQtPmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8g
dGV4dENvbnRyb2wgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoZWxlbWVudC5nZXQoKSkpKSkKKyAgICAgICAgaWYgKFJlZlB0
ciB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUoZWxlbWVudC5nZXQoKSkpKQogICAgICAgICAgICAgcmV0dXJuIHRleHRDb250
cm9sLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiAgICAgfQogICAgIHJldHVybiBlbGVtZW50
LT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0yOTExLDcgKzI5MTEsNyBAQCB2b2lkIEVk
aXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJl
c2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCBy
ZXBsYWNlbWVudCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAg
ICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byByb290ID0gbWFr
ZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChSZWZQdHIgcm9vdCA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdC5nZXQoKSwgQVhP
YmplY3RDYWNoZTo6QVhBdXRvY29ycmVjdGlvbk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0K
IApAQCAtMzMzOCw3ICszMzM4LDcgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVRleHRQbGFjZWhvbGRl
cihUZXh0UGxhY2Vob2xkZXJFbGVtZW50JiBwbGFjZWhvbGRlcikKICAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwogCiAgICAgLy8gU2F2ZSBvZmYgc3RhdGUg
c28gdGhhdCB3ZSBjYW4gc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb3NpdGlvbiB0byBqdXN0IGJl
Zm9yZSB0aGUgcGxhY2Vob2xkZXIgZWxlbWVudCBhZnRlciByZW1vdmFsLgotICAgIGF1dG8gc2F2
ZWRSb290RWRpdGFibGVFbGVtZW50ID0gbWFrZVJlZlB0cihwbGFjZWhvbGRlci5yb290RWRpdGFi
bGVFbGVtZW50KCkpOworICAgIFJlZlB0ciBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQgeyBwbGFj
ZWhvbGRlci5yb290RWRpdGFibGVFbGVtZW50KCkgfTsKICAgICBhdXRvIHNhdmVkUG9zaXRpb25C
ZWZvcmVQbGFjZWhvbGRlciA9IHBvc2l0aW9uQmVmb3JlTm9kZSgmcGxhY2Vob2xkZXIpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpOwogCiAgICAgLy8gRklYTUU6IFNhdmUgdGhlIGN1cnJlbnQg
c2VsZWN0aW9uIGlmIGl0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwbGFjZWhvbGRlciB3YXMgaW5z
ZXJ0ZWQKQEAgLTM0NjAsNyArMzQ2MCw3IEBAIHZvaWQgRWRpdG9yOjp0ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYShFbGVtZW50KiBlKQogCiB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0Jv
ZHlFbGVtZW50KCkgY29uc3QKIHsKLSAgICBhdXRvIGJvZHkgPSBtYWtlUmVmUHRyKGRvY3VtZW50
KCkuYm9keSgpKTsKKyAgICBSZWZQdHIgYm9keSB7IGRvY3VtZW50KCkuYm9keSgpIH07CiAgICAg
aWYgKCFib2R5KQogICAgICAgICByZXR1cm47CiAgICAgYm9keS0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdvcmRXcmFwLCBDU1NWYWx1ZUJyZWFrV29yZCk7CkBAIC0zODM4LDcg
KzM4MzgsNyBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKIAogc3Rh
dGljIFJlZlB0cjxOb2RlPiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBzdGFydGluZ05vZGUpCiB7
Ci0gICAgYXV0byBub2RlID0gbWFrZVJlZlB0cihzdGFydGluZ05vZGUpOworICAgIFJlZlB0ciBu
b2RlIHsgc3RhcnRpbmdOb2RlIH07CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgewogICAg
ICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxs
b3dlZFNjb3BlOwpAQCAtMzg3OSw3ICszODc5LDcgQEAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5
cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QK
IHsKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGJvb2wgb25seUFsbG93c1RleHRSZXBsYWNlbWVudCA9IGZhbHNlOwotICAg
IGlmIChhdXRvIGhvc3QgPSBtYWtlUmVmUHRyKHJvb3RFZGl0YWJsZUVsZW1lbnQuc2hhZG93SG9z
dCgpKSkKKyAgICBpZiAoUmVmUHRyIGhvc3QgPSByb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hv
c3QoKSkKICAgICAgICAgb25seUFsbG93c1RleHRSZXBsYWNlbWVudCA9IGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGhvc3QpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpob3N0KS5pc1NwZWxs
Y2hlY2tEaXNhYmxlZEV4Y2VwdFRleHRSZXBsYWNlbWVudCgpOwogICAgIGlmIChvbmx5QWxsb3dz
VGV4dFJlcGxhY2VtZW50KQogICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gdGV4dENoZWNr
aW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OwpAQCAtMzk4Myw3ICsz
OTgzLDcgQEAgU3RyaW5nIEVkaXRvcjo6cGxhdGZvcm1Db250ZW50VHlwZUZvckJsb2JUeXBlKGNv
bnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIAogc3RhdGljIFZlY3RvcjxUZXh0TGlzdD4gZWRpdGFi
bGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogewotICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKHBvc2l0aW9u
LmNvbnRhaW5lck5vZGUoKSk7CisgICAgUmVmUHRyIHN0YXJ0Q29udGFpbmVyIHsgcG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpIH07CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0
dXJuIHsgfTsKIApAQCAtNDA5Myw3ICs0MDkzLDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpm
b250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKQogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpOworICAgIFJlZlB0ciB0eXBpbmdTdHlsZSB7IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkudHlwaW5nU3R5bGUoKSB9OwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdT
dHlsZS0+c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpA
QCAtNDI4OCw3ICs0Mjg4LDcgQEAgY29uc3QgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JT
ZWxlY3Rpb25TdGFydChSZWZQdHI8Tm9kZT4mIG5vZGVUb1JlbW92ZSkKICAgICBpZiAoIXBvc2l0
aW9uLmlzQ2FuZGlkYXRlKCkgfHwgcG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKKyAgICBSZWZQdHIgdHlwaW5nU3R5bGUgeyBkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkgfTsKICAgICBpZiAoIXR5cGluZ1N0eWxl
IHx8ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuICZwb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCkBAIC00MzAxLDcgKzQzMDEsNyBA
QCBjb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KFJlZlB0
cjxOb2RlPiYgbm9kZVRvUmVtb3ZlKQogCiAgICAgYXV0byBwb3NpdGlvbk5vZGUgPSBwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFTU0VSVChwb3NpdGlvbk5vZGUpOwotICAgIGF1dG8g
cGFyZW50ID0gbWFrZVJlZlB0cihwb3NpdGlvbk5vZGUtPnBhcmVudE5vZGUoKSk7CisgICAgUmVm
UHRyIHBhcmVudCB7IHBvc2l0aW9uTm9kZS0+cGFyZW50Tm9kZSgpIH07CiAgICAgaWYgKCFwYXJl
bnQgfHwgcGFyZW50LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQuZ2V0KCkpLmhhc0V4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcAppbmRleCAzNDA1MjkxMWFhOTA4NDMyYTYzYTgzM2ZhN2NiZDlhNjdl
N2Q2ZjA3Li41YmZiMjYwMTRhNDNlNTJkMjJlZjZkODAxNWVhZWQ1NzVhZDFjZmExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVjdGlv
biwgc3RyZWFtIDw8ICJGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uICIgPDwgc2VsZWN0aW9u
KTsKIAotICAgIGF1dG8gcHJvdGVjdGVkRG9jdW1lbnQgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQu
Z2V0KCkpOworICAgIFJlZlB0ciBwcm90ZWN0ZWREb2N1bWVudCB7IG1fZG9jdW1lbnQuZ2V0KCkg
fTsKICAgICBpZiAoIXNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2Uoc2VsZWN0
aW9uLCBvcHRpb25zLCBhbGlnbiwgZ3JhbnVsYXJpdHkpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTE5MzYsMTMgKzE5MzYsMTMgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJh
bWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogewogICAgIC8vIEZpbmQgdGhlIHBh
cmVudCBmcmFtZTsgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8u
Ci0gICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5nZXQoKSk7CisgICAg
UmVmUHRyIGRvY3VtZW50IHsgbV9kb2N1bWVudC5nZXQoKSB9OwogICAgIGlmICghZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihkb2N1bWVudC0+
ZnJhbWUoKSk7CisgICAgUmVmUHRyIGZyYW1lIHsgZG9jdW1lbnQtPmZyYW1lKCkgfTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRy
KGZyYW1lLT50cmVlKCkucGFyZW50KCkpOworICAgIFJlZlB0ciBwYXJlbnQgeyBmcmFtZS0+dHJl
ZSgpLnBhcmVudCgpIH07CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBQ
YWdlKiBwYWdlID0gbV9kb2N1bWVudC0+cGFnZSgpOwpAQCAtMTk1OCwxMCArMTk1OCwxMCBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxl
Y3RlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3Ig
PGZyYW1lPiAob3IgZXZlbiA8b2JqZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgot
ICAgIGF1dG8gb3duZXJFbGVtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LT5vd25lckVsZW1l
bnQoKSk7CisgICAgUmVmUHRyIG93bmVyRWxlbWVudCB7IG1fZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpIH07CiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRv
IG93bmVyRWxlbWVudFBhcmVudCA9IG1ha2VSZWZQdHIob3duZXJFbGVtZW50LT5wYXJlbnROb2Rl
KCkpOworICAgIFJlZlB0ciBvd25lckVsZW1lbnRQYXJlbnQgeyBvd25lckVsZW1lbnQtPnBhcmVu
dE5vZGUoKSB9OwogICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50KQogICAgICAgICByZXR1cm47
CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNw
cAppbmRleCBmMWJjODAxNDRlOTdmZjE3MzgxNTcwMTFmODA3MDI0ZWM3YTVmMTY5Li44ODM3M2Ni
NGQ2MzJmM2E5NjJkNzU3ZWQxN2NjNGQ2YTlhYzZhZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWZQdHI8SFRN
TEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW5kOjppbnNlcnRMaXN0KERvY3VtZW50JiBkb2N1bWVu
dCwgVHlwZSB0eXBlKQogCiBIVE1MRWxlbWVudCogSW5zZXJ0TGlzdENvbW1hbmQ6OmZpeE9ycGhh
bmVkTGlzdENoaWxkKE5vZGUmIG5vZGUpCiB7Ci0gICAgYXV0byBwYXJlbnROb2RlID0gbWFrZVJl
ZlB0cihub2RlLnBhcmVudE5vZGUoKSk7CisgICAgUmVmUHRyIHBhcmVudE5vZGUgeyBub2RlLnBh
cmVudE5vZGUoKSB9OwogICAgIGlmIChwYXJlbnROb2RlICYmICFwYXJlbnROb2RlLT5oYXNSaWNo
bHlFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjksNyAr
MzI5LDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwKICAgICAgICAgLy8gaW4gbGlzdE5vZGUg
dGhhdCBjb21lcyBiZWZvcmUgbGlzdENoaWxkTm9kZSwgYXMgbGlzdENoaWxkTm9kZSBjb3VsZCBo
YXZlIGFuY2VzdG9ycwogICAgICAgICAvLyBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZS4gU28sIHdl
IHNwbGl0IHVwIHRvIGxpc3ROb2RlIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHBsYWNlaG9sZGVyCiAg
ICAgICAgIC8vIHdoZXJlIHdlJ3JlIGFib3V0IHRvIG1vdmUgbGlzdENoaWxkTm9kZSB0by4KLSAg
ICAgICAgaWYgKGF1dG8gbGlzdENoaWxkTm9kZVBhcmVudE5vZGUgPSBtYWtlUmVmUHRyKGxpc3RD
aGlsZE5vZGUtPnBhcmVudE5vZGUoKSk7IGxpc3RDaGlsZE5vZGVQYXJlbnROb2RlICYmIGxpc3RD
aGlsZE5vZGVQYXJlbnROb2RlICE9IGxpc3ROb2RlKQorICAgICAgICBpZiAoUmVmUHRyIGxpc3RD
aGlsZE5vZGVQYXJlbnROb2RlIHsgbGlzdENoaWxkTm9kZS0+cGFyZW50Tm9kZSgpIH07IGxpc3RD
aGlsZE5vZGVQYXJlbnROb2RlICYmIGxpc3RDaGlsZE5vZGVQYXJlbnROb2RlICE9IGxpc3ROb2Rl
KQogICAgICAgICAgICAgc3BsaXRFbGVtZW50KCpsaXN0Tm9kZSwgKnNwbGl0VHJlZVRvTm9kZSgq
bGlzdENoaWxkTm9kZSwgKmxpc3ROb2RlKS5nZXQoKSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZv
cmUobm9kZVRvSW5zZXJ0LnJlbGVhc2VOb25OdWxsKCksICpsaXN0Tm9kZSk7CiAgICAgfSBlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5lc3RlZExpc3RDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TmVzdGVkTGlzdENvbW1hbmQu
Y3BwCmluZGV4IGU2M2RmNjAzOWMxMWUxNzBkMWFiNTIzNWFlNDA5Y2MyOGEzOGRlNDguLjJhYmQ0
MWY5YjdjYWM3ZWJlY2U2M2JhYWRmMDQ2MTVjNDk1OTFmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TmVzdGVkTGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TmVzdGVkTGlzdENvbW1hbmQuY3BwCkBAIC00OSw3ICs0OSw3
IEBAIHZvaWQgSW5zZXJ0TmVzdGVkTGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChlbmRp
bmdTZWxlY3Rpb24oKS5pc05vbmVPck9ycGhhbmVkKCkgfHwgIWVuZGluZ1NlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRv
IGVuY2xvc2luZ0l0ZW0gPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGVuZGlu
Z1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCksIEhUTUxOYW1lczo6
bGlUYWcpKSkgeworICAgIGlmIChSZWZQdHIgZW5jbG9zaW5nSXRlbSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50
KCksIEhUTUxOYW1lczo6bGlUYWcpKSB7CiAgICAgICAgIGF1dG8gbmV3TGlzdEl0ZW0gPSBIVE1M
TElFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihu
ZXdMaXN0SXRlbS5jb3B5UmVmKCksICplbmNsb3NpbmdJdGVtKTsKICAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKHsgUG9zaXRpb24geyBuZXdMaXN0SXRlbS5wdHIoKSwgUG9zaXRpb246OlBvc2l0
aW9uSXNCZWZvcmVDaGlsZHJlbiB9LCBBZmZpbml0eTo6RG93bnN0cmVhbSB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAKaW5kZXggMzU2OTEyZDM5MTBkZjY1MzcxNmNlNTVhYzNhNTUzOWQ5
ODA4YTRmOS4uYjRjZmM5M2QwNjBhNmY3YTEzZjQwMWY2MTFjNDFkZWE3ZGUwOTEyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgUmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQ6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
KFJlZjxOb2QKIHZvaWQgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBw
bHkoKQogewogICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGNoaWxkcmVuOwotICAgIGF1dG8gcGFyZW50
ID0gbWFrZVJlZlB0cihtX25vZGUtPnBhcmVudE5vZGUoKSk7CisgICAgUmVmUHRyIHBhcmVudCB7
IG1fbm9kZS0+cGFyZW50Tm9kZSgpIH07CiAgICAgaWYgKCFwYXJlbnQgfHwgKG1fc2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPT0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNF
ZGl0YWJsZSAmJiAhaXNFZGl0YWJsZU5vZGUoKnBhcmVudCkpKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKaW5kZXggNDM3OWY1ZmQ1ZTMwMTFjZGZmYzQxNzU0YmVkMTAzNGYwZTQ3OTIyYS4uNmJlNTI4
NzdlZGFmZDY3NTMwMGNhYzMxMzE2NzNjMjYzMWE2NGJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTEzNiw3ICsxMzYs
NyBAQCBzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0
aW9uIHBvc2l0aW9uKQogICAgIC8vIHNhbWUuICBFLmcuLAogICAgIC8vICAgPGRpdj5mb29ePC9k
aXY+XgogICAgIC8vIFRoZSB0d28gcG9zaXRpb25zIGFib3ZlIGFyZSB0aGUgc2FtZSB2aXN1YWwg
cG9zaXRpb24sIGJ1dCB3ZSB3YW50IHRvIHN0YXkgaW4gdGhlIHNhbWUgYmxvY2suCi0gICAgYXV0
byBlbmNsb3NpbmdCbG9ja05vZGUgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKHBvc2l0aW9u
LmNvbnRhaW5lck5vZGUoKSkpOworICAgIFJlZlB0ciBlbmNsb3NpbmdCbG9ja05vZGUgeyBlbmNs
b3NpbmdCbG9jayhwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpIH07CiAgICAgZm9yIChQb3NpdGlv
biBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsgbmV4dFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSAh
PSBlbmNsb3NpbmdCbG9ja05vZGU7IHBvc2l0aW9uID0gbmV4dFBvc2l0aW9uKSB7CiAgICAgICAg
IGlmIChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHBvc2l0aW9uKSkKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTcxLDcgKzE3MSw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50
RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAgaWYg
KCFlZGl0YWJsZVJvb3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2hhZG93SG9zdCA9
IG1ha2VSZWZQdHIoZWRpdGFibGVSb290LT5zaGFkb3dIb3N0KCkpOworICAgIFJlZlB0ciBzaGFk
b3dIb3N0IHsgZWRpdGFibGVSb290LT5zaGFkb3dIb3N0KCkgfTsKICAgICBpZiAoIWVkaXRhYmxl
Um9vdC0+YXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0QmVmb3JlVGV4
dEluc2VydGVkRXZlbnQsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQogICAgICAgICAmJiAhKHNo
YWRvd0hvc3QgJiYgc2hhZG93SG9zdC0+cmVuZGVyZXIoKSAmJiBzaGFkb3dIb3N0LT5yZW5kZXJl
cigpLT5pc1RleHRDb250cm9sKCkpCiAgICAgICAgICYmIGVkaXRhYmxlUm9vdC0+aGFzUmljaGx5
RWRpdGFibGVTdHlsZSgpKSB7CkBAIC0xODAsNyArMTgwLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVu
dDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3Qg
VmlzaWIKICAgICB9CiAKICAgICBhdXRvIHBhZ2UgPSBjcmVhdGVQYWdlRm9yU2FuaXRpemluZ1dl
YkNvbnRlbnQoKTsKLSAgICBhdXRvIHN0YWdpbmdEb2N1bWVudCA9IG1ha2VSZWZQdHIocGFnZS0+
bWFpbkZyYW1lKCkuZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyIHN0YWdpbmdEb2N1bWVudCB7IHBh
Z2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkgfTsKICAgICBBU1NFUlQoc3RhZ2luZ0RvY3VtZW50
LT5ib2R5KCkpOwogCiAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlT2ZF
ZGl0YWJsZVJvb3QoZWRpdGFibGVSb290LmdldCgpKTsKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lk
IFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2RlcyhOb2RlKiBob2xkZXIp
CiB7CiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gdW5yZW5kZXJlZDsKIAotICAgIGZvciAoYXV0byBu
b2RlID0gbWFrZVJlZlB0cihob2xkZXItPmZpcnN0Q2hpbGQoKSk7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpub2RlLCBob2xkZXIpKSB7CisgICAgZm9yIChSZWZQdHIgbm9kZSA9
IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
bm9kZSwgaG9sZGVyKSkgewogICAgICAgICBpZiAoIWlzTm9kZVJlbmRlcmVkKCpub2RlKSAmJiAh
aXNUYWJsZVN0cnVjdHVyZU5vZGUobm9kZS5nZXQoKSkpCiAgICAgICAgICAgICB1bnJlbmRlcmVk
LmFwcGVuZCgqbm9kZSk7CiAgICAgfQpAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgUmVwbGFjZW1l
bnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2RlcyhOb2RlKiBjb250YWluZXIpCiAKICAg
ICAvLyBJbnRlcmNoYW5nZSBuZXdsaW5lcyBhdCB0aGUgInN0YXJ0IiBvZiB0aGUgaW5jb21pbmcg
ZnJhZ21lbnQgbXVzdCBiZQogICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgZnJh
Z21lbnQgb3IgdGhlIGZpcnN0IGxlYWYgaW4gdGhlIGZyYWdtZW50LgotICAgIGF1dG8gbm9kZSA9
IG1ha2VSZWZQdHIoY29udGFpbmVyLT5maXJzdENoaWxkKCkpOworICAgIFJlZlB0ciBub2RlIHsg
Y29udGFpbmVyLT5maXJzdENoaWxkKCkgfTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBp
ZiAoaXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBt
X2hhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQgPSB0cnVlOwpAQCAtNTM0LDEwICs1MzQsMTAg
QEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkTWVyZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBzb3VyY2UsIGNvbnN0IFYKICAgICBpZiAoc291cmNlLmlzTnVsbCgpIHx8IGRl
c3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNv
dXJjZU5vZGUgPSBtYWtlUmVmUHRyKHNvdXJjZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCkpOwotICAgIGF1dG8gZGVzdGluYXRpb25Ob2RlID0gbWFrZVJlZlB0cihkZXN0aW5hdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwotICAgIGF1dG8gc291cmNlQmxv
Y2sgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKHNvdXJjZU5vZGUuZ2V0KCkpKTsKLSAgICBh
dXRvIGRlc3RpbmF0aW9uQmxvY2sgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKGRlc3RpbmF0
aW9uTm9kZS5nZXQoKSkpOworICAgIFJlZlB0ciBzb3VyY2VOb2RlIHsgc291cmNlLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSB9OworICAgIFJlZlB0ciBkZXN0aW5hdGlvbk5vZGUg
eyBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkgfTsKKyAgICBS
ZWZQdHIgc291cmNlQmxvY2sgeyBlbmNsb3NpbmdCbG9jayhzb3VyY2VOb2RlLmdldCgpKSB9Owor
ICAgIFJlZlB0ciBkZXN0aW5hdGlvbkJsb2NrIHsgZW5jbG9zaW5nQmxvY2soZGVzdGluYXRpb25O
b2RlLmdldCgpKSB9OwogICAgIHJldHVybiAhZW5jbG9zaW5nTm9kZU9mVHlwZShzb3VyY2UuZGVl
cEVxdWl2YWxlbnQoKSwgJmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKQogICAgICAgICAmJiBz
b3VyY2VCbG9jawogICAgICAgICAmJiAoIXNvdXJjZUJsb2NrLT5oYXNUYWdOYW1lKGJsb2NrcXVv
dGVUYWcpIHx8IGlzTWFpbEJsb2NrcXVvdGUoc291cmNlQmxvY2suZ2V0KCkpKQpAQCAtNjQxLDcg
KzY0MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0
eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAKICAgICAgICAgU3R5bGVkRWxlbWVu
dCogZWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KG5vZGUuZ2V0KCkpOwogCi0gICAg
ICAgIGF1dG8gaW5saW5lU3R5bGUgPSBtYWtlUmVmUHRyKGVsZW1lbnQtPmlubGluZVN0eWxlKCkp
OworICAgICAgICBSZWZQdHIgaW5saW5lU3R5bGUgeyBlbGVtZW50LT5pbmxpbmVTdHlsZSgpIH07
CiAgICAgICAgIGF1dG8gbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShpbmxp
bmVTdHlsZS5nZXQoKSk7CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZSkgewogICAgICAgICAgICAg
aWYgKGlzPEhUTUxFbGVtZW50PigqZWxlbWVudCkpIHsKQEAgLTY2MCw3ICs2NjAsNyBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5
bGVTcGFuSW5saW5lKEluc2VydAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgYXV0byBjb250ZXh0ID0gbWFrZVJlZlB0cihlbGVtZW50LT5wYXJlbnROb2Rl
KCkpOworICAgICAgICAgICAgUmVmUHRyIGNvbnRleHQgeyBlbGVtZW50LT5wYXJlbnROb2RlKCkg
fTsKIAogICAgICAgICAgICAgLy8gSWYgTWFpbCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBh
c3RlIGFzIFF1b3RhdGlvbiBibG9ja3F1b3RlLCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEg
cXVvdGVkIHJlZ2lvbiwKICAgICAgICAgICAgIC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2Rl
IGFyZSBhbGxvd2VkIHRvIG92ZXJyaWRlIHRob3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwg
c2VlIDxyZGFyOi8vcHJvYmxlbS80OTMwOTg2PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+
LgpAQCAtNzk2LDE5ICs3OTYsMTkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWFr
ZUluc2VydGVkQ29udGVudFJvdW5kVHJpcHBhYmxlV2l0aEhUTUxUcmVlQnVpbGQKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChpc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZChk
b3duY2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpLmxvY2FsTmFtZSgpKSkgewotICAgICAgICAgICAg
aWYgKGF1dG8gcGFyYWdyYXBoRWxlbWVudCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZS5nZXQoKSksIHBUYWcpKSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gbWFrZVJlZlB0cihwYXJhZ3JhcGhFbGVtZW50
LT5wYXJlbnROb2RlKCkpOworICAgICAgICAgICAgaWYgKFJlZlB0ciBwYXJhZ3JhcGhFbGVtZW50
ID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9k
ZS5nZXQoKSksIHBUYWcpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyIHBhcmVudCB7IHBhcmFn
cmFwaEVsZW1lbnQtPnBhcmVudE5vZGUoKSB9OwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQg
JiYgcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVO
b2RlT3V0T2ZBbmNlc3Rvcigqbm9kZSwgKnBhcmFncmFwaEVsZW1lbnQsIGluc2VydGVkTm9kZXMp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzSGVhZGVyRWxlbWVu
dChub2RlLmdldCgpKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gaGVhZGVyRWxlbWVudCA9IG1h
a2VSZWZQdHIoaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUobm9kZS5nZXQoKSksIGlzSGVhZGVyRWxlbWVudCkpKSB7CisgICAgICAgICAgICBpZiAo
UmVmUHRyIGhlYWRlckVsZW1lbnQgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShwb3NpdGlv
bkluUGFyZW50QmVmb3JlTm9kZShub2RlLmdldCgpKSwgaXNIZWFkZXJFbGVtZW50KSkgewogICAg
ICAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtZW50LT5wYXJlbnROb2RlKCkgJiYgaGVhZGVyRWxl
bWVudC0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICAg
ICAgICAgICAgICBtb3ZlTm9kZU91dE9mQW5jZXN0b3IoKm5vZGUsICpoZWFkZXJFbGVtZW50LCBp
bnNlcnRlZE5vZGVzKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBuZXdTcGFuRWxlbWVudCA9IG1ha2VSZWZQdHIocmVwbGFjZUVsZW1lbnRXaXRoU3Bh
blByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpu
b2RlKSkpOworICAgICAgICAgICAgICAgICAgICBSZWZQdHIgbmV3U3BhbkVsZW1lbnQgeyByZXBs
YWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhkb3duY2Fz
dDxIVE1MRWxlbWVudD4oKm5vZGUpKSB9OwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE5v
ZGVzLmRpZFJlcGxhY2VOb2RlKG5vZGUuZ2V0KCksIG5ld1NwYW5FbGVtZW50LmdldCgpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKE5vZGUmIG5vZGUs
IE5vZGUmIGFuY2VzdG9yLAogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CiAKICAgICBib29sIHNhZmVUb1JlbW92ZUFuY2VzdG9yID0gdHJ1ZTsK
LSAgICBmb3IgKGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKGFuY2VzdG9yLmZpcnN0Q2hpbGQoKSk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZWZQdHIg
Y2hpbGQgPSBhbmNlc3Rvci5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmIChpczxUZXh0PihjaGlsZCkgJiYgaGFzUmVuZGVyZWRU
ZXh0KGRvd25jYXN0PFRleHQ+KCpjaGlsZCkpKSB7CiAgICAgICAgICAgICBzYWZlVG9SZW1vdmVB
bmNlc3RvciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04NjYsNyArODY2LDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0
RW5kcyhJbnNlcnRlZE5vZGVzJiBpbnMKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byBsYXN0TGVhZkluc2VydGVkID0g
bWFrZVJlZlB0cihpbnNlcnRlZE5vZGVzLmxhc3RMZWFmSW5zZXJ0ZWQoKSk7CisgICAgUmVmUHRy
IGxhc3RMZWFmSW5zZXJ0ZWQgeyBpbnNlcnRlZE5vZGVzLmxhc3RMZWFmSW5zZXJ0ZWQoKSB9Owog
ICAgIGlmIChpczxUZXh0PihsYXN0TGVhZkluc2VydGVkKSAmJiAhaGFzUmVuZGVyZWRUZXh0KGRv
d25jYXN0PFRleHQ+KCpsYXN0TGVhZkluc2VydGVkKSkKICAgICAgICAgJiYgIWVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShsYXN0TGVhZkluc2VydGVk
LmdldCgpKSwgc2VsZWN0VGFnKQogICAgICAgICAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCkpLCBzY3Jp
cHRUYWcpKSB7CkBAIC04NzgsNyArODc4LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcyhJbnNlcnRlZE5vZGVzJiBpbnMKIAog
ICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgZmlyc3ROb2RlSW5zZXJ0ZWQg
aXNuJ3QgaW5zaWRlIGEgc2VsZWN0IG9yIHNjcmlwdCBlbGVtZW50CiAgICAgLy8gYmVjYXVzZSBp
dCBpcyBhIHRvcCBsZXZlbCBub2RlIGluIHRoZSBmcmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3Qg
aW5zZXJ0IGludG8gdGhvc2UgZWxlbWVudHMuCi0gICAgYXV0byBmaXJzdE5vZGVJbnNlcnRlZCA9
IG1ha2VSZWZQdHIoaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpKTsKKyAgICBSZWZQ
dHIgZmlyc3ROb2RlSW5zZXJ0ZWQgeyBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCkg
fTsKICAgICBpZiAoaXM8VGV4dD4oZmlyc3ROb2RlSW5zZXJ0ZWQpICYmICFoYXNSZW5kZXJlZFRl
eHQoZG93bmNhc3Q8VGV4dD4oKmZpcnN0Tm9kZUluc2VydGVkKSkpIHsKICAgICAgICAgaW5zZXJ0
ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShmaXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAg
IHJlbW92ZU5vZGUoKmZpcnN0Tm9kZUluc2VydGVkKTsKQEAgLTg4OCw3ICs4ODgsNyBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRz
KEluc2VydGVkTm9kZXMmIGlucwogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCA8c2VsZWN0
PiB0YWdzPwotICAgIGF1dG8gZW5jbG9zaW5nU2VsZWN0ID0gbWFrZVJlZlB0cihlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LCBzZWxlY3RUYWcpKTsKKyAgICBS
ZWZQdHIgZW5jbG9zaW5nU2VsZWN0IHsgZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9lbmRPZklu
c2VydGVkQ29udGVudCwgc2VsZWN0VGFnKSB9OwogICAgIHJldHVybiBlbmNsb3NpbmdTZWxlY3Qg
PyBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuY2xvc2luZ1NlbGVjdC5nZXQoKSkgOiBtX2Vu
ZE9mSW5zZXJ0ZWRDb250ZW50OwogfQogCkBAIC05MDEsNyArOTAxLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29u
dGVudCgpIGNvbnMKIC8vIGF2b2lkIGRvaW5nIGEgbGF5b3V0Lgogc3RhdGljIGJvb2wgaGFuZGxl
U3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbihSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCwg
Y29uc3QgUG9zaXRpb24mIGluc2VydGlvblBvcykKIHsKLSAgICBhdXRvIHRvcE5vZGUgPSBtYWtl
UmVmUHRyKGZyYWdtZW50LmZpcnN0Q2hpbGQoKSk7CisgICAgUmVmUHRyIHRvcE5vZGUgeyBmcmFn
bWVudC5maXJzdENoaWxkKCkgfTsKIAogICAgIC8vIEhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlIHdl
IGFyZSBkb2luZyBQYXN0ZSBhcyBRdW90YXRpb24gb3IgcGFzdGluZyBpbnRvIHF1b3RlZCBjb250
ZW50IGlzIG1vcmUgY29tcGxpY2F0ZWQgKHNlZSBoYW5kbGVTdHlsZVNwYW5zKQogICAgIC8vIGFu
ZCBkb2Vzbid0IHJlY2VpdmUgdGhlIG9wdGltaXphdGlvbi4KQEAgLTk0MCw3ICs5NDAsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKEluc2VydGVkTm9k
ZXMmIGluc2VydGVkTm9kZXMpCiAgICAgLy8gVGhlIHN0eWxlIHNwYW4gdGhhdCBjb250YWlucyB0
aGUgc291cmNlIGRvY3VtZW50J3MgZGVmYXVsdCBzdHlsZSBzaG91bGQgYmUgYXQKICAgICAvLyB0
aGUgdG9wIG9mIHRoZSBmcmFnbWVudCwgYnV0IE1haWwgc29tZXRpbWVzIGFkZHMgYSB3cmFwcGVy
IChmb3IgUGFzdGUgQXMgUXVvdGF0aW9uKSwKICAgICAvLyBzbyBzZWFyY2ggZm9yIHRoZSB0b3Ag
bGV2ZWwgc3R5bGUgc3BhbiBpbnN0ZWFkIG9mIGFzc3VtaW5nIGl0J3MgYXQgdGhlIHRvcC4KLSAg
ICBmb3IgKGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNl
cnRlZCgpKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAg
Zm9yIChSZWZQdHIgbm9kZSA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChpc0xl
Z2FjeUFwcGxlU3R5bGVTcGFuKG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICB3cmFwcGluZ1N0
eWxlU3BhbiA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8SFRNTEVsZW1lbnQ+KFdURk1vdmUobm9kZSkp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTMsNyArOTUzLDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVzJiBpbnNlcnRlZE5v
ZGVzKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0eWxlID0gRWRpdGluZ1N0eWxlOjpj
cmVhdGUod3JhcHBpbmdTdHlsZVNwYW4tPmlubGluZVN0eWxlKCkpOwotICAgIGF1dG8gY29udGV4
dCA9IG1ha2VSZWZQdHIod3JhcHBpbmdTdHlsZVNwYW4tPnBhcmVudE5vZGUoKSk7CisgICAgUmVm
UHRyIGNvbnRleHQgeyB3cmFwcGluZ1N0eWxlU3Bhbi0+cGFyZW50Tm9kZSgpIH07CiAKICAgICAv
LyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJs
b2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLAogICAg
IC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJyaWRlIHRo
b3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTMwOTg2
PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgpAQCAtMTAzMywxMiArMTAzMywxMiBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZUVuZElmTmVlZGVkKCkKIAogc3RhdGlj
IFJlZlB0cjxOb2RlPiBlbmNsb3NpbmdJbmxpbmUoTm9kZSogbm9kZSkKIHsKLSAgICBhdXRvIGN1
cnJlbnROb2RlID0gbWFrZVJlZlB0cihub2RlKTsKLSAgICB3aGlsZSAoYXV0byBwYXJlbnQgPSBt
YWtlUmVmUHRyKGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpKSB7CisgICAgUmVmUHRyIGN1cnJl
bnROb2RlIHsgbm9kZSB9OworICAgIHdoaWxlIChSZWZQdHIgcGFyZW50ID0gY3VycmVudE5vZGUt
PnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXNCbG9ja0Zsb3dFbGVtZW50KCpwYXJlbnQp
IHx8IHBhcmVudC0+aGFzVGFnTmFtZShib2R5VGFnKSkKICAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50Tm9kZTsKICAgICAgICAgLy8gU3RvcCBpZiBhbnkgcHJldmlvdXMgc2libGluZyBpcyBhIGJs
b2NrLgotICAgICAgICBmb3IgKGF1dG8gc2libGluZyA9IG1ha2VSZWZQdHIoY3VycmVudE5vZGUt
PnByZXZpb3VzU2libGluZygpKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3Vz
U2libGluZygpKSB7CisgICAgICAgIGZvciAoUmVmUHRyIHNpYmxpbmcgPSBjdXJyZW50Tm9kZS0+
cHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1Np
YmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGlzQmxvY2tGbG93RWxlbWVudCgqc2libGluZykp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOwogICAgICAgICB9CkBAIC0xMTI3
LDEyICsxMTI3LDEyIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgIGJvb2wgc2VsZWN0aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGggPSBpc0VuZE9mUGFyYWdyYXBo
KHZpc2libGVFbmQpOwogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdyYXBo
ID0gaXNTdGFydE9mUGFyYWdyYXBoKHZpc2libGVTdGFydCk7CiAKLSAgICBhdXRvIHN0YXJ0Qmxv
Y2sgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBSZWZQdHIgc3RhcnRCbG9jayB7IGVuY2xvc2lu
Z0Jsb2NrKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpIH07
CiAKICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb3MgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBi
b29sIHNob3VsZEhhbmRsZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNl
cnRpb25Qb3MsIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSAmJiAh
bV9pZ25vcmVNYWlsQmxvY2txdW90ZTsKICAgICBib29sIHNlbGVjdGlvbklzUGxhaW5UZXh0ID0g
IXNlbGVjdGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAgIGF1dG8gY3VycmVudFJv
b3QgPSBtYWtlUmVmUHRyKHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCkpOworICAgIFJl
ZlB0ciBjdXJyZW50Um9vdCB7IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCkgfTsKIAog
ICAgIGlmICgoc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVu
ZFdhc0VuZE9mUGFyYWdyYXBoICYmICFzaG91bGRIYW5kbGVNYWlsQmxvY2txdW90ZSkKICAgICAg
ICAgfHwgc3RhcnRCbG9jayA9PSBjdXJyZW50Um9vdCB8fCBpc0xpc3RJdGVtKHN0YXJ0QmxvY2su
Z2V0KCkpIHx8IHNlbGVjdGlvbklzUGxhaW5UZXh0KQpAQCAtMTE4OCw3ICsxMTg4LDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKHNob3VsZEhhbmRs
ZU1haWxCbG9ja3F1b3RlICYmIG1fcHJldmVudE5lc3RpbmcgJiYgIShlbmNsb3NpbmdOb2RlT2ZU
eXBlKGluc2VydGlvblBvcywgJmlzVGFibGVTdHJ1Y3R1cmVOb2RlKSkpIHsKICAgICAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6Y3JlYXRlKGRvY3Vt
ZW50KCkpKTsgCiAgICAgICAgIC8vIFRoaXMgd2lsbCBsZWF2ZSBhIGJyIGJldHdlZW4gdGhlIHNw
bGl0LgotICAgICAgICBpZiAoYXV0byBiciA9IG1ha2VSZWZQdHIoZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgICAgICBpZiAoUmVmUHRyIGJyID0gZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgICAgICBB
U1NFUlQoYnItPmhhc1RhZ05hbWUoYnJUYWcpKTsKICAgICAgICAgICAgIGluc2VydGlvblBvcyA9
IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGJyLmdldCgpKTsKICAgICAgICAgICAgIHJlbW92
ZU5vZGUoKmJyKTsKQEAgLTEyNTMsNyArMTI1Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIG91ciBzdHlsZSBzcGFucyBhbmQgZm9yIHBvc2l0aW9u
cyBpbnNpZGUgbGlzdCBpdGVtcwogICAgIC8vIHNpbmNlIGluc2VydEFzTGlzdEl0ZW1zIGFscmVh
ZHkgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgaWYgKCFtX21hdGNoU3R5bGUgJiYgIWVuY2xv
c2luZ0xpc3QoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKSkpIHsKLSAgICAgICAgaWYgKGF1
dG8gY29udGFpbmVyTm9kZSA9IG1ha2VSZWZQdHIoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUo
KSkpIHsKKyAgICAgICAgaWYgKFJlZlB0ciBjb250YWluZXJOb2RlID0gaW5zZXJ0aW9uUG9zLmNv
bnRhaW5lck5vZGUoKSkgewogICAgICAgICAgICAgaWYgKGNvbnRhaW5lck5vZGUtPmlzVGV4dE5v
ZGUoKSAmJiBpbnNlcnRpb25Qb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgJiYgIWluc2VydGlv
blBvcy5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBz
cGxpdFRleHROb2RlKCppbnNlcnRpb25Qb3MuY29udGFpbmVyVGV4dCgpLCBpbnNlcnRpb25Qb3Mu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICAgICAgICAgIGluc2VydGlvblBvcyA9
IGZpcnN0UG9zaXRpb25Jbk5vZGUoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKSk7CkBAIC0x
MjYyLDcgKzEyNjIsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
IAogICAgICAgICBpZiAoUmVmUHRyPE5vZGU+IG5vZGVUb1NwbGl0VG8gPSBub2RlVG9TcGxpdFRv
QXZvaWRQYXN0aW5nSW50b0lubGluZU5vZGVzV2l0aFN0eWxlKGluc2VydGlvblBvcykpIHsKICAg
ICAgICAgICAgIGlmIChub2RlVG9TcGxpdFRvLT5wYXJlbnROb2RlKCkgJiYgaW5zZXJ0aW9uUG9z
LmNvbnRhaW5lck5vZGUoKSAhPSBub2RlVG9TcGxpdFRvLT5wYXJlbnROb2RlKCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHNwbGl0U3RhcnQgPSBtYWtlUmVmUHRyKGluc2VydGlvblBvcy5jb21w
dXRlTm9kZUFmdGVyUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyIHNwbGl0U3Rh
cnQgeyBpbnNlcnRpb25Qb3MuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkgfTsKICAgICAgICAg
ICAgICAgICBpZiAoIXNwbGl0U3RhcnQpCiAgICAgICAgICAgICAgICAgICAgIHNwbGl0U3RhcnQg
PSBpbnNlcnRpb25Qb3MuY29udGFpbmVyTm9kZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChz
cGxpdFN0YXJ0KTsKQEAgLTEyOTIsNyArMTI5Miw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChyZWZOb2RlKQogICAgICAgICBmcmFnbWVudC5yZW1v
dmVOb2RlKCpyZWZOb2RlKTsKIAotICAgIGF1dG8gYmxvY2tTdGFydCA9IG1ha2VSZWZQdHIoZW5j
bG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBSZWZQdHIg
YmxvY2tTdGFydCB7IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgp
KSB9OwogICAgIGJvb2wgaXNJbnNlcnRpbmdJbnRvTGlzdCA9IChpc0xpc3RIVE1MRWxlbWVudChy
ZWZOb2RlLmdldCgpKSB8fCAoaXNMZWdhY3lBcHBsZVN0eWxlU3BhbihyZWZOb2RlLmdldCgpKSAm
JiBpc0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLT5maXJzdENoaWxkKCkpKSkKICAgICAmJiBibG9j
a1N0YXJ0ICYmIGJsb2NrU3RhcnQtPnJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKTsKICAgICBpZiAo
aXNJbnNlcnRpbmdJbnRvTGlzdCkKQEAgLTEzNDUsMTEgKzEzNDUsMTEgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGluc2VydE5vZGVBdChIVE1MQlJF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVx
dWl2YWxlbnQoKSk7CiAKICAgICBpZiAoZW5kQlIgJiYgKHBsYWluVGV4dEZyYWdtZW50IHx8IHNo
b3VsZFJlbW92ZUVuZEJSKGVuZEJSLmdldCgpLCBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSKSkp
IHsKLSAgICAgICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVuZEJSLT5wYXJlbnROb2RlKCkp
OworICAgICAgICBSZWZQdHIgcGFyZW50IHsgZW5kQlItPnBhcmVudE5vZGUoKSB9OwogICAgICAg
ICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlKGVuZEJSLmdldCgpKTsKICAgICAgICAgcmVt
b3ZlTm9kZSgqZW5kQlIpOwogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgICBpZiAoYXV0byBub2RlVG9SZW1vdmUgPSBtYWtl
UmVmUHRyKGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBydW5pbmcocGFyZW50LmdldCgpKSkpIHsKKyAg
ICAgICAgaWYgKFJlZlB0ciBub2RlVG9SZW1vdmUgPSBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVu
aW5nKHBhcmVudC5nZXQoKSkpIHsKICAgICAgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92
ZVBvc3NpYmxlQW5jZXN0b3JOb2RlKG5vZGVUb1JlbW92ZS5nZXQoKSk7CiAgICAgICAgICAgICBy
ZW1vdmVOb2RlKCpub2RlVG9SZW1vdmUpOwogICAgICAgICB9CkBAIC0xNDIzLDcgKzE0MjMsNyBA
QCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKHNl
bGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoIHx8ICFpc0VuZE9mUGFyYWdyYXBoKGVuZE9mSW5z
ZXJ0ZWRDb250ZW50KSB8fCBuZXh0LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzU3Rh
cnRPZlBhcmFncmFwaChlbmRPZkluc2VydGVkQ29udGVudCkpIHsKICAgICAgICAgICAgICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oZW5kT2ZJbnNlcnRlZENvbnRlbnQpOwotICAgICAgICAgICAgICAg
IGF1dG8gZW5jbG9zaW5nTm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2soZW5kT2ZJbnNl
cnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyIGVuY2xvc2luZ05vZGUgPSBlbmNsb3NpbmdCbG9jayhlbmRPZkluc2Vy
dGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChpc0xpc3RJdGVtKGVuY2xvc2luZ05vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbmV3TGlzdEl0ZW0gPSBIVE1MTElFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdMaXN0SXRlbS5j
b3B5UmVmKCksICplbmNsb3NpbmdOb2RlKTsKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0gZWxzZQogICAgICAgICBtZXJn
ZUVuZElmTmVlZGVkKCk7CiAKLSAgICBpZiAoYXV0byBtYWlsQmxvY2txdW90ZSA9IG1ha2VSZWZQ
dHIoZW5jbG9zaW5nTm9kZU9mVHlwZShwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgp
LmRlZXBFcXVpdmFsZW50KCksIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKSkpCisgICAgaWYg
KFJlZlB0ciBtYWlsQmxvY2txdW90ZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25BdFN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLCBpc01haWxQYXN0ZUFzUXVv
dGF0aW9uTm9kZSkpCiAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZG93bmNhc3Q8RWxlbWVu
dD4oKm1haWxCbG9ja3F1b3RlKSwgY2xhc3NBdHRyKTsKIAogICAgIGlmIChzaG91bGRQZXJmb3Jt
U21hcnRSZXBsYWNlKCkpCkBAIC0xNTA1LDcgKzE1MDUsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkgY29uc3QKICAgICBpZiAoIW1f
c21hcnRSZXBsYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHRleHRDb250
cm9sID0gbWFrZVJlZlB0cihlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0
T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgUmVmUHRyIHRleHRD
b250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0
ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRy
b2wpLmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERpc2FibGUg
c21hcnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCkBAIC0xNTc0LDcgKzE1NzQsNyBA
QCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2Uo
KQogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZkluc2VydGVkQ29udGVudCA9IHBvc2l0aW9uQXRF
bmRPZkluc2VydGVkQ29udGVudCgpOwogCiAgICAgUG9zaXRpb24gZW5kVXBzdHJlYW0gPSBlbmRP
Zkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7Ci0gICAgYXV0byBl
bmROb2RlID0gbWFrZVJlZlB0cihlbmRVcHN0cmVhbS5jb21wdXRlTm9kZUJlZm9yZVBvc2l0aW9u
KCkpOworICAgIFJlZlB0ciBlbmROb2RlIHsgZW5kVXBzdHJlYW0uY29tcHV0ZU5vZGVCZWZvcmVQ
b3NpdGlvbigpIH07CiAgICAgaW50IGVuZE9mZnNldCA9IGlzPFRleHQ+KGVuZE5vZGUpID8gZG93
bmNhc3Q8VGV4dD4oKmVuZE5vZGUpLmxlbmd0aCgpIDogMDsKICAgICBpZiAoZW5kVXBzdHJlYW0u
YW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIHsKICAg
ICAgICAgZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbnRhaW5lck5vZGUoKTsKQEAgLTE1OTgsNyAr
MTU5OCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0
UmVwbGFjZSgpCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIAogICAgIFBvc2l0aW9u
IHN0YXJ0RG93bnN0cmVhbSA9IHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQo
KS5kb3duc3RyZWFtKCk7Ci0gICAgYXV0byBzdGFydE5vZGUgPSBtYWtlUmVmUHRyKHN0YXJ0RG93
bnN0cmVhbS5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSk7CisgICAgUmVmUHRyIHN0YXJ0Tm9k
ZSB7IHN0YXJ0RG93bnN0cmVhbS5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSB9OwogICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICBpZiAoc3RhcnREb3duc3RyZWFtLmFuY2hvclR5
cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7CiAgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0RG93bnN0cmVhbS5jb250YWluZXJOb2RlKCk7CkBAIC0xNzIxLDE2ICsx
NzIxLDE2IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogc2luZ2xlQ2hpbGRMaXN0KEhUTUxFbGVtZW50
JiBlbGVtZW50KQogICAgIGlmICghZWxlbWVudC5oYXNPbmVDaGlsZCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKGVsZW1lbnQuZmlyc3RD
aGlsZCgpKTsKKyAgICBSZWZQdHIgY2hpbGQgeyBlbGVtZW50LmZpcnN0Q2hpbGQoKSB9OwogICAg
IHJldHVybiBpc0xpc3RIVE1MRWxlbWVudChjaGlsZC5nZXQoKSkgPyAmZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KCpjaGlsZCkgOiBudWxscHRyOwogfQogCiBzdGF0aWMgSFRNTEVsZW1lbnQmIGRlZXBl
c3RTaW5nbGVDaGlsZExpc3QoSFRNTEVsZW1lbnQmIHRvcExldmVsTGlzdCkKIHsKLSAgICBhdXRv
IGxpc3QgPSBtYWtlUmVmUHRyKHRvcExldmVsTGlzdCk7Ci0gICAgd2hpbGUgKGF1dG8gY2hpbGRM
aXN0ID0gc2luZ2xlQ2hpbGRMaXN0KCpsaXN0KSkKLSAgICAgICAgbGlzdCA9IGNoaWxkTGlzdDsK
LSAgICByZXR1cm4gKmxpc3Q7CisgICAgUmVmIGxpc3QgeyB0b3BMZXZlbExpc3QgfTsKKyAgICB3
aGlsZSAoYXV0byBjaGlsZExpc3QgPSBzaW5nbGVDaGlsZExpc3QobGlzdCkpCisgICAgICAgIGxp
c3QgPSAqY2hpbGRMaXN0OworICAgIHJldHVybiBsaXN0OwogfQogCiAvLyBJZiB0aGUgdXNlciBp
cyBpbnNlcnRpbmcgYSBsaXN0IGludG8gYW4gZXhpc3RpbmcgbGlzdCwgaW5zdGVhZCBvZiBuZXN0
aW5nIHRoZSBsaXN0LApAQCAtMTc0Miw3ICsxNzQyLDcgQEAgTm9kZSogUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKEhUTUxFbGVtZW50JiBwYXNzZWRMaXN0RWxlbWVu
dCwKICAgICBib29sIGlzU3RhcnQgPSBpc1N0YXJ0T2ZQYXJhZ3JhcGgoaW5zZXJ0UG9zKTsKICAg
ICBib29sIGlzRW5kID0gaXNFbmRPZlBhcmFncmFwaChpbnNlcnRQb3MpOwogICAgIGJvb2wgaXNN
aWRkbGUgPSAhaXNTdGFydCAmJiAhaXNFbmQ7Ci0gICAgYXV0byBsYXN0Tm9kZSA9IG1ha2VSZWZQ
dHIoaW5zZXJ0aW9uQmxvY2spOworICAgIFJlZlB0ciBsYXN0Tm9kZSB7IGluc2VydGlvbkJsb2Nr
IH07CiAKICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbGlzdCBpdGVtLCB3ZSBz
aG91bGQgc3BsaXQgaXQgaW50byB0d28gc2VwYXJhdGUKICAgICAvLyBsaXN0IGl0ZW1zIGFuZCBp
bnNlcnQgdGhlc2Ugbm9kZXMgYmV0d2VlbiB0aGVtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCmluZGV4IDViOTgzMWE4MTI4ZTQyNGI5NTNiMGZjYTY5ZTBkNWM4NjE1MTlk
ZTMuLjE3NmU3NDZjMjk3Zjc3MTk1ZTdhNTcyNTNkODkwZWEzZTk3OGE4MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTczMiw3ICs3MzIsNyBAQCBib29sIFRl
eHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50KCkKICAgICB9CiAKICAgICBpZiAobV9i
ZWhhdmlvcnMuY29udGFpbnMoVGV4dEl0ZXJhdG9yQmVoYXZpb3I6OkVudGVyc0ltYWdlT3Zlcmxh
eXMpICYmIGlzPEhUTUxFbGVtZW50PihtX25vZGUpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50Pigq
bV9ub2RlKS5oYXNJbWFnZU92ZXJsYXkoKSkgewotICAgICAgICBpZiAoYXV0byBzaGFkb3dSb290
ID0gbWFrZVJlZlB0cihtX25vZGUtPnNoYWRvd1Jvb3QoKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0
ciBzaGFkb3dSb290ID0gbV9ub2RlLT5zaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgIG1fbm9k
ZSA9IHNoYWRvd1Jvb3QuZ2V0KCk7CiAgICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUo
bV9mdWxseUNsaXBwZWRTdGFjaywgKm1fbm9kZSk7CiAgICAgICAgICAgICBtX29mZnNldCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuY3BwCmluZGV4IGI3MjE4OTY1OWQyNmZhYjFlZjM1M2ViMjkzZGJiNjQ0NmUzYmRlOTku
LmNlOTQ5NmJkNzc5MWEwOTJhOWZjNTEzY2U5ODYyNjZjMWI5MmE5MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBA
IC0xMjMsNyArMTIzLDcgQEAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkKIAogdm9pZCBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6c3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlvbkl0ZW1D
YWxsYmFjayYmIGNhbGxiYWNrLCBWZWN0b3I8RXhjbHVzaW9uUnVsZT4mJiBleGNsdXNpb25SdWxl
cykKIHsKLSAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LmdldCgpKTsK
KyAgICBSZWZQdHIgZG9jdW1lbnQgeyBtX2RvY3VtZW50LmdldCgpIH07CiAgICAgaWYgKCFkb2N1
bWVudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yOTUsMTEgKzI5NSwxMSBAQCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5J
bmZvPiB0b2tlbkluZgogCiAgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuSW5mbyByZXN1bHQ7CiAgICAgcmVzdWx0LmRvY3VtZW50VVJMID0gbm9kZS0+ZG9j
dW1lbnQoKS51cmwoKTsKLSAgICBpZiAoYXV0byBlbGVtZW50ID0gaXM8RWxlbWVudD4obm9kZSkg
PyBtYWtlUmVmUHRyKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSkgOiBtYWtlUmVmUHRyKG5vZGUt
PnBhcmVudEVsZW1lbnQoKSkpIHsKKyAgICBpZiAoUmVmUHRyIGVsZW1lbnQgPSBpczxFbGVtZW50
Pihub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgp
KSB7CiAgICAgICAgIHJlc3VsdC50YWdOYW1lID0gZWxlbWVudC0+dGFnTmFtZSgpOwogICAgICAg
ICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFt
ZXM6OnJvbGVBdHRyKSkKICAgICAgICAgICAgIHJlc3VsdC5yb2xlQXR0cmlidXRlID0gZWxlbWVu
dC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnJvbGVBdHRyKTsK
LSAgICAgICAgaWYgKGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKG5vZGUtPmRvY3VtZW50KCkuZnJh
bWUoKSk7IGZyYW1lICYmIGZyYW1lLT52aWV3KCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewor
ICAgICAgICBpZiAoUmVmUHRyIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOyBmcmFt
ZSAmJiBmcmFtZS0+dmlldygpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgYWNjb3VudCBmb3Igb3ZlcmZsb3cgY2xpcC4KICAgICAg
ICAgICAgIGF1dG8gZWxlbWVudFJlY3QgPSBlbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUFu
Y2hvclJlY3QoKTsKICAgICAgICAgICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gZnJhbWUt
PnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGlj
IGJvb2wgaXNFbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiAgICAgICAgIGlmIChkaXNwbGF5VHlwZSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgZGlz
cGxheVR5cGUgPT0gRGlzcGxheVR5cGU6OklubGluZUJsb2NrKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICAgICAgZm9yIChhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIoZWxlbWVudC5w
YXJlbnRFbGVtZW50KCkpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgp
KSB7CisgICAgICAgIGZvciAoUmVmUHRyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgp
OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bmF2VGFnKSB8fCByb2xlKCpwYXJl
bnQpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb24pCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSB8
fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihzdGFydC5kb2N1bWVudCgpKTsKKyAgICBS
ZWZQdHIgZG9jdW1lbnQgeyBzdGFydC5kb2N1bWVudCgpIH07CiAgICAgQVNTRVJUKGRvY3VtZW50
KTsKICAgICAvLyBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRo
ZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRzLgogICAgIGlmIChkb2N1bWVu
dCAhPSBzdGFydC5kb2N1bWVudCgpIHx8IGRvY3VtZW50ICE9IGVuZC5kb2N1bWVudCgpKQpAQCAt
NjA2LDcgKzYwNiw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxl
T2JzZXJ2YXRpb25VcGRhdGUoKQogICAgICAgICAgICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoYXV0byBob3N0
ID0gbWFrZVJlZlB0cihub2RlLT5zaGFkb3dIb3N0KCkpOyBpczxIVE1MSW5wdXRFbGVtZW50Piho
b3N0LmdldCgpKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqaG9zdCkubGFzdENoYW5n
ZVdhc1VzZXJFZGl0KCkpCisgICAgICAgICAgICBpZiAoUmVmUHRyIGhvc3QgPSBub2RlLT5zaGFk
b3dIb3N0KCk7IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QuZ2V0KCkpICYmIGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpob3N0KS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKQEAg
LTc2MSw3ICs3NjEsNyBAQCBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNl
KGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdAogCiAgICAgaWYgKGl0ZW0u
c3RhcnQuaXNOdWxsKCkgfHwgaXRlbS5lbmQuaXNOdWxsKCkpIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXRlbS50b2tlbnMuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIGVsZW1lbnQgPSBt
YWtlUmVmUHRyKGl0ZW0uZWxlbWVudC5nZXQoKSk7CisgICAgICAgIFJlZlB0ciBlbGVtZW50ID0g
eyBpdGVtLmVsZW1lbnQuZ2V0KCkgfTsKICAgICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50VG9rZW5zLnNpemUoKSA+IDEgJiYgIWNhblBlcmZvcm1UZXh0TWFu
aXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVUZXh0Q29udGVudCgqZWxlbWVudCkgJiYgaXRlbS5h
dHRyaWJ1dGVOYW1lID09IG51bGxRTmFtZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggZjE0MmViNjcxOGIyNmVhYzcyOTdiMDhiNzI5MWU4ZDk2
NmU1MjIzOC4uNmJmZWFkMmE5MGI0MGU4Y2FkZmJiODZmYjlmOGNiNzc2NjQyZDM4ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0xNDYsNyArMTQ2
LDcgQEAgYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc09ycGhhbigpIGNvbnN0CiAKIFJlZlB0cjxE
b2N1bWVudD4gVmlzaWJsZVNlbGVjdGlvbjo6ZG9jdW1lbnQoKSBjb25zdAogewotICAgIGF1dG8g
YmFzZURvY3VtZW50ID0gbWFrZVJlZlB0cihtX2Jhc2UuZG9jdW1lbnQoKSk7CisgICAgUmVmUHRy
IGJhc2VEb2N1bWVudCB7IG1fYmFzZS5kb2N1bWVudCgpIH07CiAgICAgaWYgKCFiYXNlRG9jdW1l
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggZjcyYWZjNmUxNWIwMjI1MGU5MjJmNzZlMDNl
NDY0MjMzZjgwMzVlMi4uMjFjYmQ3ZWRhNDI0NjA4YmE0Mjg4NmY5YTg2NjdmNTBjNzllMjlhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAt
NjkyLDcgKzY5Miw3IEBAIGJvb2wgRGF0YURldGVjdGlvbjo6aXNEYXRhRGV0ZWN0b3JFbGVtZW50
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiBSZWY8SFRNTERpdkVsZW1lbnQ+IERhdGFEZXRlY3Rp
b246OmNyZWF0ZUVsZW1lbnRGb3JJbWFnZU92ZXJsYXkoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBUZXh0UmVjb2duaXRpb25EYXRhRGV0ZWN0b3ImIGluZm8pCiB7CiAgICAgYXV0byBjb250YWlu
ZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKLSAgICBpZiAoYXV0byBmcmFt
ZSA9IG1ha2VSZWZQdHIoZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKSkgewogICAgICAgICBhdXRvIHJlc3VsdElkZW50aWZpZXIgPSBm
cmFtZS0+ZGF0YURldGVjdGlvblJlc3VsdHMoKS5hZGRJbWFnZU92ZXJsYXlEYXRhRGV0ZWN0aW9u
UmVzdWx0KGluZm8ucmVzdWx0LmdldCgpKTsKICAgICAgICAgY29udGFpbmVyLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNfcmVzdWx0QXR0
ciwgU3RyaW5nOjpudW1iZXIocmVzdWx0SWRlbnRpZmllci50b1VJbnQ2NCgpKSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVy
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJD
b2NvYS5tbQppbmRleCAxMGFkY2ZiZjFhYWQ4ZGMwMGNjY2Y0NTMyNDVlYzJiNzI5NzNmY2NiLi45
YTEyMDk4OTg2NmYzNjZlZjE1ZmE2NDYxOWZlMjIzNzExOTRiZTFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAt
MzU0LDcgKzM1NCw3IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2ht
ZW50cyhGcmFtZSYgZnJhbWUsIERvY3VtZW50RnJhZ21lbnQmIGZyCiAKICAgICBmb3IgKGF1dG8m
IGluZm8gOiBhdHRhY2htZW50SW5zZXJ0aW9uSW5mbykgewogICAgICAgICBhdXRvIG9yaWdpbmFs
RWxlbWVudCA9IFdURk1vdmUoaW5mby5vcmlnaW5hbEVsZW1lbnQpOwotICAgICAgICBhdXRvIHBh
cmVudCA9IG1ha2VSZWZQdHIob3JpZ2luYWxFbGVtZW50LT5wYXJlbnROb2RlKCkpOworICAgICAg
ICBSZWZQdHIgcGFyZW50IHsgb3JpZ2luYWxFbGVtZW50LT5wYXJlbnROb2RlKCkgfTsKICAgICAg
ICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtODQwLDcgKzg0MCw3
IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBi
dWZmZXIsIGNvbnN0IFN0cmluZyYgdHlwZSwKICAgICBpZiAoIXNob3VsZFJlcGxhY2VSaWNoQ29u
dGVudFdpdGhBdHRhY2htZW50cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IGRvY3VtZW50ID0gbWFrZVJlZlB0cihmcmFtZS5kb2N1bWVudCgpKTsKKyAgICBSZWZQdHIgZG9j
dW1lbnQgeyBmcmFtZS5kb2N1bWVudCgpIH07CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZjJhMTdhODM4
NjdmZTIzZTQ3Zjg5NjZhOWQ5MjA0N2Q4YzBkNmI1Ni4uYmZhMTMwYzM4YTU4Y2NlZTQ0N2JjNGVm
ZjRjNjZlNzU4MDVjMGNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtODkyLDcg
Kzg5Miw3IEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFu
Y2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVTdGFydCB7IHN0YXJ0IH07CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQgeyBl
bmQgfTsKIAotICAgIGF1dG8gYm9keSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdpdGhU
YWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpKTsKKyAgICBS
ZWZQdHIgYm9keSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUo
Y29tbW9uQW5jZXN0b3IpLCBib2R5VGFnKTsKICAgICBSZWZQdHI8RWxlbWVudD4gZnVsbHlTZWxl
Y3RlZFJvb3Q7CiAgICAgLy8gRklYTUU6IERvIHRoaXMgZm9yIGFsbCBmdWxseSBzZWxlY3RlZCBi
bG9ja3MsIG5vdCBqdXN0IHRoZSBib2R5LgogICAgIGlmIChib2R5ICYmIFZpc2libGVQb3NpdGlv
bihmaXJzdFBvc2l0aW9uSW5Ob2RlKGJvZHkuZ2V0KCkpKSA9PSB2aXNpYmxlU3RhcnQgJiYgVmlz
aWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShib2R5LmdldCgpKSkgPT0gdmlzaWJsZUVu
ZCkKQEAgLTEwMDMsNyArMTAwMyw3IEBAIFN0cmluZyBzYW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVu
dEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYgZnJhZ21lbnQsIERvCiAgICAgTVNP
TGlzdE1vZGUgbXNvTGlzdE1vZGUgPSBtc29MaXN0UXVpcmtzID09IE1TT0xpc3RRdWlya3M6OkNo
ZWNrSWZOZWVkZWQgJiYgc2hvdWxkUHJlc2VydmVNU09MaXN0cyhvcmlnaW5hbE1hcmt1cCkKICAg
ICAgICAgPyBNU09MaXN0TW9kZTo6UHJlc2VydmUgOiBNU09MaXN0TW9kZTo6RG9Ob3RQcmVzZXJ2
ZTsKIAotICAgIGF1dG8gYm9keUVsZW1lbnQgPSBtYWtlUmVmUHRyKGRvY3VtZW50LmJvZHkoKSk7
CisgICAgUmVmUHRyIGJvZHlFbGVtZW50IHsgZG9jdW1lbnQuYm9keSgpIH07CiAgICAgQVNTRVJU
KGJvZHlFbGVtZW50KTsKICAgICBib2R5RWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnQuZ2V0
KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zpc3VhbFZpZXdwb3J0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzdWFsVmlld3BvcnQuY3BwCmluZGV4IDNlYTFiYzI5
ZWMzZjBlZTExNjU5MWIxZDA1OWVkZjYwMzUyNDI3NTQuLjY4YTI2MjY0NGI2NmI4YjUxODBkZDIy
ODMzNzdlNmVmOTU4MjEzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzdWFs
Vmlld3BvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlzdWFsVmlld3BvcnQuY3Bw
CkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBWaXN1YWxWaWV3cG9ydDo6dXBkYXRlKCkKICAgICBk
b3VibGUgaGVpZ2h0ID0gMDsKICAgICBkb3VibGUgc2NhbGUgPSAxOwogCi0gICAgYXV0byBmcmFt
ZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUoKSk7CisgICAgUmVmUHRyIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKTsKICAgICBpZiAoZnJhbWUpIHsKICAgICAgICAgaWYgKGF1dG8qIHZpZXcgPSBmcmFt
ZS0+dmlldygpKSB7CiAgICAgICAgICAgICBhdXRvIHZpc3VhbFZpZXdwb3J0UmVjdCA9IHZpZXct
PnZpc3VhbFZpZXdwb3J0UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCmluZGV4IDcwZGMy
NDg0YTVlZDY2ODg5ZmNhMzNlZTI5MWVjMTA2YTVmOWY5YTguLjAyYjE1ODM0OWQzODgwODUwMzBl
MTE0MGNiMzI2ZjdhN2E4MTkxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KQEAgLTg1LDcg
Kzg1LDcgQEAgT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXR1cENvbnZlcnRlcigp
CiAKICAgICBPU1N0YXR1cyBlcnIgPSBQQUw6OkF1ZGlvQ29udmVydGVyTmV3KCZtX2lucHV0RGVz
Y3JpcHRpb24tPnN0cmVhbURlc2NyaXB0aW9uKCksICZtX291dHB1dERlc2NyaXB0aW9uLT5zdHJl
YW1EZXNjcmlwdGlvbigpLCAmbV9jb252ZXJ0ZXIpOwogICAgIGlmIChlcnIpIHsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0
cigqdGhpcyksIGVycl0geworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBlcnJdIHsKICAgICAgICAgICAgIEVSUk9S
X0xPRygiQXVkaW9Db252ZXJ0ZXJOZXcgcmV0dXJuZWQgZXJyb3IgIiwgZXJyKTsKICAgICAgICAg
fSk7CiAgICAgfQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNl
OjpwdXNoU2FtcGxlc0ludGVybmFsKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzCiAg
ICAgaWYgKG1faXNJbk5lZWRPZk1vcmVEYXRhKSB7CiAgICAgICAgIG1faXNJbk5lZWRPZk1vcmVE
YXRhID0gZmFsc2U7CiAgICAgICAgIERpc2FibGVNYWxsb2NSZXN0cmljdGlvbnNGb3JDdXJyZW50
VGhyZWFkU2NvcGUgZGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uczsKLSAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtsb2dJZGVudGlmaWVyID0gTE9HSURFTlRJRklFUiwgc2FtcGxlQ291
bnQsIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKV0geworICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2xvZ0lkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSLCBz
YW1wbGVDb3VudCwgdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKICAgICAg
ICAgICAgIEFMV0FZU19MT0cobG9nSWRlbnRpZmllciwgIm5lZWRlZCBtb3JlIGRhdGEsIHB1c2hp
bmcgIiwgc2FtcGxlQ291bnQsICIgc2FtcGxlcyIpOwogICAgICAgICB9KTsKICAgICB9CkBAIC0y
NjUsNyArMjY1LDcgQEAgYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzSW50
ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdAogICAgICAgICBpZiAoIW1faXNJ
bk5lZWRPZk1vcmVEYXRhKSB7CiAgICAgICAgICAgICBtX2lzSW5OZWVkT2ZNb3JlRGF0YSA9IHRy
dWU7CiAgICAgICAgICAgICBEaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zRm9yQ3VycmVudFRocmVh
ZFNjb3BlIGRpc2FibGVNYWxsb2NSZXN0cmljdGlvbnM7Ci0gICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW2xvZ0lkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSLCB0aW1lU3RhbXAs
IHN0YXJ0RnJhbWUsIGVuZEZyYW1lLCBzYW1wbGVDb3VudCwgb3V0cHV0U2FtcGxlT2Zmc2V0ID0g
bV9vdXRwdXRTYW1wbGVPZmZzZXQsIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0
aGlzKV0geworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtsb2dJZGVudGlm
aWVyID0gTE9HSURFTlRJRklFUiwgdGltZVN0YW1wLCBzdGFydEZyYW1lLCBlbmRGcmFtZSwgc2Ft
cGxlQ291bnQsIG91dHB1dFNhbXBsZU9mZnNldCA9IG1fb3V0cHV0U2FtcGxlT2Zmc2V0LCB0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0gewogICAgICAgICAgICAgICAgIEVSUk9S
X0xPRyhsb2dJZGVudGlmaWVyLCAibmVlZCBtb3JlIGRhdGEsIHNhbXBsZSAiLCB0aW1lU3RhbXAs
ICIgd2l0aCBvZmZzZXQgIiwgb3V0cHV0U2FtcGxlT2Zmc2V0LCAiLCB0cnlpbmcgdG8gZ2V0ICIs
IHNhbXBsZUNvdW50LCAiIHNhbXBsZXMsIGJ1dCBub3QgY29tcGxldGVseSBpbiByYW5nZSBbIiwg
c3RhcnRGcmFtZSwgIiAuLiAiLCBlbmRGcmFtZSwgIl0iKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9XZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24ubW0KaW5kZXggM2U1
NjM2Y2UxOGIyNzM0ODlkNjhjYTZlMTViNmVjZTY0ODFiNDUwYy4uNGI3ZTM4NDQxODQ0YWZiYTgx
ZjZjOTRmYzUxM2FmNWRmYzFmMDg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Npb25TZXNzaW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXByZXNzaW9u
U2Vzc2lvbi5tbQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgV2ViQ29yZURlY29tcHJlc3Npb25T
ZXNzaW9uOjplbnF1ZXVlU2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlciwKIAog
ICAgIExPRyhNZWRpYSwgIldlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbjo6ZW5xdWV1ZVNhbXBs
ZSglcCkgLSBmcmFtZXNCZWluZ0RlY29kZWQoJWQpIiwgdGhpcywgbV9mcmFtZXNCZWluZ0RlY29k
ZWQpOwogCi0gICAgbV9kZWNvbXByZXNzaW9uUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZlB0cigqdGhpcyksIHN0cm9uZ0J1ZmZlciA9IHJldGFpblB0cihzYW1wbGVCdWZm
ZXIpLCBkaXNwbGF5aW5nXSB7CisgICAgbV9kZWNvbXByZXNzaW9uUXVldWUtPmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgc3Ryb25nQnVmZmVyID0gcmV0YWluUHRyKHNh
bXBsZUJ1ZmZlciksIGRpc3BsYXlpbmddIHsKICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGVjb2Rl
U2FtcGxlKHN0cm9uZ0J1ZmZlci5nZXQoKSwgZGlzcGxheWluZyk7CiAgICAgfSk7CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzIwODEyN2Qw
NDBiOTdhOWJmMGQ1ODFhYTllYTY0NWQzZjE1NjdkOS4uNGQxN2EwMDI0YzJkOTI5NTFjZmY2YmI3
OWUzNmQ5Y2M0MjY2MDY4MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTA5LTIwICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIHVzZSBvZiBtYWtlUmVmUHRyKCkgYW5k
IHVzZSBSZWZQdHIgeyB9IGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzA1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVySU9TOjpzaW5nbGVUYXBB
dFBvaW50V2l0aE1vZGlmaWVycyk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcklP
Uzo6c2VuZEV2ZW50U3RyZWFtKToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVySU9T
OjpkcmFnRnJvbVBvaW50VG9Qb2ludCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMv
VUlTY3JpcHRDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xs
ZXJNYWM6OmFjdGl2YXRlRGF0YUxpc3RTdWdnZXN0aW9uKToKKwogMjAyMS0wOS0yMCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgdXNpbmcgbWFrZVJlZigq
dGhpcykgLyBtYWtlUmVmUHRyKHRoaXMpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggY2JhZTk1MWI0Y2ExYTI3MGNlYjdm
NmVmOTAwNGNjNDQxYTY4ZWI1MC4uYzcyMzMzNTFjNmQ0NDU2NDBhOWYzNDBjNGQ3MTM1YjU3OTI4
NWQwMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbQpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVy
SU9TOjp0d29GaW5nZXJTaW5nbGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBKU1ZhbHVlUmVm
CiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6c2luZ2xlVGFwQXRQb2ludFdpdGhNb2RpZmll
cnMobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwgSlNWYWx1ZVJlZiBj
YWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJl
Rm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKLSAgICBz
aW5nbGVUYXBBdFBvaW50V2l0aE1vZGlmaWVycyhXZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpLCBw
YXJzZU1vZGlmaWVyQXJyYXkobV9jb250ZXh0LT5qc0NvbnRleHQoKSwgbW9kaWZpZXJBcnJheSks
IG1ha2VCbG9ja1B0cihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIoKnRoaXMpLCBj
YWxsYmFja0lEXSB7CisgICAgc2luZ2xlVGFwQXRQb2ludFdpdGhNb2RpZmllcnMoV2ViQ29yZTo6
RmxvYXRQb2ludCh4LCB5KSwgcGFyc2VNb2RpZmllckFycmF5KG1fY29udGV4dC0+anNDb250ZXh0
KCksIG1vZGlmaWVyQXJyYXkpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBjYWxsYmFja0lEXSB7CiAgICAgICAgIGlmICghbV9jb250ZXh0KQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNh
bGxiYWNrSUQpOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9T
OjpzZW5kRXZlbnRTdHJlYW0oSlNTdHJpbmdSZWYgZXZlbnRzSlNPTiwgSlNWYWx1ZVJlZiBjCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNvbXBsZXRpb24gPSBtYWtlQmxvY2tQ
dHIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKSwgY2FsbGJhY2tJRF0g
eworICAgIGF1dG8gY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH0sIGNhbGxiYWNrSURdIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxl
dGUoY2FsbGJhY2tJRCk7CkBAIC00OTQsNyArNDk0LDcgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xs
ZXJJT1M6OmRyYWdGcm9tUG9pbnRUb1BvaW50KGxvbmcgc3RhcnRYLCBsb25nIHN0YXJ0WSwgbG9u
ZwogICAgICAgICBdLAogICAgIH07CiAKLSAgICBhdXRvIGNvbXBsZXRpb24gPSBtYWtlQmxvY2tQ
dHIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKSwgY2FsbGJhY2tJRF0g
eworICAgIGF1dG8gY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH0sIGNhbGxiYWNrSURdIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxl
dGUoY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9V
SVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNj
cmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggNDA2ZWU5MTlkMzZlYzA3ZmM0OWRiMjMxNmU4YTBj
NDJlNGZjODUzNC4uNzI0NThkNzI1MTY1NTRkOTI1NDVhNzI5NjljNWE1MzQ4MWRiMmFhMCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1h
Yy5tbQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyTWFjOjphY3Rp
dmF0ZURhdGFMaXN0U3VnZ2VzdGlvbih1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlCiAgICAgW3Rh
YmxlIHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5kZXhd
IGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKIAogICAgIC8vIFNlbmQgdGhlIGFjdGlvbiBhZnRl
ciBhIHNob3J0IGRlbGF5IHRvIHNpbXVsYXRlIG5vcm1hbCB1c2VyIGludGVyYWN0aW9uLgotICAg
IFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoQWZ0ZXIoNTBfbXMsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZlB0cigqdGhpcyksIGNhbGxiYWNrSUQsIHRhYmxlXSB7CisgICAgV29ya1F1
ZXVlOjptYWluKCkuZGlzcGF0Y2hBZnRlcig1MF9tcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBjYWxsYmFja0lELCB0YWJsZV0gewogICAgICAgICBpZiAoW3RhYmxlIHdp
bmRvd10pCiAgICAgICAgICAgICBbdGFibGUgc2VuZEFjdGlvbjpbdGFibGUgYWN0aW9uXSB0bzpb
dGFibGUgdGFyZ2V0XV07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>