<?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>208546</bug_id>
          
          <creation_ts>2020-03-03 16:35:03 -0800</creation_ts>
          <short_desc>Drop WebsiteDataStore::processPools()&apos;s ensureAPoolExists optional parameter and add a ensureProcessPools() method instead</short_desc>
          <delta_ts>2020-03-04 16:13:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=208610</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>208541</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1625316</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-03 16:35:03 -0800</bug_when>
    <thetext>Make WebsiteDataStore::processPools() parameter mandatory to make it clear it may create a process pool. Otherwise, people call processPools() to iterate over existing process pools and do not realize that it actually creates a process pool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625317</commentid>
    <comment_count>1</comment_count>
      <attachid>392348</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-03 16:36:21 -0800</bug_when>
    <thetext>Created attachment 392348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625363</commentid>
    <comment_count>2</comment_count>
      <attachid>392348</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-03-03 18:58:46 -0800</bug_when>
    <thetext>Comment on attachment 392348
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:304
&gt; +    enum class EnsureHasProcessPool : bool { No, Yes };
&gt; +    HashSet&lt;RefPtr&lt;WebProcessPool&gt;&gt; processPools(EnsureHasProcessPool, size_t limit = std::numeric_limits&lt;size_t&gt;::max()) const;

The idiom we often use for things like this is to have two functions:
1) ensureProcessPools()
2) existingProcessPools() or possibly just processPools().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625576</commentid>
    <comment_count>3</comment_count>
      <attachid>392434</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-04 09:59:28 -0800</bug_when>
    <thetext>Created attachment 392434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625600</commentid>
    <comment_count>4</comment_count>
      <attachid>392436</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-04 10:10:01 -0800</bug_when>
    <thetext>Created attachment 392436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625605</commentid>
    <comment_count>5</comment_count>
      <attachid>392436</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-04 10:21:12 -0800</bug_when>
    <thetext>Comment on attachment 392436
Patch

Clearing flags on attachment: 392436

Committed r257855: &lt;https://trac.webkit.org/changeset/257855&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625606</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-04 10:21:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625610</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-04 10:22:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/60045083&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392348</attachid>
            <date>2020-03-03 16:36:21 -0800</date>
            <delta_ts>2020-03-04 09:59:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208546-20200303163621.patch</filename>
            <type>text/plain</type>
            <size>45394</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Nzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGZhNzZjYjQ4NjhmOGVhMGQ1
