<?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>224659</bug_id>
          
          <creation_ts>2021-04-16 01:09:47 -0700</creation_ts>
          <short_desc>Deploy Ref/RefPtr/WeakPtr in EditCommand and CompositeEditCommand</short_desc>
          <delta_ts>2021-04-24 15:10:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>iang</cc>
    
    <cc>julian_a_gonzalez</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1750977</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 01:09:47 -0700</bug_when>
    <thetext>Deploy smart pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750985</commentid>
    <comment_count>1</comment_count>
      <attachid>426197</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 01:47:08 -0700</bug_when>
    <thetext>Created attachment 426197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750993</commentid>
    <comment_count>2</comment_count>
      <attachid>426197</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-04-16 02:44:03 -0700</bug_when>
    <thetext>Comment on attachment 426197
Patch

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

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:1013
&gt; +    ([&amp;]() {

Are the parethesis necessary? I think just doing

[&amp;] {
  ...
}();

works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750995</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-04-16 02:46:30 -0700</bug_when>
    <thetext>Also you could consider making it an informatively named lambda, just for documentation purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750996</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 02:46:53 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #2)
&gt; Comment on attachment 426197 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=426197&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/CompositeEditCommand.cpp:1013
&gt; &gt; +    ([&amp;]() {
&gt; 
&gt; Are the parethesis necessary? I think just doing
&gt; 
&gt; [&amp;] {
&gt;   ...
&gt; }();
&gt; 
&gt; works.

That&apos;s a good point. Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750999</commentid>
    <comment_count>5</comment_count>
      <attachid>426200</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 02:55:52 -0700</bug_when>
    <thetext>Created attachment 426200
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751000</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 02:55:57 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Also you could consider making it an informatively named lambda, just for
&gt; documentation purposes.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751008</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-16 03:21:52 -0700</bug_when>
    <thetext>Committed r276131 (236626@main): &lt;https://commits.webkit.org/236626@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 426200.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753952</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-24 15:10:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/77110130&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426197</attachid>
            <date>2021-04-16 01:47:08 -0700</date>
            <delta_ts>2021-04-16 02:55:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224659-20210416014707.patch</filename>
            <type>text/plain</type>
            <size>33900</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM5ZGJmOTU0MWMxMWZh
NDRiODEwYzI1NDg3MjIyYjk3MWM0NTQ4Mi4uMmUyNzA3MmIyMGVmMWY3MjJlYzI2NDk4ZDBkNTRm
ZWE0ODU0Y2RlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTE2ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
L1dlYWtQdHIgaW4gRWRpdENvbW1hbmQgYW5kIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ2NTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZXBsb3llZCBSZWYvUmVm
UHRyL1dlYWtQdHIgYWNyb3NzIENvbXBvc2l0ZUVkaXRDb21tYW5kIGFuZCBFZGl0Q29tbWFuZC4K
KworICAgICAgICBBbHNvIHdyYXBwZWQgc2VjdGlvbnMgb2YgY29kZSB0aGF0IGFjY2VzcyByZW5k
ZXIgdHJlZSB3aXRoIFNjcmlwdERpc2FsbG93ZWRTY29wZS4KKworICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZW5zdXJlQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2spOiBMZXQgYSByYXcgcG9pbnRlciB0byB0aGUgcGFy
ZW50IG5vZGUgaGVyZQorICAgICAgICBzaW5jZSB0aGUgb25seSB0aGluZyB3ZSBkbyBpcyB0byBj
YWxsIGhhc09uZUNoaWxkIG9uIGl0LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5vZGVBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRy
ZW5BbmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0ZXh0Tm9kZUZvclJlYmFsYW5jZSBjb25zdCk6IFJlbmFtZWQgZnJvbSBjYW5S
ZWJhbGFuY2UgYW5kCisgICAgICAgIG5vdyByZXR1cm5zIHRoZSB0ZXh0IG5vZGUgYWZ0ZXIgZG93
bmNhc3Rpbmcgc28gdGhhdCByZWJhbGFuY2VXaGl0ZXNwYWNlQXQgZG9lc24ndCBuZWVkIHRvIGhh
dmUKKyAgICAgICAgYSBsb25lIGRvd25jYXN0IHdpdGhvdXQgYSB0eXBlIGNoZWNrLgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VBdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVz
cGFjZU9uVGV4dFN1YnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVy
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25l
UGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQpOiBO
b3cgaW5oZXJpdHMgZnJvbSBDYW5NYWtlV2Vha1B0ci4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ29t
cG9zaXRlRWRpdENvbW1hbmQpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKTogSW5p
dGlhbGl6ZSBtX3N0YXJ0aW5nU2VsZWN0aW9uIGFuZCBtX2VuZGluZ1NlbGVjdGlvbiBkaXJlY3Rs
eQorICAgICAgICBzaW5jZSBzZXRTdGFydGluZ1NlbGVjdGlvbiBhbmQgc2V0RW5kaW5nU2VsZWN0
aW9uIG5vdyBzdG9yZXMgInRoaXMiIHBvaW50ZXIgaW4gUmVmUHRyLgorICAgICAgICBUaGVyZSBp
cyBubyBiZWhhdmlvciBkaWZmZXJlbmNlIHNpbmNlIG1fcGFyZW50IGFuZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bV9jb21wb3NpdGlvbiBpZiBhcHBsaWNhYmxlCisgICAgICAgIGFyZSBib3RoIG51
bGxwdHIgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBvc2l0aW9uSWZQb3Nz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFP
clRleHRJbnB1dCBjb25zdCk6IFVzZSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wgaW5zdGVhZAor
ICAgICAgICBvZiBkdXBsaWNhdGluZyB0aGUgY29kZSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENv
bW1hbmQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBhcmVudCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisKIDIwMjEtMDQtMTUgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBTdXBwb3J0IHRoZSBU
cmFuc2xhdGUgbWVudSBpdGVtIGluIGVkaXRhYmxlIHNlbGVjdGVkIHRleHQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggYjFhODEwNzg0
YmExZDczMDliZTA2MDAyN2I0ZjBkZTk4YmJmMjMzOC4uN2Y4NmQxYjNkYjVmZGUyZjUyZTAxMjc4
MTkyMjFhMjAxZGNkNmRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgi
CiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93
ZWRTY29wZS5oIgogI2luY2x1ZGUgIlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiU3BsaXRFbGVtZW50Q29tbWFuZC5oIgogI2luY2x1ZGUgIlNwbGl0VGV4dE5vZGVDb21tYW5k
LmgiCkBAIC0xNTEsMTUgKzE1MiwxNSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNl
ZFRleHQ6OnRleHREZWxldGVkQnlSZWFwcGx5KCkKIHN0YXRpYyB2b2lkIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0IFN0cmluZyYg
aW5zZXJ0ZWRUZXh0KQogewogICAgIEFTU0VSVChjYWNoZSk7Ci0gICAgYXV0byogbm9kZSA9IGhp
Z2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRpdGFibGVB
WFJvbGUpOworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChw
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLCBIYXNFZGl0YWJsZUFYUm9sZSkpOwogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbnNlcnRlZFRleHQubGVuZ3RoKCkgJiYg
ZGVsZXRlZFRleHQubGVuZ3RoKCkpCi0gICAgICAgIGNhY2hlLT5wb3N0VGV4dFJlcGxhY2VtZW50
Tm90aWZpY2F0aW9uKG5vZGUsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBpbnNlcnRlZFRleHQsIEFY
VGV4dEVkaXRUeXBlSW5zZXJ0LCBkZWxldGVkVGV4dCwgcG9zaXRpb24pOworICAgICAgICBjYWNo
ZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbihub2RlLmdldCgpLCBBWFRleHRFZGl0
VHlwZURlbGV0ZSwgaW5zZXJ0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZUluc2VydCwgZGVsZXRlZFRl
eHQsIHBvc2l0aW9uKTsKICAgICBlbHNlIGlmIChkZWxldGVkVGV4dC5sZW5ndGgoKSkKLSAgICAg
ICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obm9kZSwgQVhUZXh0RWRp
dFR5cGVJbnNlcnQsIGRlbGV0ZWRUZXh0LCBwb3NpdGlvbik7CisgICAgICAgIGNhY2hlLT5wb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG5vZGUuZ2V0KCksIEFYVGV4dEVkaXRUeXBlSW5z
ZXJ0LCBkZWxldGVkVGV4dCwgcG9zaXRpb24pOwogICAgIGVsc2UgaWYgKGluc2VydGVkVGV4dC5s
ZW5ndGgoKSkKLSAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
bm9kZSwgQVhUZXh0RWRpdFR5cGVEZWxldGUsIGluc2VydGVkVGV4dCwgcG9zaXRpb24pOworICAg
ICAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihub2RlLmdldCgpLCBB
WFRleHRFZGl0VHlwZURlbGV0ZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbik7CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb25Gb3JVbmFwcGx5KEFYT2JqZWN0Q2FjaGUqIGNhY2hlKQpAQCAtNDQxLDcgKzQ0Miw3IEBA
IEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpjb21wb3NpdGlv
bigpIGNvbnN0CiAKIEVkaXRDb21tYW5kQ29tcG9zaXRpb24mIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjplbnN1cmVDb21wb3NpdGlvbigpCiB7Ci0gICAgYXV0byogY29tbWFuZCA9IHRoaXM7CisgICAg
YXV0byBjb21tYW5kID0gbWFrZVJlZlB0cih0aGlzKTsKICAgICB3aGlsZSAoYXV0byogcGFyZW50
ID0gY29tbWFuZC0+cGFyZW50KCkpCiAgICAgICAgIGNvbW1hbmQgPSBwYXJlbnQ7CiAgICAgaWYg
KCFjb21tYW5kLT5tX2NvbXBvc2l0aW9uKQpAQCAtNTM2LDExICs1MzcsMTIgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2soY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQo
bm9kZSk7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIGVsZW1lbnRzIHRo
YXQgY2FuIGJlIHJlbW92ZWQuCiAgICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQo
KSAhPSBwYXJlbnROb2RlLT5sYXN0Q2hpbGQoKSkKKyAgICBhdXRvKiBwYXJlbnROb2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50Tm9kZSB8fCAhcGFyZW50Tm9kZS0+aGFz
T25lQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFkb3duY2FzdDxI
VE1MRGl2RWxlbWVudD4oKm5vZGUpLmhhc0F0dHJpYnV0ZXMoKSkKQEAgLTU1MSw3ICs1NTMsNyBA
QCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1JlbW92YWJsZUJsb2NrKGNvbnN0IE5vZGUq
IG5vZGUpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoUmVm
PE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIE5vZGUmIHJlZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsK
LSAgICBhdXRvKiBwYXJlbnQgPSByZWZDaGlsZC5wYXJlbnROb2RlKCk7CisgICAgYXV0byBwYXJl
bnQgPSBtYWtlUmVmUHRyKHJlZkNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAgaWYgKCFwYXJlbnQg
fHwgKCFwYXJlbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBwYXJlbnQtPnJlbmRlcmVyKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6OmNyZWF0ZShXVEZNb3ZlKGluc2VydENoaWxkKSwgcmVmQ2hpbGQsIHNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBlZGl0aW5nQWN0aW9uKCkpKTsKQEAgLTU1
OSw3ICs1NjEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3Jl
KFJlZjxOb2RlPiYmIGluc2VydENoaWxkLCBOb2RlJiByZWZDaAogCiB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoUmVmPE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIE5vZGUm
IHJlZkNoaWxkKQogewotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHJlZkNoaWxkLnBhcmVu
dE5vZGUoKTsKKyAgICBhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIocmVmQ2hpbGQucGFyZW50Tm9k
ZSgpKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzgsMTEgKzU4
MCwxMSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoUmVmPE5vZGU+
JiYgaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2l0aW9uJgogICAgIC8vIEZvciBlZGl0aW5nIHBvc2l0
aW9ucyBsaWtlIFt0YWJsZSwgMF0sIGluc2VydCBiZWZvcmUgdGhlIHRhYmxlLAogICAgIC8vIGxp
a2V3aXNlIGZvciByZXBsYWNlZCBlbGVtZW50cywgYnJzLCBldGMuCiAgICAgUG9zaXRpb24gcCA9
IGVkaXRpbmdQb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBy
ZWZDaGlsZCA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBhdXRvIHJlZkNoaWxkID0gbWFrZVJl
ZlB0cihwLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CiAgICAgCiAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
KnJlZkNoaWxkKSkgewotICAgICAgICBOb2RlKiBjaGlsZCA9IHJlZkNoaWxkLT5maXJzdENoaWxk
KCk7CisgICAgICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKHJlZkNoaWxkLT5maXJzdENoaWxk
KCkpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgY2hpbGQgJiYgaSA8IG9mZnNldDsgaSsrKQog
ICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNo
aWxkKQpAQCAtNjExLDcgKzYxMyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVu
ZE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgUmVmPENvbnRhaW5lck5vZGU+JiYgcGFyCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYgbm9kZSwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gY2hpbGRy
ZW47Ci0gICAgTm9kZSogY2hpbGQgPSBub2RlLnRyYXZlcnNlVG9DaGlsZEF0KGZyb20pOworICAg
IGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IGZyb207IGNoaWxkICYmIGkgPCB0bzsgaSsrLCBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNoaWxkKTsK
IApAQCAtNjY2LDEzICs2NjgsMTIgQEAgSFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXQKICAgICAvLyBh
cyBhIHNlcmllcyBvZiBleGlzdGluZyBzbWFsbGVyIGVkaXQgY29tbWFuZHMuICBTb21lb25lIHdo
byB3YW50ZWQgdG8KICAgICAvLyByZWR1Y2UgdGhlIG51bWJlciBvZiBlZGl0IGNvbW1hbmRzIGNv
dWxkIGRvIHNvIGhlcmUuCiAgICAgYXV0byBjb21tYW5kID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQ6OmNyZWF0ZShlbGVtZW50KTsKLSAgICBhdXRvKiBjb21tYW5kUHRyID0gY29tbWFuZC5w
dHIoKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpKTsKKyAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kKTsKICAgICAvLyBSZXR1cm5pbmcgYSBy
YXcgcG9pbnRlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhlIGNvbW1hbmQgaXMgcmV0YWluZWQgYnkK
ICAgICAvLyBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZSAodGh1cyByZXRhaW5pbmcgdGhlIHNwYW4p
LCBhbmQgdGhlIHNwYW4gaXMgYWxzbwogICAgIC8vIGluIHRoZSBET00gdHJlZSwgYW5kIHRodXMg
YWxpdmUgd2hpZSBpdCBoYXMgYSBwYXJlbnQuCi0gICAgQVNTRVJUKGNvbW1hbmRQdHItPnNwYW5F
bGVtZW50KCktPmlzQ29ubmVjdGVkKCkpOwotICAgIHJldHVybiBjb21tYW5kUHRyLT5zcGFuRWxl
bWVudCgpOworICAgIEFTU0VSVChjb21tYW5kLT5zcGFuRWxlbWVudCgpLT5pc0Nvbm5lY3RlZCgp
KTsKKyAgICByZXR1cm4gY29tbWFuZC0+c3BhbkVsZW1lbnQoKTsKIH0KIAogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cHJ1bmUoTm9kZSogbm9kZSkKQEAgLTgyMiwxNiArODIzLDE2IEBAIFBv
c2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRl
ck5vZGUocG9zaXRpb24uYW5jaG9yTm9kZSgpKTsKICAgICB9CiAKLSAgICBhdXRvKiB0YWJTcGFu
ID0gdGFiU3Bhbk5vZGUocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKKyAgICBhdXRvIHRhYlNw
YW4gPSBtYWtlUmVmUHRyKHRhYlNwYW5Ob2RlKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpOwog
CiAgICAgaWYgKHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDw9IGNhcmV0TWluT2Zm
c2V0KCpwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQotICAgICAgICByZXR1cm4gcG9zaXRpb25J
blBhcmVudEJlZm9yZU5vZGUodGFiU3Bhbik7CisgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFy
ZW50QmVmb3JlTm9kZSh0YWJTcGFuLmdldCgpKTsKIAogICAgIGlmIChwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSA+PSBjYXJldE1heE9mZnNldCgqcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUodGFiU3Bhbik7
CisgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHRhYlNwYW4uZ2V0KCkp
OwogCiAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KGRvd25jYXN0PFRleHQ+KCpw
b3NpdGlvbi5jb250YWluZXJOb2RlKCkpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSk7Ci0gICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHRhYlNwYW4pOworICAg
IHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuLmdldCgpKTsKIH0KIAog
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0VGFiU3BhblBvc2l0aW9uKFJl
ZjxOb2RlPiYmIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3MpCkBAIC04ODYsNDIgKzg4Nyw0NCBA
QCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzaG91bGRSZWJhbGFuY2VMZWFkaW5nV2hpdGVz
cGFjZUZvcihjb25zdCBTdHJpbmcmIHRleAogICAgIHJldHVybiBjb250YWluc09ubHlEZXByZWNh
dGVkRWRpdGluZ1doaXRlc3BhY2UodGV4dCk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmNhblJlYmFsYW5jZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CitSZWZQdHI8
VGV4dD4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRleHROb2RlRm9yUmViYWxhbmNlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpOworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uY29udGFp
bmVyTm9kZSgpKTsKICAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIWlzPFRleHQ+KG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgVGV4dCYgdGV4dE5vZGUg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7Ci0gICAgaWYgKCF0ZXh0Tm9kZS5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdGV4dE5vZGUgPSBzdGF0aWNfcG9pbnRlcl9j
YXN0PFRleHQ+KHN0ZDo6ZXhjaGFuZ2Uobm9kZSwgbnVsbHB0cikpOworICAgIGlmICghdGV4dE5v
ZGUtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG5vZGUtPmRvY3Vt
ZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIHRleHROb2RlLT5kb2N1bWVudCgpLnVw
ZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0ZXh0
Tm9kZS5yZW5kZXJlcigpOworICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFk
IHNjcmlwdERpc2FsbG93ZWRTY29wZTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
ZXh0Tm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHls
ZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRleHROb2Rl
OwogfQogCiAvLyBGSVhNRTogRG9lc24ndCBnbyBpbnRvIHRleHQgbm9kZXMgdGhhdCBjb250cmli
dXRlIGFkamFjZW50IHRleHQgKHNpYmxpbmdzLCBjb3VzaW5zLCBldGMpLgogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAg
IGlmICghY2FuUmViYWxhbmNlKHBvc2l0aW9uKSkKKyAgICBhdXRvIHRleHROb2RlID0gdGV4dE5v
ZGVGb3JSZWJhbGFuY2UocG9zaXRpb24pOworICAgIGlmICghdGV4dE5vZGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIElmIHRoZSByZWJhbGFuY2UgaXMgZm9yIHRoZSBzaW5nbGUgb2Zmc2V0
LCBhbmQgbmVpdGhlciB0ZXh0W29mZnNldF0gbm9yIHRleHRbb2Zmc2V0IC0gMV0gYXJlIHNvbWUg
Zm9ybSBvZiB3aGl0ZXNwYWNlLCBkbyBub3RoaW5nLgogICAgIGludCBvZmZzZXQgPSBwb3NpdGlv
bi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8
VGV4dD4oKm5vZGUpLmRhdGEoKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRleHROb2RlLT5kYXRhKCk7
CiAgICAgaWYgKCFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZSh0ZXh0W29mZnNldF0pKSB7
CiAgICAgICAgIG9mZnNldC0tOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCAhZGVwcmVjYXRl
ZElzRWRpdGluZ1doaXRlc3BhY2UodGV4dFtvZmZzZXRdKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vic3RyaW5nKGRvd25jYXN0
PFRleHQ+KCpub2RlKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0
U3Vic3RyaW5nKCp0ZXh0Tm9kZSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHBv
c2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyhUZXh0JiB0ZXh0Tm9k
ZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQpAQCAtOTMwLDEyICs5MzMsMTIgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0
cmluZyhUZXh0JiB0ZXh0Tm9kZSwgaW4KICAgICBBU1NFUlQoIXRleHQuaXNFbXB0eSgpKTsKIAog
ICAgIC8vIFNldCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSB0byBkZWZpbmUgdGhlIGV4dGVudCBv
ZiB0aGUgd2hpdGVzcGFjZSBzdXJyb3VuZGluZyB0ZXh0W29mZnNldF0uCi0gICAgaW50IHVwc3Ry
ZWFtID0gc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgdXBzdHJlYW0gPSBzdGQ6Om1heCgwLCBz
dGFydE9mZnNldCk7CiAgICAgd2hpbGUgKHVwc3RyZWFtID4gMCAmJiBkZXByZWNhdGVkSXNFZGl0
aW5nV2hpdGVzcGFjZSh0ZXh0W3Vwc3RyZWFtIC0gMV0pKQogICAgICAgICB1cHN0cmVhbS0tOwog
ICAgIAotICAgIGludCBkb3duc3RyZWFtID0gZW5kT2Zmc2V0OwotICAgIHdoaWxlICgodW5zaWdu
ZWQpZG93bnN0cmVhbSA8IHRleHQubGVuZ3RoKCkgJiYgZGVwcmVjYXRlZElzRWRpdGluZ1doaXRl
c3BhY2UodGV4dFtkb3duc3RyZWFtXSkpCisgICAgdW5zaWduZWQgZG93bnN0cmVhbSA9IHN0ZDo6
bWF4KDAsIGVuZE9mZnNldCk7CisgICAgd2hpbGUgKGRvd25zdHJlYW0gPCB0ZXh0Lmxlbmd0aCgp
ICYmIGRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHRleHRbZG93bnN0cmVhbV0pKQogICAg
ICAgICBkb3duc3RyZWFtKys7CiAgICAgCiAgICAgaW50IGxlbmd0aCA9IGRvd25zdHJlYW0gLSB1
cHN0cmVhbTsKQEAgLTk0NiwyOCArOTQ5LDMxIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoVGV4dCYgdGV4dE5vZGUsIGluCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVEb3duc3RyZWFtUG9zKFBvc2l0aW9uKCZ0ZXh0Tm9k
ZSwgZG93bnN0cmVhbSkpOwogICAgIAogICAgIFN0cmluZyBzdHJpbmcgPSB0ZXh0LnN1YnN0cmlu
Zyh1cHN0cmVhbSwgbGVuZ3RoKTsKLSAgICBTdHJpbmcgcmViYWxhbmNlZFN0cmluZyA9IHN0cmlu
Z1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShzdHJpbmcsCiAgICAgLy8gRklYTUU6IEJlY2F1c2Ug
b2YgdGhlIHByb2JsZW0gbWVudGlvbmVkIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiwgd2Ug
bXVzdCBhbHNvIHVzZSBuYnNwcyBhdCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBzdHJpbmcgYmVjYXVz
ZQogICAgIC8vIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgYWxsIHN1cnJvdW5kaW5nIHdoaXRl
c3BhY2UsIGp1c3QgdGhlIHdoaXRlc3BhY2UgaW4gdGhlIGN1cnJlbnQgdGV4dCBub2RlLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlVXBzdHJlYW1Qb3MpIHx8IHVwc3RyZWFtID09IDAs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZURvd25zdHJlYW1Qb3MpIHx8ICh1bnNpZ25l
ZClkb3duc3RyZWFtID09IHRleHQubGVuZ3RoKCkpOwotICAgIAorICAgIFN0cmluZyByZWJhbGFu
Y2VkU3RyaW5nID0gc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKHN0cmluZywgaXNTdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVVcHN0cmVhbVBvcykgfHwgIXVwc3RyZWFtLAorICAgICAgICBp
c0VuZE9mUGFyYWdyYXBoKHZpc2libGVEb3duc3RyZWFtUG9zKSB8fCBkb3duc3RyZWFtID09IHRl
eHQubGVuZ3RoKCkpOworCiAgICAgaWYgKHN0cmluZyAhPSByZWJhbGFuY2VkU3RyaW5nKQogICAg
ICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKHRleHROb2RlLCB1cHN0cmVh
bSwgbGVuZ3RoLCByZWJhbGFuY2VkU3RyaW5nKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBvc2l0
aW9uKQogewotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOworICAg
IGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
aWYgKCFpczxUZXh0Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRleHQmIHRleHROb2Rl
ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwogICAgIAogICAgIGlmICghdGV4dE5vZGUubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGV4dE5v
ZGUucmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHlsZSgpLmNv
bGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICAgICByZXR1cm47CisgICAgCisgICAgeworICAgICAg
ICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2Nv
cGU7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0ZXh0Tm9kZS5yZW5kZXJlcigp
OworICAgICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHlsZSgpLmNvbGxhcHNlV2hp
dGVTcGFjZSgpKQorICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCisgICAgfQogCiAgICAgLy8g
RGVsZXRlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIHNvIHRoYXQgaW5zZXJ0aW5nIG5ic3BzIGRvZXNu
J3QgdW5jb2xsYXBzZSBpdC4KICAgICBQb3NpdGlvbiB1cHN0cmVhbVBvcyA9IHBvc2l0aW9uLnVw
c3RyZWFtKCk7CkBAIC0xMDAyLDQ5ICsxMDA4LDU2IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2RlLCB1bnNpZ25lZCBzdGFy
CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyVGV4dCogdGV4
dFJlbmRlcmVyID0gdGV4dE5vZGUucmVuZGVyZXIoKTsKLSAgICBpZiAoIXRleHRSZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgd2hvbGVUZXh0Tm9kZUlzRW1wdHkgPSBmYWxzZTsK
KyAgICBTdHJpbmcgc3RyOworICAgIChbJl0oKSB7CisgICAgICAgIFNjcmlwdERpc2FsbG93ZWRT
Y29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKKyAgICAgICAgUmVuZGVy
VGV4dCogdGV4dFJlbmRlcmVyID0gdGV4dE5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCF0
ZXh0UmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJ1biA9IExheW91
dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcigqdGV4dFJlbmRlcmVyKTsK
LSAgICBpZiAoIXJ1bikgewotICAgICAgICAvLyB3aG9sZSB0ZXh0IG5vZGUgaXMgZW1wdHkKLSAg
ICAgICAgcmVtb3ZlTm9kZSh0ZXh0Tm9kZSk7Ci0gICAgICAgIHJldHVybjsgICAgCi0gICAgfQot
ICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHROb2RlLmxlbmd0aCgpOwotICAgIGlmIChz
dGFydCA+PSBsZW5ndGggfHwgZW5kID4gbGVuZ3RoKQotICAgICAgICByZXR1cm47CisgICAgICAg
IGF1dG8gcnVuID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9y
KCp0ZXh0UmVuZGVyZXIpOworICAgICAgICBpZiAoIXJ1bikgeworICAgICAgICAgICAgd2hvbGVU
ZXh0Tm9kZUlzRW1wdHkgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICB1bnNpZ25lZCByZW1vdmVkID0gMDsKLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1
bkl0ZXJhdG9yIHByZXZpb3VzUnVuOwotICAgIFN0cmluZyBzdHI7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRleHROb2RlLmxlbmd0aCgpOworICAgICAgICBpZiAoc3RhcnQgPj0gbGVuZ3Ro
IHx8IGVuZCA+IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRoaXMgbG9v
cCBzdHJ1Y3R1cmUgd29ya3MgdG8gcHJvY2VzcyBhbGwgZ2FwcyBwcmVjZWRpbmcgYSBib3gsCi0g
ICAgLy8gYW5kIGFsc28gd2lsbCBsb29rIGF0IHRoZSBnYXAgYWZ0ZXIgdGhlIGxhc3QgYm94Lgot
ICAgIHdoaWxlIChwcmV2aW91c1J1biB8fCBydW4pIHsKLSAgICAgICAgdW5zaWduZWQgZ2FwU3Rh
cnQgPSBwcmV2aW91c1J1biA/IHByZXZpb3VzUnVuLT5lbmQoKSA6IDA7Ci0gICAgICAgIGlmIChl
bmQgPCBnYXBTdGFydCkKLSAgICAgICAgICAgIC8vIE5vIG1vcmUgY2hhbmNlIGZvciBhbnkgaW50
ZXJzZWN0aW9ucwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHVuc2lnbmVkIHJlbW92ZWQg
PSAwOworICAgICAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIHByZXZpb3Vz
UnVuOworCisgICAgICAgIC8vIFRoaXMgbG9vcCBzdHJ1Y3R1cmUgd29ya3MgdG8gcHJvY2VzcyBh
bGwgZ2FwcyBwcmVjZWRpbmcgYSBib3gsCisgICAgICAgIC8vIGFuZCBhbHNvIHdpbGwgbG9vayBh
dCB0aGUgZ2FwIGFmdGVyIHRoZSBsYXN0IGJveC4KKyAgICAgICAgd2hpbGUgKHByZXZpb3VzUnVu
IHx8IHJ1bikgeworICAgICAgICAgICAgdW5zaWduZWQgZ2FwU3RhcnQgPSBwcmV2aW91c1J1biA/
IHByZXZpb3VzUnVuLT5lbmQoKSA6IDA7CisgICAgICAgICAgICBpZiAoZW5kIDwgZ2FwU3RhcnQp
CisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIG1vcmUgY2hhbmNlIGZvciBhbnkgaW50ZXJz
ZWN0aW9ucworCisgICAgICAgICAgICB1bnNpZ25lZCBnYXBFbmQgPSBydW4gPyBydW4tPnN0YXJ0
KCkgOiBsZW5ndGg7CisgICAgICAgICAgICBib29sIGluZGljZXNJbnRlcnNlY3QgPSBzdGFydCA8
PSBnYXBFbmQgJiYgZW5kID49IGdhcFN0YXJ0OworICAgICAgICAgICAgaW50IGdhcExlbiA9IGdh
cEVuZCAtIGdhcFN0YXJ0OworICAgICAgICAgICAgaWYgKGluZGljZXNJbnRlcnNlY3QgJiYgZ2Fw
TGVuID4gMCkgeworICAgICAgICAgICAgICAgIGdhcFN0YXJ0ID0gc3RkOjptYXgoZ2FwU3RhcnQs
IHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBnYXBFbmQgPSBzdGQ6Om1pbihnYXBFbmQsIGVuZCk7
CisgICAgICAgICAgICAgICAgaWYgKHN0ci5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
c3RyID0gdGV4dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOworICAg
ICAgICAgICAgICAgIC8vIHJlbW92ZSB0ZXh0IGluIHRoZSBnYXAKKyAgICAgICAgICAgICAgICBz
dHIucmVtb3ZlKGdhcFN0YXJ0IC0gc3RhcnQgLSByZW1vdmVkLCBnYXBMZW4pOworICAgICAgICAg
ICAgICAgIHJlbW92ZWQgKz0gZ2FwTGVuOworICAgICAgICAgICAgfQogCi0gICAgICAgIHVuc2ln
bmVkIGdhcEVuZCA9IHJ1biA/IHJ1bi0+c3RhcnQoKSA6IGxlbmd0aDsKLSAgICAgICAgYm9vbCBp
bmRpY2VzSW50ZXJzZWN0ID0gc3RhcnQgPD0gZ2FwRW5kICYmIGVuZCA+PSBnYXBTdGFydDsKLSAg
ICAgICAgaW50IGdhcExlbiA9IGdhcEVuZCAtIGdhcFN0YXJ0OwotICAgICAgICBpZiAoaW5kaWNl
c0ludGVyc2VjdCAmJiBnYXBMZW4gPiAwKSB7Ci0gICAgICAgICAgICBnYXBTdGFydCA9IHN0ZDo6
bWF4KGdhcFN0YXJ0LCBzdGFydCk7Ci0gICAgICAgICAgICBnYXBFbmQgPSBzdGQ6Om1pbihnYXBF
bmQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQotICAgICAgICAgICAgICAg
IHN0ciA9IHRleHROb2RlLmRhdGEoKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAg
ICAgICAgICAgIC8vIHJlbW92ZSB0ZXh0IGluIHRoZSBnYXAKLSAgICAgICAgICAgIHN0ci5yZW1v
dmUoZ2FwU3RhcnQgLSBzdGFydCAtIHJlbW92ZWQsIGdhcExlbik7Ci0gICAgICAgICAgICByZW1v
dmVkICs9IGdhcExlbjsKKyAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcnVuOworICAgICAgICAg
ICAgaWYgKHJ1bikKKyAgICAgICAgICAgICAgICBydW4udHJhdmVyc2VOZXh0VGV4dFJ1bkluVGV4
dE9yZGVyKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByZXZpb3VzUnVuID0gcnVu
OwotICAgICAgICBpZiAocnVuKQotICAgICAgICAgICAgcnVuLnRyYXZlcnNlTmV4dFRleHRSdW5J
blRleHRPcmRlcigpOworICAgIH0pKCk7CisKKyAgICBpZiAod2hvbGVUZXh0Tm9kZUlzRW1wdHkp
IHsKKyAgICAgICAgcmVtb3ZlTm9kZSh0ZXh0Tm9kZSk7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoIXN0ci5pc051bGwoKSkgewpAQCAtMTExOSwxNiArMTEzMiwyMCBAQCBSZWZQ
dHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRl
ZChFbGVtZW50KiBjb250YWluZQogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGF1dG8qIHJlbmRlcmVyID0gY29udGFpbmVyLT5y
ZW5kZXJlcigpOwotICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIC8vIEFwcGVuZCB0aGUgcGxhY2Vob2xkZXIg
dG8gbWFrZSBzdXJlIGl0IGZvbGxvd3MgYW55IHVucmVuZGVyZWQgYmxvY2tzLgotICAgIGF1dG8m
IGJsb2NrRmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKTsKLSAgICBp
ZiAoIWJsb2NrRmxvdy5oZWlnaHQoKSB8fCAoYmxvY2tGbG93LmlzTGlzdEl0ZW0oKSAmJiAhYmxv
Y2tGbG93LmZpcnN0Q2hpbGQoKSkpCi0gICAgICAgIHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9s
ZGVyKCpjb250YWluZXIpOworICAgIHsKKyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJ
bk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAg
ICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBwbGFjZWhvbGRlciB0byBtYWtlIHN1
cmUgaXQgZm9sbG93cyBhbnkgdW5yZW5kZXJlZCBibG9ja3MuCisgICAgICAgIGF1dG8mIGJsb2Nr
RmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKTsKKyAgICAgICAgaWYg
KGJsb2NrRmxvdy5oZWlnaHQoKSAmJiAoIWJsb2NrRmxvdy5pc0xpc3RJdGVtKCkgfHwgYmxvY2tG
bG93LmZpcnN0Q2hpbGQoKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gYXBwZW5kQmxvY2tQbGFjZWhvbGRlcigqY29udGFpbmVyKTsKIH0KIAogLy8g
QXNzdW1lcyB0aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBsYWNlaG9sZGVyIGFuZCBkb2VzIHRo
ZSByZW1vdmFsIHdpdGhvdXQgbXVjaCBjaGVja2luZy4KQEAgLTEyNjEsOCArMTI3OCw4IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICAgICAgLy8gQ2xvbmUgZXZlcnkgbm9kZSBiZXR3ZWVu
IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgYW5kIG91dGVyQmxvY2suCiAKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IGFuY2VzdG9ycy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBO
b2RlKiBpdGVtID0gYW5jZXN0b3JzW2kgLSAxXS5nZXQoKTsKLSAgICAgICAgICAgIGF1dG8gY2hp
bGQgPSBpdGVtLT5jbG9uZU5vZGUoaXNSZW5kZXJlZFRhYmxlKGl0ZW0pKTsKKyAgICAgICAgICAg
IGF1dG8gaXRlbSA9IHN0ZDo6ZXhjaGFuZ2UoYW5jZXN0b3JzW2kgLSAxXSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBhdXRvIGNoaWxkID0gaXRlbS0+Y2xvbmVOb2RlKGlzUmVuZGVyZWRUYWJsZShp
dGVtLmdldCgpKSk7CiAgICAgICAgICAgICBhcHBlbmROb2RlKGNoaWxkLmNvcHlSZWYoKSwgZG93
bmNhc3Q8RWxlbWVudD4oKmxhc3ROb2RlKSk7CiAgICAgICAgICAgICBsYXN0Tm9kZSA9IFdURk1v
dmUoY2hpbGQpOwogICAgICAgICB9CkBAIC0xNTUyLDcgKzE1NjksNyBAQCBib29sIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSgpCiAgICAgc3R5bGUtPm1lcmdl
VHlwaW5nU3R5bGUoZG9jdW1lbnQoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbmV3QmxvY2s7
Ci0gICAgaWYgKENvbnRhaW5lck5vZGUqIGJsb2NrRW5jbG9zaW5nTGlzdCA9IGxpc3ROb2RlLT5w
YXJlbnROb2RlKCkpIHsKKyAgICBpZiAoYXV0byBibG9ja0VuY2xvc2luZ0xpc3QgPSBtYWtlUmVm
UHRyKGxpc3ROb2RlLT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgIGlmIChpczxIVE1MTElFbGVt
ZW50PigqYmxvY2tFbmNsb3NpbmdMaXN0KSkgeyAvLyBsaXN0Tm9kZSBpcyBpbnNpZGUgYW5vdGhl
ciBsaXN0IGl0ZW0KICAgICAgICAgICAgIGlmICh2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoKmJs
b2NrRW5jbG9zaW5nTGlzdCkgPT0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCpsaXN0Tm9kZSkp
IHsKICAgICAgICAgICAgICAgICAvLyBJZiBsaXN0Tm9kZSBhcHBlYXJzIGF0IHRoZSBlbmQgb2Yg
dGhlIG91dGVyIGxpc3QgaXRlbSwgdGhlbiBtb3ZlIGxpc3ROb2RlIG91dHNpZGUgb2YgdGhpcyBs
aXN0IGl0ZW0KQEAgLTE2MDcsNyArMTYyNCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0KGVuZGluZ1NlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpKTsKLSAgICBOb2RlKiBoaWdoZXN0QmxvY2txdW90ZSA9IGhp
Z2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNhcmV0LmRlZXBFcXVpdmFsZW50KCksICZpc01haWxC
bG9ja3F1b3RlKTsKKyAgICBhdXRvIGhpZ2hlc3RCbG9ja3F1b3RlID0gbWFrZVJlZlB0cihoaWdo
ZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjYXJldC5kZWVwRXF1aXZhbGVudCgpLCAmaXNNYWlsQmxv
Y2txdW90ZSkpOwogICAgIGlmICghaGlnaGVzdEJsb2NrcXVvdGUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMTYyMCwxNSArMTYzNywxNCBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgoKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgYXV0byBiciA9IEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCgpKTsKLSAgICBhdXRvKiBiclB0ciA9IGJyLnB0cigpOwogICAgIC8vIFdlIHdhbnQgdG8g
cmVwbGFjZSB0aGlzIHF1b3RlZCBwYXJhZ3JhcGggd2l0aCBhbiB1bnF1b3RlZCBvbmUsIHNvIGlu
c2VydCBhIGJyCiAgICAgLy8gdG8gaG9sZCB0aGUgY2FyZXQgYmVmb3JlIHRoZSBoaWdoZXN0IGJs
b2NrcXVvdGUuCi0gICAgaW5zZXJ0Tm9kZUJlZm9yZShici5jb3B5UmVmKCksICpoaWdoZXN0Qmxv
Y2txdW90ZSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGF0QlIocG9zaXRpb25CZWZvcmVOb2RlKGJy
UHRyKSk7CisgICAgaW5zZXJ0Tm9kZUJlZm9yZShiciwgKmhpZ2hlc3RCbG9ja3F1b3RlKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gYXRCUiA9IHBvc2l0aW9uQmVmb3JlTm9kZShici5wdHIoKSk7CiAg
ICAgLy8gSWYgdGhlIGJyIHdlIGluc2VydGVkIGNvbGxhcHNlZCwgZm9yIGV4YW1wbGUgZm9vPGJy
PjxibG9ja3F1b3RlPi4uLjwvYmxvY2txdW90ZT4sIGluc2VydAogICAgIC8vIGEgc2Vjb25kIG9u
ZS4KICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChhdEJSKSkKLSAgICAgICAgaW5zZXJ0Tm9k
ZUJlZm9yZShIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksICpiclB0cik7CisgICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBi
ci5nZXQoKSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYXRCUiwg
ZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgCiAgICAgLy8gSWYgdGhp
cyBpcyBhbiBlbXB0eSBwYXJhZ3JhcGggdGhlcmUgbXVzdCBiZSBhIGxpbmUgYnJlYWsgaGVyZS4K
QEAgLTE2NjQsMTYgKzE2ODAsMTYgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBv
c2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGNvbnN0IFBvc2kKICAgICAgICAg
cmV0dXJuIG9yaWdpbmFsOwogICAgICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
cyhvcmlnaW5hbCk7Ci0gICAgRWxlbWVudCogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nQW5j
aG9yRWxlbWVudChvcmlnaW5hbCk7CisgICAgYXV0byBlbmNsb3NpbmdBbmNob3IgPSBtYWtlUmVm
UHRyKGVuY2xvc2luZ0FuY2hvckVsZW1lbnQob3JpZ2luYWwpKTsKICAgICBQb3NpdGlvbiByZXN1
bHQgPSBvcmlnaW5hbDsKIAogICAgIGlmICghZW5jbG9zaW5nQW5jaG9yKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogCiAgICAgLy8gRG9uJ3QgYXZvaWQgYmxvY2sgbGV2ZWwgYW5jaG9ycywgYmVj
YXVzZSB0aGF0IHdvdWxkIGluc2VydCBjb250ZW50IGludG8gdGhlIHdyb25nIHBhcmFncmFwaC4K
LSAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmICFpc0Jsb2NrKGVuY2xvc2luZ0FuY2hvcikpIHsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoZmlyc3RQb3NpdGlvbkluTm9k
ZShlbmNsb3NpbmdBbmNob3IpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkFuY2hv
cihsYXN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgaWYgKGVuY2xvc2lu
Z0FuY2hvciAmJiAhaXNCbG9jayhlbmNsb3NpbmdBbmNob3IuZ2V0KCkpKSB7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiBmaXJzdEluQW5jaG9yKGZpcnN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5n
QW5jaG9yLmdldCgpKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5BbmNob3IobGFz
dFBvc2l0aW9uSW5Ob2RlKGVuY2xvc2luZ0FuY2hvci5nZXQoKSkpOwogICAgICAgICAvLyBJZiB2
aXN1YWxseSBqdXN0IGFmdGVyIHRoZSBhbmNob3IsIGluc2VydCAqaW5zaWRlKiB0aGUgYW5jaG9y
IHVubGVzcyBpdCdzIHRoZSBsYXN0CiAgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBpbiB0aGUg
ZG9jdW1lbnQsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCiAgICAgICAgIGlmICh2aXNpYmxlUG9zID09
IGxhc3RJbkFuY2hvcikgewpAQCAtMTY4OCwxMCArMTcwNCwxMCBAQCBQb3NpdGlvbiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkoY29u
c3QgUG9zaQogICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG91dHNpZGUgYW4gYW5jaG9yIGlm
IGRvaW5nIHNvIHdvdWxkIHNraXAgb3ZlciBhIGxpbmUgYnJlYWsuICBJdCB3b3VsZAogICAgICAg
ICAgICAgLy8gcHJvYmFibHkgYmUgc2FmZSB0byBtb3ZlIHRoZSBsaW5lIGJyZWFrIHNvIHRoYXQg
d2UgY291bGQgc3RpbGwgYXZvaWQgdGhlIGFuY2hvciBoZXJlLgogICAgICAgICAgICAgUG9zaXRp
b24gZG93bnN0cmVhbSh2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsK
LSAgICAgICAgICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbih2aXNpYmxl
UG9zKSAmJiBkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGVuY2xv
c2luZ0FuY2hvcikpCisgICAgICAgICAgICBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9z
aXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihlbmNsb3NpbmdBbmNob3IuZ2V0KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBv
cmlnaW5hbDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb25JblBh
cmVudEFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3IpOworICAgICAgICAgICAgcmVzdWx0ID0gcG9z
aXRpb25JblBhcmVudEFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3IuZ2V0KCkpOwogICAgICAgICB9
CiAgICAgICAgIC8vIElmIHZpc3VhbGx5IGp1c3QgYmVmb3JlIGFuIGFuY2hvciwgaW5zZXJ0ICpv
dXRzaWRlKiB0aGUgYW5jaG9yIHVubGVzcyBpdCdzIHRoZSBmaXJzdAogICAgICAgICAvLyBWaXNp
YmxlUG9zaXRpb24gaW4gYSBwYXJhZ3JhcGgsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCkBAIC0xNzA1
LDcgKzE3MjEsNyBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9p
ZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkoY29uc3QgUG9zaQogICAgICAgICAgICAgaWYgKCFl
bmNsb3NpbmdBbmNob3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwogCi0gICAg
ICAgICAgICByZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShlbmNsb3NpbmdBbmNo
b3IpOworICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZW5j
bG9zaW5nQW5jaG9yLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKaW5kZXggY2FiN2Y4MWEz
ZjlhNTliMjU2ZTg2ZDI3ZDk1M2Y2N2FhZWNkZjljYi4uMWViNmZlYzAwNmQ0N2RlMWJhNzc4ZjYx
MjQ5OGQ2OWQzOGJkNGIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKICNpbmNsdWRlICJVbmRvU3RlcC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMyw3
ICsxMDQsNyBAQCBwcml2YXRlOgogICAgIEVkaXRBY3Rpb24gbV9lZGl0QWN0aW9uOwogfTsKIAot
Y2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgeworY2xhc3Mg
Q29tcG9zaXRlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQsIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkNv
bXBvc2l0ZUVkaXRDb21tYW5kKCk7CiAKQEAgLTE2Myw3ICsxNjQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lk
IHJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoVGV4dCYsIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCk7CiAgICAgdm9pZCBwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25G
b3JTcGxpdChQb3NpdGlvbiYpOwotICAgIGJvb2wgY2FuUmViYWxhbmNlKGNvbnN0IFBvc2l0aW9u
JikgY29uc3Q7CisgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlRm9yUmViYWxhbmNlKGNvbnN0IFBv
c2l0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRSZWJhbGFuY2VMZWFkaW5nV2hpdGVzcGFj
ZUZvcihjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUo
RWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSk7CiAgICAgdm9pZCByZW1v
dmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKQEAg
LTIyMSwxMSArMjIyLDQgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3Np
dGlvbj4gbV9jb21wb3NpdGlvbjsKIH07CiAKLWlubGluZSBDb21wb3NpdGVFZGl0Q29tbWFuZCog
dG9Db21wb3NpdGVFZGl0Q29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFuZCkKLXsKLSAgICBBU1NF
UlQoY29tbWFuZCk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY29tbWFu
ZC0+aXNDb21wb3NpdGVFZGl0Q29tbWFuZCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29t
cG9zaXRlRWRpdENvbW1hbmQqPihjb21tYW5kKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCAxZjViNmFjYjlkYjE4
OGVhNjkwZjYwMDU2Yzc3Mzc3MDBlMmI4ZjQ1Li45MGY5MTRkMzdiMmQ5NzE1ODFmNTM3MTA0Nzcz
YzM5ZjcyMDNiZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAt
MzIsOCArMzIsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTIzLDE4ICsxMjIsMTggQEAgU3RyaW5nIGlucHV0VHlwZU5hbWVGb3JFZGl0
aW5nQWN0aW9uKEVkaXRBY3Rpb24gYWN0aW9uKQogfQogCiBFZGl0Q29tbWFuZDo6RWRpdENvbW1h
bmQoRG9jdW1lbnQmIGRvY3VtZW50LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCi0gICAgOiBt
X2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24p
CisgICAgOiBtX2RvY3VtZW50IHsgZG9jdW1lbnQgfQorICAgICwgbV9zdGFydGluZ1NlbGVjdGlv
biB7IG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpIH0KKyAgICAsIG1fZW5kaW5n
U2VsZWN0aW9uIHsgbV9zdGFydGluZ1NlbGVjdGlvbiB9CisgICAgLCBtX2VkaXRpbmdBY3Rpb24g
eyBlZGl0aW5nQWN0aW9uIH0KIHsKLSAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihtX2RvY3VtZW50
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKG1fc3Rh
cnRpbmdTZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQotICAgIDogbV9kb2N1bWVudChk
b2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQgeyBkb2N1bWVudCB9CisgICAgLCBtX3N0YXJ0aW5n
U2VsZWN0aW9uIHsgc3RhcnRpbmdTZWxlY3Rpb24gfQorICAgICwgbV9lbmRpbmdTZWxlY3Rpb24g
eyBlbmRpbmdTZWxlY3Rpb24gfQogewotICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5n
U2VsZWN0aW9uKTsKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0K
IAogRWRpdENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKQEAgLTE0NCw1MCArMTQz
LDQyIEBAIEVkaXRBY3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAg
IHJldHVybiBtX2VkaXRpbmdBY3Rpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgRWRpdENvbW1hbmRD
b21wb3NpdGlvbiogY29tcG9zaXRpb25JZlBvc3NpYmxlKEVkaXRDb21tYW5kKiBjb21tYW5kKQor
c3RhdGljIFJlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBjb21wb3NpdGlvbklmUG9zc2li
bGUoRWRpdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgaWYgKCFjb21tYW5kLT5pc0NvbXBvc2l0
ZUVkaXRDb21tYW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0NvbXBvc2l0
ZUVkaXRDb21tYW5kKGNvbW1hbmQpLT5jb21wb3NpdGlvbigpOworICAgIGlmICghY29tbWFuZC5p
c0NvbXBvc2l0ZUVkaXRDb21tYW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGVFZGl0Q29tbWFuZCY+KGNvbW1hbmQpLmNvbXBvc2l0
aW9uKCk7CiB9CiAKIGJvb2wgRWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQoKSBjb25zdAogewotICAgIGF1dG8qIGNvbnRhaW5lciA9IG1fZG9jdW1lbnQtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOwotICAgIGlmICghY29udGFp
bmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBhbmNlc3RvciA9IGNvbnRh
aW5lci0+c2hhZG93SG9zdCgpOwotICAgIGlmICghYW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqYW5jZXN0b3IpIHx8
IChpczxIVE1MSW5wdXRFbGVtZW50PigqYW5jZXN0b3IpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCphbmNlc3RvcikuaXNUZXh0KCkpOworICAgIHJldHVybiBlbmNsb3NpbmdUZXh0Rm9y
bUNvbnRyb2wobV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9
CiAKLXZvaWQgRWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHMpCit2b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgZm9yIChFZGl0Q29tbWFuZCog
Y21kID0gdGhpczsgOyBjbWQgPSBjbWQtPm1fcGFyZW50KSB7Ci0gICAgICAgIGlmIChhdXRvKiBj
b21wb3NpdGlvbiA9IGNvbXBvc2l0aW9uSWZQb3NzaWJsZShjbWQpKQotICAgICAgICAgICAgY29t
cG9zaXRpb24tPnNldFN0YXJ0aW5nU2VsZWN0aW9uKHMpOwotICAgICAgICBjbWQtPm1fc3RhcnRp
bmdTZWxlY3Rpb24gPSBzOwotICAgICAgICBpZiAoIWNtZC0+bV9wYXJlbnQgfHwgY21kLT5tX3Bh
cmVudC0+aXNGaXJzdENvbW1hbmQoY21kKSkKKyAgICBmb3IgKGF1dG8gY29tbWFuZCA9IG1ha2VS
ZWZQdHIodGhpcyk7IDsgY29tbWFuZCA9IGNvbW1hbmQtPm1fcGFyZW50LmdldCgpKSB7CisgICAg
ICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uID0gY29tcG9zaXRpb25JZlBvc3NpYmxlKCpjb21tYW5k
KSkKKyAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rp
b24pOworICAgICAgICBjb21tYW5kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gc2VsZWN0aW9uOwor
ICAgICAgICBpZiAoIWNvbW1hbmQtPm1fcGFyZW50IHx8IGNvbW1hbmQtPm1fcGFyZW50LT5pc0Zp
cnN0Q29tbWFuZChjb21tYW5kLmdldCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IAotdm9pZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24gJnMpCit2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIGZvciAoRWRpdENvbW1hbmQqIGNtZCA9
IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkgewotICAgICAgICBpZiAoYXV0byogY29t
cG9zaXRpb24gPSBjb21wb3NpdGlvbklmUG9zc2libGUoY21kKSkKLSAgICAgICAgICAgIGNvbXBv
c2l0aW9uLT5zZXRFbmRpbmdTZWxlY3Rpb24ocyk7Ci0gICAgICAgIGNtZC0+bV9lbmRpbmdTZWxl
Y3Rpb24gPSBzOworICAgIGZvciAoYXV0byBjb21tYW5kID0gbWFrZVJlZlB0cih0aGlzKTsgY29t
bWFuZDsgY29tbWFuZCA9IGNvbW1hbmQtPm1fcGFyZW50LmdldCgpKSB7CisgICAgICAgIGlmIChh
dXRvIGNvbXBvc2l0aW9uID0gY29tcG9zaXRpb25JZlBvc3NpYmxlKCpjb21tYW5kKSkKKyAgICAg
ICAgICAgIGNvbXBvc2l0aW9uLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAg
ICAgY29tbWFuZC0+bV9lbmRpbmdTZWxlY3Rpb24gPSBzZWxlY3Rpb247CiAgICAgfQogfQogCiB2
b2lkIEVkaXRDb21tYW5kOjpzZXRQYXJlbnQoQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCkK
IHsKICAgICBBU1NFUlQoKHBhcmVudCAmJiAhbV9wYXJlbnQpIHx8ICghcGFyZW50ICYmIG1fcGFy
ZW50KSk7Ci0gICAgbV9wYXJlbnQgPSBwYXJlbnQ7CisgICAgbV9wYXJlbnQgPSBtYWtlV2Vha1B0
cihwYXJlbnQpOwogICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgbV9zdGFydGluZ1NlbGVjdGlv
biA9IHBhcmVudC0+bV9lbmRpbmdTZWxlY3Rpb247CiAgICAgICAgIG1fZW5kaW5nU2VsZWN0aW9u
ID0gcGFyZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKQEAgLTIxMCw4ICsyMDEsOCBAQCB2b2lkIEVk
aXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBl
IHR5cGUsIGNvbnN0IFN0cgogICAgIGF1dG8qIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0
byogbm9kZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwg
SGFzRWRpdGFibGVBWFJvbGUpOwotICAgIGNhY2hlLT5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKG5vZGUsIHR5cGUsIHRleHQsIHBvc2l0aW9uKTsKKyAgICBhdXRvIG5vZGUgPSBtYWtl
UmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFz
RWRpdGFibGVBWFJvbGUpKTsKKyAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihub2RlLmdldCgpLCB0eXBlLCB0ZXh0LCBwb3NpdGlvbik7CiB9CiAKIFNpbXBsZUVkaXRD
b21tYW5kOjpTaW1wbGVFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRleCAyZjY3
Y2Q3MzM0YzJjOGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjLi5lNWExZGFiYjU5N2UwZmU3YjY1
MjBmYzVjYTViNDkyNDkzOWVlYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIK
ICNpbmNsdWRlICJFZGl0QWN0aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KQEAgLTY1LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgY29uc3QgRG9j
dW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIERvY3Vt
ZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KLSAgICBDb21wb3NpdGVFZGl0
Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBDb21wb3Np
dGVFZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0KCk7IH0K
ICAgICB2b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CiAKQEAgLTc4LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8RG9jdW1l
bnQ+IG1fZG9jdW1lbnQ7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX3N0YXJ0aW5nU2VsZWN0aW9u
OwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9lbmRpbmdTZWxlY3Rpb247Ci0gICAgQ29tcG9zaXRl
RWRpdENvbW1hbmQqIG1fcGFyZW50IHsgbnVsbHB0ciB9OworICAgIFdlYWtQdHI8Q29tcG9zaXRl
RWRpdENvbW1hbmQ+IG1fcGFyZW50OwogICAgIEVkaXRBY3Rpb24gbV9lZGl0aW5nQWN0aW9uIHsg
RWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZTZhNmM5ZTQzZWExZDMyMGE1ZjkxMWRhOGY3
YTdjZjFjOWZiNGQ4Ny4uNmRiNWJiMDFiYmE2YzBlMzU3MmY1ZjY2Y2RjYmRmYzk0OGNhYTNhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTIx
NCw4ICsyMTQsMTIgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
ICAgICAgICAgcmViYWxhbmNlV2hpdGVzcGFjZUF0KHN0YXJ0UG9zaXRpb24pOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VB
bGxXaGl0ZXNwYWNlcyk7Ci0gICAgICAgICAgICBpZiAoY2FuUmViYWxhbmNlKHN0YXJ0UG9zaXRp
b24pICYmIGNhblJlYmFsYW5jZShlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBBU1NFUlQodGV4
dE5vZGVGb3JSZWJhbGFuY2Uoc3RhcnRQb3NpdGlvbikgPT0gdGV4dE5vZGVGb3JSZWJhbGFuY2Uo
ZW5kUG9zaXRpb24pKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHRleHRGb3JSZWJhbGFuY2UgPSB0
ZXh0Tm9kZUZvclJlYmFsYW5jZShzdGFydFBvc2l0aW9uKSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVCh0ZXh0Rm9yUmViYWxhbmNlID09IHRleHROb2RlKTsKICAgICAgICAgICAgICAgICByZWJh
bGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vic3RyaW5nKCp0ZXh0Tm9kZSwgc3RhcnRQb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZW5kUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkpOworICAgICAgICAgICAgfQorCiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426200</attachid>
            <date>2021-04-16 02:55:52 -0700</date>
            <delta_ts>2021-04-16 03:21:54 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-224659-20210416025551.patch</filename>
            <type>text/plain</type>
            <size>33951</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM5ZGJmOTU0MWMxMWZh
NDRiODEwYzI1NDg3MjIyYjk3MWM0NTQ4Mi4uZDU5NjZhNjk1YTBiYmZhNmEwMGNmZTM3ZDNhNTQ0
NTIwNzk4ZGU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTE2ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
L1dlYWtQdHIgaW4gRWRpdENvbW1hbmQgYW5kIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ2NTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBEZXBsb3llZCBSZWYvUmVm
UHRyL1dlYWtQdHIgYWNyb3NzIENvbXBvc2l0ZUVkaXRDb21tYW5kIGFuZCBFZGl0Q29tbWFuZC4K
KworICAgICAgICBBbHNvIHdyYXBwZWQgc2VjdGlvbnMgb2YgY29kZSB0aGF0IGFjY2VzcyByZW5k
ZXIgdHJlZSB3aXRoIFNjcmlwdERpc2FsbG93ZWRTY29wZS4KKworICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZW5zdXJlQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2spOiBMZXQgYSByYXcgcG9pbnRlciB0byB0aGUgcGFy
ZW50IG5vZGUgaGVyZQorICAgICAgICBzaW5jZSB0aGUgb25seSB0aGluZyB3ZSBkbyBpcyB0byBj
YWxsIGhhc09uZUNoaWxkIG9uIGl0LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5vZGVBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRy
ZW5BbmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0ZXh0Tm9kZUZvclJlYmFsYW5jZSBjb25zdCk6IFJlbmFtZWQgZnJvbSBjYW5S
ZWJhbGFuY2UgYW5kCisgICAgICAgIG5vdyByZXR1cm5zIHRoZSB0ZXh0IG5vZGUgYWZ0ZXIgZG93
bmNhc3Rpbmcgc28gdGhhdCByZWJhbGFuY2VXaGl0ZXNwYWNlQXQgZG9lc24ndCBuZWVkIHRvIGhh
dmUKKyAgICAgICAgYSBsb25lIGRvd25jYXN0IHdpdGhvdXQgYSB0eXBlIGNoZWNrLgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VBdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVz
cGFjZU9uVGV4dFN1YnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVy
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25l
UGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQpOiBO
b3cgaW5oZXJpdHMgZnJvbSBDYW5NYWtlV2Vha1B0ci4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ29t
cG9zaXRlRWRpdENvbW1hbmQpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKTogSW5p
dGlhbGl6ZSBtX3N0YXJ0aW5nU2VsZWN0aW9uIGFuZCBtX2VuZGluZ1NlbGVjdGlvbiBkaXJlY3Rs
eQorICAgICAgICBzaW5jZSBzZXRTdGFydGluZ1NlbGVjdGlvbiBhbmQgc2V0RW5kaW5nU2VsZWN0
aW9uIG5vdyBzdG9yZXMgInRoaXMiIHBvaW50ZXIgaW4gUmVmUHRyLgorICAgICAgICBUaGVyZSBp
cyBubyBiZWhhdmlvciBkaWZmZXJlbmNlIHNpbmNlIG1fcGFyZW50IGFuZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bV9jb21wb3NpdGlvbiBpZiBhcHBsaWNhYmxlCisgICAgICAgIGFyZSBib3RoIG51
bGxwdHIgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBvc2l0aW9uSWZQb3Nz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFP
clRleHRJbnB1dCBjb25zdCk6IFVzZSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wgaW5zdGVhZAor
ICAgICAgICBvZiBkdXBsaWNhdGluZyB0aGUgY29kZSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENv
bW1hbmQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBhcmVudCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisKIDIwMjEtMDQtMTUgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBTdXBwb3J0IHRoZSBU
cmFuc2xhdGUgbWVudSBpdGVtIGluIGVkaXRhYmxlIHNlbGVjdGVkIHRleHQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggYjFhODEwNzg0
YmExZDczMDliZTA2MDAyN2I0ZjBkZTk4YmJmMjMzOC4uMjFiNWVkNjMyOTkzMGNiZWY5ZTY5M2M1
MWMzZjI3Njg5ODlmYWRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgi
CiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93
ZWRTY29wZS5oIgogI2luY2x1ZGUgIlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiU3BsaXRFbGVtZW50Q29tbWFuZC5oIgogI2luY2x1ZGUgIlNwbGl0VGV4dE5vZGVDb21tYW5k
LmgiCkBAIC0xNTEsMTUgKzE1MiwxNSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNl
ZFRleHQ6OnRleHREZWxldGVkQnlSZWFwcGx5KCkKIHN0YXRpYyB2b2lkIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0IFN0cmluZyYg
aW5zZXJ0ZWRUZXh0KQogewogICAgIEFTU0VSVChjYWNoZSk7Ci0gICAgYXV0byogbm9kZSA9IGhp
Z2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRpdGFibGVB
WFJvbGUpOworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChw
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLCBIYXNFZGl0YWJsZUFYUm9sZSkpOwogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbnNlcnRlZFRleHQubGVuZ3RoKCkgJiYg
ZGVsZXRlZFRleHQubGVuZ3RoKCkpCi0gICAgICAgIGNhY2hlLT5wb3N0VGV4dFJlcGxhY2VtZW50
Tm90aWZpY2F0aW9uKG5vZGUsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBpbnNlcnRlZFRleHQsIEFY
VGV4dEVkaXRUeXBlSW5zZXJ0LCBkZWxldGVkVGV4dCwgcG9zaXRpb24pOworICAgICAgICBjYWNo
ZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbihub2RlLmdldCgpLCBBWFRleHRFZGl0
VHlwZURlbGV0ZSwgaW5zZXJ0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZUluc2VydCwgZGVsZXRlZFRl
eHQsIHBvc2l0aW9uKTsKICAgICBlbHNlIGlmIChkZWxldGVkVGV4dC5sZW5ndGgoKSkKLSAgICAg
ICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obm9kZSwgQVhUZXh0RWRp
dFR5cGVJbnNlcnQsIGRlbGV0ZWRUZXh0LCBwb3NpdGlvbik7CisgICAgICAgIGNhY2hlLT5wb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG5vZGUuZ2V0KCksIEFYVGV4dEVkaXRUeXBlSW5z
ZXJ0LCBkZWxldGVkVGV4dCwgcG9zaXRpb24pOwogICAgIGVsc2UgaWYgKGluc2VydGVkVGV4dC5s
ZW5ndGgoKSkKLSAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
bm9kZSwgQVhUZXh0RWRpdFR5cGVEZWxldGUsIGluc2VydGVkVGV4dCwgcG9zaXRpb24pOworICAg
ICAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihub2RlLmdldCgpLCBB
WFRleHRFZGl0VHlwZURlbGV0ZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbik7CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb25Gb3JVbmFwcGx5KEFYT2JqZWN0Q2FjaGUqIGNhY2hlKQpAQCAtNDQxLDcgKzQ0Miw3IEBA
IEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpjb21wb3NpdGlv
bigpIGNvbnN0CiAKIEVkaXRDb21tYW5kQ29tcG9zaXRpb24mIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjplbnN1cmVDb21wb3NpdGlvbigpCiB7Ci0gICAgYXV0byogY29tbWFuZCA9IHRoaXM7CisgICAg
YXV0byBjb21tYW5kID0gbWFrZVJlZlB0cih0aGlzKTsKICAgICB3aGlsZSAoYXV0byogcGFyZW50
ID0gY29tbWFuZC0+cGFyZW50KCkpCiAgICAgICAgIGNvbW1hbmQgPSBwYXJlbnQ7CiAgICAgaWYg
KCFjb21tYW5kLT5tX2NvbXBvc2l0aW9uKQpAQCAtNTM2LDExICs1MzcsMTIgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2soY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQo
bm9kZSk7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIGVsZW1lbnRzIHRo
YXQgY2FuIGJlIHJlbW92ZWQuCiAgICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQo
KSAhPSBwYXJlbnROb2RlLT5sYXN0Q2hpbGQoKSkKKyAgICBhdXRvKiBwYXJlbnROb2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50Tm9kZSB8fCAhcGFyZW50Tm9kZS0+aGFz
T25lQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFkb3duY2FzdDxI
VE1MRGl2RWxlbWVudD4oKm5vZGUpLmhhc0F0dHJpYnV0ZXMoKSkKQEAgLTU1MSw3ICs1NTMsNyBA
QCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1JlbW92YWJsZUJsb2NrKGNvbnN0IE5vZGUq
IG5vZGUpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoUmVm
PE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIE5vZGUmIHJlZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsK
LSAgICBhdXRvKiBwYXJlbnQgPSByZWZDaGlsZC5wYXJlbnROb2RlKCk7CisgICAgYXV0byBwYXJl
bnQgPSBtYWtlUmVmUHRyKHJlZkNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAgaWYgKCFwYXJlbnQg
fHwgKCFwYXJlbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBwYXJlbnQtPnJlbmRlcmVyKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6OmNyZWF0ZShXVEZNb3ZlKGluc2VydENoaWxkKSwgcmVmQ2hpbGQsIHNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBlZGl0aW5nQWN0aW9uKCkpKTsKQEAgLTU1
OSw3ICs1NjEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3Jl
KFJlZjxOb2RlPiYmIGluc2VydENoaWxkLCBOb2RlJiByZWZDaAogCiB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoUmVmPE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIE5vZGUm
IHJlZkNoaWxkKQogewotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHJlZkNoaWxkLnBhcmVu
dE5vZGUoKTsKKyAgICBhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIocmVmQ2hpbGQucGFyZW50Tm9k
ZSgpKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzgsMTEgKzU4
MCwxMSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoUmVmPE5vZGU+
JiYgaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2l0aW9uJgogICAgIC8vIEZvciBlZGl0aW5nIHBvc2l0
aW9ucyBsaWtlIFt0YWJsZSwgMF0sIGluc2VydCBiZWZvcmUgdGhlIHRhYmxlLAogICAgIC8vIGxp
a2V3aXNlIGZvciByZXBsYWNlZCBlbGVtZW50cywgYnJzLCBldGMuCiAgICAgUG9zaXRpb24gcCA9
IGVkaXRpbmdQb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBy
ZWZDaGlsZCA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBhdXRvIHJlZkNoaWxkID0gbWFrZVJl
ZlB0cihwLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CiAgICAgCiAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
KnJlZkNoaWxkKSkgewotICAgICAgICBOb2RlKiBjaGlsZCA9IHJlZkNoaWxkLT5maXJzdENoaWxk
KCk7CisgICAgICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKHJlZkNoaWxkLT5maXJzdENoaWxk
KCkpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgY2hpbGQgJiYgaSA8IG9mZnNldDsgaSsrKQog
ICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNo
aWxkKQpAQCAtNjExLDcgKzYxMyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVu
ZE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgUmVmPENvbnRhaW5lck5vZGU+JiYgcGFyCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYgbm9kZSwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gY2hpbGRy
ZW47Ci0gICAgTm9kZSogY2hpbGQgPSBub2RlLnRyYXZlcnNlVG9DaGlsZEF0KGZyb20pOworICAg
IGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IGZyb207IGNoaWxkICYmIGkgPCB0bzsgaSsrLCBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNoaWxkKTsK
IApAQCAtNjY2LDEzICs2NjgsMTIgQEAgSFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXQKICAgICAvLyBh
cyBhIHNlcmllcyBvZiBleGlzdGluZyBzbWFsbGVyIGVkaXQgY29tbWFuZHMuICBTb21lb25lIHdo
byB3YW50ZWQgdG8KICAgICAvLyByZWR1Y2UgdGhlIG51bWJlciBvZiBlZGl0IGNvbW1hbmRzIGNv
dWxkIGRvIHNvIGhlcmUuCiAgICAgYXV0byBjb21tYW5kID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQ6OmNyZWF0ZShlbGVtZW50KTsKLSAgICBhdXRvKiBjb21tYW5kUHRyID0gY29tbWFuZC5w
dHIoKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpKTsKKyAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kKTsKICAgICAvLyBSZXR1cm5pbmcgYSBy
YXcgcG9pbnRlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhlIGNvbW1hbmQgaXMgcmV0YWluZWQgYnkK
ICAgICAvLyBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZSAodGh1cyByZXRhaW5pbmcgdGhlIHNwYW4p
LCBhbmQgdGhlIHNwYW4gaXMgYWxzbwogICAgIC8vIGluIHRoZSBET00gdHJlZSwgYW5kIHRodXMg
YWxpdmUgd2hpZSBpdCBoYXMgYSBwYXJlbnQuCi0gICAgQVNTRVJUKGNvbW1hbmRQdHItPnNwYW5F
bGVtZW50KCktPmlzQ29ubmVjdGVkKCkpOwotICAgIHJldHVybiBjb21tYW5kUHRyLT5zcGFuRWxl
bWVudCgpOworICAgIEFTU0VSVChjb21tYW5kLT5zcGFuRWxlbWVudCgpLT5pc0Nvbm5lY3RlZCgp
KTsKKyAgICByZXR1cm4gY29tbWFuZC0+c3BhbkVsZW1lbnQoKTsKIH0KIAogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cHJ1bmUoTm9kZSogbm9kZSkKQEAgLTgyMiwxNiArODIzLDE2IEBAIFBv
c2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRl
ck5vZGUocG9zaXRpb24uYW5jaG9yTm9kZSgpKTsKICAgICB9CiAKLSAgICBhdXRvKiB0YWJTcGFu
ID0gdGFiU3Bhbk5vZGUocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKKyAgICBhdXRvIHRhYlNw
YW4gPSBtYWtlUmVmUHRyKHRhYlNwYW5Ob2RlKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpOwog
CiAgICAgaWYgKHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDw9IGNhcmV0TWluT2Zm
c2V0KCpwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQotICAgICAgICByZXR1cm4gcG9zaXRpb25J
blBhcmVudEJlZm9yZU5vZGUodGFiU3Bhbik7CisgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFy
ZW50QmVmb3JlTm9kZSh0YWJTcGFuLmdldCgpKTsKIAogICAgIGlmIChwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSA+PSBjYXJldE1heE9mZnNldCgqcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUodGFiU3Bhbik7
CisgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHRhYlNwYW4uZ2V0KCkp
OwogCiAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KGRvd25jYXN0PFRleHQ+KCpw
b3NpdGlvbi5jb250YWluZXJOb2RlKCkpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSk7Ci0gICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHRhYlNwYW4pOworICAg
IHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuLmdldCgpKTsKIH0KIAog
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0VGFiU3BhblBvc2l0aW9uKFJl
ZjxOb2RlPiYmIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3MpCkBAIC04ODYsNDIgKzg4Nyw0NCBA
QCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzaG91bGRSZWJhbGFuY2VMZWFkaW5nV2hpdGVz
cGFjZUZvcihjb25zdCBTdHJpbmcmIHRleAogICAgIHJldHVybiBjb250YWluc09ubHlEZXByZWNh
dGVkRWRpdGluZ1doaXRlc3BhY2UodGV4dCk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmNhblJlYmFsYW5jZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CitSZWZQdHI8
VGV4dD4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRleHROb2RlRm9yUmViYWxhbmNlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpOworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uY29udGFp
bmVyTm9kZSgpKTsKICAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIWlzPFRleHQ+KG5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgVGV4dCYgdGV4dE5vZGUg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7Ci0gICAgaWYgKCF0ZXh0Tm9kZS5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gdGV4dE5vZGUgPSBzdGF0aWNfcG9pbnRlcl9j
YXN0PFRleHQ+KHN0ZDo6ZXhjaGFuZ2Uobm9kZSwgbnVsbHB0cikpOworICAgIGlmICghdGV4dE5v
ZGUtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG5vZGUtPmRvY3Vt
ZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIHRleHROb2RlLT5kb2N1bWVudCgpLnVw
ZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0ZXh0
Tm9kZS5yZW5kZXJlcigpOworICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFk
IHNjcmlwdERpc2FsbG93ZWRTY29wZTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
ZXh0Tm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHls
ZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRleHROb2Rl
OwogfQogCiAvLyBGSVhNRTogRG9lc24ndCBnbyBpbnRvIHRleHQgbm9kZXMgdGhhdCBjb250cmli
dXRlIGFkamFjZW50IHRleHQgKHNpYmxpbmdzLCBjb3VzaW5zLCBldGMpLgogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAg
IGlmICghY2FuUmViYWxhbmNlKHBvc2l0aW9uKSkKKyAgICBhdXRvIHRleHROb2RlID0gdGV4dE5v
ZGVGb3JSZWJhbGFuY2UocG9zaXRpb24pOworICAgIGlmICghdGV4dE5vZGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIElmIHRoZSByZWJhbGFuY2UgaXMgZm9yIHRoZSBzaW5nbGUgb2Zmc2V0
LCBhbmQgbmVpdGhlciB0ZXh0W29mZnNldF0gbm9yIHRleHRbb2Zmc2V0IC0gMV0gYXJlIHNvbWUg
Zm9ybSBvZiB3aGl0ZXNwYWNlLCBkbyBub3RoaW5nLgogICAgIGludCBvZmZzZXQgPSBwb3NpdGlv
bi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8
VGV4dD4oKm5vZGUpLmRhdGEoKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRleHROb2RlLT5kYXRhKCk7
CiAgICAgaWYgKCFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZSh0ZXh0W29mZnNldF0pKSB7
CiAgICAgICAgIG9mZnNldC0tOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCAhZGVwcmVjYXRl
ZElzRWRpdGluZ1doaXRlc3BhY2UodGV4dFtvZmZzZXRdKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vic3RyaW5nKGRvd25jYXN0
PFRleHQ+KCpub2RlKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0
U3Vic3RyaW5nKCp0ZXh0Tm9kZSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHBv
c2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyhUZXh0JiB0ZXh0Tm9k
ZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQpAQCAtOTMwLDEyICs5MzMsMTIgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0
cmluZyhUZXh0JiB0ZXh0Tm9kZSwgaW4KICAgICBBU1NFUlQoIXRleHQuaXNFbXB0eSgpKTsKIAog
ICAgIC8vIFNldCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSB0byBkZWZpbmUgdGhlIGV4dGVudCBv
ZiB0aGUgd2hpdGVzcGFjZSBzdXJyb3VuZGluZyB0ZXh0W29mZnNldF0uCi0gICAgaW50IHVwc3Ry
ZWFtID0gc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgdXBzdHJlYW0gPSBzdGQ6Om1heCgwLCBz
dGFydE9mZnNldCk7CiAgICAgd2hpbGUgKHVwc3RyZWFtID4gMCAmJiBkZXByZWNhdGVkSXNFZGl0
aW5nV2hpdGVzcGFjZSh0ZXh0W3Vwc3RyZWFtIC0gMV0pKQogICAgICAgICB1cHN0cmVhbS0tOwog
ICAgIAotICAgIGludCBkb3duc3RyZWFtID0gZW5kT2Zmc2V0OwotICAgIHdoaWxlICgodW5zaWdu
ZWQpZG93bnN0cmVhbSA8IHRleHQubGVuZ3RoKCkgJiYgZGVwcmVjYXRlZElzRWRpdGluZ1doaXRl
c3BhY2UodGV4dFtkb3duc3RyZWFtXSkpCisgICAgdW5zaWduZWQgZG93bnN0cmVhbSA9IHN0ZDo6
bWF4KDAsIGVuZE9mZnNldCk7CisgICAgd2hpbGUgKGRvd25zdHJlYW0gPCB0ZXh0Lmxlbmd0aCgp
ICYmIGRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHRleHRbZG93bnN0cmVhbV0pKQogICAg
ICAgICBkb3duc3RyZWFtKys7CiAgICAgCiAgICAgaW50IGxlbmd0aCA9IGRvd25zdHJlYW0gLSB1
cHN0cmVhbTsKQEAgLTk0NiwyOCArOTQ5LDMxIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoVGV4dCYgdGV4dE5vZGUsIGluCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVEb3duc3RyZWFtUG9zKFBvc2l0aW9uKCZ0ZXh0Tm9k
ZSwgZG93bnN0cmVhbSkpOwogICAgIAogICAgIFN0cmluZyBzdHJpbmcgPSB0ZXh0LnN1YnN0cmlu
Zyh1cHN0cmVhbSwgbGVuZ3RoKTsKLSAgICBTdHJpbmcgcmViYWxhbmNlZFN0cmluZyA9IHN0cmlu
Z1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShzdHJpbmcsCiAgICAgLy8gRklYTUU6IEJlY2F1c2Ug
b2YgdGhlIHByb2JsZW0gbWVudGlvbmVkIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiwgd2Ug
bXVzdCBhbHNvIHVzZSBuYnNwcyBhdCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBzdHJpbmcgYmVjYXVz
ZQogICAgIC8vIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgYWxsIHN1cnJvdW5kaW5nIHdoaXRl
c3BhY2UsIGp1c3QgdGhlIHdoaXRlc3BhY2UgaW4gdGhlIGN1cnJlbnQgdGV4dCBub2RlLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlVXBzdHJlYW1Qb3MpIHx8IHVwc3RyZWFtID09IDAs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZURvd25zdHJlYW1Qb3MpIHx8ICh1bnNpZ25l
ZClkb3duc3RyZWFtID09IHRleHQubGVuZ3RoKCkpOwotICAgIAorICAgIFN0cmluZyByZWJhbGFu
Y2VkU3RyaW5nID0gc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKHN0cmluZywgaXNTdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVVcHN0cmVhbVBvcykgfHwgIXVwc3RyZWFtLAorICAgICAgICBp
c0VuZE9mUGFyYWdyYXBoKHZpc2libGVEb3duc3RyZWFtUG9zKSB8fCBkb3duc3RyZWFtID09IHRl
eHQubGVuZ3RoKCkpOworCiAgICAgaWYgKHN0cmluZyAhPSByZWJhbGFuY2VkU3RyaW5nKQogICAg
ICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKHRleHROb2RlLCB1cHN0cmVh
bSwgbGVuZ3RoLCByZWJhbGFuY2VkU3RyaW5nKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBvc2l0
aW9uKQogewotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOworICAg
IGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
aWYgKCFpczxUZXh0Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRleHQmIHRleHROb2Rl
ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwogICAgIAogICAgIGlmICghdGV4dE5vZGUubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGV4dE5v
ZGUucmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHlsZSgpLmNv
bGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICAgICByZXR1cm47CisgICAgCisgICAgeworICAgICAg
ICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2Nv
cGU7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0ZXh0Tm9kZS5yZW5kZXJlcigp
OworICAgICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHlsZSgpLmNvbGxhcHNlV2hp
dGVTcGFjZSgpKQorICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCisgICAgfQogCiAgICAgLy8g
RGVsZXRlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIHNvIHRoYXQgaW5zZXJ0aW5nIG5ic3BzIGRvZXNu
J3QgdW5jb2xsYXBzZSBpdC4KICAgICBQb3NpdGlvbiB1cHN0cmVhbVBvcyA9IHBvc2l0aW9uLnVw
c3RyZWFtKCk7CkBAIC0xMDAyLDQ5ICsxMDA4LDU3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2RlLCB1bnNpZ25lZCBzdGFy
CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyVGV4dCogdGV4
dFJlbmRlcmVyID0gdGV4dE5vZGUucmVuZGVyZXIoKTsKLSAgICBpZiAoIXRleHRSZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgd2hvbGVUZXh0Tm9kZUlzRW1wdHkgPSBmYWxzZTsK
KyAgICBTdHJpbmcgc3RyOworICAgIGF1dG8gZGV0ZXJtaW5lUmVtb3ZhbE1vZGUgPSBbJl0gewor
ICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxv
d2VkU2NvcGU7CisgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRleHROb2RlLnJl
bmRlcmVyKCk7CisgICAgICAgIGlmICghdGV4dFJlbmRlcmVyKQorICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuSW5UZXh0
T3JkZXJGb3IoKnRleHRSZW5kZXJlcik7Ci0gICAgaWYgKCFydW4pIHsKLSAgICAgICAgLy8gd2hv
bGUgdGV4dCBub2RlIGlzIGVtcHR5Ci0gICAgICAgIHJlbW92ZU5vZGUodGV4dE5vZGUpOwotICAg
ICAgICByZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0
Tm9kZS5sZW5ndGgoKTsKLSAgICBpZiAoc3RhcnQgPj0gbGVuZ3RoIHx8IGVuZCA+IGxlbmd0aCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9uOjpm
aXJzdFRleHRSdW5JblRleHRPcmRlckZvcigqdGV4dFJlbmRlcmVyKTsKKyAgICAgICAgaWYgKCFy
dW4pIHsKKyAgICAgICAgICAgIHdob2xlVGV4dE5vZGVJc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgdW5zaWduZWQgcmVtb3ZlZCA9IDA7Ci0gICAg
TGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciBwcmV2aW91c1J1bjsKLSAgICBTdHJp
bmcgc3RyOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Tm9kZS5sZW5ndGgoKTsKKyAg
ICAgICAgaWYgKHN0YXJ0ID49IGxlbmd0aCB8fCBlbmQgPiBsZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBUaGlzIGxvb3Agc3RydWN0dXJlIHdvcmtzIHRvIHByb2Nlc3MgYWxs
IGdhcHMgcHJlY2VkaW5nIGEgYm94LAotICAgIC8vIGFuZCBhbHNvIHdpbGwgbG9vayBhdCB0aGUg
Z2FwIGFmdGVyIHRoZSBsYXN0IGJveC4KLSAgICB3aGlsZSAocHJldmlvdXNSdW4gfHwgcnVuKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGdhcFN0YXJ0ID0gcHJldmlvdXNSdW4gPyBwcmV2aW91c1J1bi0+
ZW5kKCkgOiAwOwotICAgICAgICBpZiAoZW5kIDwgZ2FwU3RhcnQpCi0gICAgICAgICAgICAvLyBO
byBtb3JlIGNoYW5jZSBmb3IgYW55IGludGVyc2VjdGlvbnMKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB1bnNpZ25lZCByZW1vdmVkID0gMDsKKyAgICAgICAgTGF5b3V0SW50ZWdyYXRpb246
OlRleHRSdW5JdGVyYXRvciBwcmV2aW91c1J1bjsKKworICAgICAgICAvLyBUaGlzIGxvb3Agc3Ry
dWN0dXJlIHdvcmtzIHRvIHByb2Nlc3MgYWxsIGdhcHMgcHJlY2VkaW5nIGEgYm94LAorICAgICAg
ICAvLyBhbmQgYWxzbyB3aWxsIGxvb2sgYXQgdGhlIGdhcCBhZnRlciB0aGUgbGFzdCBib3guCisg
ICAgICAgIHdoaWxlIChwcmV2aW91c1J1biB8fCBydW4pIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGdhcFN0YXJ0ID0gcHJldmlvdXNSdW4gPyBwcmV2aW91c1J1bi0+ZW5kKCkgOiAwOworICAgICAg
ICAgICAgaWYgKGVuZCA8IGdhcFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBt
b3JlIGNoYW5jZSBmb3IgYW55IGludGVyc2VjdGlvbnMKKworICAgICAgICAgICAgdW5zaWduZWQg
Z2FwRW5kID0gcnVuID8gcnVuLT5zdGFydCgpIDogbGVuZ3RoOworICAgICAgICAgICAgYm9vbCBp
bmRpY2VzSW50ZXJzZWN0ID0gc3RhcnQgPD0gZ2FwRW5kICYmIGVuZCA+PSBnYXBTdGFydDsKKyAg
ICAgICAgICAgIGludCBnYXBMZW4gPSBnYXBFbmQgLSBnYXBTdGFydDsKKyAgICAgICAgICAgIGlm
IChpbmRpY2VzSW50ZXJzZWN0ICYmIGdhcExlbiA+IDApIHsKKyAgICAgICAgICAgICAgICBnYXBT
dGFydCA9IHN0ZDo6bWF4KGdhcFN0YXJ0LCBzdGFydCk7CisgICAgICAgICAgICAgICAgZ2FwRW5k
ID0gc3RkOjptaW4oZ2FwRW5kLCBlbmQpOworICAgICAgICAgICAgICAgIGlmIChzdHIuaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRleHROb2RlLmRhdGEoKS5zdWJzdHJpbmco
c3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGV4dCBpbiB0
aGUgZ2FwCisgICAgICAgICAgICAgICAgc3RyLnJlbW92ZShnYXBTdGFydCAtIHN0YXJ0IC0gcmVt
b3ZlZCwgZ2FwTGVuKTsKKyAgICAgICAgICAgICAgICByZW1vdmVkICs9IGdhcExlbjsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBnYXBFbmQgPSBydW4gPyBydW4tPnN0YXJ0KCkg
OiBsZW5ndGg7Ci0gICAgICAgIGJvb2wgaW5kaWNlc0ludGVyc2VjdCA9IHN0YXJ0IDw9IGdhcEVu
ZCAmJiBlbmQgPj0gZ2FwU3RhcnQ7Ci0gICAgICAgIGludCBnYXBMZW4gPSBnYXBFbmQgLSBnYXBT
dGFydDsKLSAgICAgICAgaWYgKGluZGljZXNJbnRlcnNlY3QgJiYgZ2FwTGVuID4gMCkgewotICAg
ICAgICAgICAgZ2FwU3RhcnQgPSBzdGQ6Om1heChnYXBTdGFydCwgc3RhcnQpOwotICAgICAgICAg
ICAgZ2FwRW5kID0gc3RkOjptaW4oZ2FwRW5kLCBlbmQpOwotICAgICAgICAgICAgaWYgKHN0ci5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICBzdHIgPSB0ZXh0Tm9kZS5kYXRhKCkuc3Vic3RyaW5n
KHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAgICAgICAvLyByZW1vdmUgdGV4dCBpbiB0aGUg
Z2FwCi0gICAgICAgICAgICBzdHIucmVtb3ZlKGdhcFN0YXJ0IC0gc3RhcnQgLSByZW1vdmVkLCBn
YXBMZW4pOwotICAgICAgICAgICAgcmVtb3ZlZCArPSBnYXBMZW47CisgICAgICAgICAgICBwcmV2
aW91c1J1biA9IHJ1bjsKKyAgICAgICAgICAgIGlmIChydW4pCisgICAgICAgICAgICAgICAgcnVu
LnRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpOwogICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBwcmV2aW91c1J1biA9IHJ1bjsKLSAgICAgICAgaWYgKHJ1bikKLSAgICAgICAgICAg
IHJ1bi50cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKTsKKyAgICB9OworICAgIGRldGVy
bWluZVJlbW92YWxNb2RlKCk7CisKKyAgICBpZiAod2hvbGVUZXh0Tm9kZUlzRW1wdHkpIHsKKyAg
ICAgICAgcmVtb3ZlTm9kZSh0ZXh0Tm9kZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoIXN0ci5pc051bGwoKSkgewpAQCAtMTExOSwxNiArMTEzMywyMCBAQCBSZWZQdHI8Tm9k
ZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChFbGVt
ZW50KiBjb250YWluZQogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKIAotICAgIGF1dG8qIHJlbmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJl
cigpOwotICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAotICAgIC8vIEFwcGVuZCB0aGUgcGxhY2Vob2xkZXIgdG8gbWFr
ZSBzdXJlIGl0IGZvbGxvd3MgYW55IHVucmVuZGVyZWQgYmxvY2tzLgotICAgIGF1dG8mIGJsb2Nr
RmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKTsKLSAgICBpZiAoIWJs
b2NrRmxvdy5oZWlnaHQoKSB8fCAoYmxvY2tGbG93LmlzTGlzdEl0ZW0oKSAmJiAhYmxvY2tGbG93
LmZpcnN0Q2hpbGQoKSkpCi0gICAgICAgIHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKCpj
b250YWluZXIpOworICAgIHsKKyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5U
aHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIGF1dG8qIHJlbmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBpZiAo
IWlzPFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBwbGFjZWhvbGRlciB0byBtYWtlIHN1cmUgaXQg
Zm9sbG93cyBhbnkgdW5yZW5kZXJlZCBibG9ja3MuCisgICAgICAgIGF1dG8mIGJsb2NrRmxvdyA9
IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKTsKKyAgICAgICAgaWYgKGJsb2Nr
Rmxvdy5oZWlnaHQoKSAmJiAoIWJsb2NrRmxvdy5pc0xpc3RJdGVtKCkgfHwgYmxvY2tGbG93LmZp
cnN0Q2hpbGQoKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gYXBwZW5kQmxvY2tQbGFjZWhvbGRlcigqY29udGFpbmVyKTsKIH0KIAogLy8gQXNzdW1l
cyB0aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBsYWNlaG9sZGVyIGFuZCBkb2VzIHRoZSByZW1v
dmFsIHdpdGhvdXQgbXVjaCBjaGVja2luZy4KQEAgLTEyNjEsOCArMTI3OSw4IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwKICAgICAgICAgLy8gQ2xvbmUgZXZlcnkgbm9kZSBiZXR3ZWVuIHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgYW5kIG91dGVyQmxvY2suCiAKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGFuY2VzdG9ycy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBOb2RlKiBp
dGVtID0gYW5jZXN0b3JzW2kgLSAxXS5nZXQoKTsKLSAgICAgICAgICAgIGF1dG8gY2hpbGQgPSBp
dGVtLT5jbG9uZU5vZGUoaXNSZW5kZXJlZFRhYmxlKGl0ZW0pKTsKKyAgICAgICAgICAgIGF1dG8g
aXRlbSA9IHN0ZDo6ZXhjaGFuZ2UoYW5jZXN0b3JzW2kgLSAxXSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBhdXRvIGNoaWxkID0gaXRlbS0+Y2xvbmVOb2RlKGlzUmVuZGVyZWRUYWJsZShpdGVtLmdl
dCgpKSk7CiAgICAgICAgICAgICBhcHBlbmROb2RlKGNoaWxkLmNvcHlSZWYoKSwgZG93bmNhc3Q8
RWxlbWVudD4oKmxhc3ROb2RlKSk7CiAgICAgICAgICAgICBsYXN0Tm9kZSA9IFdURk1vdmUoY2hp
bGQpOwogICAgICAgICB9CkBAIC0xNTUyLDcgKzE1NzAsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSgpCiAgICAgc3R5bGUtPm1lcmdlVHlwaW5n
U3R5bGUoZG9jdW1lbnQoKSk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbmV3QmxvY2s7Ci0gICAg
aWYgKENvbnRhaW5lck5vZGUqIGJsb2NrRW5jbG9zaW5nTGlzdCA9IGxpc3ROb2RlLT5wYXJlbnRO
b2RlKCkpIHsKKyAgICBpZiAoYXV0byBibG9ja0VuY2xvc2luZ0xpc3QgPSBtYWtlUmVmUHRyKGxp
c3ROb2RlLT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgIGlmIChpczxIVE1MTElFbGVtZW50Pigq
YmxvY2tFbmNsb3NpbmdMaXN0KSkgeyAvLyBsaXN0Tm9kZSBpcyBpbnNpZGUgYW5vdGhlciBsaXN0
IGl0ZW0KICAgICAgICAgICAgIGlmICh2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoKmJsb2NrRW5j
bG9zaW5nTGlzdCkgPT0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCpsaXN0Tm9kZSkpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiBsaXN0Tm9kZSBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlIG91
dGVyIGxpc3QgaXRlbSwgdGhlbiBtb3ZlIGxpc3ROb2RlIG91dHNpZGUgb2YgdGhpcyBsaXN0IGl0
ZW0KQEAgLTE2MDcsNyArMTYyNSw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFr
T3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0KGVuZGluZ1NlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpKTsKLSAgICBOb2RlKiBoaWdoZXN0QmxvY2txdW90ZSA9IGhpZ2hlc3RF
bmNsb3NpbmdOb2RlT2ZUeXBlKGNhcmV0LmRlZXBFcXVpdmFsZW50KCksICZpc01haWxCbG9ja3F1
b3RlKTsKKyAgICBhdXRvIGhpZ2hlc3RCbG9ja3F1b3RlID0gbWFrZVJlZlB0cihoaWdoZXN0RW5j
bG9zaW5nTm9kZU9mVHlwZShjYXJldC5kZWVwRXF1aXZhbGVudCgpLCAmaXNNYWlsQmxvY2txdW90
ZSkpOwogICAgIGlmICghaGlnaGVzdEJsb2NrcXVvdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTYyMCwxNSArMTYzOCwxNCBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVh
a091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgoKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgYXV0byBiciA9IEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgp
KTsKLSAgICBhdXRvKiBiclB0ciA9IGJyLnB0cigpOwogICAgIC8vIFdlIHdhbnQgdG8gcmVwbGFj
ZSB0aGlzIHF1b3RlZCBwYXJhZ3JhcGggd2l0aCBhbiB1bnF1b3RlZCBvbmUsIHNvIGluc2VydCBh
IGJyCiAgICAgLy8gdG8gaG9sZCB0aGUgY2FyZXQgYmVmb3JlIHRoZSBoaWdoZXN0IGJsb2NrcXVv
dGUuCi0gICAgaW5zZXJ0Tm9kZUJlZm9yZShici5jb3B5UmVmKCksICpoaWdoZXN0QmxvY2txdW90
ZSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGF0QlIocG9zaXRpb25CZWZvcmVOb2RlKGJyUHRyKSk7
CisgICAgaW5zZXJ0Tm9kZUJlZm9yZShiciwgKmhpZ2hlc3RCbG9ja3F1b3RlKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gYXRCUiA9IHBvc2l0aW9uQmVmb3JlTm9kZShici5wdHIoKSk7CiAgICAgLy8g
SWYgdGhlIGJyIHdlIGluc2VydGVkIGNvbGxhcHNlZCwgZm9yIGV4YW1wbGUgZm9vPGJyPjxibG9j
a3F1b3RlPi4uLjwvYmxvY2txdW90ZT4sIGluc2VydAogICAgIC8vIGEgc2Vjb25kIG9uZS4KICAg
ICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChhdEJSKSkKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9y
ZShIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksICpiclB0cik7CisgICAgICAgIGlu
c2VydE5vZGVCZWZvcmUoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBici5nZXQo
KSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYXRCUiwgZW5kaW5n
U2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgCiAgICAgLy8gSWYgdGhpcyBpcyBh
biBlbXB0eSBwYXJhZ3JhcGggdGhlcmUgbXVzdCBiZSBhIGxpbmUgYnJlYWsgaGVyZS4KQEAgLTE2
NjQsMTYgKzE2ODEsMTYgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9u
QXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGNvbnN0IFBvc2kKICAgICAgICAgcmV0dXJu
IG9yaWdpbmFsOwogICAgICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhvcmln
aW5hbCk7Ci0gICAgRWxlbWVudCogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxl
bWVudChvcmlnaW5hbCk7CisgICAgYXV0byBlbmNsb3NpbmdBbmNob3IgPSBtYWtlUmVmUHRyKGVu
Y2xvc2luZ0FuY2hvckVsZW1lbnQob3JpZ2luYWwpKTsKICAgICBQb3NpdGlvbiByZXN1bHQgPSBv
cmlnaW5hbDsKIAogICAgIGlmICghZW5jbG9zaW5nQW5jaG9yKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogCiAgICAgLy8gRG9uJ3QgYXZvaWQgYmxvY2sgbGV2ZWwgYW5jaG9ycywgYmVjYXVzZSB0
aGF0IHdvdWxkIGluc2VydCBjb250ZW50IGludG8gdGhlIHdyb25nIHBhcmFncmFwaC4KLSAgICBp
ZiAoZW5jbG9zaW5nQW5jaG9yICYmICFpc0Jsb2NrKGVuY2xvc2luZ0FuY2hvcikpIHsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoZmlyc3RQb3NpdGlvbkluTm9kZShlbmNs
b3NpbmdBbmNob3IpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkFuY2hvcihsYXN0
UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgaWYgKGVuY2xvc2luZ0FuY2hv
ciAmJiAhaXNCbG9jayhlbmNsb3NpbmdBbmNob3IuZ2V0KCkpKSB7CisgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBmaXJzdEluQW5jaG9yKGZpcnN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9y
LmdldCgpKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5BbmNob3IobGFzdFBvc2l0
aW9uSW5Ob2RlKGVuY2xvc2luZ0FuY2hvci5nZXQoKSkpOwogICAgICAgICAvLyBJZiB2aXN1YWxs
eSBqdXN0IGFmdGVyIHRoZSBhbmNob3IsIGluc2VydCAqaW5zaWRlKiB0aGUgYW5jaG9yIHVubGVz
cyBpdCdzIHRoZSBsYXN0CiAgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBpbiB0aGUgZG9jdW1l
bnQsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCiAgICAgICAgIGlmICh2aXNpYmxlUG9zID09IGxhc3RJ
bkFuY2hvcikgewpAQCAtMTY4OCwxMCArMTcwNSwxMCBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkoY29uc3QgUG9z
aQogICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG91dHNpZGUgYW4gYW5jaG9yIGlmIGRvaW5n
IHNvIHdvdWxkIHNraXAgb3ZlciBhIGxpbmUgYnJlYWsuICBJdCB3b3VsZAogICAgICAgICAgICAg
Ly8gcHJvYmFibHkgYmUgc2FmZSB0byBtb3ZlIHRoZSBsaW5lIGJyZWFrIHNvIHRoYXQgd2UgY291
bGQgc3RpbGwgYXZvaWQgdGhlIGFuY2hvciBoZXJlLgogICAgICAgICAgICAgUG9zaXRpb24gZG93
bnN0cmVhbSh2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsKLSAgICAg
ICAgICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKSAm
JiBkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0Fu
Y2hvcikpCisgICAgICAgICAgICBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24o
dmlzaWJsZVBvcykgJiYgZG93bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRP
ZihlbmNsb3NpbmdBbmNob3IuZ2V0KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5h
bDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb25JblBhcmVudEFm
dGVyTm9kZShlbmNsb3NpbmdBbmNob3IpOworICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb25J
blBhcmVudEFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3IuZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIC8vIElmIHZpc3VhbGx5IGp1c3QgYmVmb3JlIGFuIGFuY2hvciwgaW5zZXJ0ICpvdXRzaWRl
KiB0aGUgYW5jaG9yIHVubGVzcyBpdCdzIHRoZSBmaXJzdAogICAgICAgICAvLyBWaXNpYmxlUG9z
aXRpb24gaW4gYSBwYXJhZ3JhcGgsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCkBAIC0xNzA1LDcgKzE3
MjIsNyBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1Nw
ZWNpYWxFbGVtZW50Qm91bmRhcnkoY29uc3QgUG9zaQogICAgICAgICAgICAgaWYgKCFlbmNsb3Np
bmdBbmNob3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwogCi0gICAgICAgICAg
ICByZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShlbmNsb3NpbmdBbmNob3IpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZW5jbG9zaW5n
QW5jaG9yLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKaW5kZXggY2FiN2Y4MWEzZjlhNTli
MjU2ZTg2ZDI3ZDk1M2Y2N2FhZWNkZjljYi4uMWViNmZlYzAwNmQ0N2RlMWJhNzc4ZjYxMjQ5OGQ2
OWQzOGJkNGIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJVbmRvU3RlcC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMyw3ICsxMDQs
NyBAQCBwcml2YXRlOgogICAgIEVkaXRBY3Rpb24gbV9lZGl0QWN0aW9uOwogfTsKIAotY2xhc3Mg
Q29tcG9zaXRlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgeworY2xhc3MgQ29tcG9z
aXRlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkNvbXBvc2l0
ZUVkaXRDb21tYW5kKCk7CiAKQEAgLTE2Myw3ICsxNjQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCByZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHJlYmFs
YW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoVGV4dCYsIGludCBzdGFydE9mZnNldCwgaW50
IGVuZE9mZnNldCk7CiAgICAgdm9pZCBwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxp
dChQb3NpdGlvbiYpOwotICAgIGJvb2wgY2FuUmViYWxhbmNlKGNvbnN0IFBvc2l0aW9uJikgY29u
c3Q7CisgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlRm9yUmViYWxhbmNlKGNvbnN0IFBvc2l0aW9u
JikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRSZWJhbGFuY2VMZWFkaW5nV2hpdGVzcGFjZUZvcihj
b25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoRWxlbWVu
dCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSk7CiAgICAgdm9pZCByZW1vdmVDaGls
ZHJlbkluUmFuZ2UoTm9kZSYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKQEAgLTIyMSwx
MSArMjIyLDQgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4g
bV9jb21wb3NpdGlvbjsKIH07CiAKLWlubGluZSBDb21wb3NpdGVFZGl0Q29tbWFuZCogdG9Db21w
b3NpdGVFZGl0Q29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFuZCkKLXsKLSAgICBBU1NFUlQoY29t
bWFuZCk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY29tbWFuZC0+aXND
b21wb3NpdGVFZGl0Q29tbWFuZCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRl
RWRpdENvbW1hbmQqPihjb21tYW5kKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCAxZjViNmFjYjlkYjE4OGVhNjkw
ZjYwMDU2Yzc3Mzc3MDBlMmI4ZjQ1Li45MGY5MTRkMzdiMmQ5NzE1ODFmNTM3MTA0NzczYzM5Zjcy
MDNiZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMzIsOCAr
MzIsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMTIzLDE4ICsxMjIsMTggQEAgU3RyaW5nIGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0
aW9uKEVkaXRBY3Rpb24gYWN0aW9uKQogfQogCiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9j
dW1lbnQmIGRvY3VtZW50LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCi0gICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQotICAgICwgbV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pCisgICAg
OiBtX2RvY3VtZW50IHsgZG9jdW1lbnQgfQorICAgICwgbV9zdGFydGluZ1NlbGVjdGlvbiB7IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpIH0KKyAgICAsIG1fZW5kaW5nU2VsZWN0
aW9uIHsgbV9zdGFydGluZ1NlbGVjdGlvbiB9CisgICAgLCBtX2VkaXRpbmdBY3Rpb24geyBlZGl0
aW5nQWN0aW9uIH0KIHsKLSAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihtX2RvY3VtZW50LT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKG1fc3RhcnRpbmdT
ZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQotICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKKyAgICA6IG1fZG9jdW1lbnQgeyBkb2N1bWVudCB9CisgICAgLCBtX3N0YXJ0aW5nU2VsZWN0
aW9uIHsgc3RhcnRpbmdTZWxlY3Rpb24gfQorICAgICwgbV9lbmRpbmdTZWxlY3Rpb24geyBlbmRp
bmdTZWxlY3Rpb24gfQogewotICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKQEAgLTE0NCw1MCArMTQzLDQyIEBA
IEVkaXRBY3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVy
biBtX2VkaXRpbmdBY3Rpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgRWRpdENvbW1hbmRDb21wb3Np
dGlvbiogY29tcG9zaXRpb25JZlBvc3NpYmxlKEVkaXRDb21tYW5kKiBjb21tYW5kKQorc3RhdGlj
IFJlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBjb21wb3NpdGlvbklmUG9zc2libGUoRWRp
dENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgaWYgKCFjb21tYW5kLT5pc0NvbXBvc2l0ZUVkaXRD
b21tYW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0NvbXBvc2l0ZUVkaXRD
b21tYW5kKGNvbW1hbmQpLT5jb21wb3NpdGlvbigpOworICAgIGlmICghY29tbWFuZC5pc0NvbXBv
c2l0ZUVkaXRDb21tYW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDb21wb3NpdGVFZGl0Q29tbWFuZCY+KGNvbW1hbmQpLmNvbXBvc2l0aW9uKCk7
CiB9CiAKIGJvb2wgRWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSBj
b25zdAogewotICAgIGF1dG8qIGNvbnRhaW5lciA9IG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOwotICAgIGlmICghY29udGFpbmVyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBhbmNlc3RvciA9IGNvbnRhaW5lci0+
c2hhZG93SG9zdCgpOwotICAgIGlmICghYW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqYW5jZXN0b3IpIHx8IChpczxI
VE1MSW5wdXRFbGVtZW50PigqYW5jZXN0b3IpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCphbmNlc3RvcikuaXNUZXh0KCkpOworICAgIHJldHVybiBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9CiAKLXZv
aWQgRWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHMpCit2b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgZm9yIChFZGl0Q29tbWFuZCogY21kID0g
dGhpczsgOyBjbWQgPSBjbWQtPm1fcGFyZW50KSB7Ci0gICAgICAgIGlmIChhdXRvKiBjb21wb3Np
dGlvbiA9IGNvbXBvc2l0aW9uSWZQb3NzaWJsZShjbWQpKQotICAgICAgICAgICAgY29tcG9zaXRp
b24tPnNldFN0YXJ0aW5nU2VsZWN0aW9uKHMpOwotICAgICAgICBjbWQtPm1fc3RhcnRpbmdTZWxl
Y3Rpb24gPSBzOwotICAgICAgICBpZiAoIWNtZC0+bV9wYXJlbnQgfHwgY21kLT5tX3BhcmVudC0+
aXNGaXJzdENvbW1hbmQoY21kKSkKKyAgICBmb3IgKGF1dG8gY29tbWFuZCA9IG1ha2VSZWZQdHIo
dGhpcyk7IDsgY29tbWFuZCA9IGNvbW1hbmQtPm1fcGFyZW50LmdldCgpKSB7CisgICAgICAgIGlm
IChhdXRvIGNvbXBvc2l0aW9uID0gY29tcG9zaXRpb25JZlBvc3NpYmxlKCpjb21tYW5kKSkKKyAg
ICAgICAgICAgIGNvbXBvc2l0aW9uLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb24pOwor
ICAgICAgICBjb21tYW5kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gc2VsZWN0aW9uOworICAgICAg
ICBpZiAoIWNvbW1hbmQtPm1fcGFyZW50IHx8IGNvbW1hbmQtPm1fcGFyZW50LT5pc0ZpcnN0Q29t
bWFuZChjb21tYW5kLmdldCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9p
ZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24g
JnMpCit2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIGZvciAoRWRpdENvbW1hbmQqIGNtZCA9IHRoaXM7
IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkgewotICAgICAgICBpZiAoYXV0byogY29tcG9zaXRp
b24gPSBjb21wb3NpdGlvbklmUG9zc2libGUoY21kKSkKLSAgICAgICAgICAgIGNvbXBvc2l0aW9u
LT5zZXRFbmRpbmdTZWxlY3Rpb24ocyk7Ci0gICAgICAgIGNtZC0+bV9lbmRpbmdTZWxlY3Rpb24g
PSBzOworICAgIGZvciAoYXV0byBjb21tYW5kID0gbWFrZVJlZlB0cih0aGlzKTsgY29tbWFuZDsg
Y29tbWFuZCA9IGNvbW1hbmQtPm1fcGFyZW50LmdldCgpKSB7CisgICAgICAgIGlmIChhdXRvIGNv
bXBvc2l0aW9uID0gY29tcG9zaXRpb25JZlBvc3NpYmxlKCpjb21tYW5kKSkKKyAgICAgICAgICAg
IGNvbXBvc2l0aW9uLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAgICAgY29t
bWFuZC0+bV9lbmRpbmdTZWxlY3Rpb24gPSBzZWxlY3Rpb247CiAgICAgfQogfQogCiB2b2lkIEVk
aXRDb21tYW5kOjpzZXRQYXJlbnQoQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCkKIHsKICAg
ICBBU1NFUlQoKHBhcmVudCAmJiAhbV9wYXJlbnQpIHx8ICghcGFyZW50ICYmIG1fcGFyZW50KSk7
Ci0gICAgbV9wYXJlbnQgPSBwYXJlbnQ7CisgICAgbV9wYXJlbnQgPSBtYWtlV2Vha1B0cihwYXJl
bnQpOwogICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgbV9zdGFydGluZ1NlbGVjdGlvbiA9IHBh
cmVudC0+bV9lbmRpbmdTZWxlY3Rpb247CiAgICAgICAgIG1fZW5kaW5nU2VsZWN0aW9uID0gcGFy
ZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKQEAgLTIxMCw4ICsyMDEsOCBAQCB2b2lkIEVkaXRDb21t
YW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUs
IGNvbnN0IFN0cgogICAgIGF1dG8qIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byogbm9k
ZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRp
dGFibGVBWFJvbGUpOwotICAgIGNhY2hlLT5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KG5vZGUsIHR5cGUsIHRleHQsIHBvc2l0aW9uKTsKKyAgICBhdXRvIG5vZGUgPSBtYWtlUmVmUHRy
KGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgSGFzRWRpdGFi
bGVBWFJvbGUpKTsKKyAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihu
b2RlLmdldCgpLCB0eXBlLCB0ZXh0LCBwb3NpdGlvbik7CiB9CiAKIFNpbXBsZUVkaXRDb21tYW5k
OjpTaW1wbGVFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRleCAyZjY3Y2Q3MzM0
YzJjOGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjLi5lNWExZGFiYjU5N2UwZmU3YjY1MjBmYzVj
YTViNDkyNDkzOWVlYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIKICNpbmNs
dWRlICJFZGl0QWN0aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KQEAgLTY1LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIERvY3VtZW50JiBk
b2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KLSAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBDb21wb3NpdGVFZGl0
Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0KCk7IH0KICAgICB2
b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7CiAKQEAgLTc4LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX3N0YXJ0aW5nU2VsZWN0aW9uOwogICAg
IFZpc2libGVTZWxlY3Rpb24gbV9lbmRpbmdTZWxlY3Rpb247Ci0gICAgQ29tcG9zaXRlRWRpdENv
bW1hbmQqIG1fcGFyZW50IHsgbnVsbHB0ciB9OworICAgIFdlYWtQdHI8Q29tcG9zaXRlRWRpdENv
bW1hbmQ+IG1fcGFyZW50OwogICAgIEVkaXRBY3Rpb24gbV9lZGl0aW5nQWN0aW9uIHsgRWRpdEFj
dGlvbjo6VW5zcGVjaWZpZWQgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZTZhNmM5ZTQzZWExZDMyMGE1ZjkxMWRhOGY3YTdjZjFj
OWZiNGQ4Ny4uNmRiNWJiMDFiYmE2YzBlMzU3MmY1ZjY2Y2RjYmRmYzk0OGNhYTNhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTIxNCw4ICsy
MTQsMTIgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICAg
ICAgcmViYWxhbmNlV2hpdGVzcGFjZUF0KHN0YXJ0UG9zaXRpb24pOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VBbGxXaGl0
ZXNwYWNlcyk7Ci0gICAgICAgICAgICBpZiAoY2FuUmViYWxhbmNlKHN0YXJ0UG9zaXRpb24pICYm
IGNhblJlYmFsYW5jZShlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBBU1NFUlQodGV4dE5vZGVG
b3JSZWJhbGFuY2Uoc3RhcnRQb3NpdGlvbikgPT0gdGV4dE5vZGVGb3JSZWJhbGFuY2UoZW5kUG9z
aXRpb24pKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHRleHRGb3JSZWJhbGFuY2UgPSB0ZXh0Tm9k
ZUZvclJlYmFsYW5jZShzdGFydFBvc2l0aW9uKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCh0
ZXh0Rm9yUmViYWxhbmNlID09IHRleHROb2RlKTsKICAgICAgICAgICAgICAgICByZWJhbGFuY2VX
aGl0ZXNwYWNlT25UZXh0U3Vic3RyaW5nKCp0ZXh0Tm9kZSwgc3RhcnRQb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZW5kUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>