YzRmNjY3NzRiMGY0OTVmNjVlYWRjNzYuLmE5MDFmNzhiZWM3YTdlZmU1MWJlZjNkMzc3MDkyNjFm
NDkzMjk2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEgQEAKKzIwMjAtMDMtMDMgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scygpIHBhcmFtZXRlciBtYW5kYXRvcnkgdG8gbWFrZSBpdCBjbGVhciBpdCBt
YXkgY3JlYXRlIGEgcHJvY2VzcyBwb29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scygpIHBh
cmFtZXRlciBtYW5kYXRvcnkgdG8gbWFrZSBpdCBjbGVhciBpdCBtYXkgY3JlYXRlIGEgcHJvY2Vz
cyBwb29sLgorICAgICAgICBPdGhlcndpc2UsIHBlb3BsZSBjYWxsIHByb2Nlc3NQb29scygpIHRv
IGl0ZXJhdGUgb3ZlciBleGlzdGluZyBwcm9jZXNzIHBvb2xzIGFuZCBkbyBub3QgcmVhbGl6ZSB0
aGF0IGl0CisgICAgICAgIGFjdHVhbGx5IGNyZWF0ZXMgYSBwcm9jZXNzIHBvb2wuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmll
c0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0
aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVu
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20p
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlcklu
dGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxh
dGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwbHVnaW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKwogMjAyMC0wMy0wMyAgSml0
ZW4gTWVodGEgIDxqbWVodGFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0IEhUVFAgQWx0ZXJu
YXRpdmUgU2VydmljZXMgU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBhZmFmYTAxMDhlOTg5
Yjg2ODYzMTUxOGNhNWQ5MTdkZWJiMTVkZTBmLi43ZDNmZDFlZmEzMWYwN2YyNDNhYmM1ZWIxNTI0
MDEzNGUwNzlmNmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQogCiBXZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpCiB7Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29s
cygxLCBmYWxzZSk7CisgICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9j
ZXNzUG9vbDo6Tm8sIDEpOwogICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDog
cG9vbHMuYmVnaW4oKS0+Z2V0KCk7CiB9CiAKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgTwogCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21w
dXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVy
c2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NB
Y2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6T25seUlmTGF1bmNoZWQ6CiAgICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKQEAgLTcwNiw3ICs3MDYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxs
VGltZQogI2VuZGlmCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRl
TmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJz
aXN0ZW50KCkpOwogICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpPbmx5SWZMYXVuY2hlZDoKICAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQpAQCAtNzMzLDcgKzczMyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxU
aW1lCiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NB
Y2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAg
IGlmICh3ZWJQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewot
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNz
UG9vbDo6WWVzKSkgewogICAgICAgICAgICAgLy8gQ2xlYXIgYmFjay9mb3J3YXJkIGNhY2hlIGZp
cnN0IGFzIHByb2Nlc3NlcyByZW1vdmVkIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSB3aWxs
IGxpa2VseQogICAgICAgICAgICAgLy8gYmUgYWRkZWQgdG8gdGhlIFdlYlByb2Nlc3MgY2FjaGUu
CiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+YmFja0ZvcndhcmRDYWNoZSgpLnJlbW92ZUVudHJp
ZXNGb3JTZXNzaW9uKHNlc3Npb25JRCgpKTsKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
aWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdl
YnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKQEAgLTk3
MCw3ICs5NzAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgIAogICAgIGF1dG8gbmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZv
ckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZ
ZXMpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewog
ICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6CiAgICAg
ICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKQEAgLTExNTks
NyArMTE1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1By
b2Nlc3NQb29sOjpZZXMpKQogICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291
bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKIH0KIApAQCAtMTE2OSw3ICsxMTY5LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQs
IENvbXBsZXRpb24KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsK
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRy
aWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAg
ICAgfQogfQpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpCiAgICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwg
c2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3Jl
Z2F0b3IuY29weVJlZigpXSB7IH0pOwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChT
ZWNvbmRzIHNlY29uZHMsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKKyAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKQogICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9
KTsKIH0KICAgICAKQEAgLTExOTgsMTAgKzExOTgsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
UwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAg
ICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTEyMTYsMTAgKzEyMTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBwcm9jZXNz
LT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEyMzQsMTAgKzEyMzIsOSBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChibwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI1NCw3ICsxMjUxLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bv
b2w6OlllcykpIHsKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CiB9CkBAIC0xMjcwLDcgKzEyNjcsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2Rl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
eworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJv
Y2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdn
cmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTI4NSwxMCArMTI4Miw5IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkg
ewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7CiAgICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUo
KSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTMwNSw3
ICsxMzAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVu
c3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xMzE3LDcgKzEzMTMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6
OlllcykpCiAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklE
LCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3Jl
Z2F0b3IuY29weVJlZigpXSB7IH0pOwogfQogCkBAIC0xMzMyLDcgKzEzMjgsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwm
IHN1YkZyYW1lVVJMLCBjbwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVz
KSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7
IH0pOwogICAgIH0KQEAgLTEzNDIsMTAgKzEzMzgsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25z
dAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAg
ICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNjIsNyArMTM1Nyw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29s
OjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
cmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTM3MiwxMCArMTM2Nyw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUkwsCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMp
KSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMo
KS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM5Niw3ICsxMzkwLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6
OlllcykpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTQxMyw3ICsxNDA3LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1
YnJlc291cmNlVVIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJl
ZigpXSB7IH0pOwogICAgIH0KQEAgLTE0MzAsNyArMTQyNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IGNvbnN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAg
ICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAg
IH0KQEAgLTE0NDcsNyArMTQ0MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9j
ZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNDU3
LDEwICsxNDUxLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
RW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vzcy0+
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE0NzcsNyArMTQ3MCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKICAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAg
ICB9CkBAIC0xNDg5LDcgKzE0ODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JgogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJv
Y2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCld
IHsgfSk7CiAgICAgfQpAQCAtMTQ5OSw3ICsxNDkyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzdWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9v
bDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vz
c2lvbklELCBbXSB7IH0pOwogICAgIH0KQEAgLTE1MTEsNyArMTUwNCw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBt
b2RpZmllZFNpbmNlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7
CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwogICAgIH0KQEAgLTE1MjEsNyArMTUxNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVy
PHZvCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAg
ICAgICAgIHByb2Nlc3MtPmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0KQEAgLTE1MzMsNyAr
MTUyNiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhh
c1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0
aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRv
ci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTU0Myw3ICsxNTM2LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewog
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQogICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nl
c3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3Jl
Z2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE1NTUsNyArMTU0OCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9v
bDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpA
QCAtMTU3MCw3ICsxNTYzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihj
b25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhF
bnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dy
ZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNTg1LDcgKzE1NzgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCAsIGNvbnN0IFVSTCYgdG9wRgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMp
KSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVy
eVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAt
MTU5NSw3ICsxNTg4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUsIENvbXAKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3Vy
ZUhhc1Byb2Nlc3NQb29sOjpZZXMpKQogICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogfQogCkBAIC0xNjA0LDcgKzE1OTcsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
c3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9
IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTE2MTIsNyArMTYw
NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSwgQ29tcGxlCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJv
Y2Vzc1Bvb2w6OlllcykpCiAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0
b3IuY29weVJlZigpXSB7IH0pOwogfQogCkBAIC0xNjMzLDcgKzE2MjYsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKQog
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKIH0KIApAQCAtMTY0OCw3ICsx
NjQxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFz
UHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRl
cmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7
CiAgICAgfQpAQCAtMTY2MywxMCArMTY1Niw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBwcm9j
ZXNzLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KQEAgLTE2ODEsMTAgKzE2NzMsOSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3Vi
VXJsLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE3MDEsNyArMTY5Miw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZ
ZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAt
MTcxOCw3ICsxNzA5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ28KICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNz
LT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE3MzAsNyArMTcyMSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9j
ZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJh
c2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dy
ZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNzQyLDcgKzE3MzMsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bv
b2w6OlllcykpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTc1Miw3ICsxNzQzLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
ZyhDb21wbGV0aW8KIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7
CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQogICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9h
ZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0x
NzYyLDcgKzE3NTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwTwogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
RW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAg
IH0KQEAgLTE3NzAsMTAgKzE3NjEsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNv
b2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwTwogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Cisg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNz
UG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhh
c0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgQVNTRVJUKHBy
b2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQpAQCAtMTc4MiwxMCArMTc3Miw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFz
TG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsCiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhh
c1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzk2LDEwICsxNzg1LDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJG
b3JUZXN0aW4KIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQ
b29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTgyOCwxMCArMTgxNiw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUCiAgICAgICAg
ICAgICB3ZWJQcm9jZXNzLnNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5n
KGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQ
b29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTg0MywxMCArMTgzMCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6
OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29y
ZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKLSAgICAgICAgICAg
IEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE4NTksNyArMTg0NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNv
bmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhF
bnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0
b3IuY29weVJlZigpXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CkBA
IC0xODcyLDcgKzE4NTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZQogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9v
bDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBA
IC0xODg4LDEyICsxODc0LDE1IEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVk
UHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1IYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgY291bnQsIGJvb2wgZW5zdXJlQVBvb2xFeGlzdHMp
IGNvbnN0CitIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbCBlbnN1cmVIYXNQcm9jZXNzUG9vbCwg
c2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29s
Pj4gcHJvY2Vzc1Bvb2xzOwogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NlcygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3MucHJvY2Vzc1Bvb2xJZkV4
aXN0cygpKQorICAgICAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzLnByb2Nlc3NQ
b29sSWZFeGlzdHMoKSkgewogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9v
bCk7CisgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChwcm9jZXNzUG9v
bHMuaXNFbXB0eSgpKSB7CkBAIC0xOTAzLDEzICsxODkyLDEyIEBAIEhhc2hTZXQ8UmVmUHRyPFdl
YlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3Vu
dCwgYm9vCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHByb2Nlc3NQ
b29scy5hZGQocHJvY2Vzc1Bvb2wpOwotCi0gICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNp
emUoKSA9PSBjb3VudCkKKyAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxp
bWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHByb2Nlc3NQb29scy5pc0VtcHR5KCkgJiYgY291bnQgJiYgZW5zdXJlQVBvb2xFeGlzdHMpIHsK
KyAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSAmJiBsaW1pdCAmJiBlbnN1cmVIYXNQcm9j
ZXNzUG9vbCA9PSBFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSB7CiAgICAgICAgIGF1dG8gcHJv
Y2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uOjpjcmVhdGUoKSk7CiAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wu
cHRyKCkpOwogICAgIH0KQEAgLTE5MjIsNyArMTkxMCw3IEBAIFZlY3RvcjxQbHVnaW5Nb2R1bGVJ
bmZvPiBXZWJzaXRlRGF0YVN0b3JlOjpwbHVnaW5zKCkgY29uc3QKIHsKICAgICBWZWN0b3I8UGx1
Z2luTW9kdWxlSW5mbz4gcGx1Z2luczsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAgICAgZm9yIChhdXRvJiBwbHVn
aW4gOiBwcm9jZXNzUG9vbC0+cGx1Z2luSW5mb1N0b3JlKCkucGx1Z2lucygpKQogICAgICAgICAg
ICAgcGx1Z2lucy5hcHBlbmQocGx1Z2luKTsKICAgICB9CkBAIC0yMDE3LDE0ICsyMDA1LDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNl
c3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgZmFsc2UpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJv
Y2Vzc1Bvb2w6Ok5vKSkgewogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKICAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBmYWxzZSkpIHsKKyAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sOjpObykpIHsKICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQs
IGZhbHNlKSk7CiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSk7
CiAgICAgfQpAQCAtMjAzOSw3ICsyMDI3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25z
dCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpLCBmYWxzZSkpCisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6Ok5vKSkKICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkpOwogICAg
IH0KICAgICAKQEAgLTIwNTksNyArMjA0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkKICAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFi
bGVkKTsKQEAgLTIwNzUsMTAgKzIwNjMsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhF
bnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nl
c3NQb29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjEwMCw3ICsyMDg3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dUZXN0
aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVI
YXNQcm9jZXNzUG9vbDo6WWVzKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5jbGVhclJlc291
cmNlTG9hZFN0YXRpc3RpY3MoKTsKICAgICB9CiAgICAgY2FsbGJhY2soKTsKQEAgLTIyMjEsNyAr
MjIwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhG
dW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29s
OjpZZXMpKSB7CiAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlz
KTsKICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmdldExvY2FsU3RvcmFn
ZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CkBAIC0yMjM1LDcgKzIyMjIsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKEVuc3VyZUhh
c1Byb2Nlc3NQb29sOjpZZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3Rh
KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNv
cHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0yMjcxLDEwICsyMjU4LDkgQEAgV1RGOjpTdHJpbmcg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9y
eSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scyhFbnN1cmVIYXNQcm9jZXNzUG9vbDo6WWVzKSkg
ewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vz
c2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI4NSw3ICsyMjcxLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZChib29sIGVuYWJsZWQsIENvbXBs
ZXRpb25IYW4KIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoRW5zdXJlSGFzUHJvY2Vzc1Bvb2w6OlllcykpIHsKICAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRJbkFwcEJyb3dzZXJQcml2YWN5
RW5hYmxlZChtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggYzc5OTJjNWVhOTVlYmY4MjE2ZTdhODU2NzdlNTQyYjNj
OTkzYzQ1ZC4uMDZlYjIzZWZmMDBiOWQ3ZjlmYjJhYjFiYWE4MGE0YmRjNjIwNmQ4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaApAQCAtMzAwLDcgKzMwMCw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFdURjo6U3Ry
aW5nIGNhY2hlRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBkaXJlY3RvcnlOYW1lKTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgd2Vic2l0ZURhdGFE
aXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGRpcmVj
dG9yeU5hbWUpOwogCi0gICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNz
UG9vbHMoc2l6ZV90IGNvdW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwg
Ym9vbCBlbnN1cmVBUG9vbEV4aXN0cyA9IHRydWUpIGNvbnN0OworICAgIGVudW0gY2xhc3MgRW5z
dXJlSGFzUHJvY2Vzc1Bvb2wgOiBib29sIHsgTm8sIFllcyB9OworICAgIEhhc2hTZXQ8UmVmUHRy
PFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzKEVuc3VyZUhhc1Byb2Nlc3NQb29sLCBzaXpl
X3QgbGltaXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKSBjb25zdDsKIAog
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJ
bmZvPiBwbHVnaW5zKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392434</attachid>
            <date>2020-03-04 09:59:28 -0800</date>
            <delta_ts>2020-03-04 10:09:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208546-20200304095927.patch</filename>
            <type>text/plain</type>
            <size>44416</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE4ODVjMzNkNDAwMTUyMmJl
ZjU0YTkxOTJiNzVmOGY4M2Y4YjQwYzcuLmU3OTk0NDZhYzExYmM0M2NhYzJiZjI0YWIyMzlkZTk0
YmExMDM4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMjAtMDMtMDQgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scygpJ3MgZW5zdXJlQVBvb2xFeGlzdHMgb3B0aW9uYWwgcGFyYW1ldGVyIGFu
ZCBhZGQgYSBlbnN1cmVQcm9jZXNzUG9vbHMoKSBtZXRob2QgaW5zdGVhZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTQ2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBEcm9wIFdlYnNpdGVEYXRhU3RvcmU6OnBy
b2Nlc3NQb29scygpJ3MgZW5zdXJlQVBvb2xFeGlzdHMgb3B0aW9uYWwgcGFyYW1ldGVyIGFuZCBh
ZGQgYSBlbnN1cmVQcm9jZXNzUG9vbHMoKQorICAgICAgICBtZXRob2QgaW5zdGVhZC4gVGhpcyB3
YXMgZXJyb3ItcHJvbmUgYW5kIHdlIGFyZSBhIGxvdCBvZiBjb2RlIGNyZWF0aW5nIHByb2Nlc3Mg
cG9vbHMgdW5uZWNlc3NhcmlseSBhcyBhCisgICAgICAgIHJlc3VsdC4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdU
aW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YVN1bW1hcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5u
aW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRl
bGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQ
YXJ0eUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmVuc3VyZVByb2Nlc3NQb29scyBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsdWdpbnMgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDIwLTAzLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyIHNob3VsZCBub3QgY3JlYXRlIGEgY29ubmVjdGlvbiB0byBHUFUg
UHJvY2VzcyBpZiBwYWdlIGRvZXMgbm90IHdhbnQgcmVtb3RlIHJlbmRlcmluZwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAppbmRleCBhZmFmYTAxMDhlOTg5Yjg2ODYzMTUxOGNhNWQ5MTdkZWJiMTVkZTBmLi4xNzhj
YTRkYzkyYzEwYWY5ZDQ2MjA0NTdkYjIyZDgyOWIzNDE2MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApA
QCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogCiBXZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCiB7Ci0gICAg
YXV0byBwb29scyA9IHByb2Nlc3NQb29scygxLCBmYWxzZSk7CisgICAgYXV0byBwb29scyA9IHBy
b2Nlc3NQb29scygxKTsKICAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBv
b2xzLmJlZ2luKCktPmdldCgpOwogfQogCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBk
YXRhVHlwZXMsIE8KIAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0
ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNp
c3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNj
ZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nl
c3NQb29scygpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6
CiAgICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKQEAg
LTcwNiw3ICs3MDYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2VuZGlmCiAgICAgYXV0
byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAgIGlmIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAg
ICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgogICAgICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCkBAIC03MzMsNyArNzMzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgV2FsbFRpbWUKIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBj
b21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1Bl
cnNpc3RlbnQoKSk7CiAgICAgaWYgKHdlYlByb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nl
c3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vz
c1Bvb2xzKCkpIHsKICAgICAgICAgICAgIC8vIENsZWFyIGJhY2svZm9yd2FyZCBjYWNoZSBmaXJz
dCBhcyBwcm9jZXNzZXMgcmVtb3ZlZCBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgd2lsbCBs
aWtlbHkKICAgICAgICAgICAgIC8vIGJlIGFkZGVkIHRvIHRoZSBXZWJQcm9jZXNzIGNhY2hlLgog
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmJhY2tGb3J3YXJkQ2FjaGUoKS5yZW1vdmVFbnRyaWVz
Rm9yU2Vzc2lvbihzZXNzaW9uSUQoKSk7CkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlm
IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJz
aXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJv
Y2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBjb25zdCBWZQogICAgIAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
ID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBl
cywgIWlzUGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
ZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKICAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQpAQCAtMTE1OSw3ICsxMTU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQsIENvbXBsZXQKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTExNjksNyArMTE2OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBD
b21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklE
LCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNh
bGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQogfQpAQCAtMTE4MCw3ICsx
MTgwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQor
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdU
aW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTExOTAsNyAr
MTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQor
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7
CiB9CiAgICAgCkBAIC0xMTk4LDEwICsxMTk4LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFMK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkg
PT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEyMTYsMTAg
KzEyMTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAx
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIzNCwxMCArMTIz
Miw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNTQsNyArMTI1MSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CiB9CkBAIC0xMjcwLDcgKzEyNjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xMjg1
LDEwICsxMjgyLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkg
PT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMDUsNyAr
MTMwMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29s
cygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CkBAIC0xMzE3LDcgKzEzMTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTEzMzIsNyAr
MTMyOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9
KTsKICAgICB9CkBAIC0xMzQyLDEwICsxMzM4LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VS
VChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KQEAgLTEzNjIsNyArMTM1Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VV
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xMzcyLDEwICsxMzY3
LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkg
ewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7CiAgICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCku
c2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzOTYsNyArMTM5MCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
fQpAQCAtMTQxMyw3ICsxNDA3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTQzMCw3ICsxNDI0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9
CkBAIC0xNDQ3LDcgKzE0NDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRG
cm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNDU3LDEwICsxNDUxLDkgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1
cmxSZWRpcmVjdGVkRnJvbSwKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9
PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ3Nyw3ICsx
NDcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
CiAgICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
fQpAQCAtMTQ4OSw3ICsxNDgyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFt
ZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJz
VG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTQ5
OSw3ICsxNDkyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zdWJt
aXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiAgICAgfQpAQCAtMTUxMSw3ICsxNTA0
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
eworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewog
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQogICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CkBAIC0xNTIxLDcgKzE1MTQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2
bwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0KQEAgLTE1MzMsNyArMTUyNiw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFu
ZGZhdGhlclN0YXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHBy
b2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsg
fSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Y2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNTQzLDcgKzE1
MzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
KyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
ICAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNz
aW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNTU1LDcgKzE1NDgsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2lu
ZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAg
ICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5n
KG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTU3MCw3ICsxNTYzLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25k
cyBzZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAg
ICAgICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE1ODUs
NyArMTU3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsICwgY29uc3QgVVJMJiB0b3BGCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkg
ewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQ
cmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE1
OTUsNyArMTU4OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KQogICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwogfQogCkBAIC0xNjA0LDcgKzE1OTcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBs
ZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQogICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKIH0K
IApAQCAtMTYxMiw3ICsxNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlLCBDb21wbGUKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKIH0KIApAQCAtMTYzMyw3ICsxNjI2LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywg
Q29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKIH0KIApAQCAtMTY0OCw3ICsxNjQxLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJv
Y2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNjYzLDEwICsxNjU2LDkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vz
cy0+aGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjgxLDEwICsxNjczLDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVy
bCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vzcy0+aXNS
ZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
VXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChw
cm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTE3MDEsNyArMTY5Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
ZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CkBAIC0xNzE4LDcgKzE3MDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBD
bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNzMwLDcgKzE3MjEsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewor
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQog
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9
KTsKICAgICB9CkBAIC0xNzQyLDcgKzE3MzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNzUyLDcgKzE3NDMs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpbwogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
eworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewog
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTc2
Miw3ICsxNzUzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE8KIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29v
a2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxs
YmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE3NzAsMTAgKzE3NjEs
OSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwTwogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzgyLDEwICsxNzcyLDkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGwKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Np
b25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1
cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
QVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTc5NiwxMCArMTc4NSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9y
VGVzdGluCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVu
YWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTgyOCwxMCArMTgxNiw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFNo
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKGJsb2NraW5nTW9kZSwgW2NhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xODQzLDEwICsxODMwLDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBl
bmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9u
ZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Ci0gICAgICAgICAgICBB
U1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xODU5LDcgKzE4NDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25k
cywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CkBAIC0xODcyLDcgKzE4NTgsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMoQ29tcGxldGlvbkhhbmRsZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwogICAgIH0KQEAgLTE4ODgsMTIgKzE4NzQsMTUgQEAgYm9vbCBXZWJzaXRlRGF0YVN0
b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wp
IGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3VudCwgYm9vbCBl
bnN1cmVBUG9vbEV4aXN0cykgY29uc3QKK0hhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAg
ICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzZXMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
c1Bvb2wgPSBwcm9jZXNzLnByb2Nlc3NQb29sSWZFeGlzdHMoKSkKKyAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3NQb29sID0gcHJvY2Vzcy5wcm9jZXNzUG9vbElmRXhpc3RzKCkpIHsKICAgICAgICAg
ICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOworICAgICAgICAgICAgaWYgKHByb2Nl
c3NQb29scy5zaXplKCkgPT0gbGltaXQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewpAQCAtMTkwMywx
NyArMTg5MiwyMSBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgY291bnQsIGJvbwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKLQot
ICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0gY291bnQpCisgICAgICAgICAg
ICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpICYm
IGNvdW50ICYmIGVuc3VyZUFQb29sRXhpc3RzKSB7CisgICAgcmV0dXJuIHByb2Nlc3NQb29sczsK
K30KKworSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpl
bnN1cmVQcm9jZXNzUG9vbHMoKSBjb25zdAoreworICAgIGF1dG8gcHJvY2Vzc1Bvb2xzID0gdGhp
cy0+cHJvY2Vzc1Bvb2xzKCk7CisgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgYXV0byBwcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgcHJvY2Vzc1Bvb2xzLmFk
ZChwcm9jZXNzUG9vbC5wdHIoKSk7CisgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bv
b2wucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHByb2Nlc3NQb29sczsK
IH0KIApAQCAtMTkyMiw3ICsxOTE1LDcgQEAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IFdlYnNp
dGVEYXRhU3RvcmU6OnBsdWdpbnMoKSBjb25zdAogewogICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJ
bmZvPiBwbHVnaW5zOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KSB7CiAgICAgICAgIGZvciAoYXV0byYgcGx1Z2luIDogcHJvY2Vzc1Bvb2wtPnBsdWdpbkluZm9T
dG9yZSgpLnBsdWdpbnMoKSkKICAgICAgICAgICAgIHBsdWdpbnMuYXBwZW5kKHBsdWdpbik7CiAg
ICAgfQpAQCAtMjAxNywxNCArMjAxMCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAg
ICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCksIGZhbHNlKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CiAgICAgICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgZmFsc2UpKSB7CisgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOwogICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSkpOwogICAgIH0KQEAgLTIwMzksNyAr
MjAzMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJh
Y2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgZmFs
c2UpKQorICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAg
ICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50
KHRydWUpKTsKICAgICB9CiAgICAgCkBAIC0yMDU5LDcgKzIwNTIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVk
LCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSht
X3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVn
YXRvci5jb3B5UmVmKCldIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsK
QEAgLTIwNzUsMTAgKzIwNjgsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTAwLDcgKzIwOTIsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmIGV2
ZW50KQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJ
bldlYlByb2Nlc3NlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCiB7CiAg
ICAgaWYgKHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkpIHsKLSAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9v
bC0+Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CiAgICAgfQogICAgIGNhbGxiYWNrKCk7
CkBAIC0yMjIxLDcgKzIyMTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3Rv
cmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KSB7CiAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmdldExvY2FsU3RvcmFnZURldGFp
bHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShhdXRvJiYgZGV0YWlscykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShkZXRhaWxzKSk7CkBAIC0yMjM1LDcgKzIyMjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
KyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
ICAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAg
LTIyNzEsMTAgKzIyNjMsOSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJv
Y2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5o
YXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIyODUsNyArMjI3Niw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQoYm9vbCBl
bmFibGVkLCBDb21wbGV0aW9uSGFuCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
ICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxl
ZChtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmgKaW5kZXggYzc5OTJjNWVhOTVlYmY4MjE2ZTdhODU2NzdlNTQyYjNjOTkzYzQ1
ZC4uNTZhZjNmOTk3NjFmNDhjNzhjMzMwMmEzMmRjM2E1NTRiMWVlYzhhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aApAQCAtMzAwLDcgKzMwMCwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBj
YWNoZURpcmVjdG9yeUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBXVEY6OlN0cmluZyYg
ZGlyZWN0b3J5TmFtZSk7CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIHdlYnNpdGVEYXRhRGlyZWN0
b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBkaXJlY3RvcnlO
YW1lKTsKIAotICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xz
KHNpemVfdCBjb3VudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIGJvb2wg
ZW5zdXJlQVBvb2xFeGlzdHMgPSB0cnVlKSBjb25zdDsKKyAgICBIYXNoU2V0PFJlZlB0cjxXZWJQ
cm9jZXNzUG9vbD4+IHByb2Nlc3NQb29scyhzaXplX3QgbGltaXQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpKSBjb25zdDsKKworICAgIC8vIFdpbGwgY3JlYXRlIGEgdGVtcG9y
YXJ5IHByb2Nlc3MgcG9vbCBpcyBub25lIGV4aXN0cyB5ZXQuCisgICAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBlbnN1cmVQcm9jZXNzUG9vbHMoKSBjb25zdDsKIAogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBwbHVn
aW5zKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392436</attachid>
            <date>2020-03-04 10:10:01 -0800</date>
            <delta_ts>2020-03-04 10:10:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208546-20200304101000.patch</filename>
            <type>text/plain</type>
            <size>44447</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE4ODVjMzNkNDAwMTUyMmJl
ZjU0YTkxOTJiNzVmOGY4M2Y4YjQwYzcuLmU3OTk0NDZhYzExYmM0M2NhYzJiZjI0YWIyMzlkZTk0
YmExMDM4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMjAtMDMtMDQgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scygpJ3MgZW5zdXJlQVBvb2xFeGlzdHMgb3B0aW9uYWwgcGFyYW1ldGVyIGFu
ZCBhZGQgYSBlbnN1cmVQcm9jZXNzUG9vbHMoKSBtZXRob2QgaW5zdGVhZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTQ2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBEcm9wIFdlYnNpdGVEYXRhU3RvcmU6OnBy
b2Nlc3NQb29scygpJ3MgZW5zdXJlQVBvb2xFeGlzdHMgb3B0aW9uYWwgcGFyYW1ldGVyIGFuZCBh
ZGQgYSBlbnN1cmVQcm9jZXNzUG9vbHMoKQorICAgICAgICBtZXRob2QgaW5zdGVhZC4gVGhpcyB3
YXMgZXJyb3ItcHJvbmUgYW5kIHdlIGFyZSBhIGxvdCBvZiBjb2RlIGNyZWF0aW5nIHByb2Nlc3Mg
cG9vbHMgdW5uZWNlc3NhcmlseSBhcyBhCisgICAgICAgIHJlc3VsdC4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdU
aW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YVN1bW1hcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5u
aW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRl
bGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQ
YXJ0eUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmVuc3VyZVByb2Nlc3NQb29scyBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsdWdpbnMgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDIwLTAzLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyIHNob3VsZCBub3QgY3JlYXRlIGEgY29ubmVjdGlvbiB0byBHUFUg
UHJvY2VzcyBpZiBwYWdlIGRvZXMgbm90IHdhbnQgcmVtb3RlIHJlbmRlcmluZwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAppbmRleCBhZmFmYTAxMDhlOTg5Yjg2ODYzMTUxOGNhNWQ5MTdkZWJiMTVkZTBmLi4xNjcy
M2UyOWZjYWJlZGUyMzMzZDgzYjdlMDJjMjk4ZWE5YzM0Y2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApA
QCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogCiBXZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCiB7Ci0gICAg
YXV0byBwb29scyA9IHByb2Nlc3NQb29scygxLCBmYWxzZSk7CisgICAgYXV0byBwb29scyA9IHBy
b2Nlc3NQb29scygxKTsKICAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBv
b2xzLmJlZ2luKCktPmdldCgpOwogfQogCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBk
YXRhVHlwZXMsIE8KIAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0
ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNp
c3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNj
ZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nl
c3NQb29scygpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6
CiAgICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKQEAg
LTcwNiw3ICs3MDYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2VuZGlmCiAgICAgYXV0
byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAgIGlmIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAg
ICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgogICAgICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCkBAIC03MzMsNyArNzMzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgV2FsbFRpbWUKIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBj
b21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1Bl
cnNpc3RlbnQoKSk7CiAgICAgaWYgKHdlYlByb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nl
c3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vz
c1Bvb2xzKCkpIHsKICAgICAgICAgICAgIC8vIENsZWFyIGJhY2svZm9yd2FyZCBjYWNoZSBmaXJz
dCBhcyBwcm9jZXNzZXMgcmVtb3ZlZCBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgd2lsbCBs
aWtlbHkKICAgICAgICAgICAgIC8vIGJlIGFkZGVkIHRvIHRoZSBXZWJQcm9jZXNzIGNhY2hlLgog
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmJhY2tGb3J3YXJkQ2FjaGUoKS5yZW1vdmVFbnRyaWVz
Rm9yU2Vzc2lvbihzZXNzaW9uSUQoKSk7CkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlm
IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJz
aXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJv
Y2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBjb25zdCBWZQogICAgIAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
ID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBl
cywgIWlzUGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
ZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKICAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQpAQCAtMTE1OSw3ICsxMTU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQsIENvbXBsZXQKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTExNjksNyArMTE2OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBD
b21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklE
LCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNh
bGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQogfQpAQCAtMTE4MCw3ICsx
MTgwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQor
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdU
aW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTExOTAsNyAr
MTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQor
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7
CiB9CiAgICAgCkBAIC0xMTk4LDEwICsxMTk4LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFMK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkg
PT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEyMTYsMTAg
KzEyMTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAx
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIzNCwxMCArMTIz
Miw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNTQsNyArMTI1MSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CiB9CkBAIC0xMjcwLDcgKzEyNjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xMjg1
LDEwICsxMjgyLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkg
PT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMDUsNyAr
MTMwMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29s
cygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CkBAIC0xMzE3LDcgKzEzMTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiB9CiAKQEAgLTEzMzIsNyAr
MTMyOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9
KTsKICAgICB9CkBAIC0xMzQyLDEwICsxMzM4LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VS
VChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KQEAgLTEzNjIsNyArMTM1Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VV
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xMzcyLDEwICsxMzY3
LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkg
ewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7CiAgICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCku
c2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzOTYsNyArMTM5MCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
fQpAQCAtMTQxMyw3ICsxNDA3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTQzMCw3ICsxNDI0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9
CkBAIC0xNDQ3LDcgKzE0NDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRG
cm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNDU3LDEwICsxNDUxLDkgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1
cmxSZWRpcmVjdGVkRnJvbSwKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9
PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ3Nyw3ICsx
NDcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
CiAgICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
fQpAQCAtMTQ4OSw3ICsxNDgyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFt
ZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJz
VG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTQ5
OSw3ICsxNDkyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5zdWJt
aXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiAgICAgfQpAQCAtMTUxMSw3ICsxNTA0
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
eworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewog
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQogICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CkBAIC0xNTIxLDcgKzE1MTQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2
bwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0KQEAgLTE1MzMsNyArMTUyNiw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFu
ZGZhdGhlclN0YXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHBy
b2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsg
fSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Y2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNTQzLDcgKzE1
MzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
KyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
ICAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNz
aW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNTU1LDcgKzE1NDgsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2lu
ZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAg
ICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5n
KG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTU3MCw3ICsxNTYzLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25k
cyBzZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAg
ICAgICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE1ODUs
NyArMTU3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsICwgY29uc3QgVVJMJiB0b3BGCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkg
ewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQ
cmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE1
OTUsNyArMTU4OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KQogICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwogfQogCkBAIC0xNjA0LDcgKzE1OTcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBs
ZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQogICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKIH0K
IApAQCAtMTYxMiw3ICsxNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlLCBDb21wbGUKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKIH0KIApAQCAtMTYzMyw3ICsxNjI2LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywg
Q29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKIH0KIApAQCAtMTY0OCw3ICsxNjQxLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJv
Y2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNjYzLDEwICsxNjU2LDkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vz
cy0+aGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjgxLDEwICsxNjczLDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVy
bCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vzcy0+aXNS
ZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
VXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChw
cm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTE3MDEsNyArMTY5Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
ZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
eyB9KTsKICAgICB9CkBAIC0xNzE4LDcgKzE3MDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBD
bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNzMwLDcgKzE3MjEsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewor
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQog
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9
KTsKICAgICB9CkBAIC0xNzQyLDcgKzE3MzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0xNzUyLDcgKzE3NDMs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpbwogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
eworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewog
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgfQpAQCAtMTc2
Miw3ICsxNzUzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE8KIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29v
a2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxs
YmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIH0KQEAgLTE3NzAsMTAgKzE3NjEs
OSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwTwogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzgyLDEwICsxNzcyLDkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGwKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Np
b25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1
cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
QVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTc5NiwxMCArMTc4NSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9y
VGVzdGluCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVu
YWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwotICAgICAgICAgICAgQVNTRVJUKHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTgyOCwxMCArMTgxNiw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFNo
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKGJsb2NraW5nTW9kZSwgW2NhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xODQzLDEwICsxODMwLDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBl
bmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9u
ZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Ci0gICAgICAgICAgICBB
U1NFUlQocHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xODU5LDcgKzE4NDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25k
cywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQorICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CkBAIC0xODcyLDcgKzE4NTgsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMoQ29tcGxldGlvbkhhbmRsZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwogICAgIH0KQEAgLTE4ODgsMTIgKzE4NzQsMTUgQEAgYm9vbCBXZWJzaXRlRGF0YVN0
b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wp
IGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBjb3VudCwgYm9vbCBl
bnN1cmVBUG9vbEV4aXN0cykgY29uc3QKK0hhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAg
ICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzZXMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
c1Bvb2wgPSBwcm9jZXNzLnByb2Nlc3NQb29sSWZFeGlzdHMoKSkKKyAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3NQb29sID0gcHJvY2Vzcy5wcm9jZXNzUG9vbElmRXhpc3RzKCkpIHsKICAgICAgICAg
ICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOworICAgICAgICAgICAgaWYgKHByb2Nl
c3NQb29scy5zaXplKCkgPT0gbGltaXQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewpAQCAtMTkwMywx
NyArMTg5MiwxOSBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgY291bnQsIGJvbwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKLQot
ICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0gY291bnQpCisgICAgICAgICAg
ICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpICYm
IGNvdW50ICYmIGVuc3VyZUFQb29sRXhpc3RzKSB7Ci0gICAgICAgIGF1dG8gcHJvY2Vzc1Bvb2wg
PSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpj
cmVhdGUoKSk7Ci0gICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wucHRyKCkpOwot
ICAgIH0KKyAgICByZXR1cm4gcHJvY2Vzc1Bvb2xzOworfQogCitIYXNoU2V0PFJlZlB0cjxXZWJQ
cm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OmVuc3VyZVByb2Nlc3NQb29scygpIGNvbnN0
Cit7CisgICAgYXV0byBwcm9jZXNzUG9vbHMgPSB0aGlzLT5wcm9jZXNzUG9vbHMoKTsKKyAgICBp
ZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChXZWJQ
cm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUo
KSkpOwogICAgIHJldHVybiBwcm9jZXNzUG9vbHM7CiB9CiAKQEAgLTE5MjIsNyArMTkxMyw3IEBA
IFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBXZWJzaXRlRGF0YVN0b3JlOjpwbHVnaW5zKCkgY29u
c3QKIHsKICAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2luczsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHBs
dWdpbiA6IHByb2Nlc3NQb29sLT5wbHVnaW5JbmZvU3RvcmUoKS5wbHVnaW5zKCkpCiAgICAgICAg
ICAgICBwbHVnaW5zLmFwcGVuZChwbHVnaW4pOwogICAgIH0KQEAgLTIwMTcsMTQgKzIwMDgsMTQg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5l
Y2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scyhzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBmYWxzZSkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgdHJ1ZSkpOwogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1
ZSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCksIGZhbHNlKSkgeworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCht
X3Nlc3Npb25JRCwgZmFsc2UpKTsKICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZmFsc2UpKTsKICAgICB9CkBAIC0yMDM5LDcgKzIwMzAsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlv
bjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykg
ewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIGZhbHNlKSkKKyAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CiAgICAgfQogICAgIApAQCAt
MjA1OSw3ICsyMDUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CkBAIC0yMDc1LDEwICsyMDY2LDkgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgQVNTRVJU
KHByb2Nlc3NQb29scygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjEwMCw3ICsyMDkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjps
b2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQ
b29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpOwogICAgIH0KICAgICBjYWxsYmFjaygpOwpAQCAtMjIyMSw3ICsyMjExLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewogICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7CiAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpLT5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwpAQCAtMjIz
NSw3ICsyMjI1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRh
aWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAgICBwcm9jZXNzLT5yZXNl
dFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICB9CkBAIC0yMjcxLDEwICsyMjYxLDkgQEAgV1RGOjpT
dHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURp
cmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJv
Y2Vzc1Bvb2xzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMjg1LDcgKzIyNzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElu
QXBwQnJvd3NlclByaXZhY3lFbmFibGVkKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbgogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3Vy
ZVByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2V0SW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlS
ZWYoKV0geyB9KTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IGM3OTkyYzVl
YTk1ZWJmODIxNmU3YTg1Njc3ZTU0MmIzYzk5M2M0NWQuLjU2YWYzZjk5NzYxZjQ4Yzc4YzMzMDJh
MzJkYzNhNTU0YjFlZWM4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTMwMCw3ICszMDAsMTAgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgY2FjaGVEaXJlY3RvcnlGaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWUpOwogICAgIHN0YXRp
YyBXVEY6OlN0cmluZyB3ZWJzaXRlRGF0YURpcmVjdG9yeUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihjb25zdCBXVEY6OlN0cmluZyYgZGlyZWN0b3J5TmFtZSk7CiAKLSAgICBIYXNoU2V0PFJlZlB0
cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29scyhzaXplX3QgY291bnQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBib29sIGVuc3VyZUFQb29sRXhpc3RzID0gdHJ1ZSkg
Y29uc3Q7CisgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHMo
c2l6ZV90IGxpbWl0ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkgY29uc3Q7
CisKKyAgICAvLyBXaWxsIGNyZWF0ZSBhIHRlbXBvcmFyeSBwcm9jZXNzIHBvb2wgaXMgbm9uZSBl
eGlzdHMgeWV0LgorICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gZW5zdXJlUHJv
Y2Vzc1Bvb2xzKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAg
ICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2lucygpIGNvbnN0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>