<?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>214793</bug_id>
          
          <creation_ts>2020-07-25 22:18:44 -0700</creation_ts>
          <short_desc>Further reduction in the use of live ranges, particularly in headers</short_desc>
          <delta_ts>2020-07-30 09:18:23 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1675057</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-25 22:18:44 -0700</bug_when>
    <thetext>Further reduction in the use of live ranges, particularly in headers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675058</commentid>
    <comment_count>1</comment_count>
      <attachid>405240</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-25 22:19:58 -0700</bug_when>
    <thetext>Created attachment 405240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675067</commentid>
    <comment_count>2</comment_count>
      <attachid>405244</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-25 23:17:55 -0700</bug_when>
    <thetext>Created attachment 405244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675068</commentid>
    <comment_count>3</comment_count>
      <attachid>405245</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-25 23:56:46 -0700</bug_when>
    <thetext>Created attachment 405245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675095</commentid>
    <comment_count>4</comment_count>
      <attachid>405250</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-26 09:26:17 -0700</bug_when>
    <thetext>Created attachment 405250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675096</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-07-26 09:27:00 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675101</commentid>
    <comment_count>6</comment_count>
      <attachid>405251</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-26 10:17:11 -0700</bug_when>
    <thetext>Created attachment 405251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676091</commentid>
    <comment_count>7</comment_count>
      <attachid>405485</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-29 12:35:22 -0700</bug_when>
    <thetext>Created attachment 405485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676109</commentid>
    <comment_count>8</comment_count>
      <attachid>405492</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-29 13:22:42 -0700</bug_when>
    <thetext>Created attachment 405492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676209</commentid>
    <comment_count>9</comment_count>
      <attachid>405523</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-29 16:01:04 -0700</bug_when>
    <thetext>Created attachment 405523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676266</commentid>
    <comment_count>10</comment_count>
      <attachid>405536</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-29 17:57:17 -0700</bug_when>
    <thetext>Created attachment 405536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676409</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-30 09:17:23 -0700</bug_when>
    <thetext>Committed r265084: &lt;https://trac.webkit.org/changeset/265084&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405536.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676411</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-30 09:18:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/66330818&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405240</attachid>
            <date>2020-07-25 22:19:58 -0700</date>
            <delta_ts>2020-07-25 23:17:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200725221957.patch</filename>
            <type>text/plain</type>
            <size>238789</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3ODc1ZWI3NWJhMjRl
NmI2NGU0MDUyNjlmNTA1YjU5YjRiMDYzYS4uMTdlYTBkYjcyZWFiOWQ5ZWI5N2M2ZGVhODg4Zjk5
ZGQyNzZhMTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgcGx1Z2luRWxl
bWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdCgpIHNob3VsZCBzdXBwb3J0IFZNSW5xdWlyeSBy
ZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IDIyNDA0MjQzMDc2ZGU0YWQzMDllZjlkZDA1M2I5NzEzNmFkNzFkYTIuLmJlYjcy
MTJjNzUzMTc2NjgwM2FhYWVlYzY5ZTI5NGIyNmI4MDAxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODMsNiArODMsNyBAQAogI2lu
Y2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0
YWNobWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKQEAgLTE2NiwxMCArMTY3LDEwIEBAIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
CiBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0OjpBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3Rh
cnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgICAgIG1fcmVwbGFjZWRS
YW5nZS5zdGFydEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CiAgICAg
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgICAgICBtX3JlcGxhY2VkVGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBp
bmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIG1fcmVwbGFjZWRSYW5nZS5l
bmRJbmRleC5zY29wZSk7CisgICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFs
dWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBtX3Jl
cGxhY2VkUmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG1fcmVwbGFjZWRSYW5nZS5lbmRJbmRleCA9IG1fcmVwbGFjZWRSYW5nZS5zdGFydEluZGV4Owog
ICAgIH0KQEAgLTE5ODUsMTIgKzE5ODYsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2Jq
ZWN0Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UKICAg
ICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBv
c2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwog
Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07Ci0gICAg
aWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmICghc2VhcmNo
UmFuZ2UgfHwgc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byB0YXJnZXRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHNlYXJj
aFJhbmdlLnN0YXJ0LCBvcmlnaW5hbFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKLSAgICByZXR1cm4gZmluZENsb3Nl
c3RQbGFpblRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwor
ICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS0+c3Rh
cnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4
dCgqc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCiBzdGF0
aWMgYm9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKQEAgLTI4ODAsMTggKzI4ODEs
MTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgQVgKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOwotICAgIGlmICghYm91bmRhcnkp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShvYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KHBvaW50KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5kYXJ5
LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZz
ZXRGb3JSYW5nZSgqcmFuZ2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogewot
ICAgIGF1dG8gYm91bmRhcnkgPSBtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9p
bnQpOwotICAgIGlmICghYm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9pbnQpKTsKKyAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0cnVlKTsKKyAgICByZXR1
cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7CiB9CiAK
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXJzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDk3ZDMwODgzMWIz
N2EyYzM1MTU3MGM1OTUxNzBkMWI4OTJmMmYzZWYuLmQ0YWI1OTM3NTQ1NTI5ZjMzN2VlNDA0Zjc5
YmMzYWU3YjM4YjMzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTcyMSw3ICs3MjIs
NyBAQCBWZWN0b3I8U3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJh
dGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewot
ICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZSh0ZXh0UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCisgICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBT
dHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0UmFuZ2UpOwpAQCAtOTgwLDIxICs5ODEsMTkgQEAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGkKICAgICAgICAgZW5kUG9zID0gdmlzaWJsZVBvczE7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zLCBlbmRQb3Mp
OworICAgIHJldHVybiB7IHN0YXJ0UG9zLCBlbmRQb3MgfTsKIH0KIAogVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHZpc2libGVQb3MsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3Np
dGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gc3RhcnRPZldvcmQodmlzaWJsZVBvcywgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOworICAgIHJldHVybiB7IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQp
IH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc2l0
aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAog
ewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJs
ZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0g
c3RhcnRPZldvcmQodmlzaWJsZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICByZXR1
cm4geyBzdGFydCwgZW5kT2ZXb3JkKHN0YXJ0KSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHVwZGF0ZUFYTGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtMTA0NCw4ICsxMDQzLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXMKICAgICB9IGVsc2UKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHVwZGF0ZUFY
TGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKHByZXZWaXNpYmxlUG9zKTsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZE9mTGluZShwcmV2VmlzaWJsZVBvcykgfTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmlnaHRMaW5l
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBj
b25zdApAQCAtMTA3OCwyMyArMTA3NiwyMSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaQogICAg
ICAgICBlbmRQb3NpdGlvbiA9IGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcyk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiB9OwogfQogCiBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogRk8gMiBJTVBMRU1FTlQgKGN1cnJlbnRseSByZXR1cm5zIGluY29ycmVjdCBhbnN3ZXIpCiAg
ICAgLy8gUmVsYXRlZD8gPHJkYXI6Ly9wcm9ibGVtLzM5Mjc3MzY+IFRleHQgc2VsZWN0aW9uIGJy
b2tlbiBpbiA4QTMzNgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRP
ZlNlbnRlbmNlKHZpc2libGVQb3MpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGVuZE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRp
b24gPSBzdGFydE9mU2VudGVuY2UodmlzaWJsZVBvcyk7CisgICAgcmV0dXJuIHsgc3RhcnRQb3Np
dGlvbiwgZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKSB9OwogfQogCiBWaXNpYmxlUG9zaXRp
b25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24pOwot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bik7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9z
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRPZlBhcmFncmFwaChzdGFydFBvc2l0
aW9uKSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKQEAgLTExNDYsOSArMTE0Miw5IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
IGNvbnN0CiB7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0T2ZTdHlsZVJhbmdlKHZpc2libGVQb3MpLCBlbmRP
ZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykpOworICAgIHJldHVybiB7IHN0YXJ0T2ZTdHlsZVJhbmdl
KHZpc2libGVQb3MpLCBlbmRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykgfTsKIH0KIAogLy8gTk9U
RTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCkBAIC0x
MTU2LDEyICsxMTUyLDExIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhCiB7CiAgICAgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7
CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnQpOwogICAgIHN0YXJ0UG9zaXRpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5n
ZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRQb3NpdGlv
biwgdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpIH07
CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZv
clBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTEx
ODMsOSArMTE3OCw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4CiAKIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdAogewotICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIHJldHVybiB7IHN0YXJ0T2ZMaW5lKHZpc2libGVQb3NpdGlvbiksIGVuZE9mTGlu
ZSh2aXNpYmxlUG9zaXRpb24pIH07CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVw
bGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKQpAQCAtMTI3MSwxNSAr
MTI2NCwxMiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmIHZpc2libGVQb3NpdGlvblJhbmdlKQogewotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7Ci0gICAgaWYgKCFzdGFydCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2li
bGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0gICAgaWYgKCFlbmQpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFu
Y2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwg
bm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIg
aW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8v
IEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxpc3QgbWFya2VyIHRleHQuCkBAIC0x
Mjk4LDE2ICsxMjg4LDEzIEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nCiB7CiAgICAgLy8gRklY
TUU6IE11bHRpLWJ5dGUgc3VwcG9ydAogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90IHJldHVybiAwPwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVu
ZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90
IHJldHVybiAwPwogCiAgICAgLy8gRklYTUU6IFVzZSBjaGFyYWN0ZXJDb3VudCBpbnN0ZWFkIG9m
IHdyaXRpbmcgb3VyIG93biBsb29wPwogICAgIGludCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAgICAgIGxlbmd0aCAr
PSBpdC50ZXh0KCkubGVuZ3RoKCk7CkBAIC0xNDMxLDE2ICsxNDE4LDEzIEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5j
ZSBlbmQuCiAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFlbmQpCisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24p
LCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIC8vIEFuIGVtcHR5IGxpbmUgaXMgY29uc2lkZXJlZCBhIHNlbnRlbmNl
LiBJZiBpdCdzIHNraXBwZWQsIHRoZW4gdGhlIHNlbnRlbmNlIHBhcnNlciB3aWxsIG5vdAogICAg
IC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9u
IG9mIHRoZSBlbXB0eSBsaW5lLgotICAgIHJldHVybiBoYXNBbnlQbGFpblRleHQoeyAqc3RhcnQs
ICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0UG9zaXRpb247Cisg
ICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gZW5kT2ZTZW50ZW5jZShuZXh0UG9z
aXRpb24pIDogbmV4dFBvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTE0NTAsMTUgKzE0MzQsMTIgQEAgVmlzaWJsZVBvc2l0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNv
bnN0IFZpc2libGUKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNl
IHN0YXJ0LgogICAgIGF1dG8gcHJldmlvdXNQb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7
Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKHByZXZpb3Vz
UG9zaXRpb24pKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1
dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsK
LSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzUG9zaXRpb24pLCBlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOworICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUcmVhdCBlbXB0eSBs
aW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCi0gICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7
ICpzdGFydCwgKmVuZCB9KSA/IHN0YXJ0T2ZTZW50ZW5jZShwcmV2aW91c1Bvc2l0aW9uKSA6IHBy
ZXZpb3VzUG9zaXRpb247CisgICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gc3Rh
cnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlvdXNQb3NpdGlvbjsKIH0KIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRQYXJhZ3JhcGhFbmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMjAzMSw3ICsy
MDEyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlVGV4dEluUmFuZ2UoY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAgICAvLyBBbHNvIG9ubHkgZG8gdGhp
cyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUuCiAgICAgYXV0byYgZnJhbWUgPSBy
ZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50LnNob3VsZFVzZUlucHV0TWV0aG9k
KCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpLmdldCgpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5n
ZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vt
ZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpObywgRWRpdG9yOjpTbWFydFJl
cGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaAppbmRleCBkYzY1NGZjMmIxMmE0ODczODg0ZjYxYmQ1YjY3MTk1ZWI5Mzk3MzgwLi40NWNk
OGVhOTRmYWQyZGRiOTg4NTdkYTFmNjYxNTU3MTIwZmQ1MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaApAQCAtNDMwLDI0ICs0MzAsNiBAQCBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlWaXNpYmxl
UG9zaXRpb25Gb3JCb3VuZHMgewogICAgIExhc3QsCiB9OwogCi1zdHJ1Y3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGUpCi0gICAgICAgIDogc3RhcnQocykKLSAgICAgICAgLCBlbmQoZSkKLSAgICB7
IH0KLQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLSAgICAgICAgOiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAgLCBl
bmQoc2VsZWN0aW9uLmVuZCgpKQotICAgIHsgfQotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KLX07Ci0KIGVudW0gY2xh
c3MgQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlIHsgU3Vic2NyaXB0LCBTdXBlcnNj
cmlwdCB9OwogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlw
ZSB7IFByZVN1YnNjcmlwdCwgUHJlU3VwZXJzY3JpcHQsIFBvc3RTdWJzY3JpcHQsIFBvc3RTdXBl
cnNjcmlwdCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYjRiYTBkODc4MjNjZDJmODAy
Mzg5MDcxNzVhMmQ5MWEwMWFiOGU3Li40NDg2MmFiNmEyZWJiZjI3YThlYWY1ZWM0NmQ3MDU4ZDNh
MzFjYWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTY0OSwxMiArNjQ5LDkgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkUmVuZGVyZXIgJiYg
Zmlyc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkgJiYgbGFzdENoaWxkUmVuZGVyZXIgJiYgbGFzdENo
aWxkUmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGRlZmluZSB0aGUg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgZm9yIHRoZSByYW5nZSBhcyB0aGUgb25lcyByaWdodCBi
ZWZvcmUgYW5kIGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGFuZCB0aGUgbGFz
dCBub2RlcyBpbiB0aGUgRE9NIHRyZWUgdGhhdCBpcyB3cmFwcGVkIGluc2lkZSB0aGUgYW5vbnlt
b3VzIGJsb2NrLgotICAgICAgICAgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluQmxvY2sgPSBmaXJz
dENoaWxkUmVuZGVyZXItPm5vZGUoKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZmlyc3ROb2RlSW5CbG9jayk7Ci0g
ICAgICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKGxhc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgICAgICAgICAgbm9k
ZURvY3VtZW50ID0gJmZpcnN0Tm9kZUluQmxvY2stPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4dFJhbmdlID0geyB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9IH07CisgICAgICAgICAgICAgICAgYXV0byYg
Zmlyc3ROb2RlSW5CbG9jayA9ICpmaXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay5kb2N1bWVudCgpOworICAg
ICAgICAgICAgICAgIHRleHRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZSgmZmlyc3ROb2RlSW5CbG9jayksIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTkxNyw3ICs5MTQsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
aW5rQ2xpY2tQb2ludCgpCiAgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24geyBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OwogICAgICAgICBhdXRv
IGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwogICAgICAgICBpZiAoIWVuZC5pc051
bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSkuY2VudGVyKCkg
fTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsK
IH0KQEAgLTkzNSw5ICs5MzIsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjbGlja1BvaW50KCkKICAgICBpZiAoIWlzV2ViQXJlYSgpIHx8ICFjYW5TZXRWYWx1ZUF0dHJp
YnV0ZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgp
OwogICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSkuY2VudGVyKCk7
CisgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbigpKS5j
ZW50ZXIoKTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdApAQCAtMTk5MCw3ICsxOTg1LDYg
QEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAgICAgCi0gICAgLy8gY29uc3RydWN0IFZpc2li
bGVQb3NpdGlvbnMgZm9yIHN0YXJ0IGFuZCBlbmQKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJl
ci0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7CkBAIC0yMDA4LDcgKzIwMDIsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAg
ICAgICAgICBlbmRQb3MgPSBzdGFydFBvczsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFy
dFBvcyksIFdURk1vdmUoZW5kUG9zKSB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWdu
ZWQgbGluZUNvdW50KSBjb25zdApAQCAtMjAzOCw3ICsyMDMyLDcgQEAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JM
aW5lKHVuc2kKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlz
aWJsZVBvcykpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25FeHRlbmQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQsIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5KTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0
aW9uLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGlvbigpOwogfQogICAgIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGludCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0YzU0ZDFhYWQzMWRkMC4u
MmExNmY3MGM3ZDI5NWFmNDZhNTg3OTkzMTdkNGRlNTI5OTcyNGUzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY2LDYgKzY2LDcgQEAKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW1wb3J0ICJQbHVnaW5WaWV3QmFz
ZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlcklubGluZS5oIgogI2ltcG9y
dCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKQEAgLTE4NTAs
NyArMTg1MSw3IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuCiAgICAgaWYgKCF0ZXh0TWFya2Vy
UmFuZ2UpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRP
ZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9u
Rm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAgIHJl
dHVybiB7IHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRl
eHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNh
Y2hlLCB0ZXh0TWFya2VyUmFuZ2UpIH07CiB9CiAKIC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENo
aWxkcmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZDc0MmU3MTlkODUwYzcyZTc5OTFm
ZjU3NGYyZjM5ODQzYjgzYTFkLi5iNjVmZTljMzkwNjM0NTMyNDk1ZDU2MDJjZmRjNTZkMmVlYjYz
MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgog
I2luY2x1ZGUgIlF1aXJrcy5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA2OWU1YTliYTY5
MTQ2NmI2MTBhZjllZGJiMzQwMjhjMzkxNDQxMjFjLi5jNTY2MGZjYmVjMWU2ZWViYmU4NWY1NzNj
NDRmODQyNDc3MzNkZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUwZS4uN2EyMGE1
ZjM5MDY2NmUyMjYyZGMxYTQ1ODVjOTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiUmFkaW9C
dXR0b25Hcm91cHMuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0NTNlYjY4NTEy
MGNiNDdkZTUzOTU1OS4uZDMxMjI1NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2EzNTFiNmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdl
IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdjZTgxYmJjMjE3
MGUzODVmY2FjZGUwYzZhMjU5Li5kYmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZkY2FjZTdhOGFm
MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBv
ZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgaWYgKCFwb2lu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpwb2ludCwg
KnBvaW50IH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHBvaW50KQoreworICAgIGlmICghcG9pbnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7CisgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpwb2ludCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisKIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQogewogICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKQEAgLTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0KIAorUmVmUHRy
PE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFp
bmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAppbmRleCAwY2UwYmExOGU0ZGM3ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0Li5mODZlMzQw
Y2Y5NDIzMTRkNTcwZTJkMzA4MTMxYTdlMTQ1OWRlOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaApAQCAtNTEsMTMgKzUxLDI3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25z
dCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIAorQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2lu
dEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50Jik7CitCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFy
eVBvaW50SGVscGVyKEJvdW5kYXJ5UG9pbnQmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBhdXRv
IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4gZGVjbHR5cGUobWFrZUJv
dW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSkpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5nZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNs
dHlwZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJk
PFQ+KGFyZ3VtZW50cykpLi4uKSk7CisKIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRvIGhh
dmUgc2hvcnRlciBuYW1lczsgYW5vdGhlciBvcHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0byBt
YWtlU2ltcGxlUmFuZ2UuCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3MgSW50
ZXJzZWN0aW5nTm9kZVJhbmdlOwpAQCAtMTE1LDQgKzEyOSwyNCBAQCBpbmxpbmUgU2ltcGxlUmFu
Z2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mIHJhbmdlKQogewogfQogCitpbmxpbmUg
Qm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50
JiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK2lubGluZSBCb3VuZGFyeVBvaW50
IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKEJvdW5kYXJ5UG9pbnQmJiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gV1RGTW92ZShwb2ludCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gbWFr
ZUJvdW5kYXJ5UG9pbnRIZWxwZXIoVCYmIGFyZ3VtZW50KSAtPiBkZWNsdHlwZShtYWtlQm91bmRh
cnlQb2ludChzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnQpKSkKK3sKKyAgICByZXR1cm4gbWFrZUJv
dW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIC4uLlQ+IGF1dG8gbWFrZVNpbXBsZVJhbmdlKFQmJiAuLi5hcmd1bWVudHMpIC0+IGRl
Y2x0eXBlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludEhlbHBlcihzdGQ6OmZvcndh
cmQ8VD4oYXJndW1lbnRzKSkuLi4pKQoreworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXggOGE0ODQzYjFkMjYyZmRjYmVl
M2M3OTAyMjAxMGY2YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0YzcyY2NiMDM3
YzZhZGQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIK
LSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKaW5kZXggOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMwZTYwZTcxMzE0
My4uODc4MWJkMTAwNzgyOTA0YTQxMGFmZTFhY2VhNWY5NzZjZjI4ZTNkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBA
IC00NzQsMTUgKzQ3NCwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQ
cmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRP
ZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1h
a2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1ha2VCb3VuZGFy
eVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJhbmdlKQorICAgICAgICByZXR1
cm47CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hp
dGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQg
YW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBp
ZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9z
aXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9kb2N1
bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERl
bGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2Vy
KCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29y
cmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwog
fQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0
VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJp
bmdUb0JlUmVwbGFjZWQpCkBAIC01MDAsMTAgKzUwMiwxMSBAQCBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29u
c3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERv
Y3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpOwotICAgIGF1
dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQ
b2ludChiZWZvcmVQcmVjZWRpbmdDaGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFy
dCB9OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5w
cmV2aW91cygpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCk7CisgICAgaWYgKCFwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRv
JiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgeworICAgIGZvciAoYXV0
byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAgICAgICAgIGlm
IChtYXJrZXItPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0YjA5NTRlMDIx
ZTRlZC4uMGU1NGQzMGNkMjliYjEzYjAzNDFlMDUzYzk2MTE1NTJjNjQ3YjQ3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0NiwxMyArMjQ2
LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUmIHN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNjb3BlU3RhcnQgPSBCb3Vu
ZGFyeVBvaW50IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5UG9pbnQgPSBt
YWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5k
YXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91bmRhcnlQb2lu
dCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsg
c2NvcGVTdGFydCwgKnN0YXJ0Qm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAgYXV0byBlbmRJbmRleCA9IGNo
YXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwgVGV4dEl0ZXJh
dG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8g
c3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgcmFuZ2UtPnN0YXJ0IH0s
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
KyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCByYW5nZS0+
ZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdy
YXBoKHZpc2libGVTdGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3Rh
cnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM3MWM3OWYyN2Q5
ZGMzZGVmNzg1NjBmZjAwZWIzNjQ1Y2RjZjI5NzUuLjI5MDU0ZjhkOTFmZWI1YmIwZGU0Mjk5MzQ3
ZWFlZjM1ZGViZWZjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENv
bW1hbmQuaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEzMSw3ICsxMzAs
NyBAQCBzdGF0aWMgU3RyaW5nIHN0cmluZ0ZvclZpc2libGVQb3NpdGlvbkluZGV4UmFuZ2UoY29u
c3QgVmlzaWJsZVBvc2l0aW9uSW5kZXhSYW5nZQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnRJbmRleC52YWx1ZSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZS5nZXQoKSk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmVuZEluZGV4
LnZhbHVlLCByYW5nZS5lbmRJbmRleC5zY29wZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3Ry
aW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoeyBXVEZNb3ZlKHN0YXJ0KSwgV1RGTW92ZShlbmQp
IH0pOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6OnRleHREZWxl
dGVkQnlVbmFwcGx5KCkKQEAgLTE0MjAsMTggKzE0MTksMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAg
ICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8gcGFyYWdy
YXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAgICAg
ICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxl
Y3Rpb25TdGFydCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0
YXJ0ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVTdGFy
dCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqcmFu
Z2VUb1NlbGVjdGlvblN0YXJ0LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVuZEluZGV4
ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAg
ICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJs
ZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQotICAgICAgICAg
ICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAq
c2VsZWN0aW9uRW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRvU2VsZWN0aW9u
RW5kID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVFbmQp
KQorICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZVRv
U2VsZWN0aW9uRW5kLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDQ0LDE3
ICsxNDM5LDE1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgUG9zaXRpb24gc3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwog
ICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCku
dXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRp
cmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCi0g
ICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gZW5kLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRSYW5nZUNv
bXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXBy
ZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICAvLyBzdGFydCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gY3JlYXRl
IGEgcmFuZ2Ugc2luY2UgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIi4KKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBl
bmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJh
Z3JhcGggdG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3VnaCwgc2luY2Ug
bW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCiAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRoaXMgdXNlZCB0byB1c2UgYSB0
ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29uZnVzZWQgc29tZSB2ZXJzaW9u
cyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSAh
PSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFu
Y2UocmFuZ2UuZ2V0KCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252
ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmluZygpKTsKKyAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CiAK
ICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3aGVuIHdlIGNv
cHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5nIGlmIHdlJ3Jl
IGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFwaCBjYW4gaGF2
ZSBzdHlsZQpAQCAtMTUwNCw3ICsxNDk3LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAg
ICBpZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRvY3VtZW50KCk7
CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKmVkaXRh
YmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFy
YWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8gZGVzdGluYXRpb25J
bmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAwIH0sICptYWtlQm91bmRh
cnlQb2ludChkZXN0aW5hdGlvbikgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2Vl
bkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkpOwogICAgIEFTU0VS
VChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg3MGM0ZGJiNjhk
MzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMuLmY2NWRmNDQ5Njg3ZDNmNTMzMjk1N2ZmODQ4
MTRmZGM3ZWY3ODZiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGE3ODdkZmFhZjFj
NTEyODk2ZjZlN2JiMTc2NWVhMzQ4M2RkMTUyODQuLmRkZTUyNTAxMzM4M2NhYTdmNjFlYWViNTNl
OTk1YjcyMjFlYTE1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTEwNCwy
NyArMTEwNCwyMSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAgICAgc2NvcGUg
PSAmZG9jdW1lbnQ7CiAgICAgfQogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50
KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKLSAgICBpZiAoIXN0YXJ0KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9u
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpLCBw
b3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICpl
bmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogLy8gRklYTUU6IE1l
cmdlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRvIHN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOwotICAgIGlmICgh
c3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCkpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RQ
b3NpdGlvbkluTm9kZSgmbm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9LCBmb3JT
ZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CisgICAg
cmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8g
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBU
ZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggN2I1ZTJl
ZWNhNDNlZWU1MjFkODYwYzQ4NTZhYWI3MWJmZGFiOGFiMC4uMTVlYzkzY2Y4ZDEwZDMyMjYyNjVm
YTZjYjBjNjVkMzM1ZGJmMGIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjk2
LDcgKzY5Niw4IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERv
Y3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdB
Y3Rpb24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb21tYW5kLT52
aXNpYmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOworICAgICAgICBhdXRvIHNlbGVjdGlv
biA9IGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKTsKKyAgICAgICAg
U3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShzZWxlY3Rpb24pOwogICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFw
cGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KQEAgLTIxMjAsOCArMjEy
MSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAKICAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0ID0gc3RkOjptaW4oYmFzZU9mZnNldCArIHNlbGVjdGlvblN0YXJ0LCBleHRlbnRPZmZzZXQp
OwogICAgICAgICAgICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQsIGJh
c2VPZmZzZXQgKyBzZWxlY3Rpb25FbmQpLCBleHRlbnRPZmZzZXQpOwotICAgICAgICAgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiYXNlTm9kZS0+ZG9jdW1lbnQoKSwgYmFz
ZU5vZGUsIHN0YXJ0LCBiYXNlTm9kZSwgZW5kKTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKKyAgICAgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh7IHsgeyAqYmFzZU5vZGUsIHN0
YXJ0IH0sIHsgKmJhc2VOb2RlLCBlbmQgfSB9IH0sIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjk1LDcg
KzMyOTUsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgYmVoYXZpb3IpIGNvbnN0CiAgICAgYXV0byBlbmQgPSBzZWxlY3Rpb24uZW5kKCk7CiAgICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgpIHx8
IGVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gcGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCkgfSwgYmVoYXZpb3IpLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXDAn
LCAiIik7CisgICAgcmV0dXJuIHBsYWluVGV4dCgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQp
LCBiZWhhdmlvcikucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKTsKIH0KIAogUmVmUHRyPFRl
eHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC0zNzEzLDcgKzM3MTMsNyBAQCBzdGF0aWMgU2ltcGxlUmFuZ2Ug
ZXh0ZW5kU2VsZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgdW5zaWduZWQgY2hhcmFj
dGVycwogICAgICAgICBzdGFydCA9IHN0YXJ0LnByZXZpb3VzKENoYXJhY3Rlcik7CiAgICAgICAg
IGVuZCA9IGVuZC5uZXh0KENoYXJhY3Rlcik7CiAgICAgfQotICAgIHJldHVybiB7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpfTsKKyAgICByZXR1cm4g
Km1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNjYW5TZWxl
Y3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKQEAgLTM5MjcsOSArMzkyNyw3IEBAIHN0YXRpYyBi
b29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
CiB7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQotICAgID8gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQotICAgIDogY3JlYXRlTGl2ZVJhbmdl
KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rp
b24pKQpAQCAtMzk0MCwxMSArMzkzOCw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgYXV0byYgc2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBhdXRvIHN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCkpKTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKLSAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9Owor
ICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7CiB9
CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVz
dWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdApAQCAtNDIyOSw5ICs0
MjIzLDggQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2lu
Z1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKICAgICB9IGVsc2UKICAgICAgICAgaW5zZXJ0VGV4
dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJz
SW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2Vw
dGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50Lmxlbmd0aCgpLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkKTsKLSAgICBpZiAoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSkKLSAgICAgICAgaW5zZXJ0
ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpBY2NlcHRl
ZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpOworICAgIGlmIChhdXRv
IGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJl
Y3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2Fu
ZGlkYXRlLnJlcGxhY2VtZW50Lmxlbmd0aCgpLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJk
KSkKKyAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKIH0KQEAg
LTQyNjIsNyArNDI1NSw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVk
U2VsZWN0aW9uUmFuZ2UoKQogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3Qg
dGhlIHNlbGVjdGlvbiB0byBpbmNsdWRlIHRoZSBhbmNob3IgdGFnIGl0J3MgaW4/IFdob2V2ZXIg
d3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVzIGEgY29tbWVudCBl
eHBsYWluaW5nIHRoZSByYXRpb25hbGUuCiAgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2Uo
KTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0g
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNp
dmVBbmNlc3RvcihyYW5nZS0+c3RhcnQuY29udGFpbmVyLCByYW5nZS0+ZW5kLmNvbnRhaW5lciku
Z2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7CisgICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0Fu
Y2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKICAg
ICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLT5zdGFydCkpID49IDApCiAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVuY2xvc2luZ0FuY2hvcik7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDQ0
MGZjZjZmYTVmZmYxZmRiODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MuLmExZDE5NDM2ZjY2ZWEyZGQ2
ZmU5ZTM0Njg4MTQ5OTI2YTdkMThiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcApAQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rp
b25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQog
ICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgYXV0byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAg
IGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Km9sZFJhbmdlLCAqbmV3UmFuZ2UsIGFmZmluaXR5LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVS
YW5nZSgqbmV3UmFuZ2UpLnB0cigpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmcmFtZS5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdS
YW5nZSwgYWZmaW5pdHksIGZhbHNlKQorICAgICAgICAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKCpuZXdSYW5nZSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzKTsKIH0KIAogc3RhdGljIFRyaVN0YXRlIHN0YXRlU3R5bGUoRnJhbWUm
IGZyYW1lLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIGRlc2lyZWRWYWx1
ZSkKQEAgLTM1NCw5ICszNTIsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgIGF1dG8g
bWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1
dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrICYmIGZyYW1l
LmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBib29sIHNlbGVjdGVkID0gc2Vs
ZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRyKCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKLSAgICAgICAgQVNTRVJUKHNl
bGVjdGVkKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZCkKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24u
c2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVj
dGVkUmFuZ2UoKSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgZnJhbWUuZWRp
dG9yKCkucGVyZm9ybURlbGV0ZSgpOwpAQCAtMTA1Niw4ICsxMDUyLDcgQEAgc3RhdGljIGJvb2wg
ZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pKS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVu
aW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0
V29yZChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKQEAgLTE1NzEsNyArMTU2Niw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVGb3JtYXRCbG9j
ayhGcmFtZSYgZnJhbWUsIEV2ZW50KikKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9u
LmlzTm9uZU9yT3JwaGFuZWQoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVu
dCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOworICAgIGF1dG8qIGZv
cm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJs
b2NrQ29tbWFuZChzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKTsKICAgICBpZiAoIWZvcm1hdEJsb2Nr
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgcmV0dXJuIGZvcm1h
dEJsb2NrRWxlbWVudC0+bG9jYWxOYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zv
cm1hdEJsb2NrQ29tbWFuZC5jcHAKaW5kZXggZTQzNmM3ZmRlMjFkYmIyMDM0YjU5YzViOTUyODlm
YTNjZmVkNzBhOS4uYmY1MmUwYzA0NGI3Y2FjMzFmMTQ5ZDRhMjYzNDI5NWIxMmMyNGVmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTY4
LDE0ICs2NywxNCBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAgIFJlZlB0cjxOb2RlPiBv
dXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBz
dGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKCpzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLCAqbm9kZVRvU3BsaXRUbyk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckluc2Vy
dGlvblBvc2l0aW9uID0gb3V0ZXJCbG9jazsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0YXJ0LCBlbmRPZlNlbGVjdGlvbik7CisgICAgYXV0byByYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kT2ZTZWxlY3Rpb24pOwogICAgIEVsZW1lbnQqIHJl
Zk5vZGUgPSBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGVuZCk7CiAgICAgRWxlbWVudCogcm9v
dCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHN0YXJ0KTsKICAgICAvLyBSb290IGlzIG51bGwg
Zm9yIGVsZW1lbnRzIHdpdGggY29udGVudGVkaXRhYmxlPWZhbHNlLgogICAgIGlmICghcm9vdCB8
fCAhcmVmTm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpc0VsZW1lbnRGb3JGb3JtYXRC
bG9jayhyZWZOb2RlLT50YWdRTmFtZSgpKSAmJiBzdGFydCA9PSBzdGFydE9mQmxvY2soc3RhcnQp
Ci0gICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZpc2libHlDb250
YWluZWRXaXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKKyAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgKHJhbmdlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4o
KnJlZk5vZGUsICpyYW5nZSkpKQogICAgICAgICAmJiByZWZOb2RlICE9IHJvb3QgJiYgIXJvb3Qt
PmlzRGVzY2VuZGFudE9mKCpyZWZOb2RlKSkgewogICAgICAgICAvLyBBbHJlYWR5IGluIGEgYmxv
Y2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGN1cnJlbnQgcGFyYWdyYXBoCiAgICAg
ICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCkBAIC05OSwyMyArOTgsMjIg
QEAgdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwKICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRl
cihsYXN0UGFyYWdyYXBoSW5CbG9ja05vZGUpOwogfQogICAgIAotRWxlbWVudCogRm9ybWF0Qmxv
Y2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKFJhbmdlKiByYW5nZSkKK0Vs
ZW1lbnQqIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5n
ZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3Ig
JiYgIWlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbW1vbkFuY2VzdG9yKSkKKyAgICBhdXRvIGNv
bW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKTsKKyAgICB3aGls
ZSAoY29tbW9uQW5jZXN0b3IgJiYgIWlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbW1vbkFuY2Vz
dG9yLmdldCgpKSkKICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNlc3Rvci0+cGFy
ZW50Tm9kZSgpOwotCi0gICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KGNvbW1vbkFuY2VzdG9yKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBFbGVt
ZW50KiByb290RWRpdGFibGVFbGVtZW50ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucm9vdEVk
aXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gcm9vdEVkaXRhYmxlRWxlbWVudCA9IHJhbmdlLT5z
dGFydC5jb250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFZGl0
YWJsZUVsZW1lbnQgfHwgY29tbW9uQW5jZXN0b3ItPmNvbnRhaW5zKHJvb3RFZGl0YWJsZUVsZW1l
bnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb21tb25BbmNlc3Rv
ci0+aXNFbGVtZW50Tm9kZSgpID8gZG93bmNhc3Q8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpIDog
bnVsbHB0cjsKKyAgICByZXR1cm4gJmRvd25jYXN0PEVsZW1lbnQ+KCpjb21tb25BbmNlc3Rvcik7
CiB9CiAKIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCmlu
ZGV4IDc5YmVkYWQxN2UwZTY0YzgyNTgyMDE2ZDUyZTliOWU5NmYyNDIxYzcuLmRhMmFkNTA0YmMx
MDUzNzk4NDRlN2NhYTUwMjUwNmQxNTExNjI3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Gb3JtYXRCbG9ja0NvbW1hbmQuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHN0YXRpYyBFbGVtZW50KiBlbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5k
KFJhbmdlKik7CisgICAgc3RhdGljIEVsZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1h
bmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAgICAgYm9vbCBkaWRBcHBseSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkQXBwbHk7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNGE2M2FkODBjNTFlMTE3NmU0Yjk4NDIxNTc0
MmE0OTAwYWI1N2M0Ny4uMGEyZDRmYzM3ZTgyOTc4MTI1ZjM0ODQ5MDBhZDAzNGM3YWE2ZDQzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIwNSwxMiAr
MjA1LDYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZwb3Ms
IEVBZmZpbml0eSBhZmZpbml0eSwgRVVzZXJUcmlnZ2UKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGFmZmluaXR5LCBtX3NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpLCBk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVkKSk7CiB9CiAKLXZvaWQgRnJh
bWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBSYW5nZSogcmFuZ2UpCi17Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSByYW5nZSA/IFZpc2libGVTZWxlY3Rpb24ocmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDogVmlzaWJsZVNlbGVjdGlvbigpOwot
ICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotfQotCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpt
b3ZlVG8oY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZp
bml0eSBhZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25z
dCBib29sIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiA9IHRydWU7CkBAIC0yMDM0LDExICsyMDI4LDEz
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgfQogfQogCi1ib29sIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZyBjbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgdXNl
clRyaWdnZXJlZCkKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRD
bG9zZVR5cGluZyBjbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCZyYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCku
ZG9jdW1lbnQoKSk7CisKKyAgICBpZiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBy
YW5nZS0+ZW5kLmNvbnRhaW5lci5wdHIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBhZmZpbml0eSk7CiAKQEAgLTI2
MTgsMzQgKzI2MTQsNiBAQCBVQ2hhciBGcmFtZVNlbGVjdGlvbjo6Y2hhcmFjdGVyQWZ0ZXJDYXJl
dFNlbGVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5jaGFyYWN0ZXJB
ZnRlcigpOwogfQogCi1pbnQgRnJhbWVTZWxlY3Rpb246OndvcmRPZmZzZXRJblJhbmdlKGNvbnN0
IFJhbmdlICpyYW5nZSkgY29uc3QKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwotICAg
IGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgd2lsbCBvbmx5IHdvcmsgaW4gY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiBy
ZW1haW5zIGluCi0gICAgLy8gdGhlIHNhbWUgbm9kZSBhZnRlciBpdCBpcyBleHBhbmRlZC4gSW1w
cm92ZSB0byBoYW5kbGUgbW9yZSBjb21wbGljYXRlZAotICAgIC8vIGNhc2VzLgotICAgIGludCBy
ZXN1bHQgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gcmFu
Z2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCA9
IDA7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGcmFtZVNlbGVjdGlvbjo6c3BhY2VG
b2xsb3dzV29yZEluUmFuZ2UoY29uc3QgUmFuZ2UgKnJhbmdlKSBjb25zdAotewotICAgIGlmICgh
cmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBOb2RlJiBub2RlID0gcmFuZ2UtPmVu
ZENvbnRhaW5lcigpOwotICAgIGludCBlbmRPZmZzZXQgPSByYW5nZS0+ZW5kT2Zmc2V0KCk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUs
IGVuZE9mZnNldCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIHJldHVybiBpc1NwYWNlT3JO
ZXdsaW5lKHBvcy5jaGFyYWN0ZXJBZnRlcigpKTsKLX0KLQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3QKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwpAQCAtMjY2MCwxNSArMjYyOCw2IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0CiAgICAgcmV0dXJu
IGlzU3RhcnRPZkRvY3VtZW50KHBvcyk7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVj
dGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0Ci17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0
YXJ0KHNlbGVjdGlvbik7Ci19Ci0KIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0V29y
ZFN0YXJ0KCkgY29uc3QKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2Vs
ZWN0aW9uOwpAQCAtMjgzNCw5ICsyNzkzLDEyIEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxl
Y3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzCiAg
ICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oc3RhcnRWaXNpYmxlUG9zLCBlbmRWaXNpYmxlUG9z
KTsgICAgCiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OmFjdHVhbFNlbGVjdGlvbkF0U2VudGVu
Y2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWwpIGNvbnN0Citib29sIEZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdAogewotICAgIFBvc2l0aW9u
IHN0YXJ0UG9zKHNlbC5zdGFydCgpKTsKKyAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zKG1fc2VsZWN0aW9u
LnN0YXJ0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBwb3MoY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0UG9zLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAocG9zLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmgKaW5kZXggZGE0MmUwZmZhY2NlZTFkZTVkZTdmYmEyMmU5ZTlmZDg5MDM0NmEyZC4uZWRk
NGJhYTgyODdkODExYmYzZDgxNDVlOWM5ZmIyZWI2YWMzMDdkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0xNDQsNyArMTQzLDYg
QEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxl
bWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgbW92ZVRvKGNvbnN0IFJhbmdlKik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3Zl
VG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dl
cmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQp
OwogICAgIHZvaWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5LCBFVXNlclRyaWdn
ZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwpAQCAtMTU1LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiwgT3B0aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4gPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucygpLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50
KCksIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRl
eHRHcmFudWxhcml0eSA9IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwog
CiAgICAgZW51bSBjbGFzcyBTaG91bGRDbG9zZVR5cGluZyA6IGJvb2wgeyBObywgWWVzIH07Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5
LCBTaG91bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiwgRUFmZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2Vy
ZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEFs
bCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHdpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKTsKQEAgLTIzMiw4ICsyMzAsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFt
b3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2Fy
ZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJB
ZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IHdvcmRP
ZmZzZXRJblJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7CkBAIC0zMzMs
NyArMzI5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRl
bmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBp
bnQgYW1vdW50KSBjb25zdDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggODMyODU2ZjZiMmZmYTIzYTViMzczOTQ3YTYwYzcw
MDQ5MjUzODQ5OC4uMTVlZjQ4MjE2ZWViYTczZDVmMGYzMWQxMjQ4OTBkZjlmNWJlODNhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQu
aCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTE1OCwxMyArMTU5LDEwIEBAIFJlZjxS
YW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShDaGFyYWN0ZXJSYW5nZSByYW5n
ZSkgY29uc3QKIAogRXhjZXB0aW9uT3I8dWludDY0X3Q+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6
b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGF1dG8gc3Rh
cnQgPSBtYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgaWYgKCFzdGFydCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBhcmFn
cmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbik7CisgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgIGlmICghZW5kKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsg
KnN0YXJ0LCAqZW5kIH0pOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOwogfQog
CiBib29sIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNFbXB0eSgpIGNvbnN0CkBAIC0yMTAsMjYg
KzIwOCwxNyBAQCB1aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3Ro
KCkgY29uc3QKIAogdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBs
YWNlbWVudFN0YXJ0KCkgY29uc3QKIHsKLSAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0
YXJ0KQotICAgICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKLQotICAg
IGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9z
aXRpb24oKSk7Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBl
bmQgPSBtYWtlQm91bmRhcnlQb2ludChtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQg
fSk7CisgICAgaWYgKCFtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQpIHsKKyAgICAgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24o
KSwgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAg
ICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQgPSByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpy
YW5nZSkgOiAwOworICAgIH0KICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFy
dDsKIH0KIAogdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNl
bWVudExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5n
dGgpCi0gICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKLQotICAg
IG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UpOworICAgIGlmICghbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0
aCkKKyAgICAgICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50
KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1Jl
cGxhY2VtZW50TGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGIzMWRhYzVkYTc5NDYwZjc5ZTkw
ZGJlNjQ5YTYwNjllMmQ0NTZmMDkuLjZkYmZkODUxOWVlYmUzNDQ1NjQxMzc4MWIzOGRlNzdhYzc4
N2I4NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuY3BwCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBzZXVkb0Vs
ZW1lbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRT
Y29wZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAg
LTE0Niw3ICsxNDUsNyBAQCBzdGF0aWMgYm9vbCBpc1Rva2VuRGVsaW1pdGVyKFVDaGFyIGNoYXJh
Y3RlcikKIGNsYXNzIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgUGFy
YWdyYXBoQ29udGVudEl0ZXJhdG9yKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKLSAgICAgICAgOiBtX2l0ZXJhdG9yKHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfSwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlz
aWJpbGl0eSkKKyAgICAgICAgOiBtX2l0ZXJhdG9yKCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVu
ZCksIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiAgICAgICAgICwgbV9ub2Rl
KHN0YXJ0LmZpcnN0Tm9kZSgpKQogICAgICAgICAsIG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9k
ZSgpKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4
IGFmNWViMWI3ZTZjNDFlZDEwZDRhNmM4ZDAzYTVhZWU0M2EwNzNiYWIuLmQwMTUxMDJhNjA5ZmZh
ZWQyNjEyYWYyZTc5YzNiOWZlZGQ1ZjE5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcApAQCAtMzMyLDggKzMzMiw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6cG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKGNvbnN0IFZpc2libGVTZWxl
CiAgICAgICAgIHJldHVybjsKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFY
VGV4dEVkaXRUeXBlRGVsZXRlLCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShzZWxlY3Rpb24pLCBzZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uSW5kZXhSYW5nZSByYW5nZTsKLSAgICByYW5nZS5zdGFydEluZGV4LnZhbHVlID0g
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIHJhbmdlLnN0YXJ0SW5k
ZXguc2NvcGUpOwotICAgIHJhbmdlLmVuZEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9z
aXRpb24oc2VsZWN0aW9uLmVuZCgpLCByYW5nZS5lbmRJbmRleC5zY29wZSk7CisgICAgcmFuZ2Uu
c3RhcnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgcmFuZ2UuZW5kSW5kZXgu
dmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBy
YW5nZS5lbmRJbmRleC5zY29wZSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJhbmdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCmluZGV4IGRmM2VhZmRkNWU5ODBlMjQyN2UyYTFiNzk4YWQ0MGRkZTg3OTk5ZjQu
LjAxNjhlYjgxODE0MmQzZjQ2OTlmNTVlYTBmZjhiMjJhYWRiNjM3NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTg0OSw2ICs4NDksMTEgQEAgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW8KICAgICByZXR1cm4gc3RyZWFtOwogfQogCitPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiBy
YW5nZSkKK3sKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5l
bmQpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggZjg0
YmNkZmQ3MmY1YmM0NTc2MzNkYTQ4MzI3MjFlNTI3N2EyNDg1MS4uOTFlZDRjYzBmMzQ0ODM0NzUy
MmQ1ZDEyNmFlNDlmM2UyYzAxZTJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCkBAIC0zMiw2ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UmFuZ2U7CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogLy8gVmlzaWJsZVBvc2l0aW9uIGRlZmF1
bHQgYWZmaW5pdHkgaXMgZG93bnN0cmVhbSBiZWNhdXNlCiAvLyB0aGUgY2FsbGVycyBkbyBub3Qg
cmVhbGx5IGNhcmUgKHRoZXkganVzdCB3YW50IHRoZQogLy8gZGVlcCBwb3NpdGlvbiB3aXRob3V0
IHJlZ2FyZCB0byBsaW5lIHBvc2l0aW9uKSwgYW5kIHRoaXMKQEAgLTE0MCw2ICsxNDIsMTUgQEAg
Ym9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3MKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBFQWZmaW5pdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
CitzdHJ1Y3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgeworICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dDsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kOworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KK307CisKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2Um
KTsKKwogLy8gaW5saW5lcwogCiAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgaWdub3JlIGFmZmlu
aXR5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXgg
MDRmODg0YjcyMDVlOTM5M2FhOTljN2Q3YjRlYmI5NmJjNGYzZjg4MC4uOWRiYWQxMGY4NjRhMGY0
M2ZlMjQwZjliMDAxZmY2MjJlZTJiYjdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTEzNiw3ICsxMzUsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0
CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAg
ICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgp
IHx8IGVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJl
dHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRh
cnlQb2ludChlbmQpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsK
IH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXpl
ZFJhbmdlKCkgY29uc3QKQEAgLTE3OSwxOCArMTc4LDEzIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKHMsIGUpID4gMCkgewogICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KICAgICAgICAgICAgIC8vIFRoZSBlbmQgY2Fu
IHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0aGUg
b25seSB0aGluZyBzZWxlY3RlZC4KLSAgICAgICAgICAgIFBvc2l0aW9uIHRtcCA9IHM7Ci0gICAg
ICAgICAgICBzID0gZTsKLSAgICAgICAgICAgIGUgPSB0bXA7CisgICAgICAgICAgICBzdGQ6OnN3
YXAocywgZSk7CiAgICAgICAgIH0KICAgICAgICAgcyA9IHMucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCk7CiAgICAgICAgIGUgPSBlLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0K
IAotICAgIGlmIChzLmlzTnVsbCgpIHx8IGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
cyksICptYWtlQm91bmRhcnlQb2ludChlKSB9OworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2Uo
cywgZSk7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0
eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC0yMDQsMTQgKzE5OCwxMCBAQCBib29s
IFZpc2libGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTZWFyY2hS
YW5nZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgYXV0byBub2RlID0gcG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQobm9kZSk7CisgICAgYXV0byBzY29wZSA9IGRlcHJlY2F0ZWRFbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlm
ICghc2NvcGUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAo
IXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiB7IHsgV1RGTW92ZSgqc3Rh
cnQpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpzY29wZSkgfSB9OworICAg
IHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNjb3BlKSk7CiB9CiAKIGJv
b2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1
bGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4
IDNmODgyZTE5ZDQxOWJmYThkNWVkZWFlNTkyODZmNmFhZGRlMjI3N2UuLjg3NmRlMTg2OTU0M2M1
MjRlZGRjNDY1Mzc4ODVmOTE0ZDc4M2VmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZUJhc2UoKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9iYXNl
LCBpc1JhbmdlKCkgPyAoaXNCYXNlRmlyc3QoKSA/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSkgOiBh
ZmZpbml0eSgpKTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50KCkgY29uc3Qg
eyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBpc1JhbmdlKCkgPyAoaXNCYXNlRmly
c3QoKSA/IERPV05TVFJFQU0gOiBVUFNUUkVBTSkgOiBhZmZpbml0eSgpKTsgfQogCisgICAgb3Bl
cmF0b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7IHJldHVybiB7IHZpc2libGVTdGFy
dCgpLCB2aXNpYmxlRW5kKCkgfTsgfQorCiAgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVy
biBzZWxlY3Rpb25UeXBlKCkgPT0gTm9TZWxlY3Rpb247IH0KICAgICBib29sIGlzQ2FyZXQoKSBj
b25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gQ2FyZXRTZWxlY3Rpb247IH0KICAgICBi
b29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gUmFuZ2VTZWxl
Y3Rpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCAxMmQ0
Y2FjMzZiODQ5MDQ5ZjZlMjQ0MmU3NjM2MTEzYjY1NGI1N2I3Li5hODA3ZjU2M2U2ZWQyMGVkZTA3
YTcwZDQ0Y2MxYWU1YzI3MjA0MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5p
dHMuY3BwCkBAIC0xODMzLDExICsxODMzLDExIEBAIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbk9m
TmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUCiAg
ICAgfQogfQogCi1SZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
ICAgICAvLyBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbmVmZmljaWVudC4gIFdlIGNvdWxkIGVhc2ls
eSBvYnRhaW4gdGhlIGFuc3dlciB3aXRoIHRoZSBib3VuZGFyaWVzIGNvbXB1dGVkIGJlbG93Lgog
ICAgIGlmICghd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KHZwLCBncmFudWxhcml0eSwgZGly
ZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldkJvdW5kYXJ5OwogICAgIFZpc2libGVQ
b3NpdGlvbiBuZXh0Qm91bmRhcnk7CkBAIC0xODg5LDI1ICsxODg5LDIzIEBAIFJlZlB0cjxSYW5n
ZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dnAsIFRleHRHcmFuCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGlmIChwcmV2Qm91bmRhcnkuaXNOdWxsKCkg
fHwgbmV4dEJvdW5kYXJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICh2cCA8IHByZXZCb3VuZGFyeSB8fCB2
cCA+IG5leHRCb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShwcmV2Qm91bmRhcnku
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLCBwcmV2Qm91bmRh
cnksIG5leHRCb3VuZGFyeSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShwcmV2Qm91bmRh
cnksIG5leHRCb3VuZGFyeSk7CiB9CiAKIHN0ZDo6cHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBv
c2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YikKIHsKICAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gYSA8IGIKLSAgICAgICAgPyAtY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQoYSksICptYWtlQm91bmRhcnlQb2ludChiKSB9KQotICAgICAgICA6IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGIpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYSkg
fSk7CisgICAgcmV0dXJuIGEgPCBiID8gLWNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uo
YSwgYikpIDogY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShiLCBhKSk7CiB9CiAKIHZv
aWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24sIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUsIFVDaGFyMzImIHR3b0Jl
Zm9yZSkKQEAgLTE5MzQsNyArMTkzMiw3IEBAIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFVDaGFyMzImIG9uZUFmdGVyCiAgICAg
fQogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gZW5kUG9zaXRpb24pIHsKLSAgICAgICAgU3Ry
aW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFy
dFBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9KS5yZXBsYWNlKG5v
QnJlYWtTcGFjZSwgJyAnKTsKKyAgICAgICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWlu
VGV4dCgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkucmVwbGFj
ZShub0JyZWFrU3BhY2UsICcgJyk7CiAgICAgICAgIGZvciAoaW50IGkgPSBjaGFyYWN0ZXJTdHJp
bmcubGVuZ3RoKCkgLSAxLCBpbmRleCA9IDA7IGkgPj0gMCAmJiBpbmRleCA8IG1heENoYXJhY3Rl
cnM7IC0taSkgewogICAgICAgICAgICAgaWYgKCFpbmRleCAmJiBuZXh0UG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgICAgICAgICAgaW5kZXgrKzsKQEAgLTE5NDYsNTMgKzE5NDQsMzggQEAgdm9p
ZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlv
biwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB0d29CZWZvcmUgPSBjaGFyYWN0ZXJzWzJdOwogfQog
Ci1SZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gY291bGQgYmUgaW4gYSBub24gdmlzaWJsZSBlbGVtZW50IGFuZCB3ZSBkb24ndCBoYXZlIGEg
VmlzaWJsZVBvc2l0aW9uLgogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGJlIGF0IHRo
ZSBzdGFydCBvZiBhIHdvcmQsIHRyeSBmb3J3YXJkLgotICAgICAgICByYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgfQotCi0gICAgaWYg
KHJhbmdlKQorICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpCYWNrd2FyZCkpCisgICAgICAgIHJldHVybiByYW5nZTsKKyAgICBpZiAoYXV0
byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkp
CiAgICAgICAgIHJldHVybiByYW5nZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9z
aXRpb24gPSBwb3NpdGlvbjsKICAgICBkbyB7CiAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBv
c2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGN1cnJlbnRQb3NpdGlvbiwgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQp
OwogICAgIH0gd2hpbGUgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhYXRCb3VuZGFy
eU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFu
dWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOwotCiAgICAgaWYgKGN1cnJl
bnRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb25P
Zk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29y
ZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotCi0gICAgaWYgKGN1
cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVh
dGUocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgp
LCBjdXJyZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAgICAgQVNTRVJUKHJhbmdlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmFuZ2U7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShjdXJy
ZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3Jk
Qm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogewog
ICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0KLSAgICAvLyBtb3ZlIHRoZSBwb3NpdGlvbiBh
dCB0aGUgZW5kIG9mIHRoZSB3b3JkCiAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAvLyBEb24ndCBjcm9zcyBsaW5lIGJvdW5kYXJpZXMu
CiAgICAgICAgIHJlc3VsdCA9IHBvc2l0aW9uOwogICAgIH0gZWxzZSBpZiAod2l0aGluVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAvLyBUaGUgcG9zaXRp
b24gbGllcyB3aXRoaW4gYSB3b3JkLgotICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9
IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5
OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gd29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChkaXN0
YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkgPiAxKQotICAgICAgICAgICAg
cmVzdWx0ID0gd29yZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBpZiAoYXV0byB3b3Jk
UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFu
dWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7
CisgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJh
bmdlLT5zdGFydCk7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBv
c2l0aW9uLCByZXN1bHQpID4gMSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQpOworICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKSB7CiAgICAgICAg
IC8vIFRoZSBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KICAgICAgICAgcmVzdWx0
ID0gcG9zaXRpb247CkBAIC0yMDA4LDcgKzE5OTEsNyBAQCBWaXNpYmxlUG9zaXRpb24gY2xvc2Vz
dFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24p
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQnlD
aGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBw
b3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwpA
QCAtMjAyNCwxMCArMjAwNywxMCBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJh
Y3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQbwogICAgIGlmIChk
aXJlY3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkICYmICFhdEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShlbmQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQpKQogICAgICAgICBlbmQgPSBlbmRPZldvcmQoZW5kKS5kZWVw
RXF1aXZhbGVudCgpOwogCi0gICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfSAgICAKIAotUmVmUHRyPFJhbmdl
PiByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKQorT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9F
eHBhbmQpCiB7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
OwogICAgIFBvc2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDM1
LDggKzIwMTgsNyBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5
Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcwogICAgICAgICBzdGFydCA9IHN0
YXJ0LnByZXZpb3VzKENoYXJhY3Rlcik7CiAgICAgICAgIGVuZCA9IGVuZC5uZXh0KENoYXJhY3Rl
cik7CiAgICAgfQotICAgIAotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAg
cmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKIH0KIAogc3RkOjpwYWlyPFZpc2li
bGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldp
dGhvdXRDcm9zc2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTIw
NDcsOSArMjAyOSw5IEBAIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldvcmRCb3Vu
ZGFyeT4gd29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3JvCiAgICAgaWYgKHdpdGhpblRl
eHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKICAgICAgICAgYXV0byBhZGp1
c3RlZFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVu
Y2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKLSAgICAgICAg
ICAgIGFkanVzdGVkUG9zaXRpb24gPSB3b3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29y
ZFJhbmdlLT5zdGFydCk7CiAgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25z
KHBvc2l0aW9uLCBhZGp1c3RlZFBvc2l0aW9uKSA+IDEpCi0gICAgICAgICAgICAgICAgYWRqdXN0
ZWRQb3NpdGlvbiA9IHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBh
ZGp1c3RlZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+
ZW5kKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4geyBhZGp1c3RlZFBvc2l0aW9uLCBXaXRo
aW5Xb3JkQm91bmRhcnk6OlllcyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVV
bml0cy5oCmluZGV4IDFhNzgzMmViMzdiODE5OTViOTFiMTAzMGU5NGIxNTRhNDNkNjMwZGIuLjQy
ZTYzNzg5NWVlYzc5YmQ4YzIyYjZkYzc4OTU0N2EyYjhhOWFlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuaApAQCAtMTAxLDEzICsxMDEsMTMgQEAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0VuZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24p
OwogV0VCQ09SRV9FWFBPUlQgYm9vbCB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwog
V0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4
dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9FWFBPUlQg
c3RkOjpwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJh
bmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGNs
b3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUs
IFVDaGFyMzImIHR3b0JlZm9yZSk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdl
RXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQs
IFNlbGVjdGlvbkRpcmVjdGlvbik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCk7CitXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0
aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hh
cmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogZW51bSBjbGFzcyBXaXRoaW5X
b3JkQm91bmRhcnkgOiBib29sIHsgTm8sIFllcyB9OwogV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWly
PFZpc2libGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3Np
dGlvbldpdGhvdXRDcm9zc2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCAyMzZhM2Fi
NDdhYTg1OGNjZTYxNmNkMWIzNTExZWJlNGQyOTRlMGRhLi4xNGZhNjg4MmM2NzM2YzczZmQ2MzQ0
MDhmZWNkNzhhNDJkYmFhNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxEZXRlY3Rl
ZEl0ZW0+IGRldGVjdEl0ZW0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QK
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgU3Ry
aW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdlKTsKLSAgICBD
RkluZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoeyBjb250ZXh0UmFuZ2Uuc3RhcnQs
ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CisgICAgQ0ZJbmRleCBoaXRMb2NhdGlv
biA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoY29udGV4dFJhbmdlLnN0YXJ0LCBw
b3NpdGlvbikpOwogCiAgICAgYXV0byBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUo
RERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CiAgICAgYXV0byBzY2FuUXVlcnkg
PSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtl
KDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CkBAIC0xMjgsNyArMTI4LDcgQEAg
T3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0
VGVzdFJlc3VsdChjb25zdCBIaXRUZXMKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKKyAg
ICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4dFJhbmdlOwogCiAgICAgaWYgKCFpczxIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgIHBvc2l0aW9uID0gcmVu
ZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCksIG51bGxw
dHIpOwpAQCAtMjcyLDE2ICsyNzIsMTQgQEAgc3RhdGljIHZvaWQgcmVtb3ZlUmVzdWx0TGlua3NG
cm9tQW5jaG9yKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgZWxlbWVudFBhcmVudC0+cmVtb3ZlQ2hp
bGQoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0
aW5nRERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsIGJvb2wmIGRpZE1vZGlm
eURPTSkKK3N0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhO
b2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUpCiB7Ci0gICAgZGlkTW9kaWZ5RE9NID0gZmFs
c2U7CiAgICAgZm9yIChOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVu
dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhbmNob3IgPSBkb3duY2FzdDxIVE1MQW5j
aG9yRWxlbWVudD4oKm5vZGUpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGFuY2hvci5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9k
ZXRlY3RvcnNBdHRyKSwgInRydWUiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IpOwotICAgICAgICAg
ICAgZGlkTW9kaWZ5RE9NID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUgPT0gJmVuZE5vZGUpIHsKQEAgLTI5MSw3ICsyODksNiBAQCBzdGF0aWMgYm9vbCBzZWFy
Y2hGb3JMaW5rUmVtb3ZpbmdFeGlzdGluZ0RETGlua3MoTm9kZSYgc3RhcnROb2RlLCBOb2RlJiBl
bmROb2RlLAogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbmNo
b3IuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih4X2FwcGxlX2RhdGFfZGV0ZWN0b3Jz
QXR0ciksICJ0cnVlIikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IpOwotICAgICAgICAg
ICAgICAgIGRpZE1vZGlmeURPTSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTU1MywyOSArNTUwLDEyIEBAIE5TQXJyYXkgKkRh
dGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBjb250
ZXh0UmFuZ2UsIERhCiAgICAgICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICAvLyBTdG9yZSB0aGUgcmFuZ2UgYm91
bmRhcmllcyBhcyBQb3NpdGlvbiwgYmVjYXVzZSB0aGUgRE9NIGNvdWxkIGNoYW5nZSBpZiB3ZSBm
aW5kCi0gICAgICAgIC8vIG9sZCBkYXRhIGRldGVjdG9yIGxpbmsuCi0gICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8UG9zaXRpb24sIFBvc2l0aW9uPj4gcmFuZ2VCb3VuZGFyaWVzOwotICAgICAgICBy
YW5nZUJvdW5kYXJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZXN1bHRSYW5nZXMuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKLSAgICAgICAgICAg
IHJhbmdlQm91bmRhcmllcy51bmNoZWNrZWRBcHBlbmQoeyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5k
KSB9KTsKLQogICAgICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IGRhdGFEZXRlY3RvclN0cmlu
Z0ZvclBhdGgoaW5kZXhQYXRoc1tyZXN1bHRJbmRleF0uZ2V0KCkpOwogICAgICAgICBOU1N0cmlu
ZyAqY29ycmVzcG9uZGluZ1VSTCA9IGNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdChjb3JlUmVz
dWx0LCBpZGVudGlmaWVyLCByZWZlcmVuY2VEYXRlLCAoTlNUaW1lWm9uZSAqKXR6LmdldCgpLCB0
eXBlcyk7Ci0gICAgICAgIGJvb2wgZGlkTW9kaWZ5RE9NID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5r
cyhyZXN1bHRSYW5nZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdlcy5sYXN0
KCkuZW5kLmNvbnRhaW5lciwgZGlkTW9kaWZ5RE9NKSkKKyAgICAgICAgaWYgKCFjb3JyZXNwb25k
aW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhyZXN1bHRSYW5n
ZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdlcy5sYXN0KCkuZW5kLmNvbnRh
aW5lcikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkaWRN
b2RpZnlET00pIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBET00gd2FzIG1vZGlmaWVkIGJlY2F1
c2Ugc29tZSBvbGQgbGlua3Mgd2VyZSByZW1vdmVkLAotICAgICAgICAgICAgLy8gd2UgbmVlZCB0
byByZWNyZWF0ZSB0aGUgcmFuZ2VzIGJlY2F1c2UgdGhleSBjb3VsZCBubyBsb25nZXIgYmUgdmFs
aWQuCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0UmFuZ2VzLnNpemUoKSA9PSByYW5nZUJvdW5k
YXJpZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdFJhbmdlcy5zaHJpbmsoMCk7IC8vIEtl
ZXAgY2FwYWNpdHkgYXMgd2UgYXJlIGdvaW5nIHRvIHJlcG9wdWxhdGUgdGhlIFZlY3RvciByaWdo
dCBhd2F5IHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLgotICAgICAgICAgICAgZm9yIChh
dXRvJiByYW5nZUJvdW5kYXJ5IDogcmFuZ2VCb3VuZGFyaWVzKQotICAgICAgICAgICAgICAgIHJl
c3VsdFJhbmdlcy51bmNoZWNrZWRBcHBlbmQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocmFuZ2VCb3Vu
ZGFyeS5maXJzdCksICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LnNlY29uZCkgfSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQg
PSBxdWVyeVJhbmdlLmVuZDsKICAgICAgICAgQk9PTCBzaG91bGRVc2VMaWdodExpbmtzID0gc29m
dExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTaG91bGRVc2VMaWdodExpbmtzRm9yUmVzdWx0KGNv
cmVSZXN1bHQsIFtpbmRleFBhdGhzW3Jlc3VsdEluZGV4XSBsZW5ndGhdID4gMSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCBi
Y2NiMGYwMDgyN2I5ZWE0NDc0OWY3MGQ5ZDQ1ZDg2YmQwOWE1MzZjLi4zYzEyMzE5ZmFiMDg2NzU5
NTllNTNjZDhlNzlhYjM0M2QxMWE3YmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC00MSw3ICs0MSw2IEBACiAjaW1wb3J0ICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgogI2ltcG9ydCAiUGFn
ZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgogI2ltcG9y
dCAiVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTI3OSwx
NSArMjc4LDE1IEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFy
eSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlCiAgICAgaWYgKHBhcmFncmFwaFN0
YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKLSAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNv
dW50ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKKyAgICBhdXRvIGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkpOworICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291
bnQgPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpKTsKICAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3Ro
VG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQpOwogCi0gICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBh
cmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoKmZ1bGxDaGFy
YWN0ZXJSYW5nZSk7CisgICAgYXV0byBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSAqbWFrZVNpbXBsZVJh
bmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgIFN0cmluZyBpdGVtU3RyaW5n
ID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZSk7CiAgICAgTlNSYW5nZSBoaWdobGlnaHRS
YW5nZSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0
cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSkuZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CiAK
LSAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3RlclJhbmdl
LCBoaWdobGlnaHRSYW5nZSksIG5pbCB9IH07CisgICAgcmV0dXJuIHsgeyByZXNvbHZlQ2hhcmFj
dGVyUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZSksIG5pbCB9IH07CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKQEAgLTMyOCwyOSArMzI3LDIzIEBAIE9w
dGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0
aW9uLnZpc2libGVFbmQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcg
dG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8g
cGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVj
dGlvblN0YXJ0KSk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7Ci0gICAgICAgIGlmICghcGFyYWdyYXBo
U3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpLCBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJS
YW5nZSA9IHsgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQgfSB9OwotICAgICAgICBz
ZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0
YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAotICAgICAgICAgICAg
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KSk7Ci0gICAgICAgIGhpdEluZGV4ID0gY2hh
cmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bikgfSk7CisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291
bnQoKm1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBzZWxlY3Rpb25T
dGFydCkpLAorICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSkpOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgcG9zaXRp
b24pKTsKICAgICB9IGVsc2UgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFj
Y291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5
OjpXb3JkR3JhbnVsYXJpdHkpOwogICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRp
bmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUg
cG9pbnQuCi0gICAgICAgIGF1dG8gZXhwYW5kZWRSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQ
b3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgaWYgKCFleHBhbmRl
ZFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBmdWxs
Q2hhcmFjdGVyUmFuZ2UgPSB7ICpleHBhbmRlZFJhbmdlIH07CisgICAgICAgIGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlv
biwgMjUwKTsKIAogICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgZnVsbENoYXJhY3Rl
clJhbmdlLT5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAg
aGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJS
YW5nZS0+c3RhcnQsIHBvc2l0aW9uKSk7CiAgICAgfQogCiAgICAgTlNSYW5nZSBzZWxlY3RlZFJh
bmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXgg
c2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1d
IHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRWRpdG9yQ29jb2EubW0KaW5kZXggZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThlNjllYTU5
YjU4NmI3Yi4uYjFmMWE4NjU1ZGJkYTI1MWIwOWNjZGVmYzUyNjA4NjRkMzQxY2E3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC05NCwxMCArOTQs
MTIgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50
KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBvdXRUeXBlcy5hcHBlbmQoUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKICAgICBvdXREYXRhLmFwcGVuZChQYXN0ZWJv
YXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5vcmlnaW5JZGVudGlmaWVyRm9yUGFz
dGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIoKSk7CiAKLSAgICBpZiAoYXV0byBh
cmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShlbGVtZW50
UmFuZ2UpLmdldCgpKSkgewotICAgICAgICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hp
dmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpKSB7Ci0gICAgICAgICAgICBvdXRUeXBlcy5hcHBl
bmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOwotICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hh
cmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICBpZiAoZWxlbWVu
dFJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGUoKmVsZW1lbnRSYW5nZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHdlYkFyY2hpdmVE
YXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAg
ICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOworICAgICAgICAgICAgICAg
IG91dERhdGEuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdlYkFyY2hpdmVEYXRhLmdldCgp
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCmluZGV4IDUx
YWUyMzQwY2UzNzkzZTcxMWNhOGZkMmQ5NzU0ODQyODkyMjkxMzguLjI4NzMzZWVlYTM3NmNmOGZl
MDgxNzU0NDcwZWIzMzE4NTRhZGU0MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC01Myw2ICs1Myw3IEBACiAj
aW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQdWJsaWNVUkxNYW5hZ2VyLmgiCiAjaW1wb3J0ICJR
dWlya3MuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1w
b3J0ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW1wb3J0ICJTZXJpYWxpemVkQXR0YWNo
bWVudERhdGEuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHAKaW5kZXggOGFjNzY5NDAyMDkzNTBmZjQzYWVjMTQ0ZDMzYWQ2MTYwMTI2
ZTQzNS4uZWM4MGJiYWM4NDdiOTc0MDViZWI1NTU5Y2MyYTUxMGQ0MTcwOGEzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAg
LTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNGYyNzJlZWU4MTM4MTQw
YzliMzY1Y2EyMTE3M2Y2YjM0MDk0ZjIxZi4uYzE2MjI1MzgwODU5ZTM4ZmI4ZmIxYjZlZWIyODY1
YzBjMDk3YjkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlv
bmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC04NiwxMyArODYsMTEgQEAgT3B0aW9uYWw8c3RkOjp0
dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7
CiAKICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGlu
ZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBhdXRvIHBh
cmFncmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVu
ZCkpOwotICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICBhdXRv
IHBhcmFncmFwaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uU3RhcnQpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICBpZiAoIXBhcmFn
cmFwaFJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0
YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKLSAgICBhdXRvIHBhcmFn
cmFwaFJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQg
fTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25T
dGFydCwgc2VsZWN0aW9uRW5kKTsKIAogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsK
ICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSksIGNoYXJhY3RlclJhbmdl
KHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKQEAgLTEzMywxMiAr
MTMxLDExIEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAq
Pj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgaWYgKCFmdWxsQ2hhcmFjdGVy
UmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIGZ1bGxDaGFy
YWN0ZXJTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKTsKLSAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2lu
dChwb3NpdGlvbik7Ci0gICAgaWYgKCFmdWxsQ2hhcmFjdGVyU3RhcnQgfHwgIXBvc2l0aW9uQm91
bmRhcnkpCisgICAgYXV0byByYW5nZVRvUG9zaXRpb24gPSBtYWtlU2ltcGxlUmFuZ2UoZnVsbENo
YXJhY3RlclJhbmdlLT5zdGFydCwgcG9zaXRpb24pOworICAgIGlmICghcmFuZ2VUb1Bvc2l0aW9u
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgTlNSYW5nZSByYW5nZVRvUGFz
cyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKmZ1bGxDaGFyYWN0ZXJTdGFydCwgKnBv
c2l0aW9uQm91bmRhcnkgfSksIDApOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VS
YW5nZShjaGFyYWN0ZXJDb3VudCgqcmFuZ2VUb1Bvc2l0aW9uKSwgMCk7CiAgICAgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zID0gbmlsOwogICAgIGF1dG8gZXh0cmFjdGVkUmFuZ2UgPSB0b2tlblJhbmdl
KHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKSwgcmFuZ2VUb1Bhc3MsICZvcHRpb25zKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IGJhMzFjMTg3NzMy
MzRiOWFkOTM5YWQwZDMzMTkzMThjNjJkOGIzYmQuLmU3MzI1YzUyNGFmZmFiNGM2YTdhZDIwZWM0
MmFjYzYwMmZlN2Y1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
QEAgLTQ1LDcgKzQ1LDYgQEAKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKICNpbXBvcnQgIlBhc3Rl
Ym9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW1wb3J0
ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyQmxvY2suaCIKICNpbXBvcnQgIlJlbmRlckltYWdl
LmgiCiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcAppbmRleCBkNTc0YTQ5NzdhODdhNGIxZDIxZWJjMjI4NTQ2MTRmNTdhODkyN2Nk
Li5iNjAyNTI1ZDJkMzE0ZWM3YzM1ZGVhYmU0ZDI3YjQwMTUyNWVhMmI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCkBAIC00NTEsMTIgKzQ1MSw4IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0UmVzcGVjdGluZ1JhbmdlKGNvbnN0IFRleHQmIHRleHQp
CiAgICAgICAgICAgICBiZWhhdmlvciA9IFRleHRJdGVyYXRvckJlaGF2ZXNBc0lmTm9kZXNGb2xs
b3dpbmc7CiAgICAgfQogCi0gICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnQpOwotICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQp
OwotICAgIGlmICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkpCi0gICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotCi0gICAgcmV0dXJuIHBsYWluVGV4dCh7IFdURk1vdmUoKnN0YXJ0
Qm91bmRhcnkpLCBXVEZNb3ZlKCplbmRCb3VuZGFyeSkgfSwgYmVoYXZpb3IpOworICAgIGF1dG8g
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIHJhbmdlID8g
cGxhaW5UZXh0KCpyYW5nZSwgYmVoYXZpb3IpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogU3RyaW5n
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0ZXh0Q29udGVudFJlc3BlY3RpbmdSYW5nZShjb25z
dCBUZXh0JiB0ZXh0KQpAQCAtOTM4LDkgKzkzNCwxMCBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6
ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0
LAogICAgIHJldHVybiBhY2N1bXVsYXRvci50YWtlUmVzdWx0cygpOwogfQogCi1TdHJpbmcgc2Vy
aWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBWZWN0
b3I8Tm9kZSo+KiBub2RlcywgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVy
dEJsb2Nrc1RvSW5saW5lcyBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSZXNvbHZlVVJMcyB1cmxz
VG9SZXNsdmUpCitTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVydEJsb2Nrc1RvSW5saW5lcyBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzLCBSZXNvbHZlVVJMcyB1cmxzVG9SZXNsdmUpCiB7Ci0gICAgcmV0dXJuIHNlcmlh
bGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwocmFuZ2Uuc3RhcnRQb3NpdGlv
bigpLCByYW5nZS5lbmRQb3NpdGlvbigpLCBub2RlcywgdXJsc1RvUmVzbHZlLCBTZXJpYWxpemVD
b21wb3NlZFRyZWU6Ok5vLAorICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZUludGVybmFsKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCks
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpLAorICAgICAgICBub2Rlcywg
dXJsc1RvUmVzbHZlLCBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vLAogICAgICAgICBhbm5vdGF0
ZSwgY29udmVydEJsb2Nrc1RvSW5saW5lcywgU3RhbmRhcmRGb250RmFtaWx5U2VyaWFsaXphdGlv
bk1vZGU6OktlZXAsIE1TT0xpc3RNb2RlOjpEb05vdFByZXNlcnZlKTsKIH0KIApAQCAtMTExNiwy
MCArMTExMywxNiBAQCBib29sIGlzUGxhaW5UZXh0TWFya3VwKE5vZGUqIG5vZGUpCiAgICAgcmV0
dXJuIGlzVGFiU3BhblRleHROb2RlKGZpcnN0Q2hpbGQtPmZpcnN0Q2hpbGQoKSkgJiYgc2Vjb25k
Q2hpbGQtPmlzVGV4dE5vZGUoKTsKIH0KIAotc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05l
d2xpbmUoY29uc3QgUmFuZ2UmIGNvbnRleHQpCitzdGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVz
TmV3bGluZShjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCkKIHsKLSAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24oY29udGV4dC5zdGFydFBvc2l0aW9uKCkpOwotICAgIE5vZGUqIGNvbnRhaW5l
ciA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpOwotICAgIGlmICgh
Y29udGFpbmVyIHx8ICFjb250YWluZXItPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2VydmVO
ZXdsaW5lKCk7CisgICAgYXV0byBjb250YWluZXIgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnRleHQuc3RhcnQpKS5kZWVwRXF1aXZhbGVudCgpLmNvbnRh
aW5lck5vZGUoKTsKKyAgICByZXR1cm4gY29udGFpbmVyICYmIGNvbnRhaW5lci0+cmVuZGVyZXIo
KSAmJiBjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCk7CiB9
CiAKLVJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCitSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5n
JiB0ZXh0KQogewotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNvbnRleHQub3duZXJEb2N1bWVu
dCgpOwotICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpOworICAgIGF1dG8gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgCiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZnJhZ21lbnQ7CkBAIC0xMTY1LDE0ICsxMTU4LDE0IEBAIFJlZjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIHRleHQpCiAgICAgfQogCiAgICAgLy8gQnJlYWsgc3RyaW5nIGludG8gcGFyYWdyYXBo
cy4gRXh0cmEgbGluZSBicmVha3MgdHVybiBpbnRvIGVtcHR5IHBhcmFncmFwaHMuCi0gICAgTm9k
ZSogYmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2soY29udGV4dC5maXJzdE5vZGUoKSk7CisgICAg
Tm9kZSogYmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2soY3JlYXRlTGl2ZVJhbmdlKGNvbnRleHQp
LT5maXJzdE5vZGUoKSk7CiAgICAgRWxlbWVudCogYmxvY2sgPSBkb3duY2FzdDxFbGVtZW50Pihi
bG9ja05vZGUpOwogICAgIGJvb2wgdXNlQ2xvbmVzT2ZFbmNsb3NpbmdCbG9jayA9IGJsb2NrTm9k
ZQogICAgICAgICAmJiBibG9ja05vZGUtPmlzRWxlbWVudE5vZGUoKQogICAgICAgICAmJiAhYmxv
Y2stPmhhc1RhZ05hbWUoYm9keVRhZykKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGh0
bWxUYWcpCi0gICAgICAgICYmIGJsb2NrICE9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnRl
eHQuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1Rl
eHRGb3JtQ29udHJvbChjb250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgICYmIGJsb2Nr
ICE9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihj
b250ZXh0LnN0YXJ0KSk7CisgICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9y
bUNvbnRyb2woY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnRleHQuc3RhcnQpKTsKIAog
ICAgIFZlY3RvcjxTdHJpbmc+IGxpc3QgPSBzdHJpbmcuc3BsaXRBbGxvd2luZ0VtcHR5RW50cmll
cygnXG4nKTsKICAgICBzaXplX3QgbnVtTGluZXMgPSBsaXN0LnNpemUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5oCmluZGV4IDg2NTY3ZjQ1NzgwYWFiYTUxYjNlZDgyYTA5YTUxZTIyMDI2YTAyNmIu
LjgyOWYzYjk4Y2I4MjI2ODhiN2Y5ZDc1M2E3MzI4NzU5NjQ5NTY0MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuaApAQCAtNDQsMTEgKzQ0LDExIEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTEVs
ZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKLXN0cnVjdCBQcmVzZW50YXRpb25TaXpl
OwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKIAorc3RydWN0IFByZXNlbnRhdGlvblNpemU7CisKIHZvaWQgcmVwbGFjZVN1YnJlc291
cmNlVVJMcyhSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9t
U3RyaW5nPiYmKTsKIHZvaWQgcmVtb3ZlU3VicmVzb3VyY2VVUkxBdHRyaWJ1dGVzKFJlZjxEb2N1
bWVudEZyYWdtZW50PiYmLCBXVEY6OkZ1bmN0aW9uPGJvb2woY29uc3QgVVJMJik+IHNob3VsZFJl
bW92ZVVSTCk7CiAKQEAgLTU3LDcgKzU3LDcgQEAgZW51bSBjbGFzcyBNU09MaXN0UXVpcmtzIDog
Ym9vbCB7IENoZWNrSWZOZWVkZWQsIERpc2FibGVkIH07CiBTdHJpbmcgc2FuaXRpemVNYXJrdXAo
Y29uc3QgU3RyaW5nJiwgTVNPTGlzdFF1aXJrcyA9IE1TT0xpc3RRdWlya3M6OkRpc2FibGVkLCBP
cHRpb25hbDxXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnRGcmFnbWVudCYpPj4gZnJhZ21lbnRT
YW5pdGl6ZXIgPSBXVEY6Om51bGxvcHQpOwogU3RyaW5nIHNhbml0aXplZE1hcmt1cEZvckZyYWdt
ZW50SW5Eb2N1bWVudChSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwgRG9jdW1lbnQmLCBNU09MaXN0
UXVpcmtzLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsTWFya3VwKTsKIAotV0VCQ09SRV9FWFBPUlQg
UmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CitXRUJDT1JFX0VYUE9SVCBSZWY8RG9jdW1lbnRGcmFn
bWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KTsKIFdFQkNPUkVfRVhQT1JUIFJlZjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIG1hcmt1
cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBQYXJzZXJDb250ZW50UG9saWN5ID0gQWxsb3dTY3Jp
cHRpbmdDb250ZW50KTsKIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY3JlYXRl
RnJhZ21lbnRGb3JJbm5lck91dGVySFRNTChFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAs
IFBhcnNlckNvbnRlbnRQb2xpY3kpOwogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZy
YWdtZW50Rm9yVHJhbnNmb3JtVG9GcmFnbWVudChEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgc291
cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlKTsKQEAgLTcyLDcgKzcyLDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KENvbnRhaW5l
ck5vZGUmLCBSZWY8RG9jdW1lbnRGcmFnbWUKIGVudW0gY2xhc3MgUmVzb2x2ZVVSTHMgOiB1aW50
OF90IHsgTm8sIFllcywgWWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3kgfTsKIGVu
dW0gY2xhc3MgQ29udmVydEJsb2Nrc1RvSW5saW5lcyA6IHVpbnQ4X3QgeyBObywgWWVzIH07CiBl
bnVtIGNsYXNzIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZSA6IHVpbnQ4X3QgeyBObywgWWVzIH07Ci1X
RUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2Uo
Y29uc3QgUmFuZ2UmLCBWZWN0b3I8Tm9kZSo+KiA9IG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJj
aGFuZ2UgPSBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5l
cyA9IENvbnZlcnRCbG9ja3NUb0lubGluZXM6Ok5vLCBSZXNvbHZlVVJMcyA9IFJlc29sdmVVUkxz
OjpObyk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFw
cGVhcmFuY2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBWZWN0b3I8Tm9kZSo+KiA9IG51bGxwdHIsIEFu
bm90YXRlRm9ySW50ZXJjaGFuZ2UgPSBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpObywgQ29udmVy
dEJsb2Nrc1RvSW5saW5lcyA9IENvbnZlcnRCbG9ja3NUb0lubGluZXM6Ok5vLCBSZXNvbHZlVVJM
cyA9IFJlc29sdmVVUkxzOjpObyk7CiBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFw
cGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFJlc29sdmVVUkxzID0gUmVzb2x2ZVVS
THM6Ok5vLCBTZXJpYWxpemVDb21wb3NlZFRyZWUgPSBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5v
LCBWZWN0b3I8Tm9kZSo+KiA9IG51bGxwdHIpOwogCiBlbnVtIGNsYXNzIFNlcmlhbGl6ZWROb2Rl
cyA6IHVpbnQ4X3QgeyBTdWJ0cmVlSW5jbHVkaW5nTm9kZSwgU3VidHJlZXNPZkNoaWxkcmVuIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9s
c0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0lt
YWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAppbmRleCA2ZDgwMWE2MTVmMTE2YjRkNTk2
MjdlMjg5YWE2M2VkMTZmNmNlYWVjLi41ODRlYzYzZmIxYmE3NDhlM2RmOWE5Yzc2NDNmYWVlN2Y3
YmU0MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VD
b250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAppbmRleCAwMWFiOTE3ZDBkYzk3OGMzMWZlZmY3YTlhMDkwY2Qw
MmJmMWRkOGQ2Li42ODMwMzE2ODQzMzVkNTk2OWRiY2I0NmUxNDRmYzk5OTM3ZTc1ZjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNo
aXZlLmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZXJpYWxpemVk
QXR0YWNobWVudERhdGEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDU0LDE5ICs0NTMs
MTYgQEAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShG
cmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIGNyZWF0ZShtYWluUmVzb3VyY2UucmVsZWFzZU5vbk51
bGwoKSwgZG9jdW1lbnRMb2FkZXItPnN1YnJlc291cmNlcygpLCBXVEZNb3ZlKHN1YmZyYW1lQXJj
aGl2ZXMpKTsKIH0KIAotUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZShSYW5nZSogcmFuZ2UpCitSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoIXJh
bmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgYXV0byYgZG9jdW1l
bnQgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3Vt
ZW50ID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsd2F5cyAiZm9yIGludGVyY2hhbmdlIi4g
SXMgdGhhdCByaWdodD8KICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIFN0cmluZyBt
YXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2U6Olllcyk7CisgICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0
cmluZyhkb2N1bWVudCkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShyYW5n
ZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOwogICAgIHJldHVybiBj
cmVhdGUobWFya3VwU3RyaW5nLCAqZnJhbWUsIG5vZGVMaXN0LCBudWxscHRyKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5o
CmluZGV4IGI1MWNmNjE2YmYwODJlMjk0MDliNDQyMWE0M2NiNzExMTQ4MGE5ODkuLjY3YWZhODNk
YzdhOWJmMjJmOGU4OTY1MWVlOWVjNDM5MzJmMDY1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKQEAgLTM1LDcgKzM1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSYW5nZTsKKworc3RydWN0IFNpbXBsZVJhbmdlOwogCiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZl
IGZpbmFsIDogcHVibGljIEFyY2hpdmUgewogcHVibGljOgpAQCAtNDYsNyArNDcsNyBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBj
cmVhdGUoTm9kZSYsIFdURjo6RnVuY3Rpb248Ym9vbChGcmFtZSYpPiYmIGZyYW1lRmlsdGVyID0g
eyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+
IGNyZWF0ZShGcmFtZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5
V2ViQXJjaGl2ZT4gY3JlYXRlRnJvbVNlbGVjdGlvbihGcmFtZSopOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKFJhbmdlKik7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoY29u
c3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKaW5kZXggZGYxMzVhZjQzOWZkN2U3NjQxNzQ3YmI3MzY3Yzg2YjhkYzVmZjcyYy4uNTll
YTRmYmY3ZTllNTUyZDI5NzcxYmIyNWYwNjVkZTEwM2NkYjEzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmNwcApAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjph
ZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgewotICAgICAgICBzZWxlY3Rp
b24ubW92ZVRvKCZyYW5nZSk7CisgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oU2ltcGxl
UmFuZ2UgeyByYW5nZSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzU2LDcgKzM1
Niw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5nZS5zdGFydFBvc2l0aW9uKCksIG5vcm1hbGl6
ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2UgY29udGFpbnMgdGhlIG9yaWdpbmFs
IHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8oJnJhbmdlKTsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMzY2LDcgKzM2Niw3
IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAgICAg
ICByZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
ICpub3JtYWxpemVkUmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9u
KCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHRoZSBuZXcgcmFuZ2UuCi0gICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhub3JtYWxpemVkUmFuZ2UuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oU2ltcGxlUmFuZ2UgeyAqbm9ybWFsaXpl
ZFJhbmdlIH0pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGUg
cmFuZ2VzIGludGVyc2VjdC4KICAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG5vcm1h
bGl6ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpLCBET1dOU1RS
RUFNKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNmY5OGFhZThk
NzU2ZDIyZDg3MDhiZDdhNjNjZWFkYjdlYTVjMWU3ZC4uZDE4YmQ1ZTQyZjc4ODIyYmQyOGI3YmY5
MjA2MGJiODEzYWUyOGUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
QEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUg
IlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUHJvbWlzZWRBdHRhY2htZW50SW5mby5oIgorI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0YWNobWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTIz
OSw3ICsyNDAsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJhdGlvbihj
b25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgaWYgKCFtX2Ryb3BwZWRJbWFnZVBsYWNl
aG9sZGVycy5pc0VtcHR5KCkgJiYgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlICYmIHRy
eVRvVXBkYXRlRHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKGRyYWdEYXRhKSkgewogICAgICAgICBt
X2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVycy5jbGVhcigpOwotICAgICAgICBtX2Ryb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyUmFuZ2UgPSBudWxscHRyOworICAgICAgICBtX2Ryb3BwZWRJbWFnZVBsYWNl
aG9sZGVyUmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgIG1fZG9jdW1lbnRVbmRlck1vdXNl
ID0gbnVsbHB0cjsKICAgICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC04NTYsOSArODU3LDEwIEBAIHN0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVudCYg
ZWxlbWVudCkKIAogc3RhdGljIHZvaWQgc2VsZWN0RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50LmRvY3VtZW50KCkuY3JlYXRlUmFu
Z2UoKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShlbGVtZW50KTsKLSAgICBlbGVtZW50LmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
KnJhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgaWYgKGF1dG8gZnJhbWUgPSBlbGVtZW50LmRvY3Vt
ZW50KCkuZnJhbWUoKSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGUoZWxlbWVudCkpCisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKCpyYW5nZSk7CisgICAgfQogfQogCiBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvckRI
VE1MRHJhZyhjb25zdCBJbnRQb2ludCYgbW91c2VEcmFnZ2VkUG9pbnQsIGNvbnN0IEludFBvaW50
JiBkcmFnT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT2Zmc2V0LCBib29sIGlzTGlu
a0ltYWdlKQpAQCAtMTM3Myw3ICsxMzc1LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9TeXN0
ZW1EcmFnKERyYWdJbWFnZSBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNvbnMKIAog
dm9pZCBEcmFnQ29udHJvbGxlcjo6cmVtb3ZlQWxsRHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKCkK
IHsKLSAgICBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UgPSBudWxscHRyOworICAgIG1f
ZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IFdURjo6bnVsbG9wdDsKICAgICBmb3IgKGF1
dG8mIHBsYWNlaG9sZGVyIDogc3RkOjpleGNoYW5nZShtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVy
cywgeyB9KSkgewogICAgICAgICBpZiAocGxhY2Vob2xkZXItPmlzQ29ubmVjdGVkKCkpCiAgICAg
ICAgICAgICBwbGFjZWhvbGRlci0+cmVtb3ZlKCk7CkBAIC0xNDU1LDEzICsxNDU3LDEzIEBAIHZv
aWQgRHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQo
Y29uc3QgVmVjdG9yPEludFNpemU+CiAgICAgYXV0byBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmNyZWF0ZSgqZG9jdW1lbnQsIFdURk1vdmUoZnJhZ21lbnQpLCB7IFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZywgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlNtYXJ0UmVwbGFjZSB9LCBFZGl0QWN0aW9uOjpJbnNlcnRGcm9tRHJvcCk7CiAgICAgY29tbWFu
ZC0+YXBwbHkoKTsKIAotICAgIGF1dG8gaW5zZXJ0ZWRDb250ZW50UmFuZ2UgPSBjb21tYW5kLT5p
bnNlcnRlZENvbnRlbnRSYW5nZSgpOworICAgIGF1dG8gaW5zZXJ0ZWRDb250ZW50UmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoY29tbWFuZC0+aW5zZXJ0ZWRDb250ZW50UmFuZ2UoKSk7CiAgICAgaWYg
KCFpbnNlcnRlZENvbnRlbnRSYW5nZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY29udGFpbmVyID0gbWFrZVJlZlB0
cihpbnNlcnRlZENvbnRlbnRSYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSk7CisgICAg
YXV0byBjb250YWluZXIgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqaW5zZXJ0ZWRDb250ZW50
UmFuZ2UpOwogICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oY29udGFpbmVyKSkgewogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2OSw3ICsxNDcx
LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJz
QXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdl
RWxlbWVudD4+IHBsYWNlaG9sZGVyczsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogZGVz
Y2VuZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
KmNvbnRhaW5lcikpKSB7Ci0gICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBpbnNlcnRlZENv
bnRlbnRSYW5nZS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xkZXIpOworICAgICAgICBhdXRvIGlu
dGVyc2VjdHNOb2RlID0gY3JlYXRlTGl2ZVJhbmdlKCppbnNlcnRlZENvbnRlbnRSYW5nZSktPmlu
dGVyc2VjdHNOb2RlKHBsYWNlaG9sZGVyKTsKICAgICAgICAgaWYgKCFpbnRlcnNlY3RzTm9kZS5o
YXNFeGNlcHRpb24oKSAmJiBpbnRlcnNlY3RzTm9kZS5yZXR1cm5WYWx1ZSgpKQogICAgICAgICAg
ICAgcGxhY2Vob2xkZXJzLmFwcGVuZChwbGFjZWhvbGRlcik7CiAgICAgfQpAQCAtMTQ5Myw3ICsx
NDk1LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KICAgICBtX2Ryb3BwZWRJbWFnZVBsYWNl
aG9sZGVyUmFuZ2UgPSBXVEZNb3ZlKGluc2VydGVkQ29udGVudFJhbmdlKTsKIAogICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS5jbGVhcigpOwotICAgIGNhcmV0Q29udHJvbGxlci5zZXRDYXJldFBvc2l0
aW9uKG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAg
ICBjYXJldENvbnRyb2xsZXIuc2V0Q2FyZXRQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24obV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlLT5zdGFydCkpOwogfQogCiB2b2lk
IERyYWdDb250cm9sbGVyOjpmaW5hbGl6ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVyKEhUTUxJbWFn
ZUVsZW1lbnQmIHBsYWNlaG9sZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCmlu
ZGV4IDkyMjRhYjIwNmNkZmViYjUzZjExYzc4YTNlYWUyMDgxM2NmZGQyNmMuLmUzMDBkMzI4ZDU3
OWVkYjE3MWYwM2UyMDA4ZjE0ZDhiN2ViZjY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNs
dWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVS
YW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
ODksNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwbGFjZURyYWdD
YXJldChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgY29uc3QgVmVjdG9yPFJlZjxIVE1MSW1hZ2VF
bGVtZW50Pj4mIGRyb3BwZWRJbWFnZVBsYWNlaG9sZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJzOyB9Ci0gICAgY29uc3QgUmVmUHRyPFJhbmdlPiYgZHJvcHBl
ZEltYWdlUGxhY2Vob2xkZXJSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcHBlZEltYWdlUGxh
Y2Vob2xkZXJSYW5nZTsgfQorICAgIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZHJvcHBl
ZEltYWdlUGxhY2Vob2xkZXJSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcHBlZEltYWdlUGxh
Y2Vob2xkZXJSYW5nZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaW5hbGl6ZURyb3Bw
ZWRJbWFnZVBsYWNlaG9sZGVyKEhUTUxJbWFnZUVsZW1lbnQmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVjdG9y
PEludFNpemU+JiBpbWFnZVNpemVzKTsKQEAgLTE2MSw3ICsxNjIsNyBAQCBwcml2YXRlOgogICAg
IFVSTCBtX2RyYWdnaW5nSW1hZ2VVUkw7CiAgICAgYm9vbCBtX2lzUGVyZm9ybWluZ0Ryb3AgeyBm
YWxzZSB9OwogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+IG1fZHJvcHBlZEltYWdl
UGxhY2Vob2xkZXJzOwotICAgIFJlZlB0cjxSYW5nZT4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRl
clJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9s
ZGVyUmFuZ2U7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBib29sIGlzRHJhZ2dhYmxlTGluayhjb25z
dCBFbGVtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNWVkYTgz
MGVjZjQ2NWQwZGQwYjI0N2ZhZTAwMjBjNWUyNTJlYjhlMC4uOTY3NTU4MWY5M2Y4ZDIxZTg3MDQw
Nzg4ZTZkOWFmMDE0YjUzMzUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtNjc1LDExICs2NzUsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NF
dmVudFRyaXBsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKIAogc3RhdGljIHVp
bnQ2NF90IHRleHREaXN0YW5jZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpCiB7Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3Rh
cnQpOwotICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOwotICAg
IGlmICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnRCb3VuZGFyeSwgKmVuZEJv
dW5kYXJ5IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9z
aXRpb25zKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiB9CiAKIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25zdCBNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzU1
MWI0ZDYyYjg0NjBkYmM2MTc0YjdkZTVmMmI5ZjM4M2FmMDc1Yi4uNjQxMDU0OGQ0MjIyMzc3YzE0
MTM4NjFjYjVkOTAyNDI1M2RlZDczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgxOSwyNCAr
ODE5LDE5IEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkKIFJlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmIGZyYW1lUG9pbnQpCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOwotICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICBpZiAoIXBvc2l0aW9uQm91bmRhcnkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBjb250YWluZXJUZXh0ID0gcG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5jb250YWluZXJUZXh0KCk7CiAgICAgaWYgKCFjb250YWluZXJUZXh0IHx8
ICFjb250YWluZXJUZXh0LT5yZW5kZXJlcigpIHx8IGNvbnRhaW5lclRleHQtPnJlbmRlcmVyKCkt
PnN0eWxlKCkudXNlclNlbGVjdCgpID09IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKGF1dG8gcHJldmlvdXMgPSBtYWtlQm91bmRhcnlQb2ludChw
b3NpdGlvbi5wcmV2aW91cygpKSkgewotICAgICAgICBhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFu
Z2UgPSBTaW1wbGVSYW5nZSB7ICpwcmV2aW91cywgKnBvc2l0aW9uQm91bmRhcnkgfTsKLSAgICAg
ICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2Up
LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5n
ZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKTsKKyAgICBpZiAoYXV0byBwcmV2aW91c0NoYXJhY3Rl
clJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLnByZXZpb3VzKCksIHBvc2l0aW9uKSkg
eworICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnByZXZpb3VzQ2hhcmFj
dGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZSgqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKGF1
dG8gbmV4dCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLm5leHQoKSkpIHsKLSAgICAgICAg
YXV0byBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwb3NpdGlvbkJvdW5kYXJ5
LCAqbmV4dCB9OwotICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENo
YXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKTsKKyAgICBpZiAoYXV0byBuZXh0Q2hh
cmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uLm5leHQoKSkp
IHsKKyAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpuZXh0Q2hhcmFjdGVy
UmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDBlMmE3N2I4ZGMzNTVlNjNlMzQ5NWEyYjE4OTJjNzU3
NWFhODQ4ZWYuLjgwNWYzZDFkODk2NWFiYTUxOTQ2NjAzZTc0Yzk5MWE2ZDI5M2QyNWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgIlBvaW50ZXJDYXB0dXJl
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBvaW50ZXJMb2NrQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTcxMSwxMiArNzEyLDEwIEBAIGJvb2wg
UGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9u
cywgRGlkV3JhcCogZGlkV3JhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFBhZ2U6OmZp
bmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMg
b3B0aW9ucywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hdGNoUmFuZ2VzLCBp
bnQmIGluZGV4Rm9yU2VsZWN0aW9uKQorYXV0byBQYWdlOjpmaW5kVGV4dE1hdGNoZXMoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0KSAtPiBN
YXRjaGluZ1JhbmdlcwogewogICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0UmFuZ2VzOwog
Ci0gICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwotCiAgICAgRnJhbWUqIGZyYW1lID0gJm1haW5G
cmFtZSgpOwogICAgIEZyYW1lKiBmcmFtZVdpdGhTZWxlY3Rpb24gPSBudWxscHRyOwogICAgIGRv
IHsKQEAgLTcyNywxMCArNzI2LDExIEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFu
Z2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgfSB3
aGlsZSAoZnJhbWUpOwogCiAgICAgaWYgKHJlc3VsdFJhbmdlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBp
bmRleEZvclNlbGVjdGlvbjsKIAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKLSAgICAg
ICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uOwogICAgICAg
ICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFj
a3dhcmRzKSkgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdFJhbmdlcy5zaXpl
KCk7IGkgPiAwOyAtLWkpIHsKQEAgLTc1NiwzNSArNzU2LDM3IEBAIHZvaWQgUGFnZTo6ZmluZFN0
cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRp
b25zLCBpCiAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IDA7CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKLSAgICAgICAgbWF0Y2hSYW5nZXMuYXBw
ZW5kKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpOworICAgIGlmICghaW5kZXhGb3JTZWxlY3Rpb24p
CisgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsKKworICAg
IHJldHVybiB7IFdURk1vdmUocmVzdWx0UmFuZ2VzKSwgKmluZGV4Rm9yU2VsZWN0aW9uIH07CiB9
CiAKLVJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQorT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25zIG9w
dGlvbnMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHJlZmVyZW5jZVJh
bmdlICYmIHJlZmVyZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVu
Y2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnBhZ2UoKSAhPSB0aGlzKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgQ2FuV3JhcCBjYW5XcmFwID0gb3B0aW9u
cy5jb250YWlucyhXcmFwQXJvdW5kKSA/IENhbldyYXA6OlllcyA6IENhbldyYXA6Ok5vOwotICAg
IEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVy
ZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5m
cmFtZSgpIDogJm1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFydEZyYW1lID0gZnJhbWU7CiAg
ICAgZG8gewotICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5y
YW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IG1ha2VTaW1wbGVSYW5n
ZShyZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkK
LSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOworICAgICAg
ICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRh
cmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IHJlZmVyZW5jZVJhbmdlIDogV1RGOjpudWxsb3B0
LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7
CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsICFvcHRpb25zLmNvbnRhaW5z
KEJhY2t3YXJkcyksIGNhbldyYXApOwogICAgIH0gd2hpbGUgKGZyYW1lICYmIGZyYW1lICE9IHN0
YXJ0RnJhbWUpOwogCiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0YXJ0RnJhbWUsIG9uIHRo
ZSBvdGhlciBzaWRlIG9mIHRoZSByZWZlcmVuY2UgcmFuZ2UgdGhhdCB3ZSBkaWQgZWFybGllci4K
ICAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCBzZWFyY2ggYWdhaW4gd2l0aCB3cmFwIG9u
LgogICAgIGlmIChjYW5XcmFwID09IENhbldyYXA6OlllcyAmJiByZWZlcmVuY2VSYW5nZSkgewot
ICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdl
T2ZTdHJpbmcodGFyZ2V0LCBtYWtlU2ltcGxlUmFuZ2UoKnJlZmVyZW5jZVJhbmdlKSwgb3B0aW9u
cyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOworICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5n
ZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCAqcmVmZXJlbmNl
UmFuZ2UsIG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdW5zaWduZWQgUGFnZTo6ZmluZE1hdGNoZXNG
b3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25l
ZCBtYXhNYXRjaENvdW50LCBTaG91bGRIaWdobGlnaHRNYXRjaGVzIHNob3VsZEhpZ2hsaWdodE1h
dGNoZXMsIFNob3VsZE1hcmtNYXRjaGVzIHNob3VsZE1hcmtNYXRjaGVzKQpAQCAtODc5LDI0ICs4
ODEsMjIgQEAgc3RhdGljIHZvaWQgcmVwbGFjZVJhbmdlcyhQYWdlJiBwYWdlLCBjb25zdCBWZWN0
b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+JiByYW5nZXMKICAgICAgICAgICAgIGlmIChyYW5nZS5j
b2xsYXBzZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMp
OworICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Us
IERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFj
ZW1lbnRUZXh0LCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpZZXMsIEVkaXRvcjo6U21hcnRS
ZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpOwogICAgICAgICB9CiAg
ICAgfQogfQogCi11aW50MzJfdCBQYWdlOjpyZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVj
dG9yPFJlZjxSYW5nZT4+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpCit1aW50MzJfdCBQYWdlOjpyZXBsYWNlUmFuZ2Vz
V2l0aFRleHQoY29uc3QgVmVjdG9yPFNpbXBsZVJhbmdlPiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCAvKnNlbGVjdGlvbk9ubHkqLykKIHsKLSAg
ICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIHJlc3BlY3QgdGhlIGBzZWxlY3Rp
b25Pbmx5YCBmbGFnIGJ5IGNoZWNraW5nIHdoZXRoZXIgZWFjaCByYW5nZSBiZWluZyByZXBsYWNl
ZCBpcwotICAgIC8vIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGZyYW1lJ3Mgc2VsZWN0aW9uLgotICAg
IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25Pbmx5KTsKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVy
ZSwgd2Ugc2hvdWxkIHJlc3BlY3QgdGhlIGBzZWxlY3Rpb25Pbmx5YCBmbGFnIGJ5IGNoZWNraW5n
IHdoZXRoZXIgZWFjaCByYW5nZSBiZWluZyByZXBsYWNlZCBpcyBjb250YWluZWQgd2l0aGluIGl0
cyBmcmFtZSdzIHNlbGVjdGlvbi4KIAogICAgIFZlY3RvcjxGaW5kUmVwbGFjZW1lbnRSYW5nZT4g
cmVwbGFjZW1lbnRSYW5nZXM7CiAgICAgcmVwbGFjZW1lbnRSYW5nZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShyYW5nZXNUb1JlcGxhY2Uuc2l6ZSgpKTsKIAogICAgIGZvciAoYXV0byYgcmFuZ2Ug
OiByYW5nZXNUb1JlcGxhY2UpIHsKLSAgICAgICAgYXV0byBoaWdoZXN0Um9vdCA9IG1ha2VSZWZQ
dHIoaGlnaGVzdEVkaXRhYmxlUm9vdChyYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgICAg
IGlmICghaGlnaGVzdFJvb3QgfHwgaGlnaGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChy
YW5nZS0+ZW5kUG9zaXRpb24oKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkp
CisgICAgICAgIGF1dG8gaGlnaGVzdFJvb3QgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJv
b3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSkpOworICAgICAgICBp
ZiAoIWhpZ2hlc3RSb290IHx8IGhpZ2hlc3RSb290ICE9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkpIHx8ICFoaWdoZXN0Um9vdC0+ZG9j
dW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmhpZ2hlc3RSb290KTsKICAgICAg
ICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIGNoYXJh
Y3RlclJhbmdlKHNjb3BlLCByYW5nZSkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDlkOGY4ZmI1M2Y4
M2E2Njc1MDE2M2U5ZjAzNDQyMTcwMTNmNmIzN2MuLmNmZmE2YzliNjBiNzMzZjg1YWIxNjQ2MGE3
NTE0ZjMyNTdlMzcxYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xMjksNyArMTI5LDYgQEAgY2xhc3Mg
UGx1Z2luVmlld0Jhc2U7CiBjbGFzcyBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI7CiBjbGFzcyBQ
b2ludGVyTG9ja0NvbnRyb2xsZXI7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7Ci1jbGFzcyBSYW5n
ZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlc291cmNlVXNhZ2VPdmVybGF5OwogY2xh
c3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKQEAgLTE1Miw2ICsxNTEsOCBAQCBjbGFzcyBXZWJHTFN0
YXRlVHJhY2tlcjsKIGNsYXNzIFdoZWVsRXZlbnREZWx0YUZpbHRlcjsKIGNsYXNzIFdoZWVsRXZl
bnRUZXN0TW9uaXRvcjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiB1c2luZyBQbGF0Zm9ybURp
c3BsYXlJRCA9IHVpbnQzMl90OwogdXNpbmcgU2hhcmVkU3RyaW5nSGFzaCA9IHVpbnQzMl90Owog
CkBAIC0yODksMTIgKzI5MCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCB0YWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3RhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
czsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYs
IEZpbmRPcHRpb25zLCBEaWRXcmFwKiA9IG51bGxwdHIpOwotICAgIFdFQkNPUkVfRVhQT1JUIHVp
bnQzMl90IHJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJh
bmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0
aW9uT25seSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVJhbmdlc1dpdGhU
ZXh0KGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdWludDMyX3QgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRUZXh0KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV2ZWFsQ3VycmVudFNl
bGVjdGlvbigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZU9mU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMpOworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc2VhcmNoUmFuZ2UsIEZpbmRPcHRpb25zKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5n
JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBGaW5kT3B0
aW9ucywgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwpAQCAt
MzA0LDEzICszMDUsMTYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0
Y2hCZWZvcmVQcmludEV2ZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEFm
dGVyUHJpbnRFdmVudCgpOwogCi0gICAgLy8gRmluZCBhbGwgdGhlIFJhbmdlcyBmb3IgdGhlIG1h
dGNoaW5nIHRleHQuCisgICAgLy8gRmluZCBhbGwgdGhlIHJhbmdlcyBmb3IgdGhlIG1hdGNoaW5n
IHRleHQuCiAgICAgLy8gVXBvbiByZXR1cm4sIGluZGV4Rm9yU2VsZWN0aW9uIHdpbGwgYmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gMCBpZiB0aGVyZSBpcyBubyB1c2VyIHNlbGVjdGlv
bgotICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmFuZ2UgYWZ0ZXIgdGhlIHVzZXIgc2Vs
ZWN0aW9uCi0gICAgLy8gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbiBpZiB0aGVyZSBpcyBubyBt
YXRjaGluZyB0ZXh0IGFmdGVyIHRoZSB1c2VyIHNlbGVjdGlvbi4KLSAgICBlbnVtIHsgTm9NYXRj
aEFmdGVyVXNlclNlbGVjdGlvbiA9IC0xIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaW5k
U3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIGludCBtYXhD
b3VudCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiwgaW50JiBpbmRleEZvclNlbGVjdGlvbik7Cisg
ICAgLy8gIDAgaWYgdGhlcmUgaXMgbm8gdXNlciBzZWxlY3Rpb24sCisgICAgLy8gIGluZGV4IG9m
IHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24sCisgICAgLy8gIHNpemUg
b2YgdGhlIHJhbmdlIHZlY3RvciBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyB0ZXh0IGFmdGVyIHRo
ZSB1c2VyIHNlbGVjdGlvbi4KKyAgICBzdHJ1Y3QgTWF0Y2hpbmdSYW5nZXMgeworICAgICAgICBW
ZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlczsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhGb3JTZWxl
Y3Rpb24geyAwIH07CisgICAgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBNYXRjaGluZ1JhbmdlcyBm
aW5kVGV4dE1hdGNoZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heENv
dW50KTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXpl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCBkZDk0MmU5MjQ4ZDVk
NzIzNTJkNGI1YjI1OTBjOGI2YWZkNTg3ODIwLi45ZTYyMTA5NmRhMmUyZjdiZjVhZTcwZThhM2Vk
ZmI0YzZkODUyYTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTIy
NCw3ICsyMjQsNyBAQCBzdGF0aWMgQ29sb3IgZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBGcgogICAgIGF1dG8gZXN0aW1hdGVk
QmFja2dyb3VuZENvbG9yID0gZnJhbWUudmlldygpID8gZnJhbWUudmlldygpLT5kb2N1bWVudEJh
Y2tncm91bmRDb2xvcigpIDogQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKICAgICBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciA9IG51bGxwdHI7Ci0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNv
bW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNv
bnRhaW5lcik7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yKHJhbmdlKTsKICAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IpIHsKICAgICAgICAgaWYgKGlz
PFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigpKSkgewogICAgICAgICAg
ICAgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pihjb21tb25BbmNlc3Rvci0+cmVu
ZGVyZXIoKSk7CkBAIC0zMDksNyArMzA5LDcgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGlj
YXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KIAog
ICAgIGJvb2wgdXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdl
cyA9IGRhdGEub3B0aW9ucy5jb250YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VCb3VuZGlu
Z1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzKTsKICAgICBpZiAodXNlQm91
bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyAmJiBjb250YWluc09u
bHlXaGl0ZVNwYWNlVGV4dChyYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNvbnRhaW5lclJl
bmRlcmVyID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCBy
YW5nZS5lbmQuY29udGFpbmVyKS0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoYXV0byogY29u
dGFpbmVyUmVuZGVyZXIgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZSktPnJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIGRhdGEub3B0aW9ucy5hZGQoVGV4dEluZGljYXRvck9wdGlvbjo6
UGFpbnRBbGxDb250ZW50KTsKICAgICAgICAgICAgIHRleHRSZWN0cy5hcHBlbmQoY29udGFpbmVy
UmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDNkN2E1ZTlkOTYyY2Q3MDM5M2NmZGYzNWI4ZGUw
OWZjODEwM2MyOTYuLjg3ZGQxZjNlNjgxODY0NWQ4MTQ3YjBlZDRlMzY1Mzk4YzNkMTExNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1wb3J0
ICJQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lt
cG9ydCAiUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgiCisjaW1wb3J0ICJSYW5nZS5o
IgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyQ29tcG9zaXRv
ci5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKQEAgLTExNSwyMCArMTE2LDE5IEBA
IE5TQXJyYXkgKkZyYW1lOjp3b3Jkc0luQ3VycmVudFBhcmFncmFwaCgpIGNvbnN0CiAgICAgICAg
IHJldHVybiBuaWw7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24ocGFnZSgpLT5zZWxl
Y3Rpb24oKS5zdGFydCgpLCBwYWdlKCktPnNlbGVjdGlvbigpLmFmZmluaXR5KCkpOwotICAgIFZp
c2libGVQb3NpdGlvbiBlbmQocG9zaXRpb24pOworCisgICAgYXV0byBlbmQgPSBwb3NpdGlvbjsK
ICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChlbmQpKSB7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91cyA9IGVuZC5wcmV2aW91cygpOwotICAgICAgICBVQ2hhciBjKHByZXZpb3Vz
LmNoYXJhY3RlckFmdGVyKCkpOworICAgICAgICBVQ2hhciBjID0gcHJldmlvdXMuY2hhcmFjdGVy
QWZ0ZXIoKTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB1c2Ugc29tZXRoaW5nIGZyb20gSUNV
IG9yIEFTQ0lJQ1R5cGUgdGhhdCBpcyBub3Qgc3ViamVjdCB0byBQT1NJWCBjdXJyZW50IGxhbmd1
YWdlIHJhdGhlciB0aGFuIGlzd3B1bmN0LgogICAgICAgICBpZiAoIWlzd3B1bmN0KGMpICYmICFp
c1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0gbm9CcmVha1NwYWNlKQogICAgICAgICAgICAgZW5k
ID0gc3RhcnRPZldvcmQoZW5kKTsKICAgICB9CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHN0
YXJ0T2ZQYXJhZ3JhcGgoZW5kKSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJh
bmdlT2ZDb250ZW50cygqZG9jdW1lbnQoKSkpOwotICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdl
dCgpLCBzdGFydCk7Ci0gICAgc2V0RW5kKHNlYXJjaFJhbmdlLmdldCgpLCBlbmQpOwotCi0gICAg
aWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIGlmICghc2VhcmNoUmFuZ2UgfHwgc2VhcmNo
UmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgTlNNdXRhYmxl
QXJyYXkgKndvcmRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA0MDZkNWJlOTI5ZDUzYTE5NzQyMDBiOTQ4
M2ZkNDFhNjZkMzU2ZmVlLi4xN2FmZWFjMTQ0MmRiZTFhNjYzOWQ3MTQ0ZTE1YTYwZDZkYjdjZTI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC01Nzks
MTEgKzU3OSw4IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNPdmVyVGV4dEluc2lkZUZvcm1Db250
cm9sRWxlbWVudCgpIGNvbnN0CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IGVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgaWYgKCF3b3JkUmFuZ2Up
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhd29yZFJhbmdlLT50ZXh0KCku
aXNFbXB0eSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKKyAgICByZXR1cm4gd29yZFJhbmdlICYmIGhhc0FueVBs
YWluVGV4dCgqd29yZFJhbmdlKTsKIH0KIAogVVJMIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlTGlu
a1VSTCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMv
V0tXZWJBcmNoaXZlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dl
YkFyY2hpdmVSZWYuY3BwCmluZGV4IGI5YzU4N2NjYmViMDJkMjZmZmY2NzE3NjhmMjZlNGQ2N2Vm
NDA4OWUuLjU5MDNjMDU3MjVjNTZlN2VlZTllNDExYjQ2MzNmZmE0N2NhNWQ3ZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dlYkFyY2hpdmVSZWYuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dlYkFyY2hpdmVSZWYuY3BwCkBA
IC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIgog
I2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJh
bmdlLmg+CiAKIFdLVHlwZUlEIFdLV2ViQXJjaGl2ZUdldFR5cGVJRCgpCiB7CkBAIC01Myw3ICs1
NSw3IEBAIFdLV2ViQXJjaGl2ZVJlZiBXS1dlYkFyY2hpdmVDcmVhdGVXaXRoRGF0YShXS0RhdGFS
ZWYgZGF0YVJlZikKIAogV0tXZWJBcmNoaXZlUmVmIFdLV2ViQXJjaGl2ZUNyZWF0ZUZyb21SYW5n
ZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlSGFuZGxlUmVmKQogewotICAgIGF1dG8gd2Vi
QXJjaGl2ZSA9IEFQSTo6V2ViQXJjaGl2ZTo6Y3JlYXRlKFdlYktpdDo6dG9JbXBsKHJhbmdlSGFu
ZGxlUmVmKS0+Y29yZVJhbmdlKCkpOworICAgIGF1dG8gd2ViQXJjaGl2ZSA9IEFQSTo6V2ViQXJj
aGl2ZTo6Y3JlYXRlKG1ha2VTaW1wbGVSYW5nZShXZWJLaXQ6OnRvSW1wbChyYW5nZUhhbmRsZVJl
ZiktPmNvcmVSYW5nZSgpKSk7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJndlYkFyY2hpdmUu
bGVha1JlZigpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2Vi
QXJjaGl2ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5oCmluZGV4IDcx
ZGUyOGJkYTc0ZDdmMDM0ZmI5MmM2ZjI4MjRmZWEzOWUyY2Y5YWYuLjE0NjRhNmI3OWFlY2RmZTgy
ZTdjYWM0NGFjZTlmM2U5MzgwMzRiZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FQSVdlYkFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZl
LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdlYkFyY2hpdmVfaAotI2RlZmluZSBXZWJBcmNoaXZlX2gKKyNwcmFn
bWEgb25jZQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTM4LDcgKzM3LDcgQEAgY2xhc3Mg
RGF0YTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTGVnYWN5V2ViQXJjaGl2ZTsKLWNs
YXNzIFJhbmdlOworc3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAg
LTUyLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2ViQXJjaGl2ZT4gY3JlYXRl
KFdlYkFyY2hpdmVSZXNvdXJjZSogbWFpblJlc291cmNlLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBz
dWJyZXNvdXJjZXMsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YmZyYW1lQXJjaGl2ZXMpOwogICAg
IHN0YXRpYyBSZWY8V2ViQXJjaGl2ZT4gY3JlYXRlKEFQSTo6RGF0YSopOwogICAgIHN0YXRpYyBS
ZWY8V2ViQXJjaGl2ZT4gY3JlYXRlKFJlZlB0cjxXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlPiYm
KTsKLSAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShXZWJDb3JlOjpSYW5nZSYpOwor
ICAgIHN0YXRpYyBSZWY8V2ViQXJjaGl2ZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJik7CiAKICAgICBXZWJBcmNoaXZlUmVzb3VyY2UqIG1haW5SZXNvdXJjZSgpOwogICAgIEFQ
STo6QXJyYXkqIHN1YnJlc291cmNlcygpOwpAQCAtNzYsNSArNzUsMyBAQCBwcml2YXRlOgogfSAv
LyBuYW1lc3BhY2UgQVBJCiAKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQotI2VuZGlmIC8v
IFdlYkFyY2hpdmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJj
aGl2ZS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0KaW5kZXggZmI1
NGFmNDBiYzAwZDI0M2JmOTBlOTIyOTZjZDFiM2QwZGJiY2VlZi4uMThkZGM1N2E5ZDQxMjAwOWQ2
ZGYzMGE5OGM2ZTZhNTAyM2FmMjk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJV2ViQXJjaGl2ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZl
Lm1tCkBAIC01Miw5ICs1Miw5IEBAIFJlZjxXZWJBcmNoaXZlPiBXZWJBcmNoaXZlOjpjcmVhdGUo
UmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+JiYgbGVnYWN5V2ViQXJjaGl2ZSkKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJBcmNoaXZlKGxlZ2FjeVdlYkFyY2hpdmUucmVsZWFzZU5vbk51bGwo
KSkpOwogfQogCi1SZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRlKFJhbmdlJiByYW5n
ZSkKK1JlZjxXZWJBcmNoaXZlPiBXZWJBcmNoaXZlOjpjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hpdmUoTGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlKCZyYW5nZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJB
cmNoaXZlKExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShyYW5nZSkpKTsKIH0KIAogV2ViQXJjaGl2
ZTo6V2ViQXJjaGl2ZShXZWJBcmNoaXZlUmVzb3VyY2UqIG1haW5SZXNvdXJjZSwgUmVmUHRyPEFQ
STo6QXJyYXk+JiYgc3VicmVzb3VyY2VzLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBzdWJmcmFtZUFy
Y2hpdmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKaW5kZXggODZhYzU1M2U2
ZmNjMDgyMmFkNDE4YzZhMGQzZjhjZjljNGE5OWI5OC4uOWY3YzczMTA5M2NmODcxYTdlNGM2M2Yx
YjFmMWE2YzMwNTNmMzUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGlu
Z1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCkBA
IC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1SZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0
IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gYmFz
ZSkKK09wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2Uo
V2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwg
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGJhc2UpCiB7CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5n
ZS5sb2NhdGlvbiAhPSBub3RGb3VuZCk7CiAgICAgV2ViQ29yZTo6Q2hhcmFjdGVyUmFuZ2UgcmFu
Z2UgeyBlZGl0aW5nUmFuZ2UubG9jYXRpb24sIGVkaXRpbmdSYW5nZS5sZW5ndGggfTsKQEAgLTQ3
LDIxICs0NywyMSBAQCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5n
ZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IEVkaXRpbgogICAgICAgICAvLyBUaGF0IGZp
dHMgd2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCiAgICAgICAgIGF1dG8q
IGVsZW1lbnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVu
dEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJh
bmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZWxlbWVudCksIHJhbmdlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gcmVzb2x2ZUNo
YXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZWxlbWVudCksIHJh
bmdlKTsKICAgICB9CiAKICAgICBBU1NFUlQoYmFzZSA9PSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG86OlBhcmFncmFwaCk7CiAKICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQoc3RhcnRPZlBhcmFncmFwaChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSkpOwogICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzY29wZUVu
ZCA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFp
bmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5lbmQ7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShXZWJDb3JlOjpyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhT
dGFydCksIFdURk1vdmUoc2NvcGVFbmQpIH0sIHJhbmdlKSk7CisgICAgYXV0byBzY29wZUVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRh
aW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnJlc29s
dmVDaGFyYWN0ZXJSYW5nZSh7IFdURk1vdmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RGTW92ZShzY29w
ZUVuZCkgfSwgcmFuZ2UpOwogfQogCi1FZGl0aW5nUmFuZ2UgRWRpdGluZ1JhbmdlOjpmcm9tUmFu
Z2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UsIEVk
aXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8pCitFZGl0aW5n
UmFuZ2UgRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0aW5nUmFuZ2VJc1Jl
bGF0aXZlVG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQogewogICAgIEFTU0VSVChlZGl0aW5n
UmFuZ2VJc1JlbGF0aXZlVG8gPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJv
b3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5oCmluZGV4IGUwNDNmOTcyNDBlNDI1
ZWNkMjVhNDI3ZWRkOTI3YWNiNzQ1ZTM2MTQuLmYxOWI0NDNmMGRjNzE5YTc0ODM1Yzc4Yzc0YjE2
NTNkOTQxMWExNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5oCkBAIC0zMSw3ICsz
MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZyYW1lOwotY2xhc3MgUmFuZ2U7
CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTgsOCAr
NTgsOCBAQCBzdHJ1Y3QgRWRpdGluZ1JhbmdlIHsKICAgICAvLyAobm90Rm91bmQsIDApIGlzIG5v
dGFibHkgdmFsaWQuCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb24g
KyBsZW5ndGggPj0gbG9jYXRpb247IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IHRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBFZGl0aW5nUmFuZ2UmLCBFZGl0aW5n
UmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9v
dCk7Ci0gICAgc3RhdGljIEVkaXRpbmdSYW5nZSBmcm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmLCBj
b25zdCBXZWJDb3JlOjpSYW5nZSosIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9IEVkaXRpbmdS
YW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+IHRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBFZGl0aW5n
UmFuZ2UmLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG86OkVkaXRhYmxlUm9vdCk7CisgICAgc3RhdGljIEVkaXRpbmdSYW5nZSBmcm9tUmFuZ2UoV2Vi
Q29yZTo6RnJhbWUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBFZGl0
aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxl
Um9vdCk7CiAKICNpZiBkZWZpbmVkKF9fT0JKQ19fKQogICAgIEVkaXRpbmdSYW5nZShOU1Jhbmdl
IHJhbmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dC5oCmluZGV4IDY5NmNmZmNiZGY4MGU1MTJlMWQzZmRkYTdmMTA4ZjMxZGIzMGU2YjEuLmQ4ODUx
MTFkOWY3NTAwMGJlN2Q2N2UwMGJjZjA3M2E0OWE2MWUzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKQEAgLTMxLDExICszMSwxMSBAQAog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNz
IE5vZGU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFN0eWxlUHJv
cGVydGllczsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC01MSwyMSArNTEsMjEgQEAgY2xhc3MgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5FZGl0b3JDbGllbnQoKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVk
aXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgV2Vi
Q29yZTo6UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZElu
c2VydE5vZGUoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdl
KiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdl
JiwgU3RyaW5nSW1wbCosIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6
RWRpdG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZERlbGV0ZVJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdl
YktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdl
KiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rp
bmcpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiwgV2ViQ29yZTo6
UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGlu
ZyhXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBs
KiBub3RpZmljYXRpb25OYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlKFdlYktp
dDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCog
bm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVRvUGFzdGVi
b2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6
OlJhbmdlKiwgVmVjdG9yPFdURjo6U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgeyB9CisgICAgdmly
dHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXZWJD
b3JlOjpTaW1wbGVSYW5nZSYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5n
ZSYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdlJiwg
Y29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
LCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0
IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0
aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0
IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihX
ZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFdURjo6U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPj4mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVUb1Bhc3Rl
Ym9hcmQoV2ViS2l0OjpXZWJQYWdlJikgeyB9Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29T
dGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgV2Vi
Q29yZTo6UmFuZ2UmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFn
bWVudCYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7
IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluamVjdGVkQnVuZGxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFu
ZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IGZjN2UwMGIyOGViM2E1NjhmNmY4NGM1NmEyNmFi
MWJmMDc5Yjc0YzMuLjZhN2Y1MWVkNjU3Mjc3NWY5ZjJmYmQ3MTMxNTUzOWYxMGJmN2M2MmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZU5vZGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaW5jbHVkZSAiV0tCdW5kbGVOb2RlSGFuZGxlUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCkBAIC05MCw3ICs4OSw3IEBAIFdLQnVuZGxlTm9k
ZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5RG9jdW1lbnQoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIG5vZGVICiAKIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRSZW5kZXJSZWN0KFdL
QnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBib29sKiBpc1JlcGxhY2VkKQogewot
ICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT5y
ZW5kZXJSZWN0KGlzUmVwbGFjZWQpKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBXS0ltYWdlUmVm
IFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlTbmFwc2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBub2RlSGFuZGxlUmVmLCBXS1NuYXBzaG90T3B0aW9ucyBvcHRpb25zKQpAQCAtOTks
MTAgKzk4LDkgQEAgV0tJbWFnZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5U25hcHNob3RXaXRo
T3B0aW9ucyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZUgKICAgICByZXR1cm4gdG9BUEkoaW1h
Z2UubGVha1JlZigpKTsKIH0KIAotV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVI
YW5kbGVDb3B5VmlzaWJsZVJhbmdlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVm
KQorV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5VmlzaWJsZVJh
bmdlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKG5vZGVIYW5k
bGVSZWYpLT52aXNpYmxlUmFuZ2UoKTsKLSAgICByZXR1cm4gdG9BUEkocmFuZ2VIYW5kbGUubGVh
a1JlZigpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogV0tSZWN0IFdLQnVuZGxlTm9kZUhh
bmRsZUdldEVsZW1lbnRCb3VuZHMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRIYW5kbGVS
ZWYpCkBAIC0xMTAsMTkgKzEwOCwxNyBAQCBXS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0RWxl
bWVudEJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudEhhbmRsZVJlZgogICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGVsZW1lbnRIYW5kbGVSZWYpLT5lbGVt
ZW50Qm91bmRzKCkpOwogfQogCi12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVs
ZW1lbnRWYWx1ZUZvclVzZXIoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYsIFdLU3RyaW5nUmVmIHZhbHVlUmVmKQordm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVT
ZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tT
dHJpbmdSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJl
ZiktPnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIoV2ViS2l0Ojp0b1dURlN0cmluZyh2
YWx1ZVJlZikpOwogfQogCi12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1l
bnRTcGVsbGNoZWNrRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZiwgYm9vbCBlbmFibGVkKQordm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1M
SW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBib29s
KQogewotICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRI
VE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLWJvb2wgV0tC
dW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVuZGxlTm9kZUhh
bmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikK
IHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikt
PmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZmlsbGVk
KQpAQCAtMTM1LDkgKzEzMSw5IEBAIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0
RWxlbWVudEF1dG9GaWxsZWRBbmRWaWV3YWJsZShXS0J1bmRsZU5vZGVIYW5kCiAgICAgV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbGVkQW5kVmlld2FibGUoYXV0b0ZpbGxlZEFuZFZpZXdhYmxlKTsKIH0KIAotYm9vbCBX
S0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVk
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKQorYm9vbCBX
S0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVk
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9u
RW5hYmxlZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5k
bGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkV2l0aEJ1dHRvblR5cGUo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIFdLQXV0b0Zp
bGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSkKQEAgLTE1NSw5ICsxNTEsOSBAQCBXS0F1
dG9GaWxsQnV0dG9uVHlwZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50TGFz
dEF1dG9GaWxsQnV0dG9uVHlwZQogICAgIHJldHVybiB0b1dLQXV0b0ZpbGxCdXR0b25UeXBlKFdl
YktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVtZW50
TGFzdEF1dG9GaWxsQnV0dG9uVHlwZSgpKTsKIH0KIAotYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVH
ZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxBdmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5p
c0F1dG9GaWxsQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdLQnVu
ZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBhdXRvRmlsbEF2
YWlsYWJsZSkKQEAgLTE2NSw5ICsxNjEsOSBAQCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVSZQogICAg
IFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRBdXRvRmlsbEF2
YWlsYWJsZShhdXRvRmlsbEF2YWlsYWJsZSk7CiB9CiAKLVdLUmVjdCBXS0J1bmRsZU5vZGVIYW5k
bGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitXS1JlY3QgV0tCdW5kbGVOb2RlSGFu
ZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91
bmRzKCkpOworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0
SFRNTElucHV0RWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKQEAgLTE4MCwxMCArMTc2LDkgQEAgYm9vbCBX
S0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJF
ZGl0KFdLQnVuZGxlTm9kZUgKICAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbFRleHRBcmVh
RWxlbWVudEhhbmRsZVJlZiktPmh0bWxUZXh0QXJlYUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVk
aXQoKTsKIH0KIAotV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlI
VE1MVGFibGVDZWxsRWxlbWVudENlbGxBYm92ZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbFRh
YmxlQ2VsbEVsZW1lbnRIYW5kbGVSZWYpCitXS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVO
b2RlSGFuZGxlQ29weUhUTUxUYWJsZUNlbGxFbGVtZW50Q2VsbEFib3ZlKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZikKIHsKLSAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+
IG5vZGVIYW5kbGUgPSBXZWJLaXQ6OnRvSW1wbChodG1sVGFibGVDZWxsRWxlbWVudEhhbmRsZVJl
ZiktPmh0bWxUYWJsZUNlbGxFbGVtZW50Q2VsbEFib3ZlKCk7Ci0gICAgcmV0dXJuIHRvQVBJKG5v
ZGVIYW5kbGUubGVha1JlZigpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogV0tCdW5kbGVG
cmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5RG9jdW1lbnRGcmFtZShXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgZG9jdW1lbnRIYW5kbGVSZWYpCkBAIC0xOTQsOCArMTg5LDcgQEAgV0tCdW5kbGVG
cmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5RG9jdW1lbnRGcmFtZShXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgZG9jdW0KIAogV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5
SFRNTEZyYW1lRWxlbWVudENvbnRlbnRGcmFtZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbEZy
YW1lRWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJGcmFtZT4gZnJh
bWUgPSBXZWJLaXQ6OnRvSW1wbChodG1sRnJhbWVFbGVtZW50SGFuZGxlUmVmKS0+aHRtbEZyYW1l
RWxlbWVudENvbnRlbnRGcmFtZSgpOwotICAgIHJldHVybiB0b0FQSShmcmFtZS5sZWFrUmVmKCkp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBXS0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9k
ZUhhbmRsZUNvcHlIVE1MSUZyYW1lRWxlbWVudENvbnRlbnRGcmFtZShXS0J1bmRsZU5vZGVIYW5k
bGVSZWYgaHRtbElGcmFtZUVsZW1lbnRIYW5kbGVSZWYpCkBAIC0yMDQsMjIgKzE5OCwxNyBAQCBX
S0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MSUZyYW1lRWxlbWVudENv
bnRlbnRGcmFtZShXS0J1bmRsZU5vZAogICAgIHJldHVybiB0b0FQSShmcmFtZS5sZWFrUmVmKCkp
OwogfQogCi0vLyBEZXByZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1
dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikuCiBib29sIFdLQnVuZGxl
Tm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRv
SW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0Zp
bGxlZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRGVwcmVjYXRlZCAtIHVzZSBXS0J1
bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1bmRsZU5vZGVI
YW5kbGVSZWYsIGJvb2wpLgotdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVt
ZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiwgYm9vbCBmaWxsZWQpCit2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVs
ZW1lbnRBdXRvZmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBoYW5kbGUsIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoZmlsbGVkKTsKKyAgICBXS0J1bmRsZU5vZGVIYW5k
bGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChoYW5kbGUsIGVuYWJsZWQpOwogfQogCi0v
LyBEZXByZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbEJ1dHRvbkVuYWJsZWRXaXRoQnV0dG9uVHlwZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYs
IFdLQXV0b0ZpbGxCdXR0b25UeXBlKS4KLXZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElu
cHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBlbmFibGVkKQordm9pZCBXS0J1bmRsZU5vZGVI
YW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKFdLQnVuZGxlTm9k
ZUhhbmRsZVJlZiwgYm9vbCkKIHsKLSAgICBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5cGUgYXV0
b0ZpbGxCdXR0b25UeXBlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkF1dG9GaWxsQnV0dG9uVHlwZTo6
Q3JlZGVudGlhbHMgOiBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5cGU6Ok5vbmU7Ci0KLSAgICBX
ZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChhdXRvRmlsbEJ1dHRvblR5cGUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tE
T01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NUmFuZ2UubW0KaW5kZXggMDA5MGI4OThhMmUxZTFkNjFjYWUwNDUwMzhhMmY4NWQ3
NWRiYzNlNy4uMWI2YmI3N2VjYTdlNmVjMGYxZjYxZTg3MjEyYzRjNDVmNjk2YjY2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tE
T01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL21hYy9XS0RPTVJhbmdlLm1tCkBAIC0xMzQsOSArMTM0LDggQEAgLSAoTlNBcnJheSAqKXRl
eHRSZWN0cwogCiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJvdW5kYXJ5
QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246KFdLRE9NUmFu
Z2VEaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBuZXdS
YW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5
KGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/ICBfaW1wbC0+ZW5kUG9z
aXRpb24oKSA6IF9pbXBsLT5zdGFydFBvc2l0aW9uKCksIGNoYXJhY3RlcnMsIGRpcmVjdGlvbiA9
PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlv
bjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotCi0g
ICAgcmV0dXJuIFtbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6bmV3UmFuZ2UuZ2V0
KCldIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIG5ld1JhbmdlID0gcmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VE
aXJlY3Rpb25Gb3J3YXJkID8gIF9pbXBsLT5lbmRQb3NpdGlvbigpIDogX2ltcGwtPnN0YXJ0UG9z
aXRpb24oKSwgY2hhcmFjdGVycywgZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VEaXJlY3Rpb25Gb3J3
YXJkID8gV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIDogV2ViQ29yZTo6U2Vs
ZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CisgICAgcmV0dXJuIFtbW1dLRE9NUmFuZ2UgYWxs
b2NdIF9pbml0V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKV0gYXV0b3Jl
bGVhc2VdOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KaW5kZXgg
NDc3ZmY5NDVhNmFiNGFjYTllNzMzMTI1NWIwNDBkZDVmYWQ2ZThlMC4uYzc3NjI1MmViZDRhZTg4
ODQ1YmU4YzY3NzhiNmVmNzMwZGZmMzE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxl
ci5tbQpAQCAtNTU5LDIxICs1NTksMjEgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihp
ZCA8V0tXZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktp
dDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIHRleHQsIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvUmVw
bGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgZmluYWwKKyAgICAgICAg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5n
JiB0ZXh0LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBs
YWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBmaW5hbAogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdhdGVNZXRob2RzLnNob3VsZEluc2VydFRleHQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIHJldHVybiBbbV9jb250
cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBzaG91bGRJbnNlcnRUZXh0OlN0cmluZyh0ZXh0
KSByZXBsYWNpbmdSYW5nZTp3cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OmdldE9yQ3JlYXRlKHJhbmdlVG9SZXBsYWNlKSkgZ2l2ZW5BY3Rpb246dG9XSyhhY3Rpb24p
XTsKKyAgICAgICAgICAgIHJldHVybiBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdl
dCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxl
ciBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nUmFuZ2U6d3JhcHBlcigqV2ViS2l0Ojpj
cmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxhY2UpKSBnaXZlbkFjdGlvbjp0b1dLKGFjdGlvbildOwog
ICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktp
dDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0
b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
IGZpbmFsCisgICAgICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6Oldl
YlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwg
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpF
QWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgYXV0byBh
cGlGcm9tUmFuZ2UgPSBmcm9tUmFuZ2UgPyBhZG9wdE5TKFtbV0tET01SYW5nZSBhbGxvY10gX2lu
aXRXaXRoSW1wbDpmcm9tUmFuZ2VdKSA6IG5pbDsKLSAgICAgICAgICAgIGF1dG8gYXBpVG9SYW5n
ZSA9IHRvUmFuZ2UgPyBhZG9wdE5TKFtbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDp0
b1JhbmdlXSkgOiBuaWw7CisgICAgICAgICAgICBhdXRvIGFwaUZyb21SYW5nZSA9IGFkb3B0TlMo
W1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxpdmVSYW5nZShmcm9tUmFu
Z2UpLmdldCgpXSk7CisgICAgICAgICAgICBhdXRvIGFwaVRvUmFuZ2UgPSBhZG9wdE5TKFtbV0tE
T01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpjcmVhdGVMaXZlUmFuZ2UodG9SYW5nZSkuZ2V0
KCldKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAgICAgVUlUZXh0U3RvcmFn
ZURpcmVjdGlvbiBhcGlBZmZpbml0eSA9IGFmZmluaXR5ID09IFdlYkNvcmU6OlVQU1RSRUFNID8g
VUlUZXh0U3RvcmFnZURpcmVjdGlvbkJhY2t3YXJkIDogVUlUZXh0U3RvcmFnZURpcmVjdGlvbkZv
cndhcmQ7CiAjZWxzZQpAQCAtNTgzLDcgKzU4Myw3IEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxl
Z2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVn
CiAgICAgICAgICAgICByZXR1cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQo
KSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIg
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZTphcGlGcm9tUmFuZ2UuZ2V0KCkgdG9SYW5nZTphcGlU
b1JhbmdlLmdldCgpIGFmZmluaXR5OmFwaUFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOnN0aWxsU2Vs
ZWN0aW5nXTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZGlkQ2hhbmdlKFdlYktpdDo6V2Vi
UGFnZSYsIFN0cmluZ0ltcGwqKSBmaW5hbAorICAgICAgICB2b2lkIGRpZENoYW5nZShXZWJLaXQ6
OldlYlBhZ2UmLCBjb25zdCBTdHJpbmcmKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fZGVsZWdhdGVNZXRob2RzLmRpZENoYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC01OTEsMjAgKzU5MSwyMCBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxX
S1dlYlByb2Nlc3NQbHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAg
ICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlckRpZENoYW5nZUJ5RWRpdGluZzptX2NvbnRyb2xsZXJd
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0
OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKSBmaW5hbAorICAgICAgICB2b2lkIHdp
bGxXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fZGVsZWdhdGVNZXRob2RzLndpbGxXcml0ZVRvUGFzdGVib2FyZCkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdh
dGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250
cm9sbGVyIHdpbGxXcml0ZVJhbmdlVG9QYXN0ZWJvYXJkOndyYXBwZXIoKldlYktpdDo6SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpLmdldCgpKV07CisgICAgICAg
ICAgICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1
Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsV3JpdGVSYW5nZVRv
UGFzdGVib2FyZDp3cmFwcGVyKFdlYktpdDo6Y3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSldOwog
ICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktp
dDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVi
b2FyZERhdGEpIGZpbmFsCisgICAgICAgIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShX
ZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJh
bmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWwKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdl
KQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYXV0byBkYXRhQnlUeXBl
ID0gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgcGFzdGVib2FyZERhdGFGb3JS
YW5nZTp3cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3Jl
YXRlKHJhbmdlKS5nZXQoKSldOworICAgICAgICAgICAgYXV0byBkYXRhQnlUeXBlID0gW21fY29u
dHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgcGFzdGVib2FyZERhdGFGb3JSYW5nZTp3cmFw
cGVyKFdlYktpdDo6Y3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSldOwogICAgICAgICAgICAgZm9y
IChOU1N0cmluZyAqdHlwZSBpbiBkYXRhQnlUeXBlKSB7CiAgICAgICAgICAgICAgICAgcGFzdGVi
b2FyZFR5cGVzLmFwcGVuZCh0eXBlKTsKICAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5h
cHBlbmQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YUJ5VHlwZVt0eXBlXSkpOwpA
QCAtNjE5LDEyICs2MTksMTIgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8V0tX
ZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAgICAg
IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXJEaWRXcml0ZVRvUGFzdGVib2FyZDptX2NvbnRyb2xsZXJd
OwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0OjpX
ZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFdlYkNvcmU6OlJh
bmdlJiByYW5nZSwgYm9vbCBpc01vdmUpIGZpbmFsCisgICAgICAgIGJvb2wgcGVyZm9ybVR3b1N0
ZXBEcm9wKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmIGZyYWdt
ZW50LCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgaXNNb3ZlKSBmaW5h
bAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdhdGVNZXRob2RzLnBlcmZvcm1U
d29TdGVwRHJvcCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IGF1dG8gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6Omdl
dE9yQ3JlYXRlKCZyYW5nZSk7CisgICAgICAgICAgICBhdXRvIHJhbmdlSGFuZGxlID0gV2ViS2l0
OjpjcmVhdGVIYW5kbGUocmFuZ2UpOwogICAgICAgICAgICAgYXV0byBub2RlSGFuZGxlID0gV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKCZmcmFnbWVudCk7CiAg
ICAgICAgICAgICByZXR1cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBf
d2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgcGVy
Zm9ybVR3b1N0ZXBEcm9wOndyYXBwZXIoKm5vZGVIYW5kbGUpIGF0RGVzdGluYXRpb246d3JhcHBl
cigqcmFuZ2VIYW5kbGUpIGlzTW92ZTppc01vdmVdOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCAyMjBlZmVkNThlZDE1Nzc5
ZTc1YjljNDhjMTcwNzE3ZmZlMmRmMGRmLi5hOTFmN2Y3MDc4MTc4ZGZiZTQzYjU4NDZiYzAwYzQ0
ZWJkOTZkNzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLXR5cGVkZWYgSGFzaE1hcDxSYW5nZSosIEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGUqPiBET01SYW5nZUhhbmRsZUNhY2hlOwordXNpbmcgRE9NUmFuZ2VIYW5kbGVDYWNo
ZSA9IEhhc2hNYXA8UmFuZ2UqLCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKj47CiAKIHN0YXRp
YyBET01SYW5nZUhhbmRsZUNhY2hlJiBkb21SYW5nZUhhbmRsZUNhY2hlKCkKIHsKQEAgLTY0LDI5
ICs2NCwyMSBAQCBzdGF0aWMgRE9NUmFuZ2VIYW5kbGVDYWNoZSYgZG9tUmFuZ2VIYW5kbGVDYWNo
ZSgpCiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpnZXRPckNyZWF0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
b2JqZWN0KQogewotICAgIFJhbmdlKiByYW5nZSA9IEpTUmFuZ2U6OnRvV3JhcHBlZCh0b0pTKGNv
bnRleHQpLT52bSgpLCB0b0pTKG9iamVjdCkpOwotICAgIHJldHVybiBnZXRPckNyZWF0ZShyYW5n
ZSk7CisgICAgcmV0dXJuIGdldE9yQ3JlYXRlKEpTUmFuZ2U6OnRvV3JhcHBlZCh0b0pTKGNvbnRl
eHQpLT52bSgpLCB0b0pTKG9iamVjdCkpKTsKIH0KIAogUmVmUHRyPEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJhbmdlKiBy
YW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IERPTVJhbmdlSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21SYW5nZUhhbmRsZUNh
Y2hlKCkuYWRkKHJhbmdlLCBudWxscHRyKTsKKyAgICBhdXRvIHJlc3VsdCA9IGRvbVJhbmdlSGFu
ZGxlQ2FjaGUoKS5hZGQocmFuZ2UsIG51bGxwdHIpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCiAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgYXV0byBy
YW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZSgqcmFuZ2UpOwor
ICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBhZG9wdFJlZigqbmV3IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUoKnJhbmdlKSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJhbmdlSGFuZGxl
LnB0cigpOwogICAgIHJldHVybiByYW5nZUhhbmRsZTsKIH0KIAotUmVmPEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZShSYW5nZSYgcmFu
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZShyYW5nZSkpOwotfQotCiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlKFJhbmdlJiByYW5nZSkKICAgICA6IG1fcmFuZ2UocmFuZ2UpCiB7CkBAIC0x
NzgsNCArMTcwLDkgQEAgU3RyaW5nIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnRleHQoKSBj
b25zdAogICAgIHJldHVybiBtX3JhbmdlLT50ZXh0KCk7CiB9CiAKK1JlZlB0cjxJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+JiByYW5nZSkKK3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuaAppbmRleCBmODBlMzNhYmU4MDY1MWQ5NzkxOGI4ZGJmYTE0OWU0NjFmNTZiYzg1Li41ZThi
ZWVkYTEwMGQyNWYwOTFlN2UwYzFmNzZhNGYwY2IxNGMyNDk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZV9oCi0jZGVmaW5lIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGVfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJJbWFnZU9wdGlvbnMu
aCIKQEAgLTM1LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7
CiBjbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIFdlYktp
dCB7CkBAIC01OSwxMiArNTksMTEgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OlJhbmdlJiBjb3Jl
UmFuZ2UoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU+IGNyZWF0ZShXZWJDb3JlOjpSYW5nZSYpOwogICAgIEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUoV2ViQ29yZTo6UmFuZ2UmKTsKIAogICAgIFJlZjxXZWJDb3JlOjpSYW5nZT4g
bV9yYW5nZTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKTsKIAotI2VuZGlmIC8vIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGVfaAorfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQuY3BwCmluZGV4IGNlMDI3YjVhN2JlNjgyN2E3OGU3Yjc3MjViZGJiMzI2NGE2MjUy
MGEuLmUzNDBhZjFjYmMzMDI5ZTU3YWJkYjIyZGM0ZjlhOWJkYzI1ZjA1MTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCkBAIC0zOCwxMjMgKzM4
LDExMSBAQAogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3R5
bGVQcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlPiBjcmVhdGVIYW5kbGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKK3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGVD
U1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlOjpnZXRPckNyZWF0ZSgmc3R5bGUubXV0YWJsZUNvcHko
KS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKTsKK30KKwogSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQoY29uc3QgV0tCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50QmFzZSYgY2xpZW50KQogewogICAgIGluaXRpYWxpemUoJmNsaWVu
dCk7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdp
bkVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZEJlZ2luRWRp
dGluZykgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VI
YW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0g
ICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0
b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAg
fQorICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcpCisgICAgICAgIHJldHVybiBt
X2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5k
bGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEVu
ZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5n
KSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRs
ZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAg
ICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShy
YW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAg
IGlmIChtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5nKQorICAgICAgICByZXR1cm4gbV9jbGllbnQu
c2hvdWxkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSku
Z2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShX
ZWJQYWdlJiBwYWdlLCBOb2RlKiBub2RlLCBSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
c2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlJiBwYWdlLCBOb2RlJiBub2RlLCBjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9u
KQogewogICAgIGlmIChtX2NsaWVudC5zaG91bGRJbnNlcnROb2RlKSB7CiAgICAgICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG5vZGUpOwotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZT4gcmFuZ2VUb1JlcGxhY2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSk7Ci0gICAgICAgIHJldHVybiBtX2Ns
aWVudC5zaG91bGRJbnNlcnROb2RlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQo
KSksIHRvQVBJKHJhbmdlVG9SZXBsYWNlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZElu
c2VydE5vZGUodG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkoY3Jl
YXRlSGFuZGxlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSksIHRvQVBJKGFjdGlvbiksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChXZWJQYWdlJiBw
YWdlLCBTdHJpbmdJbXBsKiB0ZXh0LCBSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2Vy
dEFjdGlvbiBhY3Rpb24pCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hv
dWxkSW5zZXJ0VGV4dChXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBh
Y3Rpb24pCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZEluc2VydFRleHQpIHsKLSAgICAgICAg
UmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlVG9SZXBsYWNlSGFuZGxlID0g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2VUb1JlcGxhY2UpOwot
ICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4dCh0b0FQSSgmcGFnZSksIHRv
QVBJKHRleHQpLCB0b0FQSShyYW5nZVRvUmVwbGFjZUhhbmRsZS5nZXQoKSksIHRvQVBJKGFjdGlv
biksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAgIGlmIChtX2NsaWVudC5z
aG91bGRJbnNlcnRUZXh0KQorICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4
dCh0b0FQSSgmcGFnZSksIHRvQVBJKHRleHQuaW1wbCgpKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJh
bmdlVG9SZXBsYWNlKS5nZXQoKSksIHRvQVBJKGFjdGlvbiksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2Up
Citib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2Uo
V2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UpIHsKLSAgICAgICAgUmVm
UHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGll
bnQuc2hvdWxkRGVsZXRlUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQo
KSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAgIGlmIChtX2NsaWVudC5z
aG91bGREZWxldGVSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZERlbGV0ZVJh
bmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBh
Z2UmIHBhZ2UsIFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQYWdlJiBwYWdlLCBjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7
Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpIHsKLSAgICAgICAg
UmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IGZyb21SYW5nZUhhbmRsZSA9IEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKGZyb21SYW5nZSk7Ci0gICAgICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiB0b1JhbmdlSGFuZGxlID0gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUodG9SYW5nZSk7Ci0gICAgICAgIHJldHVybiBt
X2NsaWVudC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoZnJv
bVJhbmdlSGFuZGxlLmdldCgpKSwgdG9BUEkodG9SYW5nZUhhbmRsZS5nZXQoKSksIHRvQVBJKGFm
ZmluaXR5KSwgc3RpbGxTZWxlY3RpbmcsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAg
fQorICAgIGlmIChtX2NsaWVudC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKQorICAgICAgICBy
ZXR1cm4gbV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSh0b0FQSSgmcGFnZSksIHRv
QVBJKGNyZWF0ZUhhbmRsZShmcm9tUmFuZ2UpLmdldCgpKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHRv
UmFuZ2UpLmdldCgpKSwgdG9BUEkoYWZmaW5pdHkpLCBzdGlsbFNlbGVjdGluZywgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYgcGFnZSwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUpIHsKLSAgICAgICAgUmVm
UHRyPEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZT4gc3R5bGVIYW5kbGUg
PSBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGU6OmdldE9yQ3JlYXRlKHN0
eWxlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFu
ZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAg
ICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQXBwbHlTdHlsZSh0b0FQSSgmcGFnZSksIHRvQVBJ
KHN0eWxlSGFuZGxlLmdldCgpKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkQXBwbHlTdHls
ZSkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUodG9BUEkoJnBhZ2Up
LCB0b0FQSShjcmVhdGVIYW5kbGUoc3R5bGUpLmdldCgpKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJh
bmdlKS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRp
bmcoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRpbmcoV2ViUGFnZSYgcGFn
ZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVudC5k
aWRCZWdpbkVkaXRpbmcpCi0gICAgICAgIG1fY2xpZW50LmRpZEJlZ2luRWRpdGluZyh0b0FQSSgm
cGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OworICAgICAgICBtX2NsaWVudC5kaWRCZWdpbkVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShu
b3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAK
LXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKFdlYlBh
Z2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBT
dHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKG1fY2xpZW50LmRpZEVuZEVkaXRp
bmcpCi0gICAgICAgIG1fY2xpZW50LmRpZEVuZEVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShu
b3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9j
bGllbnQuZGlkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUu
aW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZENoYW5nZShXZWJQYWdlJiBwYWdlLCBTdHJpbmdJbXBs
KiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OmRpZENoYW5nZShXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUp
CiB7CiAgICAgaWYgKG1fY2xpZW50LmRpZENoYW5nZSkKLSAgICAgICAgbV9jbGllbnQuZGlkQ2hh
bmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRpZENoYW5nZSh0b0FQSSgmcGFnZSksIHRv
QVBJKG5vdGlmaWNhdGlvbk5hbWUuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
IH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZENoYW5nZVNlbGVj
dGlvbihXZWJQYWdlJiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdl
JiBwYWdlLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKG1fY2xp
ZW50LmRpZENoYW5nZVNlbGVjdGlvbikKLSAgICAgICAgbV9jbGllbnQuZGlkQ2hhbmdlU2VsZWN0
aW9uKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRpZENoYW5nZVNlbGVjdGlvbih0b0FQSSgm
cGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OndpbGxX
cml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UpCit2b2lkIEluamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6d2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2Um
IHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1f
Y2xpZW50LndpbGxXcml0ZVRvUGFzdGVib2FyZCkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
OjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIG1fY2xpZW50LndpbGxXcml0ZVRvUGFzdGVi
b2FyZCh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LndpbGxXcml0ZVRvUGFzdGVi
b2FyZCkKKyAgICAgICAgbV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKHRvQVBJKCZwYWdl
KSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0
ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSwgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFz
dGVib2FyZERhdGEpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFz
dGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiBwYWdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVm
UHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsKICAgICBpZiAobV9jbGllbnQu
Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpn
ZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIFdLQXJyYXlSZWYgdHlwZXMgPSAwOwotICAgICAg
ICBXS0FycmF5UmVmIGRhdGEgPSAwOwotICAgICAgICBtX2NsaWVudC5nZXRQYXN0ZWJvYXJkRGF0
YUZvclJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCAmdHlwZXMs
ICZkYXRhLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgICAgICBSZWZQdHI8QVBJOjpB
cnJheT4gdHlwZXNBcnJheSA9IGFkb3B0UmVmKHRvSW1wbCh0eXBlcykpOwotICAgICAgICBSZWZQ
dHI8QVBJOjpBcnJheT4gZGF0YUFycmF5ID0gYWRvcHRSZWYodG9JbXBsKGRhdGEpKTsKKyAgICAg
ICAgV0tBcnJheVJlZiB0eXBlcyA9IG51bGxwdHI7CisgICAgICAgIFdLQXJyYXlSZWYgZGF0YSA9
IG51bGxwdHI7CisgICAgICAgIG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UodG9B
UEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgJnR5cGVzLCAmZGF0
YSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgYXV0byB0eXBlc0FycmF5ID0g
YWRvcHRSZWYodG9JbXBsKHR5cGVzKSk7CisgICAgICAgIGF1dG8gZGF0YUFycmF5ID0gYWRvcHRS
ZWYodG9JbXBsKGRhdGEpKTsKIAogICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuY2xlYXIoKTsKICAg
ICAgICAgcGFzdGVib2FyZERhdGEuY2xlYXIoKTsKQEAgLTE3NCwxNCArMTYyLDEzIEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdl
KFdlYlBhZ2UmIHBhZ2UsIFJhCiAgICAgfQogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmIHBhZ2UsIERvY3VtZW50RnJh
Z21lbnQmIGZyYWdtZW50LCBSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQorYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChXZWJQYWdl
JiBwYWdlLCBEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxlUmFuZ2UmIGRl
c3RpbmF0aW9uLCBib29sIGlzTW92ZSkKIHsKICAgICBpZiAoIW1fY2xpZW50LnBlcmZvcm1Ud29T
dGVwRHJvcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byByYW5nZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKCZkZXN0aW5hdGlvbik7CiAg
ICAgYXV0byBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0
ZSgmZnJhZ21lbnQpOwotICAgIHJldHVybiBtX2NsaWVudC5wZXJmb3JtVHdvU3RlcERyb3AodG9B
UEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0
KCkpLCBpc01vdmUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIG1fY2xp
ZW50LnBlcmZvcm1Ud29TdGVwRHJvcCh0b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0
KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24pLmdldCgpKSwgaXNNb3ZlLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6ZGlkV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaAppbmRleCA2ODk5NDFhMThlOGQ5ZTk0
Y2E0MjZmOTQyYjFlYjhhMGIzY2Y4NGJiLi5mM2EwZTc0NzY3MjBmYjFiNWQ5Y2IxNzcxN2VkZDcz
OTk0OTdkYzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dC5oCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU1N0eWxl
RGVjbGFyYXRpb247CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZTsKLWNsYXNz
IFJhbmdlOworc3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAg
LTUyLDIxICs1MiwyMSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50KGNvbnN0IFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudEJhc2UmKTsKIAogcHJp
dmF0ZToKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlJiwgV2ViQ29yZTo6UmFu
Z2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViUGFnZSYsIFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmLCBXZWJD
b3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0
b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJQYWdl
JiwgU3RyaW5nSW1wbCosIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6
RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdl
YlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZShXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6
UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykg
ZmluYWw7Ci0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmLCBXZWJDb3JlOjpDU1NT
dHlsZURlY2xhcmF0aW9uKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICB2b2lkIGRpZEJl
Z2luRWRpdGluZyhXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7
Ci0gICAgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRp
b25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIGRpZENoYW5nZShXZWJQYWdlJiwgU3RyaW5nSW1wbCog
bm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2Vi
UGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZvaWQgd2ls
bFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAg
IHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2Uq
LCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7CisgICAgYm9vbCBzaG91bGRC
ZWdpbkVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7
CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1w
bGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlJiwgV2Vi
Q29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2VU
b1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOworICAgIGJvb2wgc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6
OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYp
IGZpbmFsOworICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcm
IG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kRWRpdGluZyhXZWJQYWdl
JiwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKKyAgICB2b2lkIGRpZENo
YW5nZShXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKKyAg
ICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiBub3RpZmlj
YXRpb25OYW1lKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdl
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAgdm9p
ZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7
CiAgICAgdm9pZCBkaWRXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJikgZmluYWw7Ci0gICAgYm9v
bCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQm
LCBXZWJDb3JlOjpSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5hbDsKKyAgICBi
b29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVu
dCYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUp
IGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CmluZGV4IGRkOWMzNTI2MDVmMDhmMzk0MGQ5MDBkOGYwMjY1MjQ3ZTA0YmEzNzkuLjE3NWFjN2Q3
MjY2NjI0YTU4YmE1ODU3YTQzMzBiODg1MzNjM2IyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVRleHRDaGVja2luZ1Jl
cXVlc3RJRCgpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCByYW5nZSk7CiB9
CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAt
MTE3LDMyICsxMTcsMzIgQEAgaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1l
bnRUYWcoKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLnB0cigpKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygqbV9wYWdlLCByYW5nZSk7CiB9CiAKIGJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7Cisg
ICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRFbmRF
ZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICByZXR1cm4gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFn
ZSwgJm5vZGUsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7
CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJ
bnNlcnROb2RlKCptX3BhZ2UsIG5vZGUsIHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwogfQogCiBi
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2Vy
dEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCBjcmVhdGVM
aXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24pOworICAgIHJldHVybiBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4dCgqbV9wYWdl
LCB0ZXh0LCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmlu
aXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAgIHJldHVybiBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgq
bV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UoZnJvbVJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdl
KHRvUmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOworICAgIHJldHVybiBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZSgqbV9wYWdlLCBmcm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGlu
Zyk7CiB9CiAgICAgCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShjb25z
dCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCAmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5zdXJlQ1NT
U3R5bGVEZWNsYXJhdGlvbigpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKKyAgICBy
ZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5
bGUoKm1fcGFnZSwgc3R5bGUsIHJhbmdlKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VM
RU1FTlQpCkBAIC0yNjcsMTcgKzI2NywxNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLndpbGxXcml0
ZVRvUGFzdGVib2FyZCgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKKyAg
ICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJv
YXJkKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVu
dFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4m
IHBhc3RlYm9hcmREYXRhKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkuZ2V0KCksIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOworICAgIG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdl
KCptX3BhZ2UsIHJhbmdlLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKIH0KIAog
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50
JiBmcmFnbWVudCwgY29uc3QgU2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkK
IHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnBlcmZv
cm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKGRlc3RpbmF0
aW9uKSwgaXNNb3ZlKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNs
aWVudCgpLnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVudCwgZGVzdGluYXRpb24s
IGlzTW92ZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFVu
ZG9TdGVwJiBzdGVwKQpAQCAtNTM2LDExICs1MzYsOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3Jh
bQogc3RhdGljIHVpbnQ2NF90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICAgICBhdXRvIHNlbGVj
dGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7
Ci0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkg
fHwgIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY2hhcmFj
dGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOwor
ICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHN0YXJ0T2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBjaGFyYWN0ZXJD
b3VudCgqcmFuZ2UpIDogMDsKIH0KIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hl
Y2tpbmdDb250cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggOTVmMTYzYzFlMTFi
MDFkMDcyMDNlNDZhYjVjY2FiMDBjOWUyYTcwMi4uNjZlM2Q5OTU3ZWRiOWFmMzM2NDk4MzE0NGU3
NGExMDNjMjhlZGUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5t
bQpAQCAtMTc2LDE1ICsxNzYsMTMgQEAgdm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6
OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2VsZWN0aW9uKGNvbnN0IFN0cmkKIAogV2ViQ29y
ZTo6QXR0cmlidXRlZFN0cmluZyBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OmFubm90YXRl
ZFN1YnN0cmluZ0JldHdlZW5Qb3NpdGlvbnMoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9u
JiBzdGFydCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgYXV0
byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOwotICAgIGF1dG8gZW5k
Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOwotICAgIGlmICghc3RhcnRCb3VuZGFy
eSB8fCAhZW5kQm91bmRhcnkpCisgICAgYXV0byBlbnRpcmVSYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShzdGFydCwgZW5kKTsKKyAgICBpZiAoIWVudGlyZVJhbmdlKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGF1dG8gZW50aXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpzdGFydEJvdW5kYXJ5LCAq
ZW5kQm91bmRhcnkgfTsKIAogICAgIGF1dG8gc3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKIAotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0
KGVudGlyZVJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KCplbnRpcmVSYW5nZSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsK
ICAgICAgICAgaWYgKCFpdC50ZXh0KCkubGVuZ3RoKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgW3N0cmluZyBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOmFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOml0LnRleHQoKS5jcmVhdGVOU1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCldKS5nZXQoKV07CkBAIC0xOTIsNyArMTkwLDcgQEAgV2Vi
Q29yZTo6QXR0cmlidXRlZFN0cmluZyBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OmFubm90
YXRlZFN1YnN0cmluZ0JldHdlZW4KICAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiByYW5nZS5z
dGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKSkgewogICAgICAgICAgICAgYXV0byYgZGF0YSA9
IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtl
ci0+ZGF0YSgpKTsKICAgICAgICAgICAgIGF1dG8gc3VicmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UocmFuZ2UsIHsgbWFya2VyLT5zdGFydE9mZnNldCgpLCBtYXJrZXItPmVuZE9mZnNldCgp
IC0gbWFya2VyLT5zdGFydE9mZnNldCgpIH0pOwotICAgICAgICAgICAgW3N0cmluZyBhZGRBdHRy
aWJ1dGU6ZGF0YS5rZXkgdmFsdWU6ZGF0YS52YWx1ZSByYW5nZTpjaGFyYWN0ZXJSYW5nZShlbnRp
cmVSYW5nZSwgc3VicmFuZ2UpXTsKKyAgICAgICAgICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlOmRh
dGEua2V5IHZhbHVlOmRhdGEudmFsdWUgcmFuZ2U6Y2hhcmFjdGVyUmFuZ2UoKmVudGlyZVJhbmdl
LCBzdWJyYW5nZSldOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggNWY1ZTg2NDFhZGVj
ZDI2Y2I5ZWZkNzk4YTM5MDBmNzczZDk0ZTczYi4uNTMxODU1MzhiOWUwNTE5MDNhOWQ2ZWRlNzVi
NGUwZWM4MzUyNjkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvUGF0aFV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKQEAgLTExMSwxMSArMTEyLDExIEBAIHVpbnQzMl90IEZpbmRDb250cm9sbGVy
OjpyZXBsYWNlTWF0Y2hlcyhjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBtYXRjaEluZGljZXMsIGNv
CiAgICAgLy8gcGVyaW9kaWNhbGx5IHVwZGF0ZSBhbiBOU1Byb2dyZXNzIGluIHRoZSBVSSBwcm9j
ZXNzIHdoZW4gYSBiYXRjaCBvZiBmaW5kLWluLXBhZ2UgbWF0Y2hlcyBhcmUgcmVwbGFjZWQuCiAg
ICAgY29uc3QgdWludDMyX3QgbWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFjZSA9IDEwMDA7
CiAKLSAgICBWZWN0b3I8UmVmPFJhbmdlPj4gcmFuZ2VzVG9SZXBsYWNlOworICAgIFZlY3RvcjxT
aW1wbGVSYW5nZT4gcmFuZ2VzVG9SZXBsYWNlOwogICAgIHJhbmdlc1RvUmVwbGFjZS5yZXNlcnZl
Q2FwYWNpdHkoc3RkOjptaW48dWludDMyX3Q+KG1heGltdW1OdW1iZXJPZk1hdGNoZXNUb1JlcGxh
Y2UsIG1hdGNoSW5kaWNlcy5zaXplKCkpKTsKICAgICBmb3IgKGF1dG8gaW5kZXggOiBtYXRjaElu
ZGljZXMpIHsKICAgICAgICAgaWYgKGluZGV4IDwgbV9maW5kTWF0Y2hlcy5zaXplKCkpCi0gICAg
ICAgICAgICByYW5nZXNUb1JlcGxhY2UudW5jaGVja2VkQXBwZW5kKCptX2ZpbmRNYXRjaGVzW2lu
ZGV4XSk7CisgICAgICAgICAgICByYW5nZXNUb1JlcGxhY2UudW5jaGVja2VkQXBwZW5kKG1fZmlu
ZE1hdGNoZXNbaW5kZXhdKTsKICAgICAgICAgaWYgKHJhbmdlc1RvUmVwbGFjZS5zaXplKCkgPj0g
bWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFjZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTI0MywxMiArMjQ0LDEwIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW9ucz4gb3B0CiAgICAgYm9v
bCBmb3VuZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgaWYgKCFwbHVn
aW5WaWV3KSB7CiAgICAgICAgIGlmIChGcmFtZSogc2VsZWN0ZWRGcmFtZSA9IGZyYW1lV2l0aFNl
bGVjdGlvbihtX3dlYlBhZ2UtPmNvcmVQYWdlKCkpKSB7Ci0gICAgICAgICAgICBGcmFtZVNlbGVj
dGlvbiYgZnMgPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChm
cy5zZWxlY3Rpb25Cb3VuZHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtX2ZpbmRN
YXRjaGVzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4Rm9yU2VsZWN0aW9uOwot
ICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZ01hdGNoaW5n
UmFuZ2VzKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMs
IGluZGV4Rm9yU2VsZWN0aW9uKTsKLSAgICAgICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJ
bmRleCA9IGluZGV4Rm9yU2VsZWN0aW9uOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMo
c3RyaW5nLCBjb3JlT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgICAgICAgICAgICAgbV9m
aW5kTWF0Y2hlcyA9IFdURk1vdmUocmVzdWx0LnJhbmdlcyk7CisgICAgICAgICAgICAgICAgbV9m
b3VuZFN0cmluZ01hdGNoSW5kZXggPSByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb247CiAgICAgICAg
ICAgICAgICAgZm91bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTI4NCwxNiArMjgzLDE0IEBAIHZvaWQgRmluZENvbnRyb2xs
ZXI6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW9u
cz4gb3B0CiAKIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8RmluZE9wdGlvbnM+IG9wdGlvbnMsIHVuc2lnbmVkIG1h
eE1hdGNoQ291bnQpCiB7Ci0gICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOwotICAgIGludCBpbmRl
eEZvclNlbGVjdGlvbjsKLQotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZ01h
dGNoaW5nUmFuZ2VzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCwgbV9maW5k
TWF0Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOworICAgIGF1dG8gcmVzdWx0ID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhN
YXRjaENvdW50KTsKKyAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShyZXN1bHQucmFuZ2VzKTsK
IAogICAgIFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+IG1hdGNoUmVjdHM7CiAgICAgZm9yIChhdXRv
JiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCi0gICAgICAgIG1hdGNoUmVjdHMuYXBwZW5kKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKSk7CisgICAgICAgIG1hdGNoUmVjdHMu
YXBwZW5kKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKTsKIAotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nTWF0Y2hl
cyhzdHJpbmcsIG1hdGNoUmVjdHMsIGluZGV4Rm9yU2VsZWN0aW9uKSk7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmlu
ZywgbWF0Y2hSZWN0cywgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uKSk7CiAKICAgICBpZiAoIW9w
dGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dPdmVybGF5KSAmJiAhb3B0aW9ucy5jb250
YWlucyhGaW5kT3B0aW9uczo6U2hvd0ZpbmRJbmRpY2F0b3IpKQogICAgICAgICByZXR1cm47CkBA
IC0zMDgsMTIgKzMwNSwxMiBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpnZXRJbWFnZUZvckZpbmRN
YXRjaCh1aW50MzJfdCBtYXRjaEluZGV4KQogewogICAgIGlmIChtYXRjaEluZGV4ID49IG1fZmlu
ZE1hdGNoZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9m
aW5kTWF0Y2hlc1ttYXRjaEluZGV4XS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1l
KCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5j
b250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oKm1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pKTsKKyAgICBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pOwog
CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc2VsZWN0aW9uU25hcHNob3QgPSBXZWJGcmFt
ZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpLT5jcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpOwogCkBA
IC0zMzksMTAgKzMzNiwxMCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpzZWxlY3RGaW5kTWF0Y2go
dWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRj
aGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1h
dGNoZXNbbWF0Y2hJbmRleF0tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFp
bmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
OwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigq
bV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSkpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24obV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSk7CiB9CiAKIHZvaWQgRmluZENvbnRy
b2xsZXI6OmluZGljYXRlRmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaAppbmRleCAyZmQz
ZmFjMWVjNmMyYzIxMTkyNWNiNWQ3YWRiYzE5MjU3MjdkOWQ5Li5mNmY2ZjlkMjEwNGQzYTc5ZTNm
ZThkOTgxZjE0NDU5NjQyMjQzMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgog
ICAgIC8vIHRoZSBmaW5kIGluZGljYXRvciBpc24ndCBzaG93aW5nLCBidXQgaXQgd2lsbCBuZXZl
ciBiZSBmYWxzZSB3aGVuIGl0IGlzIHNob3dpbmcuCiAgICAgYm9vbCBtX2lzU2hvd2luZ0ZpbmRJ
bmRpY2F0b3IgeyBmYWxzZSB9OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9maW5kSW5kaWNhdG9y
UmVjdDsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlJhbmdlPj4gbV9maW5kTWF0Y2hlczsK
KyAgICBWZWN0b3I8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IG1fZmluZE1hdGNoZXM7CiAgICAgLy8g
SW5kZXggdmFsdWUgaXMgLTEgaWYgbm90IGZvdW5kIG9yIGlmIG51bWJlciBvZiBtYXRjaGVzIGV4
Y2VlZHMgcHJvdmlkZWQgbWF4aW11bS4KICAgICBpbnQgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgg
eyAtMSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IGVkM2I2M2ZkZGUzYTc3YjhmOWViOTgzMTVlNWU4ZDliYjUxYzBkYjcuLjJkYzUwNWNm
ZGIxM2IwMDMyZmRhNTQ5ZTBjOWQ1ZDY3MjcyYjQxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01NDM3LDEzICs1NDM3LDEzIEBAIHZvaWQg
V2ViUGFnZTo6aGFzTWFya2VkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5jKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZy
b21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKSkuZ2V0KCkpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZy
b21SYW5nZShmcmFtZSwgZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwg
Y3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpm
cm9tUmFuZ2UoZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5
bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CkBAIC01NDUyLDggKzU0NTIsOCBAQCB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9p
bnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYQogICAgIGF1dG8g
cmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0
QXRQb2ludChwb2ludCwgaGl0VHlwZSk7CiAgICAgYXV0byYgZnJhbWUgPSByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkgPyAqcmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2UgPSBmcmFt
ZS5yYW5nZUZvclBvaW50KHJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOwot
ICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIHJh
bmdlLmdldCgpKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2Fs
bGJhY2soc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVkaXRpbmdSYW5nZS5sb2NhdGlvbiksIGNhbGxi
YWNrSUQpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdl
KGZyYW1lLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soZWRpdGluZ1JhbmdlLmxvY2F0aW9uLCBjYWxsYmFj
a0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3lu
Yyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lE
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCBjYTQzZDg2MTNhYjYzZTkyODJhZWEyZDQzN2Y3MTY1YWNlYTE3ZjU0Li5hMDUz
M2VlY2M0MDY0ZGExY2I2YzFjZDBmNjg2OWJjMThlMzhhZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTE0LDYgKzEx
NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Qb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUXVp
cmtzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
ckJsb2NrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckltYWdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlckxheWVyLmg+CkBAIC0xNTAsMjkgKzE1MSwyNCBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogLy8gRklYTUU6IFVuY2xlYXIgaWYgY2FsbGVycyBpbiB0aGlzIGZpbGUgYXJlIGNvcnJl
Y3RseSBjaG9vc2luZyB3aGljaCBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIHVzZS4KIAotc3Rh
dGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
LXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJh
bmdlKTsKLX0KLQogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0
Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBX
ZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKSA6IGVtcHR5U3Ry
aW5nKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBSYW5n
ZSogcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dChTaW1w
bGVSYW5nZSB7ICpyYW5nZSB9KSA6IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHBsYWluVGV4
dEZvckNvbnRleHQobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcg
cGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgU3Ry
aW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNl
KHJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJldHVybiBy
YW5nZSA/IFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UsIFRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgUmFuZ2UqIHJhbmdlKQogewot
ICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3Ry
aW5nKCk7CisgICAgcmV0dXJuIHBsYWluVGV4dEZvckRpc3BsYXkobWFrZVNpbXBsZVJhbmdlKHJh
bmdlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTI4OSw3
ICsyODUsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZy
YW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAgICAgICBwb3N0TGF5b3V0RGF0YS5j
YXJldFJlY3RBdEVuZCA9IHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQ7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB3
cml0aW5nIGRpcmVjdGlvbi4KICAgICAgICAgcG9zdExheW91dERhdGEuaXNSZXBsYWNlQWxsb3dl
ZCA9IHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShz
ZWxlY3Rpb24uc3RhcnQoKSwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNl
bGVjdGlvbiA9IHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVj
dGlvbi5zdGFydCgpKS5nZXQoKSk7CisgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVj
dGlvbiA9IHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlv
bi5zdGFydCgpKSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkK
ICAgICAgICAgICAgIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwg
cG9zdExheW91dERhdGEuY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24sIHBvc3RMYXlvdXREYXRhLmNo
YXJhY3RlckJlZm9yZVNlbGVjdGlvbiwgcG9zdExheW91dERhdGEudHdvQ2hhcmFjdGVyQmVmb3Jl
U2VsZWN0aW9uKTsKICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKQEAgLTU1
Myw4ICs1NDksOCBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGlvbkNvbnRleHQoQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogICAgIGNvbnN0IGludCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5n
dGggPSAzNTA7CiAgICAgCiAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNv
bnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
Ci0gICAgU3RyaW5nIHRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5k
ZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2Vs
ZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkuZ2V0KCkpOwotICAgIFN0cmluZyB0ZXh0QWZ0ZXIg
PSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlv
bkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxl
Y3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCku
Z2V0KCkpOworICAgIFN0cmluZyB0ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5n
ZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5n
dGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKTsKKyAgICBTdHJpbmcgdGV4dEFmdGVy
ID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rp
b25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgc2Vs
ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQp
KTsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uQ29udGV4dENh
bGxiYWNrKHNlbGVjdGVkVGV4dCwgdGV4dEJlZm9yZSwgdGV4dEFmdGVyLCBjYWxsYmFja0lEKSk7
CiB9CkBAIC05ODgsOCArOTg0LDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZUVkaXREcmFn
KCkKICAgICBhdXRvIGZyYW1lID0gbWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpKTsKICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAg
IG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVt
ZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAg
IGF1dG8gY29sbGFwc2VkUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IHNlbGVjdGlvblJhbmdlLT5lbmQs
IHNlbGVjdGlvblJhbmdlLT5lbmQgfTsKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGNvbGxhcHNlZFJhbmdlKS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShTaW1wbGVS
YW5nZSB7IHNlbGVjdGlvblJhbmdlLT5lbmQsIHNlbGVjdGlvblJhbmdlLT5lbmQgfSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOwogICAgICAgICBtX3JhbmdlRm9yRHJvcFNuYXBzaG90ID0gV1RGTW92ZShzZWxlY3Rpb25S
YW5nZSk7CiAgICAgfQogCkBAIC0xMTEzLDE1ICsxMTA4LDE0IEBAIHZvaWQgV2ViUGFnZTo6aGFu
ZGxlU3R5bHVzU2luZ2xlVGFwQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQs
IHVpbnQ2CiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBv
aW50KGhpdFRlc3QubG9jYWxQb2ludCgpLCBudWxscHRyKTsKKyAgICBhdXRvIHBvc2l0aW9uID0g
cmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdC5sb2NhbFBvaW50KCksIG51bGxwdHIp
OwogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0KLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CisgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
KmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7Ci0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKnJhbmdlLCBw
b3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgYXV0byBpbWFnZSA9IGZyYW1lLmVkaXRv
cigpLmluc2VydEVkaXRhYmxlSW1hZ2UoKTsKICAgICBmcmFtZS5kb2N1bWVudCgpLT5zZXRGb2N1
c2VkRWxlbWVudChpbWFnZS5nZXQoKSk7CiB9CkBAIC0xMzcxLDEyICsxMzY1LDExIEBAIHZvaWQg
V2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJl
VHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpH
ZXN0dXJlQ2FsbGJhY2socG9pbnQsIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIHsgfSwgY2Fs
bGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgIE9wdGlvblNldDxTZWxl
Y3Rpb25GbGFncz4gZmxhZ3M7CiAgICAgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSB3a0dlc3R1cmVT
dGF0ZSA9IHN0YXRpY19jYXN0PEdlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSk7
CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxHZXN0dXJlVHlwZT4oZ2VzdHVyZVR5cGUpKSB7Ci0g
ICAgY2FzZSBHZXN0dXJlVHlwZTo6UGhyYXNlQm91bmRhcnk6Ci0gICAgeworICAgIGNhc2UgR2Vz
dHVyZVR5cGU6OlBocmFzZUJvdW5kYXJ5OiB7CiAgICAgICAgIGlmICghZnJhbWUuZWRpdG9yKCku
aGFzQ29tcG9zaXRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBhdXRvIG1hcmtl
ZFJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwpAQCAtMTM4Niw0MCAr
MTM3OSwzNiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50
JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICBmbGFncyA9IGRp
c3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpKSAhPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3Np
dGlvbiwgcG9zaXRpb24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVj
dGlvbkZsYWdzPiB7IH07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZsYWdzID0gUGhyYXNl
Qm91bmRhcnlDaGFuZ2VkOwotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7Ci0gICAgfQorICAgICAgICByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIGNh
c2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdlclRhcDoKLSAgICB7CisgICAgY2FzZSBHZXN0dXJlVHlw
ZTo6T25lRmluZ2VyVGFwOiB7CiAgICAgICAgIGF1dG8gW2FkanVzdGVkUG9zaXRpb24sIHdpdGhp
bldvcmRCb3VuZGFyeV0gPSB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldpdGhvdXRDcm9zc2luZ0xp
bmUocG9zaXRpb24pOwogICAgICAgICBpZiAod2l0aGluV29yZEJvdW5kYXJ5ID09IFdpdGhpbldv
cmRCb3VuZGFyeTo6WWVzKQogICAgICAgICAgICAgZmxhZ3MgPSBXb3JkSXNOZWFyVGFwOwotICAg
ICAgICBpZiAoYWRqdXN0ZWRQb3NpdGlvbi5pc05vdE51bGwoKSkKLSAgICAgICAgICAgIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgYWRqdXN0ZWRQb3NpdGlvbiwgYWRq
dXN0ZWRQb3NpdGlvbik7Ci0gICAgfQorICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShh
ZGp1c3RlZFBvc2l0aW9uKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBHZXN0
dXJlVHlwZTo6TG91cGU6CiAgICAgICAgIGlmIChwb3NpdGlvbi5yb290RWRpdGFibGVFbGVtZW50
KCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHBvc2l0aW9uLCBwb3NpdGlvbik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKKyAgICAgICAgZWxzZSB7CiAjaWYgIVBMQVRGT1JN
KE1BQ0NBVEFMWVNUKQogICAgICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24o
cG9zaXRpb24pOwogI2Vsc2UKICAgICAgICAgICAgIHN3aXRjaCAod2tHZXN0dXJlU3RhdGUpIHsK
LSAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW46IHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGJvdW5kYXJ5ID0gKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsK
LSAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlID0gU2ltcGxlUmFuZ2UgeyBi
b3VuZGFyeSwgYm91bmRhcnkgfTsKKyAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZTo6QmVnYW46CisgICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkNoYW5nZWQ6
CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBzdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3N0
YXJ0aW5nR2VzdHVyZVJhbmdlLT5zdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFy
dCA8IHBvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydCwgcG9zaXRpb24pOworICAgICAgICAgICAgICAg
ICAgICBhdXRvJiBzdGFydCA9IG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UtPnN0YXJ0OworICAgICAg
ICAgICAgICAgICAgICBpZiAoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHN0YXJ0KSA8IHBv
c2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
c3RhcnQsIHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3Np
dGlvbiwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UocG9zaXRpb24sIHN0YXJ0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkVuZGVk
OgpAQCAtMTQzMiw2ICsxNDIxLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShj
b25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogI2VuZGlmCisgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEdlc3R1cmVUeXBlOjpUYXBBbmRBSGFsZjoKQEAgLTE0NDYsMTEg
KzE0MzYsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICBjYXNlIEdlc3R1cmVS
ZWNvZ25pemVyU3RhdGU6OkNoYW5nZWQ6CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFdvcmRS
YW5nZSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJhbmdlID0gY3JlYXRl
TGl2ZVJhbmdlKCptX2N1cnJlbnRXb3JkUmFuZ2UpOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9u
IDwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3Rh
cnQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24g
PiByYW5nZS0+ZW5kUG9zaXRpb24oKSkKLSAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kKHBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICAgICAgcmFuZ2UgPSBtX2N1cnJlbnRX
b3JkUmFuZ2U7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkKKyAgICAgICAgICAgICAgICByYW5nZS0+c3RhcnQgPSAq
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAg
ICBpZiAocG9zaXRpb24gPiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPmVuZCkp
CisgICAgICAgICAgICAgICAgcmFuZ2UtPmVuZCA9ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdl
c3R1cmVSZWNvZ25pemVyU3RhdGU6OkVuZGVkOgogICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25p
emVyU3RhdGU6OkNhbmNlbGxlZDoKQEAgLTE0NjcsNyArMTQ1Nyw3IEBAIHZvaWQgV2ViUGFnZTo6
c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0
dXJlVHlwZSwKICAgICAgICAgICAgIC8vIERvdWJsZS10YXAgYXQgZW5kIG9mIGxpbmUgb25seSBw
bGFjZXMgaW5zZXJ0aW9uIHBvaW50IHRoZXJlLgogICAgICAgICAgICAgLy8gVGhpcyBoZWxwcyB0
byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5kcyBvZiBsaW5lcywKICAgICAgICAg
ICAgIC8vIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCi0gICAgICAgICAgICByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7CisgICAg
ICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsK
ICAgICAgICAgYnJlYWs7CkBAIC0xNDgwLDkgKzE0NzAsOCBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVj
dFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5
cGUsCiAgICAgY2FzZSBHZXN0dXJlVHlwZTo6T25lRmluZ2VyVHJpcGxlVGFwOgogICAgICAgICBp
ZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6TGlu
ZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAgICAg
ICAvLyBUcmlwbGUtdGFwIGF0IGVuZCBvZiBsaW5lIG9ubHkgcGxhY2VzIGluc2VydGlvbiBwb2lu
dCB0aGVyZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZv
ciBwYXN0aW5nIGF0IGVuZHMgb2YgbGluZXMsCi0gICAgICAgICAgICAvLyBwYXJhZ3JhcGhzLCBh
bmQgZG9jdW1lbnRzLgotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5k
b2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgLy8gVGhpcyBoZWxw
cyB0byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5kcyBvZiBsaW5lcywgcGFyYWdy
YXBocywgYW5kIGRvY3VtZW50cy4KKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHBvc2l0aW9uKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3Jh
cGhHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICAgICAgYnJl
YWs7CkBAIC0xNDkxLDEyICsxNDgwLDEyIEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1
cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBw
b3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwg
ZmxhZ3MsIGNhbGxiYWNrSUQpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQ
b2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUsIGNvbnN0IEludFBvaW50JiBw
b2ludEluUm9vdFZpZXdDb29yZGluYXRlcywgYm9vbCBiYXNlSXNTdGFydCkKK3N0YXRpYyBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFt
ZSYgZnJhbWUsIGNvbnN0IEludFBvaW50JiBwb2ludEluUm9vdFZpZXdDb29yZGluYXRlcywgYm9v
bCBiYXNlSXNTdGFydCkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGV4aXN0aW5nU2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNl
bGVjdGlvblN0YXJ0ID0gZXhpc3RpbmdTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CkBAIC0xNTE1
LDcgKzE1MDQsNyBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUZvclBvaW50SW5Sb290Vmll
d0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UAogICAgIH0KICAgICAKICAgICBW
aXNpYmxlUG9zaXRpb24gcmVzdWx0OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogCiAgICAgY29uc3RleHByIE9wdGlvblNldDxIaXRU
ZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGU+IGhpdFR5cGUgeyBIaXRUZXN0UmVxdWVzdDo6UmVhZE9u
bHksIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUsIEhpdFRlc3RSZXF1ZXN0OjpBbGxvd1Zpc2libGVD
aGlsZEZyYW1lQ29udGVudE9ubHkgfTsKICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3QgPSBmcmFt
ZS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludEluRG9jdW1lbnQsIGhp
dFR5cGUpOwpAQCAtMTUyOSwyMyArMTUxOCwyMSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5n
ZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UAog
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uU3RhcnQubmV4dCgpOwogICAgICAgICBlbHNl
IGlmICgmc2VsZWN0aW9uU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPnRyZWVT
Y29wZSgpICE9ICZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkpCiAgICAgICAgICAg
ICByZXN1bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZvckVuZChyZXN1bHQu
ZGVlcEVxdWl2YWxlbnQoKSwgc2VsZWN0aW9uU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWlu
ZXJOb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkKLSAg
ICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc2VsZWN0
aW9uU3RhcnQsIHJlc3VsdCk7CisKKyAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2Vs
ZWN0aW9uU3RhcnQsIHJlc3VsdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMoc2VsZWN0aW9uRW5kLCByZXN1bHQpIDw9IDApCiAgICAgICAgICAgICByZXN1bHQg
PSBzZWxlY3Rpb25FbmQucHJldmlvdXMoKTsKICAgICAgICAgZWxzZSBpZiAoJmhpdFRlc3QudGFy
Z2V0Tm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmc2VsZWN0aW9uRW5kLmRlZXBFcXVpdmFsZW50KCku
YW5jaG9yTm9kZSgpLT50cmVlU2NvcGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IFZpc2libGVT
ZWxlY3Rpb246OmFkanVzdFBvc2l0aW9uRm9yU3RhcnQocmVzdWx0LmRlZXBFcXVpdmFsZW50KCks
IHNlbGVjdGlvbkVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQuZGVlcEVxdWl2YWxlbnQoKSwg
c2VsZWN0aW9uRW5kKTsKKworICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShyZXN1bHQs
IHNlbGVjdGlvbkVuZCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiByYW5nZTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBm
cmFtZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgYm9vbCBiYXNlSXNTdGFydCwg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgYm9vbCBiYXNlSXNTdGFydCwgU2VsZWN0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICAgICBTZWxlY3Rpb25EaXJlY3Rpb24gc2FtZURpcmVjdGlvbiA9
IGJhc2VJc1N0YXJ0ID8gU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIDogU2VsZWN0aW9uRGly
ZWN0aW9uOjpCYWNrd2FyZDsKICAgICBTZWxlY3Rpb25EaXJlY3Rpb24gb3Bwb3NpdGVEaXJlY3Rp
b24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQgOiBTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQ7CkBAIC0xNTU1LDcgKzE1NDIsNyBAQCBzdGF0aWMgUmVmUHRy
PFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25z
dCBWaXNpYmxlUAogCiAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVudCwgVGV4
dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIHNhbWVEaXJlY3Rpb24pKSB7CiAgICAgICAg
IC8vIFRoaXMgaXMgYSB3b3JkIGJvdW5kYXJ5LiBMZWF2ZSBzZWxlY3Rpb24gd2hlcmUgaXQgaXMu
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIH0KIAogICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShleHRlbnQsIFRleHRHcmFu
dWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBvcHBvc2l0ZURpcmVjdGlvbikpIHsKQEAgLTE1NzAs
NyArMTU1Nyw5IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQ
b3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQCiAgICAgICAgICYmIGF0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KHdvcmRCb3VuZGFyeSwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIHNhbWVEaXJlY3Rpb24pCiAgICAgICAgICYmIGluaXRpYWxFeHRlbnQgIT0gd29yZEJv
dW5kYXJ5KSB7CiAgICAgICAgIGV4dGVudCA9IHdvcmRCb3VuZGFyeTsKLSAgICAgICAgcmV0dXJu
IChiYXNlIDwgZXh0ZW50KSA/IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBiYXNl
LCBleHRlbnQpIDogUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGV4dGVudCwgYmFz
ZSk7CisgICAgICAgIGlmICghKGJhc2UgPCBleHRlbnQpKQorICAgICAgICAgICAgc3RkOjpzd2Fw
KGJhc2UsIGV4dGVudCk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoYmFzZSwgZXh0
ZW50KTsKICAgICB9CiAgICAgLy8gQ29udmVyc2VseSwgaWYgdGhlIGluaXRpYWwgZXh0ZW50IGVx
dWFscyB0aGUgY3VycmVudCB3b3JkIGJvdW5kYXJ5LCB0aGVuCiAgICAgLy8gcnVuIHRoZSByZXN0
IG9mIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGlmIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGV4dGVuZApA
QCAtMTU5MCw5ICsxNTc5LDExIEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91
bmRhcnlGb3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQCiAgICAgaWYgKGV4
dGVudC5pc051bGwoKSB8fCBleHRlbnQgPT0gYmFzZSkKICAgICAgICAgZXh0ZW50ID0gd29yZEJv
dW5kYXJ5OwogICAgIGlmIChleHRlbnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIChiYXNlIDwgZXh0
ZW50KSA/IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBiYXNlLCBleHRlbnQpIDog
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGV4dGVudCwgYmFzZSk7CisgICAgaWYg
KCEoYmFzZSA8IGV4dGVudCkpCisgICAgICAgIHN0ZDo6c3dhcChiYXNlLCBleHRlbnQpOworICAg
IHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoYmFzZSwgZXh0ZW50KTsKIH0KIAogSW50UmVjdCBXZWJQ
YWdlOjpyb290Vmlld0JvdW5kc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAg
LTE3MDcsMzEgKzE2OTgsMjggQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91
Y2hlcyhjb25zdCBJbnRQb2ludCYgcG9pbnQsIFNlbGVjdGlvblRvdWNoIHMKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHJlc3VsdDsKLSAgICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdzOwotCiAgICAg
aWYgKHNob3VsZERpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNXaGVuTW9kaWZ5aW5nU2VsZWN0
aW9uKCkpCiAgICAgICAgIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rpb25H
ZXN0dXJlKHNlbGVjdGlvblRvdWNoLCBwb2ludCk7CiAKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2U7CisgICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBmbGFnczsKKwogICAgIHN3
aXRjaCAoc2VsZWN0aW9uVG91Y2gpIHsKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpTdGFydGVk
OgogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTm90TW92aW5nOgogICAgICAgICBicmVh
azsKLSAgICAKKwogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkOgotICAgICAgICBpZiAo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkgewotICAg
ICAgICAgICAgcmVzdWx0ID0gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKHBvc2l0aW9u
KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQsIHJlc3VsdCk7
Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihwb3NpdGlvbikpOworICAgICAgICBl
bHNlCiAgICAgICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoZnJhbWUsIHBvaW50LCBiYXNlSXNTdGFydCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWRNb3ZpbmdGb3J3YXJkOgogICAgICAgICByYW5nZSA9IHJh
bmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbigmZnJhbWUsIHBvc2l0aW9uLCBiYXNlSXNTdGFy
dCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IAorCiAgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWRNb3ZpbmdCYWNrd2FyZDoKICAgICAg
ICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oJmZyYW1lLCBwb3NpdGlv
biwgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwogICAgICAgICBi
cmVhazsKQEAgLTE3NDAsOCArMTcyOCw5IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9u
V2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3VjaCBzCiAgICAg
ICAgIHJhbmdlID0gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhmcmFtZSwgcG9p
bnQsIGJhc2VJc1N0YXJ0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgaWYgKHJhbmdl
KQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgp
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VG91Y2hlc0NhbGxiYWNrKHBvaW50LCBz
ZWxlY3Rpb25Ub3VjaCwgZmxhZ3MsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTE3NDksMTUgKzE3Mzgs
MTIgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIFNlbGVjdGlvblRvdWNoIHMKIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aFR3
b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGZyb20sIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiB0bywgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsIEdlc3R1cmVSZWNvZ25pemVyU3Rh
dGUgZ2VzdHVyZVN0YXRlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gZnJvbVBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZnJvbSkpOwotICAgIFZpc2li
bGVQb3NpdGlvbiB0b1Bvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJh
bWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHModG8pKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlOwotICAgIGlmIChmcm9tUG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgdG9Qb3NpdGlvbi5pc05v
dE51bGwoKSkgewotICAgICAgICBpZiAoZnJvbVBvc2l0aW9uIDwgdG9Qb3NpdGlvbikKLSAgICAg
ICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZnJvbVBvc2l0
aW9uLCB0b1Bvc2l0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB0b1Bvc2l0aW9uLCBmcm9tUG9zaXRpb24pOwot
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBm
cm9tUG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGF1dG8gZnJvbVBvc2l0aW9uID0g
ZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29u
dGVudHMoZnJvbSkpOworICAgIGF1dG8gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHRvKSk7CisgICAgaWYg
KGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKSkg
eworICAgICAgICBpZiAoIShmcm9tUG9zaXRpb24gPCB0b1Bvc2l0aW9uKSkKKyAgICAgICAgICAg
IHN0ZDo6c3dhcChyYW5nZS0+c3RhcnQsIHJhbmdlLT5lbmQpOworICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBmcm9tUG9zaXRpb24uYWZmaW5pdHkoKSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOwogICAgIH0KIAogICAgIC8vIFdlIGNhbiB1c2UgdGhlIHNhbWUgY2FsbGJhY2sgZm9y
IHRoZSBnZXN0dXJlcyB3aXRoIG9uZSBwb2ludC4KQEAgLTE3ODEsMTMgKzE3NjcsMTMgQEAgdm9p
ZCBXZWJQYWdlOjpleHRlbmRTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBDb21wbGV0aW9uSGEKICAgICBJbnRQb2ludCBlbmRMb2NhdGlvbkZvclN5bnRoZXRp
Y01vdXNlRXZlbnRzOwogICAgIGJvb2wgc2hvdWxkRGlzcGF0Y2hNb3VzZUV2ZW50cyA9IHNob3Vs
ZERpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNXaGVuTW9kaWZ5aW5nU2VsZWN0aW9uKCk7CiAg
ICAgaWYgKHNob3VsZERpc3BhdGNoTW91c2VFdmVudHMpIHsKLSAgICAgICAgYXV0byBzdGFydExv
Y2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9S
b290VmlldyhWaXNpYmxlUG9zaXRpb24od29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLmFic29s
dXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7Ci0gICAgICAgIGVuZExvY2F0aW9uRm9yU3ludGhl
dGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxl
UG9zaXRpb24od29yZFJhbmdlLT5lbmRQb3NpdGlvbigpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkp
LmNlbnRlcigpOworICAgICAgICBhdXRvIHN0YXJ0TG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2
ZW50cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbihj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5zdGFydCkpLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKSkuY2VudGVyKCk7CisgICAgICAgIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91
c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxlUG9zaXRp
b24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kKSkuYWJzb2x1dGVD
YXJldEJvdW5kcygpKS5jZW50ZXIoKTsKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2
ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoU2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQsIHN0YXJ0TG9j
YXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyk7CiAgICAgICAgIGRpc3BhdGNoU3ludGhldGlj
TW91c2VFdmVudHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoOjpNb3ZlZCwgZW5k
TG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyk7CiAgICAgfQogCi0gICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdv
cmRSYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgaWYgKHNob3VsZERp
c3BhdGNoTW91c2VFdmVudHMpCiAgICAgICAgIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNG
b3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoOjpFbmRlZCwgZW5kTG9jYXRpb25Gb3JT
eW50aGV0aWNNb3VzZUV2ZW50cyk7CkBAIC0xODEyLDEwICsxNzk4LDEyIEBAIHZvaWQgV2ViUGFn
ZTo6c2VsZWN0V29yZEJhY2t3YXJkKCkKICAgICBpZiAoIWZyYW1lLnNlbGVjdGlvbigpLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpCYWNrd2FyZCk7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgc3Rh
cnRQb3NpdGlvbiAhPSBwb3NpdGlvbikKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9u
LCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBhdXRv
IHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7
CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVs
YXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkKTsKKyAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc051bGwoKSB8
fCBzdGFydFBvc2l0aW9uID09IHBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShzdGFydFBvc2l0
aW9uLCBwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIH0KIAogdm9pZCBX
ZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNyArMTgyMSw3IEBA
IHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBp
ZiAocG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgc3RhcnRQb3NpdGlvbiAhPSBwb3NpdGlvbikKLSAg
ICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpm
cmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZp
bml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcywg
VXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCkBAIC0xOTg1LDcgKzE5NzMsNyBA
QCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0
KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eQogICAgIH0KIAogICAgIFZlY3RvcjxXZWJDb3JlOjpT
ZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKLSAgICByYW5nZS0+Y29sbGVjdFNlbGVjdGlv
blJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhzZWxlY3Rpb25SZWN0cyk7CisgICAgY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbklu
dGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOwogICAgIGNvbnZlcnRDb250ZW50VG9Sb290Vmll
d1NlbGVjdGlvblJlY3RzKCpmcmFtZS52aWV3KCksIHNlbGVjdGlvblJlY3RzKTsKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soc2VsZWN0aW9u
UmVjdHMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIwNjUsNyArMjA1Myw3IEBAIHZvaWQgV2ViUGFn
ZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwg
Ym9vbCBpc0ludGVyCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0
aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhG
b2N1c2VkRWxlbWVudCk7CiAgICAgCiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAg
ICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtMjA3Nyw3ICsyMDY1LDcgQEAgdm9p
ZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb2kKICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKICAg
ICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbik7CiAgICAgICAgIGlmIChwb3NpdGlvbi5pc05v
dE51bGwoKSkKLSAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIo
KSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgVVBTVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIwOTEsNyArMjA3OSw3IEBA
IHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNv
cmU6OlRleHRHcmFudWxhcml0eSBncmFuCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
biA9IChpc0ZvcndhcmQpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVu
ZCgpIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAg
ICAgIHBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRp
b24sIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAgICAgICBpZiAocG9zaXRpb24uaXNOb3RO
dWxsKCkpCi0gICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJh
bmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCks
IGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
biksIGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0yMTAwLDI1ICsyMDg4LDEzIEBAIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbklu
Rm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQpOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFRleHRHcmFu
dWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0byBib3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKCFib3VuZGFyeSkKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7IHsgKmJvdW5k
YXJ5LCAqYm91bmRhcnkgfSB9OwotICAgIH0KLSAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29y
ZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRp
b24ocG9zaXRpb24pOwotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgKnJhbmdlIH07Ci0gICAgfQorICAgIGNhc2Ug
VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgcmV0dXJuIG1h
a2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRH
cmFudWxhcml0eToKKyAgICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlv
bik7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNlR3JhbnVsYXJpdHk6Ci0gICAg
Y2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGF1
dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBpZiAoIXJhbmdl
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgKnJh
bmdlIH07Ci0gICAgfQorICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFudWxh
cml0eToKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgZ3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OkRvY3VtZW50R3JhbnVsYXJpdHk6CiAgICAgICAgIC8vIEZJWE1F
OiBNYWtlcyBubyBzZW5zZSB0aGF0IHRoaXMgbXV0YXRlcyB0aGUgY3VycmVudCBzZWxlY3Rpb24g
YW5kIHJldHVybnMgbnVsbC4KICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7
CkBAIC0yMTY1LDcgKzIxNDEsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3JhbnVs
YXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgVwogICAgIGF1dG8m
IGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
ICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoZnJhbWUsIHBvaW50
LCBncmFudWxhcml0eSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAgaWYg
KHJhbmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0
ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKCpyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICBtX2luaXRpYWxTZWxlY3Rpb24gPSByYW5nZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogfQpAQCAtMjE5NywxMCArMjE3Myw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9u
V2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmCiAgICAg
ZWxzZSBpZiAocG9zaXRpb24gPCBpbml0aWFsU2VsZWN0aW9uU3RhcnRQb3NpdGlvbikKICAgICAg
ICAgc2VsZWN0aW9uU3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obmV3UmFuZ2Ut
PnN0YXJ0KTsKIAotICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc05vdE51bGwoKSAmJiBzZWxlY3Rp
b25FbmQuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsg
Km1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvbkVuZCkgfTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwotICAgIH0K
KyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6VW5zaWduZWRDYWxsYmFjayhzZWxlY3Rpb25TdGFydCA9PSBpbml0aWFsU2VsZWN0aW9uU3Rh
cnRQb3NpdGlvbiwgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjIxNSw3ICsyMTg5LDYgQEAgdm9pZCBX
ZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50LCBib28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2U7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0OwogICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQ7CiAgICAgCkBAIC0yMjQ5LDExICsyMjIyLDggQEAg
dm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvaW50LCBib28KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAo
c2VsZWN0aW9uU3RhcnQuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgpKQot
ICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotCi0gICAgaWYgKHJhbmdlKQotICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25FbmQpKQorICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpVbnNpZ25lZENhbGxiYWNrKG1fc2VsZWN0aW9uQW5jaG9yID09IFN0YXJ0LCBjYWxsYmFj
a0lEKSk7CiB9CkBAIC0yMzAzLDEyICsyMjczLDEyIEBAIHZvaWQgV2ViUGFnZTo6cmVwbGFjZVNl
bGVjdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCkK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJl
dCgpCiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpCi0gICAgICAgIDogY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAgIGlmIChwbGFpblRl
eHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkKKyAgICAgICAgOiBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChw
bGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZSkgIT0gb2xkVGV4dCkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UuZ2V0
KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2Us
IFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFt
ZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKIH0KQEAgLTIzMjgs
MTQgKzIyOTgsMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNlRGljdGF0ZWRUZXh0KGNvbnN0IFN0
cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogICAgICAgICBwb3NpdGlvbiA9
IHBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChmcmFtZS5kb2N1bWVudCgpKTsKLSAgICBhdXRv
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UocG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogCi0gICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UucHRyKCkpICE9IG9sZFRl
eHQpCisgICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpICE9IG9sZFRleHQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbm90aWZ5IHRoZSBjbGllbnQg
dGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIHVudGlsIHdlIGFyZSBkb25lIGluc2VydGlu
ZyB0aGUgbmV3IHRleHQuCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hh
bmdlcyh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdl
LnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Us
IFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFt
ZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKIH0KQEAgLTIzNDgs
MjcgKzIzMTgsMjUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNv
bnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBDb20KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgYXV0byByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3Np
dGlvbihwb3NpdGlvbik7CisgICAgYXV0byByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgaWYgKCFy
YW5nZSkgewogICAgICAgICByZXBseSh7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsK
KyAgICBhdXRvIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAg
IGNvbnN0IHVuc2lnbmVkIG1heFNlYXJjaEF0dGVtcHRzID0gNTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgIGkgPCBtYXhTZWFyY2hBdHRlbXB0cyAmJiB0ZXh0Rm9yUmFuZ2UgIT0gdGV4dEZvckF1
dG9jb3JyZWN0aW9uOyArK2kpCi0gICAgewotICAgICAgICBwb3NpdGlvbiA9IHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkucHJldmlvdXMoKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpIHx8
IHBvc2l0aW9uID09IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCisgICAgZm9yIChzaXplX3QgaSA9
IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1wdHMgJiYgdGV4dEZvclJhbmdlICE9IHRleHRGb3JBdXRv
Y29ycmVjdGlvbjsgKytpKSB7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5wcmV2aW91cygpOworICAgICAgICBpZiAocG9z
aXRpb24uaXNOdWxsKCkgfHwgcG9zaXRpb24gPT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJhbmdlLT5zdGFydCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRp
b24pLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgdGV4
dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIHJh
bmdlID0geyB7IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbiktPnN0YXJ0LCByYW5nZS0+
ZW5kIH0gfTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5n
ZSk7CiAgICAgfQogCiAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOwog
ICAgIGlmICh0ZXh0Rm9yUmFuZ2UgPT0gdGV4dEZvckF1dG9jb3JyZWN0aW9uKQotICAgICAgICBy
YW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3RzKTsKKyAgICAgICAgY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3Rz
KTsKIAogICAgIGF1dG8gcm9vdFZpZXdTZWxlY3Rpb25SZWN0cyA9IHNlbGVjdGlvblJlY3RzLm1h
cChbJl0oY29uc3QgYXV0byYgc2VsZWN0aW9uUmVjdCkgLT4gRmxvYXRSZWN0IHsgcmV0dXJuIGZy
YW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHNlbGVjdGlvblJlY3QucmVjdCgpKTsgfSk7
CiAKQEAgLTI0MTQsMTQgKzIzODIsMTQgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0
aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICBp
ZiAoIWZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHJhbmdlOwogICAgIFN0cmluZyB0ZXh0Rm9yUmFuZ2U7CiAgICAgYXV0byBvcmlnaW5hbFRl
eHRXaXRoRm9sZGVkUXVvdGVNYXJrcyA9IGZvbGRRdW90ZU1hcmtzKG9yaWdpbmFsVGV4dCk7CiAK
ICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKTsKICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9z
aXRpb24pOwotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdl
LmdldCgpKTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5n
ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiAnb3JpZ2luYWxUZXh0JyBpcyBub3QgdGhlIHNh
bWUgYXMgJ3RleHRGb3JSYW5nZScgd2UgbmVlZCB0byBtb3ZlICdyYW5nZScKICAgICAgICAgLy8g
Zm9yd2FyZCBzdWNoIHRoYXQgaXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uIGFzIG11
Y2ggYXMgcG9zc2libGUuCkBAIC0yNDMxLDMzICsyMzk5LDMzIEBAIGJvb2wgV2ViUGFnZTo6YXBw
bHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3Qg
U3RyaW5nCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOwog
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHBvc2l0
aW9uID0gc3RhcnRPZkRvY3VtZW50KGZyYW1lLmRvY3VtZW50KCkpOwotICAgICAgICAgICAgcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICB0ZXh0Rm9yUmFuZ2Ug
PSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpKTsKKyAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQo
cmFuZ2UpOwogICAgICAgICAgICAgdW5zaWduZWQgbG9vcENvdW50ID0gMDsKICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIG1heFBvc2l0aW9uc0F0dGVtcHRzID0gMTA7CiAgICAgICAgICAgICB3
aGlsZSAodGV4dEZvclJhbmdlLmxlbmd0aCgpICYmIHRleHRGb3JSYW5nZS5sZW5ndGgoKSA+IG9y
aWdpbmFsVGV4dC5sZW5ndGgoKSAmJiBsb29wQ291bnQgPCBtYXhQb3NpdGlvbnNBdHRlbXB0cykg
ewogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgpOwogICAgICAgICAg
ICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBwb3NpdGlvbiA+PSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQotICAgICAgICAgICAgICAgICAgICByYW5nZSA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gV1RGOjpudWxsb3B0OwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKKyAgICAgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0
KHJhbmdlKTsKICAgICAgICAgICAgICAgICBsb29wQ291bnQrKzsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmICh0ZXh0Rm9yUmFuZ2UuaXNFbXB0eSgpICYmIHJhbmdlICYmICFyYW5n
ZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgICAgIC8vIElmICdyYW5nZScgZG9lcyBub3QgaW5j
bHVkZSBhbnkgdGV4dCBidXQgaXQgaXMgbm90IGNvbGxhcHNlZCwgd2UgbmVlZCB0byBzZXQKICAg
ICAgICAgICAgIC8vICdyYW5nZScgdG8gbWF0Y2ggdGhlIHNlbGVjdGlvbi4gT3RoZXJ3aXNlIG5v
bi10ZXh0IG5vZGVzIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICAgICAgICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gUmFuZ2Ugc2VsZWN0aW9uLgotICAgICAgICByYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKKyAgICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFu
Z2UuZ2V0KCkpOworICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJh
bmdlKTsKICAgICB9CiAKICAgICBpZiAoZm9sZFF1b3RlTWFya3ModGV4dEZvclJhbmdlKSAhPSBv
cmlnaW5hbFRleHRXaXRoRm9sZGVkUXVvdGVNYXJrcykKQEAgLTI0NjYsOSArMjQzNCw5IEBAIGJv
b2wgV2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gQ29ycmVjdGx5IGRldGVybWluZSBhZmZpbml0
eSwgdXNpbmcgbG9naWMgY3VycmVudGx5IG9ubHkgcHJlc2VudCBpbiBWaXNpYmxlUG9zaXRpb24K
ICAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBET1dOU1RSRUFNOwogICAgIGlmIChyYW5nZSAmJiBy
YW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIGFmZmluaXR5ID0gVmlzaWJsZVBvc2l0aW9uKHJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIFVQU1RSRUFNKS5hZmZpbml0eSgpOworICAgICAgICBhZmZp
bml0eSA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Ut
PnN0YXJ0KSwgVVBTVFJFQU0pLmFmZmluaXR5KCk7CiAgICAgCi0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgYWZmaW5pdHksIFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBhZmZpbml0eSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgp
KQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rpb24sIDAsIG9yaWdp
bmFsVGV4dC5pc0VtcHR5KCkgPyBUZXh0RXZlbnRJbnB1dEtleWJvYXJkIDogVGV4dEV2ZW50SW5w
dXRBdXRvY29tcGxldGlvbik7CiAgICAgZWxzZSBpZiAob3JpZ2luYWxUZXh0Lmxlbmd0aCgpKQpA
QCAtMjQ5NSwxMiArMjQ2Myw4IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjph
dXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRG
b3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEJlZm9yZTsKLSAg
ICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSkK
LSAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KHsgY29t
cG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9KTsKLSAgICAgICAgU3RyaW5nIG1hcmtlZFRl
eHRBZnRlcjsKLSAgICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9z
aXRpb24pKQotICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4
dCh7ICplbmQsIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCB9KTsKKyAgICAgICAgYXV0byBtYXJrZWRU
ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2ltcGxlUmFuZ2UoY29tcG9zaXRp
b25SYW5nZS0+c3RhcnQsIHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgYXV0byBtYXJrZWRUZXh0
QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShlbmRQb3NpdGlvbiwg
Y29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAgIG1hcmtlZFRleHQgPSBtYXJrZWRUZXh0
QmVmb3JlICsgc2VsZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAgICAgICBpZiAoIW1h
cmtlZFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0UmFuZ2UubG9jYXRp
b24gPSBtYXJrZWRUZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjY3NCw5ICsyNjM4LDkgQEAgc3Rh
dGljIHZvaWQgZGF0YURldGVjdG9yTGlua1Bvc2l0aW9uSW5mb3JtYXRpb24oRWxlbWVudCYgZWxl
bWVudCwgSW50ZXJhY3Rpb25JbmYKICAgICBhdXRvIGxpbmtSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBsaW5rUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhl
bGVtZW50KTsKICAgICBpbmZvLnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdl
RXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGxpbmtSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLAotICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVu
Z3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKS5nZXQoKSk7CisgICAgICAgIGRhdGFE
ZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dh
cmQpKTsKICAgICBpbmZvLnRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBh
bmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5lbmRQ
b3NpdGlvbigpLAotICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBT
ZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpLmdldCgpKTsKKyAgICAgICAgZGF0YURldGVjdGlv
bkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSk7CiB9
CiAjZW5kaWYKIApAQCAtNDEwNiw3ICs0MDcwLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxl
Y3Rpb25XaXRoRGVsdGEoaW50NjRfdCBsb2NhdGlvbkRlbHRhLCBpbnQ2NF90IGxlbmd0aERlbHQK
IAogICAgIGF1dG8gbmV3U2VsZWN0aW9uUmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShuZXdTZWxlY3Rp
b25Mb2NhdGlvbi51bnNhZmVHZXQoKSwgbmV3U2VsZWN0aW9uTGVuZ3RoLnVuc2FmZUdldCgpKTsK
ICAgICBhdXRvIHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpLCBuZXdTZWxlY3Rpb25SYW5nZSk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSkucHRyKCksIERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2Us
IERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCkBAIC00
MjY2LDEyICs0MjMwLDExIEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0Nv
bnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgfQogCiAgICAg
YXV0byBtYWtlU3RyaW5nID0gW10gKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgZW5kKSAtPiBBdHRyaWJ1dGVkU3RyaW5nIHsKLSAgICAgICAgYXV0
byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQo
KSk7Ci0gICAgICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQuZGVl
cEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGlmICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRh
cnkgfHwgKnN0YXJ0Qm91bmRhcnkgPT0gKmVuZEJvdW5kYXJ5KQorICAgICAgICBhdXRvIHJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAoIXJhbmdlIHx8IHJh
bmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCByZXR1cm4gZWRpdGluZy1vZmZzZXQtY29tcGF0aWJsZSBhdHRyaWJ1
dGVkIHN0cmluZ3MgaWYgdGhhdCBvcHRpb24gaXMgcmVxdWVzdGVkLgotICAgICAgICByZXR1cm4g
eyBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpXZWJD
b3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoeyBXVEZNb3ZlKCpzdGFydEJvdW5k
YXJ5KSwgV1RGTW92ZSgqZW5kQm91bmRhcnkpIH0pXSksIG5pbCB9OworICAgICAgICByZXR1cm4g
eyBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpXZWJD
b3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKV0pLCBuaWwgfTsKICAg
ICB9OwogCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250ZXh0QmVm
b3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CkBAIC00MzA2LDgg
KzQyNjksOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERv
Y3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICAgICAgY29udGV4dC50
ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdlKCpjb250ZXh0UmFuZ2UsIDApOwogICAg
IH0gZWxzZSBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMgJiYgY29tcG9zaXRpb25SYW5nZSkgewog
ICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgaWYg
KGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChjb250ZXh0QmVmb3JlU3RhcnQuZGVlcEVx
dWl2YWxlbnQoKSkpCi0gICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29y
ZTo6cGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnQpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCB9
KS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29u
dGV4dEJlZm9yZVN0YXJ0LCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpCisgICAgICAgICAgICBj
b21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlKTsKICAgICAgICAg
Y29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdlKCpjb21wb3NpdGlvblJh
bmdlLCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKQEAgLTQzOTIsNyArNDM1NSw3
IEBAIHZvaWQgV2ViUGFnZTo6Zm9jdXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJldChjb25z
dCBFbGVtZW50Q29udGV4dCYgZWxlbWVudENvCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCp0YXJnZXRGcmFtZS0+ZG9jdW1lbnQo
KSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1w
bGVSYW5nZShwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcih0cnVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBhZGI5OTIzZjUxMWQzYWQ2ZjUyNDk4
MmY4ZmE1MmYzMDBjOGMzYmZjLi5jYTFjOTVlNDg0N2I3NDVlZjRiMmNkOTI1ZDNlMDg2YTI3M2Y5
Yzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQpAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgV2ViUGFnZTo6YXR0cmlidXRlZFN1
YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gRWRpdGlu
Z1JhbmdlOjp0b1JhbmdlKGZyYW1lLCBlZGl0aW5nUmFuZ2UpOworICAgIGF1dG8gcmFuZ2UgPSBF
ZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7CiAgICAgaWYgKCFyYW5n
ZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJp
bmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHsgfSwgRWRpdGluZ1JhbmdlKCksIGNhbGxiYWNr
SUQpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9X
ZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDAxNDRiNTkx
YzFiNDEwMDg1ZjZiNjY1ZWQ1OWUwNGVmYzQ3N2RkMi4uYzdjNmNjMjRlNjgxYWRjZGE3NjJiMmE1
ZTRiNzViNTJkNTViNTk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRM
ZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODgsNyArMTg4LDYg
QEAKIAkJNUM3RTc4NzYyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRTb3VyY2UxMS1tbS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0U3ODY5MjJE
OTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTEtbW0ubW0gKi87IH07CiAJCTVDOTdFRjYz
MjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMTktbW0ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzk3RUY2MTIzNDJDNTM0MDA2MDIwRDQg
LyogVW5pZmllZFNvdXJjZTE5LW1tLm1tICovOyB9OwogCQk1Qzk3RUY2NDIzNDJDNTM0MDA2MDIw
RDQgLyogVW5pZmllZFNvdXJjZTIwLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUM5N0VGNjIyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3Vy
Y2UyMC1tbS5tbSAqLzsgfTsKLQkJNUM5QTRFNTMyMkRFNDYyNzAwN0RCMzUzIC8qIERPTVVJS2l0
RXh0ZW5zaW9ucy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRDQzNjM3MUQ1N0FCRUUwMEFCODVFQSAvKiBET01VSUtpdEV4dGVuc2lvbnMubW0gKi87
IH07CiAJCTVDOUQ5MjVBMjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCBpbiBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RDkyNTgyMkQ3RThBRDAw
OEU5MjY2IC8qIFNvdXJjZXMudHh0ICovOyB9OwogCQk1QzlEOTI1QjIyRDdFOEFEMDA4RTkyNjYg
LyogU291cmNlc0NvY29hLnR4dCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM5RDkyNTkyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXNDb2NvYS50eHQg
Ki87IH07CiAJCTVDOUVGMkY1MjFGMDYxQkUwMDNCREM1NiAvKiBQYWdlU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM5RUYyRjQyMUYwNjFCRTAwM0JEQzU2IC8qIFBhZ2VTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgg
Ki87IH07CkBAIC0zNDAwLDcgKzMzOTksNiBAQAogCQkJCTFBOTExOUY2MURCMDQ3MEEwMDg3RDFG
RCAvKiBCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTYwNTE5MTE3NTAy
QTVEMDBCQzYyRjUgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUI4Mjk1OEQ0MTMyNzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNl
cyAqLywKLQkJCQk1QzlBNEU1MzIyREU0NjI3MDA3REIzNTMgLyogRE9NVUlLaXRFeHRlbnNpb25z
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MDUxOTMxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3Rv
cnlQcm9wZXJ0eUxpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQThERUQ1MTBFRTg4QjhBMDBG
MjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk5MzY0MDA2RTIzOTk2RTgxMDAxRTE4NUUgLyogSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2Vi
Q29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDJiM2QxOWM5ZGE3YmQ3N2Ni
N2RhNzZlNmRmZWI1ZDUxY2UzNTRiYzEuLjNiMGViOTU0ZTA5YWZkOGM3MzA1ZmZhZWUxMjQxZjE3
ZjIxMmQxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTI5Miw3ICsyOTIsNyBAQCAt
IChCT09MKXdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdy
YW51bGFyaXR5IGluRGlyZWN0aW9uSQogLy8gaXMgZW5jbG9zZWQgZGVwZW5kcyBvbiB0aGUgZ2l2
ZW4gZGlyZWN0aW9uLCB1c2luZyB0aGUgc2FtZSBydWxlIGFzIC1bV2ViVmlzaWJsZVBvc2l0aW9u
IHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eTppbkRpcmVjdGlvbkF0Qm91bmRhcnk6XS4KIC0g
KERPTVJhbmdlICopZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5OihXZWJUZXh0R3JhbnVs
YXJpdHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rpb25JZkF0Qm91bmRhcnk6KFdlYlRleHRBZGp1c3Rt
ZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogewotICAgIHJldHVybiBraXQoZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KFtzZWxmIF92aXNpYmxlUG9zaXRpb25dLCB0b1RleHRHcmFudWxhcml0
eShncmFudWxhcml0eSksIHRvU2VsZWN0aW9uRGlyZWN0aW9uKGRpcmVjdGlvbikpLmdldCgpKTsK
KyAgICByZXR1cm4ga2l0KGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShbc2VsZiBfdmlz
aWJsZVBvc2l0aW9uXSwgdG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVjdGlv
bkRpcmVjdGlvbihkaXJlY3Rpb24pKSk7CiB9CiAKIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXBv
c2l0aW9uQXRTdGFydE9yRW5kT2ZXb3JkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1M
Lm1tCmluZGV4IGVhMzA5ODkyNDk4ZjNmNjRlZjBmMDY0OGYzNTQ1YzU1ODUxYjk2OTUuLjg1ODRj
MjMxZmVmOGM4ZDhiNzA2ZThmOTZlZDA4ZDczODg1M2RkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01IVE1MLm1tCkBAIC00NCw2ICs0NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Jh
bmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRleHRDb250cm9sLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NldHRpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL21hcmt1cC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE1
Miw3ICsxNTMsNyBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRlRG9jdW1lbnRGcmFn
bWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFyawogLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7
CiAgICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgaXMgbm90IGEgY29udGV4dHVhbCBmcmFnbWVudCwg
aXQgd29uJ3QgaGFuZGxlIHdoaXRlc3BhY2UgcHJvcGVybHkuCi0gICAgcmV0dXJuIGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KGNvcmUoc2VsZiktPmNyZWF0ZVJhbmdlKCksIHRleHQpLnB0cigp
KTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKCpjb3JlKHNlbGYpKSwgdGV4dCkucHRyKCkpOwogfQogCiBAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25z
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpp
bmRleCA4MTAwYWJlNmJiZjdkODY5OGRhNmVjNzViZDhiYWY4ZjBlZTRkNjkxLi40YTE4ZGY0NTli
YmQ1OTBlMmUyMWI0ZjE5NDIzMjgyZmMyMjRjMWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTc4LDkgKzc4LDEyIEBAIEBp
bXBsZW1lbnRhdGlvbiBET01SYW5nZSAoVUlLaXRFeHRlbnNpb25zKQogCiAtICh2b2lkKW1vdmU6
KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRp
cmVjdGlvbgogewotICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2VsZik7CisgICAgYXV0byByYW5n
ZSA9IGNvcmUoc2VsZik7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247Ci0gICAgZnJhbWVTZWxlY3Rp
b24ubW92ZVRvKHJhbmdlKTsKKyAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNp
bXBsZVJhbmdlKCpyYW5nZSkpOwogICAgIAogICAgIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSA9IFdlYkNvcmU6OlRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJp
dHk7CiAgICAgLy8gVW50aWwgV2ViS2l0IHN1cHBvcnRzIHZlcnRpY2FsIGxheW91dCwgImRvd24i
IGlzIGVxdWl2YWxlbnQgdG8gImZvcndhcmQgYnkgYSBsaW5lIiBhbmQKQEAgLTkyLDEwICs5NSwx
MCBAQCAtICh2b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1
c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogICAgICAgICBkaXJlY3Rpb24gPSBXZWJUZXh0QWRq
dXN0bWVudEJhY2t3YXJkOwogICAgICAgICBncmFudWxhcml0eSA9IFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eTo6TGluZUdyYW51bGFyaXR5OwogICAgIH0KLSAgICAKKwogICAgIGZvciAoVUludDMy
IGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlmeShX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIChXZWJDb3JlOjpTZWxlY3Rp
b25EaXJlY3Rpb24pZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgCisKICAgICBQb3NpdGlv
biBzdGFydCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0
aW9uKCkuZW5kKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0LmNv
bnRhaW5lck5vZGUoKSkKQEAgLTEwNiwxMyArMTA5LDE2IEBAIC0gKHZvaWQpbW92ZTooVUludDMy
KWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9u
CiAKIC0gKHZvaWQpZXh0ZW5kOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRq
dXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNl
bGYpOworICAgIGF1dG8gcmFuZ2UgPSBjb3JlKHNlbGYpOworICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIHJldHVybjsKKwogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9u
OwotICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7Ci0gICAgCisgICAgZnJhbWVTZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZSgqcmFuZ2UpKTsKKwogICAgIGZvciAo
VUludDMyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1v
ZGlmeShXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgKFdlYkNvcmU6
OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24sIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eTo6
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwotICAgIAorCiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFt
ZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
OwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGlmIChzdGFydC5jb250YWluZXJOb2RlKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCmlu
ZGV4IDcxYzA0ZGIyMjkzN2EzMzBlMWE0NzNmMjEzZmFjODNjOTU3MzFmMGIuLmQzYWU3ZjZlZjgz
ZDIwOGYyNjliNmUxNjJkYmUxNDU0NjJkZmI5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCkBAIC01Miw2ICs1Miw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0pTRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9MZWdhY3lXZWJBcmNoaXZl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtV2hlZWxFdmVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhZG93Um9v
dC5oPgpAQCAtMTg0LDcgKzE4NSw3IEBAIEBpbXBsZW1lbnRhdGlvbiBET01SYW5nZSAoV2ViRE9N
UmFuZ2VPcGVyYXRpb25zKQogCiAtIChXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQogewotICAgIHJl
dHVybiBbW1tXZWJBcmNoaXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpM
ZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY29yZShzZWxmKSldIGF1dG9yZWxlYXNlXTsKKyAgICBy
ZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFyY2hpdmU6
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKCpjb3JlKHNlbGYpKV0gYXV0b3JlbGVhc2VdOwogfQog
CiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IGJkOTVh
NjY0OGEzMDMyYzA1N2E5ODFlMDk0NjkwODBlODgxMDYzNTkuLjI1NGE2NWFjZDI2NGYzYWE5OTk4
ZjVkZDIzZjg5NGJiMmE2NjI5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTEwMjUsMTEgKzEw
MjUsMTAgQEAgc3RhdGljIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNvcmUoTlNBcnJheSAq
aW5jb21pbmdSZXN1bHRzLCBPcHRpb25TZXQ8VGV4dEMKIHN0YXRpYyBOU1VJbnRlZ2VyIGluc2Vy
dGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Ci0gICAgaWYgKCFzZWxl
Y3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpLCBzZWxlY3Rp
b25TdGFydCk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFy
eSB9KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoKnJhbmdlKTsKIH0KIAogVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChT
dHJpbmdWaWV3IHN0cmluZywgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNvcmVDaGVja2lu
Z1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQpAQCAtMTEx
MCw4ICsxMTA5LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDYW5kaWRhdGVzRm9y
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGUKICAgICBtX2xhc3RTZWxlY3Rp
b25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVzID0gc2VsZWN0aW9uOwogCiAgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBhdXRvIHNlbGVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2lu
dChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSksICptYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb25TdGFydCkgfSk7Ci0gICAgYXV0byBzZWxlY3Rpb25MZW5ndGggPSBjaGFyYWN0ZXJD
b3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQ
b2ludChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpLCBzZWxlY3Rpb25TdGFydCkpOworICAgIGF1dG8g
c2VsZWN0aW9uTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rp
b25TdGFydCwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogICAgIGF1dG8gY29udGV4dFJhbmdl
Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IGZyYW1lLT5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5k
aWRhdGVSZXF1ZXN0KCk7CiAgICAgU3RyaW5nIGNvbnRleHRGb3JDYW5kaWRhdGVSZXFldWVzdCA9
IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPyBwbGFpblRleHQoKmNvbnRleHRSYW5n
ZUZvckNhbmRpZGF0ZVJlcXVlc3QpIDogU3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGIzMjA5ZGI3ZWJlNDQzOWJiMzY2ZjBmYTU4
MjYxMzAxMTVlOTNkZmEuLmUyZjRmZjM0ODllM2U2ZDc3NWJkYjQ2ZjA1NjIxNDgzZjZiZGYxMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTMs
NiArOTMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29u
dGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlcldpZGdldC5oPgpAQCAtODM3LDcgKzgzOCw3IEBAIC0gKFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2
ZVRvOihXCiAgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBhdXRvIHNjb3BlRW5kID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHBh
cmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpLmVuZDsKKyAg
ICBhdXRvIHNjb3BlRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhwYXJh
Z3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKICAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OnJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IFdURk1v
dmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RGTW92ZShzY29wZUVuZCkgfSwgcmFuZ2UpKTsKIH0KIApA
QCAtMTQ3OSw3ICsxNDgwLDcgQEAgLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmkKIAogICAgIGF1dG8g
Y29yZUNsb3NlVHlwaW5nID0gY2xvc2VUeXBpbmcgPyBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcyA6IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm87CiAg
ICAgYXV0byBjb3JlVXNlclRyaWdnZXJlZCA9IHVzZXJUcmlnZ2VyZWQgPyBVc2VyVHJpZ2dlcmVk
IDogTm90VXNlclRyaWdnZXJlZDsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKGNvcmUocmFuZ2UpLCBjb3JlKGFmZmluaXR5KSwgY29yZUNsb3NlVHlwaW5nLCBjb3JlVXNl
clRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtl
U2ltcGxlUmFuZ2UoY29yZShyYW5nZSkpLCBjb3JlKGFmZmluaXR5KSwgY29yZUNsb3NlVHlwaW5n
LCBjb3JlVXNlclRyaWdnZXJlZCk7CiAgICAgaWYgKCFjbG9zZVR5cGluZykKICAgICAgICAgZnJh
bWUuZWRpdG9yKCkuZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3Bl
bkZvck1vcmVUeXBpbmcoKTsKIH0KQEAgLTE1NDAsMTIgKzE1NDEsMjAgQEAgLSAoTlNTdHJpbmcg
Kil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogCiAtIChpbnQpd29yZE9mZnNldEluUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1cm4gY29yZShzZWxmKS0+c2VsZWN0aW9u
KCkud29yZE9mZnNldEluUmFuZ2UoY29yZShyYW5nZSkpOworICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIGF1dG8gc2VsZWN0aW9uID0gY29yZShzZWxmKS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJldCgpKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG9ubHkgd29yayBpbiBjYXNl
cyB3aGVyZSB0aGUgc2VsZWN0aW9uIHJlbWFpbnMgaW4gdGhlIHNhbWUgbm9kZSBhZnRlciBpdCBp
cyBleHBhbmRlZC4KKyAgICByZXR1cm4gc3RkOjptYXg8aW50PigwLCBzZWxlY3Rpb24uc3RhcnQo
KS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gY29yZShyYW5nZSktPnN0YXJ0T2Zmc2V0KCkp
OwogfQogCiAtIChCT09MKXNwYWNlRm9sbG93c1dvcmRJblJhbmdlOihET01SYW5nZSAqKXJhbmdl
CiB7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNwYWNlRm9sbG93c1dvcmRJ
blJhbmdlKGNvcmUocmFuZ2UpKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgaXNTcGFjZU9yTmV3bGlu
ZShXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1h
a2VTaW1wbGVSYW5nZShjb3JlKHJhbmdlKSktPmVuZCkpLmNoYXJhY3RlckFmdGVyKCkpOwogfQog
CiAtIChOU0FycmF5ICopd29yZHNJbkN1cnJlbnRQYXJhZ3JhcGgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAzYTViYjA0YmMzNGI4MTZiOTlkY2UzM2Rk
NzMwNjVlZWI2NGU1NDg2Li5hMTg1NjhlZjViNWRmOGEwYWQ5YTRjZTRjMmI2Y2VmNjdjNDg1ZWIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTUs
NiArMTk1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJv
Z3Jlc3NUcmFja2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlclRoZW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CkBAIC03OTI5LDggKzc5MzAsNyBAQCAtIChET01S
YW5nZSAqKURPTVJhbmdlT2ZTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG86KERP
TVJhbmdlICopcHJldmlvdQogewogICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5yYW5nZU9mU3RyaW5n
KHN0cmluZywgY29yZShwcmV2aW91c1JhbmdlKSwgY29yZU9wdGlvbnMob3B0aW9ucykpLmdldCgp
KTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5yYW5nZU9mU3RyaW5nKHN0cmluZywg
bWFrZVNpbXBsZVJhbmdlKGNvcmUocHJldmlvdXNSYW5nZSkpLCBjb3JlT3B0aW9ucyhvcHRpb25z
KSkpOwogfQogCiAtICh2b2lkKXNldE1haW5GcmFtZURvY3VtZW50UmVhZHk6KEJPT0wpbWFpbkZy
YW1lRG9jdW1lbnRSZWFkeQpAQCAtODQ1Niw3ICs4NDU2LDcgQEAgLSAodm9pZClzZXRTZWxlY3Rl
ZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5
KXNlbGUKICAgICAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvcmUocmFuZ2Up
LCBjb3JlKHNlbGVjdGlvbkFmZmluaXR5KSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSksIGNvcmUoc2VsZWN0aW9u
QWZmaW5pdHkpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405244</attachid>
            <date>2020-07-25 23:17:55 -0700</date>
            <delta_ts>2020-07-25 23:56:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200725231754.patch</filename>
            <type>text/plain</type>
            <size>239787</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3ODc1ZWI3NWJhMjRl
NmI2NGU0MDUyNjlmNTA1YjU5YjRiMDYzYS4uMTdlYTBkYjcyZWFiOWQ5ZWI5N2M2ZGVhODg4Zjk5
ZGQyNzZhMTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgcGx1Z2luRWxl
bWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdCgpIHNob3VsZCBzdXBwb3J0IFZNSW5xdWlyeSBy
ZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IDIyNDA0MjQzMDc2ZGU0YWQzMDllZjlkZDA1M2I5NzEzNmFkNzFkYTIuLmJlYjcy
MTJjNzUzMTc2NjgwM2FhYWVlYzY5ZTI5NGIyNmI4MDAxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODMsNiArODMsNyBAQAogI2lu
Y2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0
YWNobWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKQEAgLTE2NiwxMCArMTY3LDEwIEBAIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
CiBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0OjpBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3Rh
cnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgICAgIG1fcmVwbGFjZWRS
YW5nZS5zdGFydEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CiAgICAg
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgICAgICBtX3JlcGxhY2VkVGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBp
bmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIG1fcmVwbGFjZWRSYW5nZS5l
bmRJbmRleC5zY29wZSk7CisgICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFs
dWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBtX3Jl
cGxhY2VkUmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG1fcmVwbGFjZWRSYW5nZS5lbmRJbmRleCA9IG1fcmVwbGFjZWRSYW5nZS5zdGFydEluZGV4Owog
ICAgIH0KQEAgLTE5ODUsMTIgKzE5ODYsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2Jq
ZWN0Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UKICAg
ICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBv
c2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwog
Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07Ci0gICAg
aWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmICghc2VhcmNo
UmFuZ2UgfHwgc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byB0YXJnZXRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHNlYXJj
aFJhbmdlLnN0YXJ0LCBvcmlnaW5hbFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKLSAgICByZXR1cm4gZmluZENsb3Nl
c3RQbGFpblRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwor
ICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS0+c3Rh
cnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4
dCgqc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCiBzdGF0
aWMgYm9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKQEAgLTI4ODAsMTggKzI4ODEs
MTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgQVgKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOwotICAgIGlmICghYm91bmRhcnkp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShvYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KHBvaW50KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5kYXJ5
LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZz
ZXRGb3JSYW5nZSgqcmFuZ2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogewot
ICAgIGF1dG8gYm91bmRhcnkgPSBtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9p
bnQpOwotICAgIGlmICghYm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9pbnQpKTsKKyAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0cnVlKTsKKyAgICByZXR1
cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7CiB9CiAK
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXJzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDk3ZDMwODgzMWIz
N2EyYzM1MTU3MGM1OTUxNzBkMWI4OTJmMmYzZWYuLmQ0YWI1OTM3NTQ1NTI5ZjMzN2VlNDA0Zjc5
YmMzYWU3YjM4YjMzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTcyMSw3ICs3MjIs
NyBAQCBWZWN0b3I8U3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJh
dGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewot
ICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZSh0ZXh0UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCisgICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBT
dHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0UmFuZ2UpOwpAQCAtOTgwLDIxICs5ODEsMTkgQEAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGkKICAgICAgICAgZW5kUG9zID0gdmlzaWJsZVBvczE7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zLCBlbmRQb3Mp
OworICAgIHJldHVybiB7IHN0YXJ0UG9zLCBlbmRQb3MgfTsKIH0KIAogVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHZpc2libGVQb3MsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3Np
dGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gc3RhcnRPZldvcmQodmlzaWJsZVBvcywgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOworICAgIHJldHVybiB7IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQp
IH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc2l0
aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAog
ewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJs
ZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0g
c3RhcnRPZldvcmQodmlzaWJsZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICByZXR1
cm4geyBzdGFydCwgZW5kT2ZXb3JkKHN0YXJ0KSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHVwZGF0ZUFYTGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtMTA0NCw4ICsxMDQzLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXMKICAgICB9IGVsc2UKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHVwZGF0ZUFY
TGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKHByZXZWaXNpYmxlUG9zKTsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZE9mTGluZShwcmV2VmlzaWJsZVBvcykgfTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmlnaHRMaW5l
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBj
b25zdApAQCAtMTA3OCwyMyArMTA3NiwyMSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaQogICAg
ICAgICBlbmRQb3NpdGlvbiA9IGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcyk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiB9OwogfQogCiBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogRk8gMiBJTVBMRU1FTlQgKGN1cnJlbnRseSByZXR1cm5zIGluY29ycmVjdCBhbnN3ZXIpCiAg
ICAgLy8gUmVsYXRlZD8gPHJkYXI6Ly9wcm9ibGVtLzM5Mjc3MzY+IFRleHQgc2VsZWN0aW9uIGJy
b2tlbiBpbiA4QTMzNgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRP
ZlNlbnRlbmNlKHZpc2libGVQb3MpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGVuZE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRp
b24gPSBzdGFydE9mU2VudGVuY2UodmlzaWJsZVBvcyk7CisgICAgcmV0dXJuIHsgc3RhcnRQb3Np
dGlvbiwgZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKSB9OwogfQogCiBWaXNpYmxlUG9zaXRp
b25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24pOwot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bik7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9z
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRPZlBhcmFncmFwaChzdGFydFBvc2l0
aW9uKSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKQEAgLTExNDYsOSArMTE0Miw5IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
IGNvbnN0CiB7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0T2ZTdHlsZVJhbmdlKHZpc2libGVQb3MpLCBlbmRP
ZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykpOworICAgIHJldHVybiB7IHN0YXJ0T2ZTdHlsZVJhbmdl
KHZpc2libGVQb3MpLCBlbmRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykgfTsKIH0KIAogLy8gTk9U
RTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCkBAIC0x
MTU2LDEyICsxMTUyLDExIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhCiB7CiAgICAgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7
CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnQpOwogICAgIHN0YXJ0UG9zaXRpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5n
ZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRQb3NpdGlv
biwgdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpIH07
CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZv
clBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTEx
ODMsOSArMTE3OCw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4CiAKIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdAogewotICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIHJldHVybiB7IHN0YXJ0T2ZMaW5lKHZpc2libGVQb3NpdGlvbiksIGVuZE9mTGlu
ZSh2aXNpYmxlUG9zaXRpb24pIH07CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVw
bGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKQpAQCAtMTI3MSwxNSAr
MTI2NCwxMiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmIHZpc2libGVQb3NpdGlvblJhbmdlKQogewotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7Ci0gICAgaWYgKCFzdGFydCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2li
bGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0gICAgaWYgKCFlbmQpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFu
Y2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwg
bm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIg
aW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8v
IEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxpc3QgbWFya2VyIHRleHQuCkBAIC0x
Mjk4LDE2ICsxMjg4LDEzIEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nCiB7CiAgICAgLy8gRklY
TUU6IE11bHRpLWJ5dGUgc3VwcG9ydAogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90IHJldHVybiAwPwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVu
ZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90
IHJldHVybiAwPwogCiAgICAgLy8gRklYTUU6IFVzZSBjaGFyYWN0ZXJDb3VudCBpbnN0ZWFkIG9m
IHdyaXRpbmcgb3VyIG93biBsb29wPwogICAgIGludCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAgICAgIGxlbmd0aCAr
PSBpdC50ZXh0KCkubGVuZ3RoKCk7CkBAIC0xNDMxLDE2ICsxNDE4LDEzIEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5j
ZSBlbmQuCiAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFlbmQpCisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24p
LCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIC8vIEFuIGVtcHR5IGxpbmUgaXMgY29uc2lkZXJlZCBhIHNlbnRlbmNl
LiBJZiBpdCdzIHNraXBwZWQsIHRoZW4gdGhlIHNlbnRlbmNlIHBhcnNlciB3aWxsIG5vdAogICAg
IC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9u
IG9mIHRoZSBlbXB0eSBsaW5lLgotICAgIHJldHVybiBoYXNBbnlQbGFpblRleHQoeyAqc3RhcnQs
ICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0UG9zaXRpb247Cisg
ICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gZW5kT2ZTZW50ZW5jZShuZXh0UG9z
aXRpb24pIDogbmV4dFBvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTE0NTAsMTUgKzE0MzQsMTIgQEAgVmlzaWJsZVBvc2l0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNv
bnN0IFZpc2libGUKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNl
IHN0YXJ0LgogICAgIGF1dG8gcHJldmlvdXNQb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7
Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKHByZXZpb3Vz
UG9zaXRpb24pKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1
dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsK
LSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzUG9zaXRpb24pLCBlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOworICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUcmVhdCBlbXB0eSBs
aW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCi0gICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7
ICpzdGFydCwgKmVuZCB9KSA/IHN0YXJ0T2ZTZW50ZW5jZShwcmV2aW91c1Bvc2l0aW9uKSA6IHBy
ZXZpb3VzUG9zaXRpb247CisgICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gc3Rh
cnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlvdXNQb3NpdGlvbjsKIH0KIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRQYXJhZ3JhcGhFbmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMjAzMSw3ICsy
MDEyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlVGV4dEluUmFuZ2UoY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAgICAvLyBBbHNvIG9ubHkgZG8gdGhp
cyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUuCiAgICAgYXV0byYgZnJhbWUgPSBy
ZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50LnNob3VsZFVzZUlucHV0TWV0aG9k
KCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpLmdldCgpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5n
ZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vt
ZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpObywgRWRpdG9yOjpTbWFydFJl
cGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaAppbmRleCBkYzY1NGZjMmIxMmE0ODczODg0ZjYxYmQ1YjY3MTk1ZWI5Mzk3MzgwLi40NWNk
OGVhOTRmYWQyZGRiOTg4NTdkYTFmNjYxNTU3MTIwZmQ1MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaApAQCAtNDMwLDI0ICs0MzAsNiBAQCBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlWaXNpYmxl
UG9zaXRpb25Gb3JCb3VuZHMgewogICAgIExhc3QsCiB9OwogCi1zdHJ1Y3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGUpCi0gICAgICAgIDogc3RhcnQocykKLSAgICAgICAgLCBlbmQoZSkKLSAgICB7
IH0KLQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLSAgICAgICAgOiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAgLCBl
bmQoc2VsZWN0aW9uLmVuZCgpKQotICAgIHsgfQotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KLX07Ci0KIGVudW0gY2xh
c3MgQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlIHsgU3Vic2NyaXB0LCBTdXBlcnNj
cmlwdCB9OwogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlw
ZSB7IFByZVN1YnNjcmlwdCwgUHJlU3VwZXJzY3JpcHQsIFBvc3RTdWJzY3JpcHQsIFBvc3RTdXBl
cnNjcmlwdCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYjRiYTBkODc4MjNjZDJmODAy
Mzg5MDcxNzVhMmQ5MWEwMWFiOGU3Li40NDg2MmFiNmEyZWJiZjI3YThlYWY1ZWM0NmQ3MDU4ZDNh
MzFjYWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTY0OSwxMiArNjQ5LDkgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkUmVuZGVyZXIgJiYg
Zmlyc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkgJiYgbGFzdENoaWxkUmVuZGVyZXIgJiYgbGFzdENo
aWxkUmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGRlZmluZSB0aGUg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgZm9yIHRoZSByYW5nZSBhcyB0aGUgb25lcyByaWdodCBi
ZWZvcmUgYW5kIGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGFuZCB0aGUgbGFz
dCBub2RlcyBpbiB0aGUgRE9NIHRyZWUgdGhhdCBpcyB3cmFwcGVkIGluc2lkZSB0aGUgYW5vbnlt
b3VzIGJsb2NrLgotICAgICAgICAgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluQmxvY2sgPSBmaXJz
dENoaWxkUmVuZGVyZXItPm5vZGUoKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZmlyc3ROb2RlSW5CbG9jayk7Ci0g
ICAgICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKGxhc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgICAgICAgICAgbm9k
ZURvY3VtZW50ID0gJmZpcnN0Tm9kZUluQmxvY2stPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4dFJhbmdlID0geyB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9IH07CisgICAgICAgICAgICAgICAgYXV0byYg
Zmlyc3ROb2RlSW5CbG9jayA9ICpmaXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay5kb2N1bWVudCgpOworICAg
ICAgICAgICAgICAgIHRleHRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZSgmZmlyc3ROb2RlSW5CbG9jayksIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTkxNyw3ICs5MTQsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
aW5rQ2xpY2tQb2ludCgpCiAgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24geyBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OwogICAgICAgICBhdXRv
IGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwogICAgICAgICBpZiAoIWVuZC5pc051
bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSkuY2VudGVyKCkg
fTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsK
IH0KQEAgLTkzNSw5ICs5MzIsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjbGlja1BvaW50KCkKICAgICBpZiAoIWlzV2ViQXJlYSgpIHx8ICFjYW5TZXRWYWx1ZUF0dHJp
YnV0ZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgp
OwogICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSkuY2VudGVyKCk7
CisgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbigpKS5j
ZW50ZXIoKTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdApAQCAtMTk5MCw3ICsxOTg1LDYg
QEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAgICAgCi0gICAgLy8gY29uc3RydWN0IFZpc2li
bGVQb3NpdGlvbnMgZm9yIHN0YXJ0IGFuZCBlbmQKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJl
ci0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7CkBAIC0yMDA4LDcgKzIwMDIsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAg
ICAgICAgICBlbmRQb3MgPSBzdGFydFBvczsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFy
dFBvcyksIFdURk1vdmUoZW5kUG9zKSB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWdu
ZWQgbGluZUNvdW50KSBjb25zdApAQCAtMjAzOCw3ICsyMDMyLDcgQEAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JM
aW5lKHVuc2kKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlz
aWJsZVBvcykpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25FeHRlbmQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQsIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5KTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0
aW9uLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGlvbigpOwogfQogICAgIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGludCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0YzU0ZDFhYWQzMWRkMC4u
MmExNmY3MGM3ZDI5NWFmNDZhNTg3OTkzMTdkNGRlNTI5OTcyNGUzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY2LDYgKzY2LDcgQEAKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW1wb3J0ICJQbHVnaW5WaWV3QmFz
ZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlcklubGluZS5oIgogI2ltcG9y
dCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKQEAgLTE4NTAs
NyArMTg1MSw3IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuCiAgICAgaWYgKCF0ZXh0TWFya2Vy
UmFuZ2UpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRP
ZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9u
Rm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAgIHJl
dHVybiB7IHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRl
eHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNh
Y2hlLCB0ZXh0TWFya2VyUmFuZ2UpIH07CiB9CiAKIC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENo
aWxkcmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZDc0MmU3MTlkODUwYzcyZTc5OTFm
ZjU3NGYyZjM5ODQzYjgzYTFkLi5iNjVmZTljMzkwNjM0NTMyNDk1ZDU2MDJjZmRjNTZkMmVlYjYz
MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgog
I2luY2x1ZGUgIlF1aXJrcy5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA2OWU1YTliYTY5
MTQ2NmI2MTBhZjllZGJiMzQwMjhjMzkxNDQxMjFjLi5jNTY2MGZjYmVjMWU2ZWViYmU4NWY1NzNj
NDRmODQyNDc3MzNkZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUwZS4uN2EyMGE1
ZjM5MDY2NmUyMjYyZGMxYTQ1ODVjOTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiUmFkaW9C
dXR0b25Hcm91cHMuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0NTNlYjY4NTEy
MGNiNDdkZTUzOTU1OS4uZDMxMjI1NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2EzNTFiNmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdl
IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdjZTgxYmJjMjE3
MGUzODVmY2FjZGUwYzZhMjU5Li5kYmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZkY2FjZTdhOGFm
MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBv
ZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgaWYgKCFwb2lu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpwb2ludCwg
KnBvaW50IH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHBvaW50KQoreworICAgIGlmICghcG9pbnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7CisgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpwb2ludCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisKIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQogewogICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKQEAgLTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0KIAorUmVmUHRy
PE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFp
bmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAppbmRleCAwY2UwYmExOGU0ZGM3ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0Li5mODZlMzQw
Y2Y5NDIzMTRkNTcwZTJkMzA4MTMxYTdlMTQ1OWRlOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaApAQCAtNTEsMTMgKzUxLDI3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25z
dCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIAorQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2lu
dEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50Jik7CitCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFy
eVBvaW50SGVscGVyKEJvdW5kYXJ5UG9pbnQmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBhdXRv
IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4gZGVjbHR5cGUobWFrZUJv
dW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSkpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5nZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNs
dHlwZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJk
PFQ+KGFyZ3VtZW50cykpLi4uKSk7CisKIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRvIGhh
dmUgc2hvcnRlciBuYW1lczsgYW5vdGhlciBvcHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0byBt
YWtlU2ltcGxlUmFuZ2UuCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3MgSW50
ZXJzZWN0aW5nTm9kZVJhbmdlOwpAQCAtMTE1LDQgKzEyOSwyNCBAQCBpbmxpbmUgU2ltcGxlUmFu
Z2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mIHJhbmdlKQogewogfQogCitpbmxpbmUg
Qm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50
JiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK2lubGluZSBCb3VuZGFyeVBvaW50
IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKEJvdW5kYXJ5UG9pbnQmJiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gV1RGTW92ZShwb2ludCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gbWFr
ZUJvdW5kYXJ5UG9pbnRIZWxwZXIoVCYmIGFyZ3VtZW50KSAtPiBkZWNsdHlwZShtYWtlQm91bmRh
cnlQb2ludChzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnQpKSkKK3sKKyAgICByZXR1cm4gbWFrZUJv
dW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIC4uLlQ+IGF1dG8gbWFrZVNpbXBsZVJhbmdlKFQmJiAuLi5hcmd1bWVudHMpIC0+IGRl
Y2x0eXBlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludEhlbHBlcihzdGQ6OmZvcndh
cmQ8VD4oYXJndW1lbnRzKSkuLi4pKQoreworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXggOGE0ODQzYjFkMjYyZmRjYmVl
M2M3OTAyMjAxMGY2YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0YzcyY2NiMDM3
YzZhZGQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIK
LSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKaW5kZXggOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMwZTYwZTcxMzE0
My4uODc4MWJkMTAwNzgyOTA0YTQxMGFmZTFhY2VhNWY5NzZjZjI4ZTNkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBA
IC00NzQsMTUgKzQ3NCwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQ
cmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRP
ZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1h
a2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1ha2VCb3VuZGFy
eVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJhbmdlKQorICAgICAgICByZXR1
cm47CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hp
dGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQg
YW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBp
ZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9z
aXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9kb2N1
bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERl
bGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2Vy
KCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29y
cmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwog
fQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0
VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJp
bmdUb0JlUmVwbGFjZWQpCkBAIC01MDAsMTAgKzUwMiwxMSBAQCBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29u
c3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERv
Y3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpOwotICAgIGF1
dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQ
b2ludChiZWZvcmVQcmVjZWRpbmdDaGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFy
dCB9OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5w
cmV2aW91cygpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCk7CisgICAgaWYgKCFwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRv
JiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgeworICAgIGZvciAoYXV0
byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAgICAgICAgIGlm
IChtYXJrZXItPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0YjA5NTRlMDIx
ZTRlZC4uMGU1NGQzMGNkMjliYjEzYjAzNDFlMDUzYzk2MTE1NTJjNjQ3YjQ3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0NiwxMyArMjQ2
LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUmIHN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNjb3BlU3RhcnQgPSBCb3Vu
ZGFyeVBvaW50IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5UG9pbnQgPSBt
YWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5k
YXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91bmRhcnlQb2lu
dCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsg
c2NvcGVTdGFydCwgKnN0YXJ0Qm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAgYXV0byBlbmRJbmRleCA9IGNo
YXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwgVGV4dEl0ZXJh
dG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8g
c3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgcmFuZ2UtPnN0YXJ0IH0s
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
KyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCByYW5nZS0+
ZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdy
YXBoKHZpc2libGVTdGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3Rh
cnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM3MWM3OWYyN2Q5
ZGMzZGVmNzg1NjBmZjAwZWIzNjQ1Y2RjZjI5NzUuLjI5MDU0ZjhkOTFmZWI1YmIwZGU0Mjk5MzQ3
ZWFlZjM1ZGViZWZjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENv
bW1hbmQuaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEzMSw3ICsxMzAs
NyBAQCBzdGF0aWMgU3RyaW5nIHN0cmluZ0ZvclZpc2libGVQb3NpdGlvbkluZGV4UmFuZ2UoY29u
c3QgVmlzaWJsZVBvc2l0aW9uSW5kZXhSYW5nZQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnRJbmRleC52YWx1ZSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZS5nZXQoKSk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmVuZEluZGV4
LnZhbHVlLCByYW5nZS5lbmRJbmRleC5zY29wZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3Ry
aW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoeyBXVEZNb3ZlKHN0YXJ0KSwgV1RGTW92ZShlbmQp
IH0pOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6OnRleHREZWxl
dGVkQnlVbmFwcGx5KCkKQEAgLTE0MjAsMTggKzE0MTksMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAg
ICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8gcGFyYWdy
YXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAgICAg
ICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxl
Y3Rpb25TdGFydCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0
YXJ0ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVTdGFy
dCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqcmFu
Z2VUb1NlbGVjdGlvblN0YXJ0LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVuZEluZGV4
ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAg
ICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJs
ZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQotICAgICAgICAg
ICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAq
c2VsZWN0aW9uRW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRvU2VsZWN0aW9u
RW5kID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVFbmQp
KQorICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZVRv
U2VsZWN0aW9uRW5kLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDQ0LDE3
ICsxNDM5LDE1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgUG9zaXRpb24gc3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwog
ICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCku
dXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRp
cmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCi0g
ICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gZW5kLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRSYW5nZUNv
bXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXBy
ZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICAvLyBzdGFydCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gY3JlYXRl
IGEgcmFuZ2Ugc2luY2UgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIi4KKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBl
bmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJh
Z3JhcGggdG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3VnaCwgc2luY2Ug
bW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCiAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRoaXMgdXNlZCB0byB1c2UgYSB0
ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29uZnVzZWQgc29tZSB2ZXJzaW9u
cyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSAh
PSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFu
Y2UocmFuZ2UuZ2V0KCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252
ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmluZygpKTsKKyAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CiAK
ICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3aGVuIHdlIGNv
cHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5nIGlmIHdlJ3Jl
IGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFwaCBjYW4gaGF2
ZSBzdHlsZQpAQCAtMTUwNCw3ICsxNDk3LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAg
ICBpZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRvY3VtZW50KCk7
CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKmVkaXRh
YmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFy
YWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8gZGVzdGluYXRpb25J
bmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAwIH0sICptYWtlQm91bmRh
cnlQb2ludChkZXN0aW5hdGlvbikgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2Vl
bkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkpOwogICAgIEFTU0VS
VChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg3MGM0ZGJiNjhk
MzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMuLmY2NWRmNDQ5Njg3ZDNmNTMzMjk1N2ZmODQ4
MTRmZGM3ZWY3ODZiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGE3ODdkZmFhZjFj
NTEyODk2ZjZlN2JiMTc2NWVhMzQ4M2RkMTUyODQuLmRkZTUyNTAxMzM4M2NhYTdmNjFlYWViNTNl
OTk1YjcyMjFlYTE1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTEwNCwy
NyArMTEwNCwyMSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAgICAgc2NvcGUg
PSAmZG9jdW1lbnQ7CiAgICAgfQogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50
KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKLSAgICBpZiAoIXN0YXJ0KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9u
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpLCBw
b3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICpl
bmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogLy8gRklYTUU6IE1l
cmdlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRvIHN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOwotICAgIGlmICgh
c3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCkpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RQ
b3NpdGlvbkluTm9kZSgmbm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9LCBmb3JT
ZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CisgICAg
cmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8g
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBU
ZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggN2I1ZTJl
ZWNhNDNlZWU1MjFkODYwYzQ4NTZhYWI3MWJmZGFiOGFiMC4uMTVlYzkzY2Y4ZDEwZDMyMjYyNjVm
YTZjYjBjNjVkMzM1ZGJmMGIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjk2
LDcgKzY5Niw4IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERv
Y3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdB
Y3Rpb24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb21tYW5kLT52
aXNpYmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOworICAgICAgICBhdXRvIHNlbGVjdGlv
biA9IGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKTsKKyAgICAgICAg
U3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShzZWxlY3Rpb24pOwogICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFw
cGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KQEAgLTIxMjAsOCArMjEy
MSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAKICAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0ID0gc3RkOjptaW4oYmFzZU9mZnNldCArIHNlbGVjdGlvblN0YXJ0LCBleHRlbnRPZmZzZXQp
OwogICAgICAgICAgICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQsIGJh
c2VPZmZzZXQgKyBzZWxlY3Rpb25FbmQpLCBleHRlbnRPZmZzZXQpOwotICAgICAgICAgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiYXNlTm9kZS0+ZG9jdW1lbnQoKSwgYmFz
ZU5vZGUsIHN0YXJ0LCBiYXNlTm9kZSwgZW5kKTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKKyAgICAgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh7IHsgeyAqYmFzZU5vZGUsIHN0
YXJ0IH0sIHsgKmJhc2VOb2RlLCBlbmQgfSB9IH0sIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjk1LDcg
KzMyOTUsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgYmVoYXZpb3IpIGNvbnN0CiAgICAgYXV0byBlbmQgPSBzZWxlY3Rpb24uZW5kKCk7CiAgICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgpIHx8
IGVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gcGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCkgfSwgYmVoYXZpb3IpLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXDAn
LCAiIik7CisgICAgcmV0dXJuIHBsYWluVGV4dCgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQp
LCBiZWhhdmlvcikucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKTsKIH0KIAogUmVmUHRyPFRl
eHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC0zNzEzLDcgKzM3MTMsNyBAQCBzdGF0aWMgU2ltcGxlUmFuZ2Ug
ZXh0ZW5kU2VsZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgdW5zaWduZWQgY2hhcmFj
dGVycwogICAgICAgICBzdGFydCA9IHN0YXJ0LnByZXZpb3VzKENoYXJhY3Rlcik7CiAgICAgICAg
IGVuZCA9IGVuZC5uZXh0KENoYXJhY3Rlcik7CiAgICAgfQotICAgIHJldHVybiB7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpfTsKKyAgICByZXR1cm4g
Km1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNjYW5TZWxl
Y3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKQEAgLTM5MjcsOSArMzkyNyw3IEBAIHN0YXRpYyBi
b29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
CiB7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQotICAgID8gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQotICAgIDogY3JlYXRlTGl2ZVJhbmdl
KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rp
b24pKQpAQCAtMzk0MCwxMSArMzkzOCw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgYXV0byYgc2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBhdXRvIHN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCkpKTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKLSAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9Owor
ICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7CiB9
CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVz
dWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdApAQCAtNDIyOSw5ICs0
MjIzLDggQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2lu
Z1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKICAgICB9IGVsc2UKICAgICAgICAgaW5zZXJ0VGV4
dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJz
SW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2Vw
dGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50Lmxlbmd0aCgpLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkKTsKLSAgICBpZiAoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSkKLSAgICAgICAgaW5zZXJ0
ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpBY2NlcHRl
ZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpOworICAgIGlmIChhdXRv
IGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJl
Y3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2Fu
ZGlkYXRlLnJlcGxhY2VtZW50Lmxlbmd0aCgpLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJk
KSkKKyAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKIH0KQEAg
LTQyNjIsNyArNDI1NSw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVk
U2VsZWN0aW9uUmFuZ2UoKQogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3Qg
dGhlIHNlbGVjdGlvbiB0byBpbmNsdWRlIHRoZSBhbmNob3IgdGFnIGl0J3MgaW4/IFdob2V2ZXIg
d3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVzIGEgY29tbWVudCBl
eHBsYWluaW5nIHRoZSByYXRpb25hbGUuCiAgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2Uo
KTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0g
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNp
dmVBbmNlc3RvcihyYW5nZS0+c3RhcnQuY29udGFpbmVyLCByYW5nZS0+ZW5kLmNvbnRhaW5lciku
Z2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7CisgICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0Fu
Y2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKICAg
ICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLT5zdGFydCkpID49IDApCiAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVuY2xvc2luZ0FuY2hvcik7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDQ0
MGZjZjZmYTVmZmYxZmRiODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MuLmExZDE5NDM2ZjY2ZWEyZGQ2
ZmU5ZTM0Njg4MTQ5OTI2YTdkMThiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcApAQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rp
b25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQog
ICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgYXV0byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAg
IGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Km9sZFJhbmdlLCAqbmV3UmFuZ2UsIGFmZmluaXR5LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVS
YW5nZSgqbmV3UmFuZ2UpLnB0cigpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmcmFtZS5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdS
YW5nZSwgYWZmaW5pdHksIGZhbHNlKQorICAgICAgICAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKCpuZXdSYW5nZSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzKTsKIH0KIAogc3RhdGljIFRyaVN0YXRlIHN0YXRlU3R5bGUoRnJhbWUm
IGZyYW1lLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIGRlc2lyZWRWYWx1
ZSkKQEAgLTM1NCw5ICszNTIsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgIGF1dG8g
bWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1
dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrICYmIGZyYW1l
LmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBib29sIHNlbGVjdGVkID0gc2Vs
ZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRyKCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKLSAgICAgICAgQVNTRVJUKHNl
bGVjdGVkKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZCkKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24u
c2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVj
dGVkUmFuZ2UoKSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgZnJhbWUuZWRp
dG9yKCkucGVyZm9ybURlbGV0ZSgpOwpAQCAtMTA1Niw4ICsxMDUyLDcgQEAgc3RhdGljIGJvb2wg
ZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pKS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVu
aW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0
V29yZChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKQEAgLTE1NzEsNyArMTU2Niw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVGb3JtYXRCbG9j
ayhGcmFtZSYgZnJhbWUsIEV2ZW50KikKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9u
LmlzTm9uZU9yT3JwaGFuZWQoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVu
dCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOworICAgIGF1dG8qIGZv
cm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJs
b2NrQ29tbWFuZChzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKTsKICAgICBpZiAoIWZvcm1hdEJsb2Nr
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgcmV0dXJuIGZvcm1h
dEJsb2NrRWxlbWVudC0+bG9jYWxOYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zv
cm1hdEJsb2NrQ29tbWFuZC5jcHAKaW5kZXggZTQzNmM3ZmRlMjFkYmIyMDM0YjU5YzViOTUyODlm
YTNjZmVkNzBhOS4uYmY1MmUwYzA0NGI3Y2FjMzFmMTQ5ZDRhMjYzNDI5NWIxMmMyNGVmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTY4
LDE0ICs2NywxNCBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAgIFJlZlB0cjxOb2RlPiBv
dXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBz
dGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKCpzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLCAqbm9kZVRvU3BsaXRUbyk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckluc2Vy
dGlvblBvc2l0aW9uID0gb3V0ZXJCbG9jazsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0YXJ0LCBlbmRPZlNlbGVjdGlvbik7CisgICAgYXV0byByYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kT2ZTZWxlY3Rpb24pOwogICAgIEVsZW1lbnQqIHJl
Zk5vZGUgPSBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGVuZCk7CiAgICAgRWxlbWVudCogcm9v
dCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHN0YXJ0KTsKICAgICAvLyBSb290IGlzIG51bGwg
Zm9yIGVsZW1lbnRzIHdpdGggY29udGVudGVkaXRhYmxlPWZhbHNlLgogICAgIGlmICghcm9vdCB8
fCAhcmVmTm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpc0VsZW1lbnRGb3JGb3JtYXRC
bG9jayhyZWZOb2RlLT50YWdRTmFtZSgpKSAmJiBzdGFydCA9PSBzdGFydE9mQmxvY2soc3RhcnQp
Ci0gICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZpc2libHlDb250
YWluZWRXaXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKKyAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgKHJhbmdlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4o
KnJlZk5vZGUsICpyYW5nZSkpKQogICAgICAgICAmJiByZWZOb2RlICE9IHJvb3QgJiYgIXJvb3Qt
PmlzRGVzY2VuZGFudE9mKCpyZWZOb2RlKSkgewogICAgICAgICAvLyBBbHJlYWR5IGluIGEgYmxv
Y2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGN1cnJlbnQgcGFyYWdyYXBoCiAgICAg
ICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCkBAIC05OSwyMyArOTgsMjIg
QEAgdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwKICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRl
cihsYXN0UGFyYWdyYXBoSW5CbG9ja05vZGUpOwogfQogICAgIAotRWxlbWVudCogRm9ybWF0Qmxv
Y2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKFJhbmdlKiByYW5nZSkKK0Vs
ZW1lbnQqIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5n
ZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3Ig
JiYgIWlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbW1vbkFuY2VzdG9yKSkKKyAgICBhdXRvIGNv
bW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKTsKKyAgICB3aGls
ZSAoY29tbW9uQW5jZXN0b3IgJiYgIWlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbW1vbkFuY2Vz
dG9yLmdldCgpKSkKICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNlc3Rvci0+cGFy
ZW50Tm9kZSgpOwotCi0gICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KGNvbW1vbkFuY2VzdG9yKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBFbGVt
ZW50KiByb290RWRpdGFibGVFbGVtZW50ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucm9vdEVk
aXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gcm9vdEVkaXRhYmxlRWxlbWVudCA9IHJhbmdlLT5z
dGFydC5jb250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFZGl0
YWJsZUVsZW1lbnQgfHwgY29tbW9uQW5jZXN0b3ItPmNvbnRhaW5zKHJvb3RFZGl0YWJsZUVsZW1l
bnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb21tb25BbmNlc3Rv
ci0+aXNFbGVtZW50Tm9kZSgpID8gZG93bmNhc3Q8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpIDog
bnVsbHB0cjsKKyAgICByZXR1cm4gJmRvd25jYXN0PEVsZW1lbnQ+KCpjb21tb25BbmNlc3Rvcik7
CiB9CiAKIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCmlu
ZGV4IDc5YmVkYWQxN2UwZTY0YzgyNTgyMDE2ZDUyZTliOWU5NmYyNDIxYzcuLmRhMmFkNTA0YmMx
MDUzNzk4NDRlN2NhYTUwMjUwNmQxNTExNjI3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Gb3JtYXRCbG9ja0NvbW1hbmQuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHN0YXRpYyBFbGVtZW50KiBlbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5k
KFJhbmdlKik7CisgICAgc3RhdGljIEVsZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1h
bmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAgICAgYm9vbCBkaWRBcHBseSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkQXBwbHk7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNGE2M2FkODBjNTFlMTE3NmU0Yjk4NDIxNTc0
MmE0OTAwYWI1N2M0Ny4uMGEyZDRmYzM3ZTgyOTc4MTI1ZjM0ODQ5MDBhZDAzNGM3YWE2ZDQzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIwNSwxMiAr
MjA1LDYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZwb3Ms
IEVBZmZpbml0eSBhZmZpbml0eSwgRVVzZXJUcmlnZ2UKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGFmZmluaXR5LCBtX3NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpLCBk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVkKSk7CiB9CiAKLXZvaWQgRnJh
bWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBSYW5nZSogcmFuZ2UpCi17Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSByYW5nZSA/IFZpc2libGVTZWxlY3Rpb24ocmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDogVmlzaWJsZVNlbGVjdGlvbigpOwot
ICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotfQotCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpt
b3ZlVG8oY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZp
bml0eSBhZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25z
dCBib29sIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiA9IHRydWU7CkBAIC0yMDM0LDExICsyMDI4LDEz
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgfQogfQogCi1ib29sIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZyBjbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgdXNl
clRyaWdnZXJlZCkKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRD
bG9zZVR5cGluZyBjbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCZyYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCku
ZG9jdW1lbnQoKSk7CisKKyAgICBpZiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBy
YW5nZS0+ZW5kLmNvbnRhaW5lci5wdHIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBhZmZpbml0eSk7CiAKQEAgLTI2
MTgsMzQgKzI2MTQsNiBAQCBVQ2hhciBGcmFtZVNlbGVjdGlvbjo6Y2hhcmFjdGVyQWZ0ZXJDYXJl
dFNlbGVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5jaGFyYWN0ZXJB
ZnRlcigpOwogfQogCi1pbnQgRnJhbWVTZWxlY3Rpb246OndvcmRPZmZzZXRJblJhbmdlKGNvbnN0
IFJhbmdlICpyYW5nZSkgY29uc3QKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwotICAg
IGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgd2lsbCBvbmx5IHdvcmsgaW4gY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiBy
ZW1haW5zIGluCi0gICAgLy8gdGhlIHNhbWUgbm9kZSBhZnRlciBpdCBpcyBleHBhbmRlZC4gSW1w
cm92ZSB0byBoYW5kbGUgbW9yZSBjb21wbGljYXRlZAotICAgIC8vIGNhc2VzLgotICAgIGludCBy
ZXN1bHQgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gcmFu
Z2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCA9
IDA7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGcmFtZVNlbGVjdGlvbjo6c3BhY2VG
b2xsb3dzV29yZEluUmFuZ2UoY29uc3QgUmFuZ2UgKnJhbmdlKSBjb25zdAotewotICAgIGlmICgh
cmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBOb2RlJiBub2RlID0gcmFuZ2UtPmVu
ZENvbnRhaW5lcigpOwotICAgIGludCBlbmRPZmZzZXQgPSByYW5nZS0+ZW5kT2Zmc2V0KCk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUs
IGVuZE9mZnNldCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIHJldHVybiBpc1NwYWNlT3JO
ZXdsaW5lKHBvcy5jaGFyYWN0ZXJBZnRlcigpKTsKLX0KLQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3QKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwpAQCAtMjY2MCwxNSArMjYyOCw2IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0CiAgICAgcmV0dXJu
IGlzU3RhcnRPZkRvY3VtZW50KHBvcyk7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVj
dGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0Ci17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0
YXJ0KHNlbGVjdGlvbik7Ci19Ci0KIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0V29y
ZFN0YXJ0KCkgY29uc3QKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2Vs
ZWN0aW9uOwpAQCAtMjgzNCw5ICsyNzkzLDEyIEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxl
Y3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzCiAg
ICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oc3RhcnRWaXNpYmxlUG9zLCBlbmRWaXNpYmxlUG9z
KTsgICAgCiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OmFjdHVhbFNlbGVjdGlvbkF0U2VudGVu
Y2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWwpIGNvbnN0Citib29sIEZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdAogewotICAgIFBvc2l0aW9u
IHN0YXJ0UG9zKHNlbC5zdGFydCgpKTsKKyAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zKG1fc2VsZWN0aW9u
LnN0YXJ0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBwb3MoY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0UG9zLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAocG9zLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmgKaW5kZXggZGE0MmUwZmZhY2NlZTFkZTVkZTdmYmEyMmU5ZTlmZDg5MDM0NmEyZC4uZWRk
NGJhYTgyODdkODExYmYzZDgxNDVlOWM5ZmIyZWI2YWMzMDdkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0xNDQsNyArMTQzLDYg
QEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxl
bWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgbW92ZVRvKGNvbnN0IFJhbmdlKik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3Zl
VG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dl
cmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQp
OwogICAgIHZvaWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5LCBFVXNlclRyaWdn
ZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwpAQCAtMTU1LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiwgT3B0aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4gPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucygpLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50
KCksIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRl
eHRHcmFudWxhcml0eSA9IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwog
CiAgICAgZW51bSBjbGFzcyBTaG91bGRDbG9zZVR5cGluZyA6IGJvb2wgeyBObywgWWVzIH07Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5
LCBTaG91bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiwgRUFmZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2Vy
ZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEFs
bCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHdpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKTsKQEAgLTIzMiw4ICsyMzAsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFt
b3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2Fy
ZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJB
ZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IHdvcmRP
ZmZzZXRJblJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7CkBAIC0zMzMs
NyArMzI5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRl
bmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBp
bnQgYW1vdW50KSBjb25zdDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggODMyODU2ZjZiMmZmYTIzYTViMzczOTQ3YTYwYzcw
MDQ5MjUzODQ5OC4uMTVlZjQ4MjE2ZWViYTczZDVmMGYzMWQxMjQ4OTBkZjlmNWJlODNhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQu
aCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTE1OCwxMyArMTU5LDEwIEBAIFJlZjxS
YW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShDaGFyYWN0ZXJSYW5nZSByYW5n
ZSkgY29uc3QKIAogRXhjZXB0aW9uT3I8dWludDY0X3Q+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6
b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGF1dG8gc3Rh
cnQgPSBtYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgaWYgKCFzdGFydCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBhcmFn
cmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbik7CisgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgIGlmICghZW5kKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsg
KnN0YXJ0LCAqZW5kIH0pOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOwogfQog
CiBib29sIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNFbXB0eSgpIGNvbnN0CkBAIC0yMTAsMjYg
KzIwOCwxNyBAQCB1aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3Ro
KCkgY29uc3QKIAogdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBs
YWNlbWVudFN0YXJ0KCkgY29uc3QKIHsKLSAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0
YXJ0KQotICAgICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKLQotICAg
IGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9z
aXRpb24oKSk7Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBl
bmQgPSBtYWtlQm91bmRhcnlQb2ludChtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQg
fSk7CisgICAgaWYgKCFtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQpIHsKKyAgICAgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24o
KSwgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAg
ICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQgPSByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpy
YW5nZSkgOiAwOworICAgIH0KICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFy
dDsKIH0KIAogdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNl
bWVudExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5n
dGgpCi0gICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKLQotICAg
IG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UpOworICAgIGlmICghbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0
aCkKKyAgICAgICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50
KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1Jl
cGxhY2VtZW50TGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGIzMWRhYzVkYTc5NDYwZjc5ZTkw
ZGJlNjQ5YTYwNjllMmQ0NTZmMDkuLjZkYmZkODUxOWVlYmUzNDQ1NjQxMzc4MWIzOGRlNzdhYzc4
N2I4NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuY3BwCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBzZXVkb0Vs
ZW1lbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRT
Y29wZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAg
LTE0Niw3ICsxNDUsNyBAQCBzdGF0aWMgYm9vbCBpc1Rva2VuRGVsaW1pdGVyKFVDaGFyIGNoYXJh
Y3RlcikKIGNsYXNzIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgUGFy
YWdyYXBoQ29udGVudEl0ZXJhdG9yKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKLSAgICAgICAgOiBtX2l0ZXJhdG9yKHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfSwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlz
aWJpbGl0eSkKKyAgICAgICAgOiBtX2l0ZXJhdG9yKCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVu
ZCksIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiAgICAgICAgICwgbV9ub2Rl
KHN0YXJ0LmZpcnN0Tm9kZSgpKQogICAgICAgICAsIG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9k
ZSgpKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4
IGFmNWViMWI3ZTZjNDFlZDEwZDRhNmM4ZDAzYTVhZWU0M2EwNzNiYWIuLmQwMTUxMDJhNjA5ZmZh
ZWQyNjEyYWYyZTc5YzNiOWZlZGQ1ZjE5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcApAQCAtMzMyLDggKzMzMiw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6cG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKGNvbnN0IFZpc2libGVTZWxl
CiAgICAgICAgIHJldHVybjsKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFY
VGV4dEVkaXRUeXBlRGVsZXRlLCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShzZWxlY3Rpb24pLCBzZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uSW5kZXhSYW5nZSByYW5nZTsKLSAgICByYW5nZS5zdGFydEluZGV4LnZhbHVlID0g
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIHJhbmdlLnN0YXJ0SW5k
ZXguc2NvcGUpOwotICAgIHJhbmdlLmVuZEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9z
aXRpb24oc2VsZWN0aW9uLmVuZCgpLCByYW5nZS5lbmRJbmRleC5zY29wZSk7CisgICAgcmFuZ2Uu
c3RhcnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgcmFuZ2UuZW5kSW5kZXgu
dmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBy
YW5nZS5lbmRJbmRleC5zY29wZSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJhbmdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCmluZGV4IGRmM2VhZmRkNWU5ODBlMjQyN2UyYTFiNzk4YWQ0MGRkZTg3OTk5ZjQu
LjAxNjhlYjgxODE0MmQzZjQ2OTlmNTVlYTBmZjhiMjJhYWRiNjM3NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTg0OSw2ICs4NDksMTEgQEAgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW8KICAgICByZXR1cm4gc3RyZWFtOwogfQogCitPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiBy
YW5nZSkKK3sKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5l
bmQpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggZjg0
YmNkZmQ3MmY1YmM0NTc2MzNkYTQ4MzI3MjFlNTI3N2EyNDg1MS4uOTFlZDRjYzBmMzQ0ODM0NzUy
MmQ1ZDEyNmFlNDlmM2UyYzAxZTJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCkBAIC0zMiw2ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UmFuZ2U7CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogLy8gVmlzaWJsZVBvc2l0aW9uIGRlZmF1
bHQgYWZmaW5pdHkgaXMgZG93bnN0cmVhbSBiZWNhdXNlCiAvLyB0aGUgY2FsbGVycyBkbyBub3Qg
cmVhbGx5IGNhcmUgKHRoZXkganVzdCB3YW50IHRoZQogLy8gZGVlcCBwb3NpdGlvbiB3aXRob3V0
IHJlZ2FyZCB0byBsaW5lIHBvc2l0aW9uKSwgYW5kIHRoaXMKQEAgLTE0MCw2ICsxNDIsMTUgQEAg
Ym9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3MKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBFQWZmaW5pdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
CitzdHJ1Y3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgeworICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dDsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kOworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KK307CisKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2Um
KTsKKwogLy8gaW5saW5lcwogCiAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgaWdub3JlIGFmZmlu
aXR5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXgg
MDRmODg0YjcyMDVlOTM5M2FhOTljN2Q3YjRlYmI5NmJjNGYzZjg4MC4uOWRiYWQxMGY4NjRhMGY0
M2ZlMjQwZjliMDAxZmY2MjJlZTJiYjdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTEzNiw3ICsxMzUsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0
CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAg
ICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgp
IHx8IGVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJl
dHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRh
cnlQb2ludChlbmQpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsK
IH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXpl
ZFJhbmdlKCkgY29uc3QKQEAgLTE3OSwxOCArMTc4LDEzIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKHMsIGUpID4gMCkgewogICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KICAgICAgICAgICAgIC8vIFRoZSBlbmQgY2Fu
IHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0aGUg
b25seSB0aGluZyBzZWxlY3RlZC4KLSAgICAgICAgICAgIFBvc2l0aW9uIHRtcCA9IHM7Ci0gICAg
ICAgICAgICBzID0gZTsKLSAgICAgICAgICAgIGUgPSB0bXA7CisgICAgICAgICAgICBzdGQ6OnN3
YXAocywgZSk7CiAgICAgICAgIH0KICAgICAgICAgcyA9IHMucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCk7CiAgICAgICAgIGUgPSBlLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0K
IAotICAgIGlmIChzLmlzTnVsbCgpIHx8IGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
cyksICptYWtlQm91bmRhcnlQb2ludChlKSB9OworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2Uo
cywgZSk7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0
eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC0yMDQsMTQgKzE5OCwxMCBAQCBib29s
IFZpc2libGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTZWFyY2hS
YW5nZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgYXV0byBub2RlID0gcG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQobm9kZSk7CisgICAgYXV0byBzY29wZSA9IGRlcHJlY2F0ZWRFbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlm
ICghc2NvcGUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAo
IXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiB7IHsgV1RGTW92ZSgqc3Rh
cnQpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpzY29wZSkgfSB9OworICAg
IHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNjb3BlKSk7CiB9CiAKIGJv
b2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1
bGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4
IDNmODgyZTE5ZDQxOWJmYThkNWVkZWFlNTkyODZmNmFhZGRlMjI3N2UuLjg3NmRlMTg2OTU0M2M1
MjRlZGRjNDY1Mzc4ODVmOTE0ZDc4M2VmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZUJhc2UoKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9iYXNl
LCBpc1JhbmdlKCkgPyAoaXNCYXNlRmlyc3QoKSA/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSkgOiBh
ZmZpbml0eSgpKTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50KCkgY29uc3Qg
eyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBpc1JhbmdlKCkgPyAoaXNCYXNlRmly
c3QoKSA/IERPV05TVFJFQU0gOiBVUFNUUkVBTSkgOiBhZmZpbml0eSgpKTsgfQogCisgICAgb3Bl
cmF0b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7IHJldHVybiB7IHZpc2libGVTdGFy
dCgpLCB2aXNpYmxlRW5kKCkgfTsgfQorCiAgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVy
biBzZWxlY3Rpb25UeXBlKCkgPT0gTm9TZWxlY3Rpb247IH0KICAgICBib29sIGlzQ2FyZXQoKSBj
b25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gQ2FyZXRTZWxlY3Rpb247IH0KICAgICBi
b29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gUmFuZ2VTZWxl
Y3Rpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCAxMmQ0
Y2FjMzZiODQ5MDQ5ZjZlMjQ0MmU3NjM2MTEzYjY1NGI1N2I3Li5hODA3ZjU2M2U2ZWQyMGVkZTA3
YTcwZDQ0Y2MxYWU1YzI3MjA0MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5p
dHMuY3BwCkBAIC0xODMzLDExICsxODMzLDExIEBAIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbk9m
TmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUCiAg
ICAgfQogfQogCi1SZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
ICAgICAvLyBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbmVmZmljaWVudC4gIFdlIGNvdWxkIGVhc2ls
eSBvYnRhaW4gdGhlIGFuc3dlciB3aXRoIHRoZSBib3VuZGFyaWVzIGNvbXB1dGVkIGJlbG93Lgog
ICAgIGlmICghd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KHZwLCBncmFudWxhcml0eSwgZGly
ZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldkJvdW5kYXJ5OwogICAgIFZpc2libGVQ
b3NpdGlvbiBuZXh0Qm91bmRhcnk7CkBAIC0xODg5LDI1ICsxODg5LDIzIEBAIFJlZlB0cjxSYW5n
ZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dnAsIFRleHRHcmFuCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGlmIChwcmV2Qm91bmRhcnkuaXNOdWxsKCkg
fHwgbmV4dEJvdW5kYXJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICh2cCA8IHByZXZCb3VuZGFyeSB8fCB2
cCA+IG5leHRCb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShwcmV2Qm91bmRhcnku
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLCBwcmV2Qm91bmRh
cnksIG5leHRCb3VuZGFyeSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShwcmV2Qm91bmRh
cnksIG5leHRCb3VuZGFyeSk7CiB9CiAKIHN0ZDo6cHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBv
c2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YikKIHsKICAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gYSA8IGIKLSAgICAgICAgPyAtY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQoYSksICptYWtlQm91bmRhcnlQb2ludChiKSB9KQotICAgICAgICA6IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGIpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYSkg
fSk7CisgICAgcmV0dXJuIGEgPCBiID8gLWNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uo
YSwgYikpIDogY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShiLCBhKSk7CiB9CiAKIHZv
aWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24sIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUsIFVDaGFyMzImIHR3b0Jl
Zm9yZSkKQEAgLTE5MzQsNyArMTkzMiw3IEBAIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFVDaGFyMzImIG9uZUFmdGVyCiAgICAg
fQogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gZW5kUG9zaXRpb24pIHsKLSAgICAgICAgU3Ry
aW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFy
dFBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9KS5yZXBsYWNlKG5v
QnJlYWtTcGFjZSwgJyAnKTsKKyAgICAgICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWlu
VGV4dCgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkucmVwbGFj
ZShub0JyZWFrU3BhY2UsICcgJyk7CiAgICAgICAgIGZvciAoaW50IGkgPSBjaGFyYWN0ZXJTdHJp
bmcubGVuZ3RoKCkgLSAxLCBpbmRleCA9IDA7IGkgPj0gMCAmJiBpbmRleCA8IG1heENoYXJhY3Rl
cnM7IC0taSkgewogICAgICAgICAgICAgaWYgKCFpbmRleCAmJiBuZXh0UG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgICAgICAgICAgaW5kZXgrKzsKQEAgLTE5NDYsNTMgKzE5NDQsMzggQEAgdm9p
ZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlv
biwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB0d29CZWZvcmUgPSBjaGFyYWN0ZXJzWzJdOwogfQog
Ci1SZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gY291bGQgYmUgaW4gYSBub24gdmlzaWJsZSBlbGVtZW50IGFuZCB3ZSBkb24ndCBoYXZlIGEg
VmlzaWJsZVBvc2l0aW9uLgogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGJlIGF0IHRo
ZSBzdGFydCBvZiBhIHdvcmQsIHRyeSBmb3J3YXJkLgotICAgICAgICByYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgfQotCi0gICAgaWYg
KHJhbmdlKQorICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpCYWNrd2FyZCkpCisgICAgICAgIHJldHVybiByYW5nZTsKKyAgICBpZiAoYXV0
byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkp
CiAgICAgICAgIHJldHVybiByYW5nZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9z
aXRpb24gPSBwb3NpdGlvbjsKICAgICBkbyB7CiAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBv
c2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGN1cnJlbnRQb3NpdGlvbiwgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQp
OwogICAgIH0gd2hpbGUgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhYXRCb3VuZGFy
eU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFu
dWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOwotCiAgICAgaWYgKGN1cnJl
bnRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb25P
Zk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29y
ZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotCi0gICAgaWYgKGN1
cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVh
dGUocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgp
LCBjdXJyZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAgICAgQVNTRVJUKHJhbmdlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmFuZ2U7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShjdXJy
ZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3Jk
Qm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogewog
ICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0KLSAgICAvLyBtb3ZlIHRoZSBwb3NpdGlvbiBh
dCB0aGUgZW5kIG9mIHRoZSB3b3JkCiAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAvLyBEb24ndCBjcm9zcyBsaW5lIGJvdW5kYXJpZXMu
CiAgICAgICAgIHJlc3VsdCA9IHBvc2l0aW9uOwogICAgIH0gZWxzZSBpZiAod2l0aGluVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAvLyBUaGUgcG9zaXRp
b24gbGllcyB3aXRoaW4gYSB3b3JkLgotICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9
IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5
OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gd29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChkaXN0
YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkgPiAxKQotICAgICAgICAgICAg
cmVzdWx0ID0gd29yZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBpZiAoYXV0byB3b3Jk
UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFu
dWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7
CisgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJh
bmdlLT5zdGFydCk7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBv
c2l0aW9uLCByZXN1bHQpID4gMSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQpOworICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKSB7CiAgICAgICAg
IC8vIFRoZSBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KICAgICAgICAgcmVzdWx0
ID0gcG9zaXRpb247CkBAIC0yMDA4LDcgKzE5OTEsNyBAQCBWaXNpYmxlUG9zaXRpb24gY2xvc2Vz
dFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24p
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQnlD
aGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBw
b3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwpA
QCAtMjAyNCwxMCArMjAwNywxMCBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJh
Y3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQbwogICAgIGlmIChk
aXJlY3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkICYmICFhdEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShlbmQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQpKQogICAgICAgICBlbmQgPSBlbmRPZldvcmQoZW5kKS5kZWVw
RXF1aXZhbGVudCgpOwogCi0gICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfSAgICAKIAotUmVmUHRyPFJhbmdl
PiByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKQorT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9F
eHBhbmQpCiB7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
OwogICAgIFBvc2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDM1
LDggKzIwMTgsNyBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5
Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcwogICAgICAgICBzdGFydCA9IHN0
YXJ0LnByZXZpb3VzKENoYXJhY3Rlcik7CiAgICAgICAgIGVuZCA9IGVuZC5uZXh0KENoYXJhY3Rl
cik7CiAgICAgfQotICAgIAotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAg
cmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKIH0KIAogc3RkOjpwYWlyPFZpc2li
bGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldp
dGhvdXRDcm9zc2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTIw
NDcsOSArMjAyOSw5IEBAIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldvcmRCb3Vu
ZGFyeT4gd29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3JvCiAgICAgaWYgKHdpdGhpblRl
eHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKICAgICAgICAgYXV0byBhZGp1
c3RlZFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVu
Y2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKLSAgICAgICAg
ICAgIGFkanVzdGVkUG9zaXRpb24gPSB3b3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29y
ZFJhbmdlLT5zdGFydCk7CiAgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25z
KHBvc2l0aW9uLCBhZGp1c3RlZFBvc2l0aW9uKSA+IDEpCi0gICAgICAgICAgICAgICAgYWRqdXN0
ZWRQb3NpdGlvbiA9IHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBh
ZGp1c3RlZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+
ZW5kKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4geyBhZGp1c3RlZFBvc2l0aW9uLCBXaXRo
aW5Xb3JkQm91bmRhcnk6OlllcyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVV
bml0cy5oCmluZGV4IDFhNzgzMmViMzdiODE5OTViOTFiMTAzMGU5NGIxNTRhNDNkNjMwZGIuLjQy
ZTYzNzg5NWVlYzc5YmQ4YzIyYjZkYzc4OTU0N2EyYjhhOWFlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuaApAQCAtMTAxLDEzICsxMDEsMTMgQEAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0VuZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24p
OwogV0VCQ09SRV9FWFBPUlQgYm9vbCB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwog
V0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4
dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9FWFBPUlQg
c3RkOjpwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJh
bmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGNs
b3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUs
IFVDaGFyMzImIHR3b0JlZm9yZSk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdl
RXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQs
IFNlbGVjdGlvbkRpcmVjdGlvbik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCk7CitXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0
aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hh
cmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogZW51bSBjbGFzcyBXaXRoaW5X
b3JkQm91bmRhcnkgOiBib29sIHsgTm8sIFllcyB9OwogV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWly
PFZpc2libGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3Np
dGlvbldpdGhvdXRDcm9zc2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCAyMzZhM2Fi
NDdhYTg1OGNjZTYxNmNkMWIzNTExZWJlNGQyOTRlMGRhLi4xNGZhNjg4MmM2NzM2YzczZmQ2MzQ0
MDhmZWNkNzhhNDJkYmFhNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxEZXRlY3Rl
ZEl0ZW0+IGRldGVjdEl0ZW0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QK
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgU3Ry
aW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdlKTsKLSAgICBD
RkluZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoeyBjb250ZXh0UmFuZ2Uuc3RhcnQs
ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CisgICAgQ0ZJbmRleCBoaXRMb2NhdGlv
biA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoY29udGV4dFJhbmdlLnN0YXJ0LCBw
b3NpdGlvbikpOwogCiAgICAgYXV0byBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUo
RERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CiAgICAgYXV0byBzY2FuUXVlcnkg
PSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtl
KDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CkBAIC0xMjgsNyArMTI4LDcgQEAg
T3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0
VGVzdFJlc3VsdChjb25zdCBIaXRUZXMKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKKyAg
ICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4dFJhbmdlOwogCiAgICAgaWYgKCFpczxIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgIHBvc2l0aW9uID0gcmVu
ZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCksIG51bGxw
dHIpOwpAQCAtMjcyLDE2ICsyNzIsMTQgQEAgc3RhdGljIHZvaWQgcmVtb3ZlUmVzdWx0TGlua3NG
cm9tQW5jaG9yKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgZWxlbWVudFBhcmVudC0+cmVtb3ZlQ2hp
bGQoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0
aW5nRERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsIGJvb2wmIGRpZE1vZGlm
eURPTSkKK3N0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhO
b2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUpCiB7Ci0gICAgZGlkTW9kaWZ5RE9NID0gZmFs
c2U7CiAgICAgZm9yIChOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVu
dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhbmNob3IgPSBkb3duY2FzdDxIVE1MQW5j
aG9yRWxlbWVudD4oKm5vZGUpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGFuY2hvci5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9k
ZXRlY3RvcnNBdHRyKSwgInRydWUiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IpOwotICAgICAgICAg
ICAgZGlkTW9kaWZ5RE9NID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUgPT0gJmVuZE5vZGUpIHsKQEAgLTI5MSw3ICsyODksNiBAQCBzdGF0aWMgYm9vbCBzZWFy
Y2hGb3JMaW5rUmVtb3ZpbmdFeGlzdGluZ0RETGlua3MoTm9kZSYgc3RhcnROb2RlLCBOb2RlJiBl
bmROb2RlLAogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbmNo
b3IuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih4X2FwcGxlX2RhdGFfZGV0ZWN0b3Jz
QXR0ciksICJ0cnVlIikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IpOwotICAgICAgICAg
ICAgICAgIGRpZE1vZGlmeURPTSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTU1MywyOSArNTUwLDEyIEBAIE5TQXJyYXkgKkRh
dGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBjb250
ZXh0UmFuZ2UsIERhCiAgICAgICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICAvLyBTdG9yZSB0aGUgcmFuZ2UgYm91
bmRhcmllcyBhcyBQb3NpdGlvbiwgYmVjYXVzZSB0aGUgRE9NIGNvdWxkIGNoYW5nZSBpZiB3ZSBm
aW5kCi0gICAgICAgIC8vIG9sZCBkYXRhIGRldGVjdG9yIGxpbmsuCi0gICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8UG9zaXRpb24sIFBvc2l0aW9uPj4gcmFuZ2VCb3VuZGFyaWVzOwotICAgICAgICBy
YW5nZUJvdW5kYXJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZXN1bHRSYW5nZXMuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKLSAgICAgICAgICAg
IHJhbmdlQm91bmRhcmllcy51bmNoZWNrZWRBcHBlbmQoeyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5k
KSB9KTsKLQogICAgICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IGRhdGFEZXRlY3RvclN0cmlu
Z0ZvclBhdGgoaW5kZXhQYXRoc1tyZXN1bHRJbmRleF0uZ2V0KCkpOwogICAgICAgICBOU1N0cmlu
ZyAqY29ycmVzcG9uZGluZ1VSTCA9IGNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdChjb3JlUmVz
dWx0LCBpZGVudGlmaWVyLCByZWZlcmVuY2VEYXRlLCAoTlNUaW1lWm9uZSAqKXR6LmdldCgpLCB0
eXBlcyk7Ci0gICAgICAgIGJvb2wgZGlkTW9kaWZ5RE9NID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5r
cyhyZXN1bHRSYW5nZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdlcy5sYXN0
KCkuZW5kLmNvbnRhaW5lciwgZGlkTW9kaWZ5RE9NKSkKKyAgICAgICAgaWYgKCFjb3JyZXNwb25k
aW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhyZXN1bHRSYW5n
ZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdlcy5sYXN0KCkuZW5kLmNvbnRh
aW5lcikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkaWRN
b2RpZnlET00pIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBET00gd2FzIG1vZGlmaWVkIGJlY2F1
c2Ugc29tZSBvbGQgbGlua3Mgd2VyZSByZW1vdmVkLAotICAgICAgICAgICAgLy8gd2UgbmVlZCB0
byByZWNyZWF0ZSB0aGUgcmFuZ2VzIGJlY2F1c2UgdGhleSBjb3VsZCBubyBsb25nZXIgYmUgdmFs
aWQuCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0UmFuZ2VzLnNpemUoKSA9PSByYW5nZUJvdW5k
YXJpZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdFJhbmdlcy5zaHJpbmsoMCk7IC8vIEtl
ZXAgY2FwYWNpdHkgYXMgd2UgYXJlIGdvaW5nIHRvIHJlcG9wdWxhdGUgdGhlIFZlY3RvciByaWdo
dCBhd2F5IHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLgotICAgICAgICAgICAgZm9yIChh
dXRvJiByYW5nZUJvdW5kYXJ5IDogcmFuZ2VCb3VuZGFyaWVzKQotICAgICAgICAgICAgICAgIHJl
c3VsdFJhbmdlcy51bmNoZWNrZWRBcHBlbmQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocmFuZ2VCb3Vu
ZGFyeS5maXJzdCksICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LnNlY29uZCkgfSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQg
PSBxdWVyeVJhbmdlLmVuZDsKICAgICAgICAgQk9PTCBzaG91bGRVc2VMaWdodExpbmtzID0gc29m
dExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTaG91bGRVc2VMaWdodExpbmtzRm9yUmVzdWx0KGNv
cmVSZXN1bHQsIFtpbmRleFBhdGhzW3Jlc3VsdEluZGV4XSBsZW5ndGhdID4gMSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCBi
Y2NiMGYwMDgyN2I5ZWE0NDc0OWY3MGQ5ZDQ1ZDg2YmQwOWE1MzZjLi4zYzEyMzE5ZmFiMDg2NzU5
NTllNTNjZDhlNzlhYjM0M2QxMWE3YmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC00MSw3ICs0MSw2IEBACiAjaW1wb3J0ICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgogI2ltcG9ydCAiUGFn
ZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgogI2ltcG9y
dCAiVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTI3OSwx
NSArMjc4LDE1IEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFy
eSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlCiAgICAgaWYgKHBhcmFncmFwaFN0
YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKLSAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNv
dW50ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKKyAgICBhdXRvIGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHBhcmFncmFw
aFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkpOworICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291
bnQgPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpKTsKICAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3Ro
VG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQpOwogCi0gICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBh
cmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoKmZ1bGxDaGFy
YWN0ZXJSYW5nZSk7CisgICAgYXV0byBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSAqbWFrZVNpbXBsZVJh
bmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgIFN0cmluZyBpdGVtU3RyaW5n
ID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZSk7CiAgICAgTlNSYW5nZSBoaWdobGlnaHRS
YW5nZSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0
cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSkuZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CiAK
LSAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3RlclJhbmdl
LCBoaWdobGlnaHRSYW5nZSksIG5pbCB9IH07CisgICAgcmV0dXJuIHsgeyByZXNvbHZlQ2hhcmFj
dGVyUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZSksIG5pbCB9IH07CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKQEAgLTMyOCwyOSArMzI3LDIzIEBAIE9w
dGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0
aW9uLnZpc2libGVFbmQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcg
dG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8g
cGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVj
dGlvblN0YXJ0KSk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7Ci0gICAgICAgIGlmICghcGFyYWdyYXBo
U3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpLCBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJS
YW5nZSA9IHsgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQgfSB9OwotICAgICAgICBz
ZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0
YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAotICAgICAgICAgICAg
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KSk7Ci0gICAgICAgIGhpdEluZGV4ID0gY2hh
cmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bikgfSk7CisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291
bnQoKm1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBzZWxlY3Rpb25T
dGFydCkpLAorICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSkpOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgcG9zaXRp
b24pKTsKICAgICB9IGVsc2UgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFj
Y291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5
OjpXb3JkR3JhbnVsYXJpdHkpOwogICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRp
bmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUg
cG9pbnQuCi0gICAgICAgIGF1dG8gZXhwYW5kZWRSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQ
b3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgaWYgKCFleHBhbmRl
ZFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBmdWxs
Q2hhcmFjdGVyUmFuZ2UgPSB7ICpleHBhbmRlZFJhbmdlIH07CisgICAgICAgIGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlv
biwgMjUwKTsKIAogICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgZnVsbENoYXJhY3Rl
clJhbmdlLT5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAg
aGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJS
YW5nZS0+c3RhcnQsIHBvc2l0aW9uKSk7CiAgICAgfQogCiAgICAgTlNSYW5nZSBzZWxlY3RlZFJh
bmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXgg
c2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1d
IHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRWRpdG9yQ29jb2EubW0KaW5kZXggZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThlNjllYTU5
YjU4NmI3Yi4uYjFmMWE4NjU1ZGJkYTI1MWIwOWNjZGVmYzUyNjA4NjRkMzQxY2E3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC05NCwxMCArOTQs
MTIgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50
KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBvdXRUeXBlcy5hcHBlbmQoUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKICAgICBvdXREYXRhLmFwcGVuZChQYXN0ZWJv
YXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5vcmlnaW5JZGVudGlmaWVyRm9yUGFz
dGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIoKSk7CiAKLSAgICBpZiAoYXV0byBh
cmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShlbGVtZW50
UmFuZ2UpLmdldCgpKSkgewotICAgICAgICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hp
dmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpKSB7Ci0gICAgICAgICAgICBvdXRUeXBlcy5hcHBl
bmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOwotICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hh
cmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICBpZiAoZWxlbWVu
dFJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGUoKmVsZW1lbnRSYW5nZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHdlYkFyY2hpdmVE
YXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAg
ICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOworICAgICAgICAgICAgICAg
IG91dERhdGEuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdlYkFyY2hpdmVEYXRhLmdldCgp
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCmluZGV4IDUx
YWUyMzQwY2UzNzkzZTcxMWNhOGZkMmQ5NzU0ODQyODkyMjkxMzguLjI4NzMzZWVlYTM3NmNmOGZl
MDgxNzU0NDcwZWIzMzE4NTRhZGU0MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC01Myw2ICs1Myw3IEBACiAj
aW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQdWJsaWNVUkxNYW5hZ2VyLmgiCiAjaW1wb3J0ICJR
dWlya3MuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1w
b3J0ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW1wb3J0ICJTZXJpYWxpemVkQXR0YWNo
bWVudERhdGEuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHAKaW5kZXggOGFjNzY5NDAyMDkzNTBmZjQzYWVjMTQ0ZDMzYWQ2MTYwMTI2
ZTQzNS4uZWM4MGJiYWM4NDdiOTc0MDViZWI1NTU5Y2MyYTUxMGQ0MTcwOGEzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAg
LTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNGYyNzJlZWU4MTM4MTQw
YzliMzY1Y2EyMTE3M2Y2YjM0MDk0ZjIxZi4uODc2MTIwYmIwOWIxMmUwOWU0ZGVjYTU4ZTU1NGQz
MDI3MDFlZjQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlv
bmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC04NiwxNiArODYsMTQgQEAgT3B0aW9uYWw8c3RkOjp0
dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7
CiAKICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGlu
ZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBhdXRvIHBh
cmFncmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVu
ZCkpOwotICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICBhdXRv
IHBhcmFncmFwaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uU3RhcnQpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICBpZiAoIXBhcmFn
cmFwaFJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0
YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKLSAgICBhdXRvIHBhcmFn
cmFwaFJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQg
fTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25T
dGFydCwgc2VsZWN0aW9uRW5kKTsKIAogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsK
LSAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSksIGNoYXJhY3RlclJhbmdl
KHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKKyAgICB0b2tlblJh
bmdlKHBsYWluVGV4dCgqcGFyYWdyYXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZSgqcGFyYWdyYXBo
UmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlvbnMpOwogCiAgICAgcmV0dXJuIHsgeyAqc2Vs
ZWN0ZWRSYW5nZSwgb3B0aW9ucyB9IH07CiB9CkBAIC0xMzMsMTIgKzEzMSwxMSBAQCBPcHRpb25h
bDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZQogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBmdWxsQ2hhcmFjdGVyU3RhcnQgPSBtYWtl
Qm91bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAg
YXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAg
IGlmICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJvdW5kYXJ5KQorICAgIGF1dG8g
cmFuZ2VUb1Bvc2l0aW9uID0gbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3Rh
cnQsIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9Qb3NpdGlvbikKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShj
aGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVyU3RhcnQsICpwb3NpdGlvbkJvdW5kYXJ5IH0p
LCAwKTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291
bnQoKnJhbmdlVG9Qb3NpdGlvbiksIDApOwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5p
bDsKICAgICBhdXRvIGV4dHJhY3RlZFJhbmdlID0gdG9rZW5SYW5nZShwbGFpblRleHQoKmZ1bGxD
aGFyYWN0ZXJSYW5nZSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCBiYTMxYzE4NzczMjM0YjlhZDkzOWFkMGQzMzE5
MzE4YzYyZDhiM2JkLi5lNzMyNWM1MjRhZmZhYjRjNmE3YWQyMGVjNDJhY2M2MDJmZTdmNTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC00NSw3ICs0NSw2IEBA
CiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRlZ3kuaCIK
ICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBv
cnQgIlJlbmRlckJsb2NrLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXgg
ZDU3NGE0OTc3YTg3YTRiMWQyMWViYzIyODU0NjE0ZjU3YTg5MjdjZC4uYjYwMjUyNWQyZDMxNGVj
N2MzNWRlYWJlNGQyN2I0MDE1MjVlYTJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApA
QCAtNDUxLDEyICs0NTEsOCBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRl
cmVkVGV4dFJlc3BlY3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0KQogICAgICAgICAgICAgYmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JCZWhhdmVzQXNJZk5vZGVzRm9sbG93aW5nOwogICAgIH0KIAot
ICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBh
dXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0
Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LQotICAgIHJldHVybiBwbGFpblRleHQoeyBXVEZNb3ZlKCpzdGFydEJvdW5kYXJ5KSwgV1RGTW92
ZSgqZW5kQm91bmRhcnkpIH0sIGJlaGF2aW9yKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBs
ZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2Us
IGJlaGF2aW9yKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4dCkKQEAg
LTkzOCw5ICs5MzQsMTAgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICByZXR1cm4gYWNj
dW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdW
aXN1YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMs
IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIENvbnZlcnRCbG9ja3NUb0lubGluZXMg
Y29udmVydEJsb2Nrc1RvSW5saW5lcywgUmVzb2x2ZVVSTHMgdXJsc1RvUmVzbHZlKQorU3RyaW5n
IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3Rh
dGUsIENvbnZlcnRCbG9ja3NUb0lubGluZXMgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmVzb2x2
ZVVSTHMgdXJsc1RvUmVzbHZlKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZUludGVybmFsKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9z
aXRpb24oKSwgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywK
KyAgICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSwKKyAgICAgICAgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObywKICAgICAgICAgYW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMsIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlOjpLZWVwLCBNU09M
aXN0TW9kZTo6RG9Ob3RQcmVzZXJ2ZSk7CiB9CiAKQEAgLTExMTYsMjAgKzExMTMsMTYgQEAgYm9v
bCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKiBub2RlKQogICAgIHJldHVybiBpc1RhYlNwYW5UZXh0
Tm9kZShmaXJzdENoaWxkLT5maXJzdENoaWxkKCkpICYmIHNlY29uZENoaWxkLT5pc1RleHROb2Rl
KCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKGNvbnN0IFJhbmdl
JiBjb250ZXh0KQorc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05ld2xpbmUoY29uc3QgU2lt
cGxlUmFuZ2UmIGNvbnRleHQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uKGNvbnRl
eHQuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBOb2RlKiBjb250YWluZXIgPSBwb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29u
dGFpbmVyLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
Y29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOworICAgIGF1
dG8gY29udGFpbmVyID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihjb250ZXh0LnN0YXJ0KSkuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7CisgICAg
cmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXItPnJlbmRlcmVyKCkgJiYgY29udGFpbmVyLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwogfQogCi1SZWY8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQorUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQo
Y29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKLSAgICBSZWY8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1l
bnQoKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OwpAQCAtMTE2NSwxNCArMTE1OCwxNCBAQCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAg
IH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxpbmUgYnJl
YWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVu
Y2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOworICAgIE5vZGUqIGJsb2NrTm9kZSA9
IGVuY2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250ZXh0KS0+Zmlyc3ROb2RlKCkpOwog
ICAgIEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVudD4oYmxvY2tOb2RlKTsKICAgICBi
b29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9ja05vZGUKICAgICAgICAgJiYgYmxv
Y2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGJv
ZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAgICAgICAm
JiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb250ZXh0LnN0YXJ0UG9zaXRpb24o
KSk7Ci0gICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woY29u
dGV4dC5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RG
b3JQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCkpOwor
ICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7CiAKICAgICBWZWN0b3I8U3RyaW5n
PiBsaXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7CiAgICAgc2l6
ZV90IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAppbmRleCA4
NjU2N2Y0NTc4MGFhYmE1MWIzZWQ4MmEwOWE1MWUyMjAyNmEwMjZiLi44MjlmM2I5OGNiODIyNjg4
YjdmOWQ3NTNhNzMyODc1OTY0OTU2NDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKQEAgLTQ0
LDExICs0NCwxMSBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgTm9k
ZTsKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUHJlc2VudGF0aW9uU2l6ZTsKIGNsYXNzIFF1YWxpZmll
ZE5hbWU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK3N0cnVjdCBQ
cmVzZW50YXRpb25TaXplOworCiB2b2lkIHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoUmVmPERvY3Vt
ZW50RnJhZ21lbnQ+JiYsIEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz4mJik7CiB2b2lk
IHJlbW92ZVN1YnJlc291cmNlVVJMQXR0cmlidXRlcyhSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwg
V1RGOjpGdW5jdGlvbjxib29sKGNvbnN0IFVSTCYpPiBzaG91bGRSZW1vdmVVUkwpOwogCkBAIC01
Nyw3ICs1Nyw3IEBAIGVudW0gY2xhc3MgTVNPTGlzdFF1aXJrcyA6IGJvb2wgeyBDaGVja0lmTmVl
ZGVkLCBEaXNhYmxlZCB9OwogU3RyaW5nIHNhbml0aXplTWFya3VwKGNvbnN0IFN0cmluZyYsIE1T
T0xpc3RRdWlya3MgPSBNU09MaXN0UXVpcmtzOjpEaXNhYmxlZCwgT3B0aW9uYWw8V1RGOjpGdW5j
dGlvbjx2b2lkKERvY3VtZW50RnJhZ21lbnQmKT4+IGZyYWdtZW50U2FuaXRpemVyID0gV1RGOjpu
dWxsb3B0KTsKIFN0cmluZyBzYW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVm
PERvY3VtZW50RnJhZ21lbnQ+JiYsIERvY3VtZW50JiwgTVNPTGlzdFF1aXJrcywgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hbE1hcmt1cCk7CiAKLVdFQkNPUkVfRVhQT1JUIFJlZjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHRleHQpOworV0VCQ09SRV9FWFBPUlQgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4
dCk7CiBXRUJDT1JFX0VYUE9SVCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBF
eGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJP
dXRlckhUTUwoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBQYXJzZXJDb250ZW50UG9s
aWN5KTsKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvclRyYW5zZm9y
bVRvRnJhZ21lbnQoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3Qg
U3RyaW5nJiBzb3VyY2VNSU1FVHlwZSk7CkBAIC03Miw3ICs3Miw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUmVmPERvY3Vt
ZW50RnJhZ21lCiBlbnVtIGNsYXNzIFJlc29sdmVVUkxzIDogdWludDhfdCB7IE5vLCBZZXMsIFll
c0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5IH07CiBlbnVtIGNsYXNzIENvbnZlcnRC
bG9ja3NUb0lubGluZXMgOiB1aW50OF90IHsgTm8sIFllcyB9OwogZW51bSBjbGFzcyBTZXJpYWxp
emVDb21wb3NlZFRyZWUgOiB1aW50OF90IHsgTm8sIFllcyB9OwotV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiwgVmVj
dG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tz
VG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOworV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMg
PSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6
Tm8pOwogU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mLCBSZXNvbHZlVVJMcyA9IFJlc29sdmVVUkxzOjpObywgU2VyaWFsaXpl
Q29tcG9zZWRUcmVlID0gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywgVmVjdG9yPE5vZGUqPiog
PSBudWxscHRyKTsKIAogZW51bSBjbGFzcyBTZXJpYWxpemVkTm9kZXMgOiB1aW50OF90IHsgU3Vi
dHJlZUluY2x1ZGluZ05vZGUsIFN1YnRyZWVzT2ZDaGlsZHJlbiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9u
RWxlbWVudE1hYy5jcHAKaW5kZXggNmQ4MDFhNjE1ZjExNmI0ZDU5NjI3ZTI4OWFhNjNlZDE2ZjZj
ZWFlYy4uNTg0ZWM2M2ZiMWJhNzQ4ZTNkZjlhOWM3NjQzZmFlZTdmN2JlNDE5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVt
ZW50TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250
cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiRnJh
bWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5j
cHAKaW5kZXggMDFhYjkxN2QwZGM5NzhjMzFmZWZmN2E5YTA5MGNkMDJiZjFkZDhkNi4uNjgzMDMx
Njg0MzM1ZDU5NjlkYmNiNDZlMTQ0ZmM5OTkzN2U3NWYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTQ4LDcg
KzQ4LDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ1NCwxOSArNDUzLDE2IEBAIFJlZlB0cjxMZWdh
Y3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoRnJhbWUmIGZyYW1lKQogICAg
IHJldHVybiBjcmVhdGUobWFpblJlc291cmNlLnJlbGVhc2VOb25OdWxsKCksIGRvY3VtZW50TG9h
ZGVyLT5zdWJyZXNvdXJjZXMoKSwgV1RGTW92ZShzdWJmcmFtZUFyY2hpdmVzKSk7CiB9CiAKLVJl
ZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UqIHJh
bmdlKQorUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0
LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1l
KCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/CiAg
ICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gZG9j
dW1lbnRUeXBlU3RyaW5nKGRvY3VtZW50KSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBl
YXJhbmNlKCpyYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOwor
ICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsg
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UocmFuZ2UsICZub2RlTGlzdCwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKTsKICAgICByZXR1cm4gY3JlYXRlKG1hcmt1cFN0cmlu
ZywgKmZyYW1lLCBub2RlTGlzdCwgbnVsbHB0cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAppbmRleCBiNTFjZjYxNmJm
MDgyZTI5NDA5YjQ0MjFhNDNjYjcxMTE0ODBhOTg5Li42N2FmYTgzZGM3YTliZjIyZjhlODk2NTFl
ZTllYzQzOTMyZjA2NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oCkBAIC0zNSw3ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CisKK3N0cnVj
dCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgTGVnYWN5V2ViQXJjaGl2ZSBmaW5hbCA6IHB1YmxpYyBB
cmNoaXZlIHsKIHB1YmxpYzoKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKE5vZGUmLCBXVEY6
OkZ1bmN0aW9uPGJvb2woRnJhbWUmKT4mJiBmcmFtZUZpbHRlciA9IHsgfSk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoRnJhbWUmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0
ZUZyb21TZWxlY3Rpb24oRnJhbWUqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRy
PExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShSYW5nZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJik7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiByYXdEYXRhUmVwcmVz
ZW50YXRpb24oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IGRmMTM1
YWY0MzlmZDdlNzY0MTc0N2JiNzM2N2M4NmI4ZGM1ZmY3MmMuLjU5ZWE0ZmJmN2U5ZTU1MmQyOTc3
MWJiMjVmMDY1ZGUxMDNjZGIxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAK
QEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJh
bmdlKQogCiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIGlm
IChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgc2VsZWN0aW9uLm1vdmVUbygmcmFuZ2Up
OworICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1Niw3ICszNTYsNyBAQCB2b2lkIERPTVNl
bGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAgICAgICAgIHNlbGVjdGlv
bi5tb3ZlVG8ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBub3JtYWxpemVkUmFuZ2UtPmVuZFBvc2l0
aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBUaGUgbmV3IHJhbmdlIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCByYW5nZS4KLSAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKCZyYW5nZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0
aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJhbmdlIH0pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIERPTVNlbGVj
dGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2Uu
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdl
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5h
bCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlv
bi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgKm5vcm1hbGl6ZWRSYW5nZSB9KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHJhbmdlcyBpbnRlcnNlY3Qu
CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhub3JtYWxpemVkUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOThhYWU4ZDc1NmQyMmQ4NzA4YmQ3YTYz
Y2VhZGI3ZWE1YzFlN2QuLmQxOGJkNWU0MmY3ODgyMmJkMjhiN2JmOTIwNjBiYjgxM2FlMjhlMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC03MSw2ICs3MSw3IEBA
CiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgIlByb21pc2VkQXR0YWNobWVudEluZm8uaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0yMzksNyArMjQwLDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRpb24oY29uc3QgRHJhZ0RhdGEmIGRy
YWdEYXRhKQogewogICAgIGlmICghbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMuaXNFbXB0eSgp
ICYmIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSAmJiB0cnlUb1VwZGF0ZURyb3BwZWRJ
bWFnZVBsYWNlaG9sZGVycyhkcmFnRGF0YSkpIHsKICAgICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlcnMuY2xlYXIoKTsKLSAgICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlID0gV1RG
OjpudWxsb3B0OwogICAgICAgICBtX2RvY3VtZW50VW5kZXJNb3VzZSA9IG51bGxwdHI7CiAgICAg
ICAgIGNsZWFyRHJhZ0NhcmV0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODU2LDkgKzg1
NywxMCBAQCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiAKIHN0YXRp
YyB2b2lkIHNlbGVjdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gZWxlbWVudC5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgcmFuZ2Ut
PnNlbGVjdE5vZGUoZWxlbWVudCk7Ci0gICAgZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVB
TSkpOworICAgIGlmIChhdXRvIGZyYW1lID0gZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGVsZW1lbnQp
KQorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigqcmFuZ2UpOwor
ICAgIH0KIH0KIAogc3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29uc3QgSW50
UG9pbnQmIG1vdXNlRHJhZ2dlZFBvaW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbiwgY29u
c3QgSW50UG9pbnQmIGRyYWdJbWFnZU9mZnNldCwgYm9vbCBpc0xpbmtJbWFnZSkKQEAgLTEzNzMs
NyArMTM3NSw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvU3lzdGVtRHJhZyhEcmFnSW1hZ2Ug
aW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnTG9jLCBjb25zCiAKIHZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OnJlbW92ZUFsbERyb3BwZWRJbWFnZVBsYWNlaG9sZGVycygpCiB7Ci0gICAgbV9kcm9wcGVk
SW1hZ2VQbGFjZWhvbGRlclJhbmdlID0gbnVsbHB0cjsKKyAgICBtX2Ryb3BwZWRJbWFnZVBsYWNl
aG9sZGVyUmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgZm9yIChhdXRvJiBwbGFjZWhvbGRlciA6
IHN0ZDo6ZXhjaGFuZ2UobV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMsIHsgfSkpIHsKICAgICAg
ICAgaWYgKHBsYWNlaG9sZGVyLT5pc0Nvbm5lY3RlZCgpKQogICAgICAgICAgICAgcGxhY2Vob2xk
ZXItPnJlbW92ZSgpOwpAQCAtMTQ1NSwxMyArMTQ1NywxMyBAQCB2b2lkIERyYWdDb250cm9sbGVy
OjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3RvcjxJbnRT
aXplPgogICAgIGF1dG8gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUo
KmRvY3VtZW50LCBXVEZNb3ZlKGZyYWdtZW50KSwgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
UHJldmVudE5lc3RpbmcsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJlcGxhY2UgfSwg
RWRpdEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApOwogICAgIGNvbW1hbmQtPmFwcGx5KCk7CiAKLSAg
ICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gY29tbWFuZC0+aW5zZXJ0ZWRDb250ZW50UmFu
Z2UoKTsKKyAgICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGNv
bW1hbmQtPmluc2VydGVkQ29udGVudFJhbmdlKCkpOwogICAgIGlmICghaW5zZXJ0ZWRDb250ZW50
UmFuZ2UpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIGNvbnRhaW5lciA9IG1ha2VSZWZQdHIoaW5zZXJ0ZWRDb250ZW50
UmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOworICAgIGF1dG8gY29udGFpbmVyID0g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmluc2VydGVkQ29udGVudFJhbmdlKTsKICAgICBpZiAo
IWlzPENvbnRhaW5lck5vZGU+KGNvbnRhaW5lcikpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjksNyArMTQ3MSw3IEBAIHZvaWQgRHJhZ0Nv
bnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVj
dG9yPEludFNpemU+CiAKICAgICBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiBwbGFjZWhv
bGRlcnM7CiAgICAgZm9yIChhdXRvJiBwbGFjZWhvbGRlciA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhU
TUxJbWFnZUVsZW1lbnQ+KGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpjb250YWluZXIpKSkgewot
ICAgICAgICBhdXRvIGludGVyc2VjdHNOb2RlID0gaW5zZXJ0ZWRDb250ZW50UmFuZ2UtPmludGVy
c2VjdHNOb2RlKHBsYWNlaG9sZGVyKTsKKyAgICAgICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGNy
ZWF0ZUxpdmVSYW5nZSgqaW5zZXJ0ZWRDb250ZW50UmFuZ2UpLT5pbnRlcnNlY3RzTm9kZShwbGFj
ZWhvbGRlcik7CiAgICAgICAgIGlmICghaW50ZXJzZWN0c05vZGUuaGFzRXhjZXB0aW9uKCkgJiYg
aW50ZXJzZWN0c05vZGUucmV0dXJuVmFsdWUoKSkKICAgICAgICAgICAgIHBsYWNlaG9sZGVycy5h
cHBlbmQocGxhY2Vob2xkZXIpOwogICAgIH0KQEAgLTE0OTMsNyArMTQ5NSw3IEBAIHZvaWQgRHJh
Z0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3Qg
VmVjdG9yPEludFNpemU+CiAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlID0gV1RG
TW92ZShpbnNlcnRlZENvbnRlbnRSYW5nZSk7CiAKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuY2xl
YXIoKTsKLSAgICBjYXJldENvbnRyb2xsZXIuc2V0Q2FyZXRQb3NpdGlvbihtX2Ryb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgY2FyZXRDb250cm9sbGVy
LnNldENhcmV0UG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fZHJvcHBlZElt
YWdlUGxhY2Vob2xkZXJSYW5nZS0+c3RhcnQpKTsKIH0KIAogdm9pZCBEcmFnQ29udHJvbGxlcjo6
ZmluYWxpemVEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcihIVE1MSW1hZ2VFbGVtZW50JiBwbGFjZWhv
bGRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAppbmRleCA5MjI0YWIyMDZjZGZl
YmI1M2YxMWM3OGEzZWFlMjA4MTNjZmRkMjZjLi5lMzAwZDMyOGQ1NzllZGIxNzFmMDNlMjAwOGYx
NGQ4YjdlYmY2NDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRl
IDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg5LDcgKzkwLDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxhY2VEcmFnQ2FyZXQoY29uc3QgSW50UG9p
bnQmKTsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+JiBkcm9wcGVk
SW1hZ2VQbGFjZWhvbGRlcnMoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9s
ZGVyczsgfQotICAgIGNvbnN0IFJlZlB0cjxSYW5nZT4mIGRyb3BwZWRJbWFnZVBsYWNlaG9sZGVy
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7IH0K
KyAgICBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGRyb3BwZWRJbWFnZVBsYWNlaG9sZGVy
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7IH0K
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmluYWxpemVEcm9wcGVkSW1hZ2VQbGFjZWhvbGRl
cihIVE1MSW1hZ2VFbGVtZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnREcm9w
cGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3RvcjxJbnRTaXplPiYgaW1hZ2VT
aXplcyk7CkBAIC0xNjEsNyArMTYyLDcgQEAgcHJpdmF0ZToKICAgICBVUkwgbV9kcmFnZ2luZ0lt
YWdlVVJMOwogICAgIGJvb2wgbV9pc1BlcmZvcm1pbmdEcm9wIHsgZmFsc2UgfTsKICAgICBWZWN0
b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyczsKLSAg
ICBSZWZQdHI8UmFuZ2U+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsKKyAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOwogfTsKIAog
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RyYWdnYWJsZUxpbmsoY29uc3QgRWxlbWVudCYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVlZGE4MzBlY2Y0NjVkMGRkMGIyNDdm
YWUwMDIwYzVlMjUyZWI4ZTAuLjk2NzU1ODFmOTNmOGQyMWU4NzA0MDc4OGU2ZDlhZjAxNGI1MzM1
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY3NSwxMSArNjc1LDEw
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhj
b25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAKIHN0YXRpYyB1aW50NjRfdCB0ZXh0RGlzdGFu
Y2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1
dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRvIGVu
ZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRh
cnkgfHwgIWVuZEJvdW5kYXJ5KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Rh
cnQsIGVuZCk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9LCBUZXh0SXRl
cmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgcmV0
dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDM1NTFiNGQ2MmI4NDYwZGJjNjE3
NGI3ZGU1ZjJiOWYzODNhZjA3NWIuLjY0MTA1NDhkNDIyMjM3N2MxNDEzODYxY2I1ZDkwMjQyNTNk
ZWQ3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MTksMjQgKzgxOSwxOSBAQCBEb2N1bWVu
dCogRnJhbWU6OmRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiBSZWZQdHI8
UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQog
ewogICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50
KTsKLSAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bik7Ci0gICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29u
dGFpbmVyVGV4dCgpOwogICAgIGlmICghY29udGFpbmVyVGV4dCB8fCAhY29udGFpbmVyVGV4dC0+
cmVuZGVyZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxl
Y3QoKSA9PSBVc2VyU2VsZWN0OjpOb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGlmIChhdXRvIHByZXZpb3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ucHJldmlvdXMo
KSkpIHsKLSAgICAgICAgYXV0byBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2Ug
eyAqcHJldmlvdXMsICpwb3NpdGlvbkJvdW5kYXJ5IH07Ci0gICAgICAgIGlmIChlZGl0b3IoKS5m
aXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBv
aW50KSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocHJldmlvdXNDaGFyYWN0
ZXJSYW5nZSk7CisgICAgaWYgKGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VTaW1w
bGVSYW5nZShwb3NpdGlvbi5wcmV2aW91cygpLCBwb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKGVk
aXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlu
cyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnByZXZp
b3VzQ2hhcmFjdGVyUmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvIG5leHQgPSBtYWtlQm91
bmRhcnlQb2ludChwb3NpdGlvbi5uZXh0KCkpKSB7Ci0gICAgICAgIGF1dG8gbmV4dENoYXJhY3Rl
clJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcG9zaXRpb25Cb3VuZGFyeSwgKm5leHQgfTsKLSAgICAg
ICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZSkuY29u
dGFpbnMoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG5l
eHRDaGFyYWN0ZXJSYW5nZSk7CisgICAgaWYgKGF1dG8gbmV4dENoYXJhY3RlclJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbi5uZXh0KCkpKSB7CisgICAgICAgIGlmIChl
ZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKS5jb250YWlucyhm
cmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKm5leHRDaGFy
YWN0ZXJSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAppbmRleCAwZTJhNzdiOGRjMzU1ZTYzZTM0OTVhMmIxODkyYzc1NzVhYTg0OGVmLi44MDVmM2Qx
ZDg5NjVhYmE1MTk0NjYwM2U3NGM5OTFhNmQyOTNkMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAg
LTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNr
ZXIuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCkBAIC03MTEsMTIgKzcxMiwxMCBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmco
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdy
YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdS
YW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGludCBsaW1p
dCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdlcywgaW50JiBpbmRleEZvclNlbGVj
dGlvbikKK2F1dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsaW1pdCkgLT4gTWF0Y2hpbmdSYW5nZXMKIHsK
ICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJlc3VsdFJhbmdlczsKIAotICAgIGluZGV4Rm9yU2Vs
ZWN0aW9uID0gMDsKLQogICAgIEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFt
ZSogZnJhbWVXaXRoU2VsZWN0aW9uID0gbnVsbHB0cjsKICAgICBkbyB7CkBAIC03MjcsMTAgKzcy
NiwxMSBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcm
IHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgIH0gd2hpbGUgKGZyYW1lKTsKIAog
ICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gaW5kZXhGb3JTZWxlY3Rpb247
CiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7Ci0gICAgICAgIGluZGV4Rm9yU2VsZWN0
aW9uID0gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbjsKICAgICAgICAgYXV0byBzZWxlY3RlZFJh
bmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJh
bmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHRSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7
CkBAIC03NTYsMzUgKzc1NiwzNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdl
cyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICAg
ICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcmFuZ2Ug
OiByZXN1bHRSYW5nZXMpCi0gICAgICAgIG1hdGNoUmFuZ2VzLmFwcGVuZChjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpKTsKKyAgICBpZiAoIWluZGV4Rm9yU2VsZWN0aW9uKQorICAgICAgICBpbmRleEZv
clNlbGVjdGlvbiA9IHJlc3VsdFJhbmdlcy5zaXplKCk7CisKKyAgICByZXR1cm4geyBXVEZNb3Zl
KHJlc3VsdFJhbmdlcyksICppbmRleEZvclNlbGVjdGlvbiB9OwogfQogCi1SZWZQdHI8UmFuZ2U+
IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVu
Y2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBQYWdl
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VS
YW5nZS0+b3duZXJEb2N1bWVudCgpLnBhZ2UoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIENhbldyYXAgY2FuV3JhcCA9IG9wdGlvbnMuY29udGFpbnMoV3JhcEFy
b3VuZCkgPyBDYW5XcmFwOjpZZXMgOiBDYW5XcmFwOjpObzsKLSAgICBGcmFtZSogZnJhbWUgPSBy
ZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSA6
ICZtYWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVy
ZW5jZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtYWluRnJh
bWUoKTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOwogICAgIGRvIHsKLSAgICAgICAg
aWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJn
ZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyBtYWtlU2ltcGxlUmFuZ2UocmVmZXJlbmNlUmFuZ2Up
IDogV1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCi0gICAgICAgICAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0
UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0
YXJ0RnJhbWUgPyByZWZlcmVuY2VSYW5nZSA6IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBB
cm91bmQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdlOwogICAgICAgICBmcmFtZSA9
IGluY3JlbWVudEZyYW1lKGZyYW1lLCAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpLCBjYW5X
cmFwKTsKICAgICB9IHdoaWxlIChmcmFtZSAmJiBmcmFtZSAhPSBzdGFydEZyYW1lKTsKIAogICAg
IC8vIFNlYXJjaCBjb250ZW50cyBvZiBzdGFydEZyYW1lLCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0
aGUgcmVmZXJlbmNlIHJhbmdlIHRoYXQgd2UgZGlkIGVhcmxpZXIuCiAgICAgLy8gV2UgY2hlYXQg
YSBiaXQgYW5kIGp1c3Qgc2VhcmNoIGFnYWluIHdpdGggd3JhcCBvbi4KICAgICBpZiAoY2FuV3Jh
cCA9PSBDYW5XcmFwOjpZZXMgJiYgcmVmZXJlbmNlUmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8g
cmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwg
bWFrZVNpbXBsZVJhbmdlKCpyZWZlcmVuY2VSYW5nZSksIG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwg
U3RhcnRJblNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJl
c3VsdFJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5l
ZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zIHwg
V3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dFJhbmdlOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKIHVuc2lnbmVkIFBhZ2U6OmZpbmRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJp
bmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCwg
U2hvdWxkSGlnaGxpZ2h0TWF0Y2hlcyBzaG91bGRIaWdobGlnaHRNYXRjaGVzLCBTaG91bGRNYXJr
TWF0Y2hlcyBzaG91bGRNYXJrTWF0Y2hlcykKQEAgLTg3OSwyNCArODgxLDIyIEBAIHN0YXRpYyB2
b2lkIHJlcGxhY2VSYW5nZXMoUGFnZSYgcGFnZSwgY29uc3QgVmVjdG9yPEZpbmRSZXBsYWNlbWVu
dFJhbmdlPiYgcmFuZ2VzCiAgICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIERPV05TVFJFQU0s
IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgICAgICAgICBmcmFtZS0+
ZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VtZW50VGV4dCwgRWRpdG9y
OjpTZWxlY3RSZXBsYWNlbWVudDo6WWVzLCBFZGl0b3I6OlNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRB
Y3Rpb246Okluc2VydFJlcGxhY2VtZW50KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdWludDMy
X3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYg
cmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxl
Y3Rpb25Pbmx5KQordWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZl
Y3RvcjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFRleHQsIGJvb2wgLypzZWxlY3Rpb25Pbmx5Ki8pCiB7Ci0gICAgLy8gRklYTUU6IEluIHRo
ZSBmdXR1cmUsIHdlIHNob3VsZCByZXNwZWN0IHRoZSBgc2VsZWN0aW9uT25seWAgZmxhZyBieSBj
aGVja2luZyB3aGV0aGVyIGVhY2ggcmFuZ2UgYmVpbmcgcmVwbGFjZWQgaXMKLSAgICAvLyBjb250
YWluZWQgd2l0aGluIGl0cyBmcmFtZSdzIHNlbGVjdGlvbi4KLSAgICBVTlVTRURfUEFSQU0oc2Vs
ZWN0aW9uT25seSk7CisgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCByZXNw
ZWN0IHRoZSBgc2VsZWN0aW9uT25seWAgZmxhZyBieSBjaGVja2luZyB3aGV0aGVyIGVhY2ggcmFu
Z2UgYmVpbmcgcmVwbGFjZWQgaXMgY29udGFpbmVkIHdpdGhpbiBpdHMgZnJhbWUncyBzZWxlY3Rp
b24uCiAKICAgICBWZWN0b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Vz
OwogICAgIHJlcGxhY2VtZW50UmFuZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmFuZ2VzVG9S
ZXBsYWNlLnNpemUoKSk7CiAKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmFuZ2VzVG9SZXBsYWNl
KSB7Ci0gICAgICAgIGF1dG8gaGlnaGVzdFJvb3QgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJs
ZVJvb3QocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgICAgICBpZiAoIWhpZ2hlc3RSb290
IHx8IGhpZ2hlc3RSb290ICE9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocmFuZ2UtPmVuZFBvc2l0aW9u
KCkpIHx8ICFoaWdoZXN0Um9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBhdXRvIGhp
Z2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290KGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCkpKTsKKyAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8
fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS5lbmQpKSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKCpoaWdoZXN0Um9vdCk7CiAgICAgICAgIHJlcGxhY2VtZW50UmFu
Z2VzLmFwcGVuZCh7IFdURk1vdmUoaGlnaGVzdFJvb3QpLCBjaGFyYWN0ZXJSYW5nZShzY29wZSwg
cmFuZ2UpIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA5ZDhmOGZiNTNmODNhNjY3NTAxNjNlOWYwMzQ0
MjE3MDEzZjZiMzdjLi5jZmZhNmM5YjYwYjczM2Y4NWFiMTY0NjBhNzUxNGYzMjU3ZTM3MWM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaApAQCAtMTI5LDcgKzEyOSw2IEBAIGNsYXNzIFBsdWdpblZpZXdCYXNlOwog
Y2xhc3MgUG9pbnRlckNhcHR1cmVDb250cm9sbGVyOwogY2xhc3MgUG9pbnRlckxvY2tDb250cm9s
bGVyOwogY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiBjbGFzcyBSZXNvdXJjZVVzYWdlT3ZlcmxheTsKIGNsYXNzIFNjcm9sbExhdGNoaW5n
U3RhdGU7CkBAIC0xNTIsNiArMTUxLDggQEAgY2xhc3MgV2ViR0xTdGF0ZVRyYWNrZXI7CiBjbGFz
cyBXaGVlbEV2ZW50RGVsdGFGaWx0ZXI7CiBjbGFzcyBXaGVlbEV2ZW50VGVzdE1vbml0b3I7CiAK
K3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJf
dDsKIHVzaW5nIFNoYXJlZFN0cmluZ0hhc2ggPSB1aW50MzJfdDsKIApAQCAtMjg5LDEyICsyOTAs
MTIgQEAgcHVibGljOgogICAgIGJvb2wgdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7IH0KIAogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgRGlk
V3JhcCogPSBudWxscHRyKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCByZXBsYWNlUmFu
Z2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFJlZjxSYW5nZT4+JiByYW5nZXNUb1JlcGxhY2UsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpOworICAgIFdF
QkNPUkVfRVhQT1JUIHVpbnQzMl90IHJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8
U2ltcGxlUmFuZ2U+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRU
ZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpOwogICAgIFdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcm
LCBSYW5nZSosIEZpbmRPcHRpb25zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHNlYXJjaFJhbmdlLCBGaW5kT3B0aW9ucyk7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1
bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBtYXJr
QWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIGJvb2wgc2hvdWxk
SGlnaGxpZ2h0LCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKQEAgLTMwNCwxMyArMzA1LDE2IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQmVmb3JlUHJpbnRFdmVu
dCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hBZnRlclByaW50RXZlbnQoKTsK
IAotICAgIC8vIEZpbmQgYWxsIHRoZSBSYW5nZXMgZm9yIHRoZSBtYXRjaGluZyB0ZXh0LgorICAg
IC8vIEZpbmQgYWxsIHRoZSByYW5nZXMgZm9yIHRoZSBtYXRjaGluZyB0ZXh0LgogICAgIC8vIFVw
b24gcmV0dXJuLCBpbmRleEZvclNlbGVjdGlvbiB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5n
OgotICAgIC8vIDAgaWYgdGhlcmUgaXMgbm8gdXNlciBzZWxlY3Rpb24KLSAgICAvLyB0aGUgaW5k
ZXggb2YgdGhlIGZpcnN0IHJhbmdlIGFmdGVyIHRoZSB1c2VyIHNlbGVjdGlvbgotICAgIC8vIE5v
TWF0Y2hBZnRlclVzZXJTZWxlY3Rpb24gaWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgdGV4dCBhZnRl
ciB0aGUgdXNlciBzZWxlY3Rpb24uCi0gICAgZW51bSB7IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rp
b24gPSAtMSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmluZFN0cmluZ01hdGNoaW5nUmFu
Z2VzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBpbnQgbWF4Q291bnQsIFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiYsIGludCYgaW5kZXhGb3JTZWxlY3Rpb24pOworICAgIC8vICAwIGlmIHRoZXJl
IGlzIG5vIHVzZXIgc2VsZWN0aW9uLAorICAgIC8vICBpbmRleCBvZiB0aGUgZmlyc3QgcmFuZ2Ug
YWZ0ZXIgdGhlIHVzZXIgc2VsZWN0aW9uLAorICAgIC8vICBzaXplIG9mIHRoZSByYW5nZSB2ZWN0
b3IgaWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgdGV4dCBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24u
CisgICAgc3RydWN0IE1hdGNoaW5nUmFuZ2VzIHsKKyAgICAgICAgVmVjdG9yPFNpbXBsZVJhbmdl
PiByYW5nZXM7CisgICAgICAgIHVuc2lnbmVkIGluZGV4Rm9yU2VsZWN0aW9uIHsgMCB9OworICAg
IH07CisgICAgV0VCQ09SRV9FWFBPUlQgTWF0Y2hpbmdSYW5nZXMgZmluZFRleHRNYXRjaGVzKGNv
bnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhDb3VudCk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZGQ5NDJlOTI0OGQ1ZDcyMzUyZDRiNWIyNTkwYzhi
NmFmZDU4NzgyMC4uOWU2MjEwOTZkYTJlMmY3YmY1YWU3MGU4YTNlZGZiNGM2ZDg1MmEwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0yMjQsNyArMjI0LDcgQEAgc3Rh
dGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgRnIKICAgICBhdXRvIGVzdGltYXRlZEJhY2tncm91bmRDb2xvciA9
IGZyYW1lLnZpZXcoKSA/IGZyYW1lLnZpZXcoKS0+ZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSA6
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIg
PSBudWxscHRyOwotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpOworICAgIGF1
dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZSk7CiAgICAg
d2hpbGUgKGNvbW1vbkFuY2VzdG9yKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJFbGVtZW50Pihj
b21tb25BbmNlc3Rvci0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIHJlbmRlcmVyID0gZG93
bmNhc3Q8UmVuZGVyRWxlbWVudD4oY29tbW9uQW5jZXN0b3ItPnJlbmRlcmVyKCkpOwpAQCAtMzA5
LDcgKzMwOSw3IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRv
ckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltCiAKICAgICBib29sIHVzZUJvdW5k
aW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgPSBkYXRhLm9wdGlvbnMu
Y29udGFpbnMoVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlcyk7CiAgICAgaWYgKHVzZUJvdW5kaW5nUmVjdEFuZFBhaW50
QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgJiYgY29udGFpbnNPbmx5V2hpdGVTcGFjZVRleHQo
cmFuZ2UpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5l
ciktPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRhaW5lclJlbmRlcmVyID0g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAg
ICBkYXRhLm9wdGlvbnMuYWRkKFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxsQ29udGVudCk7
CiAgICAgICAgICAgICB0ZXh0UmVjdHMuYXBwZW5kKGNvbnRhaW5lclJlbmRlcmVyLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlP
Uy5tbQppbmRleCAzZDdhNWU5ZDk2MmNkNzAzOTNjZmRmMzViOGRlMDlmYzgxMDNjMjk2Li44N2Rk
MWYzZTY4MTg2NDVkODE0N2IwZWQ0ZTM2NTM5OGMzZDExMTU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbQpAQCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCAiUGFnZVRyYW5zaXRpb25F
dmVudC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRl
ckxheWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbXBvcnQgIlJl
bmRlclRleHRDb250cm9sLmgiCkBAIC0xMTUsMjAgKzExNiwxOSBAQCBOU0FycmF5ICpGcmFtZTo6
d29yZHNJbkN1cnJlbnRQYXJhZ3JhcGgoKSBjb25zdAogICAgICAgICByZXR1cm4gbmlsOwogCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uKHBhZ2UoKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwg
cGFnZSgpLT5zZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5k
KHBvc2l0aW9uKTsKKworICAgIGF1dG8gZW5kID0gcG9zaXRpb247CiAgICAgaWYgKCFpc1N0YXJ0
T2ZQYXJhZ3JhcGgoZW5kKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBl
bmQucHJldmlvdXMoKTsKLSAgICAgICAgVUNoYXIgYyhwcmV2aW91cy5jaGFyYWN0ZXJBZnRlcigp
KTsKKyAgICAgICAgVUNoYXIgYyA9IHByZXZpb3VzLmNoYXJhY3RlckFmdGVyKCk7CisgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgdXNlIHNvbWV0aGluZyBmcm9tIElDVSBvciBBU0NJSUNUeXBlIHRo
YXQgaXMgbm90IHN1YmplY3QgdG8gUE9TSVggY3VycmVudCBsYW5ndWFnZSByYXRoZXIgdGhhbiBp
c3dwdW5jdC4KICAgICAgICAgaWYgKCFpc3dwdW5jdChjKSAmJiAhaXNTcGFjZU9yTmV3bGluZShj
KSAmJiBjICE9IG5vQnJlYWtTcGFjZSkKICAgICAgICAgICAgIGVuZCA9IHN0YXJ0T2ZXb3JkKGVu
ZCk7CiAgICAgfQogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzdGFydE9mUGFyYWdyYXBoKGVu
ZCkpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoKmRv
Y3VtZW50KCkpKTsKLSAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgc3RhcnQpOwotICAg
IHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgZW5kKTsKLQotICAgIGlmIChzZWFyY2hSYW5nZS0+
Y29sbGFwc2VkKCkpCisgICAgYXV0byBzZWFyY2hSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFy
dCwgZW5kKTsKKyAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQo
KSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIE5TTXV0YWJsZUFycmF5ICp3b3JkcyA9IFtO
U011dGFibGVBcnJheSBhcnJheV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAKaW5kZXggNDA2ZDViZTkyOWQ1M2ExOTc0MjAwYjk0ODNmZDQxYTY2ZDM1NmZlZS4u
MTdhZmVhYzE0NDJkYmUxYTY2MzlkNzE0NGUxNWE2MGQ2ZGI3Y2UyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNTc5LDExICs1NzksOCBAQCBib29s
IEhpdFRlc3RSZXN1bHQ6OmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25z
dAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25E
aXJlY3Rpb246OkZvcndhcmQpOwotICAgIGlmICghd29yZFJhbmdlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gIXdvcmRSYW5nZS0+dGV4dCgpLmlzRW1wdHkoKTsKKyAgICBh
dXRvIHdvcmRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwg
VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9y
d2FyZCk7CisgICAgcmV0dXJuIHdvcmRSYW5nZSAmJiBoYXNBbnlQbGFpblRleHQoKndvcmRSYW5n
ZSk7CiB9CiAKIFVSTCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcApp
bmRleCBiOWM1ODdjY2JlYjAyZDI2ZmZmNjcxNzY4ZjI2ZTRkNjdlZjQwODllLi41OTAzYzA1NzI1
YzU2ZTdlZWU5ZTQxMWI0NjMzZmZhNDdjYTVkN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcApAQCAtMzMsNiArMzMsOCBAQAog
I2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCIKICNpbmNsdWRlICJXS0J1bmRs
ZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1JhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogCiBXS1R5cGVJ
RCBXS1dlYkFyY2hpdmVHZXRUeXBlSUQoKQogewpAQCAtNTMsNyArNTUsNyBAQCBXS1dlYkFyY2hp
dmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlV2l0aERhdGEoV0tEYXRhUmVmIGRhdGFSZWYpCiAKIFdL
V2ViQXJjaGl2ZVJlZiBXS1dlYkFyY2hpdmVDcmVhdGVGcm9tUmFuZ2UoV0tCdW5kbGVSYW5nZUhh
bmRsZVJlZiByYW5nZUhhbmRsZVJlZikKIHsKLSAgICBhdXRvIHdlYkFyY2hpdmUgPSBBUEk6Oldl
YkFyY2hpdmU6OmNyZWF0ZShXZWJLaXQ6OnRvSW1wbChyYW5nZUhhbmRsZVJlZiktPmNvcmVSYW5n
ZSgpKTsKKyAgICBhdXRvIHdlYkFyY2hpdmUgPSBBUEk6OldlYkFyY2hpdmU6OmNyZWF0ZShtYWtl
U2ltcGxlUmFuZ2UoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5jb3JlUmFuZ2UoKSkp
OwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZ3ZWJBcmNoaXZlLmxlYWtSZWYoKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaAppbmRleCA3MWRlMjhiZGE3NGQ3ZjAzNGZi
OTJjNmYyODI0ZmVhMzllMmNmOWFmLi4xNDY0YTZiNzlhZWNkZmU4MmU3Y2FjNDRhY2U5ZjNlOTM4
MDM0YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5oCkBAIC0yMyw4ICsyMyw3
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBX
ZWJBcmNoaXZlX2gKLSNkZWZpbmUgV2ViQXJjaGl2ZV9oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQogCkBAIC0zOCw3ICszNyw3IEBAIGNsYXNzIERhdGE7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIExlZ2FjeVdlYkFyY2hpdmU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVj
dCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC01Miw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShXZWJBcmNoaXZlUmVzb3Vy
Y2UqIG1haW5SZXNvdXJjZSwgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3VicmVzb3VyY2VzLCBSZWZQ
dHI8QVBJOjpBcnJheT4mJiBzdWJmcmFtZUFyY2hpdmVzKTsKICAgICBzdGF0aWMgUmVmPFdlYkFy
Y2hpdmU+IGNyZWF0ZShBUEk6OkRhdGEqKTsKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNy
ZWF0ZShSZWZQdHI8V2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZT4mJik7Ci0gICAgc3RhdGljIFJl
ZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQ29yZTo6UmFuZ2UmKTsKKyAgICBzdGF0aWMgUmVmPFdl
YkFyY2hpdmU+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpOwogCiAgICAgV2Vi
QXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UoKTsKICAgICBBUEk6OkFycmF5KiBzdWJyZXNv
dXJjZXMoKTsKQEAgLTc2LDUgKzc1LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIEFQSQog
CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNlbmRpZiAvLyBXZWJBcmNoaXZlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCmluZGV4IGZiNTRhZjQwYmMwMGQyNDNiZjkw
ZTkyMjk2Y2QxYjNkMGRiYmNlZWYuLjE4ZGRjNTdhOWQ0MTIwMDlkNmRmMzBhOThjNmU2YTUwMjNh
ZjI5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0K
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5tbQpAQCAtNTIsOSArNTIs
OSBAQCBSZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRlKFJlZlB0cjxMZWdhY3lXZWJB
cmNoaXZlPiYmIGxlZ2FjeVdlYkFyY2hpdmUpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
QXJjaGl2ZShsZWdhY3lXZWJBcmNoaXZlLnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAotUmVmPFdl
YkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSYW5nZSYgcmFuZ2UpCitSZWY8V2ViQXJjaGl2
ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJBcmNoaXZlKExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgm
cmFuZ2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShMZWdhY3lXZWJB
cmNoaXZlOjpjcmVhdGUocmFuZ2UpKSk7CiB9CiAKIFdlYkFyY2hpdmU6OldlYkFyY2hpdmUoV2Vi
QXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YnJl
c291cmNlcywgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3ViZnJhbWVBcmNoaXZlcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCmluZGV4IDg2YWM1NTNlNmZjYzA4MjJhZDQxOGM2YTBk
M2Y4Y2Y5YzRhOTliOTguLjlmN2M3MzEwOTNjZjg3MWE3ZTRjNjNmMWIxZjFhNmMzMDUzZjM1MzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApAQCAtMzMsNyArMzMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBFZGl0aW5nUmFu
Z2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW5nUmFuZ2UmIGVk
aXRpbmdSYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGJhc2UpCitPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBm
cmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVs
YXRpdmVUbyBiYXNlKQogewogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90
Rm91bmQpOwogICAgIFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlIHJhbmdlIHsgZWRpdGluZ1Jhbmdl
LmxvY2F0aW9uLCBlZGl0aW5nUmFuZ2UubGVuZ3RoIH07CkBAIC00NywyMSArNDcsMjEgQEAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUm
IGZyYW1lLCBjb25zdCBFZGl0aW4KICAgICAgICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3Mg
aWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0LgogICAgICAgICBhdXRvKiBlbGVtZW50ID0gZnJhbWUu
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAg
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSkpOworICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKGJhc2UgPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwog
CiAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJh
Z3JhcGgoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpKTsKICAg
ICBpZiAoIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCku
cm9vdE5vZGUoKSkuZW5kOwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6cmVz
b2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNj
b3BlRW5kKSB9LCByYW5nZSkpOworICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlQm91bmRhcnlQb2lu
dEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgp
LnJvb3ROb2RlKCkpOworICAgIHJldHVybiBXZWJDb3JlOjpyZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
eyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1vdmUoc2NvcGVFbmQpIH0sIHJhbmdlKTsK
IH0KIAotRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1l
JiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0
aXZlVG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQorRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5n
ZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29y
ZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGVkaXRpbmdS
YW5nZUlzUmVsYXRpdmVUbykKIHsKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRv
ID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9FZGl0aW5nUmFuZ2UuaAppbmRleCBlMDQzZjk3MjQwZTQyNWVjZDI1YTQyN2VkZDkyN2Fj
Yjc0NWUzNjE0Li5mMTliNDQzZjBkYzcxOWE3NDgzNWM3OGM3NGIxNjUzZDk0MTFhMTQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFJhbmdlOworc3RydWN0IFNpbXBsZVJh
bmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU4LDggKzU4LDggQEAgc3RydWN0IEVk
aXRpbmdSYW5nZSB7CiAgICAgLy8gKG5vdEZvdW5kLCAwKSBpcyBub3RhYmx5IHZhbGlkLgogICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uICsgbGVuZ3RoID49IGxvY2F0
aW9uOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiB0b1JhbmdlKFdlYkNv
cmU6OkZyYW1lJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRv
ID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwotICAgIHN0YXRpYyBF
ZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmFu
Z2UqLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86
OkVkaXRhYmxlUm9vdCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdl
PiB0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgRWRpdGluZ1Jh
bmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3Qp
OworICAgIHN0YXRpYyBFZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2
ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwogCiAjaWYgZGVm
aW5lZChfX09CSkNfXykKICAgICBFZGl0aW5nUmFuZ2UoTlNSYW5nZSByYW5nZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaAppbmRleCA2OTZjZmZj
YmRmODBlNTEyZTFkM2ZkZGE3ZjEwOGYzMWRiMzBlNmIxLi5kODg1MTExZDlmNzUwMDBiZTdkNjdl
MDBiY2YwNzNhNDlhNjFlMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudC5oCkBAIC0zMSwxMSArMzEsMTEgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ1NTU3R5bGVEZWNs
YXJhdGlvbjsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFu
Z2U7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBTdHlsZVByb3BlcnRpZXM7CitzdHJ1Y3Qg
U2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTEsMjEgKzUxLDIxIEBA
IGNsYXNzIEVkaXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RWRpdG9yQ2xpZW50
KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYktpdDo6V2Vi
UGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYktpdDo6
V2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2Us
IFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqLCBX
ZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlv
bikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBX
ZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29y
ZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViS2l0OjpXZWJQYWdlJiwg
V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdl
JiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFt
ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBTdHJp
bmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
U2VsZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0OjpXZWJQ
YWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFzdGVib2Fy
ZERhdGFGb3JSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxX
VEY6OlN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRC
ZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2Um
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoV2Vi
S2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoV2ViS2l0OjpXZWJQYWdlJiwg
V2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdl
YkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5n
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9y
SW5zZXJ0QWN0aW9uKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZERl
bGV0ZVJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJD
b3JlOjpFQWZmaW5pdHksIGJvb2wpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQXBwbHlTdHlsZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTdHlsZVBy
b3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZyhXZWJLaXQ6OldlYlBh
Z2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0
aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViS2l0OjpXZWJQYWdlJiwg
Y29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlVG9QYXN0
ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdl
YktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZl
Y3RvcjxXVEY6OlN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+
JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2Vi
UGFnZSYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0OjpX
ZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiwgYm9v
bCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9w
KFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJD
b3JlOjpTaW1wbGVSYW5nZSYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJbmplY3RlZEJ1bmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxl
LmNwcAppbmRleCBmYzdlMDBiMjhlYjNhNTY4ZjZmODRjNTZhMjZhYjFiZjA3OWI3NGMzLi42YTdm
NTFlZDY1NzI3NzVmOWYyZmJkNzEzMTU1MzlmMTBiZjdjNjJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIldLQnVu
ZGxlTm9kZUhhbmRsZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZS5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCIKICNpbmNsdWRl
ICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZS5oIgpAQCAtOTAsNyArODksNyBAQCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5k
bGVOb2RlSGFuZGxlQ29weURvY3VtZW50KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSAogCiBX
S1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0UmVuZGVyUmVjdChXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgbm9kZUhhbmRsZVJlZiwgYm9vbCogaXNSZXBsYWNlZCkKIHsKLSAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChub2RlSGFuZGxlUmVmKS0+cmVuZGVyUmVjdChpc1JlcGxh
Y2VkKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRsZU5vZGVIYW5k
bGVDb3B5U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZUhhbmRs
ZVJlZiwgV0tTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKQEAgLTk5LDEwICs5OCw5IEBAIFdLSW1h
Z2VSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weVNuYXBzaG90V2l0aE9wdGlvbnMoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmIG5vZGVICiAgICAgcmV0dXJuIHRvQVBJKGltYWdlLmxlYWtSZWYoKSk7CiB9
CiAKLVdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weVZpc2libGVS
YW5nZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZUhhbmRsZVJlZikKK1dLQnVuZGxlUmFuZ2VI
YW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weVZpc2libGVSYW5nZShXS0J1bmRsZU5vZGVI
YW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6OnRvSW1wbChub2RlSGFuZGxlUmVmKS0+dmlzaWJsZVJh
bmdlKCk7Ci0gICAgcmV0dXJuIHRvQVBJKHJhbmdlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRFbGVtZW50Qm91
bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50SGFuZGxlUmVmKQpAQCAtMTEwLDE5ICsx
MDgsMTcgQEAgV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEVsZW1lbnRCb3VuZHMoV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRIYW5kbGVSZWYKICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQ
SShXZWJLaXQ6OnRvSW1wbChlbGVtZW50SGFuZGxlUmVmKS0+ZWxlbWVudEJvdW5kcygpKTsKIH0K
IAotdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2Vy
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBXS1N0cmlu
Z1JlZiB2YWx1ZVJlZikKK3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVu
dFZhbHVlRm9yVXNlcihXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIFdLU3RyaW5nUmVmKQogewotICAg
IFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRF
bGVtZW50VmFsdWVGb3JVc2VyKFdlYktpdDo6dG9XVEZTdHJpbmcodmFsdWVSZWYpKTsKIH0KIAot
dm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJs
ZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wg
ZW5hYmxlZCkKK3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFNwZWxs
Y2hlY2tFbmFibGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgYm9vbCkKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudFNw
ZWxsY2hlY2tFbmFibGVkKGVuYWJsZWQpOwogfQogCi1ib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5w
dXRFbGVtZW50SGFuZGxlUmVmKQorYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRF
bGVtZW50QXV0b0ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1l
bnRBdXRvRmlsbGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdLQnVuZGxlTm9k
ZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJl
ZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGZpbGxlZCkKQEAgLTEzNSw5ICsxMzEs
OSBAQCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVk
QW5kVmlld2FibGUoV0tCdW5kbGVOb2RlSGFuZAogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1
dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZEFuZFZpZXdh
YmxlKGF1dG9GaWxsZWRBbmRWaWV3YWJsZSk7CiB9CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5k
bGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5k
bGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5k
bGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSBhdXRv
RmlsbEJ1dHRvblR5cGUpCkBAIC0xNTUsOSArMTUxLDkgQEAgV0tBdXRvRmlsbEJ1dHRvblR5cGUg
V0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudExhc3RBdXRvRmlsbEJ1dHRvblR5
cGUKICAgICByZXR1cm4gdG9XS0F1dG9GaWxsQnV0dG9uVHlwZShXZWJLaXQ6OnRvSW1wbChodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudExhc3RBdXRvRmlsbEJ1dHRv
blR5cGUoKSk7CiB9CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVu
dEF1dG9GaWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50
SGFuZGxlUmVmKQorYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0
b0ZpbGxBdmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKQogewotICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNBdXRvRmlsbEF2YWlsYWJs
ZSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRI
VE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxBdmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgYXV0b0ZpbGxBdmFpbGFibGUpCkBAIC0xNjUs
OSArMTYxLDkgQEAgdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0
b0ZpbGxBdmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmUKICAgICBXZWJLaXQ6OnRvSW1wbCho
dG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0QXV0b0ZpbGxBdmFpbGFibGUoYXV0b0ZpbGxB
dmFpbGFibGUpOwogfQogCi1XS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRF
bGVtZW50SGFuZGxlUmVmKQorV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVs
ZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAg
cmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcygpKTsKKyAgICByZXR1
cm4geyB9OwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRM
YXN0Q2hhbmdlV2FzVXNlckVkaXQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYpCkBAIC0xODAsMTAgKzE3Niw5IEBAIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVI
CiAgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxUZXh0QXJlYUVsZW1lbnRIYW5kbGVSZWYp
LT5odG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiB9CiAKLVdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTFRhYmxlQ2VsbEVsZW1l
bnRDZWxsQWJvdmUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxUYWJsZUNlbGxFbGVtZW50SGFu
ZGxlUmVmKQorV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1M
VGFibGVDZWxsRWxlbWVudENlbGxBYm92ZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAg
UmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2Vi
S2l0Ojp0b0ltcGwoaHRtbFRhYmxlQ2VsbEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sVGFibGVDZWxs
RWxlbWVudENlbGxBYm92ZSgpOwotICAgIHJldHVybiB0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYo
KSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVO
b2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtZW50
SGFuZGxlUmVmKQpAQCAtMTk0LDggKzE4OSw3IEBAIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVO
b2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtCiAK
IFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxGcmFtZUVsZW1lbnRD
b250ZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVS
ZWYpCiB7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+IGZyYW1lID0gV2ViS2l0Ojp0b0lt
cGwoaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZiktPmh0bWxGcmFtZUVsZW1lbnRDb250ZW50RnJh
bWUoKTsKLSAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVha1JlZigpKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTElG
cmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJRnJhbWVF
bGVtZW50SGFuZGxlUmVmKQpAQCAtMjA0LDIyICsxOTgsMTcgQEAgV0tCdW5kbGVGcmFtZVJlZiBX
S0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5k
bGVOb2QKICAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVha1JlZigpKTsKIH0KIAotLy8gRGVwcmVj
YXRlZCAtIHVzZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxl
ZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYpLgogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1M
SW5wdXRFbGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxl
bWVudEhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxl
bWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIC8vIERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBib29sKS4K
LXZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZmlsbGVk
KQordm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b2ZpbGxlZChX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgaGFuZGxlLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbGVkKGZpbGxlZCk7CisgICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsZWQoaGFuZGxlLCBlbmFibGVkKTsKIH0KIAotLy8gRGVwcmVjYXRlZCAtIHVz
ZSBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFi
bGVkV2l0aEJ1dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9u
VHlwZSkuCi12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmls
bEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5k
bGVSZWYsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0
RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIGJvb2wp
CiB7Ci0gICAgV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9
IGVuYWJsZWQgPyBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5cGU6OkNyZWRlbnRpYWxzIDogV2Vi
Q29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOwotCi0gICAgV2ViS2l0Ojp0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRv
bkVuYWJsZWQoYXV0b0ZpbGxCdXR0b25UeXBlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRG9jdW1lbnQubW0gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTURvY3Vt
ZW50Lm1tCmluZGV4IDE2NmU3OWQwMzIyMmVjOTgyNDExOGE0NzBjMDIwNDk0YTZiNThjMGQuLjZh
YWJjNWRlMGZkMTVhYTFjMjllNzg0ODRmOGRhOWUzNWJmZjVhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRG9jdW1lbnQu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMv
V0tET01Eb2N1bWVudC5tbQpAQCAtNzksNyArNzksNyBAQCAtIChXS0RPTU5vZGUgKiljcmVhdGVE
b2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcg
YgogCiAtIChXS0RPTU5vZGUgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aFRleHQ6KE5TU3Ry
aW5nICopdGV4dAogewotICAgIHJldHVybiBXZWJLaXQ6OnRvV0tET01Ob2RlKGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpfaW1wbCkuY3JlYXRlUmFu
Z2UoKS5nZXQoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvV0tET01Ob2Rl
KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRv
d25jYXN0PFdlYkNvcmU6OkRvY3VtZW50PigqX2ltcGwpKSwgdGV4dCkucHRyKCkpOwogfQogCiAt
IChpZClwYXJzZXJZaWVsZFRva2VuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRleCAwMDkw
Yjg5OGEyZTFlMWQ2MWNhZTA0NTAzOGEyZjg1ZDc1ZGJjM2U3Li4xYjZiYjc3ZWNhN2U2ZWMwZjFm
NjFlODcyMTJjNGM0NWY2OTZiNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTEz
NCw5ICsxMzQsOCBAQCAtIChOU0FycmF5ICopdGV4dFJlY3RzCiAKIC0gKFdLRE9NUmFuZ2UgKily
YW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3RlcnM6KE5TVUludGVnZXIpY2hh
cmFjdGVycyBpbkRpcmVjdGlvbjooV0tET01SYW5nZURpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFj
dGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VEaXJl
Y3Rpb25Gb3J3YXJkID8gIF9pbXBsLT5lbmRQb3NpdGlvbigpIDogX2ltcGwtPnN0YXJ0UG9zaXRp
b24oKSwgY2hhcmFjdGVycywgZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VEaXJlY3Rpb25Gb3J3YXJk
ID8gV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIDogV2ViQ29yZTo6U2VsZWN0
aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0KLSAgICByZXR1cm4gW1tbV0tET01SYW5nZSBhbGxv
Y10gX2luaXRXaXRoSW1wbDpuZXdSYW5nZS5nZXQoKV0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8g
bmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3Vu
ZGFyeShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyAgX2ltcGwtPmVu
ZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBjaGFyYWN0ZXJzLCBkaXJlY3Rp
b24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsK
KyAgICByZXR1cm4gW1tbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpjcmVhdGVMaXZl
UmFuZ2UobmV3UmFuZ2UpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2Vi
UHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dz
ZXJDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCA0NzdmZjk0NWE2YWI0YWNhOWU3MzMxMjU1YjA0
MGRkNWZhZDZlOGUwLi5jNzc2MjUyZWJkNGFlODg4NDViZThjNjc3OGI2ZWY3MzBkZmYzMTZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNz
UGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCkBAIC01NTksMjEgKzU1OSwyMSBAQCAt
ICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVnSW5FZGl0aW5n
RGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCogdGV4
dCwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRB
Y3Rpb24gYWN0aW9uKSBmaW5hbAorICAgICAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0
OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFdlYkNv
cmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0
ZU1ldGhvZHMuc2hvdWxkSW5zZXJ0VGV4dCkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0
KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVy
IHNob3VsZEluc2VydFRleHQ6U3RyaW5nKHRleHQpIHJlcGxhY2luZ1JhbmdlOndyYXBwZXIoKldl
YktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2VUb1JlcGxh
Y2UpKSBnaXZlbkFjdGlvbjp0b1dLKGFjdGlvbildOworICAgICAgICAgICAgcmV0dXJuIFttX2Nv
bnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHNob3VsZEluc2VydFRleHQ6dGV4dCByZXBs
YWNpbmdSYW5nZTp3cmFwcGVyKCpXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZVRvUmVwbGFjZSkp
IGdpdmVuQWN0aW9uOnRvV0soYWN0aW9uKV07CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2Uq
IGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBh
ZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWwKKyAgICAgICAgYm9vbCBzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNv
cmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGls
bFNlbGVjdGluZykgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRl
TWV0aG9kcy5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgICAgICAgICBhdXRvIGFwaUZyb21SYW5nZSA9IGZyb21SYW5nZSA/IGFk
b3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmZyb21SYW5nZV0pIDogbmls
OwotICAgICAgICAgICAgYXV0byBhcGlUb1JhbmdlID0gdG9SYW5nZSA/IGFkb3B0TlMoW1tXS0RP
TVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOnRvUmFuZ2VdKSA6IG5pbDsKKyAgICAgICAgICAg
IGF1dG8gYXBpRnJvbVJhbmdlID0gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0
aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCldKTsKKyAgICAgICAgICAgIGF1
dG8gYXBpVG9SYW5nZSA9IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBs
OmNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKV0pOwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgICAgICAgICBVSVRleHRTdG9yYWdlRGlyZWN0aW9uIGFwaUFmZmluaXR5ID0gYWZm
aW5pdHkgPT0gV2ViQ29yZTo6VVBTVFJFQU0gPyBVSVRleHRTdG9yYWdlRGlyZWN0aW9uQmFja3dh
cmQgOiBVSVRleHRTdG9yYWdlRGlyZWN0aW9uRm9yd2FyZDsKICNlbHNlCkBAIC01ODMsNyArNTgz
LDcgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0lu
RWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAgICAgIHJldHVybiBbbV9jb250
cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlOmFw
aUZyb21SYW5nZS5nZXQoKSB0b1JhbmdlOmFwaVRvUmFuZ2UuZ2V0KCkgYWZmaW5pdHk6YXBpQWZm
aW5pdHkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCopIGZpbmFsCisg
ICAgICAgIHZvaWQgZGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFN0cmluZyYpIGZp
bmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuZGlkQ2hh
bmdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5MSwyMCArNTkxLDIwIEBAIC0gKHZv
aWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxl
Z2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0Rl
bGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyRGlk
Q2hhbmdlQnlFZGl0aW5nOm1fY29udHJvbGxlcl07CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IHdpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSog
cmFuZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6
V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpIGZp
bmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMud2lsbFdy
aXRlVG9QYXN0ZWJvYXJkKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAg
W21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJy
b3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgd2lsbFdyaXRlUmFuZ2VUb1Bhc3Rl
Ym9hcmQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNy
ZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAgICAgICAgIFttX2NvbnRyb2xsZXItPl9lZGl0aW5n
RGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6
bV9jb250cm9sbGVyIHdpbGxXcml0ZVJhbmdlVG9QYXN0ZWJvYXJkOndyYXBwZXIoV2ViS2l0Ojpj
cmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGdl
dFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2Uq
IHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWwKKyAgICAgICAgdm9p
ZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlv
bmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9h
cmREYXRhKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdhdGVNZXRo
b2RzLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0Rl
bGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1f
Y29udHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIoKldlYktpdDo6SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpLmdldCgpKV07CisgICAgICAg
ICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdl
dCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxl
ciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIoV2ViS2l0OjpjcmVhdGVIYW5kbGUocmFu
Z2UpLmdldCgpKV07CiAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICp0eXBlIGluIGRhdGFCeVR5
cGUpIHsKICAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUpOwogICAg
ICAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmNyZWF0ZShkYXRhQnlUeXBlW3R5cGVdKSk7CkBAIC02MTksMTIgKzYxOSwxMiBAQCAtICh2b2lk
KV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVnSW5FZGl0aW5nRGVsZWdh
dGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAgICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxl
Z2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlckRpZFdy
aXRlVG9QYXN0ZWJvYXJkOm1fY29udHJvbGxlcl07CiAgICAgICAgIH0KIAotICAgICAgICBib29s
IHBlcmZvcm1Ud29TdGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgV2ViQ29yZTo6UmFuZ2UmIHJhbmdlLCBib29sIGlzTW92ZSkgZmlu
YWwKKyAgICAgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0OjpXZWJQYWdlJiwgV2Vi
Q29yZTo6RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJiByYW5nZSwgYm9vbCBpc01vdmUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
ICghbV9kZWxlZ2F0ZU1ldGhvZHMucGVyZm9ybVR3b1N0ZXBEcm9wKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byByYW5nZUhhbmRsZSA9IFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJnJhbmdlKTsKKyAgICAgICAg
ICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSk7CiAgICAg
ICAgICAgICBhdXRvIG5vZGVIYW5kbGUgPSBXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUoJmZyYWdtZW50KTsKICAgICAgICAgICAgIHJldHVybiBbbV9jb250cm9s
bGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyOm1fY29udHJvbGxlciBwZXJmb3JtVHdvU3RlcERyb3A6d3JhcHBlcigqbm9k
ZUhhbmRsZSkgYXREZXN0aW5hdGlvbjp3cmFwcGVyKCpyYW5nZUhhbmRsZSkgaXNNb3ZlOmlzTW92
ZV07CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwCmluZGV4IDIyMGVmZWQ1OGVkMTU3NzllNzViOWM0OGMxNzA3MTdmZmUyZGYwZGYuLmE5
MWY3ZjcwNzgxNzhkZmJlNDNiNTg0NmJjMDBjNDRlYmQ5NmQ3NDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtNTQsNyArNTQsNyBAQAogbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdHlwZWRlZiBIYXNo
TWFwPFJhbmdlKiwgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+IERPTVJhbmdlSGFuZGxlQ2Fj
aGU7Cit1c2luZyBET01SYW5nZUhhbmRsZUNhY2hlID0gSGFzaE1hcDxSYW5nZSosIEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUqPjsKIAogc3RhdGljIERPTVJhbmdlSGFuZGxlQ2FjaGUmIGRvbVJh
bmdlSGFuZGxlQ2FjaGUoKQogewpAQCAtNjQsMjkgKzY0LDIxIEBAIHN0YXRpYyBET01SYW5nZUhh
bmRsZUNhY2hlJiBkb21SYW5nZUhhbmRsZUNhY2hlKCkKIAogUmVmUHRyPEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgUmFuZ2UqIHJhbmdl
ID0gSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRvSlMob2JqZWN0KSk7
Ci0gICAgcmV0dXJuIGdldE9yQ3JlYXRlKHJhbmdlKTsKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGUo
SlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRvSlMob2JqZWN0KSkpOwog
fQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRE9NUmFuZ2VIYW5kbGVDYWNoZTo6QWRkUmVz
dWx0IHJlc3VsdCA9IGRvbVJhbmdlSGFuZGxlQ2FjaGUoKS5hZGQocmFuZ2UsIG51bGxwdHIpOwor
ICAgIGF1dG8gcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwgbnVsbHB0
cik7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7Ci0KLSAgICBhdXRvIHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Y3JlYXRlKCpyYW5nZSk7CisgICAgYXV0byByYW5nZUhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSgqcmFuZ2UpKTsKICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUucHRyKCk7CiAgICAgcmV0dXJuIHJhbmdlSGFu
ZGxlOwogfQogCi1SZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Y3JlYXRlKFJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKHJhbmdlKSk7Ci19Ci0KIEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUoUmFuZ2UmIHJhbmdlKQog
ICAgIDogbV9yYW5nZShyYW5nZSkKIHsKQEAgLTE3OCw0ICsxNzAsOSBAQCBTdHJpbmcgSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmFuZ2UtPnRl
eHQoKTsKIH0KIAorUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IGNyZWF0ZUhhbmRs
ZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQoreworICAgIHJl
dHVybiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCmluZGV4IGY4MGUzM2FiZTgwNjUxZDk3
OTE4YjhkYmZhMTQ5ZTQ2MWY1NmJjODUuLjVlOGJlZWRhMTAwZDI1ZjA5MWU3ZTBjMWY3NmE0ZjBj
YjE0YzI0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5o
CkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKLSNkZWZpbmUgSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVj
dC5oIgogI2luY2x1ZGUgIkltYWdlT3B0aW9ucy5oIgpAQCAtMzUsNiArMzQsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJhbmdlOworc3RydWN0IFNpbXBs
ZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU5LDEyICs1OSwxMSBAQCBwdWJs
aWM6CiAgICAgV2ViQ29yZTo6UmFuZ2UmIGNvcmVSYW5nZSgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBSZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlKFdlYkNvcmU6
OlJhbmdlJik7CiAgICAgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZShXZWJDb3JlOjpSYW5nZSYp
OwogCiAgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlOwogfTsKIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CitSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlSGFuZGxl
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwogCi0jZW5kaWYgLy8gSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKaW5kZXggY2UwMjdiNWE3
YmU2ODI3YTc4ZTdiNzcyNWJkYmIzMjY0YTYyNTIwYS4uZTM0MGFmMWNiYzMwMjllNTdhYmRiMjJk
YzRmOWE5YmRjMjVmMDUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5jcHAKQEAgLTM4LDEyMyArMzgsMTExIEBACiAjaW5jbHVkZSAiV0tTdHJpbmcu
aCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudEZyYWdt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAorc3RhdGljIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFy
YXRpb25IYW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQor
eworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGU6Omdl
dE9yQ3JlYXRlKCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCkpOworfQorCiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OkluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnRCYXNlJiBjbGll
bnQpCiB7CiAgICAgaW5pdGlhbGl6ZSgmY2xpZW50KTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBSYW5n
ZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQmVn
aW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAg
ICBpZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKSB7Ci0gICAgICAgIFJlZlB0cjxJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3Vs
ZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEJl
Z2luRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEJlZ2luRWRpdGluZyh0
b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBSYW5n
ZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5k
RWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
aWYgKG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkRW5k
RWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEVuZEVkaXRp
bmcpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5nKHRvQVBJKCZwYWdl
KSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmIHBhZ2UsIE5vZGUqIG5vZGUsIFJh
bmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmIHBh
Z2UsIE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxh
Y2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKG1fY2xpZW50LnNob3Vs
ZEluc2VydE5vZGUpIHsKICAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4g
bm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUobm9kZSk7
Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZVRvUmVwbGFj
ZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlVG9S
ZXBsYWNlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydE5vZGUodG9BUEko
JnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkocmFuZ2VUb1JlcGxhY2VIYW5k
bGUuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAg
ICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0b0FQSSgmcGFnZSksIHRvQVBJ
KG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxhY2UpLmdl
dCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIHRleHQsIFJhbmdl
KiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmIHBhZ2Us
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRv
UmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBpZiAobV9jbGllbnQu
c2hvdWxkSW5zZXJ0VGV4dCkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZT4gcmFuZ2VUb1JlcGxhY2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpn
ZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91
bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdlKSwgdG9BUEkodGV4dCksIHRvQVBJKHJhbmdlVG9SZXBs
YWNlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEluc2VydFRleHQpCisgICAgICAgIHJl
dHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdlKSwgdG9BUEkodGV4dC5p
bXBsKCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxhY2UpLmdldCgpKSwgdG9BUEko
YWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdl
KFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiBwYWdlLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC5zaG91
bGREZWxldGVSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShy
YW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWxldGVSYW5nZSh0b0FQSSgm
cGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdlKQorICAgICAgICBy
ZXR1cm4gbV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVh
dGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIGZyb21SYW5nZSwg
UmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykK
K2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJh
bmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZT4gZnJvbVJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JD
cmVhdGUoZnJvbVJhbmdlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU+IHRvUmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0
ZSh0b1JhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShmcm9tUmFuZ2VIYW5kbGUuZ2V0KCkpLCB0b0FQSSh0
b1JhbmdlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWZmaW5pdHkpLCBzdGlsbFNlbGVjdGluZywgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZENo
YW5nZVNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKGZyb21SYW5nZSku
Z2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUodG9SYW5nZSkuZ2V0KCkpLCB0b0FQSShhZmZpbml0
eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxk
QXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUmFu
Z2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEFw
cGx5U3R5bGUoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQuc2hv
dWxkQXBwbHlTdHlsZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURl
Y2xhcmF0aW9uSGFuZGxlPiBzdHlsZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNs
YXJhdGlvbkhhbmRsZTo6Z2V0T3JDcmVhdGUoc3R5bGUpOwotICAgICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRB
cHBseVN0eWxlKHRvQVBJKCZwYWdlKSwgdG9BUEkoc3R5bGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShy
YW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAg
IGlmIChtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKQorICAgICAgICByZXR1cm4gbV9jbGllbnQu
c2hvdWxkQXBwbHlTdHlsZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShzdHlsZSku
Z2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBTdHJpbmdJbXBs
KiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlv
bk5hbWUpCiB7CiAgICAgaWYgKG1fY2xpZW50LmRpZEJlZ2luRWRpdGluZykKLSAgICAgICAgbV9j
bGllbnQuZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFt
ZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRpZEJlZ2lu
RWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUuaW1wbCgpKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogbm90aWZp
Y2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRFbmRF
ZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsK
ICAgICBpZiAobV9jbGllbnQuZGlkRW5kRWRpdGluZykKLSAgICAgICAgbV9jbGllbnQuZGlkRW5k
RWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRFbmRFZGl0aW5nKHRvQVBJKCZw
YWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hh
bmdlKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNv
bnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQ2hh
bmdlKQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShub3Rp
ZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGll
bnQuZGlkQ2hhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0lt
cGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQ2hhbmdlU2VsZWN0aW9uKQotICAg
ICAgICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEkoJnBhZ2UpLCB0b0FQSShub3Rp
ZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGll
bnQuZGlkQ2hhbmdlU2VsZWN0aW9uKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFt
ZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudDo6d2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmIHBh
Z2UsIFJhbmdlKiByYW5nZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3
aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJk
KSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRs
ZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAg
ICAgbV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFu
Z2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBp
ZiAobV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQorICAgICAgICBtX2NsaWVudC53aWxs
V3JpdGVUb1Bhc3RlYm9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2Up
LmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYg
cGFnZSwgUmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKK3ZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2Um
IHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxTdHJpbmc+
JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9h
cmREYXRhKQogewogICAgIGlmIChtX2NsaWVudC5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKSB7
Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAg
V0tBcnJheVJlZiB0eXBlcyA9IDA7Ci0gICAgICAgIFdLQXJyYXlSZWYgZGF0YSA9IDA7Ci0gICAg
ICAgIG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQ
SShyYW5nZUhhbmRsZS5nZXQoKSksICZ0eXBlcywgJmRhdGEsIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiB0eXBlc0FycmF5ID0gYWRvcHRSZWYo
dG9JbXBsKHR5cGVzKSk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiBkYXRhQXJyYXkgPSBh
ZG9wdFJlZih0b0ltcGwoZGF0YSkpOworICAgICAgICBXS0FycmF5UmVmIHR5cGVzID0gbnVsbHB0
cjsKKyAgICAgICAgV0tBcnJheVJlZiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgbV9jbGllbnQu
Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRs
ZShyYW5nZSkuZ2V0KCkpLCAmdHlwZXMsICZkYXRhLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OworICAgICAgICBhdXRvIHR5cGVzQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwodHlwZXMpKTsKKyAg
ICAgICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwoZGF0YSkpOwogCiAgICAgICAg
IHBhc3RlYm9hcmRUeXBlcy5jbGVhcigpOwogICAgICAgICBwYXN0ZWJvYXJkRGF0YS5jbGVhcigp
OwpAQCAtMTc0LDE0ICsxNjIsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmEKICAgICB9CiB9
CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERy
b3AoV2ViUGFnZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dDo6cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmIHBhZ2UsIERvY3VtZW50RnJhZ21lbnQmIGZy
YWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewog
ICAgIGlmICghbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhdXRvIHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6
Z2V0T3JDcmVhdGUoJmRlc3RpbmF0aW9uKTsKICAgICBhdXRvIG5vZGVIYW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKCZmcmFnbWVudCk7Ci0gICAgcmV0dXJuIG1f
Y2xpZW50LnBlcmZvcm1Ud29TdGVwRHJvcCh0b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUu
Z2V0KCkpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIGlzTW92ZSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKKyAgICByZXR1cm4gbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKHRvQVBJ
KCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShkZXN0
aW5hdGlvbikuZ2V0KCkpLCBpc01vdmUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVRvUGFzdGVib2Fy
ZChXZWJQYWdlJiBwYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudC5oCmluZGV4IDY4OTk0MWExOGU4ZDllOTRjYTQyNmY5NDJiMWViOGEwYjNjZjg0YmIuLmYz
YTBlNzQ3NjcyMGZiMWI1ZDljYjE3NzE3ZWRkNzM5OTQ5N2RjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIERvY3VtZW50
RnJhZ21lbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7
CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTIsMjEgKzUyLDIxIEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQoY29uc3QgV0tCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50QmFzZSYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxk
RW5kRWRpdGluZyhXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNo
b3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSog
cmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiwgV2ViQ29yZTo6UmFu
Z2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwot
ICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgZmlu
YWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEFwcGx5
U3R5bGUoV2ViUGFnZSYsIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLCBXZWJDb3JlOjpS
YW5nZSopIGZpbmFsOwotICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBTdHJpbmdJ
bXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZEVkaXRpbmcoV2Vi
UGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZvaWQgZGlk
Q2hhbmdlKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAg
ICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0
aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYs
IFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJh
bmdlKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJk
VHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmRE
YXRhKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlJiwgY29uc3Qg
V2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmco
V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmLCBXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViUGFnZSYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2VU
b1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBh
Z2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQXBwbHlT
dHlsZShXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAgdm9pZCBkaWRCZWdpbkVk
aXRpbmcoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlv
bk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcm
IG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdl
YlBhZ2UmLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQg
d2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICB2b2lkIGRpZFdyaXRlVG9QYXN0ZWJv
YXJkKFdlYlBhZ2UmKSBmaW5hbDsKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJQYWdl
JiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiBkZXN0aW5hdGlv
biwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBh
Z2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFu
Z2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggZGQ5YzM1MjYwNWYwOGYzOTQwZDkw
MGQ4ZjAyNjUyNDdlMDRiYTM3OS4uMTc1YWM3ZDcyNjY2MjRhNThiYTU4NTdhNDMzMGI4ODUzM2Mz
YjIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIHVp
bnQ2NF90IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkKIAogYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsK
KyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERl
bGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0xMTcsMzIgKzExNywzMiBAQCBpbnQgV2ViRWRp
dG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAKIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAg
IHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQmVnaW5F
ZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOworICAgIHJldHVy
biBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQmVnaW5FZGl0aW5n
KCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVk
aXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwogfQog
CiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiBub2RlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rp
b24gYWN0aW9uKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCAmbm9kZSwgY3JlYXRlTGl2ZVJhbmdlKHJh
bmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwgbm9kZSwgcmFu
Z2VUb1JlcGxhY2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJ
bnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICByZXR1
cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQo
Km1fcGFnZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0
KCksIGFjdGlvbik7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQsIHJhbmdlVG9SZXBsYWNlLCBhY3Rp
b24pOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQo
KS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShmcm9t
UmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UodG9SYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBz
dGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGZyb21SYW5nZSwgdG9S
YW5nZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KICAgICAKIGJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0eWxlKCptX3BhZ2UsICZz
dHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIGNyZWF0ZUxp
dmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCBzdHlsZSwgcmFuZ2UpOwog
fQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTI2NywxNyArMjY3LDE3IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UsIGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiB2
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywg
VmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7Ci0gICAgbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFu
Z2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFzdGVib2FyZFR5cGVz
LCBwYXN0ZWJvYXJkRGF0YSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgcmFuZ2UsIHBhc3RlYm9hcmRU
eXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9y
bVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5n
ZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZyYWdt
ZW50LCBjcmVhdGVMaXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01vdmUpOworICAgIHJldHVybiBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCpt
X3BhZ2UsIGZyYWdtZW50LCBkZXN0aW5hdGlvbiwgaXNNb3ZlKTsKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoVW5kb1N0ZXAmIHN0ZXApCkBAIC01MzYsMTEgKzUz
Niw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdW
aWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtCiBzdGF0aWMgdWludDY0X3QgaW5zZXJ0aW9u
UG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50
U2VsZWN0aW9uKQogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9u
LnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VC
b3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpOwotICAg
IGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwg
KnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShzZWxlY3Rpb25TdGFydCwgc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpOwor
ICAgIHJldHVybiByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSkgOiAwOwogfQogCiAjaWYg
VVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eS5tbQppbmRleCA5NWYxNjNjMWUxMWIwMWQwNzIwM2U0NmFiNWNjYWIwMGM5ZTJhNzAy
Li42NmUzZDk5NTdlZGI5YWYzMzY0OTgzMTQ0ZTc0YTEwM2MyOGVkZTNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9s
bGVyUHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCkBAIC0xNzYsMTUgKzE3NiwxMyBAQCB2b2lk
IFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9T
ZWxlY3Rpb24oY29uc3QgU3RyaQogCiBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nIFRleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyhj
b25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRh
cnlQb2ludChzdGFydCk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50
KGVuZCk7Ci0gICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSkKKyAgICBhdXRv
IGVudGlyZVJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIGlmICghZW50
aXJlUmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbnRpcmVSYW5nZSA9IFNp
bXBsZVJhbmdlIHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9OwogCiAgICAgYXV0byBz
dHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0p
OwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZW50aXJlUmFuZ2UpOyAhaXQuYXRFbmQoKTsg
aXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKmVudGlyZVJhbmdlKTsg
IWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBpZiAoIWl0LnRleHQoKS5sZW5n
dGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJp
YnV0ZWRTdHJpbmc6YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0pLmdl
dCgpXTsKQEAgLTE5Miw3ICsxOTAsNyBAQCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nIFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlbgogICAgICAg
ICBmb3IgKGF1dG8qIG1hcmtlciA6IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLm1h
cmtlcnNJblJhbmdlKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcp
KSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OlBs
YXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpOwogICAgICAgICAgICAgYXV0
byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgfSk7
Ci0gICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZh
bHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJhbmdlLCBzdWJyYW5nZSldOworICAgICAg
ICAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGU6ZGF0YS5rZXkgdmFsdWU6ZGF0YS52YWx1ZSByYW5n
ZTpjaGFyYWN0ZXJSYW5nZSgqZW50aXJlUmFuZ2UsIHN1YnJhbmdlKV07CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAppbmRleCA1ZjVlODY0MWFkZWNkMjZjYjllZmQ3OThhMzkwMGY3NzNkOTRlNzNi
Li41MzE4NTUzOGI5ZTA1MTkwM2E5ZDZlZGU3NWI0ZTBlYzgzNTI2OTMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYXRoVXRpbGl0aWVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2ltcGxlUmFuZ2UuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTExLDExICsxMTIs
MTEgQEAgdWludDMyX3QgRmluZENvbnRyb2xsZXI6OnJlcGxhY2VNYXRjaGVzKGNvbnN0IFZlY3Rv
cjx1aW50MzJfdD4mIG1hdGNoSW5kaWNlcywgY28KICAgICAvLyBwZXJpb2RpY2FsbHkgdXBkYXRl
IGFuIE5TUHJvZ3Jlc3MgaW4gdGhlIFVJIHByb2Nlc3Mgd2hlbiBhIGJhdGNoIG9mIGZpbmQtaW4t
cGFnZSBtYXRjaGVzIGFyZSByZXBsYWNlZC4KICAgICBjb25zdCB1aW50MzJfdCBtYXhpbXVtTnVt
YmVyT2ZNYXRjaGVzVG9SZXBsYWNlID0gMTAwMDsKIAotICAgIFZlY3RvcjxSZWY8UmFuZ2U+PiBy
YW5nZXNUb1JlcGxhY2U7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByYW5nZXNUb1JlcGxhY2U7
CiAgICAgcmFuZ2VzVG9SZXBsYWNlLnJlc2VydmVDYXBhY2l0eShzdGQ6Om1pbjx1aW50MzJfdD4o
bWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFjZSwgbWF0Y2hJbmRpY2VzLnNpemUoKSkpOwog
ICAgIGZvciAoYXV0byBpbmRleCA6IG1hdGNoSW5kaWNlcykgewogICAgICAgICBpZiAoaW5kZXgg
PCBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJhbmdlc1RvUmVwbGFjZS51bmNo
ZWNrZWRBcHBlbmQoKm1fZmluZE1hdGNoZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIHJhbmdlc1Rv
UmVwbGFjZS51bmNoZWNrZWRBcHBlbmQobV9maW5kTWF0Y2hlc1tpbmRleF0pOwogICAgICAgICBp
ZiAocmFuZ2VzVG9SZXBsYWNlLnNpemUoKSA+PSBtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBs
YWNlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjQzLDEyICsyNDQsMTAgQEAgdm9p
ZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9u
U2V0PEZpbmRPcHRpb25zPiBvcHQKICAgICBib29sIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxl
Y3Rpb24gPSBmYWxzZTsKICAgICBpZiAoIXBsdWdpblZpZXcpIHsKICAgICAgICAgaWYgKEZyYW1l
KiBzZWxlY3RlZEZyYW1lID0gZnJhbWVXaXRoU2VsZWN0aW9uKG1fd2ViUGFnZS0+Y29yZVBhZ2Uo
KSkpIHsKLSAgICAgICAgICAgIEZyYW1lU2VsZWN0aW9uJiBmcyA9IHNlbGVjdGVkRnJhbWUtPnNl
bGVjdGlvbigpOwotICAgICAgICAgICAgaWYgKGZzLnNlbGVjdGlvbkJvdW5kcygpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKLSAgICAgICAgICAg
ICAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0gICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlT3B0aW9ucywg
bWF4TWF0Y2hDb3VudCwgbV9maW5kTWF0Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOwotICAgICAg
ICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gaW5kZXhGb3JTZWxlY3Rpb247Cisg
ICAgICAgICAgICBpZiAoc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRz
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRj
aENvdW50KTsKKyAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShyZXN1bHQu
cmFuZ2VzKTsKKyAgICAgICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IHJlc3Vs
dC5pbmRleEZvclNlbGVjdGlvbjsKICAgICAgICAgICAgICAgICBmb3VuZFN0cmluZ1N0YXJ0c0Fm
dGVyU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjg0LDE2
ICsyODMsMTQgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25zPiBvcHQKIAogdm9pZCBGaW5kQ29udHJvbGxl
cjo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5k
T3B0aW9ucz4gb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIHsKLSAgICBtX2ZpbmRN
YXRjaGVzLmNsZWFyKCk7Ci0gICAgaW50IGluZGV4Rm9yU2VsZWN0aW9uOwotCi0gICAgbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlKG9w
dGlvbnMpLCBtYXhNYXRjaENvdW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7
CisgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hl
cyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291bnQpOworICAgIG1fZmluZE1hdGNo
ZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnRSZWN0
Pj4gbWF0Y2hSZWN0czsKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV9maW5kTWF0Y2hlcykKLSAg
ICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygq
cmFuZ2UpKTsKKyAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRleHRSZWN0cyhyYW5nZSkpOwogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmluZywgbWF0Y2hSZWN0cywgaW5kZXhG
b3JTZWxlY3Rpb24pKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhG
b3JTZWxlY3Rpb24pKTsKIAogICAgIGlmICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6
U2hvd092ZXJsYXkpICYmICFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZElu
ZGljYXRvcikpCiAgICAgICAgIHJldHVybjsKQEAgLTMwOCwxMiArMzA1LDEyIEBAIHZvaWQgRmlu
ZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7
CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2Zp
bmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZpc2libGVTZWxlY3Rp
b24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqbV9maW5kTWF0
Y2hlc1ttYXRjaEluZGV4XSkpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
bV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSk7CiAKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBzZWxlY3Rpb25TbmFwc2hvdCA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSktPmNy
ZWF0ZVNlbGVjdGlvblNuYXBzaG90KCk7CiAKQEAgLTMzOSwxMCArMzM2LDEwIEBAIHZvaWQgRmlu
ZENvbnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1aW50MzJfdCBtYXRjaEluZGV4KQogewogICAg
IGlmIChtYXRjaEluZGV4ID49IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS0+c3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0
Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCptX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKSk7
CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtX2ZpbmRNYXRjaGVzW21hdGNo
SW5kZXhdKTsKIH0KIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6aW5kaWNhdGVGaW5kTWF0Y2godWlu
dDMyX3QgbWF0Y2hJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDJmZDNmYWMxZWM2YzJjMjExOTI1Y2I1ZDdhZGJjMTky
NTcyN2Q5ZDkuLmY2ZjZmOWQyMTA0ZDNhNzllM2ZlOGQ5ODFmMTQ0NTk2NDIyNDMyM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaApA
QCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gdGhlIGZpbmQgaW5kaWNhdG9yIGlz
bid0IHNob3dpbmcsIGJ1dCBpdCB3aWxsIG5ldmVyIGJlIGZhbHNlIHdoZW4gaXQgaXMgc2hvd2lu
Zy4KICAgICBib29sIG1faXNTaG93aW5nRmluZEluZGljYXRvciB7IGZhbHNlIH07CiAgICAgV2Vi
Q29yZTo6SW50UmVjdCBtX2ZpbmRJbmRpY2F0b3JSZWN0OwotICAgIFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6UmFuZ2U+PiBtX2ZpbmRNYXRjaGVzOworICAgIFZlY3RvcjxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4gbV9maW5kTWF0Y2hlczsKICAgICAvLyBJbmRleCB2YWx1ZSBpcyAtMSBpZiBub3QgZm91
bmQgb3IgaWYgbnVtYmVyIG9mIG1hdGNoZXMgZXhjZWVkcyBwcm92aWRlZCBtYXhpbXVtLgogICAg
IGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCB7IC0xIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZWQzYjYzZmRkZTNhNzdiOGY5ZWI5
ODMxNWU1ZThkOWJiNTFjMGRiNy4uMmRjNTA1Y2ZkYjEzYjAwMzJmZGE1NDllMGM5ZDVkNjcyNzJi
NDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTU0MzcsMTMgKzU0MzcsMTMgQEAgdm9pZCBXZWJQYWdlOjpoYXNNYXJrZWRUZXh0KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB2b2lkIFdlYlBh
Z2U6OmdldE1hcmtlZFJhbmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0
aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFu
Z2UoZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKS5nZXQoKSkpOworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5lZGl0b3Io
KS5jb21wb3NpdGlvblJhbmdlKCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3RlZFJh
bmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEVk
aXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBh
Z2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTU0NTIsOCArNTQ1Miw4IEBAIHZvaWQg
V2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwb2ludCwgQ2FsbGJhCiAgICAgYXV0byByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBoaXRUeXBlKTsKICAg
ICBhdXRvJiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/ICpyZXN1bHQuaW5u
ZXJOb2RlRnJhbWUoKSA6IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAgICAgYXV0byByYW5nZSA9IGZyYW1lLnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5k
ZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0
aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgcmFuZ2UuZ2V0KCkpOwotICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhzdGF0aWNfY2FzdDx1aW50NjRfdD4o
ZWRpdGluZ1JhbmdlLmxvY2F0aW9uKSwgY2FsbGJhY2tJRCkpOworICAgIGF1dG8gZWRpdGluZ1Jh
bmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIG1ha2VTaW1wbGVSYW5nZShyYW5n
ZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhl
ZGl0aW5nUmFuZ2UubG9jYXRpb24sIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGlu
Z1JhbmdlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGNhNDNkODYxM2FiNjNlOTI4
MmFlYTJkNDM3ZjcxNjVhY2VhMTdmNTQuLmEwNTMzZWVjYzQwNjRkYTFjYjZjMWNkMGY2ODY5YmMx
OGUzOGFmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCkBAIC0xMTQsNiArMTE0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxh
dGZvcm1Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BvaW50ZXJDYXB0dXJlQ29udHJv
bGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9RdWlya3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFu
Z2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxvY2suaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVySW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KQEAgLTE1MCwy
OSArMTUxLDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBGSVhNRTogVW5jbGVhciBpZiBj
YWxsZXJzIGluIHRoaXMgZmlsZSBhcmUgY29ycmVjdGx5IGNob29zaW5nIHdoaWNoIG9mIHRoZXNl
IHR3byBmdW5jdGlvbnMgdG8gdXNlLgogCi1zdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRl
eHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBXZWJDb3JlOjpwbGFp
blRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UpOwotfQotCiBzdGF0aWMgU3RyaW5nIHBs
YWluVGV4dEZvckNvbnRleHQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsK
LSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0
cmluZygpOworICAgIHJldHVybiByYW5nZSA/IFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05v
QnJlYWtTcGFjZSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogc3RhdGljIFN0cmluZyBw
bGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICByZXR1cm4gcmFu
Z2UgPyBwbGFpblRleHRGb3JDb250ZXh0KFNpbXBsZVJhbmdlIHsgKnJhbmdlIH0pIDogZW1wdHlT
dHJpbmcoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2ltcGxlUmFuZ2Uo
cmFuZ2UpKTsKIH0KIAotc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBXZWJDb3JlOjpw
bGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UsIFRleHRJdGVyYXRvckRlZmF1bHRC
ZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gV2ViQ29yZTo6cGxhaW5UZXh0UmVw
bGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0
cnVlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlz
cGxheShjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0
Rm9yRGlzcGxheSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0
Rm9yRGlzcGxheShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKQpAQCAtMjg5LDcgKzI4NSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0
UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNv
bnN0CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0RW5kID0gcG9zdExheW91dERh
dGEuY2FyZXRSZWN0QXRTdGFydDsKICAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgY2hl
Y2sgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHdyaXRpbmcgZGlyZWN0aW9uLgogICAgICAgICBw
b3N0TGF5b3V0RGF0YS5pc1JlcGxhY2VBbGxvd2VkID0gcmVzdWx0LmlzQ29udGVudEVkaXRhYmxl
ICYmIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHNlbGVjdGlvbi5zdGFydCgpLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAg
ICAgICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gcGxhaW5UZXh0Rm9yQ29udGV4
dCh3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpLmdldCgpKTsKKyAgICAg
ICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh3
b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpKTsKICAgICAgICAgaWYgKHNl
bGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgY2hhcmFjdGVyc0Fyb3Vu
ZFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBwb3N0TGF5b3V0RGF0YS5jaGFyYWN0ZXJBZnRl
clNlbGVjdGlvbiwgcG9zdExheW91dERhdGEuY2hhcmFjdGVyQmVmb3JlU2VsZWN0aW9uLCBwb3N0
TGF5b3V0RGF0YS50d29DaGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb24pOwogICAgIH0gZWxzZSBpZiAo
c2VsZWN0aW9uLmlzUmFuZ2UoKSkgewpAQCAtNTUzLDggKzU0OSw4IEBAIHZvaWQgV2ViUGFnZTo6
Z2V0U2VsZWN0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgY29uc3QgaW50
IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCA9IDM1MDsKICAgICAKICAgICBTdHJpbmcg
c2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKLSAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBs
YWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRX
b3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0
aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKS5n
ZXQoKSk7Ci0gICAgU3RyaW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VF
eHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKS5nZXQoKSk7CisgICAgU3RyaW5nIHRleHRCZWZv
cmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVj
dGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNr
d2FyZCkpOworICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdl
RXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgs
IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soc2VsZWN0ZWRUZXh0LCB0ZXh0QmVm
b3JlLCB0ZXh0QWZ0ZXIsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTk4OCw4ICs5ODQsNyBAQCB2b2lk
IFdlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcoKQogICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVm
KG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkpOwogICAgIGlm
IChhdXRvIHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRy
b3BTbmFwc2hvdCA9IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMoKnNlbGVjdGlvblJhbmdlKTsKLSAgICAgICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFNpbXBs
ZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9OwotICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uo
Y29sbGFwc2VkUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKFNpbXBsZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwg
c2VsZWN0aW9uUmFuZ2UtPmVuZCB9LCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAgIG1fcmFuZ2VGb3JEcm9w
U25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAKQEAgLTExMTMsMTUg
KzExMDgsMTQgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTdHlsdXNTaW5nbGVUYXBBdFBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDYKICAgICBpZiAocmVuZGVyZXItPmlz
UmVwbGFjZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdC5sb2NhbFBvaW50KCksIG51
bGxwdHIpOworICAgIGF1dG8gcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludCho
aXRUZXN0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgp
KQogICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsK
LQotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBs
ZVJhbmdlKHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24s
IHBvc2l0aW9uKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdl
LnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZSgqcmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICBhdXRvIGltYWdlID0gZnJhbWUuZWRpdG9yKCkuaW5zZXJ0RWRpdGFibGVJbWFnZSgpOwog
ICAgIGZyYW1lLmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KGltYWdlLmdldCgpKTsKIH0K
QEAgLTEzNzEsMTIgKzEzNjUsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShj
b25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVy
ZVR5cGUsIGdlc3R1cmVTdGF0ZSwgeyB9LCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2U7CiAgICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBmbGFnczsKICAgICBHZXN0
dXJlUmVjb2duaXplclN0YXRlIHdrR2VzdHVyZVN0YXRlID0gc3RhdGljX2Nhc3Q8R2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKTsKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEdl
c3R1cmVUeXBlPihnZXN0dXJlVHlwZSkpIHsKLSAgICBjYXNlIEdlc3R1cmVUeXBlOjpQaHJhc2VC
b3VuZGFyeToKLSAgICB7CisgICAgY2FzZSBHZXN0dXJlVHlwZTo6UGhyYXNlQm91bmRhcnk6IHsK
ICAgICAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGF1dG8gbWFya2VkUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21w
b3NpdGlvblJhbmdlKCk7CkBAIC0xMzg2LDQwICsxMzc5LDM2IEBAIHZvaWQgV2ViUGFnZTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJl
VHlwZSwKICAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0
UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9IGRpc3Rh
bmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikgPyBQaHJhc2VCb3Vu
ZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IHsgfTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNoYW5nZWQ7Ci0gICAgICAgIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9u
KTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAg
ICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgY2FzZSBHZXN0dXJlVHlwZTo6T25lRmluZ2VyVGFw
OgotICAgIHsKKyAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVGaW5nZXJUYXA6IHsKICAgICAgICAg
YXV0byBbYWRqdXN0ZWRQb3NpdGlvbiwgd2l0aGluV29yZEJvdW5kYXJ5XSA9IHdvcmRCb3VuZGFy
eUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGluZShwb3NpdGlvbik7CiAgICAgICAgIGlmICh3
aXRoaW5Xb3JkQm91bmRhcnkgPT0gV2l0aGluV29yZEJvdW5kYXJ5OjpZZXMpCiAgICAgICAgICAg
ICBmbGFncyA9IFdvcmRJc05lYXJUYXA7Ci0gICAgICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLmlz
Tm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1
bWVudCgpLCBhZGp1c3RlZFBvc2l0aW9uLCBhZGp1c3RlZFBvc2l0aW9uKTsKLSAgICB9CisgICAg
ICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGFkanVzdGVkUG9zaXRpb24pOwogICAgICAgICBi
cmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdlc3R1cmVUeXBlOjpMb3VwZToKICAgICAgICAgaWYg
KHBvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwor
ICAgICAgICBlbHNlIHsKICNpZiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgICAgICAgICBy
YW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7CiAjZWxzZQogICAgICAgICAg
ICAgc3dpdGNoICh3a0dlc3R1cmVTdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVj
b2duaXplclN0YXRlOjpCZWdhbjogewotICAgICAgICAgICAgICAgIGF1dG8gYm91bmRhcnkgPSAq
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgICAgICAgICAgICAgIG1fc3RhcnRpbmdH
ZXN0dXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IGJvdW5kYXJ5LCBib3VuZGFyeSB9OworICAgICAg
ICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbjoKKyAgICAgICAgICAgICAg
ICBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAgICAgICAgICAgICAgICBpZiAobV9zdGFy
dGluZ0dlc3R1cmVSYW5nZSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UtPnN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgcG9zaXRpb24pCi0gICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0
LCBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXJ0ID0gbV9zdGFydGlu
Z0dlc3R1cmVSYW5nZS0+c3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oc3RhcnQpIDwgcG9zaXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgcG9zaXRpb24pOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBzdGFydCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgc3RhcnQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6RW5kZWQ6CkBAIC0xNDMyLDYgKzE0MjEsNyBAQCB2b2lk
IFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVy
ZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAjZW5kaWYKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2VzdHVyZVR5
cGU6OlRhcEFuZEFIYWxmOgpAQCAtMTQ0NiwxMSArMTQzNiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNl
bGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVy
ZVR5cGUsCiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50V29yZFJhbmdlKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoKm1fY3VycmVudFdvcmRSYW5n
ZSk7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IHJhbmdlLT5lbmRQb3NpdGlvbigpKQotICAg
ICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Cisg
ICAgICAgICAgICByYW5nZSA9IG1fY3VycmVudFdvcmRSYW5nZTsKKyAgICAgICAgICAgIGlmIChw
b3NpdGlvbiA8IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKQorICAg
ICAgICAgICAgICAgIHJhbmdlLT5zdGFydCA9ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+ZW5kKSkKKyAgICAgICAgICAgICAgICByYW5nZS0+ZW5k
ID0gKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6RW5kZWQ6
CiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2FuY2VsbGVkOgpAQCAtMTQ2
Nyw3ICsxNDU3LDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICAgICAgLy8gRG91
YmxlLXRhcCBhdCBlbmQgb2YgbGluZSBvbmx5IHBsYWNlcyBpbnNlcnRpb24gcG9pbnQgdGhlcmUu
CiAgICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdldCB0aGUgY2FsbG91dCBmb3IgcGFzdGlu
ZyBhdCBlbmRzIG9mIGxpbmVzLAogICAgICAgICAgICAgLy8gcGFyYWdyYXBocywgYW5kIGRvY3Vt
ZW50cy4KLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHBvc2l0aW9uKTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICBicmVhazsKQEAgLTE0ODAsOSAr
MTQ3MCw4IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQm
IHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICBjYXNlIEdlc3R1cmVUeXBlOjpP
bmVGaW5nZXJUcmlwbGVUYXA6CiAgICAgICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShw
b3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpMaW5lR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVj
dGlvbjo6Rm9yd2FyZCkpIHsKICAgICAgICAgICAgIC8vIFRyaXBsZS10YXAgYXQgZW5kIG9mIGxp
bmUgb25seSBwbGFjZXMgaW5zZXJ0aW9uIHBvaW50IHRoZXJlLgotICAgICAgICAgICAgLy8gVGhp
cyBoZWxwcyB0byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5kcyBvZiBsaW5lcywK
LSAgICAgICAgICAgIC8vIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCi0gICAgICAgICAgICBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlv
bik7CisgICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdldCB0aGUgY2FsbG91dCBmb3IgcGFz
dGluZyBhdCBlbmRzIG9mIGxpbmVzLCBwYXJhZ3JhcGhzLCBhbmQgZG9jdW1lbnRzLgorICAgICAg
ICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0
aW9uLCBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpOwogICAgICAgICBicmVhazsKQEAgLTE0OTEsMTIgKzE0ODAsMTIgQEAg
dm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdl
c3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJh
bmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdl
dCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
IAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50
LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBmbGFncywgY2FsbGJhY2tJRCkpOwogfQogCi1z
dGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZy
YW1lJiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBi
b29sIGJhc2VJc1N0YXJ0KQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZvclBv
aW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBib29sIGJhc2VJc1N0YXJ0KQogewogICAgIFZpc2li
bGVTZWxlY3Rpb24gZXhpc3RpbmdTZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBleGlzdGluZ1NlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKTsKQEAgLTE1MTUsNyArMTUwNCw3IEBAIHN0YXRpYyBSZWZQdHI8
UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBj
b25zdCBJbnRQCiAgICAgfQogICAgIAogICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAK
ICAgICBjb25zdGV4cHIgT3B0aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0
VHlwZSB7IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwg
SGl0VGVzdFJlcXVlc3Q6OkFsbG93VmlzaWJsZUNoaWxkRnJhbWVDb250ZW50T25seSB9OwogICAg
IEhpdFRlc3RSZXN1bHQgaGl0VGVzdCA9IGZyYW1lLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1
bHRBdFBvaW50KHBvaW50SW5Eb2N1bWVudCwgaGl0VHlwZSk7CkBAIC0xNTI5LDIzICsxNTE4LDIx
IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQCiAgICAgICAgICAgICByZXN1bHQgPSBzZWxlY3Rp
b25TdGFydC5uZXh0KCk7CiAgICAgICAgIGVsc2UgaWYgKCZzZWxlY3Rpb25TdGFydC5kZWVwRXF1
aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJmhpdFRlc3QudGFyZ2V0Tm9k
ZSgpLT50cmVlU2NvcGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IFZpc2libGVTZWxlY3Rpb246
OmFkanVzdFBvc2l0aW9uRm9yRW5kKHJlc3VsdC5kZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25T
dGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzZWxlY3Rpb25TdGFydCwgcmVzdWx0KTsKKworICAgICAg
ICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgcmVzdWx0KTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhzZWxlY3Rpb25FbmQsIHJlc3Vs
dCkgPD0gMCkKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVjdGlvbkVuZC5wcmV2aW91cygpOwog
ICAgICAgICBlbHNlIGlmICgmaGl0VGVzdC50YXJnZXROb2RlKCktPnRyZWVTY29wZSgpICE9ICZz
ZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPnRyZWVTY29wZSgpKQog
ICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0UG9zaXRpb25Gb3JT
dGFydChyZXN1bHQuZGVlcEVxdWl2YWxlbnQoKSwgc2VsZWN0aW9uRW5kLmRlZXBFcXVpdmFsZW50
KCkuY29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuaXNOb3RO
dWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50
KCksIHJlc3VsdC5kZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQpOworCisgICAgICAgIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHJlc3VsdCwgc2VsZWN0aW9uRW5kKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIHJhbmdlOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0V29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBib29sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9z
aXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBib29s
IGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIFNlbGVj
dGlvbkRpcmVjdGlvbiBzYW1lRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQgOiBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkOwogICAgIFNlbGVj
dGlvbkRpcmVjdGlvbiBvcHBvc2l0ZURpcmVjdGlvbiA9IGJhc2VJc1N0YXJ0ID8gU2VsZWN0aW9u
RGlyZWN0aW9uOjpCYWNrd2FyZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZDsKQEAgLTE1
NTUsNyArMTU0Miw3IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlG
b3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQCiAKICAgICBpZiAoYXRCb3Vu
ZGFyeU9mR3JhbnVsYXJpdHkoZXh0ZW50LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgc2FtZURpcmVjdGlvbikpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmQgYm91bmRhcnku
IExlYXZlIHNlbGVjdGlvbiB3aGVyZSBpdCBpcy4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKGF0Qm91bmRhcnlP
ZkdyYW51bGFyaXR5KGV4dGVudCwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIG9w
cG9zaXRlRGlyZWN0aW9uKSkgewpAQCAtMTU3MCw3ICsxNTU3LDkgQEAgc3RhdGljIFJlZlB0cjxS
YW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3Qg
VmlzaWJsZVAKICAgICAgICAgJiYgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkod29yZEJvdW5kYXJ5
LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgc2FtZURpcmVjdGlvbikKICAgICAg
ICAgJiYgaW5pdGlhbEV4dGVudCAhPSB3b3JkQm91bmRhcnkpIHsKICAgICAgICAgZXh0ZW50ID0g
d29yZEJvdW5kYXJ5OwotICAgICAgICByZXR1cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNy
ZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGJhc2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpm
cmFtZS0+ZG9jdW1lbnQoKSwgZXh0ZW50LCBiYXNlKTsKKyAgICAgICAgaWYgKCEoYmFzZSA8IGV4
dGVudCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAoYmFzZSwgZXh0ZW50KTsKKyAgICAgICAgcmV0
dXJuIG1ha2VTaW1wbGVSYW5nZShiYXNlLCBleHRlbnQpOwogICAgIH0KICAgICAvLyBDb252ZXJz
ZWx5LCBpZiB0aGUgaW5pdGlhbCBleHRlbnQgZXF1YWxzIHRoZSBjdXJyZW50IHdvcmQgYm91bmRh
cnksIHRoZW4KICAgICAvLyBydW4gdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiB0byBzZWUgaWYg
dGhlIHNlbGVjdGlvbiBzaG91bGQgZXh0ZW5kCkBAIC0xNTkwLDkgKzE1NzksMTEgQEAgc3RhdGlj
IFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBmcmFt
ZSwgY29uc3QgVmlzaWJsZVAKICAgICBpZiAoZXh0ZW50LmlzTnVsbCgpIHx8IGV4dGVudCA9PSBi
YXNlKQogICAgICAgICBleHRlbnQgPSB3b3JkQm91bmRhcnk7CiAgICAgaWYgKGV4dGVudC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUt
PmRvY3VtZW50KCksIGJhc2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1l
bnQoKSwgZXh0ZW50LCBiYXNlKTsKKyAgICBpZiAoIShiYXNlIDwgZXh0ZW50KSkKKyAgICAgICAg
c3RkOjpzd2FwKGJhc2UsIGV4dGVudCk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShiYXNl
LCBleHRlbnQpOwogfQogCiBJbnRSZWN0IFdlYlBhZ2U6OnJvb3RWaWV3Qm91bmRzRm9yRWxlbWVu
dChjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtMTcwNywzMSArMTY5OCwyOCBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwg
U2VsZWN0aW9uVG91Y2ggcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcmVzdWx0OwotICAgIE9wdGlvblNldDxT
ZWxlY3Rpb25GbGFncz4gZmxhZ3M7Ci0KICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hTeW50aGV0aWNN
b3VzZUV2ZW50c1doZW5Nb2RpZnlpbmdTZWxlY3Rpb24oKSkKICAgICAgICAgZGlzcGF0Y2hTeW50
aGV0aWNNb3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoc2VsZWN0aW9uVG91Y2gsIHBvaW50
KTsKIAorICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25TZXQ8U2Vs
ZWN0aW9uRmxhZ3M+IGZsYWdzOworCiAgICAgc3dpdGNoIChzZWxlY3Rpb25Ub3VjaCkgewogICAg
IGNhc2UgU2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQ6CiAgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6
RW5kZWROb3RNb3Zpbmc6CiAgICAgICAgIGJyZWFrOwotICAgIAorCiAgICAgY2FzZSBTZWxlY3Rp
b25Ub3VjaDo6RW5kZWQ6Ci0gICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjbG9zZXN0V29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5p
c05vdE51bGwoKSkKLSAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIHJlc3VsdCwgcmVzdWx0KTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlm
IChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAg
ICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBv
c2l0aW9uKHBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhbmdlID0gcmFu
Z2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhmcmFtZSwgcG9pbnQsIGJhc2VJc1N0YXJ0
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZE1vdmlu
Z0ZvcndhcmQ6CiAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9u
KCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndh
cmQpOwogICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICBjYXNlIFNlbGVjdGlvblRvdWNo
OjpFbmRlZE1vdmluZ0JhY2t3YXJkOgogICAgICAgICByYW5nZSA9IHJhbmdlQXRXb3JkQm91bmRh
cnlGb3JQb3NpdGlvbigmZnJhbWUsIHBvc2l0aW9uLCBiYXNlSXNTdGFydCwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTc0MCw4ICsxNzI4LDkgQEAg
dm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBJbnRQb2ludCYg
cG9pbnQsIFNlbGVjdGlvblRvdWNoIHMKICAgICAgICAgcmFuZ2UgPSByYW5nZUZvclBvaW50SW5S
b290Vmlld0Nvb3JkaW5hdGVzKGZyYW1lLCBwb2ludCwgYmFzZUlzU3RhcnQpOwogICAgICAgICBi
cmVhazsKICAgICB9CisKICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgcG9z
aXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpUb3VjaGVzQ2FsbGJhY2socG9pbnQsIHNlbGVjdGlvblRvdWNoLCBmbGFncywgY2FsbGJh
Y2tJRCkpOwogfQpAQCAtMTc0OSwxNSArMTczOCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNl
bGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9uVG91Y2gg
cwogdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCBHZXN0dXJlVHlwZSBnZXN0
dXJlVHlwZSwgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSBnZXN0dXJlU3RhdGUsIENhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBmcm9tUG9zaXRp
b24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3
VG9Db250ZW50cyhmcm9tKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHRvUG9zaXRpb24gPSBmcmFt
ZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50
cyh0bykpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgaWYgKGZyb21Qb3NpdGlvbi5p
c05vdE51bGwoKSAmJiB0b1Bvc2l0aW9uLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIGlmIChmcm9t
UG9zaXRpb24gPCB0b1Bvc2l0aW9uKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBmcm9tUG9zaXRpb24sIHRvUG9zaXRpb24pOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHRvUG9zaXRpb24sIGZyb21Qb3NpdGlvbik7Ci0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGZyb21Qb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJl
ZCk7CisgICAgYXV0byBmcm9tUG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhmcm9tKSk7CisgICAgYXV0byB0b1Bv
c2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290
Vmlld1RvQ29udGVudHModG8pKTsKKyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShmcm9tUG9zaXRpb24sIHRvUG9zaXRpb24pKSB7CisgICAgICAgIGlmICghKGZyb21Qb3NpdGlv
biA8IHRvUG9zaXRpb24pKQorICAgICAgICAgICAgc3RkOjpzd2FwKHJhbmdlLT5zdGFydCwgcmFu
Z2UtPmVuZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFu
Z2UsIGZyb21Qb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQogCiAgICAgLy8gV2Ug
Y2FuIHVzZSB0aGUgc2FtZSBjYWxsYmFjayBmb3IgdGhlIGdlc3R1cmVzIHdpdGggb25lIHBvaW50
LgpAQCAtMTc4MSwxMyArMTc2NywxMyBAQCB2b2lkIFdlYlBhZ2U6OmV4dGVuZFNlbGVjdGlvbihX
ZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIENvbXBsZXRpb25IYQogICAgIElu
dFBvaW50IGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHM7CiAgICAgYm9vbCBzaG91
bGREaXNwYXRjaE1vdXNlRXZlbnRzID0gc2hvdWxkRGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50
c1doZW5Nb2RpZnlpbmdTZWxlY3Rpb24oKTsKICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hNb3VzZUV2
ZW50cykgewotICAgICAgICBhdXRvIHN0YXJ0TG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50
cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbih3b3Jk
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsK
LSAgICAgICAgZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyA9IGZyYW1lLnZpZXco
KS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbih3b3JkUmFuZ2UtPmVuZFBvc2l0
aW9uKCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7CisgICAgICAgIGF1dG8gc3Rh
cnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50
c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3
b3JkUmFuZ2UtPnN0YXJ0KSkuYWJzb2x1dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKKyAgICAg
ICAgZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyA9IGZyYW1lLnZpZXcoKS0+Y29u
dGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24od29yZFJhbmdlLT5lbmQpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOwogICAg
ICAgICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxl
Y3Rpb25Ub3VjaDo6U3RhcnRlZCwgc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRz
KTsKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1
cmUoU2VsZWN0aW9uVG91Y2g6Ok1vdmVkLCBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZl
bnRzKTsKICAgICB9CiAKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdv
cmRSYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLCBwb3NpdGlvbi5hZmZpbml0eSgp
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiAKICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hNb3VzZUV2ZW50cykKICAgICAgICAg
ZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoU2VsZWN0aW9u
VG91Y2g6OkVuZGVkLCBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzKTsKQEAgLTE4
MTIsMTAgKzE3OTgsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXb3JkQmFja3dhcmQoKQogICAg
IGlmICghZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25P
Zk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29y
ZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLSAgICBpZiAoc3Rh
cnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBzdGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAg
ICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24u
YWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZ
ZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBw
b3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFy
aXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOworICAg
IGlmIChzdGFydFBvc2l0aW9uLmlzTnVsbCgpIHx8IHN0YXJ0UG9zaXRpb24gPT0gcG9zaXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UobWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSwgcG9zaXRpb24uYWZm
aW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMs
IFVzZXJUcmlnZ2VyZWQpOwogfQogCiB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNl
dChpbnQzMl90IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTgzMyw3ICsxODIxLDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9u
QnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBz
dGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBw
b3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24p
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
IH0KICAgICAKQEAgLTE5ODUsNyArMTk3Myw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JH
cmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5CiAg
ICAgfQogCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3Rz
OwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxp
bmVzKHNlbGVjdGlvblJlY3RzKTsKKyAgICBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29sbGVj
dFNlbGVjdGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhzZWxlY3Rpb25SZWN0cyk7
CiAgICAgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3U2VsZWN0aW9uUmVjdHMoKmZyYW1lLnZpZXco
KSwgc2VsZWN0aW9uUmVjdHMpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2Vs
ZWN0aW9uUmVjdHNDYWxsYmFjayhzZWxlY3Rpb25SZWN0cywgY2FsbGJhY2tJRCkpOwogfQpAQCAt
MjA2NSw3ICsyMDUzLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBib29sIGlzSW50ZXIKICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJh
bWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICAKICAgICBp
ZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBv
c2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiks
IHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQogCkBAIC0yMDc3LDcgKzIwNjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRC
b3VuZGFyeVdpdGhEaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaQogICAgIGlm
IChwb3NpdGlvbi5pc05vdE51bGwoKSkgewogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uT2ZO
ZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgZGlyZWN0aW9u
KTsKICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAg
ICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2Uo
cG9zaXRpb24pLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQpAQCAtMjA5MSw3ICsyMDc5LDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9u
QXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW4KICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gKGlzRm9yd2FyZCkgPyBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkgOiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4
dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbik7
CiAgICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkKLSAgICAgICAgICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgaXNGb3J3YXJkPyBVUFNUUkVBTSA6IERPV05T
VFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgaXNGb3J3YXJkPyBVUFNUUkVBTSA6IERP
V05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAg
LTIxMDAsMjUgKzIwODgsMTMgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFdlYlBhZ2U6OnJhbmdl
Rm9yR3JhbnVsYXJpdHlBdFBvaW50KEZyYW1lJiBmcmFtZSwgY29uc3QgV2UKIHsKICAgICBhdXRv
IHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBw
b2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAgc3dpdGNoIChncmFu
dWxhcml0eSkgewotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0
eTogewotICAgICAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
OwotICAgICAgICBpZiAoIWJvdW5kYXJ5KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICAgICAgcmV0dXJuIHsgeyAqYm91bmRhcnksICpib3VuZGFyeSB9IH07Ci0gICAgfQot
ICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0
byByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIGlmICgh
cmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4g
eyAqcmFuZ2UgfTsKLSAgICB9CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3Rlckdy
YW51bGFyaXR5OgorICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKKyAg
ICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICBjYXNlIFRleHRHcmFudWxhcml0
eTo6U2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6UGFyYWdy
YXBoR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgZ3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6
Rm9yd2FyZCk7Ci0gICAgICAgIGlmICghcmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgICAgICByZXR1cm4geyAqcmFuZ2UgfTsKLSAgICB9CisgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6RG9jdW1lbnRH
cmFudWxhcml0eToKICAgICAgICAgLy8gRklYTUU6IE1ha2VzIG5vIHNlbnNlIHRoYXQgdGhpcyBt
dXRhdGVzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgcmV0dXJucyBudWxsLgogICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKQEAgLTIxNjUsNyArMjE0MSw3IEBAIHZvaWQg
V2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCBXCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvckdy
YW51bGFyaXR5QXRQb2ludChmcmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5n
V2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIFVQ
U1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcywg
VXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoKnJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIG1faW5pdGlhbFNlbGVjdGlvbiA9IHJh
bmdlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0yMTk3LDEwICsyMTczLDggQEAg
dm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYKICAgICBlbHNlIGlmIChwb3NpdGlvbiA8IGluaXRpYWxT
ZWxlY3Rpb25TdGFydFBvc2l0aW9uKQogICAgICAgICBzZWxlY3Rpb25TdGFydCA9IGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihuZXdSYW5nZS0+c3RhcnQpOwogCi0gICAgaWYgKHNlbGVjdGlv
blN0YXJ0LmlzTm90TnVsbCgpICYmIHNlbGVjdGlvbkVuZC5pc05vdE51bGwoKSkgewotICAgICAg
ICBhdXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
U3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9OwotICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRy
KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcywgVXNlclRyaWdnZXJlZCk7Ci0gICAgfQorICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpKQorICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHNlbGVjdGlv
blN0YXJ0ID09IGluaXRpYWxTZWxlY3Rpb25TdGFydFBvc2l0aW9uLCBjYWxsYmFja0lEKSk7CiB9
CkBAIC0yMjE1LDcgKzIxODksNiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhF
eHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvbwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBWaXNpYmxlUG9z
aXRpb24gc2VsZWN0aW9uU3RhcnQ7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZDsK
ICAgICAKQEAgLTIyNDksMTEgKzIyMjIsOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlv
bldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvbwogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc05vdE51bGwoKSAm
JiBzZWxlY3Rpb25FbmQuaXNOb3ROdWxsKCkpCi0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0KLSAg
ICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
cmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpCisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2sobV9zZWxl
Y3Rpb25BbmNob3IgPT0gU3RhcnQsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIzMDMsMTIgKzIyNzMs
MTIgQEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xk
VGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byB3b3JkUmFu
Z2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkKICAgICAgICAgPyB3b3JkUmFuZ2VGcm9t
UG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkKLSAgICAgICAg
OiBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSk7Ci0gICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlLmdldCgp
KSAhPSBvbGRUZXh0KQorICAgICAgICA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdl
KSAhPSBvbGRUZXh0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZnJhbWUuZWRpdG9yKCku
c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBmcmFtZS5lZGl0b3IoKS5pbnNl
cnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoZmFsc2UpOwogfQpAQCAtMjMyOCwxNCArMjI5OCwxNCBAQCB2b2lkIFdlYlBhZ2U6
OnJlcGxhY2VEaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBjb25zdCBTdHJpbmcm
IG5ld1RleHQpCiAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsKICAgICBp
ZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRPZkRvY3VtZW50
KGZyYW1lLmRvY3VtZW50KCkpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKLSAgICBpZiAocGxhaW5UZXh0Rm9y
Q29udGV4dChyYW5nZS5wdHIoKSkgIT0gb2xkVGV4dCkKKyAgICBpZiAocGxhaW5UZXh0Rm9yQ29u
dGV4dChyYW5nZSkgIT0gb2xkVGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBub3RpZnkgdGhlIGNsaWVudCB0aGF0IHRoZSBzZWxlY3Rpb24gaGFzIGNoYW5n
ZWQgdW50aWwgd2UgYXJlIGRvbmUgaW5zZXJ0aW5nIHRoZSBuZXcgdGV4dC4KICAgICBmcmFtZS5l
ZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwotICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBmcmFtZS5lZGl0b3IoKS5pbnNl
cnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoZmFsc2UpOwogfQpAQCAtMjM0OCwyNyArMjMxOCwyNSBAQCB2b2lkIFdlYlBhZ2U6
OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoY29uc3QgU3RyaW5nJiB0ZXh0Rm9yQXV0b2NvcnJl
Y3Rpb24sIENvbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBh
dXRvIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBhdXRvIHJh
bmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpKTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIHJlcGx5KHsgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHRleHRGb3JSYW5nZSA9IHBsYWlu
VGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gdGV4dEZvclJhbmdlID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgY29uc3QgdW5zaWduZWQgbWF4U2VhcmNoQXR0
ZW1wdHMgPSA1OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyAgaSA8IG1heFNlYXJjaEF0dGVtcHRz
ICYmIHRleHRGb3JSYW5nZSAhPSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb247ICsraSkKLSAgICB7Ci0g
ICAgICAgIHBvc2l0aW9uID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5wcmV2aW91cygpOwotICAg
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkgfHwgcG9zaXRpb24gPT0gcmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgIGkgPCBtYXhTZWFyY2hBdHRlbXB0cyAm
JiB0ZXh0Rm9yUmFuZ2UgIT0gdGV4dEZvckF1dG9jb3JyZWN0aW9uOyArK2kpIHsKKyAgICAgICAg
YXV0byBwb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQp
LnByZXZpb3VzKCk7CisgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSB8fCBwb3NpdGlvbiA9
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbiktPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2Ut
PmVuZFBvc2l0aW9uKCkpOwotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250
ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgcmFuZ2UgPSB7IHsgd29yZFJhbmdlRnJvbVBvc2l0
aW9uKHBvc2l0aW9uKS0+c3RhcnQsIHJhbmdlLT5lbmQgfSB9OworICAgICAgICB0ZXh0Rm9yUmFu
Z2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICB9CiAKICAgICBWZWN0b3I8U2Vs
ZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7CiAgICAgaWYgKHRleHRGb3JSYW5nZSA9PSB0ZXh0
Rm9yQXV0b2NvcnJlY3Rpb24pCi0gICAgICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMo
c2VsZWN0aW9uUmVjdHMpOworICAgICAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0
U2VsZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHMpOwogCiAgICAgYXV0byByb290Vmlld1NlbGVj
dGlvblJlY3RzID0gc2VsZWN0aW9uUmVjdHMubWFwKFsmXShjb25zdCBhdXRvJiBzZWxlY3Rpb25S
ZWN0KSAtPiBGbG9hdFJlY3QgeyByZXR1cm4gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZp
ZXcoc2VsZWN0aW9uUmVjdC5yZWN0KCkpOyB9KTsKIApAQCAtMjQxNCwxNCArMjM4MiwxNCBAQCBi
b29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNv
cnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgIGlmICghZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJl
dE9yUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgU3RyaW5nIHRleHRG
b3JSYW5nZTsKICAgICBhdXRvIG9yaWdpbmFsVGV4dFdpdGhGb2xkZWRRdW90ZU1hcmtzID0gZm9s
ZFF1b3RlTWFya3Mob3JpZ2luYWxUZXh0KTsKIAogICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5p
c0NhcmV0KCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9IGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwogICAgICAgICByYW5n
ZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIHRleHRGb3JSYW5n
ZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICB0ZXh0Rm9yUmFu
Z2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICAgICAgCiAgICAgICAgIC8vIElm
ICdvcmlnaW5hbFRleHQnIGlzIG5vdCB0aGUgc2FtZSBhcyAndGV4dEZvclJhbmdlJyB3ZSBuZWVk
IHRvIG1vdmUgJ3JhbmdlJwogICAgICAgICAvLyBmb3J3YXJkIHN1Y2ggdGhhdCBpdCBtYXRjaGVz
IHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24gYXMgbXVjaCBhcyBwb3NzaWJsZS4KQEAgLTI0MzEsMzMg
KzIzOTksMzMgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICAgICAgICAgICAgICBwb3Np
dGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24uaXNO
dWxsKCkpCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzdGFydE9mRG9jdW1lbnQoZnJhbWUu
ZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KTsKLSAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgICAgICAgICAgdGV4dEZv
clJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBsb29wQ291bnQgPSAwOwogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4UG9zaXRpb25z
QXR0ZW1wdHMgPSAxMDsKICAgICAgICAgICAgIHdoaWxlICh0ZXh0Rm9yUmFuZ2UubGVuZ3RoKCkg
JiYgdGV4dEZvclJhbmdlLmxlbmd0aCgpID4gb3JpZ2luYWxUZXh0Lmxlbmd0aCgpICYmIGxvb3BD
b3VudCA8IG1heFBvc2l0aW9uc0F0dGVtcHRzKSB7CiAgICAgICAgICAgICAgICAgcG9zaXRpb24g
PSBwb3NpdGlvbi5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVs
bCgpICYmIHBvc2l0aW9uID49IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgcmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0
aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAg
ICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgICAgICAgICAgICAgIHRleHRG
b3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgICAgICAgICAgICAgIGxv
b3BDb3VudCsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHRleHRGb3JSYW5n
ZS5pc0VtcHR5KCkgJiYgcmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQoKSkgewogICAgICAgICAg
ICAgLy8gSWYgJ3JhbmdlJyBkb2VzIG5vdCBpbmNsdWRlIGFueSB0ZXh0IGJ1dCBpdCBpcyBub3Qg
Y29sbGFwc2VkLCB3ZSBuZWVkIHRvIHNldAogICAgICAgICAgICAgLy8gJ3JhbmdlJyB0byBtYXRj
aCB0aGUgc2VsZWN0aW9uLiBPdGhlcndpc2Ugbm9uLXRleHQgbm9kZXMgd2lsbCBiZSByZW1vdmVk
LgotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBw
b3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
cG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBSYW5nZSBzZWxl
Y3Rpb24uCi0gICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICByYW5nZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdGV4dEZvclJh
bmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIHRleHRGb3JS
YW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgIH0KIAogICAgIGlmIChmb2xk
UXVvdGVNYXJrcyh0ZXh0Rm9yUmFuZ2UpICE9IG9yaWdpbmFsVGV4dFdpdGhGb2xkZWRRdW90ZU1h
cmtzKQpAQCAtMjQ2Niw5ICsyNDM0LDkgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0
aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICAv
LyBDb3JyZWN0bHkgZGV0ZXJtaW5lIGFmZmluaXR5LCB1c2luZyBsb2dpYyBjdXJyZW50bHkgb25s
eSBwcmVzZW50IGluIFZpc2libGVQb3NpdGlvbgogICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IERP
V05TVFJFQU07CiAgICAgaWYgKHJhbmdlICYmIHJhbmdlLT5jb2xsYXBzZWQoKSkKLSAgICAgICAg
YWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgVVBTVFJF
QU0pLmFmZmluaXR5KCk7CisgICAgICAgIGFmZmluaXR5ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpLCBVUFNUUkVBTSkuYWZmaW5pdHko
KTsKICAgICAKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdl
dCgpLCBhZmZpbml0eSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIGFm
ZmluaXR5LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CiAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLmlu
c2VydFRleHQoY29ycmVjdGlvbiwgMCwgb3JpZ2luYWxUZXh0LmlzRW1wdHkoKSA/IFRleHRFdmVu
dElucHV0S2V5Ym9hcmQgOiBUZXh0RXZlbnRJbnB1dEF1dG9jb21wbGV0aW9uKTsKICAgICBlbHNl
IGlmIChvcmlnaW5hbFRleHQubGVuZ3RoKCkpCkBAIC0yNDk1LDEyICsyNDYzLDggQEAgV2ViQXV0
b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAg
ICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICBpZiAoYXV0byBjb21wb3Np
dGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKSB7Ci0gICAgICAg
IFN0cmluZyBtYXJrZWRUZXh0QmVmb3JlOwotICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pKQotICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9y
ZSA9IHBsYWluVGV4dEZvckNvbnRleHQoeyBjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgKnN0YXJ0
IH0pOwotICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEFmdGVyOwotICAgICAgICBpZiAoYXV0byBl
bmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRQb3NpdGlvbikpCi0gICAgICAgICAgICBtYXJrZWRU
ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KHsgKmVuZCwgY29tcG9zaXRpb25SYW5nZS0+
ZW5kIH0pOworICAgICAgICBhdXRvIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250
ZXh0KG1ha2VTaW1wbGVSYW5nZShjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgc3RhcnRQb3NpdGlv
bikpOworICAgICAgICBhdXRvIG1hcmtlZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQo
bWFrZVNpbXBsZVJhbmdlKGVuZFBvc2l0aW9uLCBjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAg
ICAgICAgbWFya2VkVGV4dCA9IG1hcmtlZFRleHRCZWZvcmUgKyBzZWxlY3RlZFRleHQgKyBtYXJr
ZWRUZXh0QWZ0ZXI7CiAgICAgICAgIGlmICghbWFya2VkVGV4dC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1hcmtlZFRleHRSYW5nZS5sb2NhdGlvbiA9IG1hcmtlZFRleHRCZWZvcmUubGVuZ3Ro
KCk7CkBAIC0yNjc0LDkgKzI2MzgsOSBAQCBzdGF0aWMgdm9pZCBkYXRhRGV0ZWN0b3JMaW5rUG9z
aXRpb25JbmZvcm1hdGlvbihFbGVtZW50JiBlbGVtZW50LCBJbnRlcmFjdGlvbkluZgogICAgIGF1
dG8gbGlua1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShlbGVtZW50LmRvY3VtZW50KCkpOwogICAgIGxp
bmtSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOwogICAgIGluZm8udGV4dEJlZm9y
ZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0
aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5zdGFydFBvc2l0aW9uKCksCi0gICAgICAgIGRh
dGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFj
a3dhcmQpLmdldCgpKTsKKyAgICAgICAgZGF0YURldGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0
aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOwogICAgIGluZm8udGV4dEFmdGVyID0g
cGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25B
dFdvcmRCb3VuZGFyeShsaW5rUmFuZ2UtPmVuZFBvc2l0aW9uKCksCi0gICAgICAgIGRhdGFEZXRl
Y3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCku
Z2V0KCkpOworICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKTsKIH0KICNlbmRpZgogCkBAIC00MTA2LDcgKzQwNzAs
NyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhEZWx0YShpbnQ2NF90IGxvY2F0
aW9uRGVsdGEsIGludDY0X3QgbGVuZ3RoRGVsdAogCiAgICAgYXV0byBuZXdTZWxlY3Rpb25SYW5n
ZSA9IENoYXJhY3RlclJhbmdlKG5ld1NlbGVjdGlvbkxvY2F0aW9uLnVuc2FmZUdldCgpLCBuZXdT
ZWxlY3Rpb25MZW5ndGgudW5zYWZlR2V0KCkpOwogICAgIGF1dG8gdXBkYXRlZFNlbGVjdGlvblJh
bmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodXBkYXRlZFNlbGVjdGlvblJhbmdlKS5wdHIo
KSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAgLTQyNjYsMTIgKzQyMzAsMTEgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0
UmVxdWVzdCByZXF1ZXMKICAgICB9CiAKICAgICBhdXRvIG1ha2VTdHJpbmcgPSBbXSAoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmQpIC0+IEF0
dHJpYnV0ZWRTdHJpbmcgewotICAgICAgICBhdXRvIHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRh
cnlQb2ludChzdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgYXV0byBlbmRCb3VuZGFy
eSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZC5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgaWYg
KCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSB8fCAqc3RhcnRCb3VuZGFyeSA9PSAqZW5k
Qm91bmRhcnkpCisgICAgICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVu
ZCk7CisgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiBlZGl0
aW5nLW9mZnNldC1jb21wYXRpYmxlIGF0dHJpYnV0ZWQgc3RyaW5ncyBpZiB0aGF0IG9wdGlvbiBp
cyByZXF1ZXN0ZWQuCi0gICAgICAgIHJldHVybiB7IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOldlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJl
YWtTcGFjZSh7IFdURk1vdmUoKnN0YXJ0Qm91bmRhcnkpLCBXVEZNb3ZlKCplbmRCb3VuZGFyeSkg
fSldKSwgbmlsIH07CisgICAgICAgIHJldHVybiB7IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOldlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJl
YWtTcGFjZSgqcmFuZ2UpXSksIG5pbCB9OwogICAgIH07CiAKICAgICBjb250ZXh0LmNvbnRleHRC
ZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uKTsKQEAgLTQzMDYsOCArNDI2OSw4IEBAIHZvaWQgV2ViUGFnZTo6cmVx
dWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3Qg
cmVxdWVzCiAgICAgICAgICAgICBjb250ZXh0LnRleHRSZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9y
UmFuZ2UoKmNvbnRleHRSYW5nZSwgMCk7CiAgICAgfSBlbHNlIGlmICh3YW50c01hcmtlZFRleHRS
ZWN0cyAmJiBjb21wb3NpdGlvblJhbmdlKSB7CiAgICAgICAgIHVuc2lnbmVkIGNvbXBvc2l0aW9u
U3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkKLSAgICAgICAgICAgIGNv
bXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQoeyBXVEZNb3ZlKCpzdGFy
dCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0IH0pLmxlbmd0aCgpOworICAgICAgICBpZiAoYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb250ZXh0QmVmb3JlU3RhcnQsIGNvbXBvc2l0aW9u
UmFuZ2UtPnN0YXJ0KSkKKyAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBjaGFy
YWN0ZXJDb3VudCgqcmFuZ2UpOwogICAgICAgICBjb250ZXh0LnRleHRSZWN0cyA9IGNoYXJhY3Rl
clJlY3RzRm9yUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UsIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQp
OwogICAgIH0KIApAQCAtNDM5Miw3ICs0MzU1LDcgQEAgdm9pZCBXZWJQYWdlOjpmb2N1c1RleHRJ
bnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KGNvbnN0IEVsZW1lbnRDb250ZXh0JiBlbGVtZW50Q28K
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpj
cmVhdGUoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigp
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgcG9zaXRpb24u
YWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZ
ZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CmluZGV4IGFkYjk5MjNmNTExZDNhZDZmNTI0OTgyZjhmYTUyZjMwMGM4YzNiZmMuLmNhMWM5NWU0
ODQ3Yjc0NWVmNGIyY2Q5MjVkM2UwODZhMjczZjljOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0zMzgsNyArMzM4LDcg
QEAgdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3lu
Yyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRp
bmdSYW5nZSk7CisgICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwg
ZWRpdGluZ1JhbmdlKTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2so
eyB9LCBFZGl0aW5nUmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0MDE0NGI1OTFjMWI0MTAwODVmNmI2NjVlZDU5ZTA0ZWZjNDc3
ZGQyLi5jN2M2Y2MyNGU2ODFhZGNkYTc2MmIyYTVlNGI3NWI1MmQ1NWI1OTZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE4OCw3ICsxODgsNiBAQAogCQk1QzdFNzg3NjIyRDk1RkUyMDAwNkEy
MzAgLyogVW5pZmllZFNvdXJjZTExLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUM3RTc4NjkyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRTb3Vy
Y2UxMS1tbS5tbSAqLzsgfTsKIAkJNUM5N0VGNjMyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRT
b3VyY2UxOS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDOTdFRjYxMjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMTktbW0ubW0gKi87
IH07CiAJCTVDOTdFRjY0MjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMjAtbW0ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzk3RUY2MjIz
NDJDNTM0MDA2MDIwRDQgLyogVW5pZmllZFNvdXJjZTIwLW1tLm1tICovOyB9OwotCQk1QzlBNEU1
MzIyREU0NjI3MDA3REIzNTMgLyogRE9NVUlLaXRFeHRlbnNpb25zLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNENDM2MzcxRDU3QUJFRTAwQUI4NUVB
IC8qIERPTVVJS2l0RXh0ZW5zaW9ucy5tbSAqLzsgfTsKIAkJNUM5RDkyNUEyMkQ3RThBRDAwOEU5
MjY2IC8qIFNvdXJjZXMudHh0IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzlEOTI1ODIyRDdFOEFEMDA4RTkyNjYgLyogU291cmNlcy50eHQgKi87IH07
CiAJCTVDOUQ5MjVCMjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzQ29jb2EudHh0IGluIFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlEOTI1OTIyRDdFOEFE
MDA4RTkyNjYgLyogU291cmNlc0NvY29hLnR4dCAqLzsgfTsKIAkJNUM5RUYyRjUyMUYwNjFCRTAw
M0JEQzU2IC8qIFBhZ2VTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFRjJGNDIxRjA2MUJFMDAzQkRDNTYgLyog
UGFnZVN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLzsgfTsKQEAgLTM0MDAsNyArMzM5OSw2IEBA
CiAJCQkJMUE5MTE5RjYxREIwNDcwQTAwODdEMUZEIC8qIEJhY2tGb3J3YXJkTGlzdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFBNjA1MTkxMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9wZXJ0
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjgyOTU4RDQxMzI3MDdEMDAwMEQwRTc5IC8q
IENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTVDOUE0RTUzMjJERTQ2Mjcw
MDdEQjM1MyAvKiBET01VSUtpdEV4dGVuc2lvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTYw
NTE5MzE3NTAyQTVEMDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBOERFRDUxMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNjQwMDZFMjM5OTZFODEwMDFFMTg1RSAv
KiBJblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRp
b24ubW0KaW5kZXggMmIzZDE5YzlkYTdiZDc3Y2I3ZGE3NmU2ZGZlYjVkNTFjZTM1NGJjMS4uM2Iw
ZWI5NTRlMDlhZmQ4YzczMDVmZmFlZTEyNDFmMTdmMjEyZDFmYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbi5tbQpAQCAtMjkyLDcgKzI5Miw3IEBAIC0gKEJPT0wpd2l0aGluVGV4dFVuaXRPZkdyYW51
bGFyaXR5OihXZWJUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rpb25JCiAvLyBp
cyBlbmNsb3NlZCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHVzaW5nIHRoZSBzYW1l
IHJ1bGUgYXMgLVtXZWJWaXNpYmxlUG9zaXRpb24gd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5
OmluRGlyZWN0aW9uQXRCb3VuZGFyeTpdLgogLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdUZXh0VW5p
dE9mR3JhbnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlv
bklmQXRCb3VuZGFyeTooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0g
ICAgcmV0dXJuIGtpdChlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgdG9TZWxlY3Rpb25E
aXJlY3Rpb24oZGlyZWN0aW9uKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoZW5jbG9zaW5nVGV4
dFVuaXRPZkdyYW51bGFyaXR5KFtzZWxmIF92aXNpYmxlUG9zaXRpb25dLCB0b1RleHRHcmFudWxh
cml0eShncmFudWxhcml0eSksIHRvU2VsZWN0aW9uRGlyZWN0aW9uKGRpcmVjdGlvbikpKTsKIH0K
IAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb25BdFN0YXJ0T3JFbmRPZldvcmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KaW5kZXggZWEzMDk4OTI0OThmM2Y2NGVm
MGYwNjQ4ZjM1NDVjNTU4NTFiOTY5NS4uODU4NGMyMzFmZWY4YzhkOGI3MDZlOGY5NmVkMDhkNzM4
ODUzZGQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KQEAgLTQ0LDYg
KzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyVGV4dENvbnRyb2wuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvbWFya3VwLmg+CiAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTUyLDcgKzE1Myw3IEBAIC0gKERPTURvY3VtZW50
RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJp
bmcgKiltYXJrCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKICAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBp
cyBub3QgYSBjb250ZXh0dWFsIGZyYWdtZW50LCBpdCB3b24ndCBoYW5kbGUgd2hpdGVzcGFjZSBw
cm9wZXJseS4KLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29yZShzZWxm
KS0+Y3JlYXRlUmFuZ2UoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVybiBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmNvcmUoc2VsZikp
LCB0ZXh0KS5wdHIoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmluZGV4IDgxMDBhYmU2YmJmN2Q4Njk4ZGE2ZWM3
NWJkOGJhZjhmMGVlNGQ2OTEuLjRhMThkZjQ1OWJiZDU5MGUyZTIxYjRmMTk0MjMyODJmYzIyNGMx
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVu
c2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5z
aW9ucy5tbQpAQCAtNzgsOSArNzgsMTIgQEAgQGltcGxlbWVudGF0aW9uIERPTVJhbmdlIChVSUtp
dEV4dGVuc2lvbnMpCiAKIC0gKHZvaWQpbW92ZTooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjoo
V2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgUmFuZ2UgKnJhbmdl
ID0gY29yZShzZWxmKTsKKyAgICBhdXRvIHJhbmdlID0gY29yZShzZWxmKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm47CisKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFt
ZVNlbGVjdGlvbjsKLSAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UpOworICAgIGZyYW1l
U2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKnJhbmdlKSk7CiAgICAgCiAg
ICAgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6VGV4dEdy
YW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eTsKICAgICAvLyBVbnRpbCBXZWJLaXQgc3Vw
cG9ydHMgdmVydGljYWwgbGF5b3V0LCAiZG93biIgaXMgZXF1aXZhbGVudCB0byAiZm9yd2FyZCBi
eSBhIGxpbmUiIGFuZApAQCAtOTIsMTAgKzk1LDEwIEBAIC0gKHZvaWQpbW92ZTooVUludDMyKWFt
b3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiAg
ICAgICAgIGRpcmVjdGlvbiA9IFdlYlRleHRBZGp1c3RtZW50QmFja3dhcmQ7CiAgICAgICAgIGdy
YW51bGFyaXR5ID0gV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpMaW5lR3JhbnVsYXJpdHk7CiAg
ICAgfQotICAgIAorCiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKICAg
ICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpBbHRl
cmF0aW9uTW92ZSwgKFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKLSAgICAKKwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlv
biBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpKQpAQCAtMTA2LDEzICsx
MDksMTYgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0
QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIAogLSAodm9pZClleHRlbmQ6KFVJbnQzMilh
bW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgog
ewotICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2VsZik7CisgICAgYXV0byByYW5nZSA9IGNvcmUo
c2VsZik7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247Ci0gICAgZnJhbWVTZWxlY3Rpb24ubW92ZVRv
KHJhbmdlKTsKLSAgICAKKyAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBs
ZVJhbmdlKCpyYW5nZSkpOworCiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkr
KykKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCAoV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlv
biwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAg
CisKICAgICBQb3NpdGlvbiBzdGFydCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0
KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gZnJhbWVT
ZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAg
ICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KaW5kZXggNzFjMDRkYjIyOTM3YTMzMGUxYTQ3M2Yy
MTNmYWM4M2M5NTczMWYwYi4uZDNhZTdmNmVmODNkMjA4ZjI2OWI2ZTE2MmRiZTE0NTQ2MmRmYjk2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlv
bnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMu
bW0KQEAgLTUyLDYgKzUyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZv
cm1XaGVlbEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TaGFkb3dSb290Lmg+CkBAIC0xODQsNyArMTg1LDcgQEAgQGlt
cGxlbWVudGF0aW9uIERPTVJhbmdlIChXZWJET01SYW5nZU9wZXJhdGlvbnMpCiAKIC0gKFdlYkFy
Y2hpdmUgKil3ZWJBcmNoaXZlCiB7Ci0gICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxsb2NdIF9p
bml0V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb3Jl
KHNlbGYpKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJBcmNoaXZlIGFsbG9jXSBf
aW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoKmNv
cmUoc2VsZikpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5TU3RyaW5nICopbWFya3VwU3RyaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0KaW5kZXggYmQ5NWE2NjQ4YTMwMzJjMDU3YTk4MWUwOTQ2OTA4MGU4
ODEwNjM1OS4uMjU0YTY1YWNkMjY0ZjNhYTk5OThmNWRkMjNmODk0YmIyYTY2Mjk0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbQpAQCAtMTAyNSwxMSArMTAyNSwxMCBAQCBzdGF0aWMgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5ICppbmNvbWluZ1Jlc3VsdHMsIE9wdGlvblNldDxU
ZXh0Qwogc3RhdGljIE5TVUludGVnZXIgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBhdXRvIHNlbGVjdGlvblN0
YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2Vs
ZWN0aW9uU3RhcnQpKTsKLSAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFn
cmFwaFN0YXJ0KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlvblN0YXJ0KTsKKyAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBo
U3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOworICAgIHJldHVybiBjaGFyYWN0ZXJD
b3VudCgqcmFuZ2UpOwogfQogCiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBPcHRpb25TZXQ8
VGV4dENoZWNraW5nVHlwZT4gY29yZUNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGN1cnJlbnRTZWxlY3Rpb24pCkBAIC0xMTEwLDggKzExMDksOCBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZQogICAgIG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENhbmRpZGF0ZXMgPSBz
ZWxlY3Rpb247CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKLSAgICBhdXRv
IHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkp
IH0pOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3Rl
ckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCks
IHNlbGVjdGlvblN0YXJ0KSk7CisgICAgYXV0byBzZWxlY3Rpb25MZW5ndGggPSBjaGFyYWN0ZXJD
b3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKSk7CiAgICAgYXV0byBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUt
PmVkaXRvcigpLmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKICAgICBTdHJpbmcg
Y29udGV4dEZvckNhbmRpZGF0ZVJlcWV1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVx
dWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJp
bmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5k
ZXggYjMyMDlkYjdlYmU0NDM5YmIzNjZmMGZhNTgyNjEzMDExNWU5M2RmYS4uZTJmNGZmMzQ4OWUz
ZTZkNzc1YmRiNDZmMDU2MjE0ODNmNmJkZjExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05Myw2ICs5Myw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jh
bmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CkBAIC04Mzcs
NyArODM4LDcgQEAgLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFcKICAgICBpZiAoIXBhcmFncmFwaFN0
YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSkuZW5kOworICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlQm91bmRh
cnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCkpOwogICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3Zl
KHNjb3BlRW5kKSB9LCByYW5nZSkpOwogfQogCkBAIC0xNDc5LDcgKzE0ODAsNyBAQCAtICh2b2lk
KXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpYWZmaQogCiAgICAgYXV0byBjb3JlQ2xvc2VUeXBpbmcgPSBjbG9zZVR5cGlu
ZyA/IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzIDogRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpObzsKICAgICBhdXRvIGNvcmVVc2VyVHJpZ2dlcmVkID0g
dXNlclRyaWdnZXJlZCA/IFVzZXJUcmlnZ2VyZWQgOiBOb3RVc2VyVHJpZ2dlcmVkOwotICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIGNvcmUoYWZmaW5p
dHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShjb3JlKHJhbmdlKSksIGNv
cmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dlcmVkKTsKICAgICBp
ZiAoIWNsb3NlVHlwaW5nKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5lbnN1cmVMYXN0RWRpdENv
bW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpOwogfQpAQCAtMTU0
MCwxMiArMTU0MSwyMCBAQCAtIChOU1N0cmluZyAqKXdvcmRJblJhbmdlOihET01SYW5nZSAqKXJh
bmdlCiAKIC0gKGludCl3b3JkT2Zmc2V0SW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAg
IHJldHVybiBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkT2Zmc2V0SW5SYW5nZShjb3JlKHJh
bmdlKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYXV0byBz
ZWxlY3Rpb24gPSBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAo
IXNlbGVjdGlvbi5pc0NhcmV0KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIHdpbGwgb25seSB3b3JrIGluIGNhc2VzIHdoZXJlIHRoZSBzZWxlY3Rpb24gcmVtYWlu
cyBpbiB0aGUgc2FtZSBub2RlIGFmdGVyIGl0IGlzIGV4cGFuZGVkLgorICAgIHJldHVybiBzdGQ6
Om1heDxpbnQ+KDAsIHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
LSBjb3JlKHJhbmdlKS0+c3RhcnRPZmZzZXQoKSk7CiB9CiAKIC0gKEJPT0wpc3BhY2VGb2xsb3dz
V29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1cm4gY29yZShzZWxmKS0+
c2VsZWN0aW9uKCkuc3BhY2VGb2xsb3dzV29yZEluUmFuZ2UoY29yZShyYW5nZSkpOworICAgIHJl
dHVybiByYW5nZSAmJiBpc1NwYWNlT3JOZXdsaW5lKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbihj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFrZVNpbXBsZVJhbmdlKGNvcmUocmFuZ2UpKS0+
ZW5kKSkuY2hhcmFjdGVyQWZ0ZXIoKSk7CiB9CiAKIC0gKE5TQXJyYXkgKil3b3Jkc0luQ3VycmVu
dFBhcmFncmFwaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmlu
ZGV4IDNhNWJiMDRiYzM0YjgxNmI5OWRjZTMzZGQ3MzA2NWVlYjY0ZTU0ODYuLmExODU2OGVmNWI1
ZGY4YTBhZDlhNGNlNGMyYjZjZWY2N2M0ODVlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5NSw2ICsxOTUsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNj
cmVlbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4K
QEAgLTc5MjksOCArNzkzMCw3IEBAIC0gKERPTVJhbmdlICopRE9NUmFuZ2VPZlN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUbzooRE9NUmFuZ2UgKilwcmV2aW91CiB7CiAgICAgaWYg
KCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBraXQo
X3ByaXZhdGUtPnBhZ2UtPnJhbmdlT2ZTdHJpbmcoc3RyaW5nLCBjb3JlKHByZXZpb3VzUmFuZ2Up
LCBjb3JlT3B0aW9ucyhvcHRpb25zKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoX3ByaXZhdGUt
PnBhZ2UtPnJhbmdlT2ZTdHJpbmcoc3RyaW5nLCBtYWtlU2ltcGxlUmFuZ2UoY29yZShwcmV2aW91
c1JhbmdlKSksIGNvcmVPcHRpb25zKG9wdGlvbnMpKSk7CiB9CiAKIC0gKHZvaWQpc2V0TWFpbkZy
YW1lRG9jdW1lbnRSZWFkeTooQk9PTCltYWluRnJhbWVEb2N1bWVudFJlYWR5CkBAIC04NDU2LDcg
Kzg0NTYsNyBAQCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2Ug
YWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZQogICAgICAgICBpZiAoIWNvcmVGcmFt
ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIGNvcmUoc2VsZWN0aW9uQWZmaW5pdHkpLCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAg
IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2Uo
KmNvcmUocmFuZ2UpKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405245</attachid>
            <date>2020-07-25 23:56:46 -0700</date>
            <delta_ts>2020-07-26 09:26:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200725235645.patch</filename>
            <type>text/plain</type>
            <size>245342</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3ODc1ZWI3NWJhMjRl
NmI2NGU0MDUyNjlmNTA1YjU5YjRiMDYzYS4uMTdlYTBkYjcyZWFiOWQ5ZWI5N2M2ZGVhODg4Zjk5
ZGQyNzZhMTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgcGx1Z2luRWxl
bWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdCgpIHNob3VsZCBzdXBwb3J0IFZNSW5xdWlyeSBy
ZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IDIyNDA0MjQzMDc2ZGU0YWQzMDllZjlkZDA1M2I5NzEzNmFkNzFkYTIuLmJlYjcy
MTJjNzUzMTc2NjgwM2FhYWVlYzY5ZTI5NGIyNmI4MDAxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODMsNiArODMsNyBAQAogI2lu
Y2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0
YWNobWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKQEAgLTE2NiwxMCArMTY3LDEwIEBAIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
CiBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0OjpBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3Rh
cnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgICAgIG1fcmVwbGFjZWRS
YW5nZS5zdGFydEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CiAgICAg
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgICAgICBtX3JlcGxhY2VkVGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBp
bmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIG1fcmVwbGFjZWRSYW5nZS5l
bmRJbmRleC5zY29wZSk7CisgICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFs
dWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBtX3Jl
cGxhY2VkUmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG1fcmVwbGFjZWRSYW5nZS5lbmRJbmRleCA9IG1fcmVwbGFjZWRSYW5nZS5zdGFydEluZGV4Owog
ICAgIH0KQEAgLTE5ODUsMTIgKzE5ODYsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2Jq
ZWN0Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UKICAg
ICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBv
c2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwog
Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07Ci0gICAg
aWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmICghc2VhcmNo
UmFuZ2UgfHwgc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byB0YXJnZXRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHNlYXJj
aFJhbmdlLnN0YXJ0LCBvcmlnaW5hbFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKLSAgICByZXR1cm4gZmluZENsb3Nl
c3RQbGFpblRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwor
ICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS0+c3Rh
cnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4
dCgqc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCiBzdGF0
aWMgYm9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKQEAgLTI4ODAsMTggKzI4ODEs
MTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgQVgKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOwotICAgIGlmICghYm91bmRhcnkp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShvYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KHBvaW50KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5kYXJ5
LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZz
ZXRGb3JSYW5nZSgqcmFuZ2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogewot
ICAgIGF1dG8gYm91bmRhcnkgPSBtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9p
bnQpOwotICAgIGlmICghYm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9pbnQpKTsKKyAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0cnVlKTsKKyAgICByZXR1
cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7CiB9CiAK
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXJzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDk3ZDMwODgzMWIz
N2EyYzM1MTU3MGM1OTUxNzBkMWI4OTJmMmYzZWYuLmQ0YWI1OTM3NTQ1NTI5ZjMzN2VlNDA0Zjc5
YmMzYWU3YjM4YjMzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTcyMSw3ICs3MjIs
NyBAQCBWZWN0b3I8U3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJh
dGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewot
ICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZSh0ZXh0UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCisgICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBT
dHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0UmFuZ2UpOwpAQCAtOTgwLDIxICs5ODEsMTkgQEAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGkKICAgICAgICAgZW5kUG9zID0gdmlzaWJsZVBvczE7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zLCBlbmRQb3Mp
OworICAgIHJldHVybiB7IHN0YXJ0UG9zLCBlbmRQb3MgfTsKIH0KIAogVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHZpc2libGVQb3MsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3Np
dGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gc3RhcnRPZldvcmQodmlzaWJsZVBvcywgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOworICAgIHJldHVybiB7IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQp
IH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc2l0
aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAog
ewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJs
ZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0g
c3RhcnRPZldvcmQodmlzaWJsZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICByZXR1
cm4geyBzdGFydCwgZW5kT2ZXb3JkKHN0YXJ0KSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHVwZGF0ZUFYTGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtMTA0NCw4ICsxMDQzLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXMKICAgICB9IGVsc2UKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHVwZGF0ZUFY
TGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKHByZXZWaXNpYmxlUG9zKTsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZE9mTGluZShwcmV2VmlzaWJsZVBvcykgfTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmlnaHRMaW5l
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBj
b25zdApAQCAtMTA3OCwyMyArMTA3NiwyMSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaQogICAg
ICAgICBlbmRQb3NpdGlvbiA9IGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcyk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiB9OwogfQogCiBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogRk8gMiBJTVBMRU1FTlQgKGN1cnJlbnRseSByZXR1cm5zIGluY29ycmVjdCBhbnN3ZXIpCiAg
ICAgLy8gUmVsYXRlZD8gPHJkYXI6Ly9wcm9ibGVtLzM5Mjc3MzY+IFRleHQgc2VsZWN0aW9uIGJy
b2tlbiBpbiA4QTMzNgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRP
ZlNlbnRlbmNlKHZpc2libGVQb3MpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGVuZE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRp
b24gPSBzdGFydE9mU2VudGVuY2UodmlzaWJsZVBvcyk7CisgICAgcmV0dXJuIHsgc3RhcnRQb3Np
dGlvbiwgZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKSB9OwogfQogCiBWaXNpYmxlUG9zaXRp
b25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24pOwot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bik7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9z
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRPZlBhcmFncmFwaChzdGFydFBvc2l0
aW9uKSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKQEAgLTExNDYsOSArMTE0Miw5IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
IGNvbnN0CiB7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0T2ZTdHlsZVJhbmdlKHZpc2libGVQb3MpLCBlbmRP
ZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykpOworICAgIHJldHVybiB7IHN0YXJ0T2ZTdHlsZVJhbmdl
KHZpc2libGVQb3MpLCBlbmRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykgfTsKIH0KIAogLy8gTk9U
RTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCkBAIC0x
MTU2LDEyICsxMTUyLDExIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhCiB7CiAgICAgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7
CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnQpOwogICAgIHN0YXJ0UG9zaXRpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5n
ZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRQb3NpdGlv
biwgdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpIH07
CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZv
clBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTEx
ODMsOSArMTE3OCw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4CiAKIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdAogewotICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIHJldHVybiB7IHN0YXJ0T2ZMaW5lKHZpc2libGVQb3NpdGlvbiksIGVuZE9mTGlu
ZSh2aXNpYmxlUG9zaXRpb24pIH07CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVw
bGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKQpAQCAtMTI3MSwxNSAr
MTI2NCwxMiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmIHZpc2libGVQb3NpdGlvblJhbmdlKQogewotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7Ci0gICAgaWYgKCFzdGFydCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2li
bGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0gICAgaWYgKCFlbmQpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFu
Y2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwg
bm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIg
aW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8v
IEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxpc3QgbWFya2VyIHRleHQuCkBAIC0x
Mjk4LDE2ICsxMjg4LDEzIEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nCiB7CiAgICAgLy8gRklY
TUU6IE11bHRpLWJ5dGUgc3VwcG9ydAogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90IHJldHVybiAwPwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVu
ZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90
IHJldHVybiAwPwogCiAgICAgLy8gRklYTUU6IFVzZSBjaGFyYWN0ZXJDb3VudCBpbnN0ZWFkIG9m
IHdyaXRpbmcgb3VyIG93biBsb29wPwogICAgIGludCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAgICAgIGxlbmd0aCAr
PSBpdC50ZXh0KCkubGVuZ3RoKCk7CkBAIC0xNDMxLDE2ICsxNDE4LDEzIEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5j
ZSBlbmQuCiAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFlbmQpCisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24p
LCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIC8vIEFuIGVtcHR5IGxpbmUgaXMgY29uc2lkZXJlZCBhIHNlbnRlbmNl
LiBJZiBpdCdzIHNraXBwZWQsIHRoZW4gdGhlIHNlbnRlbmNlIHBhcnNlciB3aWxsIG5vdAogICAg
IC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9u
IG9mIHRoZSBlbXB0eSBsaW5lLgotICAgIHJldHVybiBoYXNBbnlQbGFpblRleHQoeyAqc3RhcnQs
ICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0UG9zaXRpb247Cisg
ICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gZW5kT2ZTZW50ZW5jZShuZXh0UG9z
aXRpb24pIDogbmV4dFBvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTE0NTAsMTUgKzE0MzQsMTIgQEAgVmlzaWJsZVBvc2l0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNv
bnN0IFZpc2libGUKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNl
IHN0YXJ0LgogICAgIGF1dG8gcHJldmlvdXNQb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7
Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKHByZXZpb3Vz
UG9zaXRpb24pKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1
dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsK
LSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzUG9zaXRpb24pLCBlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOworICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUcmVhdCBlbXB0eSBs
aW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCi0gICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7
ICpzdGFydCwgKmVuZCB9KSA/IHN0YXJ0T2ZTZW50ZW5jZShwcmV2aW91c1Bvc2l0aW9uKSA6IHBy
ZXZpb3VzUG9zaXRpb247CisgICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gc3Rh
cnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlvdXNQb3NpdGlvbjsKIH0KIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRQYXJhZ3JhcGhFbmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMjAzMSw3ICsy
MDEyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlVGV4dEluUmFuZ2UoY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAgICAvLyBBbHNvIG9ubHkgZG8gdGhp
cyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUuCiAgICAgYXV0byYgZnJhbWUgPSBy
ZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50LnNob3VsZFVzZUlucHV0TWV0aG9k
KCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpLmdldCgpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5n
ZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vt
ZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpObywgRWRpdG9yOjpTbWFydFJl
cGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaAppbmRleCBkYzY1NGZjMmIxMmE0ODczODg0ZjYxYmQ1YjY3MTk1ZWI5Mzk3MzgwLi40NWNk
OGVhOTRmYWQyZGRiOTg4NTdkYTFmNjYxNTU3MTIwZmQ1MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaApAQCAtNDMwLDI0ICs0MzAsNiBAQCBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlWaXNpYmxl
UG9zaXRpb25Gb3JCb3VuZHMgewogICAgIExhc3QsCiB9OwogCi1zdHJ1Y3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGUpCi0gICAgICAgIDogc3RhcnQocykKLSAgICAgICAgLCBlbmQoZSkKLSAgICB7
IH0KLQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLSAgICAgICAgOiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAgLCBl
bmQoc2VsZWN0aW9uLmVuZCgpKQotICAgIHsgfQotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KLX07Ci0KIGVudW0gY2xh
c3MgQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlIHsgU3Vic2NyaXB0LCBTdXBlcnNj
cmlwdCB9OwogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlw
ZSB7IFByZVN1YnNjcmlwdCwgUHJlU3VwZXJzY3JpcHQsIFBvc3RTdWJzY3JpcHQsIFBvc3RTdXBl
cnNjcmlwdCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYjRiYTBkODc4MjNjZDJmODAy
Mzg5MDcxNzVhMmQ5MWEwMWFiOGU3Li40NDg2MmFiNmEyZWJiZjI3YThlYWY1ZWM0NmQ3MDU4ZDNh
MzFjYWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTY0OSwxMiArNjQ5LDkgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkUmVuZGVyZXIgJiYg
Zmlyc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkgJiYgbGFzdENoaWxkUmVuZGVyZXIgJiYgbGFzdENo
aWxkUmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGRlZmluZSB0aGUg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgZm9yIHRoZSByYW5nZSBhcyB0aGUgb25lcyByaWdodCBi
ZWZvcmUgYW5kIGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGFuZCB0aGUgbGFz
dCBub2RlcyBpbiB0aGUgRE9NIHRyZWUgdGhhdCBpcyB3cmFwcGVkIGluc2lkZSB0aGUgYW5vbnlt
b3VzIGJsb2NrLgotICAgICAgICAgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluQmxvY2sgPSBmaXJz
dENoaWxkUmVuZGVyZXItPm5vZGUoKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZmlyc3ROb2RlSW5CbG9jayk7Ci0g
ICAgICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKGxhc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgICAgICAgICAgbm9k
ZURvY3VtZW50ID0gJmZpcnN0Tm9kZUluQmxvY2stPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4dFJhbmdlID0geyB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9IH07CisgICAgICAgICAgICAgICAgYXV0byYg
Zmlyc3ROb2RlSW5CbG9jayA9ICpmaXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay5kb2N1bWVudCgpOworICAg
ICAgICAgICAgICAgIHRleHRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZSgmZmlyc3ROb2RlSW5CbG9jayksIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTkxNyw3ICs5MTQsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
aW5rQ2xpY2tQb2ludCgpCiAgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24geyBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OwogICAgICAgICBhdXRv
IGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwogICAgICAgICBpZiAoIWVuZC5pc051
bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSkuY2VudGVyKCkg
fTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsK
IH0KQEAgLTkzNSw5ICs5MzIsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjbGlja1BvaW50KCkKICAgICBpZiAoIWlzV2ViQXJlYSgpIHx8ICFjYW5TZXRWYWx1ZUF0dHJp
YnV0ZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgp
OwogICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSkuY2VudGVyKCk7
CisgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbigpKS5j
ZW50ZXIoKTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdApAQCAtMTk5MCw3ICsxOTg1LDYg
QEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAgICAgCi0gICAgLy8gY29uc3RydWN0IFZpc2li
bGVQb3NpdGlvbnMgZm9yIHN0YXJ0IGFuZCBlbmQKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJl
ci0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7CkBAIC0yMDA4LDcgKzIwMDIsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAg
ICAgICAgICBlbmRQb3MgPSBzdGFydFBvczsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFy
dFBvcyksIFdURk1vdmUoZW5kUG9zKSB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWdu
ZWQgbGluZUNvdW50KSBjb25zdApAQCAtMjAzOCw3ICsyMDMyLDcgQEAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JM
aW5lKHVuc2kKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlz
aWJsZVBvcykpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25FeHRlbmQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQsIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5KTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0
aW9uLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGlvbigpOwogfQogICAgIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGludCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0YzU0ZDFhYWQzMWRkMC4u
MmExNmY3MGM3ZDI5NWFmNDZhNTg3OTkzMTdkNGRlNTI5OTcyNGUzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY2LDYgKzY2LDcgQEAKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW1wb3J0ICJQbHVnaW5WaWV3QmFz
ZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlcklubGluZS5oIgogI2ltcG9y
dCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKQEAgLTE4NTAs
NyArMTg1MSw3IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuCiAgICAgaWYgKCF0ZXh0TWFya2Vy
UmFuZ2UpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRP
ZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9u
Rm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAgIHJl
dHVybiB7IHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRl
eHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNh
Y2hlLCB0ZXh0TWFya2VyUmFuZ2UpIH07CiB9CiAKIC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENo
aWxkcmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZDc0MmU3MTlkODUwYzcyZTc5OTFm
ZjU3NGYyZjM5ODQzYjgzYTFkLi5iNjVmZTljMzkwNjM0NTMyNDk1ZDU2MDJjZmRjNTZkMmVlYjYz
MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgog
I2luY2x1ZGUgIlF1aXJrcy5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA2OWU1YTliYTY5
MTQ2NmI2MTBhZjllZGJiMzQwMjhjMzkxNDQxMjFjLi5jNTY2MGZjYmVjMWU2ZWViYmU4NWY1NzNj
NDRmODQyNDc3MzNkZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUwZS4uN2EyMGE1
ZjM5MDY2NmUyMjYyZGMxYTQ1ODVjOTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiUmFkaW9C
dXR0b25Hcm91cHMuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0NTNlYjY4NTEy
MGNiNDdkZTUzOTU1OS4uZDMxMjI1NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2EzNTFiNmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdl
IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdjZTgxYmJjMjE3
MGUzODVmY2FjZGUwYzZhMjU5Li5kYmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZkY2FjZTdhOGFm
MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBv
ZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgaWYgKCFwb2lu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpwb2ludCwg
KnBvaW50IH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHBvaW50KQoreworICAgIGlmICghcG9pbnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7CisgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpwb2ludCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisKIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQogewogICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKQEAgLTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0KIAorUmVmUHRy
PE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFp
bmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAppbmRleCAwY2UwYmExOGU0ZGM3ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0Li5mODZlMzQw
Y2Y5NDIzMTRkNTcwZTJkMzA4MTMxYTdlMTQ1OWRlOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaApAQCAtNTEsMTMgKzUxLDI3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25z
dCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIAorQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2lu
dEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50Jik7CitCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFy
eVBvaW50SGVscGVyKEJvdW5kYXJ5UG9pbnQmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBhdXRv
IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4gZGVjbHR5cGUobWFrZUJv
dW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSkpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5nZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNs
dHlwZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJk
PFQ+KGFyZ3VtZW50cykpLi4uKSk7CisKIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRvIGhh
dmUgc2hvcnRlciBuYW1lczsgYW5vdGhlciBvcHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0byBt
YWtlU2ltcGxlUmFuZ2UuCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3MgSW50
ZXJzZWN0aW5nTm9kZVJhbmdlOwpAQCAtMTE1LDQgKzEyOSwyNCBAQCBpbmxpbmUgU2ltcGxlUmFu
Z2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mIHJhbmdlKQogewogfQogCitpbmxpbmUg
Qm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50
JiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK2lubGluZSBCb3VuZGFyeVBvaW50
IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKEJvdW5kYXJ5UG9pbnQmJiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gV1RGTW92ZShwb2ludCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gbWFr
ZUJvdW5kYXJ5UG9pbnRIZWxwZXIoVCYmIGFyZ3VtZW50KSAtPiBkZWNsdHlwZShtYWtlQm91bmRh
cnlQb2ludChzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnQpKSkKK3sKKyAgICByZXR1cm4gbWFrZUJv
dW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIC4uLlQ+IGF1dG8gbWFrZVNpbXBsZVJhbmdlKFQmJiAuLi5hcmd1bWVudHMpIC0+IGRl
Y2x0eXBlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludEhlbHBlcihzdGQ6OmZvcndh
cmQ8VD4oYXJndW1lbnRzKSkuLi4pKQoreworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXggOGE0ODQzYjFkMjYyZmRjYmVl
M2M3OTAyMjAxMGY2YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0YzcyY2NiMDM3
YzZhZGQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIK
LSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKaW5kZXggOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMwZTYwZTcxMzE0
My4uODc4MWJkMTAwNzgyOTA0YTQxMGFmZTFhY2VhNWY5NzZjZjI4ZTNkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBA
IC00NzQsMTUgKzQ3NCwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQ
cmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRP
ZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1h
a2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1ha2VCb3VuZGFy
eVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJhbmdlKQorICAgICAgICByZXR1
cm47CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hp
dGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQg
YW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBp
ZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9z
aXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9kb2N1
bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERl
bGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2Vy
KCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29y
cmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwog
fQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0
VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJp
bmdUb0JlUmVwbGFjZWQpCkBAIC01MDAsMTAgKzUwMiwxMSBAQCBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29u
c3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERv
Y3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpOwotICAgIGF1
dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQ
b2ludChiZWZvcmVQcmVjZWRpbmdDaGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFy
dCB9OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5w
cmV2aW91cygpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCk7CisgICAgaWYgKCFwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRv
JiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgeworICAgIGZvciAoYXV0
byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAgICAgICAgIGlm
IChtYXJrZXItPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0YjA5NTRlMDIx
ZTRlZC4uMGU1NGQzMGNkMjliYjEzYjAzNDFlMDUzYzk2MTE1NTJjNjQ3YjQ3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0NiwxMyArMjQ2
LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUmIHN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNjb3BlU3RhcnQgPSBCb3Vu
ZGFyeVBvaW50IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5UG9pbnQgPSBt
YWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5k
YXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91bmRhcnlQb2lu
dCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsg
c2NvcGVTdGFydCwgKnN0YXJ0Qm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAgYXV0byBlbmRJbmRleCA9IGNo
YXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwgVGV4dEl0ZXJh
dG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8g
c3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgcmFuZ2UtPnN0YXJ0IH0s
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
KyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCByYW5nZS0+
ZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdy
YXBoKHZpc2libGVTdGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3Rh
cnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM3MWM3OWYyN2Q5
ZGMzZGVmNzg1NjBmZjAwZWIzNjQ1Y2RjZjI5NzUuLjI5MDU0ZjhkOTFmZWI1YmIwZGU0Mjk5MzQ3
ZWFlZjM1ZGViZWZjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENv
bW1hbmQuaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEzMSw3ICsxMzAs
NyBAQCBzdGF0aWMgU3RyaW5nIHN0cmluZ0ZvclZpc2libGVQb3NpdGlvbkluZGV4UmFuZ2UoY29u
c3QgVmlzaWJsZVBvc2l0aW9uSW5kZXhSYW5nZQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnRJbmRleC52YWx1ZSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZS5nZXQoKSk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmVuZEluZGV4
LnZhbHVlLCByYW5nZS5lbmRJbmRleC5zY29wZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3Ry
aW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoeyBXVEZNb3ZlKHN0YXJ0KSwgV1RGTW92ZShlbmQp
IH0pOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6OnRleHREZWxl
dGVkQnlVbmFwcGx5KCkKQEAgLTE0MjAsMTggKzE0MTksMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAg
ICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8gcGFyYWdy
YXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAgICAg
ICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxl
Y3Rpb25TdGFydCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0
YXJ0ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVTdGFy
dCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqcmFu
Z2VUb1NlbGVjdGlvblN0YXJ0LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVuZEluZGV4
ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAg
ICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJs
ZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQotICAgICAgICAg
ICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAq
c2VsZWN0aW9uRW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRvU2VsZWN0aW9u
RW5kID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVFbmQp
KQorICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZVRv
U2VsZWN0aW9uRW5kLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDQ0LDE3
ICsxNDM5LDE1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgUG9zaXRpb24gc3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwog
ICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCku
dXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRp
cmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCi0g
ICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gZW5kLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRSYW5nZUNv
bXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXBy
ZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICAvLyBzdGFydCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gY3JlYXRl
IGEgcmFuZ2Ugc2luY2UgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIi4KKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBl
bmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJh
Z3JhcGggdG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3VnaCwgc2luY2Ug
bW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCiAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRoaXMgdXNlZCB0byB1c2UgYSB0
ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29uZnVzZWQgc29tZSB2ZXJzaW9u
cyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSAh
PSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFu
Y2UocmFuZ2UuZ2V0KCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252
ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmluZygpKTsKKyAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CiAK
ICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3aGVuIHdlIGNv
cHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5nIGlmIHdlJ3Jl
IGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFwaCBjYW4gaGF2
ZSBzdHlsZQpAQCAtMTUwNCw3ICsxNDk3LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAg
ICBpZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRvY3VtZW50KCk7
CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKmVkaXRh
YmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFy
YWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8gZGVzdGluYXRpb25J
bmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAwIH0sICptYWtlQm91bmRh
cnlQb2ludChkZXN0aW5hdGlvbikgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2Vl
bkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkpOwogICAgIEFTU0VS
VChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg3MGM0ZGJiNjhk
MzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMuLmY2NWRmNDQ5Njg3ZDNmNTMzMjk1N2ZmODQ4
MTRmZGM3ZWY3ODZiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGE3ODdkZmFhZjFj
NTEyODk2ZjZlN2JiMTc2NWVhMzQ4M2RkMTUyODQuLmRkZTUyNTAxMzM4M2NhYTdmNjFlYWViNTNl
OTk1YjcyMjFlYTE1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTEwNCwy
NyArMTEwNCwyMSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAgICAgc2NvcGUg
PSAmZG9jdW1lbnQ7CiAgICAgfQogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50
KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKLSAgICBpZiAoIXN0YXJ0KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9u
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpLCBw
b3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICpl
bmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogLy8gRklYTUU6IE1l
cmdlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRvIHN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOwotICAgIGlmICgh
c3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCkpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RQ
b3NpdGlvbkluTm9kZSgmbm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9LCBmb3JT
ZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CisgICAg
cmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8g
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBU
ZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggN2I1ZTJl
ZWNhNDNlZWU1MjFkODYwYzQ4NTZhYWI3MWJmZGFiOGFiMC4uNDI5NDA0ZmVmNDAxOWVkYTFmODdi
OTA3ZjA0MmJiMGJjOTBhN2I5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjk2
LDcgKzY5Niw4IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERv
Y3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdB
Y3Rpb24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb21tYW5kLT52
aXNpYmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOworICAgICAgICBhdXRvIHNlbGVjdGlv
biA9IGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKTsKKyAgICAgICAg
U3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShzZWxlY3Rpb24pOwogICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFw
cGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KQEAgLTcyNSw3ICs3MjYs
NyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50
LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0FjdGlvbik7CisgICAgcmVw
bGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
dGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6Olllcywg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVj
dGVkUmFuZ2UoKQpAQCAtMjEyMCw4ICsyMTIxLDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4K
IAogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2Vs
ZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBz
dGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVu
dE9mZnNldCk7Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwot
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVj
dGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6Tm8pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHsgeyB7ICpiYXNlTm9kZSwgc3RhcnQgfSwgeyAqYmFzZU5vZGUsIGVuZCB9IH0gfSwg
RE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTMyOTUsNyArMzI5NSw3IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVj
dGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKICAgICBhdXRvIGVu
ZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNP
cnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBwbGFpblRleHQoU2ltcGxlUmFuZ2UgeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9LCBiZWhhdmlv
cikucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpt
YWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCksIGJlaGF2aW9yKS5yZXBsYWNlV2l0aExpdGVyYWwo
J1wwJywgIiIpOwogfQogCiBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjpp
bnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTM3MTMsNyArMzcx
Myw3IEBAIHN0YXRpYyBTaW1wbGVSYW5nZSBleHRlbmRTZWxlY3Rpb24oY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCB1bnNpZ25lZCBjaGFyYWN0ZXJzCiAgICAgICAgIHN0YXJ0ID0gc3RhcnQucHJl
dmlvdXMoQ2hhcmFjdGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKICAg
ICB9Ci0gICAgcmV0dXJuIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KGVuZCl9OworICAgIHJldHVybiAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwog
fQogCiB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQpAQCAt
MzkyNyw5ICszOTI3LDcgQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiBTdHJpbmcgRWRpdG9yOjpzdHJpbmdG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rp
b24uaXNDYXJldCgpCi0gICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0
KCkpCi0gICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkp
OworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBv
c2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFjYW5kaWRh
dGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCkBAIC0zOTQwLDExICszOTM4LDcgQEAgU3Ry
aW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29u
c3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdy
YXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSkpOwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwotICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1
cm4geyB7ICpzdGFydCwgKmVuZCB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdyYXBoKHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRv
cjo6cmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiBy
ZXN1bHQpIGNvbnN0CkBAIC00MjI5LDkgKzQyMjMsOCBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNj
ZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogICAg
IH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50
LCBudWxscHRyKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9
IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3Ro
KCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChpbnNlcnRlZENhbmRp
ZGF0ZVJhbmdlKQotICAgICAgICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFydENvbnRhaW5l
cigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqaW5zZXJ0ZWRDYW5kaWRhdGVSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2NlcHRlZENhbmRpZGF0ZS5y
ZXBsYWNlbWVudCk7CisgICAgaWYgKGF1dG8gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdl
RXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3RoKCksIFNl
bGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKQorICAgICAgICBpbnNlcnRlZENhbmRpZGF0ZVJh
bmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqaW5z
ZXJ0ZWRDYW5kaWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBh
Y2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRl
ZENhbmRpZGF0ZSA9IGZhbHNlOwogfQpAQCAtNDI2Miw3ICs0MjU1LDcgQEAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiAgICAgLy8gRklYTUU6
IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFu
Y2hvciB0YWcgaXQncyBpbj8gV2hvZXZlciB3cm90ZSB0aGlzIGNvZGUgb3JpZ2luYWxseSBmb3Jn
b3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhlIHJhdGlvbmFsZS4KICAgICBh
dXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewotICAgICAgICBp
ZiAoYXV0byBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBv
c2l0aW9uSW5Ob2RlKGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLT5zdGFydC5jb250YWlu
ZXIsIHJhbmdlLT5lbmQuY29udGFpbmVyKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKKyAg
ICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
Zmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqcmFuZ2UpLmdldCgp
KSwgSFRNTE5hbWVzOjphVGFnKSkgewogICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMo
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkp
LCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkgPj0gMCkKICAgICAg
ICAgICAgICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cygqZW5jbG9zaW5nQW5jaG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0NTIyOTEwZTY1
YzZhOTEzYy4uYTFkMTk0MzZmNjZlYTJkZDZmZTllMzQ2ODgxNDk5MjZhN2QxOGI4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xODIsMTAgKzE4Miw4IEBA
IHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1lLCBU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAgaWYgKCFuZXdSYW5nZSB8fCBuZXdSYW5nZS0+
Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGFmZmluaXR5ID0g
c2VsZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdSYW5nZSwgYWZmaW5pdHks
IGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCksIGFmZmluaXR5
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2UpCisgICAgICAg
ICYmIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKm5ld1JhbmdlLCBhZmZpbml0
eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogfQogCiBzdGF0aWMg
VHJpU3RhdGUgc3RhdGVTdHlsZShGcmFtZSYgZnJhbWUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgY2hhciogZGVzaXJlZFZhbHVlKQpAQCAtMzU0LDkgKzM1Miw3IEBAIHN0YXRpYyBi
b29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0g
ICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOwotICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwotICAgICAgICBpZiAoIXNlbGVjdGVk
KQorICAgICAgICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCpt
YXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVBTSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVsZXRlKCk7CkBAIC0xMDU2
LDggKzEwNTIsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQQUw6OnN5c3Rl
bUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywg
KnNlbGVjdGlvbikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pLCBE
T1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiB9CiAK
IHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RXb3JkKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQpAQCAtMTU3MSw3ICsxNTY2LDcgQEAgc3Rh
dGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgpIHx8ICFzZWxlY3Rp
b24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50
Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpKS5nZXQoKSk7CisgICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tD
b21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdl
KCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVtZW50LT5sb2NhbE5hbWUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBlNDM2
YzdmZGUyMWRiYjIwMzRiNTljNWI5NTI4OWZhM2NmZWQ3MGE5Li5iZjUyZTBjMDQ0YjdjYWMzMWYx
NDlkNGEyNjM0Mjk1YjEyYzI0ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3Jt
YXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNjgsMTQgKzY3LDE0IEBAIHZvaWQgRm9ybWF0QmxvY2tD
b21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQsCiAgICAgUmVmUHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgOiBzcGxpdFRy
ZWVUb05vZGUoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksICpub2RlVG9TcGxpdFRvKTsKICAgICBS
ZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24gPSBvdXRlckJsb2NrOwogCi0g
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnQsIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmRPZlNl
bGVjdGlvbik7CiAgICAgRWxlbWVudCogcmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoZW5kKTsKICAgICBFbGVtZW50KiByb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oc3Rh
cnQpOwogICAgIC8vIFJvb3QgaXMgbnVsbCBmb3IgZWxlbWVudHMgd2l0aCBjb250ZW50ZWRpdGFi
bGU9ZmFsc2UuCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1lKCkpICYmIHN0
YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2Nr
KGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwgcmFuZ2UuZ2V0
KCkpKQorICAgICAgICAmJiAoZW5kID09IGVuZE9mQmxvY2soZW5kKSB8fCAocmFuZ2UgJiYgaXNO
b2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwgKnJhbmdlKSkpCiAgICAgICAgICYm
IHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9vdC0+aXNEZXNjZW5kYW50T2YoKnJlZk5vZGUpKSB7CiAg
ICAgICAgIC8vIEFscmVhZHkgaW4gYSBibG9jayBlbGVtZW50IHRoYXQgb25seSBjb250YWlucyB0
aGUgY3VycmVudCBwYXJhZ3JhcGgKICAgICAgICAgaWYgKHJlZk5vZGUtPmhhc1RhZ05hbWUodGFn
TmFtZSgpKSkKQEAgLTk5LDIzICs5OCwyMiBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9y
bWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAg
ICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSk7CiB9
CiAgICAgCi1FbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9j
a0NvbW1hbmQoUmFuZ2UqIHJhbmdlKQorRWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVt
ZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBO
b2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwot
ICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29t
bW9uQW5jZXN0b3IpKQorICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVB
bmNlc3RvcigqcmFuZ2UpOworICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50
Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0b3IuZ2V0KCkpKQogICAgICAgICBjb21tb25BbmNl
c3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJlbnROb2RlKCk7Ci0KLSAgICBpZiAoIWNvbW1vbkFu
Y2VzdG9yKQorICAgIGlmICghaXM8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byByb290
RWRpdGFibGVFbGVtZW50ID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOwogICAgIGlmICghcm9vdEVkaXRhYmxlRWxlbWVudCB8fCBjb21tb25BbmNlc3Rvci0+
Y29udGFpbnMocm9vdEVkaXRhYmxlRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkgPyBkb3duY2FzdDxF
bGVtZW50Pihjb21tb25BbmNlc3RvcikgOiBudWxscHRyOworICAgIHJldHVybiAmZG93bmNhc3Q8
RWxlbWVudD4oKmNvbW1vbkFuY2VzdG9yKTsKIH0KIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRC
bG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKaW5kZXggNzliZWRhZDE3ZTBlNjRjODI1ODIwMTZkNTJl
OWI5ZTk2ZjI0MjFjNy4uZGEyYWQ1MDRiYzEwNTM3OTg0NGU3Y2FhNTAyNTA2ZDE1MTE2Mjc5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RhdGljIEVsZW1lbnQqIGVs
ZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2UqKTsKKyAgICBzdGF0aWMgRWxlbWVudCog
ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
KTsKICAgICBib29sIGRpZEFwcGx5KCkgY29uc3QgeyByZXR1cm4gbV9kaWRBcHBseTsgfQogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0
YTYzYWQ4MGM1MWUxMTc2ZTRiOTg0MjE1NzQyYTQ5MDBhYjU3YzQ3Li4wYTJkNGZjMzdlODI5Nzgx
MjVmMzQ4NDkwMGFkMDM0YzdhYTZkNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcApAQCAtMjA1LDEyICsyMDUsNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpt
b3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdn
ZQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcywgYWZmaW5pdHksIG1fc2Vs
ZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJU
cmlnZ2VyZWQpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFJhbmdl
KiByYW5nZSkKLXsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHJhbmdlID8gVmlz
aWJsZVNlbGVjdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24o
KSkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci19
Ci0KIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmYmFzZSwgY29u
c3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCB1
c2VyVHJpZ2dlcmVkKQogewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGlyZWN0aW9uID0g
dHJ1ZTsKQEAgLTIwMzQsMTEgKzIwMjgsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
QWxsKCkKICAgICB9CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2Uo
UmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3Nl
VHlwaW5nLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQorYm9vbCBGcmFtZVNlbGVjdGlv
bjo6c2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBF
QWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3NlVHlwaW5nLCBFVXNlclRy
aWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBBU1NFUlQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkg
PT0gJnJhbmdlLT5lbmRDb250YWluZXIoKS5kb2N1bWVudCgpKTsKKworICAgIGlmIChyYW5nZS0+
c3RhcnQuY29udGFpbmVyLnB0cigpICE9IHJhbmdlLT5lbmQuY29udGFpbmVyLnB0cigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbigq
cmFuZ2UsIGFmZmluaXR5KTsKIApAQCAtMjYxOCwzNCArMjYxNCw2IEBAIFVDaGFyIEZyYW1lU2Vs
ZWN0aW9uOjpjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4g
dmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckFmdGVyKCk7CiB9CiAKLWludCBGcmFtZVNlbGVjdGlv
bjo6d29yZE9mZnNldEluUmFuZ2UoY29uc3QgUmFuZ2UgKnJhbmdlKSBjb25zdAotewotICAgIGlm
ICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJldCgpKQotICAg
ICAgICByZXR1cm4gLTE7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG9ubHkgd29yayBpbiBj
YXNlcyB3aGVyZSB0aGUgc2VsZWN0aW9uIHJlbWFpbnMgaW4KLSAgICAvLyB0aGUgc2FtZSBub2Rl
IGFmdGVyIGl0IGlzIGV4cGFuZGVkLiBJbXByb3ZlIHRvIGhhbmRsZSBtb3JlIGNvbXBsaWNhdGVk
Ci0gICAgLy8gY2FzZXMuCi0gICAgaW50IHJlc3VsdCA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKLSAgICBpZiAocmVz
dWx0IDwgMCkKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1i
b29sIEZyYW1lU2VsZWN0aW9uOjpzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25zdCBSYW5nZSAq
cmFuZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIE5vZGUmIG5vZGUgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7Ci0gICAgaW50IGVuZE9mZnNl
dCA9IHJhbmdlLT5lbmRPZmZzZXQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgZW5kT2Zmc2V0KSwgVlBfREVGQVVMVF9BRkZJTklU
WSk7Ci0gICAgcmV0dXJuIGlzU3BhY2VPck5ld2xpbmUocG9zLmNoYXJhY3RlckFmdGVyKCkpOwot
fQotCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKSBjb25z
dAogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CkBAIC0y
NjYwLDE1ICsyNjI4LDYgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXREb2N1bWVu
dFN0YXJ0KCkgY29uc3QKICAgICByZXR1cm4gaXNTdGFydE9mRG9jdW1lbnQocG9zKTsKIH0KIAot
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkgY29uc3QKLXsK
LSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwotICAgIGlmIChz
ZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBh
Y3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoc2VsZWN0aW9uKTsKLX0KLQogYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAogewogICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CkBAIC0yODM0LDkgKzI3OTMsMTIgQEAg
VmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdD
YXJldFNlbGVjdGlvbihjb25zdCBWaXMKICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihzdGFy
dFZpc2libGVQb3MsIGVuZFZpc2libGVQb3MpOyAgICAKIH0KIAotYm9vbCBGcmFtZVNlbGVjdGlv
bjo6YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbCkgY29uc3QKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0U2VudGVuY2VTdGFy
dCgpIGNvbnN0CiB7Ci0gICAgUG9zaXRpb24gc3RhcnRQb3Moc2VsLnN0YXJ0KCkpOworICAgIGlm
IChtX3NlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9z
aXRpb24gc3RhcnRQb3MobV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHBvcyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUo
KSwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFZQX0RFRkFVTFRfQUZGSU5J
VFkpOwogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBkYTQyZTBmZmFjY2VlMWRlNWRl
N2ZiYTIyZTllOWZkODkwMzQ2YTJkLi5lZGQ0YmFhODI4N2Q4MTFiZjNkODE0NWU5YzlmYjJlYjZh
YzMwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3Jv
bGxBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxl
Y3Rpb24uaCIKQEAgLTE0NCw3ICsxNDMsNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsK
ICAgICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG8oY29uc3QgUmFuZ2UqKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNl
clRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGln
bkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRv
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJp
Z2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAgICAgdm9pZCBtb3ZlVG8oY29uc3QgUG9zaXRp
b24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CkBAIC0x
NTUsNyArMTUzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9u
PiA9IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50
ID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWdu
Q3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgVGV4dEdyYW51bGFyaXR5ID0gVGV4dEdyYW51bGFyaXR5
OjpDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICBlbnVtIGNsYXNzIFNob3VsZENsb3NlVHlw
aW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVj
dGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRyaWdn
ZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2Vs
ZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFQWZmaW5pdHksIFNob3Vs
ZENsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhcigpOwogICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwpAQCAtMjMyLDggKzIz
MCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJJblJlbGF0
aW9uVG9DYXJldFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBVQ2hhciBjaGFyYWN0ZXJCZWZvcmVDYXJldFNlbGVjdGlvbigpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBpbnQgd29yZE9mZnNldEluUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25z
dDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNwYWNlRm9sbG93c1dvcmRJblJhbmdlKGNvbnN0
IFJhbmdlKikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdERvY3Vt
ZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0U2Vu
dGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXRX
b3JkU3RhcnQoKSBjb25zdDsKQEAgLTMzMyw3ICszMjksNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
ZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBi
b29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JikgY29uc3Q7CiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
aW5kZXggZjgyZjM5NWNhNTJiZDc2MDJlZmVjYjc2ZmUzZDBhYjM5YTAzMjYwYi4uNjllN2UzMGU2
NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTIwNyw3ICsyMDcsNyBA
QCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0
KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVudC0+dGV4dCgpKTsKKyAgICAgICAgbV9mcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsKICAg
ICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRl
eCA4MzI4NTZmNmIyZmZhMjNhNWIzNzM5NDdhNjBjNzAwNDkyNTM4NDk4Li4xNWVmNDgyMTZlZWJh
NzNkNWYwZjMxZDEyNDg5MGRmOWY1YmU4M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgpAQCAtMTU4LDEzICsxNTksMTAgQEAgUmVmPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6OnN1YnJhbmdlKENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAogCiBFeGNlcHRpb25Pcjx1
aW50NjRfdD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoIXN0YXJ0KQorICAgIGF1
dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9u
KCksIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZUVycm9yIH07Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bik7Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3Ig
fTsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7CisgICAgcmV0
dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSk7CiB9CiAKIGJvb2wgVGV4dENoZWNraW5nUGFyYWdy
YXBoOjppc0VtcHR5KCkgY29uc3QKQEAgLTIxMCwyNiArMjA4LDE3IEBAIHVpbnQ2NF90IFRleHRD
aGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5ndGgoKSBjb25zdAogCiB1aW50NjRfdCBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKSBjb25zdAogewot
ICAgIGlmIChtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQpCi0gICAgICAgIHJldHVybiAqbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwotCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoIXN0YXJ0
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KG1f
YXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoIWVu
ZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQg
PSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKKyAgICBpZiAoIW1fYXV0b21hdGlj
UmVwbGFjZW1lbnRTdGFydCkgeworICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1JlcGxhY2VtZW50
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRT
dGFydCA9IHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlKSA6IDA7CisgICAgfQogICAgIHJl
dHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwogfQogCiB1aW50NjRfdCBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKLSAgICAgICAgcmV0dXJuICptX2F1
dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwotCi0gICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudExl
bmd0aCA9IGNoYXJhY3RlckNvdW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7CisgICAg
aWYgKCFtX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKQorICAgICAgICBtX2F1dG9tYXRpY1Jl
cGxhY2VtZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBsYWNlbWVudFJh
bmdlKTsKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5jcHAKaW5kZXggYjMxZGFjNWRhNzk0NjBmNzllOTBkYmU2NDlhNjA2OWUyZDQ1NmYwOS4uNmRi
ZmQ4NTE5ZWViZTM0NDU2NDEzNzgxYjM4ZGU3N2FjNzg3Yjg3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTQw
LDcgKzQwLDYgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2Rl
VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMTQ2LDcgKzE0NSw3IEBAIHN0YXRpYyBi
b29sIGlzVG9rZW5EZWxpbWl0ZXIoVUNoYXIgY2hhcmFjdGVyKQogY2xhc3MgUGFyYWdyYXBoQ29u
dGVudEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IoY29u
c3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgICAgICA6IG1faXRl
cmF0b3IoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
KSB9LCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQorICAgICAgICA6IG1faXRl
cmF0b3IoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0
eWxlVmlzaWJpbGl0eSkKICAgICAgICAgLCBtX25vZGUoc3RhcnQuZmlyc3ROb2RlKCkpCiAgICAg
ICAgICwgbV9wYXN0RW5kTm9kZShlbmQuZmlyc3ROb2RlKCkpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYWY1ZWIxYjdlNmM0MWVkMTBkNGE2Yzhk
MDNhNWFlZTQzYTA3M2JhYi4uZDAxNTEwMmE2MDlmZmFlZDI2MTJhZjJlNzljM2I5ZmVkZDVmMTlh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0zMzIsOCAr
MzMyLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uRm9yRGVsZXRpb24oY29uc3QgVmlzaWJsZVNlbGUKICAgICAgICAgcmV0dXJuOwogICAgIHBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGVEZWxldGUsIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbiks
IHNlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb25JbmRleFJhbmdlIHJhbmdl
OwotICAgIHJhbmdlLnN0YXJ0SW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihz
ZWxlY3Rpb24uc3RhcnQoKSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7Ci0gICAgcmFuZ2UuZW5k
SW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIHJh
bmdlLmVuZEluZGV4LnNjb3BlKTsKKyAgICByYW5nZS5zdGFydEluZGV4LnZhbHVlID0gaW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCByYW5nZS5zdGFydElu
ZGV4LnNjb3BlKTsKKyAgICByYW5nZS5lbmRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKHNlbGVjdGlvbi52aXNpYmxlRW5kKCksIHJhbmdlLmVuZEluZGV4LnNjb3BlKTsKICAg
ICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmFuZ2UpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggZGYzZWFmZGQ1
ZTk4MGUyNDI3ZTJhMWI3OThhZDQwZGRlODc5OTlmNC4uMDE2OGViODE4MTQyZDNmNDY5OWY1NWVh
MGZmOGIyMmFhZGI2Mzc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmNwcApAQCAtODQ5LDYgKzg0OSwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpbwogICAg
IHJldHVybiBzdHJlYW07CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFu
Z2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBtYWtl
U2ltcGxlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Cit9CisKIH0gIC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCBmODRiY2RmZDcyZjViYzQ1NzYzM2RhNDgzMjcy
MWU1Mjc3YTI0ODUxLi45MWVkNGNjMGYzNDQ4MzQ3NTIyZDVkMTI2YWU0OWYzZTJjMDFlMmRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTMyLDYgKzMyLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsKIAorc3RydWN0IFNpbXBsZVJh
bmdlOworCiAvLyBWaXNpYmxlUG9zaXRpb24gZGVmYXVsdCBhZmZpbml0eSBpcyBkb3duc3RyZWFt
IGJlY2F1c2UKIC8vIHRoZSBjYWxsZXJzIGRvIG5vdCByZWFsbHkgY2FyZSAodGhleSBqdXN0IHdh
bnQgdGhlCiAvLyBkZWVwIHBvc2l0aW9uIHdpdGhvdXQgcmVnYXJkIHRvIGxpbmUgcG9zaXRpb24p
LCBhbmQgdGhpcwpAQCAtMTQwLDYgKzE0MiwxNSBAQCBib29sIGFyZVZpc2libGVQb3NpdGlvbnNJ
blNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvcwog
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVBZmZpbml0eSk7
CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKK3N0cnVjdCBWaXNpYmxlUG9zaXRpb25S
YW5nZSB7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OworICAgIFZpc2libGVQb3NpdGlvbiBl
bmQ7CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0LmlzTnVsbCgpIHx8
IGVuZC5pc051bGwoKTsgfQorfTsKKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVS
YW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpOworCiAvLyBpbmxpbmVzCiAKIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZG4ndCBpZ25vcmUgYWZmaW5pdHkuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCAwNGY4ODRiNzIwNWU5MzkzYWE5OWM3ZDdi
NGViYjk2YmM0ZjNmODgwLi45ZGJhZDEwZjg2NGEwZjQzZmUyNDBmOWIwMDFmZjYyMmVlMmJiN2U1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgpAQCAtMTM2LDcgKzEzNSw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNp
YmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKICAgICBQb3NpdGlvbiBlbmQgPSBtX2Vu
ZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwg
c3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfQogCiBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdApAQCAtMTc5LDE4
ICsxNzgsMTMgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9y
bWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocywgZSkg
PiAwKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0aGUg
ZW5kLgogICAgICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0YXJ0
IGlmIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgotICAg
ICAgICAgICAgUG9zaXRpb24gdG1wID0gczsKLSAgICAgICAgICAgIHMgPSBlOwotICAgICAgICAg
ICAgZSA9IHRtcDsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChzLCBlKTsKICAgICAgICAgfQogICAg
ICAgICBzID0gcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICAgICAgZSA9IGUucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgfQogCi0gICAgaWYgKHMuaXNOdWxsKCkgfHwg
ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBT
aW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzKSwgKm1ha2VCb3VuZGFyeVBvaW50KGUp
IH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzLCBlKTsKIH0KIAogYm9vbCBWaXNpYmxl
U2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSkKQEAgLTIwNCwxNCArMTk4LDEwIEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5k
VXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAKIHN0YXRpYyBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKIHsKLSAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwotICAg
IGF1dG8gc2NvcGUgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChub2RlKTsK
KyAgICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQocG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzdGFydCksIG1ha2VCb3VuZGFyeVBvaW50QWZ0
ZXJOb2RlQ29udGVudHMoKnNjb3BlKSB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShw
b3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cygqc2NvcGUpKTsKIH0KIAogYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0Fs
bChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggM2Y4ODJlMTlkNDE5YmZhOGQ1ZWRlYWU1
OTI4NmY2YWFkZGUyMjc3ZS4uODc2ZGUxODY5NTQzYzUyNGVkZGM0NjUzNzg4NWY5MTRkNzgzZWY1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKQEAgLTcyLDYg
KzcyLDggQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSgpIGNvbnN0
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIGlzUmFuZ2UoKSA/IChpc0Jhc2VGaXJz
dCgpID8gVVBTVFJFQU0gOiBET1dOU1RSRUFNKSA6IGFmZmluaXR5KCkpOyB9CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVFeHRlbnQoKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24o
bV9leHRlbnQsIGlzUmFuZ2UoKSA/IChpc0Jhc2VGaXJzdCgpID8gRE9XTlNUUkVBTSA6IFVQU1RS
RUFNKSA6IGFmZmluaXR5KCkpOyB9CiAKKyAgICBvcGVyYXRvciBWaXNpYmxlUG9zaXRpb25SYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIHsgdmlzaWJsZVN0YXJ0KCksIHZpc2libGVFbmQoKSB9OyB9CisK
ICAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBOb1Nl
bGVjdGlvbjsgfQogICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5
cGUoKSA9PSBDYXJldFNlbGVjdGlvbjsgfQogICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IDEyZDRjYWMzNmI4NDkwNDlmNmUyNDQyZTc2MzYx
MTNiNjU0YjU3YjcuLmE4MDdmNTYzZTZlZDIwZWRlMDdhNzBkNDRjYzFhZTVjMjcyMDQwYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE4MzMsMTEgKzE4MzMs
MTEgQEAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFQKICAgICB9CiB9CiAKLVJlZlB0cjxSYW5nZT4g
ZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAs
IFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
bikKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
ZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFRoaXMgaXMgcGFydGljdWxh
cmx5IGluZWZmaWNpZW50LiAgV2UgY291bGQgZWFzaWx5IG9idGFpbiB0aGUgYW5zd2VyIHdpdGgg
dGhlIGJvdW5kYXJpZXMgY29tcHV0ZWQgYmVsb3cuCiAgICAgaWYgKCF3aXRoaW5UZXh0VW5pdE9m
R3JhbnVsYXJpdHkodnAsIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZpc2libGVQb3Np
dGlvbiBwcmV2Qm91bmRhcnk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeTsKQEAg
LTE4ODksMjUgKzE4ODksMjMgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KIAogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
CiAgICAgaWYgKHByZXZCb3VuZGFyeS5pc051bGwoKSB8fCBuZXh0Qm91bmRhcnkuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgaWYgKHZwIDwgcHJldkJvdW5kYXJ5IHx8IHZwID4gbmV4dEJvdW5kYXJ5KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPmRvY3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKIH0KIAog
c3RkOjpwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIGlmIChhLmlzTnVsbCgp
IHx8IGIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhIDwgYgotICAg
ICAgICA/IC1jaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KGIpIH0pCi0gICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5
UG9pbnQoYiksICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKKyAgICByZXR1cm4gYSA8IGIgPyAt
Y2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShhLCBiKSkgOiBjaGFyYWN0ZXJDb3VudCgq
bWFrZVNpbXBsZVJhbmdlKGIsIGEpKTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVD
aGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpAQCAtMTkzNCw3ICsxOTMyLDcg
QEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBw
b3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB9CiAKICAgICBpZiAoc3RhcnRQb3NpdGlv
biAhPSBlbmRQb3NpdGlvbikgewotICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxh
aW5UZXh0KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5
UG9pbnQoZW5kUG9zaXRpb24pIH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcpOworICAgICAg
ICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KCptYWtlU2ltcGxlUmFuZ2Uoc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGNoYXJhY3RlclN0cmluZy5sZW5ndGgoKSAtIDEsIGluZGV4ID0g
MDsgaSA+PSAwICYmIGluZGV4IDwgbWF4Q2hhcmFjdGVyczsgLS1pKSB7CiAgICAgICAgICAgICBp
ZiAoIWluZGV4ICYmIG5leHRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgICAgICBpbmRl
eCsrOwpAQCAtMTk0Niw1MyArMTk0NCwzOCBAQCB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVBZnRlcgogICAg
IHR3b0JlZm9yZSA9IGNoYXJhY3RlcnNbMl07CiB9CiAKLVJlZlB0cjxSYW5nZT4gd29yZFJhbmdl
RnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitPcHRpb25hbDxT
aW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24pCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBjb3VsZCBiZSBpbiBhIG5vbiB2aXNp
YmxlIGVsZW1lbnQgYW5kIHdlIGRvbid0IGhhdmUgYSBWaXNpYmxlUG9zaXRpb24uCiAgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24s
IFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghcmFuZ2Up
IHsKLSAgICAgICAgLy8gV2UgY291bGQgYmUgYXQgdGhlIHN0YXJ0IG9mIGEgd29yZCwgdHJ5IGZv
cndhcmQuCi0gICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKTsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2UpCisgICAgaWYgKGF1dG8gcmFu
Z2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxh
cml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkKKyAg
ICAgICAgcmV0dXJuIHJhbmdlOworICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkKICAgICAgICAgcmV0dXJuIHJhbmdlOwog
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgIGRv
IHsKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgfSB3aGlsZSAoY3VycmVudFBv
c2l0aW9uLmlzTm90TnVsbCgpICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjdXJyZW50UG9z
aXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkJhY2t3YXJkKSk7Ci0KICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICBjdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0
eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRp
cmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgp
KSB7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIGN1cnJlbnRQb3NpdGlvbiwgcG9zaXRp
b24pOwotICAgICAgICBBU1NFUlQocmFuZ2UpOwotICAgIH0KLQotICAgIHJldHVybiByYW5nZTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGN1cnJlbnRQb3NpdGlvbiwgcG9zaXRpb24pOwog
fQogCiBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3Vs
dDsKLQotICAgIC8vIG1vdmUgdGhlIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHdvcmQKICAg
ICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6
TGluZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAg
IC8vIERvbid0IGNyb3NzIGxpbmUgYm91bmRhcmllcy4KICAgICAgICAgcmVzdWx0ID0gcG9zaXRp
b247CiAgICAgfSBlbHNlIGlmICh3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24s
IFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZv
cndhcmQpKSB7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBsaWVzIHdpdGhpbiBhIHdvcmQuCi0g
ICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLQotICAgICAgICByZXN1bHQgPSB3b3JkUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhwb3Np
dGlvbiwgcmVzdWx0KSA+IDEpCi0gICAgICAgICAgICByZXN1bHQgPSB3b3JkUmFuZ2UtPmVuZFBv
c2l0aW9uKCk7CisgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHks
IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgICAg
IGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkgPiAxKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFu
Z2UtPmVuZCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpCYWNrd2FyZCkpIHsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGlzIGF0IHRo
ZSBlbmQgb2YgYSB3b3JkLgogICAgICAgICByZXN1bHQgPSBwb3NpdGlvbjsKQEAgLTIwMDgsNyAr
MTk5MSw3IEBAIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1SZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29y
ZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRC
b3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFy
YWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgUG9z
aXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVu
ZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDI0LDEwICsyMDA3LDEwIEBAIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91
bmRhcnkoY29uc3QgVmlzaWJsZVBvCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQgJiYgIWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZCwgVGV4dEdyYW51
bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpCiAg
ICAgICAgIGVuZCA9IGVuZE9mV29yZChlbmQpLmRlZXBFcXVpdmFsZW50KCk7CiAKLSAgICByZXR1
cm4gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2Uoc3Rh
cnQsIGVuZCk7CiB9ICAgIAogCi1SZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3Np
dGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBh
bmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCkKIHsKICAgICBQb3NpdGlvbiBz
dGFydCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gcG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKQEAgLTIwMzUsOCArMjAxOCw3IEBAIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zCiAgICAgICAgIHN0YXJ0ID0gc3RhcnQucHJldmlvdXMoQ2hhcmFjdGVyKTsK
ICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKICAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0
YXJ0LCBlbmQpOwogfQogCiBzdGQ6OnBhaXI8VmlzaWJsZVBvc2l0aW9uLCBXaXRoaW5Xb3JkQm91
bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGluZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMjA0Nyw5ICsyMDI5LDkgQEAgc3RkOjpwYWly
PFZpc2libGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3Np
dGlvbldpdGhvdXRDcm8KICAgICBpZiAod2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0
aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9u
OjpGb3J3YXJkKSkgewogICAgICAgICBhdXRvIGFkanVzdGVkUG9zaXRpb24gPSBwb3NpdGlvbjsK
ICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpGb3J3YXJkKSkgewotICAgICAgICAgICAgYWRqdXN0ZWRQb3NpdGlvbiA9IHdv
cmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgICAgICAgICAgYWRqdXN0ZWRQb3NpdGlvbiA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KTsKICAgICAgICAg
ICAgIGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIGFkanVzdGVkUG9zaXRp
b24pID4gMSkKLSAgICAgICAgICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gd29yZFJhbmdlLT5l
bmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB7IGFkanVzdGVkUG9zaXRpb24sIFdpdGhpbldvcmRCb3VuZGFyeTo6WWVzIH07CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggMWE3ODMyZWIzN2I4
MTk5NWI5MWIxMDMwZTk0YjE1NGE0M2Q2MzBkYi4uNDJlNjM3ODk1ZWVjNzliZDhjMjJiNmRjNzg5
NTQ3YTJiOGE5YWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBAIC0x
MDEsMTMgKzEwMSwxMyBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZFZGl0YWJsZU9yTm9u
RWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQg
Ym9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0
R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBib29sIHdp
dGhpblRleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwotV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZH
cmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVj
dGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnB0cmRpZmZfdCBkaXN0YW5jZUJl
dHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBX
RUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pOwogV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVUNoYXIz
MiYgb25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKTsKLVdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlD
aGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNU
b0V4cGFuZCk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNo
YXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKK1dF
QkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVkQXJvdW5kUG9z
aXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hh
cmFjdGVyc1RvRXhwYW5kKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBy
YW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlv
bkRpcmVjdGlvbik7CiBlbnVtIGNsYXNzIFdpdGhpbldvcmRCb3VuZGFyeSA6IGJvb2wgeyBObywg
WWVzIH07CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8VmlzaWJsZVBvc2l0aW9uLCBXaXRoaW5X
b3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGluZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDIzNmEzYWI0N2FhODU4Y2NlNjE2Y2QxYjM1MTFlYmU0
ZDI5NGUwZGEuLjE0ZmE2ODgyYzY3MzZjNzNmZDYzNDQwOGZlY2Q3OGE0MmRiYWE2ZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTczLDcg
KzczLDcgQEAgc3RhdGljIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gZGV0ZWN0SXRlbShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdAogICAgIGlmIChwb3NpdGlvbi5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9
IHBsYWluVGV4dChjb250ZXh0UmFuZ2UpOwotICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFy
YWN0ZXJDb3VudCh7IGNvbnRleHRSYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0
aW9uKSB9KTsKKyAgICBDRkluZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoKm1ha2VT
aW1wbGVSYW5nZShjb250ZXh0UmFuZ2Uuc3RhcnQsIHBvc2l0aW9uKSk7CiAKICAgICBhdXRvIHNj
YW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAs
IG51bGxwdHIpKTsKICAgICBhdXRvIHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVh
dGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5s
ZW5ndGgoKSkpKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBPcHRpb25hbDxEZXRlY3RlZEl0ZW0+IERh
dGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlcwog
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uOwotICAg
IFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBj
b250ZXh0UmFuZ2U7CiAKICAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigq
bm9kZSkpIHsKICAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludCho
aXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CkBAIC0yNzIsMTYgKzI3MiwxNCBA
QCBzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoRWxlbWVudCYgZWxlbWVu
dCkKICAgICBlbGVtZW50UGFyZW50LT5yZW1vdmVDaGlsZChlbGVtZW50KTsKIH0KIAotc3RhdGlj
IGJvb2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKE5vZGUmIHN0YXJ0Tm9k
ZSwgTm9kZSYgZW5kTm9kZSwgYm9vbCYgZGlkTW9kaWZ5RE9NKQorc3RhdGljIGJvb2wgc2VhcmNo
Rm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5k
Tm9kZSkKIHsKLSAgICBkaWRNb2RpZnlET00gPSBmYWxzZTsKICAgICBmb3IgKE5vZGUqIG5vZGUg
PSAmc3RhcnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsK
ICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAg
IGF1dG8mIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSk7CiAgICAg
ICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYW5jaG9yLmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oeF9hcHBsZV9kYXRhX2RldGVjdG9yc0F0dHIpLCAidHJ1ZSIpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlu
a3NGcm9tQW5jaG9yKGFuY2hvcik7Ci0gICAgICAgICAgICBkaWRNb2RpZnlET00gPSB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZSA9PSAmZW5kTm9kZSkgewpAQCAt
MjkxLDcgKzI4OSw2IEBAIHN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5n
RERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsCiAgICAgICAgICAgICAgICAg
aWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGFuY2hvci5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNBdHRyKSwgInRydWUiKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlu
a3NGcm9tQW5jaG9yKGFuY2hvcik7Ci0gICAgICAgICAgICAgICAgZGlkTW9kaWZ5RE9NID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpA
QCAtNTUzLDI5ICs1NTAsMTIgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVu
dEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZSwgRGEKICAgICAgICAgaWYg
KHJlc3VsdFJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ci0gICAgICAgIC8vIFN0b3JlIHRoZSByYW5nZSBib3VuZGFyaWVzIGFzIFBvc2l0aW9uLCBiZWNh
dXNlIHRoZSBET00gY291bGQgY2hhbmdlIGlmIHdlIGZpbmQKLSAgICAgICAgLy8gb2xkIGRhdGEg
ZGV0ZWN0b3IgbGluay4KLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxQb3NpdGlvbiwgUG9zaXRp
b24+PiByYW5nZUJvdW5kYXJpZXM7Ci0gICAgICAgIHJhbmdlQm91bmRhcmllcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHJlc3VsdFJhbmdlcy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHJh
bmdlIDogcmVzdWx0UmFuZ2VzKQotICAgICAgICAgICAgcmFuZ2VCb3VuZGFyaWVzLnVuY2hlY2tl
ZEFwcGVuZCh7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCksIGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpIH0pOwotCiAgICAgICAgIE5TU3RyaW5n
ICppZGVudGlmaWVyID0gZGF0YURldGVjdG9yU3RyaW5nRm9yUGF0aChpbmRleFBhdGhzW3Jlc3Vs
dEluZGV4XS5nZXQoKSk7CiAgICAgICAgIE5TU3RyaW5nICpjb3JyZXNwb25kaW5nVVJMID0gY29u
c3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KGNvcmVSZXN1bHQsIGlkZW50aWZpZXIsIHJlZmVyZW5j
ZURhdGUsIChOU1RpbWVab25lICopdHouZ2V0KCksIHR5cGVzKTsKLSAgICAgICAgYm9vbCBkaWRN
b2RpZnlET00gPSBmYWxzZTsKIAotICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2Vh
cmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5maXJzdCgpLnN0
YXJ0LmNvbnRhaW5lciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVyLCBkaWRNb2Rp
ZnlET00pKQorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNoRm9yTGlua1Jl
bW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5maXJzdCgpLnN0YXJ0LmNvbnRhaW5l
ciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVyKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGRpZE1vZGlmeURPTSkgewotICAgICAgICAgICAg
Ly8gSWYgdGhlIERPTSB3YXMgbW9kaWZpZWQgYmVjYXVzZSBzb21lIG9sZCBsaW5rcyB3ZXJlIHJl
bW92ZWQsCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlY3JlYXRlIHRoZSByYW5nZXMgYmVj
YXVzZSB0aGV5IGNvdWxkIG5vIGxvbmdlciBiZSB2YWxpZC4KLSAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHRSYW5nZXMuc2l6ZSgpID09IHJhbmdlQm91bmRhcmllcy5zaXplKCkpOwotICAgICAgICAg
ICAgcmVzdWx0UmFuZ2VzLnNocmluaygwKTsgLy8gS2VlcCBjYXBhY2l0eSBhcyB3ZSBhcmUgZ29p
bmcgdG8gcmVwb3B1bGF0ZSB0aGUgVmVjdG9yIHJpZ2h0IGF3YXkgd2l0aCB0aGUgc2FtZSBudW1i
ZXIgb2YgaXRlbXMuCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlQm91bmRhcnkgOiByYW5n
ZUJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnVuY2hlY2tlZEFwcGVu
ZCh7ICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LmZpcnN0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KHJhbmdlQm91bmRhcnkuc2Vjb25kKSB9KTsKLSAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHF1ZXJ5UmFuZ2UuZW5kOwogICAgICAg
ICBCT09MIHNob3VsZFVzZUxpZ2h0TGlua3MgPSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9E
RFNob3VsZFVzZUxpZ2h0TGlua3NGb3JSZXN1bHQoY29yZVJlc3VsdCwgW2luZGV4UGF0aHNbcmVz
dWx0SW5kZXhdIGxlbmd0aF0gPiAxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IGJjY2IwZjAwODI3YjllYTQ0NzQ5ZjcwZDlk
NDVkODZiZDA5YTUzNmMuLjNjMTIzMTlmYWIwODY3NTk1OWU1M2NkOGU3OWFiMzQzZDExYTdiZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1
cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAu
bW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNpbXBvcnQg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgog
I2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKICNpbXBv
cnQgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjc5LDE1ICsyNzgsMTUgQEAgT3B0aW9uYWw8c3Rk
Ojp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpy
YW5nZUZvclNlbGUKICAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNOdWxsKCkgfHwgcGFyYWdyYXBo
RW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBs
ZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0p
OwotICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpt
YWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxl
Y3Rpb25FbmQpIH0pOworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3Rl
ckNvdW50KCptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KSk7
CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KCptYWtl
U2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpOwogICAgIE5TUmFuZ2Ug
cmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rp
b25DaGFyYWN0ZXJDb3VudCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5n
ZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsKKyAgICBhdXRvIGZ1
bGxDaGFyYWN0ZXJSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFn
cmFwaEVuZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3Rl
clJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhbYWxsb2NSVkl0
ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VU
b1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAotICAgIHJldHVybiB7IHsgcmVzb2x2ZUNo
YXJhY3RlclJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0g
fTsKKyAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShmdWxsQ2hhcmFjdGVyUmFu
Z2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKIApAQCAtMzI4LDI5ICszMjcsMjMgQEAgT3B0aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVS
YW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGUKICAg
ICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwogCiAgICAg
ICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBh
cmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICAgICAgYXV0
byBwYXJhZ3JhcGhFbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxlY3Rp
b25FbmQpKTsKLSAgICAgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCB8fCAhcGFyYWdyYXBoRW5kKQor
ICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCkpOworICAg
ICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0geyB7ICpwYXJhZ3JhcGhTdGFy
dCwgKnBhcmFncmFwaEVuZCB9IH07Ci0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFu
Z2UoY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICptYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb25TdGFydCkgfSksCi0gICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25F
bmQpIH0pKTsKLSAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAgc2VsZWN0aW9u
UmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGZ1bGxD
aGFyYWN0ZXJSYW5nZS0+c3RhcnQsIHNlbGVjdGlvblN0YXJ0KSksCisgICAgICAgICAgICBjaGFy
YWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQp
KSk7CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShm
dWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBwb3NpdGlvbikpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBv
c2l0aW9uIH07CiAgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5k
VXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSk7CiAgICAg
ICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOwog
CiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3Rl
cnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAgYXV0byBleHBh
bmRlZFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0
aW9uLCAyNTApOwotICAgICAgICBpZiAoIWV4cGFuZGVkUmFuZ2UpCi0gICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHsgKmV4cGFu
ZGVkUmFuZ2UgfTsKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFy
b3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwogCiAgICAgICAgIHNlbGVj
dGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4
ID0gY2hhcmFjdGVyQ291bnQoeyBmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCAqbWFrZUJvdW5k
YXJ5UG9pbnQocG9zaXRpb24pIH0pOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50
KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgcG9zaXRpb24pKTsK
ICAgICB9CiAKICAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFz
cygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5p
bF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBl
ZWZlOGZkOTUxY2NmYTRlYjY2MTgyN2Q1OGU2OWVhNTliNTg2YjdiLi5iMWYxYTg2NTVkYmRhMjUx
YjA5Y2NkZWZjNTI2MDg2NGQzNDFjYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRWRpdG9yQ29jb2EubW0KQEAgLTk0LDEwICs5NCwxMiBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFz
dGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9y
PFN0cgogICAgIG91dFR5cGVzLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBl
KCkpOwogICAgIG91dERhdGEuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhIHsgZWxlbWVudC5k
b2N1bWVudCgpLm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNo
YXJlZEJ1ZmZlcigpKTsKIAotICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZl
OjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSkuZ2V0KCkpKSB7Ci0gICAgICAg
IGlmIChhdXRvIHdlYkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9u
KCkpIHsKLSAgICAgICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7
Ci0gICAgICAgICAgICBvdXREYXRhLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZSh3ZWJBcmNo
aXZlRGF0YS5nZXQoKSkpOworICAgIGlmIChlbGVtZW50UmFuZ2UpIHsKKyAgICAgICAgaWYgKGF1
dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgqZWxlbWVudFJhbmdlKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBhcmNoaXZlLT5yYXdEYXRhUmVw
cmVzZW50YXRpb24oKSkgeworICAgICAgICAgICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNo
aXZlUGJvYXJkVHlwZSk7CisgICAgICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hhcmVkQnVm
ZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggNTFhZTIzNDBjZTM3OTNlNzExY2E4ZmQyZDk3
NTQ4NDI4OTIyOTEzOC4uMzRhYTdhYmYzM2Y3NDRkZTA3ZDhlOTllNmQ1ZDNmNWVjNDIwZTJkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVy
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVh
ZGVyQ29jb2EubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQg
IlB1YmxpY1VSTE1hbmFnZXIuaCIKICNpbXBvcnQgIlF1aXJrcy5oIgorI2ltcG9ydCAiUmFuZ2Uu
aCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgpAQCAtNjY4LDcgKzY2
OSw3IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcm
IHRleHQpCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2Uo
Y29udGV4dCksIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKSk7
CisgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBbdGV4dCBw
cmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOwogCiAgICAgbWFkZUZyYWdt
ZW50RnJvbVBsYWluVGV4dCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCmluZGV4IGQ2MDlm
MjJjODRmMGNmNzk4MDBhYTkzZDRiMjBiZjgyZDQ4MDI1MjMuLjdjYjY1OTRmYWQ3OGFmODkwMzJm
ZGQ1ZGU4NmY4ZGE0NTVmZTFmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Z3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Z3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgV2ViQ29u
dGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFh
bGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIHRleHQpKTsK
KyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQsIHRleHQpKTsK
IAogICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOwogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9T
LmNwcAppbmRleCA4YWM3Njk0MDIwOTM1MGZmNDNhZWMxNDRkMzNhZDYxNjAxMjZlNDM1Li5lYzgw
YmJhYzg0N2I5NzQwNWJlYjU1NTljYzJhNTEwZDQxNzA4YTM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAtMzIsNyArMzIs
NiBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiU21hcnRSZXBsYWNlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVVuaXRzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xp
YndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRp
dG9yTGliV1BFLmNwcAppbmRleCAwYjdjMjYyNTNhMDA4MmUzYzU0YWVlZmVhMDYxNjMyNGU2MjQ4
YzdhLi45ZGQ0MWQ2MzY2NTEyZmQzODU5MzdhNzYwOGJkM2ZjOWI1YjkwZjYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0eXBlcy5jb250YWlucygi
dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0
cnVlOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hhcnNl
dD11dGYtOCIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFuZ2Us
IHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpOwogICAg
IH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNGYyNzJlZWU4MTM4MTQwYzli
MzY1Y2EyMTE3M2Y2YjM0MDk0ZjIxZi4uODc2MTIwYmIwOWIxMmUwOWU0ZGVjYTU4ZTU1NGQzMDI3
MDFlZjQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC04NiwxNiArODYsMTQgQEAgT3B0aW9uYWw8c3RkOjp0dXBs
ZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CiAK
ICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBw
YXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBhdXRvIHBhcmFn
cmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCkp
OwotICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICBhdXRvIHBh
cmFncmFwaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICBpZiAoIXBhcmFncmFw
aFJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzZWxlY3Rp
b25SYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0
KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKLSAgICBhdXRvIHBhcmFncmFw
aFJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQgfTsK
KyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFy
dCwgc2VsZWN0aW9uRW5kKTsKIAogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKLSAg
ICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSksIGNoYXJhY3RlclJhbmdlKHBh
cmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKKyAgICB0b2tlblJhbmdl
KHBsYWluVGV4dCgqcGFyYWdyYXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZSgqcGFyYWdyYXBoUmFu
Z2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlvbnMpOwogCiAgICAgcmV0dXJuIHsgeyAqc2VsZWN0
ZWRSYW5nZSwgb3B0aW9ucyB9IH07CiB9CkBAIC0xMzMsMTIgKzEzMSwxMSBAQCBPcHRpb25hbDxz
dGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6
OnJhbmdlQXRIaXRUZQogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBmdWxsQ2hhcmFjdGVyU3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgYXV0
byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgIGlm
ICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJvdW5kYXJ5KQorICAgIGF1dG8gcmFu
Z2VUb1Bvc2l0aW9uID0gbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnQs
IHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9Qb3NpdGlvbikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFy
YWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVyU3RhcnQsICpwb3NpdGlvbkJvdW5kYXJ5IH0pLCAw
KTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQo
KnJhbmdlVG9Qb3NpdGlvbiksIDApOwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsK
ICAgICBhdXRvIGV4dHJhY3RlZFJhbmdlID0gdG9rZW5SYW5nZShwbGFpblRleHQoKmZ1bGxDaGFy
YWN0ZXJSYW5nZSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCBiYTMxYzE4NzczMjM0YjlhZDkzOWFkMGQzMzE5MzE4
YzYyZDhiM2JkLi5lNzMyNWM1MjRhZmZhYjRjNmE3YWQyMGVjNDJhY2M2MDJmZTdmNTEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC00NSw3ICs0NSw2IEBACiAj
aW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRlZ3kuaCIKICNp
bXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQg
IlJlbmRlckJsb2NrLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZDU3
NGE0OTc3YTg3YTRiMWQyMWViYzIyODU0NjE0ZjU3YTg5MjdjZC4uYjYwMjUyNWQyZDMxNGVjN2Mz
NWRlYWJlNGQyN2I0MDE1MjVlYTJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAt
NDUxLDEyICs0NTEsOCBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVk
VGV4dFJlc3BlY3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0KQogICAgICAgICAgICAgYmVoYXZp
b3IgPSBUZXh0SXRlcmF0b3JCZWhhdmVzQXNJZk5vZGVzRm9sbG93aW5nOwogICAgIH0KIAotICAg
IGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRv
IGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91
bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQot
ICAgIHJldHVybiBwbGFpblRleHQoeyBXVEZNb3ZlKCpzdGFydEJvdW5kYXJ5KSwgV1RGTW92ZSgq
ZW5kQm91bmRhcnkpIH0sIGJlaGF2aW9yKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UsIGJl
aGF2aW9yKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4dCkKQEAgLTkz
OCw5ICs5MzQsMTAgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICByZXR1cm4gYWNjdW11
bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1
YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEFu
bm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIENvbnZlcnRCbG9ja3NUb0lubGluZXMgY29u
dmVydEJsb2Nrc1RvSW5saW5lcywgUmVzb2x2ZVVSTHMgdXJsc1RvUmVzbHZlKQorU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUs
IENvbnZlcnRCbG9ja3NUb0lubGluZXMgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmVzb2x2ZVVS
THMgdXJsc1RvUmVzbHZlKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZUludGVybmFsKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRp
b24oKSwgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywKKyAg
ICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2UuZW5kKSwKKyAgICAgICAgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFs
aXplQ29tcG9zZWRUcmVlOjpObywKICAgICAgICAgYW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMsIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlOjpLZWVwLCBNU09MaXN0
TW9kZTo6RG9Ob3RQcmVzZXJ2ZSk7CiB9CiAKQEAgLTExMTYsMjAgKzExMTMsMTYgQEAgYm9vbCBp
c1BsYWluVGV4dE1hcmt1cChOb2RlKiBub2RlKQogICAgIHJldHVybiBpc1RhYlNwYW5UZXh0Tm9k
ZShmaXJzdENoaWxkLT5maXJzdENoaWxkKCkpICYmIHNlY29uZENoaWxkLT5pc1RleHROb2RlKCk7
CiB9CiAKLXN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKGNvbnN0IFJhbmdlJiBj
b250ZXh0KQorc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05ld2xpbmUoY29uc3QgU2ltcGxl
UmFuZ2UmIGNvbnRleHQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uKGNvbnRleHQu
c3RhcnRQb3NpdGlvbigpKTsKLSAgICBOb2RlKiBjb250YWluZXIgPSBwb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFp
bmVyLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29u
dGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOworICAgIGF1dG8g
Y29udGFpbmVyID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihj
b250ZXh0LnN0YXJ0KSkuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7CisgICAgcmV0
dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXItPnJlbmRlcmVyKCkgJiYgY29udGFpbmVyLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwogfQogCi1SZWY8RG9jdW1lbnRGcmFn
bWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5n
JiB0ZXh0KQorUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29u
c3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKLSAgICBSZWY8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CisgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
OwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50
OwpAQCAtMTE2NSwxNCArMTE1OCwxNCBAQCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIH0K
IAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxpbmUgYnJlYWtz
IHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xv
c2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOworICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVu
Y2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250ZXh0KS0+Zmlyc3ROb2RlKCkpOwogICAg
IEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVudD4oYmxvY2tOb2RlKTsKICAgICBib29s
IHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9ja05vZGUKICAgICAgICAgJiYgYmxvY2tO
b2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlU
YWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAgICAgICAmJiBi
bG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woY29udGV4
dC5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQ
b3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCkpOworICAg
IGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBs
aXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7CiAgICAgc2l6ZV90
IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAppbmRleCA4NjU2
N2Y0NTc4MGFhYmE1MWIzZWQ4MmEwOWE1MWUyMjAyNmEwMjZiLi5mZmEzMjdlOWVlY2U1NWRlNTdm
MjQ0Y2U4YjVhYTJmZWVkOGI2NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKQEAgLTQ0LDEx
ICs0NCwxMiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgTm9kZTsK
IGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUHJlc2VudGF0aW9uU2l6ZTsKIGNsYXNzIFF1YWxpZmllZE5h
bWU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK3N0cnVjdCBQcmVz
ZW50YXRpb25TaXplOworc3RydWN0IFNpbXBsZVJhbmdlOworCiB2b2lkIHJlcGxhY2VTdWJyZXNv
dXJjZVVSTHMoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIEhhc2hNYXA8QXRvbVN0cmluZywgQXRv
bVN0cmluZz4mJik7CiB2b2lkIHJlbW92ZVN1YnJlc291cmNlVVJMQXR0cmlidXRlcyhSZWY8RG9j
dW1lbnRGcmFnbWVudD4mJiwgV1RGOjpGdW5jdGlvbjxib29sKGNvbnN0IFVSTCYpPiBzaG91bGRS
ZW1vdmVVUkwpOwogCkBAIC01Nyw3ICs1OCw3IEBAIGVudW0gY2xhc3MgTVNPTGlzdFF1aXJrcyA6
IGJvb2wgeyBDaGVja0lmTmVlZGVkLCBEaXNhYmxlZCB9OwogU3RyaW5nIHNhbml0aXplTWFya3Vw
KGNvbnN0IFN0cmluZyYsIE1TT0xpc3RRdWlya3MgPSBNU09MaXN0UXVpcmtzOjpEaXNhYmxlZCwg
T3B0aW9uYWw8V1RGOjpGdW5jdGlvbjx2b2lkKERvY3VtZW50RnJhZ21lbnQmKT4+IGZyYWdtZW50
U2FuaXRpemVyID0gV1RGOjpudWxsb3B0KTsKIFN0cmluZyBzYW5pdGl6ZWRNYXJrdXBGb3JGcmFn
bWVudEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIERvY3VtZW50JiwgTVNPTGlz
dFF1aXJrcywgY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1hcmt1cCk7CiAKLVdFQkNPUkVfRVhQT1JU
IFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOworV0VCQ09SRV9FWFBPUlQgUmVmPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgdGV4dCk7CiBXRUJDT1JFX0VYUE9SVCBSZWY8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJr
dXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2Ny
aXB0aW5nQ29udGVudCk7CiBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IGNyZWF0
ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgbWFya3Vw
LCBQYXJzZXJDb250ZW50UG9saWN5KTsKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVG
cmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSk7CkBAIC03Miw3ICs3Myw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudChDb250YWlu
ZXJOb2RlJiwgUmVmPERvY3VtZW50RnJhZ21lCiBlbnVtIGNsYXNzIFJlc29sdmVVUkxzIDogdWlu
dDhfdCB7IE5vLCBZZXMsIFllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5IH07CiBl
bnVtIGNsYXNzIENvbnZlcnRCbG9ja3NUb0lubGluZXMgOiB1aW50OF90IHsgTm8sIFllcyB9Owog
ZW51bSBjbGFzcyBTZXJpYWxpemVDb21wb3NlZFRyZWUgOiB1aW50OF90IHsgTm8sIFllcyB9Owot
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNl
KGNvbnN0IFJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0ZUZvckludGVy
Y2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9ja3NUb0lubGlu
ZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJM
czo6Tm8pOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyLCBB
bm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZl
cnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywgUmVzb2x2ZVVS
THMgPSBSZXNvbHZlVVJMczo6Tm8pOwogU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZXNvbHZlVVJMcyA9IFJlc29sdmVV
UkxzOjpObywgU2VyaWFsaXplQ29tcG9zZWRUcmVlID0gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
bywgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyKTsKIAogZW51bSBjbGFzcyBTZXJpYWxpemVkTm9k
ZXMgOiB1aW50OF90IHsgU3VidHJlZUluY2x1ZGluZ05vZGUsIFN1YnRyZWVzT2ZDaGlsZHJlbiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJv
bHNCdXR0b25FbGVtZW50TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L21hYy9J
bWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKaW5kZXggNmQ4MDFhNjE1ZjExNmI0ZDU5
NjI3ZTI4OWFhNjNlZDE2ZjZjZWFlYy4uNTg0ZWM2M2ZiMWJhNzQ4ZTNkZjlhOWM3NjQzZmFlZTdm
N2JlNDE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdl
Q29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCkBAIC0zNSw3ICszNSw2
IEBACiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVu
dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2Nm
L0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXggMDFhYjkxN2QwZGM5NzhjMzFmZWZmN2E5YTA5MGNk
MDJiZjFkZDhkNi4uNjgzMDMxNjg0MzM1ZDU5NjlkYmNiNDZlMTQ0ZmM5OTkzN2U3NWYxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJj
aGl2ZS5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXpl
ZEF0dGFjaG1lbnREYXRhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ1NCwxOSArNDUz
LDE2IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUo
RnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBjcmVhdGUobWFpblJlc291cmNlLnJlbGVhc2VOb25O
dWxsKCksIGRvY3VtZW50TG9hZGVyLT5zdWJyZXNvdXJjZXMoKSwgV1RGTW92ZShzdWJmcmFtZUFy
Y2hpdmVzKSk7CiB9CiAKLVJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZl
OjpjcmVhdGUoUmFuZ2UqIHJhbmdlKQorUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgIGF1dG8mIGRvY3Vt
ZW50ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1
bWVudCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKICAgICBhdXRvKiBmcmFt
ZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIu
IElzIHRoYXQgcmlnaHQ/CiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcg
bWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKGRvY3VtZW50KSArIHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKCpyYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlOjpZZXMpOworICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVT
dHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UocmFu
Z2UsICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKTsKICAgICByZXR1cm4g
Y3JlYXRlKG1hcmt1cFN0cmluZywgKmZyYW1lLCBub2RlTGlzdCwgbnVsbHB0cik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hp
dmUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
aAppbmRleCBiNTFjZjYxNmJmMDgyZTI5NDA5YjQ0MjFhNDNjYjcxMTE0ODBhOTg5Li42N2FmYTgz
ZGM3YTliZjIyZjhlODk2NTFlZTllYzQzOTMyZjA2NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oCkBAIC0zNSw3ICszNSw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBOb2RlOwotY2xh
c3MgUmFuZ2U7CisKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgTGVnYWN5V2ViQXJjaGl2
ZSBmaW5hbCA6IHB1YmxpYyBBcmNoaXZlIHsKIHB1YmxpYzoKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4g
Y3JlYXRlKE5vZGUmLCBXVEY6OkZ1bmN0aW9uPGJvb2woRnJhbWUmKT4mJiBmcmFtZUZpbHRlciA9
IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBjcmVhdGUoRnJhbWUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IGNyZWF0ZUZyb21TZWxlY3Rpb24oRnJhbWUqKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShSYW5nZSopOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiByYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uY3BwCmluZGV4IGRmMTM1YWY0MzlmZDdlNzY0MTc0N2JiNzM2N2M4NmI4ZGM1ZmY3MmMuLjU5
ZWE0ZmJmN2U5ZTU1MmQyOTc3MWJiMjVmMDY1ZGUxMDNjZGIxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6
YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogCiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNl
bGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgc2VsZWN0
aW9uLm1vdmVUbygmcmFuZ2UpOworICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBs
ZVJhbmdlIHsgcmFuZ2UgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1Niw3ICsz
NTYsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBub3JtYWxp
emVkUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IHJhbmdlIGNvbnRhaW5zIHRoZSBvcmlnaW5h
bCByYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKCZyYW5nZSk7CisgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJhbmdlIH0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTM2Niw3ICszNjYs
NyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAg
ICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5E
LCAqbm9ybWFsaXplZFJhbmdlKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdlLgotICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgKm5vcm1hbGl6
ZWRSYW5nZSB9KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IHJhbmdlcyBpbnRlcnNlY3QuCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhub3Jt
YWxpemVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSwgRE9XTlNU
UkVBTSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOThhYWU4
ZDc1NmQyMmQ4NzA4YmQ3YTYzY2VhZGI3ZWE1YzFlN2QuLjU2NmQ1ZDQ2OTMwOWViOGM2MzM1ZTAy
YTJlYzE3MGIxYzYyMTFhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRl
ICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlByb21pc2VkQXR0YWNobWVudEluZm8uaCIKKyNpbmNs
dWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0y
MzksNyArMjQwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRpb24o
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGlmICghbV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlcnMuaXNFbXB0eSgpICYmIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSAmJiB0
cnlUb1VwZGF0ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVycyhkcmFnRGF0YSkpIHsKICAgICAgICAg
bV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMuY2xlYXIoKTsKLSAgICAgICAgbV9kcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlclJhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgICAgICBtX2RvY3VtZW50VW5kZXJNb3Vz
ZSA9IG51bGxwdHI7CiAgICAgICAgIGNsZWFyRHJhZ0NhcmV0KCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtNjMzLDcgKzYzNCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERy
YWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBhdXRvIGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4
dCk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5n
ZSwgdGV4dCk7CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgp
LT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqcmFu
Z2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTg1Niw5ICs4NTcs
MTAgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogCiBzdGF0aWMg
dm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLT5z
ZWxlY3ROb2RlKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0p
KTsKKyAgICBpZiAoYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKSB7Cisg
ICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVtZW50KSkK
KyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oKnJhbmdlKTsKKyAg
ICB9CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhUTUxEcmFnKGNvbnN0IEludFBv
aW50JiBtb3VzZURyYWdnZWRQb2ludCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0
IEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wgaXNMaW5rSW1hZ2UpCkBAIC0xMzczLDcg
KzEzNzUsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpkb1N5c3RlbURyYWcoRHJhZ0ltYWdlIGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0xvYywgY29ucwogCiB2b2lkIERyYWdDb250cm9sbGVy
OjpyZW1vdmVBbGxEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMoKQogewotICAgIG1fZHJvcHBlZElt
YWdlUGxhY2Vob2xkZXJSYW5nZSA9IG51bGxwdHI7CisgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBz
dGQ6OmV4Y2hhbmdlKG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzLCB7IH0pKSB7CiAgICAgICAg
IGlmIChwbGFjZWhvbGRlci0+aXNDb25uZWN0ZWQoKSkKICAgICAgICAgICAgIHBsYWNlaG9sZGVy
LT5yZW1vdmUoKTsKQEAgLTE0NTUsMTMgKzE0NTcsMTMgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6
aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6
ZT4KICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpk
b2N1bWVudCwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlBy
ZXZlbnROZXN0aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIH0sIEVk
aXRBY3Rpb246Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwogCi0gICAg
YXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IGNvbW1hbmQtPmluc2VydGVkQ29udGVudFJhbmdl
KCk7CisgICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb21t
YW5kLT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpKTsKICAgICBpZiAoIWluc2VydGVkQ29udGVudFJh
bmdlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBjb250YWluZXIgPSBtYWtlUmVmUHRyKGluc2VydGVkQ29udGVudFJh
bmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKKyAgICBhdXRvIGNvbnRhaW5lciA9IGNv
bW1vbkluY2x1c2l2ZUFuY2VzdG9yKCppbnNlcnRlZENvbnRlbnRSYW5nZSk7CiAgICAgaWYgKCFp
czxDb250YWluZXJOb2RlPihjb250YWluZXIpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNDY5LDcgKzE0NzEsNyBAQCB2b2lkIERyYWdDb250
cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3Rv
cjxJbnRTaXplPgogCiAgICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gcGxhY2Vob2xk
ZXJzOwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBkZXNjZW5kYW50c09mVHlwZTxIVE1M
SW1hZ2VFbGVtZW50Pihkb3duY2FzdDxDb250YWluZXJOb2RlPigqY29udGFpbmVyKSkpIHsKLSAg
ICAgICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGluc2VydGVkQ29udGVudFJhbmdlLT5pbnRlcnNl
Y3RzTm9kZShwbGFjZWhvbGRlcik7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVh
dGVMaXZlUmFuZ2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vo
b2xkZXIpOwogICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGlu
dGVyc2VjdHNOb2RlLnJldHVyblZhbHVlKCkpCiAgICAgICAgICAgICBwbGFjZWhvbGRlcnMuYXBw
ZW5kKHBsYWNlaG9sZGVyKTsKICAgICB9CkBAIC0xNDkzLDcgKzE0OTUsNyBAQCB2b2lkIERyYWdD
b250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZl
Y3RvcjxJbnRTaXplPgogICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IFdURk1v
dmUoaW5zZXJ0ZWRDb250ZW50UmFuZ2UpOwogCiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFy
KCk7Ci0gICAgY2FyZXRDb250cm9sbGVyLnNldENhcmV0UG9zaXRpb24obV9kcm9wcGVkSW1hZ2VQ
bGFjZWhvbGRlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGNhcmV0Q29udHJvbGxlci5z
ZXRDYXJldFBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2Ryb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyUmFuZ2UtPnN0YXJ0KSk7CiB9CiAKIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmZp
bmFsaXplRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIoSFRNTEltYWdlRWxlbWVudCYgcGxhY2Vob2xk
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggOTIyNGFiMjA2Y2RmZWJi
NTNmMTFjNzhhM2VhZTIwODEzY2ZkZDI2Yy4uZTMwMGQzMjhkNTc5ZWRiMTcxZjAzZTIwMDhmMTRk
OGI3ZWJmNjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSA8
d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OSw3ICs5MCw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYWNlRHJhZ0NhcmV0KGNvbnN0IEludFBvaW50
Jik7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiYgZHJvcHBlZElt
YWdlUGxhY2Vob2xkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRl
cnM7IH0KLSAgICBjb25zdCBSZWZQdHI8UmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOyB9Cisg
ICAgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOyB9CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmFsaXplRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIo
SFRNTEltYWdlRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0RHJvcHBl
ZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4mIGltYWdlU2l6
ZXMpOwpAQCAtMTYxLDcgKzE2Miw3IEBAIHByaXZhdGU6CiAgICAgVVJMIG1fZHJhZ2dpbmdJbWFn
ZVVSTDsKICAgICBib29sIG1faXNQZXJmb3JtaW5nRHJvcCB7IGZhbHNlIH07CiAgICAgVmVjdG9y
PFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnM7Ci0gICAg
UmVmUHRyPFJhbmdlPiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7CisgICAgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsKIH07CiAKIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaXNEcmFnZ2FibGVMaW5rKGNvbnN0IEVsZW1lbnQmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1ZWRhODMwZWNmNDY1ZDBkZDBiMjQ3ZmFl
MDAyMGM1ZTI1MmViOGUwLi45Njc1NTgxZjkzZjhkMjFlODcwNDA3ODhlNmQ5YWYwMTRiNTMzNTAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02NzUsMTEgKzY3NSwxMCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogCiBzdGF0aWMgdWludDY0X3QgdGV4dERpc3RhbmNl
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRv
IHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7Ci0gICAgYXV0byBlbmRC
b3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZCk7Ci0gICAgaWYgKCFzdGFydEJvdW5kYXJ5
IHx8ICFlbmRCb3VuZGFyeSkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0
LCBlbmQpOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
aGFyYWN0ZXJDb3VudCh7ICpzdGFydEJvdW5kYXJ5LCAqZW5kQm91bmRhcnkgfSwgVGV4dEl0ZXJh
dG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVy
biBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzNTUxYjRkNjJiODQ2MGRiYzYxNzRi
N2RlNWYyYjlmMzgzYWYwNzViLi42NDEwNTQ4ZDQyMjIzNzdjMTQxMzg2MWNiNWQ5MDI0MjUzZGVk
NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtODE5LDI0ICs4MTksMTkgQEAgRG9jdW1lbnQq
IEZyYW1lOjpkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogUmVmUHRyPFJh
bmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKIHsK
ICAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7
Ci0gICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
OwotICAgIGlmICghcG9zaXRpb25Cb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBhdXRvIGNvbnRhaW5lclRleHQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmNvbnRh
aW5lclRleHQoKTsKICAgICBpZiAoIWNvbnRhaW5lclRleHQgfHwgIWNvbnRhaW5lclRleHQtPnJl
bmRlcmVyKCkgfHwgY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS51c2VyU2VsZWN0
KCkgPT0gVXNlclNlbGVjdDo6Tm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBp
ZiAoYXV0byBwcmV2aW91cyA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnByZXZpb3VzKCkp
KSB7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsg
KnByZXZpb3VzLCAqcG9zaXRpb25Cb3VuZGFyeSB9OwotICAgICAgICBpZiAoZWRpdG9yKCkuZmly
c3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2lu
dCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHByZXZpb3VzQ2hhcmFjdGVy
UmFuZ2UpOworICAgIGlmIChhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UocG9zaXRpb24ucHJldmlvdXMoKSwgcG9zaXRpb24pKSB7CisgICAgICAgIGlmIChlZGl0
b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMo
ZnJhbWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpwcmV2aW91
c0NoYXJhY3RlclJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBuZXh0ID0gbWFrZUJvdW5k
YXJ5UG9pbnQocG9zaXRpb24ubmV4dCgpKSkgewotICAgICAgICBhdXRvIG5leHRDaGFyYWN0ZXJS
YW5nZSA9IFNpbXBsZVJhbmdlIHsgKnBvc2l0aW9uQm91bmRhcnksICpuZXh0IH07Ci0gICAgICAg
IGlmIChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRh
aW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShuZXh0
Q2hhcmFjdGVyUmFuZ2UpOworICAgIGlmIChhdXRvIG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShwb3NpdGlvbiwgcG9zaXRpb24ubmV4dCgpKSkgeworICAgICAgICBpZiAoZWRp
dG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm5leHRDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJh
bWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpuZXh0Q2hhcmFj
dGVyUmFuZ2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
aW5kZXggMGUyYTc3YjhkYzM1NWU2M2UzNDk1YTJiMTg5MmM3NTc1YWE4NDhlZi4uODA1ZjNkMWQ4
OTY1YWJhNTE5NDY2MDNlNzRjOTkxYTZkMjkzZDI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC05
OCw2ICs5OCw3IEBACiAjaW5jbHVkZSAiUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiUG9pbnRlckxvY2tDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2Vy
LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJEZXNjZW5kYW50SXRlcmF0
b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgpAQCAtNzExLDEyICs3MTIsMTAgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBEaWRXcmFwKiBkaWRXcmEK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFu
Z2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpbnQgbGltaXQs
IFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgbWF0Y2hSYW5nZXMsIGludCYgaW5kZXhGb3JTZWxlY3Rp
b24pCithdXRvIFBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmlu
ZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQpIC0+IE1hdGNoaW5nUmFuZ2VzCiB7CiAg
ICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByZXN1bHRSYW5nZXM7CiAKLSAgICBpbmRleEZvclNlbGVj
dGlvbiA9IDA7Ci0KICAgICBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUq
IGZyYW1lV2l0aFNlbGVjdGlvbiA9IG51bGxwdHI7CiAgICAgZG8gewpAQCAtNzI3LDEwICs3MjYs
MTEgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKICAg
ICBpZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4Rm9yU2VsZWN0aW9uOwog
CiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewotICAgICAgICBpbmRleEZvclNlbGVjdGlv
biA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CiAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkgewpA
QCAtNzU2LDM1ICs3NTYsMzcgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMo
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgICAg
IGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHJhbmdlIDog
cmVzdWx0UmFuZ2VzKQotICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlKSk7CisgICAgaWYgKCFpbmRleEZvclNlbGVjdGlvbikKKyAgICAgICAgaW5kZXhGb3JT
ZWxlY3Rpb24gPSByZXN1bHRSYW5nZXMuc2l6ZSgpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShy
ZXN1bHRSYW5nZXMpLCAqaW5kZXhGb3JTZWxlY3Rpb24gfTsKIH0KIAotUmVmUHRyPFJhbmdlPiBQ
YWdlOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNl
UmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gUGFnZTo6
cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAo
dGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBDYW5XcmFwIGNhbldyYXAgPSBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91
bmQpID8gQ2FuV3JhcDo6WWVzIDogQ2FuV3JhcDo6Tm87Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVm
ZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkgOiAm
bWFpbkZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVu
Y2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1l
KCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlm
IChhdXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0
LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gbWFrZVNpbXBsZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSA6
IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQotICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJh
bmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFy
dEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJv
dW5kKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRSYW5nZTsKICAgICAgICAgZnJhbWUgPSBp
bmNyZW1lbnRGcmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSwgY2FuV3Jh
cCk7CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAv
LyBTZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhl
IHJlZmVyZW5jZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEg
Yml0IGFuZCBqdXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24uCiAgICAgaWYgKGNhbldyYXAg
PT0gQ2FuV3JhcDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIHJl
c3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1h
a2VTaW1wbGVSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0
YXJ0SW5TZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1
bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRp
dG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsICpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucyB8IFdy
YXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRS
YW5nZTsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiB1bnNpZ25lZCBQYWdlOjpmaW5kTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQsIFNo
b3VsZEhpZ2hsaWdodE1hdGNoZXMgc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlcywgU2hvdWxkTWFya01h
dGNoZXMgc2hvdWxkTWFya01hdGNoZXMpCkBAIC04NzksMjQgKzg4MSwyMiBAQCBzdGF0aWMgdm9p
ZCByZXBsYWNlUmFuZ2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxGaW5kUmVwbGFjZW1lbnRS
YW5nZT4mIHJhbmdlcwogICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgICAgICBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlbWVudFRleHQsIEVkaXRvcjo6
U2VsZWN0UmVwbGFjZW1lbnQ6OlllcywgRWRpdG9yOjpTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0
aW9uOjpJbnNlcnRSZXBsYWNlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXVpbnQzMl90
IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJh
bmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0
aW9uT25seSkKK3VpbnQzMl90IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0
b3I8U2ltcGxlUmFuZ2U+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRUZXh0LCBib29sIC8qc2VsZWN0aW9uT25seSovKQogewotICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hl
Y2tpbmcgd2hldGhlciBlYWNoIHJhbmdlIGJlaW5nIHJlcGxhY2VkIGlzCi0gICAgLy8gY29udGFp
bmVkIHdpdGhpbiBpdHMgZnJhbWUncyBzZWxlY3Rpb24uCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVj
dGlvbk9ubHkpOworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVj
dCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hlY2tpbmcgd2hldGhlciBlYWNoIHJhbmdl
IGJlaW5nIHJlcGxhY2VkIGlzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGZyYW1lJ3Mgc2VsZWN0aW9u
LgogCiAgICAgVmVjdG9yPEZpbmRSZXBsYWNlbWVudFJhbmdlPiByZXBsYWNlbWVudFJhbmdlczsK
ICAgICByZXBsYWNlbWVudFJhbmdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJhbmdlc1RvUmVw
bGFjZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFjZSkg
ewotICAgICAgICBhdXRvIGhpZ2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVS
b290KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8
fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigp
KSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgYXV0byBoaWdo
ZXN0Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwg
aGlnaGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwogICAgICAgICByZXBsYWNlbWVudFJhbmdl
cy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHJh
bmdlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOWQ4ZjhmYjUzZjgzYTY2NzUwMTYzZTlmMDM0NDIx
NzAxM2Y2YjM3Yy4uY2ZmYTZjOWI2MGI3MzNmODVhYjE2NDYwYTc1MTRmMzI1N2UzNzFjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKQEAgLTEyOSw3ICsxMjksNiBAQCBjbGFzcyBQbHVnaW5WaWV3QmFzZTsKIGNs
YXNzIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjsKIGNsYXNzIFBvaW50ZXJMb2NrQ29udHJvbGxl
cjsKIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwogY2xhc3MgUmVzb3VyY2VVc2FnZU92ZXJsYXk7CiBjbGFzcyBTY3JvbGxMYXRjaGluZ1N0
YXRlOwpAQCAtMTUyLDYgKzE1MSw4IEBAIGNsYXNzIFdlYkdMU3RhdGVUcmFja2VyOwogY2xhc3Mg
V2hlZWxFdmVudERlbHRhRmlsdGVyOwogY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOwogCitz
dHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7
CiB1c2luZyBTaGFyZWRTdHJpbmdIYXNoID0gdWludDMyX3Q7CiAKQEAgLTI4OSwxMiArMjkwLDEy
IEBAIHB1YmxpYzoKICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIERpZFdy
YXAqID0gbnVsbHB0cik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVJhbmdl
c1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB1aW50MzJfdCByZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFNp
bXBsZVJhbmdlPiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4
dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKICAgICBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwg
UmFuZ2UqLCBGaW5kT3B0aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiBzZWFyY2hSYW5nZSwgRmluZE9wdGlvbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
dW5zaWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbWFya0Fs
bE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBib29sIHNob3VsZEhp
Z2hsaWdodCwgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CkBAIC0zMDQsMTMgKzMwNSwxNiBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEJlZm9yZVByaW50RXZlbnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQWZ0ZXJQcmludEV2ZW50KCk7CiAK
LSAgICAvLyBGaW5kIGFsbCB0aGUgUmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KKyAgICAv
LyBGaW5kIGFsbCB0aGUgcmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KICAgICAvLyBVcG9u
IHJldHVybiwgaW5kZXhGb3JTZWxlY3Rpb24gd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoK
LSAgICAvLyAwIGlmIHRoZXJlIGlzIG5vIHVzZXIgc2VsZWN0aW9uCi0gICAgLy8gdGhlIGluZGV4
IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24KLSAgICAvLyBOb01h
dGNoQWZ0ZXJVc2VyU2VsZWN0aW9uIGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIg
dGhlIHVzZXIgc2VsZWN0aW9uLgotICAgIGVudW0geyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9u
ID0gLTEgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdl
cyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgaW50IG1heENvdW50LCBWZWN0b3I8UmVmUHRy
PFJhbmdlPj4mLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICAvLyAgMCBpZiB0aGVyZSBp
cyBubyB1c2VyIHNlbGVjdGlvbiwKKyAgICAvLyAgaW5kZXggb2YgdGhlIGZpcnN0IHJhbmdlIGFm
dGVyIHRoZSB1c2VyIHNlbGVjdGlvbiwKKyAgICAvLyAgc2l6ZSBvZiB0aGUgcmFuZ2UgdmVjdG9y
IGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0aW9uLgor
ICAgIHN0cnVjdCBNYXRjaGluZ1JhbmdlcyB7CisgICAgICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4g
cmFuZ2VzOworICAgICAgICB1bnNpZ25lZCBpbmRleEZvclNlbGVjdGlvbiB7IDAgfTsKKyAgICB9
OworICAgIFdFQkNPUkVfRVhQT1JUIE1hdGNoaW5nUmFuZ2VzIGZpbmRUZXh0TWF0Y2hlcyhjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4Q291bnQpOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IGRkOTQyZTkyNDhkNWQ3MjM1MmQ0YjViMjU5MGM4YjZh
ZmQ1ODc4MjAuLjllNjIxMDk2ZGEyZTJmN2JmNWFlNzBlOGEzZWRmYjRjNmQ4NTJhMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRp
YyBDb2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IEZyCiAgICAgYXV0byBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgPSBm
cmFtZS52aWV3KCkgPyBmcmFtZS52aWV3KCktPmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkgOiBD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0g
bnVsbHB0cjsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKKyAgICBhdXRv
IGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpOwogICAgIHdo
aWxlIChjb21tb25BbmNlc3RvcikgewogICAgICAgICBpZiAoaXM8UmVuZGVyRWxlbWVudD4oY29t
bW9uQW5jZXN0b3ItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICByZW5kZXJlciA9IGRvd25j
YXN0PFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigpKTsKQEAgLTMwOSw3
ICszMDksNyBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JE
YXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogCiAgICAgYm9vbCB1c2VCb3VuZGlu
Z1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzID0gZGF0YS5vcHRpb25zLmNv
bnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29u
dGVudEZvckNvbXBsZXhSYW5nZXMpOwogICAgIGlmICh1c2VCb3VuZGluZ1JlY3RBbmRQYWludEFs
bENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzICYmIGNvbnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KHJh
bmdlKSkgewotICAgICAgICBpZiAoYXV0byogY29udGFpbmVyUmVuZGVyZXIgPSBjb21tb25JbmNs
dXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIp
LT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNv
bW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlKS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAg
ZGF0YS5vcHRpb25zLmFkZChUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQpOwog
ICAgICAgICAgICAgdGV4dFJlY3RzLmFwcGVuZChjb250YWluZXJSZW5kZXJlci0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1Mu
bW0KaW5kZXggM2Q3YTVlOWQ5NjJjZDcwMzkzY2ZkZjM1YjhkZTA5ZmM4MTAzYzI5Ni4uODdkZDFm
M2U2ODE4NjQ1ZDgxNDdiMGVkNGUzNjUzOThjM2QxMTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3Mv
RnJhbWVJT1MubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBhZ2VUcmFuc2l0aW9uRXZl
bnQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uaCIKKyNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJM
YXllci5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW1wb3J0ICJSZW5k
ZXJUZXh0Q29udHJvbC5oIgpAQCAtMTE1LDIwICsxMTYsMTkgQEAgTlNBcnJheSAqRnJhbWU6Ondv
cmRzSW5DdXJyZW50UGFyYWdyYXBoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbihwYWdlKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIHBh
Z2UoKS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZChw
b3NpdGlvbik7CisKKyAgICBhdXRvIGVuZCA9IHBvc2l0aW9uOwogICAgIGlmICghaXNTdGFydE9m
UGFyYWdyYXBoKGVuZCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gZW5k
LnByZXZpb3VzKCk7Ci0gICAgICAgIFVDaGFyIGMocHJldmlvdXMuY2hhcmFjdGVyQWZ0ZXIoKSk7
CisgICAgICAgIFVDaGFyIGMgPSBwcmV2aW91cy5jaGFyYWN0ZXJBZnRlcigpOworICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHVzZSBzb21ldGhpbmcgZnJvbSBJQ1Ugb3IgQVNDSUlDVHlwZSB0aGF0
IGlzIG5vdCBzdWJqZWN0IHRvIFBPU0lYIGN1cnJlbnQgbGFuZ3VhZ2UgcmF0aGVyIHRoYW4gaXN3
cHVuY3QuCiAgICAgICAgIGlmICghaXN3cHVuY3QoYykgJiYgIWlzU3BhY2VPck5ld2xpbmUoYykg
JiYgYyAhPSBub0JyZWFrU3BhY2UpCiAgICAgICAgICAgICBlbmQgPSBzdGFydE9mV29yZChlbmQp
OwogICAgIH0KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRPZlBhcmFncmFwaChlbmQp
KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1
bWVudCgpKSk7Ci0gICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0KTsKLSAgICBz
ZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIGVuZCk7Ci0KLSAgICBpZiAoc2VhcmNoUmFuZ2UtPmNv
bGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQs
IGVuZCk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSB8fCBzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBOU011dGFibGVBcnJheSAqd29yZHMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwCmluZGV4IDQwNmQ1YmU5MjlkNTNhMTk3NDIwMGI5NDgzZmQ0MWE2NmQzNTZmZWUuLjE3
YWZlYWMxNDQyZGJlMWE2NjM5ZDcxNDRlMTVhNjBkNmRiN2NlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU3OSwxMSArNTc5LDggQEAgYm9vbCBI
aXRUZXN0UmVzdWx0Ojppc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QK
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5
KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpGb3J3YXJkKTsKLSAgICBpZiAoIXdvcmRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuICF3b3JkUmFuZ2UtPnRleHQoKS5pc0VtcHR5KCk7CisgICAgYXV0
byB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndh
cmQpOworICAgIHJldHVybiB3b3JkUmFuZ2UgJiYgaGFzQW55UGxhaW5UZXh0KCp3b3JkUmFuZ2Up
OwogfQogCiBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVMaW5rVVJMKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dlYkFyY2hpdmVSZWYuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKaW5k
ZXggYjljNTg3Y2NiZWIwMmQyNmZmZjY3MTc2OGYyNmU0ZDY3ZWY0MDg5ZS4uNTkwM2MwNTcyNWM1
NmU3ZWVlOWU0MTFiNDYzM2ZmYTQ3Y2E1ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNp
bmNsdWRlICJJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9SYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAogV0tUeXBlSUQg
V0tXZWJBcmNoaXZlR2V0VHlwZUlEKCkKIHsKQEAgLTUzLDcgKzU1LDcgQEAgV0tXZWJBcmNoaXZl
UmVmIFdLV2ViQXJjaGl2ZUNyZWF0ZVdpdGhEYXRhKFdLRGF0YVJlZiBkYXRhUmVmKQogCiBXS1dl
YkFyY2hpdmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlRnJvbVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5k
bGVSZWYgcmFuZ2VIYW5kbGVSZWYpCiB7Ci0gICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJB
cmNoaXZlOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5jb3JlUmFuZ2Uo
KSk7CisgICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJBcmNoaXZlOjpjcmVhdGUobWFrZVNp
bXBsZVJhbmdlKFdlYktpdDo6dG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+Y29yZVJhbmdlKCkpKTsK
ICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmd2ViQXJjaGl2ZS5sZWFrUmVmKCkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgKaW5kZXggNzFkZTI4YmRhNzRkN2YwMzRmYjky
YzZmMjgyNGZlYTM5ZTJjZjlhZi4uMTQ2NGE2Yjc5YWVjZGZlODJlN2NhYzQ0YWNlOWYzZTkzODAz
NGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaApAQCAtMjMsOCArMjMsNyBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2Vi
QXJjaGl2ZV9oCi0jZGVmaW5lIFdlYkFyY2hpdmVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKIApAQCAtMzgsNyArMzcsNyBAQCBjbGFzcyBEYXRhOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlOwotY2xhc3MgUmFuZ2U7CitzdHJ1Y3Qg
U2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNTIsNyArNTEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQXJjaGl2ZVJlc291cmNl
KiBtYWluUmVzb3VyY2UsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YnJlc291cmNlcywgUmVmUHRy
PEFQSTo6QXJyYXk+JiYgc3ViZnJhbWVBcmNoaXZlcyk7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNo
aXZlPiBjcmVhdGUoQVBJOjpEYXRhKik7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVh
dGUoUmVmUHRyPFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU+JiYpOwotICAgIHN0YXRpYyBSZWY8
V2ViQXJjaGl2ZT4gY3JlYXRlKFdlYkNvcmU6OlJhbmdlJik7CisgICAgc3RhdGljIFJlZjxXZWJB
cmNoaXZlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKTsKIAogICAgIFdlYkFy
Y2hpdmVSZXNvdXJjZSogbWFpblJlc291cmNlKCk7CiAgICAgQVBJOjpBcnJheSogc3VicmVzb3Vy
Y2VzKCk7CkBAIC03Niw1ICs3NSwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBBUEkKIAog
I2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0jZW5kaWYgLy8gV2ViQXJjaGl2ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5tbQppbmRleCBmYjU0YWY0MGJjMDBkMjQzYmY5MGU5
MjI5NmNkMWIzZDBkYmJjZWVmLi4xOGRkYzU3YTlkNDEyMDA5ZDZkZjMwYTk4YzZlNmE1MDIzYWYy
OTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0KQEAgLTUyLDkgKzUyLDkg
QEAgUmVmPFdlYkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSZWZQdHI8TGVnYWN5V2ViQXJj
aGl2ZT4mJiBsZWdhY3lXZWJBcmNoaXZlKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFy
Y2hpdmUobGVnYWN5V2ViQXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKLVJlZjxXZWJB
cmNoaXZlPiBXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UmIHJhbmdlKQorUmVmPFdlYkFyY2hpdmU+
IFdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoJnJh
bmdlKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hpdmUoTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKHJhbmdlKSkpOwogfQogCiBXZWJBcmNoaXZlOjpXZWJBcmNoaXZlKFdlYkFy
Y2hpdmVSZXNvdXJjZSogbWFpblJlc291cmNlLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBzdWJyZXNv
dXJjZXMsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YmZyYW1lQXJjaGl2ZXMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCA4NmFjNTUzZTZmY2MwODIyYWQ0MThjNmEwZDNm
OGNmOWM0YTk5Yjk4Li45ZjdjNzMxMDkzY2Y4NzFhN2U0YzYzZjFiMWYxYTZjMzA1M2YzNTM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1Jhbmdl
Ojp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0
aW5nUmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBiYXNlKQorT3B0aW9uYWw8V2ViQ29y
ZTo6U2ltcGxlUmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJh
bWUsIGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0
aXZlVG8gYmFzZSkKIHsKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlLmxvY2F0aW9uICE9IG5vdEZv
dW5kKTsKICAgICBXZWJDb3JlOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSB7IGVkaXRpbmdSYW5nZS5s
b2NhdGlvbiwgZWRpdGluZ1JhbmdlLmxlbmd0aCB9OwpAQCAtNDcsMjEgKzQ3LDIxIEBAIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBm
cmFtZSwgY29uc3QgRWRpdGluCiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlk
ZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9IGZyYW1lLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpOwogICAgICAg
ICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpKTsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwogICAgIH0KIAogICAg
IEFTU0VSVChiYXNlID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAog
ICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdy
YXBoKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSk7CiAgICAg
aWYgKCFwYXJhZ3JhcGhTdGFydCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHNjb3BlRW5kID0gbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJv
b3ROb2RlKCkpLmVuZDsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OnJlc29s
dmVDaGFyYWN0ZXJSYW5nZSh7IFdURk1vdmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RGTW92ZShzY29w
ZUVuZCkgfSwgcmFuZ2UpKTsKKyAgICBhdXRvIHNjb3BlRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRB
ZnRlck5vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5y
b290Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsg
V1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSk7CiB9
CiAKLUVkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiByYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2
ZVRvIGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKK0VkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6
OmZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFu
Z2VJc1JlbGF0aXZlVG8pCiB7CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9
PSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvRWRpdGluZ1JhbmdlLmgKaW5kZXggZTA0M2Y5NzI0MGU0MjVlY2QyNWE0MjdlZGQ5MjdhY2I3
NDVlMzYxNC4uZjE5YjQ0M2YwZGM3MTlhNzQ4MzVjNzhjNzRiMTY1M2Q5NDExYTE0MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRnJhbWU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5n
ZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01OCw4ICs1OCw4IEBAIHN0cnVjdCBFZGl0
aW5nUmFuZ2UgewogICAgIC8vIChub3RGb3VuZCwgMCkgaXMgbm90YWJseSB2YWxpZC4KICAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBsb2NhdGlvbiArIGxlbmd0aCA+PSBsb2NhdGlv
bjsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gdG9SYW5nZShXZWJDb3Jl
OjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKLSAgICBzdGF0aWMgRWRp
dGluZ1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJhbmdl
KiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpF
ZGl0YWJsZVJvb3QpOworICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4g
dG9SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5n
ZUlzUmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsK
KyAgICBzdGF0aWMgRWRpdGluZ1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVU
byA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIAogI2lmIGRlZmlu
ZWQoX19PQkpDX18pCiAgICAgRWRpdGluZ1JhbmdlKE5TUmFuZ2UgcmFuZ2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKaW5kZXggNjk2Y2ZmY2Jk
ZjgwZTUxMmUxZDNmZGRhN2YxMDhmMzFkYjMwZTZiMS4uZDg4NTExMWQ5Zjc1MDAwYmU3ZDY3ZTAw
YmNmMDczYTQ5YTYxZTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQuaApAQCAtMzEsMTEgKzMxLDExIEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU1N0eWxlRGVjbGFy
YXRpb247CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZTsKLWNsYXNzIFJhbmdl
OwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOworc3RydWN0IFNp
bXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUxLDIxICs1MSwyMSBAQCBj
bGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNsaWVudCgp
IHsgfQogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJLaXQ6OldlYlBh
Z2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJLaXQ6Oldl
YlBhZ2UmLCBXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBX
ZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiwgV2Vi
Q29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24p
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2Vi
S2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2Vi
Q29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6
OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYktpdDo6V2ViUGFnZSYsIFdl
YkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYs
IFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRF
bmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5n
SW1wbCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNl
bGVjdGlvbihXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFn
ZSYsIFdlYkNvcmU6OlJhbmdlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFBhc3RlYm9hcmRE
YXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8V1RG
OjpTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVn
aW5FZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYktp
dDo6V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYktpdDo6V2ViUGFnZSYsIFdl
YkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYs
IGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvcklu
c2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxl
dGVSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4mKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29y
ZTo6RUFmZmluaXR5LCBib29sKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3VsZEFwcGx5U3R5bGUoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9w
ZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdl
JiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGlu
ZyhXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIGNv
bnN0IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVRvUGFzdGVi
b2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBh
Z2UmKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2Vi
UGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYsIGJvb2wp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSW5qZWN0ZWRCdW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5j
cHAKaW5kZXggZmM3ZTAwYjI4ZWIzYTU2OGY2Zjg0YzU2YTI2YWIxYmYwNzliNzRjMy4uNmE3ZjUx
ZWQ2NTcyNzc1ZjlmMmZiZDcxMzE1NTM5ZjEwYmY3YzYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJXS0J1bmRs
ZU5vZGVIYW5kbGVQcml2YXRlLmgiCiAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
V0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKQEAgLTkwLDcgKzg5LDcgQEAgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxl
Tm9kZUhhbmRsZUNvcHlEb2N1bWVudChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZUgKIAogV0tS
ZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldFJlbmRlclJlY3QoV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IG5vZGVIYW5kbGVSZWYsIGJvb2wqIGlzUmVwbGFjZWQpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6
dG9BUEkoV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRsZVJlZiktPnJlbmRlclJlY3QoaXNSZXBsYWNl
ZCkpOworICAgIHJldHVybiB7IH07CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVOb2RlSGFuZGxl
Q29weVNuYXBzaG90V2l0aE9wdGlvbnMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVS
ZWYsIFdLU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCkBAIC05OSwxMCArOTgsOSBAQCBXS0ltYWdl
UmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlTbmFwc2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlTm9k
ZUhhbmRsZVJlZiBub2RlSAogICAgIHJldHVybiB0b0FQSShpbWFnZS5sZWFrUmVmKCkpOwogfQog
Ci1XS0J1bmRsZVJhbmdlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlWaXNpYmxlUmFu
Z2UoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVSZWYpCitXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlWaXNpYmxlUmFuZ2UoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+
IHJhbmdlSGFuZGxlID0gV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRsZVJlZiktPnZpc2libGVSYW5n
ZSgpOwotICAgIHJldHVybiB0b0FQSShyYW5nZUhhbmRsZS5sZWFrUmVmKCkpOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiBXS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0RWxlbWVudEJvdW5k
cyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudEhhbmRsZVJlZikKQEAgLTExMCwxOSArMTA4
LDE3IEBAIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRFbGVtZW50Qm91bmRzKFdLQnVuZGxl
Tm9kZUhhbmRsZVJlZiBlbGVtZW50SGFuZGxlUmVmCiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
V2ViS2l0Ojp0b0ltcGwoZWxlbWVudEhhbmRsZVJlZiktPmVsZW1lbnRCb3VuZHMoKSk7CiB9CiAK
LXZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgV0tTdHJpbmdS
ZWYgdmFsdWVSZWYpCit2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRW
YWx1ZUZvclVzZXIoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBXS1N0cmluZ1JlZikKIHsKLSAgICBX
ZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxl
bWVudFZhbHVlRm9yVXNlcihXZWJLaXQ6OnRvV1RGU3RyaW5nKHZhbHVlUmVmKSk7CiB9CiAKLXZv
aWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVk
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGVu
YWJsZWQpCit2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRTcGVsbGNo
ZWNrRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIGJvb2wpCiB7Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRTcGVs
bGNoZWNrRW5hYmxlZChlbmFibGVkKTsKIH0KIAotYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRI
VE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0
RWxlbWVudEhhbmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKQogewotICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50
QXV0b0ZpbGxlZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVI
YW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYg
aHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBmaWxsZWQpCkBAIC0xMzUsOSArMTMxLDkg
QEAgdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZEFu
ZFZpZXdhYmxlKFdLQnVuZGxlTm9kZUhhbmQKICAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRF
bGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWRBbmRWaWV3YWJs
ZShhdXRvRmlsbGVkQW5kVmlld2FibGUpOwogfQogCi1ib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxl
UmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCiB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1l
bnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWRXaXRoQnV0dG9uVHlwZShXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0Zp
bGxCdXR0b25UeXBlKQpAQCAtMTU1LDkgKzE1MSw5IEBAIFdLQXV0b0ZpbGxCdXR0b25UeXBlIFdL
QnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25UeXBl
CiAgICAgcmV0dXJuIHRvV0tBdXRvRmlsbEJ1dHRvblR5cGUoV2ViS2l0Ojp0b0ltcGwoaHRtbElu
cHV0RWxlbWVudEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25U
eXBlKCkpOwogfQogCi1ib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9G
aWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzQXV0b0ZpbGxBdmFpbGFibGUo
KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRN
TElucHV0RWxlbWVudEF1dG9GaWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGF1dG9GaWxsQXZhaWxhYmxlKQpAQCAtMTY1LDkg
KzE2MSw5IEBAIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9G
aWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlCiAgICAgV2ViS2l0Ojp0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEF1dG9GaWxsQXZhaWxhYmxlKGF1dG9GaWxsQXZh
aWxhYmxlKTsKIH0KIAotV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1l
bnRBdXRvRmlsbEJ1dHRvbkJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxl
bWVudEhhbmRsZVJlZikKK1dLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVt
ZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKQogewotICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVS
ZWYpLT5odG1sSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMoKSk7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50TGFz
dENoYW5nZVdhc1VzZXJFZGl0KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50
SGFuZGxlUmVmKQpAQCAtMTgwLDEwICsxNzYsOSBAQCBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdl
dEhUTUxUZXh0QXJlYUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoV0tCdW5kbGVOb2RlSAog
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sVGV4dEFyZWFFbGVtZW50SGFuZGxlUmVmKS0+
aHRtbFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogfQogCi1XS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxUYWJsZUNlbGxFbGVtZW50
Q2VsbEFib3ZlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sVGFibGVDZWxsRWxlbWVudEhhbmRs
ZVJlZikKK1dLQnVuZGxlTm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTFRh
YmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKQogewotICAgIFJl
ZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IFdlYktp
dDo6dG9JbXBsKGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRhYmxlQ2VsbEVs
ZW1lbnRDZWxsQWJvdmUoKTsKLSAgICByZXR1cm4gdG9BUEkobm9kZUhhbmRsZS5sZWFrUmVmKCkp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBXS0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9k
ZUhhbmRsZUNvcHlEb2N1bWVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBkb2N1bWVudEhh
bmRsZVJlZikKQEAgLTE5NCw4ICsxODksNyBAQCBXS0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9k
ZUhhbmRsZUNvcHlEb2N1bWVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBkb2N1bQogCiBX
S0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MRnJhbWVFbGVtZW50Q29u
dGVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sRnJhbWVFbGVtZW50SGFuZGxlUmVm
KQogewotICAgIFJlZlB0cjxXZWJLaXQ6OldlYkZyYW1lPiBmcmFtZSA9IFdlYktpdDo6dG9JbXBs
KGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpLT5odG1sRnJhbWVFbGVtZW50Q29udGVudEZyYW1l
KCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxJRnJh
bWVFbGVtZW50Q29udGVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSUZyYW1lRWxl
bWVudEhhbmRsZVJlZikKQEAgLTIwNCwyMiArMTk4LDE3IEBAIFdLQnVuZGxlRnJhbWVSZWYgV0tC
dW5kbGVOb2RlSGFuZGxlQ29weUhUTUxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKFdLQnVuZGxl
Tm9kCiAgICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CiB9CiAKLS8vIERlcHJlY2F0
ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmKS4KIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElu
cHV0RWxlbWVudEF1dG9maWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiAvLyBEZXByZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgYm9vbCkuCi12
b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGZpbGxlZCkK
K3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGhhbmRsZSwgYm9vbCBlbmFibGVkKQogewotICAgIFdlYktpdDo6
dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0
b0ZpbGxlZChmaWxsZWQpOworICAgIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1l
bnRBdXRvRmlsbGVkKGhhbmRsZSwgZW5hYmxlZCk7CiB9CiAKLS8vIERlcHJlY2F0ZWQgLSB1c2Ug
V0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxl
ZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRvblR5
cGUpLgotdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxC
dXR0b25FbmFibGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxl
UmVmLCBib29sIGVuYWJsZWQpCit2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVs
ZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBib29sKQog
ewotICAgIFdlYkNvcmU6OkF1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUgPSBl
bmFibGVkID8gV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlOjpDcmVkZW50aWFscyA6IFdlYkNv
cmU6OkF1dG9GaWxsQnV0dG9uVHlwZTo6Tm9uZTsKLQotICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25F
bmFibGVkKGF1dG9GaWxsQnV0dG9uVHlwZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01Eb2N1bWVu
dC5tbQppbmRleCAxNjZlNzlkMDMyMjJlYzk4MjQxMThhNDcwYzAyMDQ5NGE2YjU4YzBkLi45NWQx
YzA3YWIyY2NiNjU1ZDZkN2IxZmUzMjVjYzU5ZTA4M2JlZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NRG9jdW1lbnQubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL21hcmt1cC5oPgogI2ltcG9y
dCA8d3RmL05ha2VkUmVmLmg+CkBAIC03OSw3ICs4MCw3IEBAIC0gKFdLRE9NTm9kZSAqKWNyZWF0
ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmlu
ZyBiCiAKIC0gKFdLRE9NTm9kZSAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDooTlNT
dHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTU5vZGUoY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChkb3duY2FzdDxXZWJDb3JlOjpEb2N1bWVudD4oKl9pbXBsKS5jcmVhdGVS
YW5nZSgpLmdldCgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTU5v
ZGUoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpfaW1wbCkpLCB0ZXh0KS5wdHIoKSk7CiB9CiAK
IC0gKGlkKXBhcnNlcllpZWxkVG9rZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDAw
OTBiODk4YTJlMWUxZDYxY2FlMDQ1MDM4YTJmODVkNzVkYmMzZTcuLjFiNmJiNzdlY2E3ZTZlYzBm
MWY2MWU4NzIxMmM0YzQ1ZjY5NmI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAt
MTM0LDkgKzEzNCw4IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIAogLSAoV0tET01SYW5nZSAq
KXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFyeUJ5Q2hhcmFjdGVyczooTlNVSW50ZWdlcilj
aGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJhbmdlRGlyZWN0aW9uKWRpcmVjdGlvbgogewot
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFy
YWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURp
cmVjdGlvbkZvcndhcmQgPyAgX2ltcGwtPmVuZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3Np
dGlvbigpLCBjaGFyYWN0ZXJzLCBkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndh
cmQgPyBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLQotICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFs
bG9jXSBfaW5pdFdpdGhJbXBsOm5ld1JhbmdlLmdldCgpXSBhdXRvcmVsZWFzZV07CisgICAgYXV0
byBuZXdSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJv
dW5kYXJ5KGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/ICBfaW1wbC0+
ZW5kUG9zaXRpb24oKSA6IF9pbXBsLT5zdGFydFBvc2l0aW9uKCksIGNoYXJhY3RlcnMsIGRpcmVj
dGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/IFdlYkNvcmU6OlNlbGVjdGlvbkRp
cmVjdGlvbjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQp
OworICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxp
dmVSYW5nZShuZXdSYW5nZSkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJv
d3NlckNvbnRleHRDb250cm9sbGVyLm1tCmluZGV4IDQ3N2ZmOTQ1YTZhYjRhY2E5ZTczMzEyNTVi
MDQwZGQ1ZmFkNmU4ZTAuLmM3NzYyNTJlYmQ0YWU4ODg0NWJlOGM2Nzc4YjZlZjczMGRmZjMxNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nl
c3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KQEAgLTU1OSwyMSArNTU5LDIxIEBA
IC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRp
bmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiB0
ZXh0LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbiBhY3Rpb24pIGZpbmFsCisgICAgICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJL
aXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0
QWN0aW9uIGFjdGlvbikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVn
YXRlTWV0aG9kcy5zaG91bGRJbnNlcnRUZXh0KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgICAgICAgICByZXR1cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5n
ZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xs
ZXIgc2hvdWxkSW5zZXJ0VGV4dDpTdHJpbmcodGV4dCkgcmVwbGFjaW5nUmFuZ2U6d3JhcHBlcigq
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVw
bGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9uKV07CisgICAgICAgICAgICByZXR1cm4gW21f
Y29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dz
ZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJl
cGxhY2luZ1JhbmdlOndyYXBwZXIoKldlYktpdDo6Y3JlYXRlSGFuZGxlKHJhbmdlVG9SZXBsYWNl
KSkgZ2l2ZW5BY3Rpb246dG9XSyhhY3Rpb24pXTsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wg
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5n
ZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5
IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbAorICAgICAgICBib29sIHNob3Vs
ZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdh
dGVNZXRob2RzLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICAgICAgICAgIGF1dG8gYXBpRnJvbVJhbmdlID0gZnJvbVJhbmdlID8g
YWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6ZnJvbVJhbmdlXSkgOiBu
aWw7Ci0gICAgICAgICAgICBhdXRvIGFwaVRvUmFuZ2UgPSB0b1JhbmdlID8gYWRvcHROUyhbW1dL
RE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6dG9SYW5nZV0pIDogbmlsOworICAgICAgICAg
ICAgYXV0byBhcGlGcm9tUmFuZ2UgPSBhZG9wdE5TKFtbV0tET01SYW5nZSBhbGxvY10gX2luaXRX
aXRoSW1wbDpjcmVhdGVMaXZlUmFuZ2UoZnJvbVJhbmdlKS5nZXQoKV0pOworICAgICAgICAgICAg
YXV0byBhcGlUb1JhbmdlID0gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aElt
cGw6Y3JlYXRlTGl2ZVJhbmdlKHRvUmFuZ2UpLmdldCgpXSk7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgICAgIFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb24gYXBpQWZmaW5pdHkgPSBh
ZmZpbml0eSA9PSBXZWJDb3JlOjpVUFNUUkVBTSA/IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25CYWNr
d2FyZCA6IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25Gb3J3YXJkOwogI2Vsc2UKQEAgLTU4Myw3ICs1
ODMsNyBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVn
SW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAgICAgcmV0dXJuIFttX2Nv
bnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2U6
YXBpRnJvbVJhbmdlLmdldCgpIHRvUmFuZ2U6YXBpVG9SYW5nZS5nZXQoKSBhZmZpbml0eTphcGlB
ZmZpbml0eSBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiAgICAgICAgIH0KIAotICAg
ICAgICB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKikgZmluYWwK
KyAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgU3RyaW5nJikg
ZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5kaWRD
aGFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTkxLDIwICs1OTEsMjAgQEAgLSAo
dm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0Rl
bGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAgICAgIFttX2NvbnRyb2xsZXItPl9lZGl0aW5n
RGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJE
aWRDaGFuZ2VCeUVkaXRpbmc6bV9jb250cm9sbGVyXTsKICAgICAgICAgfQogCi0gICAgICAgIHZv
aWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdl
KiByYW5nZSkgZmluYWwKKyAgICAgICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0
OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkg
ZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy53aWxs
V3JpdGVUb1Bhc3RlYm9hcmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAg
ICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsV3JpdGVSYW5nZVRvUGFz
dGVib2FyZDp3cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9y
Q3JlYXRlKHJhbmdlKS5nZXQoKSldOworICAgICAgICAgICAgW21fY29udHJvbGxlci0+X2VkaXRp
bmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxl
cjptX2NvbnRyb2xsZXIgd2lsbFdyaXRlUmFuZ2VUb1Bhc3RlYm9hcmQ6d3JhcHBlcihXZWJLaXQ6
OmNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpXTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5n
ZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbAorICAgICAgICB2
b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVi
b2FyZERhdGEpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1l
dGhvZHMuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlwZSA9IFttX2NvbnRyb2xsZXItPl9lZGl0aW5n
RGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6
bV9jb250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9yUmFuZ2U6d3JhcHBlcigqV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAg
ICAgICAgIGF1dG8gZGF0YUJ5VHlwZSA9IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUu
Z2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9s
bGVyIHBhc3RlYm9hcmREYXRhRm9yUmFuZ2U6d3JhcHBlcihXZWJLaXQ6OmNyZWF0ZUhhbmRsZShy
YW5nZSkuZ2V0KCkpXTsKICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKnR5cGUgaW4gZGF0YUJ5
VHlwZSkgewogICAgICAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZSk7CiAg
ICAgICAgICAgICAgICAgcGFzdGVib2FyZERhdGEuYXBwZW5kKFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGRhdGFCeVR5cGVbdHlwZV0pKTsKQEAgLTYxOSwxMiArNjE5LDEyIEBAIC0gKHZv
aWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxl
Z2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0Rl
bGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyRGlk
V3JpdGVUb1Bhc3RlYm9hcmQ6bV9jb250cm9sbGVyXTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50
RnJhZ21lbnQmIGZyYWdtZW50LCBXZWJDb3JlOjpSYW5nZSYgcmFuZ2UsIGJvb2wgaXNNb3ZlKSBm
aW5hbAorICAgICAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBX
ZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgV2ViQ29yZTo6U2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIGlzTW92ZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5wZXJmb3JtVHdvU3RlcERyb3ApCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhdXRvIHJhbmdlSGFuZGxlID0gV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZSgmcmFuZ2UpOworICAgICAg
ICAgICAgYXV0byByYW5nZUhhbmRsZSA9IFdlYktpdDo6Y3JlYXRlSGFuZGxlKHJhbmdlKTsKICAg
ICAgICAgICAgIGF1dG8gbm9kZUhhbmRsZSA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlOjpnZXRPckNyZWF0ZSgmZnJhZ21lbnQpOwogICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRy
b2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBlcmZvcm1Ud29TdGVwRHJvcDp3cmFwcGVyKCpu
b2RlSGFuZGxlKSBhdERlc3RpbmF0aW9uOndyYXBwZXIoKnJhbmdlSGFuZGxlKSBpc01vdmU6aXNN
b3ZlXTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5jcHAKaW5kZXggMjIwZWZlZDU4ZWQxNTc3OWU3NWI5YzQ4YzE3MDcxN2ZmZTJkZjBkZi4u
YTkxZjdmNzA3ODE3OGRmYmU0M2I1ODQ2YmMwMGM0NGViZDk2ZDc0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC01NCw3ICs1NCw3IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi10eXBlZGVmIEhh
c2hNYXA8UmFuZ2UqLCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKj4gRE9NUmFuZ2VIYW5kbGVD
YWNoZTsKK3VzaW5nIERPTVJhbmdlSGFuZGxlQ2FjaGUgPSBIYXNoTWFwPFJhbmdlKiwgSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZSo+OwogCiBzdGF0aWMgRE9NUmFuZ2VIYW5kbGVDYWNoZSYgZG9t
UmFuZ2VIYW5kbGVDYWNoZSgpCiB7CkBAIC02NCwyOSArNjQsMjEgQEAgc3RhdGljIERPTVJhbmdl
SGFuZGxlQ2FjaGUmIGRvbVJhbmdlSGFuZGxlQ2FjaGUoKQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKLSAgICBSYW5nZSogcmFu
Z2UgPSBKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhjb250ZXh0KS0+dm0oKSwgdG9KUyhvYmplY3Qp
KTsKLSAgICByZXR1cm4gZ2V0T3JDcmVhdGUocmFuZ2UpOworICAgIHJldHVybiBnZXRPckNyZWF0
ZShKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhjb250ZXh0KS0+dm0oKSwgdG9KUyhvYmplY3QpKSk7
CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpnZXRPckNyZWF0ZShSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBET01SYW5nZUhhbmRsZUNhY2hlOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwgbnVsbHB0cik7
CisgICAgYXV0byByZXN1bHQgPSBkb21SYW5nZUhhbmRsZUNhY2hlKCkuYWRkKHJhbmdlLCBudWxs
cHRyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpjcmVhdGUoKnJhbmdlKTsKKyAgICBhdXRvIHJhbmdlSGFuZGxlID0gYWRv
cHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKCpyYW5nZSkpOwogICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRsZS5wdHIoKTsKICAgICByZXR1cm4gcmFuZ2VI
YW5kbGU7CiB9CiAKLVJlZjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpjcmVhdGUoUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUocmFuZ2UpKTsKLX0KLQogSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZShSYW5nZSYgcmFuZ2Up
CiAgICAgOiBtX3JhbmdlKHJhbmdlKQogewpAQCAtMTc4LDQgKzE3MCw5IEBAIFN0cmluZyBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9yYW5nZS0+
dGV4dCgpOwogfQogCitSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlSGFu
ZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpCit7CisgICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgKaW5kZXggZjgwZTMzYWJlODA2NTFk
OTc5MThiOGRiZmExNDllNDYxZjU2YmM4NS4uNWU4YmVlZGExMDBkMjVmMDkxZTdlMGMxZjc2YTRm
MGNiMTRjMjQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGVfaAotI2RlZmluZSBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPcHRpb25zLmgiCkBAIC0zNSw2ICszNCw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2lt
cGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTksMTIgKzU5LDExIEBAIHB1
YmxpYzoKICAgICBXZWJDb3JlOjpSYW5nZSYgY29yZVJhbmdlKCkgY29uc3Q7CiAKIHByaXZhdGU6
Ci0gICAgc3RhdGljIFJlZjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGUoV2ViQ29y
ZTo6UmFuZ2UmKTsKICAgICBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKFdlYkNvcmU6OlJhbmdl
Jik7CiAKICAgICBSZWY8V2ViQ29yZTo6UmFuZ2U+IG1fcmFuZ2U7CiB9OwogCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKK1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGVIYW5k
bGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jik7CiAKLSNlbmRpZiAvLyBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAppbmRleCBjZTAyN2I1
YTdiZTY4MjdhNzhlN2I3NzI1YmRiYjMyNjRhNjI1MjBhLi5lMzQwYWYxY2JjMzAyOWU1N2FiZGIy
MmRjNGY5YTliZGMyNWYwNTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50LmNwcApAQCAtMzgsMTIzICszOCwxMTEgQEAKICNpbmNsdWRlICJXS1N0cmlu
Zy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJh
Z21lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlUHJvcGVydGllcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCitzdGF0aWMgUmVmUHRyPEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNs
YXJhdGlvbkhhbmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUp
Cit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZTo6
Z2V0T3JDcmVhdGUoJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRp
b24oKSk7Cit9CisKIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6SW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50KGNvbnN0IFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudEJhc2UmIGNs
aWVudCkKIHsKICAgICBpbml0aWFsaXplKCZjbGllbnQpOwogfQogCi1ib29sIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFJh
bmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRC
ZWdpbkVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewot
ICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcpIHsKLSAgICAgICAgUmVmUHRyPElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hv
dWxkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxk
QmVnaW5FZGl0aW5nKQorICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5n
KHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFJh
bmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRF
bmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAg
ICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRpdGluZykgewotICAgICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRF
bmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRp
dGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcodG9BUEkoJnBh
Z2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYgcGFnZSwgTm9kZSogbm9kZSwg
UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYg
cGFnZSwgTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVw
bGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAobV9jbGllbnQuc2hv
dWxkSW5zZXJ0Tm9kZSkgewogICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
PiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShub2Rl
KTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlVG9SZXBs
YWNlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2VU
b1JlcGxhY2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0b0FQ
SSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShyYW5nZVRvUmVwbGFjZUhh
bmRsZS5nZXQoKSksIHRvQVBJKGFjdGlvbiksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnROb2RlKHRvQVBJKCZwYWdlKSwgdG9B
UEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZVRvUmVwbGFjZSku
Z2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQ6OnNob3VsZEluc2VydFRleHQoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogdGV4dCwgUmFu
Z2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoV2ViUGFnZSYgcGFn
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdl
VG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIGlmIChtX2NsaWVu
dC5zaG91bGRJbnNlcnRUZXh0KSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlPiByYW5nZVRvUmVwbGFjZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OmdldE9yQ3JlYXRlKHJhbmdlVG9SZXBsYWNlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNo
b3VsZEluc2VydFRleHQodG9BUEkoJnBhZ2UpLCB0b0FQSSh0ZXh0KSwgdG9BUEkocmFuZ2VUb1Jl
cGxhY2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4dCkKKyAgICAgICAg
cmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRleHQodG9BUEkoJnBhZ2UpLCB0b0FQSSh0ZXh0
LmltcGwoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCkpLCB0b0FQ
SShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFu
Z2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlv
bmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNo
b3VsZERlbGV0ZVJhbmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRl
KHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdlKHRvQVBJ
KCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UpCisgICAgICAg
IHJldHVybiBtX2NsaWVudC5zaG91bGREZWxldGVSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNy
ZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQYWdlJiBwYWdlLCBSYW5nZSogZnJvbVJhbmdl
LCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9t
UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlPiBmcm9tUmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRP
ckNyZWF0ZShmcm9tUmFuZ2UpOwotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZT4gdG9SYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3Jl
YXRlKHRvUmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyb21SYW5nZUhhbmRsZS5nZXQoKSksIHRvQVBJ
KHRvUmFuZ2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUoZnJvbVJhbmdl
KS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZSh0b1JhbmdlKS5nZXQoKSksIHRvQVBJKGFmZmlu
aXR5KSwgc3RpbGxTZWxlY3RpbmcsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91
bGRBcHBseVN0eWxlKFdlYlBhZ2UmIHBhZ2UsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBS
YW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxk
QXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC5z
aG91bGRBcHBseVN0eWxlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUNTU1N0eWxl
RGVjbGFyYXRpb25IYW5kbGU+IHN0eWxlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURl
Y2xhcmF0aW9uSGFuZGxlOjpnZXRPckNyZWF0ZShzdHlsZSk7Ci0gICAgICAgIFJlZlB0cjxJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3Vs
ZEFwcGx5U3R5bGUodG9BUEkoJnBhZ2UpLCB0b0FQSShzdHlsZUhhbmRsZS5nZXQoKSksIHRvQVBJ
KHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9Cisg
ICAgaWYgKG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUpCisgICAgICAgIHJldHVybiBtX2NsaWVu
dC5zaG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHN0eWxl
KS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0lt
cGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dDo6ZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0
aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKQotICAgICAgICBt
X2NsaWVudC5kaWRCZWdpbkVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25O
YW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQuZGlkQmVn
aW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBTdHJpbmdJbXBsKiBub3Rp
ZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVu
ZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQog
ewogICAgIGlmIChtX2NsaWVudC5kaWRFbmRFZGl0aW5nKQotICAgICAgICBtX2NsaWVudC5kaWRF
bmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRpZEVuZEVkaXRpbmcodG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRD
aGFuZ2UoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2UoV2ViUGFnZSYgcGFnZSwg
Y29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVudC5kaWRD
aGFuZ2UpCi0gICAgICAgIG1fY2xpZW50LmRpZENoYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKG5v
dGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2Ns
aWVudC5kaWRDaGFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwo
KSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYgcGFnZSwgU3RyaW5n
SW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3Rp
ZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24pCi0g
ICAgICAgIG1fY2xpZW50LmRpZENoYW5nZVNlbGVjdGlvbih0b0FQSSgmcGFnZSksIHRvQVBJKG5v
dGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2Ns
aWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25O
YW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYg
cGFnZSwgUmFuZ2UqIHJhbmdlKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OndpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiBwYWdlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9h
cmQpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFu
ZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAg
ICAgICBtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShy
YW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAg
IGlmIChtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpCisgICAgICAgIG1fY2xpZW50Lndp
bGxXcml0ZVRvUGFzdGVib2FyZCh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5n
ZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdl
JiBwYWdlLCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZl
Y3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQordm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFn
ZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVi
b2FyZERhdGEpCiB7CiAgICAgaWYgKG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Up
IHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxl
ID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAg
ICBXS0FycmF5UmVmIHR5cGVzID0gMDsKLSAgICAgICAgV0tBcnJheVJlZiBkYXRhID0gMDsKLSAg
ICAgICAgbV9jbGllbnQuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSh0b0FQSSgmcGFnZSksIHRv
QVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgJnR5cGVzLCAmZGF0YSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKLSAgICAgICAgUmVmUHRyPEFQSTo6QXJyYXk+IHR5cGVzQXJyYXkgPSBhZG9wdFJl
Zih0b0ltcGwodHlwZXMpKTsKLSAgICAgICAgUmVmUHRyPEFQSTo6QXJyYXk+IGRhdGFBcnJheSA9
IGFkb3B0UmVmKHRvSW1wbChkYXRhKSk7CisgICAgICAgIFdLQXJyYXlSZWYgdHlwZXMgPSBudWxs
cHRyOworICAgICAgICBXS0FycmF5UmVmIGRhdGEgPSBudWxscHRyOworICAgICAgICBtX2NsaWVu
dC5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFu
ZGxlKHJhbmdlKS5nZXQoKSksICZ0eXBlcywgJmRhdGEsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgIGF1dG8gdHlwZXNBcnJheSA9IGFkb3B0UmVmKHRvSW1wbCh0eXBlcykpOwor
ICAgICAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0UmVmKHRvSW1wbChkYXRhKSk7CiAKICAgICAg
ICAgcGFzdGVib2FyZFR5cGVzLmNsZWFyKCk7CiAgICAgICAgIHBhc3RlYm9hcmREYXRhLmNsZWFy
KCk7CkBAIC0xNzQsMTQgKzE2MiwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiBwYWdlLCBSYQogICAgIH0K
IH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVw
RHJvcChXZWJQYWdlJiBwYWdlLCBEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRl
c3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7
CiAgICAgaWYgKCFtX2NsaWVudC5wZXJmb3JtVHdvU3RlcERyb3ApCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
OjpnZXRPckNyZWF0ZSgmZGVzdGluYXRpb24pOwogICAgIGF1dG8gbm9kZUhhbmRsZSA9IEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmZyYWdtZW50KTsKLSAgICByZXR1cm4g
bV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRs
ZS5nZXQoKSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgaXNNb3ZlLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgIHJldHVybiBtX2NsaWVudC5wZXJmb3JtVHdvU3RlcERyb3AodG9B
UEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkoY3JlYXRlSGFuZGxlKGRl
c3RpbmF0aW9uKS5nZXQoKSksIGlzTW92ZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZFdyaXRlVG9QYXN0ZWJv
YXJkKFdlYlBhZ2UmIHBhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50LmgKaW5kZXggNjg5OTQxYTE4ZThkOWU5NGNhNDI2Zjk0MmIxZWI4YTBiM2NmODRiYi4u
ZjNhMGU3NDc2NzIwZmIxYjVkOWNiMTc3MTdlZGQ3Mzk5NDk3ZGMxZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaApAQCAtMzksNyArMzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRG9jdW1l
bnRGcmFnbWVudDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5n
ZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01MiwyMSArNTIsMjEgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRs
ZVBhZ2VFZGl0b3JDbGllbnRCYXNlJik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGRCZWdp
bkVkaXRpbmcoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91
bGRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wg
c2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlJiwgV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdl
KiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAg
ICBib29sIHNob3VsZEluc2VydFRleHQoV2ViUGFnZSYsIFN0cmluZ0ltcGwqLCBXZWJDb3JlOjpS
YW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7
Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBm
aW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYsIFdlYkNv
cmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpF
QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQXBw
bHlTdHlsZShXZWJQYWdlJiwgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViUGFnZSYsIFN0cmlu
Z0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZvaWQgZGlkRW5kRWRpdGluZyhX
ZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCBk
aWRDaGFuZ2UoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwot
ICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmlj
YXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdl
JiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBjb25z
dCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGlu
ZyhXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29s
IHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJ
bnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJQYWdlJiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5n
ZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29s
IHNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKSBmaW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2Vi
UGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVB
ZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBs
eVN0eWxlKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZEJlZ2lu
RWRpdGluZyhXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0
aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2UoV2ViUGFnZSYsIGNvbnN0IFN0cmlu
ZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24o
V2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9p
ZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYpIGZpbmFsOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVUb1Bhc3Rl
Ym9hcmQoV2ViUGFnZSYpIGZpbmFsOwotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBh
Z2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgV2ViQ29yZTo6UmFuZ2UmIGRlc3RpbmF0
aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2Vi
UGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBkZDljMzUyNjA1ZjA4ZjM5NDBk
OTAwZDhmMDI2NTI0N2UwNGJhMzc5Li4xNzVhYzdkNzI2NjYyNGE1OGJhNTg1N2E0MzMwYjg4NTMz
YzNiMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMg
dWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogCiBib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkp
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
RGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTExNywzMiArMTE3LDMyIEBAIGludCBXZWJF
ZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0g
ICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdp
bkVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7CisgICAgcmV0
dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRp
bmcoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5k
RWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRFbmRFZGl0aW5nKCptX3BhZ2UsIGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCByYW5nZSk7CiB9
CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsICZub2RlLCBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24pOworICAgIHJldHVybiBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCBub2RlLCBy
YW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIHJl
dHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4
dCgqbV9wYWdlLCB0ZXh0LmltcGwoKSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5n
ZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNs
aWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFnZSwgdGV4dCwgcmFuZ2VUb1JlcGxhY2UsIGFj
dGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNl
bGVjdGluZykKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKGZy
b21SYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKSwgYWZmaW5pdHks
IHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgZnJvbVJhbmdlLCB0
b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogICAgIAogYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5bGUoKm1fcGFnZSwg
JnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0eWxlKCptX3BhZ2UsIHN0eWxlLCByYW5nZSk7
CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpAQCAtMjY3LDE3ICsyNjcsMTcg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkK
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVk
aXRvckNsaWVudCgpLndpbGxXcml0ZVRvUGFzdGVib2FyZCgqbV9wYWdlLCByYW5nZSk7CiB9CiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsKLSAgICBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JS
YW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkVHlw
ZXMsIHBhc3RlYm9hcmREYXRhKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCByYW5nZSwgcGFzdGVib2Fy
ZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJm
b3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJh
bmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJh
Z21lbnQsIGNyZWF0ZUxpdmVSYW5nZShkZXN0aW5hdGlvbiksIGlzTW92ZSk7CisgICAgcmV0dXJu
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3Ao
Km1fcGFnZSwgZnJhZ21lbnQsIGRlc3RpbmF0aW9uLCBpc01vdmUpOwogfQogCiB2b2lkIFdlYkVk
aXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYgc3RlcCkKQEAgLTUzNiwxMSAr
NTM2LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
Z1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW0KIHN0YXRpYyB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pCiB7CiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQg
PSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Ci0g
ICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFwYXJhZ3JhcGhTdGFydCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0
LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBs
ZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7
CisgICAgcmV0dXJuIHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlKSA6IDA7CiB9CiAKICNp
ZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5Lm1tCmluZGV4IDk1ZjE2M2MxZTExYjAxZDA3MjAzZTQ2YWI1Y2NhYjAwYzllMmE3
MDIuLjY2ZTNkOTk1N2VkYjlhZjMzNjQ5ODMxNDRlNzRhMTAzYzI4ZWRlM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRy
b2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTE3NiwxNSArMTc2LDEzIEBAIHZv
aWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVU
b1NlbGVjdGlvbihjb25zdCBTdHJpCiAKIFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmcgVGV4dENo
ZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVuUG9zaXRpb25z
KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFdlYkNvcmU6OlZp
c2libGVQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQorICAgIGF1
dG8gZW50aXJlUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgaWYgKCFl
bnRpcmVSYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVudGlyZVJhbmdlID0g
U2ltcGxlUmFuZ2UgeyAqc3RhcnRCb3VuZGFyeSwgKmVuZEJvdW5kYXJ5IH07CiAKICAgICBhdXRv
IHN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
XSk7CiAKLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdChlbnRpcmVSYW5nZSk7ICFpdC5hdEVuZCgp
OyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgqZW50aXJlUmFuZ2Up
OyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGlmICghaXQudGV4dCgpLmxl
bmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0
cmlidXRlZFN0cmluZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXSku
Z2V0KCldOwpAQCAtMTkyLDcgKzE5MCw3IEBAIFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmcgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVuCiAgICAg
ICAgIGZvciAoYXV0byogbWFya2VyIDogcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UocmFuZ2UsIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2lu
ZykpIHsKICAgICAgICAgICAgIGF1dG8mIGRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRhdGEoKSk7CiAgICAgICAgICAgICBh
dXRvIHN1YnJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCB7IG1hcmtlci0+c3Rh
cnRPZmZzZXQoKSwgbWFya2VyLT5lbmRPZmZzZXQoKSAtIG1hcmtlci0+c3RhcnRPZmZzZXQoKSB9
KTsKLSAgICAgICAgICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlOmRhdGEua2V5IHZhbHVlOmRhdGEu
dmFsdWUgcmFuZ2U6Y2hhcmFjdGVyUmFuZ2UoZW50aXJlUmFuZ2UsIHN1YnJhbmdlKV07CisgICAg
ICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZhbHVlIHJh
bmdlOmNoYXJhY3RlclJhbmdlKCplbnRpcmVSYW5nZSwgc3VicmFuZ2UpXTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCmluZGV4IDVmNWU4NjQxYWRlY2QyNmNiOWVmZDc5OGEzOTAwZjc3M2Q5NGU3
M2IuLjUzMTg1NTM4YjllMDUxOTAzYTlkNmVkZTc1YjRlMGVjODM1MjY5MzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAg
LTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1
Z2luRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TaW1wbGVSYW5nZS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTEsMTEgKzEx
MiwxMSBAQCB1aW50MzJfdCBGaW5kQ29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMoY29uc3QgVmVj
dG9yPHVpbnQzMl90PiYgbWF0Y2hJbmRpY2VzLCBjbwogICAgIC8vIHBlcmlvZGljYWxseSB1cGRh
dGUgYW4gTlNQcm9ncmVzcyBpbiB0aGUgVUkgcHJvY2VzcyB3aGVuIGEgYmF0Y2ggb2YgZmluZC1p
bi1wYWdlIG1hdGNoZXMgYXJlIHJlcGxhY2VkLgogICAgIGNvbnN0IHVpbnQzMl90IG1heGltdW1O
dW1iZXJPZk1hdGNoZXNUb1JlcGxhY2UgPSAxMDAwOwogCi0gICAgVmVjdG9yPFJlZjxSYW5nZT4+
IHJhbmdlc1RvUmVwbGFjZTsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlc1RvUmVwbGFj
ZTsKICAgICByYW5nZXNUb1JlcGxhY2UucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWluPHVpbnQzMl90
PihtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6ZSgpKSk7
CiAgICAgZm9yIChhdXRvIGluZGV4IDogbWF0Y2hJbmRpY2VzKSB7CiAgICAgICAgIGlmIChpbmRl
eCA8IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmFuZ2VzVG9SZXBsYWNlLnVu
Y2hlY2tlZEFwcGVuZCgqbV9maW5kTWF0Y2hlc1tpbmRleF0pOworICAgICAgICAgICAgcmFuZ2Vz
VG9SZXBsYWNlLnVuY2hlY2tlZEFwcGVuZChtX2ZpbmRNYXRjaGVzW2luZGV4XSk7CiAgICAgICAg
IGlmIChyYW5nZXNUb1JlcGxhY2Uuc2l6ZSgpID49IG1heGltdW1OdW1iZXJPZk1hdGNoZXNUb1Jl
cGxhY2UpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNDMsMTIgKzI0NCwxMCBAQCB2
b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRp
b25TZXQ8RmluZE9wdGlvbnM+IG9wdAogICAgIGJvb2wgZm91bmRTdHJpbmdTdGFydHNBZnRlclNl
bGVjdGlvbiA9IGZhbHNlOwogICAgIGlmICghcGx1Z2luVmlldykgewogICAgICAgICBpZiAoRnJh
bWUqIHNlbGVjdGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5jb3JlUGFn
ZSgpKSkgewotICAgICAgICAgICAgRnJhbWVTZWxlY3Rpb24mIGZzID0gc2VsZWN0ZWRGcmFtZS0+
c2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoZnMuc2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOwotICAgICAgICAg
ICAgICAgIGludCBpbmRleEZvclNlbGVjdGlvbjsKLSAgICAgICAgICAgICAgICBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmVPcHRpb25z
LCBtYXhNYXRjaENvdW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7Ci0gICAg
ICAgICAgICAgICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPSBpbmRleEZvclNlbGVjdGlvbjsK
KyAgICAgICAgICAgIGlmIChzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3Vu
ZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1h
dGNoQ291bnQpOworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3Vs
dC5yYW5nZXMpOworICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gcmVz
dWx0LmluZGV4Rm9yU2VsZWN0aW9uOwogICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nU3RhcnRz
QWZ0ZXJTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODQs
MTYgKzI4MywxNCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBPcHRpb25TZXQ8RmluZE9wdGlvbnM+IG9wdAogCiB2b2lkIEZpbmRDb250cm9s
bGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZp
bmRPcHRpb25zPiBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIG1fZmlu
ZE1hdGNoZXMuY2xlYXIoKTsKLSAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0KLSAgICBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmUo
b3B0aW9ucyksIG1heE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9yU2VsZWN0aW9u
KTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRj
aGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9maW5kTWF0
Y2hlcyA9IFdURk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKICAgICBWZWN0b3I8VmVjdG9yPEludFJl
Y3Q+PiBtYXRjaFJlY3RzOwogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQot
ICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3Rz
KCpyYW5nZSkpOworICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFJlY3RzKHJhbmdlKSk7CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCBpbmRl
eEZvclNlbGVjdGlvbikpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMsIHJlc3VsdC5pbmRl
eEZvclNlbGVjdGlvbikpOwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25z
OjpTaG93T3ZlcmxheSkgJiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dGaW5k
SW5kaWNhdG9yKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA4LDEyICszMDUsMTIgQEAgdm9pZCBG
aW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkK
IHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0tPnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1f
ZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1l
KCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCptX2ZpbmRN
YXRjaGVzW21hdGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKTsKIAogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IHNlbGVjdGlvblNuYXBzaG90ID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKS0+
Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKTsKIApAQCAtMzM5LDEwICszMzYsMTAgQEAgdm9pZCBG
aW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAg
ICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLT5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRN
YXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKm1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0p
KTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0
Y2hJbmRleF0pOwogfQogCiB2b2lkIEZpbmRDb250cm9sbGVyOjppbmRpY2F0ZUZpbmRNYXRjaCh1
aW50MzJfdCBtYXRjaEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmgKaW5kZXggMmZkM2ZhYzFlYzZjMmMyMTE5MjVjYjVkN2FkYmMx
OTI1NzI3ZDlkOS4uZjZmNmY5ZDIxMDRkM2E3OWUzZmU4ZDk4MWYxNDQ1OTY0MjI0MzIzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5o
CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3Ig
aXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93
aW5nLgogICAgIGJvb2wgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yIHsgZmFsc2UgfTsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fZmluZEluZGljYXRvclJlY3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4+IG1fZmluZE1hdGNoZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiBtX2ZpbmRNYXRjaGVzOwogICAgIC8vIEluZGV4IHZhbHVlIGlzIC0xIGlmIG5vdCBm
b3VuZCBvciBpZiBudW1iZXIgb2YgbWF0Y2hlcyBleGNlZWRzIHByb3ZpZGVkIG1heGltdW0uCiAg
ICAgaW50IG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IHsgLTEgfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlZDNiNjNmZGRlM2E3N2I4Zjll
Yjk4MzE1ZTVlOGQ5YmI1MWMwZGI3Li4yZGM1MDVjZmRiMTNiMDAzMmZkYTU0OWUwYzlkNWQ2NzI3
MmI0MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cApAQCAtNTQzNywxMyArNTQzNywxMyBAQCB2b2lkIFdlYlBhZ2U6Omhhc01hcmtlZFRleHQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHZvaWQgV2Vi
UGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVk
aXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9
IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVS
YW5nZShmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1lLmVkaXRv
cigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVk
UmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
RWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb2ludCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtNTQ1Miw4ICs1NDUyLDggQEAgdm9p
ZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50LCBDYWxsYmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwog
ICAgIGF1dG8mIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5p
bm5lck5vZGVGcmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKICAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91
bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVk
aXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7Ci0gICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihlZGl0aW5nUmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CisgICAgYXV0byBlZGl0aW5n
UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgbWFrZVNpbXBsZVJhbmdlKHJh
bmdlKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNr
KGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6
OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0
aW5nUmFuZ2UsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggY2E0M2Q4NjEzYWI2M2U5
MjgyYWVhMmQ0MzdmNzE2NWFjZWExN2Y1NC4uYTA1MzNlZWNjNDA2NGRhMWNiNmMxY2QwZjY4Njli
YzE4ZTM4YWZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Q
bGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUG9pbnRlckNhcHR1cmVDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1F1aXJrcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9S
YW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9jay5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJJbWFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgpAQCAtMTUw
LDI5ICsxNTEsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEZJWE1FOiBVbmNsZWFyIGlm
IGNhbGxlcnMgaW4gdGhpcyBmaWxlIGFyZSBjb3JyZWN0bHkgY2hvb3Npbmcgd2hpY2ggb2YgdGhl
c2UgdHdvIGZ1bmN0aW9ucyB0byB1c2UuCiAKLXN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29u
dGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBs
YWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSk7Ci19Ci0KIHN0YXRpYyBTdHJpbmcg
cGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQog
ewotICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVtcHR5
U3RyaW5nKCk7CisgICAgcmV0dXJuIHJhbmdlID8gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5n
Tm9CcmVha1NwYWNlKCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiBzdGF0aWMgU3RyaW5n
IHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIHJldHVybiBy
YW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoU2ltcGxlUmFuZ2UgeyAqcmFuZ2UgfSkgOiBlbXB0
eVN0cmluZygpOworICAgIHJldHVybiBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5n
ZShyYW5nZSkpOwogfQogCi1zdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQorc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVs
dEJlaGF2aW9yLCB0cnVlKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBXZWJDb3JlOjpwbGFpblRleHRS
ZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Is
IHRydWUpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JE
aXNwbGF5KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRl
eHRGb3JEaXNwbGF5KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBwbGFpblRl
eHRGb3JEaXNwbGF5KG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCkBAIC0yODksNyArMjg1LDcgQEAgdm9pZCBXZWJQYWdlOjpn
ZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkg
Y29uc3QKICAgICAgICAgcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRFbmQgPSBwb3N0TGF5b3V0
RGF0YS5jYXJldFJlY3RBdFN0YXJ0OwogICAgICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBj
aGVjayBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgd3JpdGluZyBkaXJlY3Rpb24uCiAgICAgICAg
IHBvc3RMYXlvdXREYXRhLmlzUmVwbGFjZUFsbG93ZWQgPSByZXN1bHQuaXNDb250ZW50RWRpdGFi
bGUgJiYgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoc2VsZWN0aW9uLnN0YXJ0KCksIFRleHRHcmFu
dWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwot
ICAgICAgICBwb3N0TGF5b3V0RGF0YS53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHRGb3JDb250
ZXh0KHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkuZ2V0KCkpOworICAg
ICAgICBwb3N0TGF5b3V0RGF0YS53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHRGb3JDb250ZXh0
KHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkpOwogICAgICAgICBpZiAo
c2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBjaGFyYWN0ZXJzQXJv
dW5kUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIHBvc3RMYXlvdXREYXRhLmNoYXJhY3RlckFm
dGVyU2VsZWN0aW9uLCBwb3N0TGF5b3V0RGF0YS5jaGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb24sIHBv
c3RMYXlvdXREYXRhLnR3b0NoYXJhY3RlckJlZm9yZVNlbGVjdGlvbik7CiAgICAgfSBlbHNlIGlm
IChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CkBAIC01NTMsOCArNTQ5LDggQEAgdm9pZCBXZWJQYWdl
OjpnZXRTZWxlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBjb25zdCBp
bnQgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoID0gMzUwOwogICAgIAogICAgIFN0cmlu
ZyBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAgIFN0cmluZyB0ZXh0QmVmb3JlID0g
cGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25B
dFdvcmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxl
Y3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQp
LmdldCgpKTsKLSAgICBTdHJpbmcgdGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5n
ZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3Ro
LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpLmdldCgpKTsKKyAgICBTdHJpbmcgdGV4dEJl
Zm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGly
ZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkKSk7CisgICAgU3RyaW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFu
Z2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0
aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNlbGVjdGlvbkNvbnRleHRDYWxsYmFjayhzZWxlY3RlZFRleHQsIHRleHRC
ZWZvcmUsIHRleHRBZnRlciwgY2FsbGJhY2tJRCkpOwogfQpAQCAtOTg4LDggKzk4NCw3IEBAIHZv
aWQgV2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0RHJhZygpCiAgICAgYXV0byBmcmFtZSA9IG1ha2VS
ZWYobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKSk7CiAgICAg
aWYgKGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAgICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9y
RHJvcFNuYXBzaG90ID0gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZElt
YWdlcygqc2VsZWN0aW9uUmFuZ2UpOwotICAgICAgICBhdXRvIGNvbGxhcHNlZFJhbmdlID0gU2lt
cGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5kLCBzZWxlY3Rpb25SYW5nZS0+ZW5kIH07Ci0g
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZShjb2xsYXBzZWRSYW5nZSkucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoU2ltcGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5k
LCBzZWxlY3Rpb25SYW5nZS0+ZW5kIH0sIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICAgICAgbV9yYW5nZUZvckRy
b3BTbmFwc2hvdCA9IFdURk1vdmUoc2VsZWN0aW9uUmFuZ2UpOwogICAgIH0KIApAQCAtMTExMywx
NSArMTEwOCwxNCBAQCB2b2lkIFdlYlBhZ2U6OmhhbmRsZVN0eWx1c1NpbmdsZVRhcEF0UG9pbnQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50NgogICAgIGlmIChyZW5kZXJlci0+
aXNSZXBsYWNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0LmxvY2FsUG9pbnQoKSwg
bnVsbHB0cik7CisgICAgYXV0byBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50
KGhpdFRlc3QubG9jYWxQb2ludCgpLCBudWxscHRyKTsKICAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUp
OwotCi0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UocG9zaXRpb24pOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlv
biwgcG9zaXRpb24pOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFu
Z2UucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKCpyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OwogICAgIGF1dG8gaW1hZ2UgPSBmcmFtZS5lZGl0b3IoKS5pbnNlcnRFZGl0YWJsZUltYWdlKCk7
CiAgICAgZnJhbWUuZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQoaW1hZ2UuZ2V0KCkpOwog
fQpAQCAtMTM3MSwxMiArMTM2NSwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJl
KGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBnZXN0
dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCB7IH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZTsKICAgICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdzOwogICAgIEdl
c3R1cmVSZWNvZ25pemVyU3RhdGUgd2tHZXN0dXJlU3RhdGUgPSBzdGF0aWNfY2FzdDxHZXN0dXJl
UmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpOwogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
R2VzdHVyZVR5cGU+KGdlc3R1cmVUeXBlKSkgewotICAgIGNhc2UgR2VzdHVyZVR5cGU6OlBocmFz
ZUJvdW5kYXJ5OgotICAgIHsKKyAgICBjYXNlIEdlc3R1cmVUeXBlOjpQaHJhc2VCb3VuZGFyeTog
ewogICAgICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgYXV0byBtYXJrZWRSYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKTsKQEAgLTEzODYsNDAgKzEzNzksMzYgQEAgdm9pZCBXZWJQYWdlOjpz
ZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1
cmVUeXBlLAogICAgICAgICAgICAgZmxhZ3MgPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3Rh
cnRQb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgIT0gZGlz
dGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSA/IFBocmFzZUJv
dW5kYXJ5Q2hhbmdlZCA6IE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4geyB9OwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBmbGFncyA9IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZDsKLSAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRp
b24pOwotICAgIH0KKyAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwog
ICAgICAgICBicmVhazsKKyAgICB9CiAKLSAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVGaW5nZXJU
YXA6Ci0gICAgeworICAgIGNhc2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdlclRhcDogewogICAgICAg
ICBhdXRvIFthZGp1c3RlZFBvc2l0aW9uLCB3aXRoaW5Xb3JkQm91bmRhcnldID0gd29yZEJvdW5k
YXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3Jvc3NpbmdMaW5lKHBvc2l0aW9uKTsKICAgICAgICAgaWYg
KHdpdGhpbldvcmRCb3VuZGFyeSA9PSBXaXRoaW5Xb3JkQm91bmRhcnk6OlllcykKICAgICAgICAg
ICAgIGZsYWdzID0gV29yZElzTmVhclRhcDsKLSAgICAgICAgaWYgKGFkanVzdGVkUG9zaXRpb24u
aXNOb3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIGFkanVzdGVkUG9zaXRpb24sIGFkanVzdGVkUG9zaXRpb24pOwotICAgIH0KKyAg
ICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoYWRqdXN0ZWRQb3NpdGlvbik7CiAgICAgICAg
IGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgR2VzdHVyZVR5cGU6OkxvdXBlOgogICAgICAgICBp
ZiAocG9zaXRpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwotICAg
ICAgICBlbHNlCisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7
CisgICAgICAgIGVsc2UgewogI2lmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICAgICAgICAg
IHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKICNlbHNlCiAgICAgICAg
ICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0YXRlKSB7Ci0gICAgICAgICAgICBjYXNlIEdlc3R1cmVS
ZWNvZ25pemVyU3RhdGU6OkJlZ2FuOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBib3VuZGFyeSA9
ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9zdGFydGlu
Z0dlc3R1cmVSYW5nZSA9IFNpbXBsZVJhbmdlIHsgYm91bmRhcnksIGJvdW5kYXJ5IH07CisgICAg
ICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuOgorICAgICAgICAgICAg
ICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBH
ZXN0dXJlUmVjb2duaXplclN0YXRlOjpDaGFuZ2VkOgogICAgICAgICAgICAgICAgIGlmIChtX3N0
YXJ0aW5nR2VzdHVyZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnQp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCBwb3NpdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc3Rh
cnQsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhcnQgPSBtX3N0YXJ0
aW5nR2VzdHVyZVJhbmdlLT5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihzdGFydCkgPCBwb3NpdGlvbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBwb3NpdGlvbik7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBzdGFydCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpFbmRlZDoKQEAgLTE0MzIsNiArMTQyMSw3IEBAIHZv
aWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0
dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICNlbmRpZgorICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXN0dXJl
VHlwZTo6VGFwQW5kQUhhbGY6CkBAIC0xNDQ2LDExICsxNDM2LDExIEBAIHZvaWQgV2ViUGFnZTo6
c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0
dXJlVHlwZSwKICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDaGFuZ2VkOgog
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRXb3JkUmFuZ2UpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqbV9jdXJyZW50V29yZFJh
bmdlKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gcmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0g
ICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsK
KyAgICAgICAgICAgIHJhbmdlID0gbV9jdXJyZW50V29yZFJhbmdlOworICAgICAgICAgICAgaWYg
KHBvc2l0aW9uIDwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkpCisg
ICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5lbmQpKQorICAgICAgICAgICAgICAgIHJhbmdlLT5l
bmQgPSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpFbmRl
ZDoKICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDYW5jZWxsZWQ6CkBAIC0x
NDY3LDcgKzE0NTcsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IElu
dFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAvLyBE
b3VibGUtdGFwIGF0IGVuZCBvZiBsaW5lIG9ubHkgcGxhY2VzIGluc2VydGlvbiBwb2ludCB0aGVy
ZS4KICAgICAgICAgICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0
aW5nIGF0IGVuZHMgb2YgbGluZXMsCiAgICAgICAgICAgICAvLyBwYXJhZ3JhcGhzLCBhbmQgZG9j
dW1lbnRzLgotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UocG9zaXRpb24pOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IHdv
cmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ4MCw5
ICsxNDcwLDggQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgIGNhc2UgR2VzdHVyZVR5cGU6
Ok9uZUZpbmdlclRyaXBsZVRhcDoKICAgICAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5
KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eSwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAgICAgLy8gVHJpcGxlLXRhcCBhdCBlbmQgb2Yg
bGluZSBvbmx5IHBsYWNlcyBpbnNlcnRpb24gcG9pbnQgdGhlcmUuCi0gICAgICAgICAgICAvLyBU
aGlzIGhlbHBzIHRvIGdldCB0aGUgY2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVz
LAotICAgICAgICAgICAgLy8gcGFyYWdyYXBocywgYW5kIGRvY3VtZW50cy4KLSAgICAgICAgICAg
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0
aW9uKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBw
YXN0aW5nIGF0IGVuZHMgb2YgbGluZXMsIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCisgICAg
ICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9z
aXRpb24sIFRleHRHcmFudWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRp
cmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ5MSwxMiArMTQ4MCwxMiBA
QCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwg
R2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAo
cmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Uu
Z2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9p
bnQsIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGZsYWdzLCBjYWxsYmFja0lEKSk7CiB9CiAK
LXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
RnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMs
IGJvb2wgYmFzZUlzU3RhcnQpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9y
UG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGJvb2wgYmFzZUlzU3RhcnQpCiB7CiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBleGlzdGluZ1NlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGV4aXN0aW5nU2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwpAQCAtMTUxNSw3ICsxNTA0LDcgQEAgc3RhdGljIFJlZlB0
cjxSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUs
IGNvbnN0IEludFAKICAgICB9CiAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsK
IAogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBo
aXRUeXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZl
LCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dWaXNpYmxlQ2hpbGRGcmFtZUNvbnRlbnRPbmx5IH07CiAg
ICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0ID0gZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJl
c3VsdEF0UG9pbnQocG9pbnRJbkRvY3VtZW50LCBoaXRUeXBlKTsKQEAgLTE1MjksMjMgKzE1MTgs
MjEgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGlu
YXRlcyhGcmFtZSYgZnJhbWUsIGNvbnN0IEludFAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVj
dGlvblN0YXJ0Lm5leHQoKTsKICAgICAgICAgZWxzZSBpZiAoJnNlbGVjdGlvblN0YXJ0LmRlZXBF
cXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmaGl0VGVzdC50YXJnZXRO
b2RlKCktPnRyZWVTY29wZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNlbGVjdGlv
bjo6YWRqdXN0UG9zaXRpb25Gb3JFbmQocmVzdWx0LmRlZXBFcXVpdmFsZW50KCksIHNlbGVjdGlv
blN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChyZXN1bHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOworCisgICAg
ICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHNlbGVjdGlvbkVuZCwgcmVz
dWx0KSA8PSAwKQogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uRW5kLnByZXZpb3VzKCk7
CiAgICAgICAgIGVsc2UgaWYgKCZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkgIT0g
JnNlbGVjdGlvbkVuZC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkp
CiAgICAgICAgICAgICByZXN1bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZv
clN0YXJ0KHJlc3VsdC5kZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxl
bnQoKS5jb250YWluZXJOb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc05v
dE51bGwoKSkKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1l
bnQoKSwgcmVzdWx0LmRlZXBFcXVpdmFsZW50KCksIHNlbGVjdGlvbkVuZCk7CisKKyAgICAgICAg
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocmVzdWx0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRX
b3JkQm91bmRhcnlGb3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24sIGJvb2wgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQ
b3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGJv
b2wgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgU2Vs
ZWN0aW9uRGlyZWN0aW9uIHNhbWVEaXJlY3Rpb24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkRp
cmVjdGlvbjo6Rm9yd2FyZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgU2Vs
ZWN0aW9uRGlyZWN0aW9uIG9wcG9zaXRlRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwpAQCAt
MTU1NSw3ICsxNTQyLDcgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFy
eUZvclBvc2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKIAogICAgIGlmIChhdEJv
dW5kYXJ5T2ZHcmFudWxhcml0eShleHRlbnQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFy
aXR5LCBzYW1lRGlyZWN0aW9uKSkgewogICAgICAgICAvLyBUaGlzIGlzIGEgd29yZCBib3VuZGFy
eS4gTGVhdmUgc2VsZWN0aW9uIHdoZXJlIGl0IGlzLgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBpZiAoYXRCb3VuZGFy
eU9mR3JhbnVsYXJpdHkoZXh0ZW50LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
b3Bwb3NpdGVEaXJlY3Rpb24pKSB7CkBAIC0xNTcwLDcgKzE1NTcsOSBAQCBzdGF0aWMgUmVmUHRy
PFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25z
dCBWaXNpYmxlUAogICAgICAgICAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eSh3b3JkQm91bmRh
cnksIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9uKQogICAg
ICAgICAmJiBpbml0aWFsRXh0ZW50ICE9IHdvcmRCb3VuZGFyeSkgewogICAgICAgICBleHRlbnQg
PSB3b3JkQm91bmRhcnk7Ci0gICAgICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUo
KmZyYW1lLT5kb2N1bWVudCgpLCBleHRlbnQsIGJhc2UpOworICAgICAgICBpZiAoIShiYXNlIDwg
ZXh0ZW50KSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChiYXNlLCBleHRlbnQpOworICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGJhc2UsIGV4dGVudCk7CiAgICAgfQogICAgIC8vIENvbnZl
cnNlbHksIGlmIHRoZSBpbml0aWFsIGV4dGVudCBlcXVhbHMgdGhlIGN1cnJlbnQgd29yZCBib3Vu
ZGFyeSwgdGhlbgogICAgIC8vIHJ1biB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBp
ZiB0aGUgc2VsZWN0aW9uIHNob3VsZCBleHRlbmQKQEAgLTE1OTAsOSArMTU3OSwxMSBAQCBzdGF0
aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZy
YW1lLCBjb25zdCBWaXNpYmxlUAogICAgIGlmIChleHRlbnQuaXNOdWxsKCkgfHwgZXh0ZW50ID09
IGJhc2UpCiAgICAgICAgIGV4dGVudCA9IHdvcmRCb3VuZGFyeTsKICAgICBpZiAoZXh0ZW50Lmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS0+ZG9jdW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1
bWVudCgpLCBleHRlbnQsIGJhc2UpOworICAgIGlmICghKGJhc2UgPCBleHRlbnQpKQorICAgICAg
ICBzdGQ6OnN3YXAoYmFzZSwgZXh0ZW50KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGJh
c2UsIGV4dGVudCk7CiB9CiAKIEludFJlY3QgV2ViUGFnZTo6cm9vdFZpZXdCb3VuZHNGb3JFbGVt
ZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xNzA3LDMxICsxNjk4LDI4IEBAIHZvaWQg
V2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50
LCBTZWxlY3Rpb25Ub3VjaCBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOwotICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgT3B0aW9uU2V0
PFNlbGVjdGlvbkZsYWdzPiBmbGFnczsKLQogICAgIGlmIChzaG91bGREaXNwYXRjaFN5bnRoZXRp
Y01vdXNlRXZlbnRzV2hlbk1vZGlmeWluZ1NlbGVjdGlvbigpKQogICAgICAgICBkaXNwYXRjaFN5
bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShzZWxlY3Rpb25Ub3VjaCwgcG9p
bnQpOwogCisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOworICAgIE9wdGlvblNldDxT
ZWxlY3Rpb25GbGFncz4gZmxhZ3M7CisKICAgICBzd2l0Y2ggKHNlbGVjdGlvblRvdWNoKSB7CiAg
ICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6U3RhcnRlZDoKICAgICBjYXNlIFNlbGVjdGlvblRvdWNo
OjpFbmRlZE5vdE1vdmluZzoKICAgICAgICAgYnJlYWs7Ci0gICAgCisKICAgICBjYXNlIFNlbGVj
dGlvblRvdWNoOjpFbmRlZDoKLSAgICAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nlc3RX
b3JkQm91bmRhcnlGb3JQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0
LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJh
bWUuZG9jdW1lbnQoKSwgcmVzdWx0LCByZXN1bHQpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAg
aWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjbG9zZXN0V29yZEJvdW5kYXJ5Rm9y
UG9zaXRpb24ocG9zaXRpb24pKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSBy
YW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGZyYW1lLCBwb2ludCwgYmFzZUlzU3Rh
cnQpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTW92
aW5nRm9yd2FyZDoKICAgICAgICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRp
b24oJmZyYW1lLCBwb3NpdGlvbiwgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9y
d2FyZCk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgIGNhc2UgU2VsZWN0aW9uVG91
Y2g6OkVuZGVkTW92aW5nQmFja3dhcmQ6CiAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRCb3Vu
ZGFyeUZvclBvc2l0aW9uKCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25E
aXJlY3Rpb246OkJhY2t3YXJkKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNzQwLDggKzE3MjgsOSBA
QCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50
JiBwb2ludCwgU2VsZWN0aW9uVG91Y2ggcwogICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9pbnRJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMoZnJhbWUsIHBvaW50LCBiYXNlSXNTdGFydCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBw
b3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlRvdWNoZXNDYWxsYmFjayhwb2ludCwgc2VsZWN0aW9uVG91Y2gsIGZsYWdzLCBjYWxs
YmFja0lEKSk7CiB9CkBAIC0xNzQ5LDE1ICsxNzM4LDEyIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRl
U2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3Vj
aCBzCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBmcm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIEdlc3R1cmVUeXBlIGdl
c3R1cmVUeXBlLCBHZXN0dXJlUmVjb2duaXplclN0YXRlIGdlc3R1cmVTdGF0ZSwgQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGZyb21Qb3Np
dGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZp
ZXdUb0NvbnRlbnRzKGZyb20pKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdG9Qb3NpdGlvbiA9IGZy
YW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRl
bnRzKHRvKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBpZiAoZnJvbVBvc2l0aW9u
LmlzTm90TnVsbCgpICYmIHRvUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGZy
b21Qb3NpdGlvbiA8IHRvUG9zaXRpb24pCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoKmZyYW1lLmRvY3VtZW50KCksIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgdG9Qb3NpdGlvbiwgZnJvbVBvc2l0aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dl
cmVkKTsKKyAgICBhdXRvIGZyb21Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBv
aW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyb20pKTsKKyAgICBhdXRvIHRv
UG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJv
b3RWaWV3VG9Db250ZW50cyh0bykpOworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKCEoZnJvbVBvc2l0
aW9uIDwgdG9Qb3NpdGlvbikpCisgICAgICAgICAgICBzdGQ6OnN3YXAocmFuZ2UtPnN0YXJ0LCBy
YW5nZS0+ZW5kKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9CiAKICAgICAvLyBX
ZSBjYW4gdXNlIHRoZSBzYW1lIGNhbGxiYWNrIGZvciB0aGUgZ2VzdHVyZXMgd2l0aCBvbmUgcG9p
bnQuCkBAIC0xNzgxLDEzICsxNzY3LDEzIEBAIHZvaWQgV2ViUGFnZTo6ZXh0ZW5kU2VsZWN0aW9u
KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgQ29tcGxldGlvbkhhCiAgICAg
SW50UG9pbnQgZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50czsKICAgICBib29sIHNo
b3VsZERpc3BhdGNoTW91c2VFdmVudHMgPSBzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZl
bnRzV2hlbk1vZGlmeWluZ1NlbGVjdGlvbigpOwogICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNl
RXZlbnRzKSB7Ci0gICAgICAgIGF1dG8gc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZl
bnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdv
cmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigp
OwotICAgICAgICBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmll
dygpLT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kUG9z
aXRpb24oKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKKyAgICAgICAgYXV0byBz
dGFydExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9Sb290VmlldyhWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHdvcmRSYW5nZS0+c3RhcnQpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOworICAg
ICAgICBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5j
b250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbih3b3JkUmFuZ2UtPmVuZCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7CiAg
ICAgICAgIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNl
bGVjdGlvblRvdWNoOjpTdGFydGVkLCBzdGFydExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVu
dHMpOwogICAgICAgICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2Vz
dHVyZShTZWxlY3Rpb25Ub3VjaDo6TW92ZWQsIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VF
dmVudHMpOwogICAgIH0KIAotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
d29yZFJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5
KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2Vy
VHJpZ2dlcmVkKTsKIAogICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKQogICAgICAg
ICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rp
b25Ub3VjaDo6RW5kZWQsIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwpAQCAt
MTgxMiwxMCArMTc5OCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdvcmRCYWNrd2FyZCgpCiAg
ICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlv
bk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChz
dGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24gIT0gcG9zaXRpb24pCi0g
ICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlv
bi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9
IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Cisg
ICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOdWxsKCkgfHwgc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLCBwb3NpdGlvbi5h
ZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zm
c2V0KGludDMyX3Qgb2Zmc2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xODMzLDcgKzE4MjEsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rp
b25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYm
IHN0YXJ0UG9zaXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24s
IHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
biksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogfQogICAgIApAQCAtMTk4NSw3ICsxOTczLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0Zv
ckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkK
ICAgICB9CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVj
dHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9y
TGluZXMoc2VsZWN0aW9uUmVjdHMpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3Rz
KTsKICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmll
dygpLCBzZWxlY3Rpb25SZWN0cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpT
ZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBA
IC0yMDY1LDcgKzIwNTMsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRQb2ludChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcgogICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChm
cmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIAogICAg
IGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9u
KSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CiAKQEAgLTIwNzcsNyArMjA2NSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25B
dEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pCiAgICAg
aWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKSB7CiAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25P
Zk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBkaXJlY3Rp
b24pOwogICAgICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3Vt
ZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAg
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5n
ZShwb3NpdGlvbiksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQogICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CiB9CkBAIC0yMDkxLDcgKzIwNzksNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rp
b25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3Jhbgog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSAoaXNGb3J3YXJkKSA/IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVFbmQoKSA6IGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpOwogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uT2ZO
ZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgZGlyZWN0aW9u
KTsKICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBpc0ZvcndhcmQ/IFVQU1RSRUFNIDogRE9X
TlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMs
IFVzZXJUcmlnZ2VyZWQpOworICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBpc0ZvcndhcmQ/IFVQU1RSRUFNIDog
RE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZ
ZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpA
QCAtMjEwMCwyNSArMjA4OCwxMyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gV2ViUGFnZTo6cmFu
Z2VGb3JHcmFudWxhcml0eUF0UG9pbnQoRnJhbWUmIGZyYW1lLCBjb25zdCBXZQogewogICAgIGF1
dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUs
IHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICBzd2l0Y2ggKGdy
YW51bGFyaXR5KSB7Ci0gICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFy
aXR5OiB7Ci0gICAgICAgIGF1dG8gYm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bik7Ci0gICAgICAgIGlmICghYm91bmRhcnkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgICAgICByZXR1cm4geyB7ICpib3VuZGFyeSwgKmJvdW5kYXJ5IH0gfTsKLSAgICB9
Ci0gICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eTogewotICAgICAgICBh
dXRvIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVy
biB7ICpyYW5nZSB9OwotICAgIH0KKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVy
R3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwor
ICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVy
biB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwogICAgIGNhc2UgVGV4dEdyYW51bGFy
aXR5OjpTZW50ZW5jZUdyYW51bGFyaXR5OgotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJh
Z3JhcGhHcmFudWxhcml0eTogewotICAgICAgICBhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9u
OjpGb3J3YXJkKTsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7ICpyYW5nZSB9OwotICAgIH0KKyAgICBjYXNlIFRl
eHRHcmFudWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBlbmNs
b3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQpOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpEb2N1bWVu
dEdyYW51bGFyaXR5OgogICAgICAgICAvLyBGSVhNRTogTWFrZXMgbm8gc2Vuc2UgdGhhdCB0aGlz
IG11dGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCByZXR1cm5zIG51bGwuCiAgICAgICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwpAQCAtMjE2NSw3ICsyMTQxLDcgQEAgdm9p
ZCBXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9pbnQsIFcKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9y
R3JhbnVsYXJpdHlBdFBvaW50KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3Rp
bmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwg
VVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZSgqcmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgbV9pbml0aWFsU2VsZWN0aW9uID0g
cmFuZ2U7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIxOTcsMTAgKzIxNzMsOCBA
QCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JgogICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgaW5pdGlh
bFNlbGVjdGlvblN0YXJ0UG9zaXRpb24pCiAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5ld1JhbmdlLT5zdGFydCk7CiAKLSAgICBpZiAoc2VsZWN0
aW9uU3RhcnQuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH07Ci0gICAgICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5w
dHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLSAgICB9CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpCisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc2VsZWN0
aW9uU3RhcnQgPT0gaW5pdGlhbFNlbGVjdGlvblN0YXJ0UG9zaXRpb24sIGNhbGxiYWNrSUQpKTsK
IH0KQEAgLTIyMTUsNyArMjE4OSw2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0
aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIFZpc2libGVQ
b3NpdGlvbiBzZWxlY3Rpb25TdGFydDsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uRW5k
OwogICAgIApAQCAtMjI0OSwxMSArMjIyMiw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0
aW9uV2l0aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTm90TnVsbCgp
ICYmIHNlbGVjdGlvbkVuZC5pc05vdE51bGwoKSkKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKLQot
ICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBpZiAoYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSkKKyAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
IAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhtX3Nl
bGVjdGlvbkFuY2hvciA9PSBTdGFydCwgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjMwMywxMiArMjI3
MywxMiBAQCB2b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBv
bGRUZXh0LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHdvcmRS
YW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKQogICAgICAgICA/IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQotICAgICAg
ICA6IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKLSAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UuZ2V0
KCkpICE9IG9sZFRleHQpCisgICAgICAgIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFu
Z2UpICE9IG9sZFRleHQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmcmFtZS5lZGl0b3Io
KS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGZyYW1lLmVkaXRvcigpLmlu
c2VydFRleHQobmV3VGV4dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0
aW9uQ2hhbmdlcyhmYWxzZSk7CiB9CkBAIC0yMzI4LDE0ICsyMjk4LDE0IEBAIHZvaWQgV2ViUGFn
ZTo6cmVwbGFjZURpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmlu
ZyYgbmV3VGV4dCkKICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOwogICAg
IGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcG9zaXRpb24gPSBzdGFydE9mRG9jdW1l
bnQoZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAotICAgIGlmIChwbGFpblRleHRG
b3JDb250ZXh0KHJhbmdlLnB0cigpKSAhPSBvbGRUZXh0KQorICAgIGlmIChwbGFpblRleHRGb3JD
b250ZXh0KHJhbmdlKSAhPSBvbGRUZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIG5vdGlmeSB0aGUgY2xpZW50IHRoYXQgdGhlIHNlbGVjdGlvbiBoYXMgY2hh
bmdlZCB1bnRpbCB3ZSBhcmUgZG9uZSBpbnNlcnRpbmcgdGhlIG5ldyB0ZXh0LgogICAgIGZyYW1l
LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7Ci0gICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5wdHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGZyYW1lLmVkaXRvcigpLmlu
c2VydFRleHQobmV3VGV4dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0
aW9uQ2hhbmdlcyhmYWxzZSk7CiB9CkBAIC0yMzQ4LDI3ICsyMzE4LDI1IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29y
cmVjdGlvbiwgQ29tCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAg
IGF1dG8gcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgIGF1dG8g
cmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkpOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgcmVwbHkoeyB9
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gdGV4dEZvclJhbmdlID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgYXV0byB0ZXh0Rm9yUmFuZ2UgPSBw
bGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICBjb25zdCB1bnNpZ25lZCBtYXhTZWFyY2hB
dHRlbXB0cyA9IDU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1w
dHMgJiYgdGV4dEZvclJhbmdlICE9IHRleHRGb3JBdXRvY29ycmVjdGlvbjsgKytpKQotICAgIHsK
LSAgICAgICAgcG9zaXRpb24gPSByYW5nZS0+c3RhcnRQb3NpdGlvbigpLnByZXZpb3VzKCk7Ci0g
ICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSB8fCBwb3NpdGlvbiA9PSByYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyAgaSA8IG1heFNlYXJjaEF0dGVtcHRz
ICYmIHRleHRGb3JSYW5nZSAhPSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb247ICsraSkgeworICAgICAg
ICBhdXRvIHBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFy
dCkucHJldmlvdXMoKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpIHx8IHBvc2l0aW9u
ID09IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKQogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS0+c3RhcnRQb3NpdGlvbigpLCByYW5n
ZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNv
bnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICByYW5nZSA9IHsgeyB3b3JkUmFuZ2VGcm9tUG9z
aXRpb24ocG9zaXRpb24pLT5zdGFydCwgcmFuZ2UtPmVuZCB9IH07CisgICAgICAgIHRleHRGb3JS
YW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgIH0KIAogICAgIFZlY3RvcjxT
ZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKICAgICBpZiAodGV4dEZvclJhbmdlID09IHRl
eHRGb3JBdXRvY29ycmVjdGlvbikKLSAgICAgICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhzZWxlY3Rpb25SZWN0cyk7CisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxl
Y3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0cyk7CiAKICAgICBhdXRvIHJvb3RWaWV3U2Vs
ZWN0aW9uUmVjdHMgPSBzZWxlY3Rpb25SZWN0cy5tYXAoWyZdKGNvbnN0IGF1dG8mIHNlbGVjdGlv
blJlY3QpIC0+IEZsb2F0UmVjdCB7IHJldHVybiBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290
VmlldyhzZWxlY3Rpb25SZWN0LnJlY3QoKSk7IH0pOwogCkBAIC0yNDE0LDE0ICsyMzgyLDE0IEBA
IGJvb2wgV2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc0Nh
cmV0T3JSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICBTdHJpbmcgdGV4
dEZvclJhbmdlOwogICAgIGF1dG8gb3JpZ2luYWxUZXh0V2l0aEZvbGRlZFF1b3RlTWFya3MgPSBm
b2xkUXVvdGVNYXJrcyhvcmlnaW5hbFRleHQpOwogCiAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXQoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgICAgICBhdXRvIHBvc2l0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgICAgIHJh
bmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgdGV4dEZvclJh
bmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIHRleHRGb3JS
YW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgICAgICAKICAgICAgICAgLy8g
SWYgJ29yaWdpbmFsVGV4dCcgaXMgbm90IHRoZSBzYW1lIGFzICd0ZXh0Rm9yUmFuZ2UnIHdlIG5l
ZWQgdG8gbW92ZSAncmFuZ2UnCiAgICAgICAgIC8vIGZvcndhcmQgc3VjaCB0aGF0IGl0IG1hdGNo
ZXMgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlLgpAQCAtMjQzMSwz
MyArMjM5OSwzMyBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChj
b25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgICAgICAgICAgICAgIHBv
c2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsKICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkKICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChmcmFt
ZS5kb2N1bWVudCgpKTsKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUu
ZG9jdW1lbnQoKSwgcG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwotICAgICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5n
ZS5nZXQoKSk7CisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwg
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgICAgICB0ZXh0
Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICAgICAgICAgIHVuc2ln
bmVkIGxvb3BDb3VudCA9IDA7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhQb3NpdGlv
bnNBdHRlbXB0cyA9IDEwOwogICAgICAgICAgICAgd2hpbGUgKHRleHRGb3JSYW5nZS5sZW5ndGgo
KSAmJiB0ZXh0Rm9yUmFuZ2UubGVuZ3RoKCkgPiBvcmlnaW5hbFRleHQubGVuZ3RoKCkgJiYgbG9v
cENvdW50IDwgbWF4UG9zaXRpb25zQXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICBwb3NpdGlv
biA9IHBvc2l0aW9uLm5leHQoKTsKICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uaXNOb3RO
dWxsKCkgJiYgcG9zaXRpb24gPj0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxscHRyOworICAgICAgICAgICAgICAg
ICAgICByYW5nZSA9IFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9z
aXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgICAgICAg
ICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgICAgICAgICAgdGV4
dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgICAgICAgICAgICAg
bG9vcENvdW50Kys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodGV4dEZvclJh
bmdlLmlzRW1wdHkoKSAmJiByYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAg
ICAgICAvLyBJZiAncmFuZ2UnIGRvZXMgbm90IGluY2x1ZGUgYW55IHRleHQgYnV0IGl0IGlzIG5v
dCBjb2xsYXBzZWQsIHdlIG5lZWQgdG8gc2V0CiAgICAgICAgICAgICAvLyAncmFuZ2UnIHRvIG1h
dGNoIHRoZSBzZWxlY3Rpb24uIE90aGVyd2lzZSBub24tdGV4dCBub2RlcyB3aWxsIGJlIHJlbW92
ZWQuCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHBvc2l0aW9uLCBwb3NpdGlvbik7CisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShwb3NpdGlvbik7CiAgICAgICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNl
bGVjdGlvbi4KLSAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIHJhbmdlID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB0ZXh0Rm9y
UmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgdGV4dEZv
clJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgfQogCiAgICAgaWYgKGZv
bGRRdW90ZU1hcmtzKHRleHRGb3JSYW5nZSkgIT0gb3JpZ2luYWxUZXh0V2l0aEZvbGRlZFF1b3Rl
TWFya3MpCkBAIC0yNDY2LDkgKzI0MzQsOSBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJl
Y3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAg
IC8vIENvcnJlY3RseSBkZXRlcm1pbmUgYWZmaW5pdHksIHVzaW5nIGxvZ2ljIGN1cnJlbnRseSBv
bmx5IHByZXNlbnQgaW4gVmlzaWJsZVBvc2l0aW9uCiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0g
RE9XTlNUUkVBTTsKICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UtPmNvbGxhcHNlZCgpKQotICAgICAg
ICBhZmZpbml0eSA9IFZpc2libGVQb3NpdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBVUFNU
UkVBTSkuYWZmaW5pdHkoKTsKKyAgICAgICAgYWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRpb24oY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCksIFVQU1RSRUFNKS5hZmZpbml0
eSgpOwogICAgIAotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Uu
Z2V0KCksIGFmZmluaXR5LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwg
YWZmaW5pdHksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAgZnJhbWUuZWRpdG9yKCku
aW5zZXJ0VGV4dChjb3JyZWN0aW9uLCAwLCBvcmlnaW5hbFRleHQuaXNFbXB0eSgpID8gVGV4dEV2
ZW50SW5wdXRLZXlib2FyZCA6IFRleHRFdmVudElucHV0QXV0b2NvbXBsZXRpb24pOwogICAgIGVs
c2UgaWYgKG9yaWdpbmFsVGV4dC5sZW5ndGgoKSkKQEAgLTI0OTUsMTIgKzI0NjMsOCBAQCBXZWJB
dXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAg
ICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBv
c2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAg
ICAgU3RyaW5nIG1hcmtlZFRleHRCZWZvcmU7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbikpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QmVm
b3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0LCAqc3Rh
cnQgfSk7Ci0gICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QWZ0ZXI7Ci0gICAgICAgIGlmIChhdXRv
IGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSkKLSAgICAgICAgICAgIG1hcmtl
ZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQoeyAqZW5kLCBjb21wb3NpdGlvblJhbmdl
LT5lbmQgfSk7CisgICAgICAgIGF1dG8gbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQobWFrZVNpbXBsZVJhbmdlKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0LCBzdGFydFBvc2l0
aW9uKSk7CisgICAgICAgIGF1dG8gbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChtYWtlU2ltcGxlUmFuZ2UoZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwog
ICAgICAgICBtYXJrZWRUZXh0ID0gbWFya2VkVGV4dEJlZm9yZSArIHNlbGVjdGVkVGV4dCArIG1h
cmtlZFRleHRBZnRlcjsKICAgICAgICAgaWYgKCFtYXJrZWRUZXh0LmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgbWFya2VkVGV4dFJhbmdlLmxvY2F0aW9uID0gbWFya2VkVGV4dEJlZm9yZS5sZW5n
dGgoKTsKQEAgLTI2NzQsOSArMjYzOCw5IEBAIHN0YXRpYyB2b2lkIGRhdGFEZXRlY3RvckxpbmtQ
b3NpdGlvbkluZm9ybWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIEludGVyYWN0aW9uSW5mCiAgICAg
YXV0byBsaW5rUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAgICAg
bGlua1JhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7CiAgICAgaW5mby50ZXh0QmVm
b3JlID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJl
Y3Rpb25BdFdvcmRCb3VuZGFyeShsaW5rUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwKLSAgICAgICAg
ZGF0YURldGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpC
YWNrd2FyZCkuZ2V0KCkpOworICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVu
Z3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7CiAgICAgaW5mby50ZXh0QWZ0ZXIg
PSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlv
bkF0V29yZEJvdW5kYXJ5KGxpbmtSYW5nZS0+ZW5kUG9zaXRpb24oKSwKLSAgICAgICAgZGF0YURl
dGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KS5nZXQoKSk7CisgICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNl
bGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpOwogfQogI2VuZGlmCiAKQEAgLTQxMDYsNyArNDA3
MCw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aERlbHRhKGludDY0X3QgbG9j
YXRpb25EZWx0YSwgaW50NjRfdCBsZW5ndGhEZWx0CiAKICAgICBhdXRvIG5ld1NlbGVjdGlvblJh
bmdlID0gQ2hhcmFjdGVyUmFuZ2UobmV3U2VsZWN0aW9uTG9jYXRpb24udW5zYWZlR2V0KCksIG5l
d1NlbGVjdGlvbkxlbmd0aC51bnNhZmVHZXQoKSk7CiAgICAgYXV0byB1cGRhdGVkU2VsZWN0aW9u
UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKCpyb290KSwgbmV3U2VsZWN0aW9uUmFuZ2UpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2UpLnB0
cigpLCBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UodXBkYXRlZFNlbGVjdGlvblJhbmdlLCBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtNDI2NiwxMiArNDIzMCwxMSBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRl
eHRSZXF1ZXN0IHJlcXVlcwogICAgIH0KIAogICAgIGF1dG8gbWFrZVN0cmluZyA9IFtdIChjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZCkgLT4g
QXR0cmlidXRlZFN0cmluZyB7Ci0gICAgICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBhdXRvIGVuZEJvdW5k
YXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBp
ZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5IHx8ICpzdGFydEJvdW5kYXJ5ID09ICpl
bmRCb3VuZGFyeSkKKyAgICAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwg
ZW5kKTsKKyAgICAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIGVk
aXRpbmctb2Zmc2V0LWNvbXBhdGlibGUgYXR0cmlidXRlZCBzdHJpbmdzIGlmIHRoYXQgb3B0aW9u
IGlzIHJlcXVlc3RlZC4KLSAgICAgICAgcmV0dXJuIHsgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9C
cmVha1NwYWNlKHsgV1RGTW92ZSgqc3RhcnRCb3VuZGFyeSksIFdURk1vdmUoKmVuZEJvdW5kYXJ5
KSB9KV0pLCBuaWwgfTsKKyAgICAgICAgcmV0dXJuIHsgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9C
cmVha1NwYWNlKCpyYW5nZSldKSwgbmlsIH07CiAgICAgfTsKIAogICAgIGNvbnRleHQuY29udGV4
dEJlZm9yZSA9IG1ha2VTdHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZklu
dGVyZXN0SW5TZWxlY3Rpb24pOwpAQCAtNDMwNiw4ICs0MjY5LDggQEAgdm9pZCBXZWJQYWdlOjpy
ZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVz
dCByZXF1ZXMKICAgICAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNG
b3JSYW5nZSgqY29udGV4dFJhbmdlLCAwKTsKICAgICB9IGVsc2UgaWYgKHdhbnRzTWFya2VkVGV4
dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgdW5zaWduZWQgY29tcG9zaXRp
b25TdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKQotICAgICAgICAgICAg
Y29tcG9zaXRpb25TdGFydE9mZnNldCA9IFdlYkNvcmU6OnBsYWluVGV4dCh7IFdURk1vdmUoKnN0
YXJ0KSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSkubGVuZ3RoKCk7CisgICAgICAgIGlmIChh
dXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGNvbnRleHRCZWZvcmVTdGFydCwgY29tcG9zaXRp
b25SYW5nZS0+c3RhcnQpKQorICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IGNo
YXJhY3RlckNvdW50KCpyYW5nZSk7CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFj
dGVyUmVjdHNGb3JSYW5nZSgqY29tcG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNl
dCk7CiAgICAgfQogCkBAIC00MzkyLDcgKzQzNTUsNyBAQCB2b2lkIFdlYlBhZ2U6OmZvY3VzVGV4
dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGVsZW1lbnRD
bwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6
OmNyZWF0ZSgqdGFyZ2V0RnJhbWUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRy
KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICB0YXJnZXRGcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlv
bi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KaW5kZXggYWRiOTkyM2Y1MTFkM2FkNmY1MjQ5ODJmOGZhNTJmMzAwYzhjM2JmYy4uY2ExYzk1
ZTQ4NDdiNzQ1ZWY0YjJjZDkyNWQzZTA4NmEyNzNmOWM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTMzOCw3ICszMzgs
NyBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFz
eW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRp
dGluZ1JhbmdlKTsKKyAgICBhdXRvIHJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1l
LCBlZGl0aW5nUmFuZ2UpOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFj
ayh7IH0sIEVkaXRpbmdSYW5nZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwMTQ0YjU5MWMxYjQxMDA4NWY2YjY2NWVkNTllMDRlZmM0
NzdkZDIuLmM3YzZjYzI0ZTY4MWFkY2RhNzYyYjJhNWU0Yjc1YjUyZDU1YjU5NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTg4LDcgKzE4OCw2IEBACiAJCTVDN0U3ODc2MjJEOTVGRTIwMDA2
QTIzMCAvKiBVbmlmaWVkU291cmNlMTEtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdFNzg2OTIyRDk1RkUyMDAwNkEyMzAgLyogVW5pZmllZFNv
dXJjZTExLW1tLm1tICovOyB9OwogCQk1Qzk3RUY2MzIzNDJDNTM0MDA2MDIwRDQgLyogVW5pZmll
ZFNvdXJjZTE5LW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM5N0VGNjEyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UxOS1tbS5tbSAq
LzsgfTsKIAkJNUM5N0VGNjQyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UyMC1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOTdFRjYy
MjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMjAtbW0ubW0gKi87IH07Ci0JCTVDOUE0
RTUzMjJERTQ2MjcwMDdEQjM1MyAvKiBET01VSUtpdEV4dGVuc2lvbnMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q0MzYzNzFENTdBQkVFMDBBQjg1
RUEgLyogRE9NVUlLaXRFeHRlbnNpb25zLm1tICovOyB9OwogCQk1QzlEOTI1QTIyRDdFOEFEMDA4
RTkyNjYgLyogU291cmNlcy50eHQgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDOUQ5MjU4MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCAqLzsg
fTsKIAkJNUM5RDkyNUIyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXNDb2NvYS50eHQgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUQ5MjU5MjJEN0U4
QUQwMDhFOTI2NiAvKiBTb3VyY2VzQ29jb2EudHh0ICovOyB9OwogCQk1QzlFRjJGNTIxRjA2MUJF
MDAzQkRDNTYgLyogUGFnZVN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUVGMkY0MjFGMDYxQkUwMDNCREM1NiAv
KiBQYWdlU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovOyB9OwpAQCAtMzQwMCw3ICszMzk5LDYg
QEAKIAkJCQkxQTkxMTlGNjFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUE2MDUxOTExNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3Bl
cnR5TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCODI5NThENDEzMjcwN0QwMDAwRDBFNzkg
LyogQ29ycmVjdGlvblBhbmVsLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUM5QTRFNTMyMkRFNDYy
NzAwN0RCMzUzIC8qIERPTVVJS2l0RXh0ZW5zaW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
NjA1MTkzMTc1MDJBNUQwMEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE4REVENTEwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM2NDAwNkUyMzk5NkU4MTAwMUUxODVF
IC8qIEluUHJvY2Vzc0lEQlNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbi5tbQppbmRleCAyYjNkMTljOWRhN2JkNzdjYjdkYTc2ZTZkZmViNWQ1MWNlMzU0YmMxLi4z
YjBlYjk1NGUwOWFmZDhjNzMwNWZmYWVlMTI0MWYxN2YyMTJkMWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBv
c2l0aW9uLm1tCkBAIC0yOTIsNyArMjkyLDcgQEAgLSAoQk9PTCl3aXRoaW5UZXh0VW5pdE9mR3Jh
bnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbkkKIC8v
IGlzIGVuY2xvc2VkIGRlcGVuZHMgb24gdGhlIGdpdmVuIGRpcmVjdGlvbiwgdXNpbmcgdGhlIHNh
bWUgcnVsZSBhcyAtW1dlYlZpc2libGVQb3NpdGlvbiB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJp
dHk6aW5EaXJlY3Rpb25BdEJvdW5kYXJ5Ol0uCiAtIChET01SYW5nZSAqKWVuY2xvc2luZ1RleHRV
bml0T2ZHcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0
aW9uSWZBdEJvdW5kYXJ5OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsK
LSAgICByZXR1cm4ga2l0KGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShbc2VsZiBfdmlz
aWJsZVBvc2l0aW9uXSwgdG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVjdGlv
bkRpcmVjdGlvbihkaXJlY3Rpb24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChlbmNsb3NpbmdU
ZXh0VW5pdE9mR3JhbnVsYXJpdHkoW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51
bGFyaXR5KGdyYW51bGFyaXR5KSwgdG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkpOwog
fQogCiAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwb3NpdGlvbkF0U3RhcnRPckVuZE9mV29yZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCBlYTMwOTg5MjQ5OGYzZjY0
ZWYwZjA2NDhmMzU0NWM1NTg1MWI5Njk1Li44NTg0YzIzMWZlZjhjOGQ4YjcwNmU4Zjk2ZWQwOGQ3
Mzg4NTNkZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRN
TC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNDQs
NiArNDQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJUZXh0Q29udHJvbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xNTIsNyArMTUzLDcgQEAgLSAoRE9NRG9jdW1l
bnRGcmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0
cmluZyAqKW1hcmsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZyYWdt
ZW50V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGlz
IGlzIG5vdCBhIGNvbnRleHR1YWwgZnJhZ21lbnQsIGl0IHdvbid0IGhhbmRsZSB3aGl0ZXNwYWNl
IHByb3Blcmx5LgotICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3JlKHNl
bGYpLT5jcmVhdGVSYW5nZSgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVG
cmFnbWVudEZyb21UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqY29yZShzZWxm
KSksIHRleHQpLnB0cigpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggODEwMGFiZTZiYmY3ZDg2OThkYTZl
Yzc1YmQ4YmFmOGYwZWU0ZDY5MS4uNGExOGRmNDU5YmJkNTkwZTJlMjFiNGYxOTQyMzI4MmZjMjI0
YzFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0
ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRl
bnNpb25zLm1tCkBAIC03OCw5ICs3OCwxMiBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2UgKFVJ
S2l0RXh0ZW5zaW9ucykKIAogLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9u
OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICBSYW5nZSAqcmFu
Z2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8gcmFuZ2UgPSBjb3JlKHNlbGYpOworICAgIGlmICgh
cmFuZ2UpCisgICAgICAgIHJldHVybjsKKwogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZy
YW1lU2VsZWN0aW9uOwotICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7CisgICAgZnJh
bWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZSgqcmFuZ2UpKTsKICAgICAK
ICAgICBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0
R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OwogICAgIC8vIFVudGlsIFdlYktpdCBz
dXBwb3J0cyB2ZXJ0aWNhbCBsYXlvdXQsICJkb3duIiBpcyBlcXVpdmFsZW50IHRvICJmb3J3YXJk
IGJ5IGEgbGluZSIgYW5kCkBAIC05MiwxMCArOTUsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIp
YW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24K
ICAgICAgICAgZGlyZWN0aW9uID0gV2ViVGV4dEFkanVzdG1lbnRCYWNrd2FyZDsKICAgICAgICAg
Z3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eTsK
ICAgICB9Ci0gICAgCisKICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFtb3VudDsgaSsrKQog
ICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25Nb3ZlLCAoV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOwotICAgIAorCiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0
aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIGlmIChzdGFydC5jb250YWluZXJOb2RlKCkpCkBAIC0xMDYsMTMg
KzEwOSwxNiBAQCAtICh2b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRl
eHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogCiAtICh2b2lkKWV4dGVuZDooVUludDMy
KWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9u
CiB7Ci0gICAgUmFuZ2UgKnJhbmdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvIHJhbmdlID0gY29y
ZShzZWxmKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKICAgICBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKLSAgICBmcmFtZVNlbGVjdGlvbi5tb3Zl
VG8ocmFuZ2UpOwotICAgIAorICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2lt
cGxlUmFuZ2UoKnJhbmdlKSk7CisKICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFtb3VudDsg
aSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OkFsdGVyYXRpb25FeHRlbmQsIChXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0
aW9uLCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAg
ICAKKwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3Rh
cnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFt
ZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
ICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQppbmRleCA3MWMwNGRiMjI5MzdhMzMwZTFhNDcz
ZjIxM2ZhYzgzYzk1NzMxZjBiLi5kM2FlN2Y2ZWY4M2QyMDhmMjY5YjZlMTYyZGJlMTQ1NDYyZGZi
OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0
aW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQpAQCAtNTIsNiArNTIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0
Zm9ybVdoZWVsRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYWRvd1Jvb3QuaD4KQEAgLTE4NCw3ICsxODUsNyBAQCBA
aW1wbGVtZW50YXRpb24gRE9NUmFuZ2UgKFdlYkRPTVJhbmdlT3BlcmF0aW9ucykKIAogLSAoV2Vi
QXJjaGl2ZSAqKXdlYkFyY2hpdmUKIHsKLSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10g
X2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNv
cmUoc2VsZikpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxsb2Nd
IF9pbml0V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgq
Y29yZShzZWxmKSldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCBiZDk1YTY2NDhhMzAzMmMwNTdhOTgxZTA5NDY5MDgw
ZTg4MTA2MzU5Li4yNTRhNjVhY2QyNjRmM2FhOTk5OGY1ZGQyM2Y4OTRiYjJhNjYyOTRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tCkBAIC0xMDI1LDExICsxMDI1LDEwIEBAIHN0YXRpYyBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiBjb3JlKE5TQXJyYXkgKmluY29taW5nUmVzdWx0cywgT3B0aW9uU2V0
PFRleHRDCiBzdGF0aWMgTlNVSW50ZWdlciBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBhdXRvIHNlbGVj
dGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9u
U3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBh
dXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChz
ZWxlY3Rpb25TdGFydCkpOwotICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFy
YWdyYXBoU3RhcnQpCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOworICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3Jh
cGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgcmV0dXJuIGNoYXJhY3Rl
ckNvdW50KCpyYW5nZSk7CiB9CiAKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIE9wdGlvblNl
dDxUZXh0Q2hlY2tpbmdUeXBlPiBjb3JlQ2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKQEAgLTExMTAsOCArMTEwOSw4IEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlCiAgICAgbV9sYXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2FuZGlkYXRlcyA9
IHNlbGVjdGlvbjsKIAogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rp
b25TdGFydCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwotICAgIGF1
dG8gc2VsZWN0aW9uTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
c2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQo
KSkgfSk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFj
dGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0
KSwgc2VsZWN0aW9uU3RhcnQpKTsKKyAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3Rl
ckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbi52aXNpYmxl
RW5kKCkpKTsKICAgICBhdXRvIGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFt
ZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogICAgIFN0cmlu
ZyBjb250ZXh0Rm9yQ2FuZGlkYXRlUmVxZXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVS
ZXF1ZXN0ID8gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KSA6IFN0
cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpp
bmRleCBiMzIwOWRiN2ViZTQ0MzliYjM2NmYwZmE1ODI2MTMwMTE1ZTkzZGZhLi5iNTZmNjIxOTc3
YTk5YWMyOWY0OWExMGNjNDEzMDAyYTFmYTI3ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTkzLDYgKzkzLDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0
YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KQEAgLTgz
Nyw3ICs4MzgsNyBAQCAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5n
ZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooVwogICAgIGlmICghcGFyYWdyYXBo
U3RhcnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzY29wZUVuZCA9IG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50
cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5lbmQ7CisgICAgYXV0byBzY29wZUVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSk7CiAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShXZWJDb3Jl
OjpyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1v
dmUoc2NvcGVFbmQpIH0sIHJhbmdlKSk7CiB9CiAKQEAgLTE0NzksNyArMTQ4MCw3IEBAIC0gKHZv
aWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxl
Y3Rpb25BZmZpbml0eSlhZmZpCiAKICAgICBhdXRvIGNvcmVDbG9zZVR5cGluZyA9IGNsb3NlVHlw
aW5nID8gRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMgOiBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vOwogICAgIGF1dG8gY29yZVVzZXJUcmlnZ2VyZWQg
PSB1c2VyVHJpZ2dlcmVkID8gVXNlclRyaWdnZXJlZCA6IE5vdFVzZXJUcmlnZ2VyZWQ7Ci0gICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShhZmZp
bml0eSksIGNvcmVDbG9zZVR5cGluZywgY29yZVVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKGNvcmUocmFuZ2UpKSwg
Y29yZShhZmZpbml0eSksIGNvcmVDbG9zZVR5cGluZywgY29yZVVzZXJUcmlnZ2VyZWQpOwogICAg
IGlmICghY2xvc2VUeXBpbmcpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLmVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCk7CiB9CkBAIC0x
NTQwLDEyICsxNTQxLDIwIEBAIC0gKE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKIAogLSAoaW50KXdvcmRPZmZzZXRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0g
ICAgcmV0dXJuIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRPZmZzZXRJblJhbmdlKGNvcmUo
cmFuZ2UpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlm
ICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLy8gRklY
TUU6IFRoaXMgd2lsbCBvbmx5IHdvcmsgaW4gY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiByZW1h
aW5zIGluIHRoZSBzYW1lIG5vZGUgYWZ0ZXIgaXQgaXMgZXhwYW5kZWQuCisgICAgcmV0dXJuIHN0
ZDo6bWF4PGludD4oMCwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSAtIGNvcmUocmFuZ2UpLT5zdGFydE9mZnNldCgpKTsKIH0KIAogLSAoQk9PTClzcGFjZUZvbGxv
d3NXb3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgIHJldHVybiBjb3JlKHNlbGYp
LT5zZWxlY3Rpb24oKS5zcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb3JlKHJhbmdlKSk7CisgICAg
cmV0dXJuIHJhbmdlICYmIGlzU3BhY2VPck5ld2xpbmUoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9u
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtYWtlU2ltcGxlUmFuZ2UoY29yZShyYW5nZSkp
LT5lbmQpKS5jaGFyYWN0ZXJBZnRlcigpKTsKIH0KIAogLSAoTlNBcnJheSAqKXdvcmRzSW5DdXJy
ZW50UGFyYWdyYXBoCkBAIC0xODcxLDcgKzE4ODAsNyBAQCAtIChOU1N0cmluZyAqKXN0cmluZ0Zv
clJhbmdlOihET01SYW5nZSAqKXJhbmdlCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNl
bWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0
Y2hTdHlsZQogewogICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIERPTURvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIERPTURvY3VtZW50
RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBz
bWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6bWF0Y2hTdHlsZV07CiB9CiAKQEAg
LTE5NTQsNyArMTk2Myw3IEBAIC0gKEJPT0wpaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24KIC0g
KHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJl
cGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFy
dFJlcGxhY2UKIHsKICAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBET01Eb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBET01Eb2N1bWVu
dEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQo
KnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQg
c21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107CiB9CiAKQEAgLTIyNjMs
NyArMjI3Miw4IEBAIC0gKE5TQXJyYXkgKilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFNjYWxl
RmFjdG9yOihmbG9hdClwcmludFNjYWxlRmFjdG9yIHBhZ2VTCiAKIC0gKERPTURvY3VtZW50RnJh
Z21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAg
IHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqY3JlYXRlTGl2ZVJhbmdlKF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLCB0ZXh0KS5wdHIoKSk7CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJu
IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkg
OiBuaWw7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZv
cldlYkFyY2hpdmU6KFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggM2E1YmIwNGJjMzRiODE2Yjk5ZGNlMzNkZDcz
MDY1ZWViNjRlNTQ4Ni4uYTE4NTY4ZWY1YjVkZjhhMGFkOWE0Y2U0YzJiNmNlZjY3YzQ4NWViMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTk1LDYg
KzE5NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Byb2dy
ZXNzVHJhY2tlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgpAQCAtNzkyOSw4ICs3OTMwLDcgQEAgLSAoRE9NUmFu
Z2UgKilET01SYW5nZU9mU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvOihET01S
YW5nZSAqKXByZXZpb3UKIHsKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+cGFnZS0+cmFuZ2VPZlN0cmluZyhz
dHJpbmcsIGNvcmUocHJldmlvdXNSYW5nZSksIGNvcmVPcHRpb25zKG9wdGlvbnMpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+cGFnZS0+cmFuZ2VPZlN0cmluZyhzdHJpbmcsIG1h
a2VTaW1wbGVSYW5nZShjb3JlKHByZXZpb3VzUmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucykp
KTsKIH0KIAogLSAodm9pZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFt
ZURvY3VtZW50UmVhZHkKQEAgLTg0NTYsNyArODQ1Niw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRE
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlz
ZWxlCiAgICAgICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwg
Y29yZShzZWxlY3Rpb25BZmZpbml0eSksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpLCBjb3JlKHNlbGVjdGlvbkFm
ZmluaXR5KSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMp
OwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405250</attachid>
            <date>2020-07-26 09:26:17 -0700</date>
            <delta_ts>2020-07-26 10:17:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200726092615.patch</filename>
            <type>text/plain</type>
            <size>246324</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3ODc1ZWI3NWJhMjRl
NmI2NGU0MDUyNjlmNTA1YjU5YjRiMDYzYS4uMTdlYTBkYjcyZWFiOWQ5ZWI5N2M2ZGVhODg4Zjk5
ZGQyNzZhMTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgcGx1Z2luRWxl
bWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdCgpIHNob3VsZCBzdXBwb3J0IFZNSW5xdWlyeSBy
ZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IDIyNDA0MjQzMDc2ZGU0YWQzMDllZjlkZDA1M2I5NzEzNmFkNzFkYTIuLmJlYjcy
MTJjNzUzMTc2NjgwM2FhYWVlYzY5ZTI5NGIyNmI4MDAxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODMsNiArODMsNyBAQAogI2lu
Y2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0
YWNobWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKQEAgLTE2NiwxMCArMTY3LDEwIEBAIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
CiBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0OjpBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3Rh
cnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgICAgIG1fcmVwbGFjZWRS
YW5nZS5zdGFydEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CiAgICAg
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgICAgICBtX3JlcGxhY2VkVGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBp
bmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIG1fcmVwbGFjZWRSYW5nZS5l
bmRJbmRleC5zY29wZSk7CisgICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFs
dWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBtX3Jl
cGxhY2VkUmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG1fcmVwbGFjZWRSYW5nZS5lbmRJbmRleCA9IG1fcmVwbGFjZWRSYW5nZS5zdGFydEluZGV4Owog
ICAgIH0KQEAgLTE5ODUsMTIgKzE5ODYsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2Jq
ZWN0Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UKICAg
ICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBv
c2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwog
Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07Ci0gICAg
aWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmICghc2VhcmNo
UmFuZ2UgfHwgc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byB0YXJnZXRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHNlYXJj
aFJhbmdlLnN0YXJ0LCBvcmlnaW5hbFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKLSAgICByZXR1cm4gZmluZENsb3Nl
c3RQbGFpblRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwor
ICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS0+c3Rh
cnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4
dCgqc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCiBzdGF0
aWMgYm9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKQEAgLTI4ODAsMTggKzI4ODEs
MTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgQVgKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOwotICAgIGlmICghYm91bmRhcnkp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShvYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KHBvaW50KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5kYXJ5
LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZz
ZXRGb3JSYW5nZSgqcmFuZ2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogewot
ICAgIGF1dG8gYm91bmRhcnkgPSBtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9p
bnQpOwotICAgIGlmICghYm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9pbnQpKTsKKyAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0cnVlKTsKKyAgICByZXR1
cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7CiB9CiAK
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXJzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDk3ZDMwODgzMWIz
N2EyYzM1MTU3MGM1OTUxNzBkMWI4OTJmMmYzZWYuLmQ0YWI1OTM3NTQ1NTI5ZjMzN2VlNDA0Zjc5
YmMzYWU3YjM4YjMzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTcyMSw3ICs3MjIs
NyBAQCBWZWN0b3I8U3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJh
dGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewot
ICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZSh0ZXh0UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCisgICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBT
dHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0UmFuZ2UpOwpAQCAtOTgwLDIxICs5ODEsMTkgQEAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGkKICAgICAgICAgZW5kUG9zID0gdmlzaWJsZVBvczE7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zLCBlbmRQb3Mp
OworICAgIHJldHVybiB7IHN0YXJ0UG9zLCBlbmRQb3MgfTsKIH0KIAogVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHZpc2libGVQb3MsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3Np
dGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gc3RhcnRPZldvcmQodmlzaWJsZVBvcywgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOworICAgIHJldHVybiB7IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQp
IH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc2l0
aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAog
ewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJs
ZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0g
c3RhcnRPZldvcmQodmlzaWJsZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICByZXR1
cm4geyBzdGFydCwgZW5kT2ZXb3JkKHN0YXJ0KSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHVwZGF0ZUFYTGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtMTA0NCw4ICsxMDQzLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXMKICAgICB9IGVsc2UKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHVwZGF0ZUFY
TGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKHByZXZWaXNpYmxlUG9zKTsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZE9mTGluZShwcmV2VmlzaWJsZVBvcykgfTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmlnaHRMaW5l
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBj
b25zdApAQCAtMTA3OCwyMyArMTA3NiwyMSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaQogICAg
ICAgICBlbmRQb3NpdGlvbiA9IGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcyk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiB9OwogfQogCiBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogRk8gMiBJTVBMRU1FTlQgKGN1cnJlbnRseSByZXR1cm5zIGluY29ycmVjdCBhbnN3ZXIpCiAg
ICAgLy8gUmVsYXRlZD8gPHJkYXI6Ly9wcm9ibGVtLzM5Mjc3MzY+IFRleHQgc2VsZWN0aW9uIGJy
b2tlbiBpbiA4QTMzNgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRP
ZlNlbnRlbmNlKHZpc2libGVQb3MpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGVuZE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRp
b24gPSBzdGFydE9mU2VudGVuY2UodmlzaWJsZVBvcyk7CisgICAgcmV0dXJuIHsgc3RhcnRQb3Np
dGlvbiwgZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKSB9OwogfQogCiBWaXNpYmxlUG9zaXRp
b25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24pOwot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bik7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9z
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRPZlBhcmFncmFwaChzdGFydFBvc2l0
aW9uKSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKQEAgLTExNDYsOSArMTE0Miw5IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
IGNvbnN0CiB7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0T2ZTdHlsZVJhbmdlKHZpc2libGVQb3MpLCBlbmRP
ZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykpOworICAgIHJldHVybiB7IHN0YXJ0T2ZTdHlsZVJhbmdl
KHZpc2libGVQb3MpLCBlbmRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykgfTsKIH0KIAogLy8gTk9U
RTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCkBAIC0x
MTU2LDEyICsxMTUyLDExIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhCiB7CiAgICAgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7
CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnQpOwogICAgIHN0YXJ0UG9zaXRpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5n
ZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRQb3NpdGlv
biwgdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpIH07
CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZv
clBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTEx
ODMsOSArMTE3OCw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4CiAKIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdAogewotICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIHJldHVybiB7IHN0YXJ0T2ZMaW5lKHZpc2libGVQb3NpdGlvbiksIGVuZE9mTGlu
ZSh2aXNpYmxlUG9zaXRpb24pIH07CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVw
bGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKQpAQCAtMTI3MSwxNSAr
MTI2NCwxMiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmIHZpc2libGVQb3NpdGlvblJhbmdlKQogewotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7Ci0gICAgaWYgKCFzdGFydCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2li
bGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0gICAgaWYgKCFlbmQpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFu
Y2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwg
bm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIg
aW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8v
IEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxpc3QgbWFya2VyIHRleHQuCkBAIC0x
Mjk4LDE2ICsxMjg4LDEzIEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nCiB7CiAgICAgLy8gRklY
TUU6IE11bHRpLWJ5dGUgc3VwcG9ydAogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90IHJldHVybiAwPwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVu
ZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90
IHJldHVybiAwPwogCiAgICAgLy8gRklYTUU6IFVzZSBjaGFyYWN0ZXJDb3VudCBpbnN0ZWFkIG9m
IHdyaXRpbmcgb3VyIG93biBsb29wPwogICAgIGludCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAgICAgIGxlbmd0aCAr
PSBpdC50ZXh0KCkubGVuZ3RoKCk7CkBAIC0xNDMxLDE2ICsxNDE4LDEzIEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5j
ZSBlbmQuCiAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFlbmQpCisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24p
LCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIC8vIEFuIGVtcHR5IGxpbmUgaXMgY29uc2lkZXJlZCBhIHNlbnRlbmNl
LiBJZiBpdCdzIHNraXBwZWQsIHRoZW4gdGhlIHNlbnRlbmNlIHBhcnNlciB3aWxsIG5vdAogICAg
IC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9u
IG9mIHRoZSBlbXB0eSBsaW5lLgotICAgIHJldHVybiBoYXNBbnlQbGFpblRleHQoeyAqc3RhcnQs
ICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0UG9zaXRpb247Cisg
ICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gZW5kT2ZTZW50ZW5jZShuZXh0UG9z
aXRpb24pIDogbmV4dFBvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTE0NTAsMTUgKzE0MzQsMTIgQEAgVmlzaWJsZVBvc2l0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNv
bnN0IFZpc2libGUKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNl
IHN0YXJ0LgogICAgIGF1dG8gcHJldmlvdXNQb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7
Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKHByZXZpb3Vz
UG9zaXRpb24pKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1
dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsK
LSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzUG9zaXRpb24pLCBlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOworICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUcmVhdCBlbXB0eSBs
aW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCi0gICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7
ICpzdGFydCwgKmVuZCB9KSA/IHN0YXJ0T2ZTZW50ZW5jZShwcmV2aW91c1Bvc2l0aW9uKSA6IHBy
ZXZpb3VzUG9zaXRpb247CisgICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gc3Rh
cnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlvdXNQb3NpdGlvbjsKIH0KIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRQYXJhZ3JhcGhFbmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMjAzMSw3ICsy
MDEyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlVGV4dEluUmFuZ2UoY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAgICAvLyBBbHNvIG9ubHkgZG8gdGhp
cyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUuCiAgICAgYXV0byYgZnJhbWUgPSBy
ZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50LnNob3VsZFVzZUlucHV0TWV0aG9k
KCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpLmdldCgpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5n
ZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vt
ZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpObywgRWRpdG9yOjpTbWFydFJl
cGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaAppbmRleCBkYzY1NGZjMmIxMmE0ODczODg0ZjYxYmQ1YjY3MTk1ZWI5Mzk3MzgwLi40NWNk
OGVhOTRmYWQyZGRiOTg4NTdkYTFmNjYxNTU3MTIwZmQ1MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaApAQCAtNDMwLDI0ICs0MzAsNiBAQCBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlWaXNpYmxl
UG9zaXRpb25Gb3JCb3VuZHMgewogICAgIExhc3QsCiB9OwogCi1zdHJ1Y3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGUpCi0gICAgICAgIDogc3RhcnQocykKLSAgICAgICAgLCBlbmQoZSkKLSAgICB7
IH0KLQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLSAgICAgICAgOiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAgLCBl
bmQoc2VsZWN0aW9uLmVuZCgpKQotICAgIHsgfQotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KLX07Ci0KIGVudW0gY2xh
c3MgQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlIHsgU3Vic2NyaXB0LCBTdXBlcnNj
cmlwdCB9OwogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlw
ZSB7IFByZVN1YnNjcmlwdCwgUHJlU3VwZXJzY3JpcHQsIFBvc3RTdWJzY3JpcHQsIFBvc3RTdXBl
cnNjcmlwdCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYjRiYTBkODc4MjNjZDJmODAy
Mzg5MDcxNzVhMmQ5MWEwMWFiOGU3Li40NDg2MmFiNmEyZWJiZjI3YThlYWY1ZWM0NmQ3MDU4ZDNh
MzFjYWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTY0OSwxMiArNjQ5LDkgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkUmVuZGVyZXIgJiYg
Zmlyc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkgJiYgbGFzdENoaWxkUmVuZGVyZXIgJiYgbGFzdENo
aWxkUmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGRlZmluZSB0aGUg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgZm9yIHRoZSByYW5nZSBhcyB0aGUgb25lcyByaWdodCBi
ZWZvcmUgYW5kIGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGFuZCB0aGUgbGFz
dCBub2RlcyBpbiB0aGUgRE9NIHRyZWUgdGhhdCBpcyB3cmFwcGVkIGluc2lkZSB0aGUgYW5vbnlt
b3VzIGJsb2NrLgotICAgICAgICAgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluQmxvY2sgPSBmaXJz
dENoaWxkUmVuZGVyZXItPm5vZGUoKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZmlyc3ROb2RlSW5CbG9jayk7Ci0g
ICAgICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKGxhc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgICAgICAgICAgbm9k
ZURvY3VtZW50ID0gJmZpcnN0Tm9kZUluQmxvY2stPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4dFJhbmdlID0geyB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9IH07CisgICAgICAgICAgICAgICAgYXV0byYg
Zmlyc3ROb2RlSW5CbG9jayA9ICpmaXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay5kb2N1bWVudCgpOworICAg
ICAgICAgICAgICAgIHRleHRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZSgmZmlyc3ROb2RlSW5CbG9jayksIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTkxNyw3ICs5MTQsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
aW5rQ2xpY2tQb2ludCgpCiAgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24geyBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OwogICAgICAgICBhdXRv
IGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwogICAgICAgICBpZiAoIWVuZC5pc051
bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSkuY2VudGVyKCkg
fTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsK
IH0KQEAgLTkzNSw5ICs5MzIsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjbGlja1BvaW50KCkKICAgICBpZiAoIWlzV2ViQXJlYSgpIHx8ICFjYW5TZXRWYWx1ZUF0dHJp
YnV0ZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgp
OwogICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSkuY2VudGVyKCk7
CisgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbigpKS5j
ZW50ZXIoKTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdApAQCAtMTk5MCw3ICsxOTg1LDYg
QEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAgICAgCi0gICAgLy8gY29uc3RydWN0IFZpc2li
bGVQb3NpdGlvbnMgZm9yIHN0YXJ0IGFuZCBlbmQKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJl
ci0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7CkBAIC0yMDA4LDcgKzIwMDIsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAg
ICAgICAgICBlbmRQb3MgPSBzdGFydFBvczsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFy
dFBvcyksIFdURk1vdmUoZW5kUG9zKSB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWdu
ZWQgbGluZUNvdW50KSBjb25zdApAQCAtMjAzOCw3ICsyMDMyLDcgQEAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JM
aW5lKHVuc2kKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlz
aWJsZVBvcykpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25FeHRlbmQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQsIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5KTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0
aW9uLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGlvbigpOwogfQogICAgIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGludCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0YzU0ZDFhYWQzMWRkMC4u
MmExNmY3MGM3ZDI5NWFmNDZhNTg3OTkzMTdkNGRlNTI5OTcyNGUzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY2LDYgKzY2LDcgQEAKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW1wb3J0ICJQbHVnaW5WaWV3QmFz
ZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlcklubGluZS5oIgogI2ltcG9y
dCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKQEAgLTE4NTAs
NyArMTg1MSw3IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuCiAgICAgaWYgKCF0ZXh0TWFya2Vy
UmFuZ2UpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRP
ZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9u
Rm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAgIHJl
dHVybiB7IHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRl
eHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNh
Y2hlLCB0ZXh0TWFya2VyUmFuZ2UpIH07CiB9CiAKIC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENo
aWxkcmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZDc0MmU3MTlkODUwYzcyZTc5OTFm
ZjU3NGYyZjM5ODQzYjgzYTFkLi5iNjVmZTljMzkwNjM0NTMyNDk1ZDU2MDJjZmRjNTZkMmVlYjYz
MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgog
I2luY2x1ZGUgIlF1aXJrcy5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA2OWU1YTliYTY5
MTQ2NmI2MTBhZjllZGJiMzQwMjhjMzkxNDQxMjFjLi5jNTY2MGZjYmVjMWU2ZWViYmU4NWY1NzNj
NDRmODQyNDc3MzNkZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUwZS4uN2EyMGE1
ZjM5MDY2NmUyMjYyZGMxYTQ1ODVjOTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiUmFkaW9C
dXR0b25Hcm91cHMuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0NTNlYjY4NTEy
MGNiNDdkZTUzOTU1OS4uZDMxMjI1NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2EzNTFiNmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdl
IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdjZTgxYmJjMjE3
MGUzODVmY2FjZGUwYzZhMjU5Li5kYmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZkY2FjZTdhOGFm
MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBv
ZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgaWYgKCFwb2lu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpwb2ludCwg
KnBvaW50IH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHBvaW50KQoreworICAgIGlmICghcG9pbnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7CisgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpwb2ludCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisKIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQogewogICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKQEAgLTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0KIAorUmVmUHRy
PE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFp
bmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAppbmRleCAwY2UwYmExOGU0ZGM3ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0Li5mYTZhZjU0
NGIzNzEzMjU3ODYxYzgyNTJiMGFlNWY4YmFjYmYxNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaApAQCAtNTEsMTMgKzUxLDMzIEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25z
dCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5k
YXJ5UG9pbnRIZWxwZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpIHsgcmV0dXJuIHBvaW50
OyB9CitpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBlcihCb3VuZGFy
eVBvaW50JiYgcG9pbnQpIHsgcmV0dXJuIFdURk1vdmUocG9pbnQpOyB9Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBhdXRvIG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4gZGVj
bHR5cGUobWFrZUJvdW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSkpCit7Cisg
ICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHN0ZDo6Zm9yd2FyZDxUPihhcmd1bWVudCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5nZShUJiYgLi4u
YXJndW1lbnRzKSAtPiBkZWNsdHlwZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRI
ZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKSkKK3sKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKHN0ZDo6Zm9yd2FyZDxUPihhcmd1
bWVudHMpKS4uLik7Cit9CisKIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRvIGhhdmUgc2hv
cnRlciBuYW1lczsgYW5vdGhlciBvcHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0byBtYWtlU2lt
cGxlUmFuZ2UuCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3MgSW50ZXJzZWN0
aW5nTm9kZVJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXggOGE0ODQzYjFk
MjYyZmRjYmVlM2M3OTAyMjAxMGY2YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0
YzcyY2NiMDM3YzZhZGQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCkBAIC0yNyw3
ICsyNyw2IEBACiAjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUgIkNvbnRhaW5l
ck5vZGUuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMw
ZTYwZTcxMzE0My4uODc4MWJkMTAwNzgyOTA0YTQxMGFmZTFhY2VhNWY5NzZjZjI4ZTNkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwCkBAIC00NzQsMTUgKzQ3NCwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAg
IGlmIChlbmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJh
bmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBzdHJpbmcgPSBw
bGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24s
IGVuZE9mU2VsZWN0aW9uKTsKKyAgICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJhbmdlKQorICAg
ICAgICByZXR1cm47CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNF
ZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZl
IGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNw
YWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0
IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0g
ICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5n
Rm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCku
YWRkTWFya2VyKCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0
ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJr
ZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCkBAIC01MDAsMTAgKzUwMiwxMSBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygp
OwotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtl
Qm91bmRhcnlQb2ludChiZWZvcmVQcmVjZWRpbmdDaGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5h
dGl2ZS5zdGFydCB9OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZl
LnN0YXJ0KS5wcmV2aW91cygpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCk7CisgICAgaWYg
KCFwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Zm9yIChhdXRvJiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJh
Y3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgeworICAg
IGZvciAoYXV0byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAg
ICAgICAgIGlmIChtYXJrZXItPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0
YjA5NTRlMDIxZTRlZC4uMGU1NGQzMGNkMjliYjEzYjAzNDFlMDUzYzk2MTE1NTJjNjQ3YjQ3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0
NiwxMyArMjQ2LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShF
ZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNjb3BlU3Rh
cnQgPSBCb3VuZGFyeVBvaW50IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5
UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91
bmRhcnlQb2ludCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KHsgc2NvcGVTdGFydCwgKnN0YXJ0Qm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAgYXV0byBlbmRJ
bmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwg
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwor
ICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgcmFuZ2Ut
PnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9z
aXRpb25zKTsKKyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0
LCByYW5nZS0+ZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVTdGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFy
YWdyYXBoU3RhcnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM3
MWM3OWYyN2Q5ZGMzZGVmNzg1NjBmZjAwZWIzNjQ1Y2RjZjI5NzUuLjI5MDU0ZjhkOTFmZWI1YmIw
ZGU0Mjk5MzQ3ZWFlZjM1ZGViZWZjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSW5z
ZXJ0VGV4dENvbW1hbmQuaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEz
MSw3ICsxMzAsNyBAQCBzdGF0aWMgU3RyaW5nIHN0cmluZ0ZvclZpc2libGVQb3NpdGlvbkluZGV4
UmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uSW5kZXhSYW5nZQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5k
ZXgocmFuZ2Uuc3RhcnRJbmRleC52YWx1ZSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZS5nZXQoKSk7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdl
LmVuZEluZGV4LnZhbHVlLCByYW5nZS5lbmRJbmRleC5zY29wZS5nZXQoKSk7Ci0gICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2li
bGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoeyBXVEZNb3ZlKHN0YXJ0KSwgV1RG
TW92ZShlbmQpIH0pOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6
OnRleHREZWxldGVkQnlVbmFwcGx5KCkKQEAgLTE0MjAsMTggKzE0MTksMTQgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBz
dGFydE9mUGFyYWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7
CiAgICAgICAgICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1
dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAg
ICAgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxl
U3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0YXJ0KQotICAgICAg
ICAgICAgICAgICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3Rh
cnQsICpzZWxlY3Rpb25TdGFydCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2VUb1Nl
bGVjdGlvblN0YXJ0ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZp
c2libGVTdGFydCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJD
b3VudCgqcmFuZ2VUb1NlbGVjdGlvblN0YXJ0LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNC
ZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGVuZEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAgICAg
ICAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOwotICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQot
ICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFw
aFN0YXJ0LCAqc2VsZWN0aW9uRW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRv
U2VsZWN0aW9uRW5kID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZp
c2libGVFbmQpKQorICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50
KCpyYW5nZVRvU2VsZWN0aW9uRW5kLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0xNDQ0LDE3ICsxNDM5LDE1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgUG9zaXRp
b24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0
cmVhbSgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVp
dmFsZW50KCkudXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBi
ZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3Np
dGlvbnMiCi0gICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gZW5k
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3Rh
cnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBs
aWFudC5kZXByZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKKyAgICAvLyBzdGFydCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkg
dG8gY3JlYXRlIGEgcmFuZ2Ugc2luY2UgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIi4KKyAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpLCBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGlu
IHRoZSBwYXJhZ3JhcGggdG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3Vn
aCwgc2luY2UgbW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRoaXMgdXNlZCB0
byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29uZnVzZWQgc29t
ZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3Vh
bEFwcGVhcmFuY2UocmFuZ2UuZ2V0KCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6
Ok5vLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmluZygpKTsKKyAgICAg
ICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFs
aXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJp
bmcoKSk7CiAKICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3
aGVuIHdlIGNvcHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5n
IGlmIHdlJ3JlIGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFw
aCBjYW4gaGF2ZSBzdHlsZQpAQCAtMTUwNCw3ICsxNDk3LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXAKICAgICBpZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRv
Y3VtZW50KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7
IHsgKmVkaXRhYmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8gZGVz
dGluYXRpb25JbmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAwIH0sICpt
YWtlQm91bmRhcnlQb2ludChkZXN0aW5hdGlvbikgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0
ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkpOwog
ICAgIEFTU0VSVChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg3
MGM0ZGJiNjhkMzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMuLmY2NWRmNDQ5Njg3ZDNmNTMz
Mjk1N2ZmODQ4MTRmZGM3ZWY3ODZiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGE3
ODdkZmFhZjFjNTEyODk2ZjZlN2JiMTc2NWVhMzQ4M2RkMTUyODQuLmRkZTUyNTAxMzM4M2NhYTdm
NjFlYWViNTNlOTk1YjcyMjFlYTE1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApA
QCAtMTEwNCwyNyArMTEwNCwyMSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAg
ICAgc2NvcGUgPSAmZG9jdW1lbnQ7CiAgICAgfQogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKLSAgICBpZiAoIXN0
YXJ0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWVuZCkKKyAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUu
Z2V0KCkpLCBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAq
c3RhcnQsICplbmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVy
YXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogLy8g
RklYTUU6IE1lcmdlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRv
IHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gZW5kID0gbWFrZUJv
dW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFu
Z2UoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVu
ZCB9LCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
cik7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2Vy
dmF0aW9uID8gVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMgOiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggN2I1ZTJlZWNhNDNlZWU1MjFkODYwYzQ4NTZhYWI3MWJmZGFiOGFiMC4uNDI5NDA0ZmVmNDAx
OWVkYTFmODdiOTA3ZjA0MmJiMGJjOTBhN2I5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtNjk2LDcgKzY5Niw4IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYm
IGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKLSAgICAgICAgU3RyaW5nIHRl
eHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShj
b21tYW5kLT52aXNpYmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOworICAgICAgICBhdXRv
IHNlbGVjdGlvbiA9IGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKTsK
KyAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShzZWxlY3Rpb24pOwogICAgICAgICByZXBsYWNlZFRleHQucG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNo
ZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KQEAgLTcy
NSw3ICs3MjYsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNlbGVjdFJl
cGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0FjdGlvbik7
CisgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5
bGU6OlllcywgZWRpdGluZ0FjdGlvbik7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQpAQCAtMjEyMCw4ICsyMTIxLDcgQEAgdm9pZCBFZGl0b3I6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
VW5kZXJsaW4KIAogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zm
c2V0ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBlbmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVu
ZCksIGV4dGVudE9mZnNldCk7Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2Rl
LCBlbmQpOwotICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6Tm8pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHsgeyB7ICpiYXNlTm9kZSwgc3RhcnQgfSwgeyAqYmFzZU5vZGUsIGVu
ZCB9IH0gfSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpO
byk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyOTUsNyArMzI5NSw3IEBAIFN0cmluZyBFZGl0
b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKICAg
ICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwg
c3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCiAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBwbGFpblRleHQoU2ltcGxlUmFu
Z2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9
LCBiZWhhdmlvcikucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKTsKKyAgICByZXR1cm4gcGxh
aW5UZXh0KCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCksIGJlaGF2aW9yKS5yZXBsYWNlV2l0
aExpdGVyYWwoJ1wwJywgIiIpOwogfQogCiBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4g
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTM3
MTMsNyArMzcxMyw3IEBAIHN0YXRpYyBTaW1wbGVSYW5nZSBleHRlbmRTZWxlY3Rpb24oY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCB1bnNpZ25lZCBjaGFyYWN0ZXJzCiAgICAgICAgIHN0YXJ0ID0g
c3RhcnQucHJldmlvdXMoQ2hhcmFjdGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFj
dGVyKTsKICAgICB9Ci0gICAgcmV0dXJuIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCl9OworICAgIHJldHVybiAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0
LCBlbmQpOwogfQogCiB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJl
cnMoKQpAQCAtMzkyNyw5ICszOTI3LDcgQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBs
YWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiBTdHJpbmcgRWRpdG9y
OjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rp
b24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gcmFuZ2Ug
PSBzZWxlY3Rpb24uaXNDYXJldCgpCi0gICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0
aW9uLnN0YXJ0KCkpCi0gICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYg
KCFjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCkBAIC0zOTQwLDExICszOTM4
LDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSkpOwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkp
OwotICAgIGlmICghc3RhcnQgfHwgIWVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICByZXR1cm4geyB7ICpzdGFydCwgKmVuZCB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVS
YW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IEVkaXRvcjo6cmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5n
UmVzdWx0JiByZXN1bHQpIGNvbnN0CkBAIC00MjI5LDkgKzQyMjMsOCBAQCB2b2lkIEVkaXRvcjo6
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlk
YXRlKQogICAgIH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJl
cGxhY2VtZW50LCBudWxscHRyKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gaW5zZXJ0ZWRDYW5kaWRh
dGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5k
YXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQubGVuZ3RoKCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChpbnNl
cnRlZENhbmRpZGF0ZVJhbmdlKQotICAgICAgICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqaW5zZXJ0ZWRDYW5k
aWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2NlcHRlZENh
bmRpZGF0ZS5yZXBsYWNlbWVudCk7CisgICAgaWYgKGF1dG8gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5n
ZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVu
Z3RoKCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKQorICAgICAgICBpbnNlcnRlZENh
bmRpZGF0ZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcigqaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2Fu
ZGlkYXRlLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CiAKICAgICBtX2lzSGFuZGxp
bmdBY2NlcHRlZENhbmRpZGF0ZSA9IGZhbHNlOwogfQpAQCAtNDI2Miw3ICs0MjU1LDcgQEAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiAgICAg
Ly8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1
ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8gV2hvZXZlciB3cm90ZSB0aGlzIGNvZGUgb3JpZ2lu
YWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhlIHJhdGlvbmFs
ZS4KICAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewot
ICAgICAgICBpZiAoYXV0byBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRh
ZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLT5zdGFy
dC5jb250YWluZXIsIHJhbmdlLT5lbmQuY29udGFpbmVyKS5nZXQoKSksIEhUTUxOYW1lczo6YVRh
ZykpIHsKKyAgICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqcmFu
Z2UpLmdldCgpKSwgSFRNTE5hbWVzOjphVGFnKSkgewogICAgICAgICAgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWlu
ZXIucHRyKCkpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkgPj0g
MCkKICAgICAgICAgICAgICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGVDb250ZW50cygqZW5jbG9zaW5nQW5jaG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0
NTIyOTEwZTY1YzZhOTEzYy4uYTFkMTk0MzZmNjZlYTJkZDZmZTllMzQ2ODgxNDk5MjZhN2QxOGI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xODIsMTAg
KzE4Miw4IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUm
IGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAgaWYgKCFuZXdSYW5nZSB8fCBu
ZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGFm
ZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5j
bGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdSYW5nZSwg
YWZmaW5pdHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCks
IGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2Up
CisgICAgICAgICYmIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKm5ld1Jhbmdl
LCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogfQog
CiBzdGF0aWMgVHJpU3RhdGUgc3RhdGVTdHlsZShGcmFtZSYgZnJhbWUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgY29uc3QgY2hhciogZGVzaXJlZFZhbHVlKQpAQCAtMzU0LDkgKzM1Miw3IEBA
IHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5n
ZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMpOwotICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwotICAgICAgICBpZiAo
IXNlbGVjdGVkKQorICAgICAgICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9u
UmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVsZXRlKCk7
CkBAIC0xMDU2LDggKzEwNTIsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQ
QUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdl
cygqbWFyaywgKnNlbGVjdGlvbikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxl
Y3Rpb24pLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RXb3JkKEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQpAQCAtMTU3MSw3ICsxNTY2
LDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQq
KQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgpIHx8
ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5k
OjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpKS5nZXQoKSk7CisgICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9y
bWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5m
aXJzdFJhbmdlKCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVtZW50LT5sb2NhbE5h
bWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApp
bmRleCBlNDM2YzdmZGUyMWRiYjIwMzRiNTljNWI5NTI4OWZhM2NmZWQ3MGE5Li5iZjUyZTBjMDQ0
YjdjYWMzMWYxNDlkNGEyNjM0Mjk1YjEyYzI0ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNjgsMTQgKzY3LDE0IEBAIHZvaWQgRm9y
bWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQsCiAgICAgUmVmUHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkg
OiBzcGxpdFRyZWVUb05vZGUoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksICpub2RlVG9TcGxpdFRv
KTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24gPSBvdXRlckJs
b2NrOwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnQs
IGVuZE9mU2VsZWN0aW9uKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0
LCBlbmRPZlNlbGVjdGlvbik7CiAgICAgRWxlbWVudCogcmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoZW5kKTsKICAgICBFbGVtZW50KiByb290ID0gZWRpdGFibGVSb290Rm9yUG9z
aXRpb24oc3RhcnQpOwogICAgIC8vIFJvb3QgaXMgbnVsbCBmb3IgZWxlbWVudHMgd2l0aCBjb250
ZW50ZWRpdGFibGU9ZmFsc2UuCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1l
KCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwg
cmFuZ2UuZ2V0KCkpKQorICAgICAgICAmJiAoZW5kID09IGVuZE9mQmxvY2soZW5kKSB8fCAocmFu
Z2UgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwgKnJhbmdlKSkpCiAg
ICAgICAgICYmIHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9vdC0+aXNEZXNjZW5kYW50T2YoKnJlZk5v
ZGUpKSB7CiAgICAgICAgIC8vIEFscmVhZHkgaW4gYSBibG9jayBlbGVtZW50IHRoYXQgb25seSBj
b250YWlucyB0aGUgY3VycmVudCBwYXJhZ3JhcGgKICAgICAgICAgaWYgKHJlZk5vZGUtPmhhc1Rh
Z05hbWUodGFnTmFtZSgpKSkKQEAgLTk5LDIzICs5OCwyMiBAQCB2b2lkIEZvcm1hdEJsb2NrQ29t
bWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kLAogICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGxhc3RQYXJhZ3JhcGhJbkJsb2Nr
Tm9kZSk7CiB9CiAgICAgCi1FbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JG
b3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2UqIHJhbmdlKQorRWxlbWVudCogRm9ybWF0QmxvY2tDb21t
YW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRh
aW5lcigpOwotICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0
QmxvY2soY29tbW9uQW5jZXN0b3IpKQorICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25J
bmNsdXNpdmVBbmNlc3RvcigqcmFuZ2UpOworICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAh
aXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0b3IuZ2V0KCkpKQogICAgICAgICBj
b21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJlbnROb2RlKCk7Ci0KLSAgICBpZiAo
IWNvbW1vbkFuY2VzdG9yKQorICAgIGlmICghaXM8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
YXV0byByb290RWRpdGFibGVFbGVtZW50ID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogICAgIGlmICghcm9vdEVkaXRhYmxlRWxlbWVudCB8fCBjb21tb25B
bmNlc3Rvci0+Y29udGFpbnMocm9vdEVkaXRhYmxlRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkgPyBk
b3duY2FzdDxFbGVtZW50Pihjb21tb25BbmNlc3RvcikgOiBudWxscHRyOworICAgIHJldHVybiAm
ZG93bmNhc3Q8RWxlbWVudD4oKmNvbW1vbkFuY2VzdG9yKTsKIH0KIAogYm9vbCBpc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKaW5kZXggNzliZWRhZDE3ZTBlNjRjODI1
ODIwMTZkNTJlOWI5ZTk2ZjI0MjFjNy4uZGEyYWQ1MDRiYzEwNTM3OTg0NGU3Y2FhNTAyNTA2ZDE1
MTE2Mjc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0Nv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5o
CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHByZXNlcnZlc1R5cGlu
Z1N0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RhdGljIEVs
ZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2UqKTsKKyAgICBzdGF0aWMg
RWxlbWVudCogZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKTsKICAgICBib29sIGRpZEFwcGx5KCkgY29uc3QgeyByZXR1cm4gbV9kaWRBcHBs
eTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAppbmRleCA0YTYzYWQ4MGM1MWUxMTc2ZTRiOTg0MjE1NzQyYTQ5MDBhYjU3YzQ3Li4wYTJkNGZj
MzdlODI5NzgxMjVmMzQ4NDkwMGFkMDM0YzdhYTZkNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjA1LDEyICsyMDUsNiBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBF
VXNlclRyaWdnZQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcywgYWZmaW5p
dHksIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNv
bnN0IFJhbmdlKiByYW5nZSkKLXsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHJh
bmdlID8gVmlzaWJsZVNlbGVjdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5k
UG9zaXRpb24oKSkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbik7Ci19Ci0KIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAm
YmFzZSwgY29uc3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRy
aWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGly
ZWN0aW9uID0gdHJ1ZTsKQEAgLTIwMzQsMTEgKzIwMjgsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2VsZWN0QWxsKCkKICAgICB9CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlw
aW5nIGNsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQorYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3NlVHlwaW5n
LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkgPT0gJnJhbmdlLT5lbmRDb250YWluZXIoKS5kb2N1bWVudCgpKTsKKworICAgIGlm
IChyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpICE9IHJhbmdlLT5lbmQuY29udGFpbmVyLnB0
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbigqcmFuZ2UsIGFmZmluaXR5KTsKIApAQCAtMjYxOCwzNCArMjYxNCw2IEBAIFVDaGFy
IEZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3QKICAg
ICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckFmdGVyKCk7CiB9CiAKLWludCBGcmFt
ZVNlbGVjdGlvbjo6d29yZE9mZnNldEluUmFuZ2UoY29uc3QgUmFuZ2UgKnJhbmdlKSBjb25zdAot
ewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJl
dCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG9ubHkg
d29yayBpbiBjYXNlcyB3aGVyZSB0aGUgc2VsZWN0aW9uIHJlbWFpbnMgaW4KLSAgICAvLyB0aGUg
c2FtZSBub2RlIGFmdGVyIGl0IGlzIGV4cGFuZGVkLiBJbXByb3ZlIHRvIGhhbmRsZSBtb3JlIGNv
bXBsaWNhdGVkCi0gICAgLy8gY2FzZXMuCi0gICAgaW50IHJlc3VsdCA9IHNlbGVjdGlvbi5zdGFy
dCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKLSAg
ICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1ib29sIEZyYW1lU2VsZWN0aW9uOjpzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25z
dCBSYW5nZSAqcmFuZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIE5vZGUmIG5vZGUgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7Ci0gICAgaW50
IGVuZE9mZnNldCA9IHJhbmdlLT5lbmRPZmZzZXQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9z
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgZW5kT2Zmc2V0KSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7Ci0gICAgcmV0dXJuIGlzU3BhY2VPck5ld2xpbmUocG9zLmNoYXJhY3RlckFm
dGVyKCkpOwotfQotCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdERvY3VtZW50U3Rh
cnQoKSBjb25zdAogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rp
b247CkBAIC0yNjYwLDE1ICsyNjI4LDYgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
QXREb2N1bWVudFN0YXJ0KCkgY29uc3QKICAgICByZXR1cm4gaXNTdGFydE9mRG9jdW1lbnQocG9z
KTsKIH0KIAotYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkg
Y29uc3QKLXsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwot
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBhY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoc2VsZWN0aW9uKTsKLX0KLQog
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAogewogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CkBAIC0yODM0LDkgKzI3
OTMsMTIgQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXMKICAgICByZXR1cm4gVmlzaWJsZVNlbGVj
dGlvbihzdGFydFZpc2libGVQb3MsIGVuZFZpc2libGVQb3MpOyAgICAKIH0KIAotYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbCkgY29uc3QKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0U2Vu
dGVuY2VTdGFydCgpIGNvbnN0CiB7Ci0gICAgUG9zaXRpb24gc3RhcnRQb3Moc2VsLnN0YXJ0KCkp
OworICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUG9zaXRpb24gc3RhcnRQb3MobV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnRQb3MuZGVwcmVj
YXRlZE5vZGUoKSwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBkYTQyZTBmZmFj
Y2VlMWRlNWRlN2ZiYTIyZTllOWZkODkwMzQ2YTJkLi5lZGQ0YmFhODI4N2Q4MTFiZjNkODE0NWU5
YzlmYjJlYjZhYzMwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJTY3JvbGxBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlZp
c2libGVTZWxlY3Rpb24uaCIKQEAgLTE0NCw3ICsxNDMsNiBAQCBwdWJsaWM6CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KSBjb25zdDsKICAgICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG8oY29uc3QgUmFu
Z2UqKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3Jv
bGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAgICAgdm9pZCBtb3ZlVG8oY29u
c3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJl
ZCk7CkBAIC0xNTUsNyArMTUzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8U2V0U2VsZWN0
aW9uT3B0aW9uPiA9IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFYVGV4dFN0YXRlQ2hh
bmdlSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSwgQ3Vyc29yQWxpZ25PblNjcm9s
bCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgVGV4dEdyYW51bGFyaXR5ID0gVGV4dEdy
YW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICBlbnVtIGNsYXNzIFNob3Vs
ZENsb3NlVHlwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBF
VXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFQWZmaW5p
dHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwpAQCAt
MjMyLDggKzIzMCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0
ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJCZWZvcmVDYXJldFNlbGVjdGlvbigpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rpb24oKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBpbnQgd29yZE9mZnNldEluUmFuZ2UoY29uc3QgUmFu
Z2UqKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNwYWNlRm9sbG93c1dvcmRJblJh
bmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rp
b25BdERvY3VtZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVj
dGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2Vs
ZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsKQEAgLTMzMyw3ICszMjksNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJikgY29uc3Q7CiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggZjgyZjM5NWNhNTJiZDc2MDJlZmVjYjc2ZmUzZDBhYjM5YTAzMjYwYi4u
NjllN2UzMGU2NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTIwNyw3
ICsyMDcsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVudC0+dGV4dCgpKTsKKyAgICAg
ICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4
dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcAppbmRleCA4MzI4NTZmNmIyZmZhMjNhNWIzNzM5NDdhNjBjNzAwNDkyNTM4NDk4Li4xNWVm
NDgyMTZlZWJhNzNkNWYwZjMxZDEyNDg5MGRmOWY1YmU4M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgpAQCAtMTU4LDEzICsxNTksMTAgQEAgUmVmPFJhbmdlPiBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OnN1YnJhbmdlKENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAogCiBFeGNl
cHRpb25Pcjx1aW50NjRfdD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoIXN0YXJ0
KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoUmFuZ2UoKS5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2lu
dChwb3NpdGlvbik7Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBU
eXBlRXJyb3IgfTsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7
CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSk7CiB9CiAKIGJvb2wgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKQEAgLTIxMCwyNiArMjA4LDE3IEBAIHVpbnQ2
NF90IFRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5ndGgoKSBjb25zdAogCiB1aW50
NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKSBj
b25zdAogewotICAgIGlmIChtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQpCi0gICAgICAgIHJl
dHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwotCi0gICAgYXV0byBzdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBp
ZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFy
eVBvaW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAg
ICBpZiAoIWVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBtX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50U3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKKyAgICBpZiAoIW1f
YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCkgeworICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1Jl
cGxhY2VtZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgIG1fYXV0b21hdGljUmVw
bGFjZW1lbnRTdGFydCA9IHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlKSA6IDA7CisgICAg
fQogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwogfQogCiB1aW50NjRf
dCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29u
c3QKIHsKLSAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKLSAgICAgICAgcmV0
dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwotCi0gICAgbV9hdXRvbWF0aWNSZXBs
YWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSk7CisgICAgaWYgKCFtX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKQorICAgICAgICBtX2F1
dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlKTsKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggYjMxZGFjNWRhNzk0NjBmNzllOTBkYmU2NDlhNjA2OWUyZDQ1
NmYwOS4uNmRiZmQ4NTE5ZWViZTM0NDU2NDEzNzgxYjM4ZGU3N2FjNzg3Yjg3MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgotI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMTQ2LDcgKzE0NSw3IEBA
IHN0YXRpYyBib29sIGlzVG9rZW5EZWxpbWl0ZXIoVUNoYXIgY2hhcmFjdGVyKQogY2xhc3MgUGFy
YWdyYXBoQ29udGVudEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBQYXJhZ3JhcGhDb250ZW50SXRl
cmF0b3IoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgICAg
ICA6IG1faXRlcmF0b3IoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5
UG9pbnQoZW5kKSB9LCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQorICAgICAg
ICA6IG1faXRlcmF0b3IoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSwgVGV4dEl0ZXJhdG9y
SWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKICAgICAgICAgLCBtX25vZGUoc3RhcnQuZmlyc3ROb2Rl
KCkpCiAgICAgICAgICwgbV9wYXN0RW5kTm9kZShlbmQuZmlyc3ROb2RlKCkpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYWY1ZWIxYjdlNmM0MWVk
MTBkNGE2YzhkMDNhNWFlZTQzYTA3M2JhYi4uZDAxNTEwMmE2MDlmZmFlZDI2MTJhZjJlNzljM2I5
ZmVkZDVmMTlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC0zMzIsOCArMzMyLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uRm9yRGVsZXRpb24oY29uc3QgVmlzaWJsZVNlbGUKICAgICAgICAgcmV0dXJu
OwogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGVEZWxl
dGUsIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbiksIHNlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb25JbmRleFJh
bmdlIHJhbmdlOwotICAgIHJhbmdlLnN0YXJ0SW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7Ci0gICAg
cmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24u
ZW5kKCksIHJhbmdlLmVuZEluZGV4LnNjb3BlKTsKKyAgICByYW5nZS5zdGFydEluZGV4LnZhbHVl
ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCByYW5n
ZS5zdGFydEluZGV4LnNjb3BlKTsKKyAgICByYW5nZS5lbmRJbmRleC52YWx1ZSA9IGluZGV4Rm9y
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi52aXNpYmxlRW5kKCksIHJhbmdlLmVuZEluZGV4LnNj
b3BlKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmFuZ2Up
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXgg
ZGYzZWFmZGQ1ZTk4MGUyNDI3ZTJhMWI3OThhZDQwZGRlODc5OTlmNC4uMDE2OGViODE4MTQyZDNm
NDY5OWY1NWVhMGZmOGIyMmFhZGI2Mzc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmNwcApAQCAtODQ5LDYgKzg0OSwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpbwogICAgIHJldHVybiBzdHJlYW07CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtl
U2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHJhbmdlKQoreworICAgIHJl
dHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Cit9CisKIH0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCBmODRiY2RmZDcyZjViYzQ1NzYz
M2RhNDgzMjcyMWU1Mjc3YTI0ODUxLi45MWVkNGNjMGYzNDQ4MzQ3NTIyZDVkMTI2YWU0OWYzZTJj
MDFlMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTMy
LDYgKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsKIAorc3RydWN0
IFNpbXBsZVJhbmdlOworCiAvLyBWaXNpYmxlUG9zaXRpb24gZGVmYXVsdCBhZmZpbml0eSBpcyBk
b3duc3RyZWFtIGJlY2F1c2UKIC8vIHRoZSBjYWxsZXJzIGRvIG5vdCByZWFsbHkgY2FyZSAodGhl
eSBqdXN0IHdhbnQgdGhlCiAvLyBkZWVwIHBvc2l0aW9uIHdpdGhvdXQgcmVnYXJkIHRvIGxpbmUg
cG9zaXRpb24pLCBhbmQgdGhpcwpAQCAtMTQwLDYgKzE0MiwxNSBAQCBib29sIGFyZVZpc2libGVQ
b3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlz
aWJsZVBvcwogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVB
ZmZpbml0eSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKK3N0cnVjdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSB7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OworICAgIFZpc2libGVQ
b3NpdGlvbiBlbmQ7CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0Lmlz
TnVsbCgpIHx8IGVuZC5pc051bGwoKTsgfQorfTsKKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VTaW1wbGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpOworCiAvLyBpbmxpbmVz
CiAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBpZ25vcmUgYWZmaW5pdHkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCAwNGY4ODRiNzIwNWU5Mzkz
YWE5OWM3ZDdiNGViYjk2YmM0ZjNmODgwLi45ZGJhZDEwZjg2NGEwZjQzZmUyNDBmOWIwMDFmZjYy
MmVlMmJiN2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMTM2LDcgKzEzNSw3IEBAIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKICAgICBQb3NpdGlvbiBl
bmQgPSBtX2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIFNpbXBsZVJhbmdl
IHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfQogCiBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdApA
QCAtMTc5LDE4ICsxNzgsMTMgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rp
b246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlv
bnMocywgZSkgPiAwKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJl
Zm9yZSB0aGUgZW5kLgogICAgICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUg
dGhlIHN0YXJ0IGlmIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVj
dGVkLgotICAgICAgICAgICAgUG9zaXRpb24gdG1wID0gczsKLSAgICAgICAgICAgIHMgPSBlOwot
ICAgICAgICAgICAgZSA9IHRtcDsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChzLCBlKTsKICAgICAg
ICAgfQogICAgICAgICBzID0gcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICAgICAg
ZSA9IGUucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgfQogCi0gICAgaWYgKHMuaXNO
dWxsKCkgfHwgZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzKSwgKm1ha2VCb3VuZGFy
eVBvaW50KGUpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzLCBlKTsKIH0KIAogYm9v
bCBWaXNpYmxlU2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKQEAgLTIwNCwxNCArMTk4LDEwIEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlv
bjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAK
IHN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwotICAgIGF1dG8gc2NvcGUgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dChub2RlKTsKKyAgICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFzY29wZSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRp
b24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghc3RhcnQpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzdGFydCksIG1ha2VCb3VuZGFy
eVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNjb3BlKSB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1w
bGVSYW5nZShwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgbWFrZUJvdW5kYXJ5
UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2NvcGUpKTsKIH0KIAogYm9vbCBWaXNpYmxlU2VsZWN0
aW9uOjppc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggM2Y4ODJlMTlkNDE5YmZh
OGQ1ZWRlYWU1OTI4NmY2YWFkZGUyMjc3ZS4uODc2ZGUxODY5NTQzYzUyNGVkZGM0NjUzNzg4NWY5
MTRkNzgzZWY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgK
QEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIGlzUmFuZ2UoKSA/IChp
c0Jhc2VGaXJzdCgpID8gVVBTVFJFQU0gOiBET1dOU1RSRUFNKSA6IGFmZmluaXR5KCkpOyB9CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFeHRlbnQoKSBjb25zdCB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb24obV9leHRlbnQsIGlzUmFuZ2UoKSA/IChpc0Jhc2VGaXJzdCgpID8gRE9XTlNUUkVB
TSA6IFVQU1RSRUFNKSA6IGFmZmluaXR5KCkpOyB9CiAKKyAgICBvcGVyYXRvciBWaXNpYmxlUG9z
aXRpb25SYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHsgdmlzaWJsZVN0YXJ0KCksIHZpc2libGVFbmQo
KSB9OyB9CisKICAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUo
KSA9PSBOb1NlbGVjdGlvbjsgfQogICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHNl
bGVjdGlvblR5cGUoKSA9PSBDYXJldFNlbGVjdGlvbjsgfQogICAgIGJvb2wgaXNSYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IDEyZDRjYWMzNmI4NDkwNDlmNmUy
NDQyZTc2MzYxMTNiNjU0YjU3YjcuLmE4MDdmNTYzZTZlZDIwZWRlMDdhNzBkNDRjYzFhZTVjMjcy
MDQwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE4MzMs
MTEgKzE4MzMsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFQKICAgICB9CiB9CiAKLVJlZlB0
cjxSYW5nZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdnAsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFRoaXMgaXMg
cGFydGljdWxhcmx5IGluZWZmaWNpZW50LiAgV2UgY291bGQgZWFzaWx5IG9idGFpbiB0aGUgYW5z
d2VyIHdpdGggdGhlIGJvdW5kYXJpZXMgY29tcHV0ZWQgYmVsb3cuCiAgICAgaWYgKCF3aXRoaW5U
ZXh0VW5pdE9mR3JhbnVsYXJpdHkodnAsIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2Qm91bmRhcnk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3Vu
ZGFyeTsKQEAgLTE4ODksMjUgKzE4ODksMjMgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCiAgICAgaWYgKHByZXZCb3VuZGFyeS5pc051bGwoKSB8fCBuZXh0Qm91bmRhcnku
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgaWYgKHZwIDwgcHJldkJvdW5kYXJ5IHx8IHZwID4gbmV4dEJvdW5kYXJ5
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5
KTsKIH0KIAogc3RkOjpwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIGlmIChh
LmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBh
IDwgYgotICAgICAgICA/IC1jaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwg
Km1ha2VCb3VuZGFyeVBvaW50KGIpIH0pCi0gICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQoYiksICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKKyAgICByZXR1cm4g
YSA8IGIgPyAtY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShhLCBiKSkgOiBjaGFyYWN0
ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGIsIGEpKTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJv
dW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25l
QWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpAQCAtMTkzNCw3
ICsxOTMyLDcgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB9CiAKICAgICBpZiAoc3Rh
cnRQb3NpdGlvbiAhPSBlbmRQb3NpdGlvbikgewotICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3Ry
aW5nID0gcGxhaW5UZXh0KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcp
OworICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KCptYWtlU2ltcGxl
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwg
JyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNoYXJhY3RlclN0cmluZy5sZW5ndGgoKSAtIDEs
IGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4IDwgbWF4Q2hhcmFjdGVyczsgLS1pKSB7CiAgICAg
ICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAg
ICAgICBpbmRleCsrOwpAQCAtMTk0Niw1MyArMTk0NCwzOCBAQCB2b2lkIGNoYXJhY3RlcnNBcm91
bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVB
ZnRlcgogICAgIHR3b0JlZm9yZSA9IGNoYXJhY3RlcnNbMl07CiB9CiAKLVJlZlB0cjxSYW5nZT4g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitP
cHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBjb3VsZCBiZSBpbiBh
IG5vbiB2aXNpYmxlIGVsZW1lbnQgYW5kIHdlIGRvbid0IGhhdmUgYSBWaXNpYmxlUG9zaXRpb24u
CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkJhY2t3YXJkKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlm
ICghcmFuZ2UpIHsKLSAgICAgICAgLy8gV2UgY291bGQgYmUgYXQgdGhlIHN0YXJ0IG9mIGEgd29y
ZCwgdHJ5IGZvcndhcmQuCi0gICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2UpCisgICAgaWYg
KGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRH
cmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkKICAgICAgICAgcmV0dXJu
IHJhbmdlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9u
OwogICAgIGRvIHsKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3Vu
ZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRH
cmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgfSB3aGlsZSAo
Y3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShj
dXJyZW50UG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkKSk7Ci0KICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIGN1cnJlbnRQb3NpdGlv
biwgcG9zaXRpb24pOwotICAgICAgICBBU1NFUlQocmFuZ2UpOwotICAgIH0KLQotICAgIHJldHVy
biByYW5nZTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGN1cnJlbnRQb3NpdGlvbiwgcG9z
aXRpb24pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIHJlc3VsdDsKLQotICAgIC8vIG1vdmUgdGhlIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhl
IHdvcmQKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFu
dWxhcml0eTo6TGluZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7
CiAgICAgICAgIC8vIERvbid0IGNyb3NzIGxpbmUgYm91bmRhcmllcy4KICAgICAgICAgcmVzdWx0
ID0gcG9zaXRpb247CiAgICAgfSBlbHNlIGlmICh3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBsaWVzIHdpdGhpbiBh
IHdvcmQuCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLQotICAgICAgICByZXN1bHQgPSB3b3Jk
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblBvc2l0
aW9ucyhwb3NpdGlvbiwgcmVzdWx0KSA+IDEpCi0gICAgICAgICAgICByZXN1bHQgPSB3b3JkUmFu
Z2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KTsKKyAg
ICAgICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkg
PiAxKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bih3b3JkUmFuZ2UtPmVuZCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0Qm91bmRhcnlP
ZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpIHsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9u
IGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgogICAgICAgICByZXN1bHQgPSBwb3NpdGlvbjsKQEAg
LTIwMDgsNyArMTk5MSw3IEBAIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9y
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVj
dGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBu
dW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikK
K09wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rp
b25BdFdvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBv
c2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDI0LDEwICsyMDA3
LDEwIEBAIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9u
QXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQgJiYgIWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZCwg
VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9y
d2FyZCkpCiAgICAgICAgIGVuZCA9IGVuZE9mV29yZChlbmQpLmRlZXBFcXVpdmFsZW50KCk7CiAK
LSAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBtYWtlU2ltcGxl
UmFuZ2Uoc3RhcnQsIGVuZCk7CiB9ICAgIAogCi1SZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRB
cm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
LCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
cmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCkKIHsKICAgICBQ
b3NpdGlvbiBzdGFydCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24g
ZW5kID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKQEAgLTIwMzUsOCArMjAxOCw3IEBAIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zCiAgICAgICAgIHN0YXJ0ID0gc3RhcnQucHJldmlvdXMoQ2hh
cmFjdGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKICAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZVJhbmdlKHN0YXJ0LCBlbmQpOwogfQogCiBzdGQ6OnBhaXI8VmlzaWJsZVBvc2l0aW9uLCBXaXRo
aW5Xb3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGlu
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMjA0Nyw5ICsyMDI5LDkgQEAg
c3RkOjpwYWlyPFZpc2libGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRh
cnlGb3JQb3NpdGlvbldpdGhvdXRDcm8KICAgICBpZiAod2l0aGluVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICBhdXRvIGFkanVzdGVkUG9zaXRpb24gPSBw
b3NpdGlvbjsKICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRP
ZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgewotICAgICAgICAgICAgYWRqdXN0ZWRQb3Np
dGlvbiA9IHdvcmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgICAgICAgICAgYWRqdXN0ZWRQ
b3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KTsK
ICAgICAgICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIGFkanVz
dGVkUG9zaXRpb24pID4gMSkKLSAgICAgICAgICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gd29y
ZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGFkanVzdGVkUG9zaXRpb24g
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB7IGFkanVzdGVkUG9zaXRpb24sIFdpdGhpbldvcmRCb3VuZGFyeTo6
WWVzIH07CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggMWE3
ODMyZWIzN2I4MTk5NWI5MWIxMDMwZTk0YjE1NGE0M2Q2MzBkYi4uNDJlNjM3ODk1ZWVjNzliZDhj
MjJiNmRjNzg5NTQ3YTJiOGE5YWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5oCkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09S
RV9FWFBPUlQgYm9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwot
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb24pOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXJp
dHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnB0cmRpZmZfdCBk
aXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFy
eUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pOwogV0VCQ09SRV9F
WFBPUlQgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVm
b3JlKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBv
c2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGludCBudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZCk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhw
YW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0
aW9uKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVk
QXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51
bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQs
IFNlbGVjdGlvbkRpcmVjdGlvbik7CiBlbnVtIGNsYXNzIFdpdGhpbldvcmRCb3VuZGFyeSA6IGJv
b2wgeyBObywgWWVzIH07CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8VmlzaWJsZVBvc2l0aW9u
LCBXaXRoaW5Xb3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3Nz
aW5nTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDIzNmEzYWI0N2FhODU4Y2NlNjE2Y2Qx
YjM1MTFlYmU0ZDI5NGUwZGEuLjE0ZmE2ODgyYzY3MzZjNzNmZDYzNDQwOGZlY2Q3OGE0MmRiYWE2
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0K
QEAgLTczLDcgKzczLDcgQEAgc3RhdGljIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gZGV0ZWN0SXRl
bShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdAogICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBTdHJpbmcgZnVsbFBsYWluVGV4
dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UpOwotICAgIENGSW5kZXggaGl0TG9jYXRp
b24gPSBjaGFyYWN0ZXJDb3VudCh7IGNvbnRleHRSYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKSB9KTsKKyAgICBDRkluZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291
bnQoKm1ha2VTaW1wbGVSYW5nZShjb250ZXh0UmFuZ2Uuc3RhcnQsIHBvc2l0aW9uKSk7CiAKICAg
ICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3Rh
bmRhcmQsIDAsIG51bGxwdHIpKTsKICAgICBhdXRvIHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2Fu
UXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRT
dHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4
dFN0cmluZy5sZW5ndGgoKSkpKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBPcHRpb25hbDxEZXRlY3Rl
ZEl0ZW0+IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0
IEhpdFRlcwogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uOwotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBjb250ZXh0UmFuZ2U7CiAKICAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25G
b3JQb2ludChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CkBAIC0yNzIsMTYg
KzI3MiwxNCBAQCBzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoRWxlbWVu
dCYgZWxlbWVudCkKICAgICBlbGVtZW50UGFyZW50LT5yZW1vdmVDaGlsZChlbGVtZW50KTsKIH0K
IAotc3RhdGljIGJvb2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKE5vZGUm
IHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTm9kZSwgYm9vbCYgZGlkTW9kaWZ5RE9NKQorc3RhdGljIGJv
b2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKE5vZGUmIHN0YXJ0Tm9kZSwg
Tm9kZSYgZW5kTm9kZSkKIHsKLSAgICBkaWRNb2RpZnlET00gPSBmYWxzZTsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSAmc3RhcnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
bm9kZSkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKICAg
ICAgICAgICAgIGF1dG8mIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50Pigqbm9k
ZSk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYW5jaG9yLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oeF9hcHBsZV9kYXRhX2RldGVjdG9yc0F0dHIpLCAi
dHJ1ZSIpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmVtb3Zl
UmVzdWx0TGlua3NGcm9tQW5jaG9yKGFuY2hvcik7Ci0gICAgICAgICAgICBkaWRNb2RpZnlET00g
PSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZSA9PSAmZW5kTm9k
ZSkgewpAQCAtMjkxLDcgKzI4OSw2IEBAIHN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmlu
Z0V4aXN0aW5nRERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsCiAgICAgICAg
ICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGFuY2hvci5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNBdHRyKSwgInRydWUiKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmVtb3Zl
UmVzdWx0TGlua3NGcm9tQW5jaG9yKGFuY2hvcik7Ci0gICAgICAgICAgICAgICAgZGlkTW9kaWZ5
RE9NID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpAQCAtNTUzLDI5ICs1NTAsMTIgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0
ZWN0Q29udGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZSwgRGEKICAg
ICAgICAgaWYgKHJlc3VsdFJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCi0gICAgICAgIC8vIFN0b3JlIHRoZSByYW5nZSBib3VuZGFyaWVzIGFzIFBvc2l0
aW9uLCBiZWNhdXNlIHRoZSBET00gY291bGQgY2hhbmdlIGlmIHdlIGZpbmQKLSAgICAgICAgLy8g
b2xkIGRhdGEgZGV0ZWN0b3IgbGluay4KLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxQb3NpdGlv
biwgUG9zaXRpb24+PiByYW5nZUJvdW5kYXJpZXM7Ci0gICAgICAgIHJhbmdlQm91bmRhcmllcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlc3VsdFJhbmdlcy5zaXplKCkpOwotICAgICAgICBmb3Ig
KGF1dG8mIHJhbmdlIDogcmVzdWx0UmFuZ2VzKQotICAgICAgICAgICAgcmFuZ2VCb3VuZGFyaWVz
LnVuY2hlY2tlZEFwcGVuZCh7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFy
dCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpIH0pOwotCiAgICAgICAg
IE5TU3RyaW5nICppZGVudGlmaWVyID0gZGF0YURldGVjdG9yU3RyaW5nRm9yUGF0aChpbmRleFBh
dGhzW3Jlc3VsdEluZGV4XS5nZXQoKSk7CiAgICAgICAgIE5TU3RyaW5nICpjb3JyZXNwb25kaW5n
VVJMID0gY29uc3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KGNvcmVSZXN1bHQsIGlkZW50aWZpZXIs
IHJlZmVyZW5jZURhdGUsIChOU1RpbWVab25lICopdHouZ2V0KCksIHR5cGVzKTsKLSAgICAgICAg
Ym9vbCBkaWRNb2RpZnlET00gPSBmYWxzZTsKIAotICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdV
UkwgfHwgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5m
aXJzdCgpLnN0YXJ0LmNvbnRhaW5lciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVy
LCBkaWRNb2RpZnlET00pKQorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNo
Rm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5maXJzdCgpLnN0YXJ0
LmNvbnRhaW5lciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVyKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGRpZE1vZGlmeURPTSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIERPTSB3YXMgbW9kaWZpZWQgYmVjYXVzZSBzb21lIG9sZCBsaW5r
cyB3ZXJlIHJlbW92ZWQsCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlY3JlYXRlIHRoZSBy
YW5nZXMgYmVjYXVzZSB0aGV5IGNvdWxkIG5vIGxvbmdlciBiZSB2YWxpZC4KLSAgICAgICAgICAg
IEFTU0VSVChyZXN1bHRSYW5nZXMuc2l6ZSgpID09IHJhbmdlQm91bmRhcmllcy5zaXplKCkpOwot
ICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnNocmluaygwKTsgLy8gS2VlcCBjYXBhY2l0eSBhcyB3
ZSBhcmUgZ29pbmcgdG8gcmVwb3B1bGF0ZSB0aGUgVmVjdG9yIHJpZ2h0IGF3YXkgd2l0aCB0aGUg
c2FtZSBudW1iZXIgb2YgaXRlbXMuCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlQm91bmRh
cnkgOiByYW5nZUJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnVuY2hl
Y2tlZEFwcGVuZCh7ICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LmZpcnN0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KHJhbmdlQm91bmRhcnkuc2Vjb25kKSB9KTsKLSAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHF1ZXJ5UmFuZ2UuZW5k
OwogICAgICAgICBCT09MIHNob3VsZFVzZUxpZ2h0TGlua3MgPSBzb2Z0TGlua19EYXRhRGV0ZWN0
b3JzQ29yZV9ERFNob3VsZFVzZUxpZ2h0TGlua3NGb3JSZXN1bHQoY29yZVJlc3VsdCwgW2luZGV4
UGF0aHNbcmVzdWx0SW5kZXhdIGxlbmd0aF0gPiAxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IGJjY2IwZjAwODI3YjllYTQ0
NzQ5ZjcwZDlkNDVkODZiZDA5YTUzNmMuLjNjMTIzMTlmYWIwODY3NTk1OWU1M2NkOGU3OWFiMzQz
ZDExYTdiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25h
cnlMb29rdXAubW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJS
YW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3Iu
aCIKICNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjc5LDE1ICsyNzgsMTUgQEAgT3B0
aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5
TG9va3VwOjpyYW5nZUZvclNlbGUKICAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNOdWxsKCkgfHwg
cGFyYWdyYXBoRW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
U3RhcnQpIH0pOwotICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJD
b3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQ
b2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9
IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlv
blN0YXJ0KSk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNv
dW50KCptYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpOwogICAg
IE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAg
ICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsKKyAg
ICBhdXRvIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHBhcmFncmFwaEVuZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVs
bENoYXJhY3RlclJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhb
YWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFu
Z2U6cmFuZ2VUb1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAotICAgIHJldHVybiB7IHsg
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdl
KSwgbmlsIH0gfTsKKyAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShmdWxsQ2hh
cmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKIAogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKIApAQCAtMzI4LDI5ICszMjcsMjMgQEAgT3B0aW9uYWw8c3RkOjp0dXBs
ZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGUKICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgp
OwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJv
dW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAg
ICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFw
aChzZWxlY3Rpb25FbmQpKTsKLSAgICAgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCB8fCAhcGFyYWdy
YXBoRW5kKQorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVu
ZCkpOworICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0geyB7ICpwYXJh
Z3JhcGhTdGFydCwgKnBhcmFncmFwaEVuZCB9IH07Ci0gICAgICAgIHNlbGVjdGlvblJhbmdlID0g
TlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICptYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSksCi0gICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb25FbmQpIH0pKTsKLSAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpw
YXJhZ3JhcGhTdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAg
c2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJh
bmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnQsIHNlbGVjdGlvblN0YXJ0KSksCisgICAgICAg
ICAgICBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpKSk7CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1w
bGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBwb3NpdGlvbikpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcyB7IHBvc2l0aW9uIH07CiAgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVs
ZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSk7CiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5z
dGFydCgpOwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUw
IGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAg
YXV0byBleHBhbmRlZFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0
ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWV4cGFuZGVkUmFuZ2UpCi0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9
IHsgKmV4cGFuZGVkUmFuZ2UgfTsKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VF
eHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwogCiAgICAg
ICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAg
IGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCAq
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOworICAgICAgICBoaXRJbmRleCA9IGNoYXJh
Y3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgcG9z
aXRpb24pKTsKICAgICB9CiAKICAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxl
Y3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpA
W1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOm5pbF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bQppbmRleCBlZWZlOGZkOTUxY2NmYTRlYjY2MTgyN2Q1OGU2OWVhNTliNTg2YjdiLi5iMWYxYTg2
NTVkYmRhMjUxYjA5Y2NkZWZjNTI2MDg2NGQzNDFjYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTk0LDEwICs5NCwxMiBAQCB2b2lkIEVkaXRv
cjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVu
dCwgVmVjdG9yPFN0cgogICAgIG91dFR5cGVzLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
Y29jb2FUeXBlKCkpOwogICAgIG91dERhdGEuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhIHsg
ZWxlbWVudC5kb2N1bWVudCgpLm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSB9
LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAotICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lX
ZWJBcmNoaXZlOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSkuZ2V0KCkpKSB7
Ci0gICAgICAgIGlmIChhdXRvIHdlYkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJl
c2VudGF0aW9uKCkpIHsKLSAgICAgICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJv
YXJkVHlwZSk7Ci0gICAgICAgICAgICBvdXREYXRhLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0
ZSh3ZWJBcmNoaXZlRGF0YS5nZXQoKSkpOworICAgIGlmIChlbGVtZW50UmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgqZWxlbWVudFJh
bmdlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBhcmNoaXZlLT5y
YXdEYXRhUmVwcmVzZW50YXRpb24oKSkgeworICAgICAgICAgICAgICAgIG91dFR5cGVzLmFwcGVu
ZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CisgICAgICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQo
U2hhcmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggNTFhZTIzNDBjZTM3OTNlNzEx
Y2E4ZmQyZDk3NTQ4NDI4OTIyOTEzOC4uMzRhYTdhYmYzM2Y3NDRkZTA3ZDhlOTllNmQ1ZDNmNWVj
NDIwZTJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250
ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJD
b250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIK
ICNpbXBvcnQgIlB1YmxpY1VSTE1hbmFnZXIuaCIKICNpbXBvcnQgIlF1aXJrcy5oIgorI2ltcG9y
dCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgpAQCAt
NjY4LDcgKzY2OSw3IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25z
dCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVM
aXZlUmFuZ2UoY29udGV4dCksIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddKSk7CisgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0
LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOwogCiAgICAg
bWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCmlu
ZGV4IGQ2MDlmMjJjODRmMGNmNzk4MDBhYTkzZDRiMjBiZjgyZDQ4MDI1MjMuLjdjYjY1OTRmYWQ3
OGFmODkwMzJmZGQ1ZGU4NmY4ZGE0NTVmZTFmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJv
b2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAg
ICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRk
RnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCks
IHRleHQpKTsKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQs
IHRleHQpKTsKIAogICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOwogICAgIHJl
dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0
aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25D
b21tYW5kSU9TLmNwcAppbmRleCA4YWM3Njk0MDIwOTM1MGZmNDNhZWMxNDRkMzNhZDYxNjAxMjZl
NDM1Li5lYzgwYmJhYzg0N2I5NzQwNWJlYjU1NTljYzJhNTEwZDQxNzA4YTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCiAjaW5jbHVkZSAiU21hcnRSZXBsYWNlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9s
aWJ3cGUvRWRpdG9yTGliV1BFLmNwcAppbmRleCAwYjdjMjYyNTNhMDA4MmUzYzU0YWVlZmVhMDYx
NjMyNGU2MjQ4YzdhLi45ZGQ0MWQ2MzY2NTEyZmQzODU5MzdhNzYwOGJkM2ZjOWI1YjkwZjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAg
LTU1LDcgKzU1LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0eXBlcy5j
b250YWlucygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAgY2hvc2VQbGFp
blRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxh
aW47Y2hhcnNldD11dGYtOCIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQocmFuZ2UsIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04
IikpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNGYyNzJlZWU4
MTM4MTQwYzliMzY1Y2EyMTE3M2Y2YjM0MDk0ZjIxZi4uODc2MTIwYmIwOWIxMmUwOWU0ZGVjYTU4
ZTU1NGQzMDI3MDFlZjQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC04NiwxNiArODYsMTQgQEAgT3B0aW9uYWw8
c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCk7CiAKICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJy
b3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBh
dXRvIHBhcmFncmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVj
dGlvbkVuZCkpOwotICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAg
ICBhdXRvIHBhcmFncmFwaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uU3RhcnQpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICBpZiAo
IXBhcmFncmFwaFJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKLSAgICBhdXRv
IHBhcmFncmFwaFJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3Jh
cGhFbmQgfTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKIAogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9
IG5pbDsKLSAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSksIGNoYXJhY3Rl
clJhbmdlKHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKKyAgICB0
b2tlblJhbmdlKHBsYWluVGV4dCgqcGFyYWdyYXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZSgqcGFy
YWdyYXBoUmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlvbnMpOwogCiAgICAgcmV0dXJuIHsg
eyAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucyB9IH07CiB9CkBAIC0xMzMsMTIgKzEzMSwxMSBAQCBP
cHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZQogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBmdWxsQ2hhcmFjdGVyU3RhcnQg
PSBtYWtlQm91bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
OwotICAgIGlmICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJvdW5kYXJ5KQorICAg
IGF1dG8gcmFuZ2VUb1Bvc2l0aW9uID0gbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5n
ZS0+c3RhcnQsIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9Qb3NpdGlvbikKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VS
YW5nZShjaGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVyU3RhcnQsICpwb3NpdGlvbkJvdW5k
YXJ5IH0pLCAwKTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFj
dGVyQ291bnQoKnJhbmdlVG9Qb3NpdGlvbiksIDApOwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IG5pbDsKICAgICBhdXRvIGV4dHJhY3RlZFJhbmdlID0gdG9rZW5SYW5nZShwbGFpblRleHQo
KmZ1bGxDaGFyYWN0ZXJSYW5nZSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCBiYTMxYzE4NzczMjM0YjlhZDkzOWFk
MGQzMzE5MzE4YzYyZDhiM2JkLi5lNzMyNWM1MjRhZmZhYjRjNmE3YWQyMGVjNDJhY2M2MDJmZTdm
NTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC00NSw3ICs0
NSw2IEBACiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRl
Z3kuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2ltcG9ydCAiUmFuZ2UuaCIK
ICNpbXBvcnQgIlJlbmRlckJsb2NrLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9y
dCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
aW5kZXggZDU3NGE0OTc3YTg3YTRiMWQyMWViYzIyODU0NjE0ZjU3YTg5MjdjZC4uYjYwMjUyNWQy
ZDMxNGVjN2MzNWRlYWJlNGQyN2I0MDE1MjVlYTJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcApAQCAtNDUxLDEyICs0NTEsOCBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnJlbmRlcmVkVGV4dFJlc3BlY3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0KQogICAgICAgICAg
ICAgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JCZWhhdmVzQXNJZk5vZGVzRm9sbG93aW5nOwogICAg
IH0KIAotICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsK
LSAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAo
IXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLQotICAgIHJldHVybiBwbGFpblRleHQoeyBXVEZNb3ZlKCpzdGFydEJvdW5kYXJ5KSwg
V1RGTW92ZSgqZW5kQm91bmRhcnkpIH0sIGJlaGF2aW9yKTsKKyAgICBhdXRvIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dCgq
cmFuZ2UsIGJlaGF2aW9yKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4
dCkKQEAgLTkzOCw5ICs5MzQsMTAgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5n
VmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICByZXR1
cm4gYWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiog
bm9kZXMsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIENvbnZlcnRCbG9ja3NUb0lu
bGluZXMgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmVzb2x2ZVVSTHMgdXJsc1RvUmVzbHZlKQor
U3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2Ug
YW5ub3RhdGUsIENvbnZlcnRCbG9ja3NUb0lubGluZXMgY29udmVydEJsb2Nrc1RvSW5saW5lcywg
UmVzb2x2ZVVSTHMgdXJsc1RvUmVzbHZlKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2
aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2Uu
ZW5kUG9zaXRpb24oKSwgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVl
OjpObywKKyAgICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRl
cm5hbChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSwKKyAgICAgICAgbm9kZXMsIHVybHNUb1Jlc2x2
ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywKICAgICAgICAgYW5ub3RhdGUsIGNvbnZlcnRC
bG9ja3NUb0lubGluZXMsIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlOjpLZWVw
LCBNU09MaXN0TW9kZTo6RG9Ob3RQcmVzZXJ2ZSk7CiB9CiAKQEAgLTExMTYsMjAgKzExMTMsMTYg
QEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKiBub2RlKQogICAgIHJldHVybiBpc1RhYlNw
YW5UZXh0Tm9kZShmaXJzdENoaWxkLT5maXJzdENoaWxkKCkpICYmIHNlY29uZENoaWxkLT5pc1Rl
eHROb2RlKCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKGNvbnN0
IFJhbmdlJiBjb250ZXh0KQorc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05ld2xpbmUoY29u
c3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9u
KGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBOb2RlKiBjb250YWluZXIgPSBwb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIWNvbnRhaW5lciB8
fCAhY29udGFpbmVyLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwor
ICAgIGF1dG8gY29udGFpbmVyID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb250ZXh0LnN0YXJ0KSkuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7
CisgICAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXItPnJlbmRlcmVyKCkgJiYgY29udGFp
bmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwogfQogCi1SZWY8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiB0ZXh0KQorUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
LSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKLSAgICBS
ZWY8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwpAQCAtMTE2NSwxNCArMTE1OCwxNCBAQCBSZWY8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogICAgIH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxp
bmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrTm9k
ZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOworICAgIE5vZGUqIGJsb2Nr
Tm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250ZXh0KS0+Zmlyc3ROb2Rl
KCkpOwogICAgIEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVudD4oYmxvY2tOb2RlKTsK
ICAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9ja05vZGUKICAgICAgICAg
JiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdO
YW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAg
ICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb250ZXh0LnN0YXJ0UG9z
aXRpb24oKSk7Ci0gICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2woY29udGV4dC5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJs
ZVJvb3RGb3JQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFy
dCkpOworICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7CiAKICAgICBWZWN0b3I8
U3RyaW5nPiBsaXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7CiAg
ICAgc2l6ZV90IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaApp
bmRleCA4NjU2N2Y0NTc4MGFhYmE1MWIzZWQ4MmEwOWE1MWUyMjAyNmEwMjZiLi5mZmEzMjdlOWVl
Y2U1NWRlNTdmMjQ0Y2U4YjVhYTJmZWVkOGI2NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgK
QEAgLTQ0LDExICs0NCwxMiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xh
c3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUHJlc2VudGF0aW9uU2l6ZTsKIGNsYXNzIFF1
YWxpZmllZE5hbWU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK3N0
cnVjdCBQcmVzZW50YXRpb25TaXplOworc3RydWN0IFNpbXBsZVJhbmdlOworCiB2b2lkIHJlcGxh
Y2VTdWJyZXNvdXJjZVVSTHMoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIEhhc2hNYXA8QXRvbVN0
cmluZywgQXRvbVN0cmluZz4mJik7CiB2b2lkIHJlbW92ZVN1YnJlc291cmNlVVJMQXR0cmlidXRl
cyhSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwgV1RGOjpGdW5jdGlvbjxib29sKGNvbnN0IFVSTCYp
PiBzaG91bGRSZW1vdmVVUkwpOwogCkBAIC01Nyw3ICs1OCw3IEBAIGVudW0gY2xhc3MgTVNPTGlz
dFF1aXJrcyA6IGJvb2wgeyBDaGVja0lmTmVlZGVkLCBEaXNhYmxlZCB9OwogU3RyaW5nIHNhbml0
aXplTWFya3VwKGNvbnN0IFN0cmluZyYsIE1TT0xpc3RRdWlya3MgPSBNU09MaXN0UXVpcmtzOjpE
aXNhYmxlZCwgT3B0aW9uYWw8V1RGOjpGdW5jdGlvbjx2b2lkKERvY3VtZW50RnJhZ21lbnQmKT4+
IGZyYWdtZW50U2FuaXRpemVyID0gV1RGOjpudWxsb3B0KTsKIFN0cmluZyBzYW5pdGl6ZWRNYXJr
dXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIERvY3VtZW50
JiwgTVNPTGlzdFF1aXJrcywgY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1hcmt1cCk7CiAKLVdFQkNP
UkVfRVhQT1JUIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJh
bmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOworV0VCQ09SRV9FWFBPUlQgUmVmPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2Um
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiBXRUJDT1JFX0VYUE9SVCBSZWY8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9
IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVu
dD4+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoRWxlbWVudCYsIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBQYXJzZXJDb250ZW50UG9saWN5KTsKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQoRG9jdW1lbnQmLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSk7CkBAIC03
Miw3ICs3Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVu
dChDb250YWluZXJOb2RlJiwgUmVmPERvY3VtZW50RnJhZ21lCiBlbnVtIGNsYXNzIFJlc29sdmVV
UkxzIDogdWludDhfdCB7IE5vLCBZZXMsIFllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2
YWN5IH07CiBlbnVtIGNsYXNzIENvbnZlcnRCbG9ja3NUb0lubGluZXMgOiB1aW50OF90IHsgTm8s
IFllcyB9OwogZW51bSBjbGFzcyBTZXJpYWxpemVDb21wb3NlZFRyZWUgOiB1aW50OF90IHsgTm8s
IFllcyB9OwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlKGNvbnN0IFJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9j
a3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBS
ZXNvbHZlVVJMczo6Tm8pOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBu
dWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6
Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywg
UmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOwogU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZXNvbHZlVVJMcyA9
IFJlc29sdmVVUkxzOjpObywgU2VyaWFsaXplQ29tcG9zZWRUcmVlID0gU2VyaWFsaXplQ29tcG9z
ZWRUcmVlOjpObywgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyKTsKIAogZW51bSBjbGFzcyBTZXJp
YWxpemVkTm9kZXMgOiB1aW50OF90IHsgU3VidHJlZUluY2x1ZGluZ05vZGUsIFN1YnRyZWVzT2ZD
aGlsZHJlbiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9y
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXgg
OTNkZGVhZjg4ODliOGU3ZmNjMjY5MzQxMjQwODU4Mjg0NDc2YzhkNy4uODVhNDRiOWE3OGU0NjY5
OGVhZTMwYzc0NzU2NTg1YTQ0NGQ4ZTQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy93aW4vRWRpdG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9F
ZGl0b3JXaW4uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBhdXRvIGZyYWdt
ZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCBj
cmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9IHBhc3Rl
Ym9hcmQtPmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRp
b25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0
KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpB
c1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9s
c0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0lt
YWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAppbmRleCA2ZDgwMWE2MTVmMTE2YjRkNTk2
MjdlMjg5YWE2M2VkMTZmNmNlYWVjLi41ODRlYzYzZmIxYmE3NDhlM2RmOWE5Yzc2NDNmYWVlN2Y3
YmU0MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VD
b250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAppbmRleCAwMWFiOTE3ZDBkYzk3OGMzMWZlZmY3YTlhMDkwY2Qw
MmJmMWRkOGQ2Li42ODMwMzE2ODQzMzVkNTk2OWRiY2I0NmUxNDRmYzk5OTM3ZTc1ZjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNo
aXZlLmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZXJpYWxpemVk
QXR0YWNobWVudERhdGEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDU0LDE5ICs0NTMs
MTYgQEAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShG
cmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIGNyZWF0ZShtYWluUmVzb3VyY2UucmVsZWFzZU5vbk51
bGwoKSwgZG9jdW1lbnRMb2FkZXItPnN1YnJlc291cmNlcygpLCBXVEZNb3ZlKHN1YmZyYW1lQXJj
aGl2ZXMpKTsKIH0KIAotUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZShSYW5nZSogcmFuZ2UpCitSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoIXJh
bmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgYXV0byYgZG9jdW1l
bnQgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3Vt
ZW50ID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsd2F5cyAiZm9yIGludGVyY2hhbmdlIi4g
SXMgdGhhdCByaWdodD8KICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIFN0cmluZyBt
YXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2U6Olllcyk7CisgICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0
cmluZyhkb2N1bWVudCkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShyYW5n
ZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOwogICAgIHJldHVybiBj
cmVhdGUobWFya3VwU3RyaW5nLCAqZnJhbWUsIG5vZGVMaXN0LCBudWxscHRyKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5o
CmluZGV4IGI1MWNmNjE2YmYwODJlMjk0MDliNDQyMWE0M2NiNzExMTQ4MGE5ODkuLjY3YWZhODNk
YzdhOWJmMjJmOGU4OTY1MWVlOWVjNDM5MzJmMDY1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKQEAgLTM1LDcgKzM1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSYW5nZTsKKworc3RydWN0IFNpbXBsZVJhbmdlOwogCiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZl
IGZpbmFsIDogcHVibGljIEFyY2hpdmUgewogcHVibGljOgpAQCAtNDYsNyArNDcsNyBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBj
cmVhdGUoTm9kZSYsIFdURjo6RnVuY3Rpb248Ym9vbChGcmFtZSYpPiYmIGZyYW1lRmlsdGVyID0g
eyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+
IGNyZWF0ZShGcmFtZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5
V2ViQXJjaGl2ZT4gY3JlYXRlRnJvbVNlbGVjdGlvbihGcmFtZSopOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKFJhbmdlKik7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoY29u
c3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKaW5kZXggZGYxMzVhZjQzOWZkN2U3NjQxNzQ3YmI3MzY3Yzg2YjhkYzVmZjcyYy4uNTll
YTRmYmY3ZTllNTUyZDI5NzcxYmIyNWYwNjVkZTEwM2NkYjEzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmNwcApAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjph
ZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgewotICAgICAgICBzZWxlY3Rp
b24ubW92ZVRvKCZyYW5nZSk7CisgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oU2ltcGxl
UmFuZ2UgeyByYW5nZSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzU2LDcgKzM1
Niw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5nZS5zdGFydFBvc2l0aW9uKCksIG5vcm1hbGl6
ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2UgY29udGFpbnMgdGhlIG9yaWdpbmFs
IHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8oJnJhbmdlKTsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMzY2LDcgKzM2Niw3
IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAgICAg
ICByZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
ICpub3JtYWxpemVkUmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9u
KCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHRoZSBuZXcgcmFuZ2UuCi0gICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhub3JtYWxpemVkUmFuZ2UuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oU2ltcGxlUmFuZ2UgeyAqbm9ybWFsaXpl
ZFJhbmdlIH0pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGUg
cmFuZ2VzIGludGVyc2VjdC4KICAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG5vcm1h
bGl6ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpLCBET1dOU1RS
RUFNKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNmY5OGFhZThk
NzU2ZDIyZDg3MDhiZDdhNjNjZWFkYjdlYTVjMWU3ZC4uNTY2ZDVkNDY5MzA5ZWI4YzYzMzVlMDJh
MmVjMTcwYjFjNjIxMWE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
QEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUg
IlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUHJvbWlzZWRBdHRhY2htZW50SW5mby5oIgorI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0YWNobWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTIz
OSw3ICsyNDAsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJhdGlvbihj
b25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgaWYgKCFtX2Ryb3BwZWRJbWFnZVBsYWNl
aG9sZGVycy5pc0VtcHR5KCkgJiYgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlICYmIHRy
eVRvVXBkYXRlRHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKGRyYWdEYXRhKSkgewogICAgICAgICBt
X2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVycy5jbGVhcigpOwotICAgICAgICBtX2Ryb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyUmFuZ2UgPSBudWxscHRyOworICAgICAgICBtX2Ryb3BwZWRJbWFnZVBsYWNl
aG9sZGVyUmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgIG1fZG9jdW1lbnRVbmRlck1vdXNl
ID0gbnVsbHB0cjsKICAgICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC02MzMsNyArNjM0LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0
RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7Ci0gICAgICAgIGF1dG8gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0
KTsKKyAgICAgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdl
LCB0ZXh0KTsKICAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCkt
PnBlcmZvcm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtODU2LDkgKzg1Nywx
MCBAQCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiAKIHN0YXRpYyB2
b2lkIHNlbGVjdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gZWxlbWVudC5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNl
bGVjdE5vZGUoZWxlbWVudCk7Ci0gICAgZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSkp
OworICAgIGlmIChhdXRvIGZyYW1lID0gZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGVsZW1lbnQpKQor
ICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigqcmFuZ2UpOworICAg
IH0KIH0KIAogc3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29uc3QgSW50UG9p
bnQmIG1vdXNlRHJhZ2dlZFBvaW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbiwgY29uc3Qg
SW50UG9pbnQmIGRyYWdJbWFnZU9mZnNldCwgYm9vbCBpc0xpbmtJbWFnZSkKQEAgLTEzNzMsNyAr
MTM3NSw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvU3lzdGVtRHJhZyhEcmFnSW1hZ2UgaW1h
Z2UsIGNvbnN0IEludFBvaW50JiBkcmFnTG9jLCBjb25zCiAKIHZvaWQgRHJhZ0NvbnRyb2xsZXI6
OnJlbW92ZUFsbERyb3BwZWRJbWFnZVBsYWNlaG9sZGVycygpCiB7Ci0gICAgbV9kcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlclJhbmdlID0gbnVsbHB0cjsKKyAgICBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9s
ZGVyUmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgZm9yIChhdXRvJiBwbGFjZWhvbGRlciA6IHN0
ZDo6ZXhjaGFuZ2UobV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMsIHsgfSkpIHsKICAgICAgICAg
aWYgKHBsYWNlaG9sZGVyLT5pc0Nvbm5lY3RlZCgpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXIt
PnJlbW92ZSgpOwpAQCAtMTQ1NSwxMyArMTQ1NywxMyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpp
bnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3RvcjxJbnRTaXpl
PgogICAgIGF1dG8gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKmRv
Y3VtZW50LCBXVEZNb3ZlKGZyYWdtZW50KSwgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJl
dmVudE5lc3RpbmcsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJlcGxhY2UgfSwgRWRp
dEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApOwogICAgIGNvbW1hbmQtPmFwcGx5KCk7CiAKLSAgICBh
dXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gY29tbWFuZC0+aW5zZXJ0ZWRDb250ZW50UmFuZ2Uo
KTsKKyAgICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGNvbW1h
bmQtPmluc2VydGVkQ29udGVudFJhbmdlKCkpOwogICAgIGlmICghaW5zZXJ0ZWRDb250ZW50UmFu
Z2UpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIGNvbnRhaW5lciA9IG1ha2VSZWZQdHIoaW5zZXJ0ZWRDb250ZW50UmFu
Z2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOworICAgIGF1dG8gY29udGFpbmVyID0gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoKmluc2VydGVkQ29udGVudFJhbmdlKTsKICAgICBpZiAoIWlz
PENvbnRhaW5lck5vZGU+KGNvbnRhaW5lcikpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjksNyArMTQ3MSw3IEBAIHZvaWQgRHJhZ0NvbnRy
b2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVjdG9y
PEludFNpemU+CiAKICAgICBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiBwbGFjZWhvbGRl
cnM7CiAgICAgZm9yIChhdXRvJiBwbGFjZWhvbGRlciA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxJ
bWFnZUVsZW1lbnQ+KGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpjb250YWluZXIpKSkgewotICAg
ICAgICBhdXRvIGludGVyc2VjdHNOb2RlID0gaW5zZXJ0ZWRDb250ZW50UmFuZ2UtPmludGVyc2Vj
dHNOb2RlKHBsYWNlaG9sZGVyKTsKKyAgICAgICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGNyZWF0
ZUxpdmVSYW5nZSgqaW5zZXJ0ZWRDb250ZW50UmFuZ2UpLT5pbnRlcnNlY3RzTm9kZShwbGFjZWhv
bGRlcik7CiAgICAgICAgIGlmICghaW50ZXJzZWN0c05vZGUuaGFzRXhjZXB0aW9uKCkgJiYgaW50
ZXJzZWN0c05vZGUucmV0dXJuVmFsdWUoKSkKICAgICAgICAgICAgIHBsYWNlaG9sZGVycy5hcHBl
bmQocGxhY2Vob2xkZXIpOwogICAgIH0KQEAgLTE0OTMsNyArMTQ5NSw3IEBAIHZvaWQgRHJhZ0Nv
bnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVj
dG9yPEludFNpemU+CiAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlID0gV1RGTW92
ZShpbnNlcnRlZENvbnRlbnRSYW5nZSk7CiAKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIo
KTsKLSAgICBjYXJldENvbnRyb2xsZXIuc2V0Q2FyZXRQb3NpdGlvbihtX2Ryb3BwZWRJbWFnZVBs
YWNlaG9sZGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgY2FyZXRDb250cm9sbGVyLnNl
dENhcmV0UG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fZHJvcHBlZEltYWdl
UGxhY2Vob2xkZXJSYW5nZS0+c3RhcnQpKTsKIH0KIAogdm9pZCBEcmFnQ29udHJvbGxlcjo6Zmlu
YWxpemVEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcihIVE1MSW1hZ2VFbGVtZW50JiBwbGFjZWhvbGRl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAppbmRleCA5MjI0YWIyMDZjZGZlYmI1
M2YxMWM3OGEzZWFlMjA4MTNjZmRkMjZjLi5lMzAwZDMyOGQ1NzllZGIxNzFmMDNlMjAwOGYxNGQ4
YjdlYmY2NDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlIDx3
dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg5LDcgKzkwLDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxhY2VEcmFnQ2FyZXQoY29uc3QgSW50UG9pbnQm
KTsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+JiBkcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlcnMoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVy
czsgfQotICAgIGNvbnN0IFJlZlB0cjxSYW5nZT4mIGRyb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7IH0KKyAg
ICBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGRyb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmluYWxpemVEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcihI
VE1MSW1hZ2VFbGVtZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnREcm9wcGVk
SW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3RvcjxJbnRTaXplPiYgaW1hZ2VTaXpl
cyk7CkBAIC0xNjEsNyArMTYyLDcgQEAgcHJpdmF0ZToKICAgICBVUkwgbV9kcmFnZ2luZ0ltYWdl
VVJMOwogICAgIGJvb2wgbV9pc1BlcmZvcm1pbmdEcm9wIHsgZmFsc2UgfTsKICAgICBWZWN0b3I8
UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyczsKLSAgICBS
ZWZQdHI8UmFuZ2U+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsKKyAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOwogfTsKIAogV0VC
Q09SRV9FWFBPUlQgYm9vbCBpc0RyYWdnYWJsZUxpbmsoY29uc3QgRWxlbWVudCYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVlZGE4MzBlY2Y0NjVkMGRkMGIyNDdmYWUw
MDIwYzVlMjUyZWI4ZTAuLjk2NzU1ODFmOTNmOGQyMWU4NzA0MDc4OGU2ZDlhZjAxNGI1MzM1MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY3NSwxMSArNjc1LDEwIEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAKIHN0YXRpYyB1aW50NjRfdCB0ZXh0RGlzdGFuY2Uo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8g
c3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRvIGVuZEJv
dW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnkg
fHwgIWVuZEJvdW5kYXJ5KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQs
IGVuZCk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNo
YXJhY3RlckNvdW50KHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9LCBUZXh0SXRlcmF0
b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgcmV0dXJu
IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2Vl
bkFsbFZpc2libGVQb3NpdGlvbnMpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDM1NTFiNGQ2MmI4NDYwZGJjNjE3NGI3
ZGU1ZjJiOWYzODNhZjA3NWIuLjY0MTA1NDhkNDIyMjM3N2MxNDEzODYxY2I1ZDkwMjQyNTNkZWQ3
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MTksMjQgKzgxOSwxOSBAQCBEb2N1bWVudCog
RnJhbWU6OmRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiBSZWZQdHI8UmFu
Z2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQogewog
ICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsK
LSAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7
Ci0gICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFp
bmVyVGV4dCgpOwogICAgIGlmICghY29udGFpbmVyVGV4dCB8fCAhY29udGFpbmVyVGV4dC0+cmVu
ZGVyZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxlY3Qo
KSA9PSBVc2VyU2VsZWN0OjpOb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
IChhdXRvIHByZXZpb3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ucHJldmlvdXMoKSkp
IHsKLSAgICAgICAgYXV0byBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAq
cHJldmlvdXMsICpwb3NpdGlvbkJvdW5kYXJ5IH07Ci0gICAgICAgIGlmIChlZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBvaW50
KSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJS
YW5nZSk7CisgICAgaWYgKGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShwb3NpdGlvbi5wcmV2aW91cygpLCBwb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKGVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhm
cmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnByZXZpb3Vz
Q2hhcmFjdGVyUmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvIG5leHQgPSBtYWtlQm91bmRh
cnlQb2ludChwb3NpdGlvbi5uZXh0KCkpKSB7Ci0gICAgICAgIGF1dG8gbmV4dENoYXJhY3RlclJh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqcG9zaXRpb25Cb3VuZGFyeSwgKm5leHQgfTsKLSAgICAgICAg
aWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZSkuY29udGFp
bnMoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG5leHRD
aGFyYWN0ZXJSYW5nZSk7CisgICAgaWYgKGF1dG8gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbi5uZXh0KCkpKSB7CisgICAgICAgIGlmIChlZGl0
b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFt
ZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKm5leHRDaGFyYWN0
ZXJSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCAwZTJhNzdiOGRjMzU1ZTYzZTM0OTVhMmIxODkyYzc1NzVhYTg0OGVmLi44MDVmM2QxZDg5
NjVhYmE1MTk0NjYwM2U3NGM5OTFhNmQyOTNkMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTk4
LDYgKzk4LDcgQEAKICNpbmNsdWRlICJQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIu
aCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCkBAIC03MTEsMTIgKzcxMiwxMCBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdyYQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5n
ZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGludCBsaW1pdCwg
VmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdlcywgaW50JiBpbmRleEZvclNlbGVjdGlv
bikKK2F1dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5k
T3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsaW1pdCkgLT4gTWF0Y2hpbmdSYW5nZXMKIHsKICAg
ICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJlc3VsdFJhbmdlczsKIAotICAgIGluZGV4Rm9yU2VsZWN0
aW9uID0gMDsKLQogICAgIEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSog
ZnJhbWVXaXRoU2VsZWN0aW9uID0gbnVsbHB0cjsKICAgICBkbyB7CkBAIC03MjcsMTAgKzcyNiwx
MSBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRh
cmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgIH0gd2hpbGUgKGZyYW1lKTsKIAogICAg
IGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gaW5kZXhGb3JTZWxlY3Rpb247CiAK
ICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7Ci0gICAgICAgIGluZGV4Rm9yU2VsZWN0aW9u
ID0gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbjsKICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdl
ID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHRSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CkBA
IC03NTYsMzUgKzc1NiwzNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhj
b25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICAgICAg
aW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcmFuZ2UgOiBy
ZXN1bHRSYW5nZXMpCi0gICAgICAgIG1hdGNoUmFuZ2VzLmFwcGVuZChjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpKTsKKyAgICBpZiAoIWluZGV4Rm9yU2VsZWN0aW9uKQorICAgICAgICBpbmRleEZvclNl
bGVjdGlvbiA9IHJlc3VsdFJhbmdlcy5zaXplKCk7CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKHJl
c3VsdFJhbmdlcyksICppbmRleEZvclNlbGVjdGlvbiB9OwogfQogCi1SZWZQdHI8UmFuZ2U+IFBh
Z2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VS
YW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBQYWdlOjpy
YW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmICh0
YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5n
ZS0+b3duZXJEb2N1bWVudCgpLnBhZ2UoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmNvbnRh
aW5lci0+ZG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIENhbldyYXAgY2FuV3JhcCA9IG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3Vu
ZCkgPyBDYW5XcmFwOjpZZXMgOiBDYW5XcmFwOjpObzsKLSAgICBGcmFtZSogZnJhbWUgPSByZWZl
cmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSA6ICZt
YWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5j
ZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUo
KTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOwogICAgIGRvIHsKLSAgICAgICAgaWYg
KGF1dG8gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQs
IGZyYW1lID09IHN0YXJ0RnJhbWUgPyBtYWtlU2ltcGxlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpIDog
V1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCi0gICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFu
Z2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0
RnJhbWUgPyByZWZlcmVuY2VSYW5nZSA6IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91
bmQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdlOwogICAgICAgICBmcmFtZSA9IGlu
Y3JlbWVudEZyYW1lKGZyYW1lLCAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpLCBjYW5XcmFw
KTsKICAgICB9IHdoaWxlIChmcmFtZSAmJiBmcmFtZSAhPSBzdGFydEZyYW1lKTsKIAogICAgIC8v
IFNlYXJjaCBjb250ZW50cyBvZiBzdGFydEZyYW1lLCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUg
cmVmZXJlbmNlIHJhbmdlIHRoYXQgd2UgZGlkIGVhcmxpZXIuCiAgICAgLy8gV2UgY2hlYXQgYSBi
aXQgYW5kIGp1c3Qgc2VhcmNoIGFnYWluIHdpdGggd3JhcCBvbi4KICAgICBpZiAoY2FuV3JhcCA9
PSBDYW5XcmFwOjpZZXMgJiYgcmVmZXJlbmNlUmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8gcmVz
dWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgbWFr
ZVNpbXBsZVJhbmdlKCpyZWZlcmVuY2VSYW5nZSksIG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwgU3Rh
cnRJblNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc3Vs
dFJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5lZGl0
b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zIHwgV3Jh
cEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJh
bmdlOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIHVuc2lnbmVkIFBhZ2U6OmZpbmRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCwgU2hv
dWxkSGlnaGxpZ2h0TWF0Y2hlcyBzaG91bGRIaWdobGlnaHRNYXRjaGVzLCBTaG91bGRNYXJrTWF0
Y2hlcyBzaG91bGRNYXJrTWF0Y2hlcykKQEAgLTg3OSwyNCArODgxLDIyIEBAIHN0YXRpYyB2b2lk
IHJlcGxhY2VSYW5nZXMoUGFnZSYgcGFnZSwgY29uc3QgVmVjdG9yPEZpbmRSZXBsYWNlbWVudFJh
bmdlPiYgcmFuZ2VzCiAgICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgICAgICAgICBmcmFtZS0+ZWRp
dG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VtZW50VGV4dCwgRWRpdG9yOjpT
ZWxlY3RSZXBsYWNlbWVudDo6WWVzLCBFZGl0b3I6OlNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rp
b246Okluc2VydFJlcGxhY2VtZW50KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdWludDMyX3Qg
UGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFu
Z2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rp
b25Pbmx5KQordWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3Rv
cjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFRleHQsIGJvb2wgLypzZWxlY3Rpb25Pbmx5Ki8pCiB7Ci0gICAgLy8gRklYTUU6IEluIHRoZSBm
dXR1cmUsIHdlIHNob3VsZCByZXNwZWN0IHRoZSBgc2VsZWN0aW9uT25seWAgZmxhZyBieSBjaGVj
a2luZyB3aGV0aGVyIGVhY2ggcmFuZ2UgYmVpbmcgcmVwbGFjZWQgaXMKLSAgICAvLyBjb250YWlu
ZWQgd2l0aGluIGl0cyBmcmFtZSdzIHNlbGVjdGlvbi4KLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0
aW9uT25seSk7CisgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCByZXNwZWN0
IHRoZSBgc2VsZWN0aW9uT25seWAgZmxhZyBieSBjaGVja2luZyB3aGV0aGVyIGVhY2ggcmFuZ2Ug
YmVpbmcgcmVwbGFjZWQgaXMgY29udGFpbmVkIHdpdGhpbiBpdHMgZnJhbWUncyBzZWxlY3Rpb24u
CiAKICAgICBWZWN0b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2VzOwog
ICAgIHJlcGxhY2VtZW50UmFuZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmFuZ2VzVG9SZXBs
YWNlLnNpemUoKSk7CiAKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmFuZ2VzVG9SZXBsYWNlKSB7
Ci0gICAgICAgIGF1dG8gaGlnaGVzdFJvb3QgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJv
b3QocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgICAgICBpZiAoIWhpZ2hlc3RSb290IHx8
IGhpZ2hlc3RSb290ICE9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocmFuZ2UtPmVuZFBvc2l0aW9uKCkp
IHx8ICFoaWdoZXN0Um9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBhdXRvIGhpZ2hl
c3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290KGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihyYW5nZS5zdGFydCkpKTsKKyAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBo
aWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihyYW5nZS5lbmQpKSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKCpoaWdoZXN0Um9vdCk7CiAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2Vz
LmFwcGVuZCh7IFdURk1vdmUoaGlnaGVzdFJvb3QpLCBjaGFyYWN0ZXJSYW5nZShzY29wZSwgcmFu
Z2UpIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA5ZDhmOGZiNTNmODNhNjY3NTAxNjNlOWYwMzQ0MjE3
MDEzZjZiMzdjLi5jZmZhNmM5YjYwYjczM2Y4NWFiMTY0NjBhNzUxNGYzMjU3ZTM3MWM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuaApAQCAtMTI5LDcgKzEyOSw2IEBAIGNsYXNzIFBsdWdpblZpZXdCYXNlOwogY2xh
c3MgUG9pbnRlckNhcHR1cmVDb250cm9sbGVyOwogY2xhc3MgUG9pbnRlckxvY2tDb250cm9sbGVy
OwogY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBSZW5kZXJPYmpl
Y3Q7CiBjbGFzcyBSZXNvdXJjZVVzYWdlT3ZlcmxheTsKIGNsYXNzIFNjcm9sbExhdGNoaW5nU3Rh
dGU7CkBAIC0xNTIsNiArMTUxLDggQEAgY2xhc3MgV2ViR0xTdGF0ZVRyYWNrZXI7CiBjbGFzcyBX
aGVlbEV2ZW50RGVsdGFGaWx0ZXI7CiBjbGFzcyBXaGVlbEV2ZW50VGVzdE1vbml0b3I7CiAKK3N0
cnVjdCBTaW1wbGVSYW5nZTsKKwogdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsK
IHVzaW5nIFNoYXJlZFN0cmluZ0hhc2ggPSB1aW50MzJfdDsKIApAQCAtMjg5LDEyICsyOTAsMTIg
QEAgcHVibGljOgogICAgIGJvb2wgdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7IH0KIAogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgRGlkV3Jh
cCogPSBudWxscHRyKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCByZXBsYWNlUmFuZ2Vz
V2l0aFRleHQoY29uc3QgVmVjdG9yPFJlZjxSYW5nZT4+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpOworICAgIFdFQkNP
UkVfRVhQT1JUIHVpbnQzMl90IHJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8U2lt
cGxlUmFuZ2U+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0
LCBib29sIHNlbGVjdGlvbk9ubHkpOwogICAgIFdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBS
YW5nZSosIEZpbmRPcHRpb25zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mIHNlYXJjaFJhbmdlLCBGaW5kT3B0aW9ucyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB1
bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNp
Z25lZCBtYXhNYXRjaENvdW50KTsKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBtYXJrQWxs
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIGJvb2wgc2hvdWxkSGln
aGxpZ2h0LCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKQEAgLTMwNCwxMyArMzA1LDE2IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQmVmb3JlUHJpbnRFdmVudCgp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hBZnRlclByaW50RXZlbnQoKTsKIAot
ICAgIC8vIEZpbmQgYWxsIHRoZSBSYW5nZXMgZm9yIHRoZSBtYXRjaGluZyB0ZXh0LgorICAgIC8v
IEZpbmQgYWxsIHRoZSByYW5nZXMgZm9yIHRoZSBtYXRjaGluZyB0ZXh0LgogICAgIC8vIFVwb24g
cmV0dXJuLCBpbmRleEZvclNlbGVjdGlvbiB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgot
ICAgIC8vIDAgaWYgdGhlcmUgaXMgbm8gdXNlciBzZWxlY3Rpb24KLSAgICAvLyB0aGUgaW5kZXgg
b2YgdGhlIGZpcnN0IHJhbmdlIGFmdGVyIHRoZSB1c2VyIHNlbGVjdGlvbgotICAgIC8vIE5vTWF0
Y2hBZnRlclVzZXJTZWxlY3Rpb24gaWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgdGV4dCBhZnRlciB0
aGUgdXNlciBzZWxlY3Rpb24uCi0gICAgZW51bSB7IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb24g
PSAtMSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmluZFN0cmluZ01hdGNoaW5nUmFuZ2Vz
KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBpbnQgbWF4Q291bnQsIFZlY3RvcjxSZWZQdHI8
UmFuZ2U+PiYsIGludCYgaW5kZXhGb3JTZWxlY3Rpb24pOworICAgIC8vICAwIGlmIHRoZXJlIGlz
IG5vIHVzZXIgc2VsZWN0aW9uLAorICAgIC8vICBpbmRleCBvZiB0aGUgZmlyc3QgcmFuZ2UgYWZ0
ZXIgdGhlIHVzZXIgc2VsZWN0aW9uLAorICAgIC8vICBzaXplIG9mIHRoZSByYW5nZSB2ZWN0b3Ig
aWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgdGV4dCBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24uCisg
ICAgc3RydWN0IE1hdGNoaW5nUmFuZ2VzIHsKKyAgICAgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBy
YW5nZXM7CisgICAgICAgIHVuc2lnbmVkIGluZGV4Rm9yU2VsZWN0aW9uIHsgMCB9OworICAgIH07
CisgICAgV0VCQ09SRV9FWFBPUlQgTWF0Y2hpbmdSYW5nZXMgZmluZFRleHRNYXRjaGVzKGNvbnN0
IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhDb3VudCk7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VGV4dEluZGljYXRvci5jcHAKaW5kZXggZGQ5NDJlOTI0OGQ1ZDcyMzUyZDRiNWIyNTkwYzhiNmFm
ZDU4NzgyMC4uOWU2MjEwOTZkYTJlMmY3YmY1YWU3MGU4YTNlZGZiNGM2ZDg1MmEwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGlj
IENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgY29uc3QgRnIKICAgICBhdXRvIGVzdGltYXRlZEJhY2tncm91bmRDb2xvciA9IGZy
YW1lLnZpZXcoKSA/IGZyYW1lLnZpZXcoKS0+ZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSA6IENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBu
dWxscHRyOwotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpOworICAgIGF1dG8g
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZSk7CiAgICAgd2hp
bGUgKGNvbW1vbkFuY2VzdG9yKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJFbGVtZW50Pihjb21t
b25BbmNlc3Rvci0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIHJlbmRlcmVyID0gZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oY29tbW9uQW5jZXN0b3ItPnJlbmRlcmVyKCkpOwpAQCAtMzA5LDcg
KzMwOSw3IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRh
dGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltCiAKICAgICBib29sIHVzZUJvdW5kaW5n
UmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgPSBkYXRhLm9wdGlvbnMuY29u
dGFpbnMoVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250
ZW50Rm9yQ29tcGxleFJhbmdlcyk7CiAgICAgaWYgKHVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxs
Q29udGVudEZvckNvbXBsZXhSYW5nZXMgJiYgY29udGFpbnNPbmx5V2hpdGVTcGFjZVRleHQocmFu
Z2UpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1vbkluY2x1
c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcikt
PnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRhaW5lclJlbmRlcmVyID0gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBk
YXRhLm9wdGlvbnMuYWRkKFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxsQ29udGVudCk7CiAg
ICAgICAgICAgICB0ZXh0UmVjdHMuYXBwZW5kKGNvbnRhaW5lclJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQppbmRleCAzZDdhNWU5ZDk2MmNkNzAzOTNjZmRmMzViOGRlMDlmYzgxMDNjMjk2Li44N2RkMWYz
ZTY4MTg2NDVkODE0N2IwZWQ0ZTM2NTM5OGMzZDExMTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQpAQCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCAiUGFnZVRyYW5zaXRpb25FdmVu
dC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxh
eWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbXBvcnQgIlJlbmRl
clRleHRDb250cm9sLmgiCkBAIC0xMTUsMjAgKzExNiwxOSBAQCBOU0FycmF5ICpGcmFtZTo6d29y
ZHNJbkN1cnJlbnRQYXJhZ3JhcGgoKSBjb25zdAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uKHBhZ2UoKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgcGFn
ZSgpLT5zZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kKHBv
c2l0aW9uKTsKKworICAgIGF1dG8gZW5kID0gcG9zaXRpb247CiAgICAgaWYgKCFpc1N0YXJ0T2ZQ
YXJhZ3JhcGgoZW5kKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBlbmQu
cHJldmlvdXMoKTsKLSAgICAgICAgVUNoYXIgYyhwcmV2aW91cy5jaGFyYWN0ZXJBZnRlcigpKTsK
KyAgICAgICAgVUNoYXIgYyA9IHByZXZpb3VzLmNoYXJhY3RlckFmdGVyKCk7CisgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgdXNlIHNvbWV0aGluZyBmcm9tIElDVSBvciBBU0NJSUNUeXBlIHRoYXQg
aXMgbm90IHN1YmplY3QgdG8gUE9TSVggY3VycmVudCBsYW5ndWFnZSByYXRoZXIgdGhhbiBpc3dw
dW5jdC4KICAgICAgICAgaWYgKCFpc3dwdW5jdChjKSAmJiAhaXNTcGFjZU9yTmV3bGluZShjKSAm
JiBjICE9IG5vQnJlYWtTcGFjZSkKICAgICAgICAgICAgIGVuZCA9IHN0YXJ0T2ZXb3JkKGVuZCk7
CiAgICAgfQogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzdGFydE9mUGFyYWdyYXBoKGVuZCkp
OwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoKmRvY3Vt
ZW50KCkpKTsKLSAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgc3RhcnQpOwotICAgIHNl
dEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgZW5kKTsKLQotICAgIGlmIChzZWFyY2hSYW5nZS0+Y29s
bGFwc2VkKCkpCisgICAgYXV0byBzZWFyY2hSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwg
ZW5kKTsKKyAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIE5TTXV0YWJsZUFycmF5ICp3b3JkcyA9IFtOU011
dGFibGVBcnJheSBhcnJheV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAKaW5kZXggNDA2ZDViZTkyOWQ1M2ExOTc0MjAwYjk0ODNmZDQxYTY2ZDM1NmZlZS4uMTdh
ZmVhYzE0NDJkYmUxYTY2MzlkNzE0NGUxNWE2MGQ2ZGI3Y2UyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNTc5LDExICs1NzksOCBAQCBib29sIEhp
dFRlc3RSZXN1bHQ6OmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdAog
ICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpOwotICAgIGlmICghd29yZFJhbmdlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gIXdvcmRSYW5nZS0+dGV4dCgpLmlzRW1wdHkoKTsKKyAgICBhdXRv
IHdvcmRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4
dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2Fy
ZCk7CisgICAgcmV0dXJuIHdvcmRSYW5nZSAmJiBoYXNBbnlQbGFpblRleHQoKndvcmRSYW5nZSk7
CiB9CiAKIFVSTCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcAppbmRl
eCBiOWM1ODdjY2JlYjAyZDI2ZmZmNjcxNzY4ZjI2ZTRkNjdlZjQwODllLi41OTAzYzA1NzI1YzU2
ZTdlZWU5ZTQxMWI0NjMzZmZhNDdjYTVkN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2lu
Y2x1ZGUgIkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQ
SUNhc3QuaCIKICNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1JhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogCiBXS1R5cGVJRCBX
S1dlYkFyY2hpdmVHZXRUeXBlSUQoKQogewpAQCAtNTMsNyArNTUsNyBAQCBXS1dlYkFyY2hpdmVS
ZWYgV0tXZWJBcmNoaXZlQ3JlYXRlV2l0aERhdGEoV0tEYXRhUmVmIGRhdGFSZWYpCiAKIFdLV2Vi
QXJjaGl2ZVJlZiBXS1dlYkFyY2hpdmVDcmVhdGVGcm9tUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRs
ZVJlZiByYW5nZUhhbmRsZVJlZikKIHsKLSAgICBhdXRvIHdlYkFyY2hpdmUgPSBBUEk6OldlYkFy
Y2hpdmU6OmNyZWF0ZShXZWJLaXQ6OnRvSW1wbChyYW5nZUhhbmRsZVJlZiktPmNvcmVSYW5nZSgp
KTsKKyAgICBhdXRvIHdlYkFyY2hpdmUgPSBBUEk6OldlYkFyY2hpdmU6OmNyZWF0ZShtYWtlU2lt
cGxlUmFuZ2UoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5jb3JlUmFuZ2UoKSkpOwog
ICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZ3ZWJBcmNoaXZlLmxlYWtSZWYoKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaAppbmRleCA3MWRlMjhiZGE3NGQ3ZjAzNGZiOTJj
NmYyODI0ZmVhMzllMmNmOWFmLi4xNDY0YTZiNzlhZWNkZmU4MmU3Y2FjNDRhY2U5ZjNlOTM4MDM0
YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5oCkBAIC0yMyw4ICsyMyw3IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJB
cmNoaXZlX2gKLSNkZWZpbmUgV2ViQXJjaGl2ZV9oCisjcHJhZ21hIG9uY2UKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogCkBAIC0zOCw3ICszNyw3IEBAIGNsYXNzIERhdGE7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIExlZ2FjeVdlYkFyY2hpdmU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBT
aW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC01Miw3ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShXZWJBcmNoaXZlUmVzb3VyY2Uq
IG1haW5SZXNvdXJjZSwgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3VicmVzb3VyY2VzLCBSZWZQdHI8
QVBJOjpBcnJheT4mJiBzdWJmcmFtZUFyY2hpdmVzKTsKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hp
dmU+IGNyZWF0ZShBUEk6OkRhdGEqKTsKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0
ZShSZWZQdHI8V2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZT4mJik7Ci0gICAgc3RhdGljIFJlZjxX
ZWJBcmNoaXZlPiBjcmVhdGUoV2ViQ29yZTo6UmFuZ2UmKTsKKyAgICBzdGF0aWMgUmVmPFdlYkFy
Y2hpdmU+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpOwogCiAgICAgV2ViQXJj
aGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UoKTsKICAgICBBUEk6OkFycmF5KiBzdWJyZXNvdXJj
ZXMoKTsKQEAgLTc2LDUgKzc1LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIEFQSQogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNlbmRpZiAvLyBXZWJBcmNoaXZlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCmluZGV4IGZiNTRhZjQwYmMwMGQyNDNiZjkwZTky
Mjk2Y2QxYjNkMGRiYmNlZWYuLjE4ZGRjNTdhOWQ0MTIwMDlkNmRmMzBhOThjNmU2YTUwMjNhZjI5
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0KKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5tbQpAQCAtNTIsOSArNTIsOSBA
QCBSZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRlKFJlZlB0cjxMZWdhY3lXZWJBcmNo
aXZlPiYmIGxlZ2FjeVdlYkFyY2hpdmUpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXJj
aGl2ZShsZWdhY3lXZWJBcmNoaXZlLnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAotUmVmPFdlYkFy
Y2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSYW5nZSYgcmFuZ2UpCitSZWY8V2ViQXJjaGl2ZT4g
V2ViQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJBcmNoaXZlKExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgmcmFu
Z2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGUocmFuZ2UpKSk7CiB9CiAKIFdlYkFyY2hpdmU6OldlYkFyY2hpdmUoV2ViQXJj
aGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YnJlc291
cmNlcywgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3ViZnJhbWVBcmNoaXZlcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9FZGl0aW5nUmFuZ2UuY3BwCmluZGV4IDg2YWM1NTNlNmZjYzA4MjJhZDQxOGM2YTBkM2Y4
Y2Y5YzRhOTliOTguLjlmN2M3MzEwOTNjZjg3MWE3ZTRjNjNmMWIxZjFhNmMzMDUzZjM1MzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBFZGl0aW5nUmFuZ2U6
OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRp
bmdSYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGJhc2UpCitPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFt
ZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRp
dmVUbyBiYXNlKQogewogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90Rm91
bmQpOwogICAgIFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlIHJhbmdlIHsgZWRpdGluZ1JhbmdlLmxv
Y2F0aW9uLCBlZGl0aW5nUmFuZ2UubGVuZ3RoIH07CkBAIC00NywyMSArNDcsMjEgQEAgUmVmUHRy
PFdlYkNvcmU6OlJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZy
YW1lLCBjb25zdCBFZGl0aW4KICAgICAgICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRl
YSBvZiBhbiBpbnB1dCBjb250ZXh0LgogICAgICAgICBhdXRvKiBlbGVtZW50ID0gZnJhbWUuc2Vs
ZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAgICAg
IGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSkpOworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiAgICAgfQogCiAgICAg
QVNTRVJUKGJhc2UgPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwogCiAg
ICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3Jh
cGgoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpKTsKICAgICBp
ZiAoIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9v
dE5vZGUoKSkuZW5kOwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6cmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3Bl
RW5kKSB9LCByYW5nZSkpOworICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlQm91bmRhcnlQb2ludEFm
dGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJv
b3ROb2RlKCkpOworICAgIHJldHVybiBXZWJDb3JlOjpyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyBX
VEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1vdmUoc2NvcGVFbmQpIH0sIHJhbmdlKTsKIH0K
IAotRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiBm
cmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQorRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6
ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGVkaXRpbmdSYW5n
ZUlzUmVsYXRpdmVUbykKIHsKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID09
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9FZGl0aW5nUmFuZ2UuaAppbmRleCBlMDQzZjk3MjQwZTQyNWVjZDI1YTQyN2VkZDkyN2FjYjc0
NWUzNjE0Li5mMTliNDQzZjBkYzcxOWE3NDgzNWM3OGM3NGIxNjUzZDk0MTFhMTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFJhbmdlOworc3RydWN0IFNpbXBsZVJhbmdl
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU4LDggKzU4LDggQEAgc3RydWN0IEVkaXRp
bmdSYW5nZSB7CiAgICAgLy8gKG5vdEZvdW5kLCAwKSBpcyBub3RhYmx5IHZhbGlkLgogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uICsgbGVuZ3RoID49IGxvY2F0aW9u
OyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiB0b1JhbmdlKFdlYkNvcmU6
OkZyYW1lJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0g
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwotICAgIHN0YXRpYyBFZGl0
aW5nUmFuZ2UgZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmFuZ2Uq
LCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVk
aXRhYmxlUm9vdCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiB0
b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgRWRpdGluZ1Jhbmdl
SXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwor
ICAgIHN0YXRpYyBFZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRv
ID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwogCiAjaWYgZGVmaW5l
ZChfX09CSkNfXykKICAgICBFZGl0aW5nUmFuZ2UoTlNSYW5nZSByYW5nZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaAppbmRleCA2OTZjZmZjYmRm
ODBlNTEyZTFkM2ZkZGE3ZjEwOGYzMWRiMzBlNmIxLi5kODg1MTExZDlmNzUwMDBiZTdkNjdlMDBi
Y2YwNzNhNDlhNjFlMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudC5oCkBAIC0zMSwxMSArMzEsMTEgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ1NTU3R5bGVEZWNsYXJh
dGlvbjsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7
CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBTdHlsZVByb3BlcnRpZXM7CitzdHJ1Y3QgU2lt
cGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTEsMjEgKzUxLDIxIEBAIGNs
YXNzIEVkaXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RWRpdG9yQ2xpZW50KCkg
eyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYktpdDo6V2ViUGFn
ZSYsIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYktpdDo6V2Vi
UGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdl
YkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqLCBXZWJD
b3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJD
b3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViS2l0OjpXZWJQYWdlJiwgV2Vi
Q29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwg
U3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVu
ZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJ
bXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Vs
ZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0OjpXZWJQYWdl
JiwgV2ViQ29yZTo6UmFuZ2UqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFzdGVib2FyZERh
dGFGb3JSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxXVEY6
OlN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdp
bkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViS2l0
OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoV2ViS2l0OjpXZWJQYWdlJiwgV2Vi
Q29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNv
cmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5nJiwg
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZERlbGV0
ZVJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3Jl
OjpFQWZmaW5pdHksIGJvb2wpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQXBwbHlTdHlsZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTdHlsZVByb3Bl
cnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2Um
LCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0aW5n
KFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViS2l0OjpXZWJQYWdlJiwgY29u
c3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJv
YXJkKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdl
PiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktp
dDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3Rv
cjxXVEY6OlN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+Jikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFn
ZSYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0OjpXZWJQ
YWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiwgYm9vbCkg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdl
YktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3Jl
OjpTaW1wbGVSYW5nZSYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBJbmplY3RlZEJ1bmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNw
cAppbmRleCBmYzdlMDBiMjhlYjNhNTY4ZjZmODRjNTZhMjZhYjFiZjA3OWI3NGMzLi5iNzQyMzU5
NzY1MGEyMjNkMWM4NTk0ZTNlZTZiYTNlMTM3YTcxMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIldLQnVuZGxl
Tm9kZUhhbmRsZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZS5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCIKICNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJG
cmFtZS5oIgpAQCAtOTAsNyArODksOCBAQCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVO
b2RlSGFuZGxlQ29weURvY3VtZW50KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSAogCiBXS1Jl
Y3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0UmVuZGVyUmVjdChXS0J1bmRsZU5vZGVIYW5kbGVSZWYg
bm9kZUhhbmRsZVJlZiwgYm9vbCogaXNSZXBsYWNlZCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShXZWJLaXQ6OnRvSW1wbChub2RlSGFuZGxlUmVmKS0+cmVuZGVyUmVjdChpc1JlcGxhY2Vk
KSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogV0tJ
bWFnZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgbm9kZUhhbmRsZVJlZiwgV0tTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykK
QEAgLTk5LDEwICs5OSwxMCBAQCBXS0ltYWdlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlTbmFw
c2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSAogICAgIHJldHVybiB0
b0FQSShpbWFnZS5sZWFrUmVmKCkpOwogfQogCi1XS0J1bmRsZVJhbmdlSGFuZGxlUmVmIFdLQnVu
ZGxlTm9kZUhhbmRsZUNvcHlWaXNpYmxlUmFuZ2UoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVI
YW5kbGVSZWYpCitXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlW
aXNpYmxlUmFuZ2UoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJLaXQ6
OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gV2ViS2l0Ojp0b0ltcGwo
bm9kZUhhbmRsZVJlZiktPnZpc2libGVSYW5nZSgpOwotICAgIHJldHVybiB0b0FQSShyYW5nZUhh
bmRsZS5sZWFrUmVmKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiBXS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0RWxlbWVudEJvdW5kcyhX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudEhhbmRsZVJlZikKQEAgLTExNSwxNCArMTE1LDE1
IEBAIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNl
cihXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtCiAgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0
RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIoV2ViS2l0
Ojp0b1dURlN0cmluZyh2YWx1ZVJlZikpOwogfQogCi12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNl
dEhUTUxJbnB1dEVsZW1lbnRTcGVsbGNoZWNrRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYg
aHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBlbmFibGVkKQordm9pZCBXS0J1bmRsZU5v
ZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmLCBib29sKQogewotICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoZW5hYmxlZCk7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1
dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4g
V2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxl
bWVudEF1dG9GaWxsZWQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1
dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYs
IGJvb2wgZmlsbGVkKQpAQCAtMTM1LDkgKzEzNiwxMCBAQCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRs
ZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkQW5kVmlld2FibGUoV0tCdW5kbGVOb2RlSGFu
ZAogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1M
SW5wdXRFbGVtZW50QXV0b0ZpbGxlZEFuZFZpZXdhYmxlKGF1dG9GaWxsZWRBbmRWaWV3YWJsZSk7
CiB9CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxs
QnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxs
QnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbEJ1dHRvbkVuYWJsZWQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSBhdXRv
RmlsbEJ1dHRvblR5cGUpCkBAIC0xNTUsOSArMTU3LDEwIEBAIFdLQXV0b0ZpbGxCdXR0b25UeXBl
IFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25U
eXBlCiAgICAgcmV0dXJuIHRvV0tBdXRvRmlsbEJ1dHRvblR5cGUoV2ViS2l0Ojp0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0
b25UeXBlKCkpOwogfQogCi1ib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1l
bnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1
dG9GaWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2Vi
S2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzQXV0b0ZpbGxBdmFpbGFi
bGUoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQXZhaWxh
YmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29s
IGF1dG9GaWxsQXZhaWxhYmxlKQpAQCAtMTY1LDkgKzE2OCwxMCBAQCB2b2lkIFdLQnVuZGxlTm9k
ZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVI
YW5kbGVSZQogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5z
ZXRBdXRvRmlsbEF2YWlsYWJsZShhdXRvRmlsbEF2YWlsYWJsZSk7CiB9CiAKLVdLUmVjdCBXS0J1
bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitXS1JlY3QgV0tC
dW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKFdL
QnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6
OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9G
aWxsQnV0dG9uQm91bmRzKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07CiB9CiAKIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudExh
c3RDaGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZikKQEAgLTE4MCwxMCArMTg0LDEwIEBAIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVI
CiAgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxUZXh0QXJlYUVsZW1lbnRIYW5kbGVSZWYp
LT5odG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiB9CiAKLVdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTFRhYmxlQ2VsbEVsZW1l
bnRDZWxsQWJvdmUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxUYWJsZUNlbGxFbGVtZW50SGFu
ZGxlUmVmKQorV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1M
VGFibGVDZWxsRWxlbWVudENlbGxBYm92ZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAg
UmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2Vi
S2l0Ojp0b0ltcGwoaHRtbFRhYmxlQ2VsbEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sVGFibGVDZWxs
RWxlbWVudENlbGxBYm92ZSgpOwotICAgIHJldHVybiB0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYo
KSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtZW50SGFuZGxlUmVmKQpAQCAtMTk0LDggKzE5OCw4IEBA
IFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtCiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2Rl
SGFuZGxlQ29weUhUTUxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmIGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2Vi
RnJhbWU+IGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZikt
Pmh0bWxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoKTsKLSAgICByZXR1cm4gdG9BUEkoZnJhbWUu
bGVha1JlZigpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFt
ZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJRnJhbWVFbGVt
ZW50SGFuZGxlUmVmKQpAQCAtMjA0LDIyICsyMDgsMTggQEAgV0tCdW5kbGVGcmFtZVJlZiBXS0J1
bmRsZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVO
b2QKICAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVha1JlZigpKTsKIH0KIAotLy8gRGVwcmVjYXRl
ZCAtIHVzZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChX
S0J1bmRsZU5vZGVIYW5kbGVSZWYpLgogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5w
dXRFbGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIERlcHJlY2F0ZWQgLSB1
c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5k
bGVOb2RlSGFuZGxlUmVmLCBib29sKS4KLXZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElu
cHV0RWxlbWVudEF1dG9maWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYsIGJvb2wgZmlsbGVkKQordm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1M
SW5wdXRFbGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaGFuZGxlLCBib29s
IGVuYWJsZWQpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJl
ZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxlZCk7CisgICAgV0tCdW5kbGVO
b2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoaGFuZGxlLCBlbmFibGVkKTsK
IH0KIAotLy8gRGVwcmVjYXRlZCAtIHVzZSBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRF
bGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkV2l0aEJ1dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSkuCi12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgV0tCdW5k
bGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1
bmRsZU5vZGVIYW5kbGVSZWYsIGJvb2wpCiB7Ci0gICAgV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25U
eXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRv
blR5cGU6OkNyZWRlbnRpYWxzIDogV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOwot
Ci0gICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJ
bnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoYXV0b0ZpbGxCdXR0b25UeXBlKTsKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJFZGl0b3IuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVk
aXRvci5jcHAKaW5kZXggY2NiNTFlMGQ5NjQwYzY2Zjg1OTZlNDc0MTcxNDA1OGU5MTM5NzY4NC4u
YTg5ZWYzNWMwNTQ5MGI1MDc1YTBiMDY5ZmQwNDJmNTg5ZjdjN2ZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVk
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9nbGliL1dlYktpdFdlYkVkaXRvci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgU3Ry
aW5nSW1wbCopIG92ZXJyaWRlCisgICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYs
IGNvbnN0IFN0cmluZyYpIGZpbmFsCiAgICAgewogICAgICAgICBnX3NpZ25hbF9lbWl0KG1fZWRp
dG9yLCBzaWduYWxzW1NFTEVDVElPTl9DSEFOR0VEXSwgMCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01Eb2N1
bWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFj
L1dLRE9NRG9jdW1lbnQubW0KaW5kZXggMTY2ZTc5ZDAzMjIyZWM5ODI0MTE4YTQ3MGMwMjA0OTRh
NmI1OGMwZC4uOTVkMWMwN2FiMmNjYjY1NWQ2ZDdiMWZlMzI1Y2M1OWUwODNiZWRjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tE
T01Eb2N1bWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxl
UmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJr
dXAuaD4KICNpbXBvcnQgPHd0Zi9OYWtlZFJlZi5oPgpAQCAtNzksNyArODAsNyBAQCAtIChXS0RP
TU5vZGUgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcg
KiltYXJrdXBTdHJpbmcgYgogCiAtIChXS0RPTU5vZGUgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50
V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBXZWJLaXQ6OnRvV0tET01O
b2RlKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpf
aW1wbCkuY3JlYXRlUmFuZ2UoKS5nZXQoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvV0tET01Ob2RlKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvd25jYXN0PFdlYkNvcmU6OkRvY3VtZW50PigqX2ltcGwpKSwgdGV4dCku
cHRyKCkpOwogfQogCiAtIChpZClwYXJzZXJZaWVsZFRva2VuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5n
ZS5tbQppbmRleCAwMDkwYjg5OGEyZTFlMWQ2MWNhZTA0NTAzOGEyZjg1ZDc1ZGJjM2U3Li4xYjZi
Yjc3ZWNhN2U2ZWMwZjFmNjFlODcyMTJjNGM0NWY2OTZiNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9N
UmFuZ2UubW0KQEAgLTEzNCw5ICsxMzQsOCBAQCAtIChOU0FycmF5ICopdGV4dFJlY3RzCiAKIC0g
KFdLRE9NUmFuZ2UgKilyYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3RlcnM6
KE5TVUludGVnZXIpY2hhcmFjdGVycyBpbkRpcmVjdGlvbjooV0tET01SYW5nZURpcmVjdGlvbilk
aXJlY3Rpb24KIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VF
eHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZGlyZWN0aW9uID09
IFdLRE9NUmFuZ2VEaXJlY3Rpb25Gb3J3YXJkID8gIF9pbXBsLT5lbmRQb3NpdGlvbigpIDogX2lt
cGwtPnN0YXJ0UG9zaXRpb24oKSwgY2hhcmFjdGVycywgZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VE
aXJlY3Rpb25Gb3J3YXJkID8gV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIDog
V2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0KLSAgICByZXR1cm4gW1tb
V0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpuZXdSYW5nZS5nZXQoKV0gYXV0b3JlbGVh
c2VdOworICAgIGF1dG8gbmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJl
Y3Rpb25BdFdvcmRCb3VuZGFyeShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndh
cmQgPyAgX2ltcGwtPmVuZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBjaGFy
YWN0ZXJzLCBkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3Jl
OjpTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rp
b246OkJhY2t3YXJkKTsKKyAgICByZXR1cm4gW1tbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRo
SW1wbDpjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJv
Y2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCA0NzdmZjk0NWE2YWI0
YWNhOWU3MzMxMjU1YjA0MGRkNWZhZDZlOGUwLi5jNzc2MjUyZWJkNGFlODg4NDViZThjNjc3OGI2
ZWY3MzBkZmYzMTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9t
YWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCkBAIC01NTks
MjEgKzU1OSwyMSBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nl
c3NQbHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdlJiwg
U3RyaW5nSW1wbCogdGV4dCwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3Jl
OjpFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBmaW5hbAorICAgICAgICBib29sIHNob3VsZElu
c2VydFRleHQoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmIHRleHQsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuc2hvdWxkSW5zZXJ0VGV4dCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0
aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXI6bV9jb250cm9sbGVyIHNob3VsZEluc2VydFRleHQ6U3RyaW5nKHRleHQpIHJlcGxhY2luZ1Jh
bmdlOndyYXBwZXIoKldlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVh
dGUocmFuZ2VUb1JlcGxhY2UpKSBnaXZlbkFjdGlvbjp0b1dLKGFjdGlvbildOworICAgICAgICAg
ICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nl
c3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHNob3VsZEluc2Vy
dFRleHQ6dGV4dCByZXBsYWNpbmdSYW5nZTp3cmFwcGVyKCpXZWJLaXQ6OmNyZWF0ZUhhbmRsZShy
YW5nZVRvUmVwbGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9uKV07CiAgICAgICAgIH0KIAot
ICAgICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwg
V2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNv
cmU6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWwKKyAgICAg
ICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICBhdXRvIGFwaUZyb21SYW5nZSA9
IGZyb21SYW5nZSA/IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmZy
b21SYW5nZV0pIDogbmlsOwotICAgICAgICAgICAgYXV0byBhcGlUb1JhbmdlID0gdG9SYW5nZSA/
IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOnRvUmFuZ2VdKSA6IG5p
bDsKKyAgICAgICAgICAgIGF1dG8gYXBpRnJvbVJhbmdlID0gYWRvcHROUyhbW1dLRE9NUmFuZ2Ug
YWxsb2NdIF9pbml0V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCldKTsK
KyAgICAgICAgICAgIGF1dG8gYXBpVG9SYW5nZSA9IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9j
XSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKV0pOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBVSVRleHRTdG9yYWdlRGlyZWN0aW9uIGFw
aUFmZmluaXR5ID0gYWZmaW5pdHkgPT0gV2ViQ29yZTo6VVBTVFJFQU0gPyBVSVRleHRTdG9yYWdl
RGlyZWN0aW9uQmFja3dhcmQgOiBVSVRleHRTdG9yYWdlRGlyZWN0aW9uRm9yd2FyZDsKICNlbHNl
CkBAIC01ODMsNyArNTgzLDcgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8V0tX
ZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAgICAg
IHJldHVybiBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNz
UGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlOmFwaUZyb21SYW5nZS5nZXQoKSB0b1JhbmdlOmFwaVRvUmFuZ2UuZ2V0KCkg
YWZmaW5pdHk6YXBpQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwogICAg
ICAgICB9CiAKLSAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5n
SW1wbCopIGZpbmFsCisgICAgICAgIHZvaWQgZGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNv
bnN0IFN0cmluZyYpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0
ZU1ldGhvZHMuZGlkQ2hhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5MSwyMCAr
NTkxLDIwIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1Bs
dWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAgICBbbV9jb250cm9s
bGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyRGlkQ2hhbmdlQnlFZGl0aW5nOm1fY29udHJvbGxlcl07CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBX
ZWJDb3JlOjpSYW5nZSogcmFuZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0
ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYgcmFuZ2UpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0
ZU1ldGhvZHMud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2Vi
UHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgd2lsbFdy
aXRlUmFuZ2VUb1Bhc3RlYm9hcmQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAgICAgICAgIFttX2NvbnRy
b2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHdpbGxXcml0ZVJhbmdlVG9QYXN0ZWJvYXJkOndy
YXBwZXIoV2ViS2l0OjpjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgIH0KIAot
ICAgICAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwg
V2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmlu
YWwKKyAgICAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2ViUGFn
ZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
IW1fZGVsZWdhdGVNZXRob2RzLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9s
bGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyOm1fY29udHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIo
KldlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpLmdl
dCgpKV07CisgICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9sbGVyLT5fZWRp
dGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9s
bGVyOm1fY29udHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIoV2ViS2l0Ojpj
cmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICp0
eXBlIGluIGRhdGFCeVR5cGUpIHsKICAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBw
ZW5kKHR5cGUpOwogICAgICAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhQnlUeXBlW3R5cGVdKSk7CkBAIC02MTksMTIgKzYx
OSwxMiBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVn
SW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAgICAgW21fY29udHJvbGxl
ci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0
Q29udHJvbGxlckRpZFdyaXRlVG9QYXN0ZWJvYXJkOm1fY29udHJvbGxlcl07CiAgICAgICAgIH0K
IAotICAgICAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJD
b3JlOjpEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgV2ViQ29yZTo6UmFuZ2UmIHJhbmdlLCBi
b29sIGlzTW92ZSkgZmluYWwKKyAgICAgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0
OjpXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFdl
YkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBpc01vdmUpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMucGVyZm9ybVR3b1N0ZXBEcm9wKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byByYW5nZUhh
bmRsZSA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJnJh
bmdlKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6OmNyZWF0ZUhhbmRs
ZShyYW5nZSk7CiAgICAgICAgICAgICBhdXRvIG5vZGVIYW5kbGUgPSBXZWJLaXQ6OkluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmZyYWdtZW50KTsKICAgICAgICAgICAgIHJl
dHVybiBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1
Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBwZXJmb3JtVHdvU3RlcERy
b3A6d3JhcHBlcigqbm9kZUhhbmRsZSkgYXREZXN0aW5hdGlvbjp3cmFwcGVyKCpyYW5nZUhhbmRs
ZSkgaXNNb3ZlOmlzTW92ZV07CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUuY3BwCmluZGV4IDIyMGVmZWQ1OGVkMTU3NzllNzViOWM0OGMxNzA3
MTdmZmUyZGYwZGYuLmE5MWY3ZjcwNzgxNzhkZmJlNDNiNTg0NmJjMDBjNDRlYmQ5NmQ3NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtNTQs
NyArNTQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotdHlwZWRlZiBIYXNoTWFwPFJhbmdlKiwgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+IERP
TVJhbmdlSGFuZGxlQ2FjaGU7Cit1c2luZyBET01SYW5nZUhhbmRsZUNhY2hlID0gSGFzaE1hcDxS
YW5nZSosIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUqPjsKIAogc3RhdGljIERPTVJhbmdlSGFu
ZGxlQ2FjaGUmIGRvbVJhbmdlSGFuZGxlQ2FjaGUoKQogewpAQCAtNjQsMjkgKzY0LDIxIEBAIHN0
YXRpYyBET01SYW5nZUhhbmRsZUNhY2hlJiBkb21SYW5nZUhhbmRsZUNhY2hlKCkKIAogUmVmUHRy
PEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6Omdl
dE9yQ3JlYXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0g
ICAgUmFuZ2UqIHJhbmdlID0gSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCks
IHRvSlMob2JqZWN0KSk7Ci0gICAgcmV0dXJuIGdldE9yQ3JlYXRlKHJhbmdlKTsKKyAgICByZXR1
cm4gZ2V0T3JDcmVhdGUoSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRv
SlMob2JqZWN0KSkpOwogfQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuZ2UqIHJhbmdlKQogewogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRE9NUmFuZ2VIYW5k
bGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbVJhbmdlSGFuZGxlQ2FjaGUoKS5hZGQocmFu
Z2UsIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVDYWNoZSgpLmFk
ZChyYW5nZSwgbnVsbHB0cik7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBhdXRvIHJhbmdlSGFuZGxlID0g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRlKCpyYW5nZSk7CisgICAgYXV0byByYW5n
ZUhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSgqcmFuZ2Up
KTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUucHRyKCk7CiAgICAg
cmV0dXJuIHJhbmdlSGFuZGxlOwogfQogCi1SZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRlKFJhbmdlJiByYW5nZSkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKHJhbmdlKSk7Ci19
Ci0KIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUo
UmFuZ2UmIHJhbmdlKQogICAgIDogbV9yYW5nZShyYW5nZSkKIHsKQEAgLTE3OCw0ICsxNzAsOSBA
QCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fcmFuZ2UtPnRleHQoKTsKIH0KIAorUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU+IGNyZWF0ZUhhbmRsZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJh
bmdlKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCmluZGV4IGY4
MGUzM2FiZTgwNjUxZDk3OTE4YjhkYmZhMTQ5ZTQ2MWY1NmJjODUuLjVlOGJlZWRhMTAwZDI1ZjA5
MWU3ZTBjMWY3NmE0ZjBjYjE0YzI0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gK
LSNkZWZpbmUgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkltYWdlT3B0aW9ucy5oIgpAQCAtMzUsNiAr
MzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJhbmdl
Oworc3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU5LDEy
ICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6UmFuZ2UmIGNvcmVSYW5nZSgpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBSZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4g
Y3JlYXRlKFdlYkNvcmU6OlJhbmdlJik7CiAgICAgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZShX
ZWJDb3JlOjpSYW5nZSYpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlOwogfTsK
IAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CitSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4gY3JlYXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwog
Ci0jZW5kaWYgLy8gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAK
aW5kZXggY2UwMjdiNWE3YmU2ODI3YTc4ZTdiNzcyNWJkYmIzMjY0YTYyNTIwYS4uZTM0MGFmMWNi
YzMwMjllNTdhYmRiMjJkYzRmOWE5YmRjMjVmMDUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKQEAgLTM4LDEyMyArMzgsMTExIEBACiAjaW5j
bHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudEZyYWdtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljIFJlZlB0cjxJbmplY3RlZEJ1bmRs
ZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFy
YXRpb25IYW5kbGU6OmdldE9yQ3JlYXRlKCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NT
dHlsZURlY2xhcmF0aW9uKCkpOworfQorCiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRsZVBhZ2VFZGl0b3JD
bGllbnRCYXNlJiBjbGllbnQpCiB7CiAgICAgaW5pdGlhbGl6ZSgmY2xpZW50KTsKIH0KIAotYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJQ
YWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKSB7Ci0gICAg
ICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJu
IG1fY2xpZW50LnNob3VsZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFu
ZGxlLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1f
Y2xpZW50LnNob3VsZEJlZ2luRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3Vs
ZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJQ
YWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcpIHsKLSAgICAgICAg
UmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9j
bGllbnQuc2hvdWxkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdl
dCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50
LnNob3VsZEVuZEVkaXRpbmcpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRFbmRFZGl0
aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmIHBhZ2Us
IE5vZGUqIG5vZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFj
dGlvbikKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRO
b2RlKFdlYlBhZ2UmIHBhZ2UsIE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYg
KG1fY2xpZW50LnNob3VsZEluc2VydE5vZGUpIHsKICAgICAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0
T3JDcmVhdGUobm9kZSk7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
PiByYW5nZVRvUmVwbGFjZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9y
Q3JlYXRlKHJhbmdlVG9SZXBsYWNlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZElu
c2VydE5vZGUodG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkocmFu
Z2VUb1JlcGxhY2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOworICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0b0FQ
SSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFu
Z2VUb1JlcGxhY2UpLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0lt
cGwqIHRleHQsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlv
bikKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0
KFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAg
ICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4dCkgewotICAgICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VUb1JlcGxhY2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSk7Ci0gICAgICAgIHJldHVy
biBtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdlKSwgdG9BUEkodGV4dCksIHRv
QVBJKHJhbmdlVG9SZXBsYWNlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEluc2VydFRl
eHQpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdl
KSwgdG9BUEkodGV4dC5pbXBsKCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxhY2Up
LmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiBwYWdl
LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlm
IChtX2NsaWVudC5zaG91bGREZWxldGVSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
OjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWxl
dGVSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0ZVJh
bmdlKQorICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UodG9BUEkoJnBh
Z2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFu
Z2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBz
dGlsbFNlbGVjdGluZykKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2Us
IEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBpZiAobV9j
bGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZT4gZnJvbVJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZnJvbVJhbmdlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IHRvUmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZSh0b1JhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3Vs
ZENoYW5nZVNlbGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShmcm9tUmFuZ2VIYW5kbGUu
Z2V0KCkpLCB0b0FQSSh0b1JhbmdlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWZmaW5pdHkpLCBzdGls
bFNlbGVjdGluZywgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1f
Y2xpZW50LnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NsaWVu
dC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFu
ZGxlKGZyb21SYW5nZSkuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUodG9SYW5nZSkuZ2V0KCkp
LCB0b0FQSShhZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBp
ZiAobV9jbGllbnQuc2hvdWxkQXBwbHlTdHlsZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRC
dW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlPiBzdHlsZUhhbmRsZSA9IEluamVjdGVkQnVu
ZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZTo6Z2V0T3JDcmVhdGUoc3R5bGUpOwotICAgICAg
ICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBt
X2NsaWVudC5zaG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdlKSwgdG9BUEkoc3R5bGVIYW5kbGUu
Z2V0KCkpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7Ci0gICAgfQorICAgIGlmIChtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKQorICAgICAgICBy
ZXR1cm4gbV9jbGllbnQuc2hvdWxkQXBwbHlTdHlsZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0
ZUhhbmRsZShzdHlsZSkuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBw
YWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJp
bmcmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKG1fY2xpZW50LmRpZEJlZ2luRWRpdGlu
ZykKLSAgICAgICAgbV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
bm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1f
Y2xpZW50LmRpZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5h
bWUuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgU3Ry
aW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50OjpkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkRW5kRWRpdGluZykKLSAgICAgICAg
bV9jbGllbnQuZGlkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5h
bWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRFbmRF
ZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6ZGlkQ2hhbmdlKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlv
bk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlKFdl
YlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAo
bV9jbGllbnQuZGlkQ2hhbmdlKQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEkoJnBh
Z2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
KyAgICAgICAgbV9jbGllbnQuZGlkQ2hhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0
aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2Um
IHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQ2hhbmdl
U2VsZWN0aW9uKQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEkoJnBh
Z2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
KyAgICAgICAgbV9jbGllbnQuZGlkQ2hhbmdlU2VsZWN0aW9uKHRvQVBJKCZwYWdlKSwgdG9BUEko
bm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQog
Ci12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6d2lsbFdyaXRlVG9QYXN0ZWJv
YXJkKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQud2lsbFdy
aXRlVG9QYXN0ZWJvYXJkKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRl
KHJhbmdlKTsKLSAgICAgICAgbV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKHRvQVBJKCZw
YWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OwotICAgIH0KKyAgICBpZiAobV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQorICAgICAg
ICBtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVh
dGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAot
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVi
b2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkK
K3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZv
clJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Us
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKQogewogICAgIGlmIChtX2NsaWVudC5nZXRQYXN0ZWJvYXJk
RGF0YUZvclJhbmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
PiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJh
bmdlKTsKLSAgICAgICAgV0tBcnJheVJlZiB0eXBlcyA9IDA7Ci0gICAgICAgIFdLQXJyYXlSZWYg
ZGF0YSA9IDA7Ci0gICAgICAgIG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UodG9B
UEkoJnBhZ2UpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksICZ0eXBlcywgJmRhdGEsIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiB0eXBlc0Fy
cmF5ID0gYWRvcHRSZWYodG9JbXBsKHR5cGVzKSk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5
PiBkYXRhQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwoZGF0YSkpOworICAgICAgICBXS0FycmF5UmVm
IHR5cGVzID0gbnVsbHB0cjsKKyAgICAgICAgV0tBcnJheVJlZiBkYXRhID0gbnVsbHB0cjsKKyAg
ICAgICAgbV9jbGllbnQuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSh0b0FQSSgmcGFnZSksIHRv
QVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCAmdHlwZXMsICZkYXRhLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICBhdXRvIHR5cGVzQXJyYXkgPSBhZG9wdFJlZih0b0lt
cGwodHlwZXMpKTsKKyAgICAgICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwoZGF0
YSkpOwogCiAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5jbGVhcigpOwogICAgICAgICBwYXN0ZWJv
YXJkRGF0YS5jbGVhcigpOwpAQCAtMTc0LDE0ICsxNjIsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYgcGFn
ZSwgUmEKICAgICB9CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpw
ZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmIHBhZ2UsIERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJv
b2wgaXNNb3ZlKQogewogICAgIGlmICghbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmRlc3RpbmF0aW9uKTsKICAgICBhdXRvIG5vZGVI
YW5kbGUgPSBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKCZmcmFnbWVudCk7
Ci0gICAgcmV0dXJuIG1fY2xpZW50LnBlcmZvcm1Ud29TdGVwRHJvcCh0b0FQSSgmcGFnZSksIHRv
QVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIGlzTW92ZSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbV9jbGllbnQucGVyZm9ybVR3
b1N0ZXBEcm9wKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNy
ZWF0ZUhhbmRsZShkZXN0aW5hdGlvbikuZ2V0KCkpLCBpc01vdmUsIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRX
cml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiBwYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudC5oCmluZGV4IDY4OTk0MWExOGU4ZDllOTRjYTQyNmY5NDJiMWVi
OGEwYjNjZjg0YmIuLmYzYTBlNzQ3NjcyMGZiMWI1ZDljYjE3NzE3ZWRkNzM5OTQ5N2RjMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsK
IGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CitzdHJ1
Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTIsMjEgKzUyLDIx
IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQo
Y29uc3QgV0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50QmFzZSYpOwogCiBwcml2YXRlOgotICAgIGJv
b2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5h
bDsKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBX
ZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlv
bikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmLCBTdHJpbmdJbXBs
KiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRB
Y3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYsIFdlYkNv
cmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdl
YlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5n
ZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKLSAgICBi
b29sIHNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYsIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRp
b24qLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdl
YlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIGRp
ZEVuZEVkaXRpbmcoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFs
OwotICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25O
YW1lKSBmaW5hbDsKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgU3RyaW5n
SW1wbCogbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBnZXRQYXN0
ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
Pj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhX
ZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZEVuZEVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmLCBXZWJDb3JlOjpOb2RlJiwg
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2Vi
Q29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRl
eHQoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmlu
YWw7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
IGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1Jhbmdl
LCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJv
b2wgc2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAg
dm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9u
TmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBTdHJp
bmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBhZ2Um
LCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hh
bmdlU2VsZWN0aW9uKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZp
bmFsOworICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmLCBjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICB2b2lkIGdldFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICB2b2lkIGRp
ZFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmKSBmaW5hbDsKLSAgICBib29sIHBlcmZvcm1Ud29T
dGVwRHJvcChXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJh
bmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3
b1N0ZXBEcm9wKFdlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggZGQ5YzM1
MjYwNWYwOGYzOTQwZDkwMGQ4ZjAyNjUyNDdlMDRiYTM3OS4uMTc1YWM3ZDcyNjY2MjRhNThiYTU4
NTdhNDMzMGI4ODUzM2MzYjIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc2LDcgKzc2
LDcgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkKIAog
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLmdldCgpKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNs
aWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0xMTcsMzIgKzExNywz
MiBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAKIGJv
b2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50
KCkuc2hvdWxkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRy
KCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hv
dWxkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJl
dHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGlu
ZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKKyAgICByZXR1cm4gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFn
ZSwgcmFuZ2UpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShO
b2RlJiBub2RlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBF
ZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCAmbm9kZSwgY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1f
cGFnZSwgbm9kZSwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlv
bikKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZEluc2VydFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQsIHJhbmdl
VG9SZXBsYWNlLCBhY3Rpb24pOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGNyZWF0
ZUxpdmVSYW5nZShmcm9tUmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UodG9SYW5nZSkuZ2V0
KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2Us
IGZyb21SYW5nZSwgdG9SYW5nZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KICAgICAK
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVy
dGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0
eWxlKCptX3BhZ2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0
aW9uKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIHJldHVybiBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCBz
dHlsZSwgcmFuZ2UpOwogfQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTI2
NywxNyArMjY3LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZCgpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJk
KCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwg
cmFuZ2UpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBh
c3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERh
dGEpCiB7Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwg
cGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgcmFu
Z2UsIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCiBib29sIFdlYkVkaXRv
ckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBj
b25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewotICAgIHJldHVy
biBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9w
KCptX3BhZ2UsIGZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01vdmUp
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9y
bVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZyYWdtZW50LCBkZXN0aW5hdGlvbiwgaXNNb3ZlKTsKIH0K
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoVW5kb1N0ZXAmIHN0ZXAp
CkBAIC01MzYsMTEgKzUzNiw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJP
ZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtCiBzdGF0aWMgdWlu
dDY0X3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBj
dXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRC
b3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBh
cmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rp
b25TdGFydCkpOwotICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBo
U3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpw
YXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgYXV0byByYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb25TdGFydCkpOworICAgIHJldHVybiByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSkg
OiAwOwogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQppbmRleCA5NWYxNjNjMWUxMWIwMWQwNzIwM2U0NmFi
NWNjYWIwMGM5ZTJhNzAyLi42NmUzZDk5NTdlZGI5YWYzMzY0OTgzMTQ0ZTc0YTEwM2MyOGVkZTNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCkBAIC0xNzYsMTUg
KzE3NiwxMyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3Rh
dGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaQogCiBXZWJDb3JlOjpBdHRyaWJ1dGVk
U3RyaW5nIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0
d2VlblBvc2l0aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHN0YXJ0Qm91bmRh
cnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeSA9IG1h
a2VCb3VuZGFyeVBvaW50KGVuZCk7Ci0gICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3Vu
ZGFyeSkKKyAgICBhdXRvIGVudGlyZVJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQp
OworICAgIGlmICghZW50aXJlUmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBl
bnRpcmVSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9
OwogCiAgICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdF0pOwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZW50aXJlUmFuZ2Up
OyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQo
KmVudGlyZVJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBpZiAo
IWl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBbc3Ry
aW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlp
bmcoKS5nZXQoKV0pLmdldCgpXTsKQEAgLTE5Miw3ICsxOTAsNyBAQCBXZWJDb3JlOjpBdHRyaWJ1
dGVkU3RyaW5nIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5n
QmV0d2VlbgogICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IHJhbmdlLnN0YXJ0LmRvY3VtZW50
KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UGxhdGZv
cm1UZXh0Q2hlY2tpbmcpKSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RGOjpnZXQ8RG9j
dW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpOwog
ICAgICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwg
eyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCkgfSk7Ci0gICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtl
eSB2YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJhbmdlLCBzdWJy
YW5nZSldOworICAgICAgICAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGU6ZGF0YS5rZXkgdmFsdWU6
ZGF0YS52YWx1ZSByYW5nZTpjaGFyYWN0ZXJSYW5nZSgqZW50aXJlUmFuZ2UsIHN1YnJhbmdlKV07
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCA1ZjVlODY0MWFkZWNkMjZjYjllZmQ3OThh
MzkwMGY3NzNkOTRlNzNiLi41MzE4NTUzOGI5ZTA1MTkwM2E5ZDZlZGU3NWI0ZTBlYzgzNTI2OTMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYXRoVXRpbGl0
aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpA
QCAtMTExLDExICsxMTIsMTEgQEAgdWludDMyX3QgRmluZENvbnRyb2xsZXI6OnJlcGxhY2VNYXRj
aGVzKGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIG1hdGNoSW5kaWNlcywgY28KICAgICAvLyBwZXJp
b2RpY2FsbHkgdXBkYXRlIGFuIE5TUHJvZ3Jlc3MgaW4gdGhlIFVJIHByb2Nlc3Mgd2hlbiBhIGJh
dGNoIG9mIGZpbmQtaW4tcGFnZSBtYXRjaGVzIGFyZSByZXBsYWNlZC4KICAgICBjb25zdCB1aW50
MzJfdCBtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlID0gMTAwMDsKIAotICAgIFZlY3Rv
cjxSZWY8UmFuZ2U+PiByYW5nZXNUb1JlcGxhY2U7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBy
YW5nZXNUb1JlcGxhY2U7CiAgICAgcmFuZ2VzVG9SZXBsYWNlLnJlc2VydmVDYXBhY2l0eShzdGQ6
Om1pbjx1aW50MzJfdD4obWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFjZSwgbWF0Y2hJbmRp
Y2VzLnNpemUoKSkpOwogICAgIGZvciAoYXV0byBpbmRleCA6IG1hdGNoSW5kaWNlcykgewogICAg
ICAgICBpZiAoaW5kZXggPCBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJhbmdl
c1RvUmVwbGFjZS51bmNoZWNrZWRBcHBlbmQoKm1fZmluZE1hdGNoZXNbaW5kZXhdKTsKKyAgICAg
ICAgICAgIHJhbmdlc1RvUmVwbGFjZS51bmNoZWNrZWRBcHBlbmQobV9maW5kTWF0Y2hlc1tpbmRl
eF0pOwogICAgICAgICBpZiAocmFuZ2VzVG9SZXBsYWNlLnNpemUoKSA+PSBtYXhpbXVtTnVtYmVy
T2ZNYXRjaGVzVG9SZXBsYWNlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjQzLDEy
ICsyNDQsMTAgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25zPiBvcHQKICAgICBib29sIGZvdW5kU3RyaW5n
U3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSBmYWxzZTsKICAgICBpZiAoIXBsdWdpblZpZXcpIHsKICAg
ICAgICAgaWYgKEZyYW1lKiBzZWxlY3RlZEZyYW1lID0gZnJhbWVXaXRoU2VsZWN0aW9uKG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKSkpIHsKLSAgICAgICAgICAgIEZyYW1lU2VsZWN0aW9uJiBmcyA9IHNl
bGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpOwotICAgICAgICAgICAgaWYgKGZzLnNlbGVjdGlvbkJv
dW5kcygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMuY2xlYXIo
KTsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0gICAgICAgICAgICAg
ICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5n
LCBjb3JlT3B0aW9ucywgbWF4TWF0Y2hDb3VudCwgbV9maW5kTWF0Y2hlcywgaW5kZXhGb3JTZWxl
Y3Rpb24pOwotICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gaW5kZXhG
b3JTZWxlY3Rpb247CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmVP
cHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVzID0g
V1RGTW92ZShyZXN1bHQucmFuZ2VzKTsKKyAgICAgICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0
Y2hJbmRleCA9IHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbjsKICAgICAgICAgICAgICAgICBmb3Vu
ZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMjg0LDE2ICsyODMsMTQgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25zPiBvcHQKIAogdm9p
ZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IE9wdGlvblNldDxGaW5kT3B0aW9ucz4gb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkK
IHsKLSAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7Ci0gICAgaW50IGluZGV4Rm9yU2VsZWN0aW9u
OwotCi0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMo
c3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRl
eEZvclNlbGVjdGlvbik7CisgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291bnQpOwor
ICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwogCiAgICAgVmVjdG9y
PFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV9m
aW5kTWF0Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRSZWN0cygqcmFuZ2UpKTsKKyAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwogCi0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmluZywgbWF0
Y2hSZWN0cywgaW5kZXhGb3JTZWxlY3Rpb24pKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3Rz
LCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24pKTsKIAogICAgIGlmICghb3B0aW9ucy5jb250YWlu
cyhGaW5kT3B0aW9uczo6U2hvd092ZXJsYXkpICYmICFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRp
b25zOjpTaG93RmluZEluZGljYXRvcikpCiAgICAgICAgIHJldHVybjsKQEAgLTMwOCwxMiArMzA1
LDEyIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKHVpbnQzMl90
IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21h
dGNoSW5kZXhdLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFt
ZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9j
dW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbigqbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSkpOworICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24obV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSk7CiAKICAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBzZWxlY3Rpb25TbmFwc2hvdCA9IFdlYkZyYW1lOjpmcm9tQ29yZUZy
YW1lKCpmcmFtZSktPmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCk7CiAKQEAgLTMzOSwxMCArMzM2
LDEwIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1aW50MzJfdCBtYXRj
aEluZGV4KQogewogICAgIGlmIChtYXRjaEluZGV4ID49IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaElu
ZGV4XS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgRnJhbWUqIGZy
YW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5jb250YWluZXItPmRvY3VtZW50
KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCptX2ZpbmRNYXRjaGVz
W21hdGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtX2Zp
bmRNYXRjaGVzW21hdGNoSW5kZXhdKTsKIH0KIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6aW5kaWNh
dGVGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDJmZDNmYWMxZWM2YzJjMjEx
OTI1Y2I1ZDdhZGJjMTkyNTcyN2Q5ZDkuLmY2ZjZmOWQyMTA0ZDNhNzllM2ZlOGQ5ODFmMTQ0NTk2
NDIyNDMyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gdGhlIGZp
bmQgaW5kaWNhdG9yIGlzbid0IHNob3dpbmcsIGJ1dCBpdCB3aWxsIG5ldmVyIGJlIGZhbHNlIHdo
ZW4gaXQgaXMgc2hvd2luZy4KICAgICBib29sIG1faXNTaG93aW5nRmluZEluZGljYXRvciB7IGZh
bHNlIH07CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX2ZpbmRJbmRpY2F0b3JSZWN0OwotICAgIFZl
Y3RvcjxSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+PiBtX2ZpbmRNYXRjaGVzOworICAgIFZlY3RvcjxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9maW5kTWF0Y2hlczsKICAgICAvLyBJbmRleCB2YWx1ZSBp
cyAtMSBpZiBub3QgZm91bmQgb3IgaWYgbnVtYmVyIG9mIG1hdGNoZXMgZXhjZWVkcyBwcm92aWRl
ZCBtYXhpbXVtLgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCB7IC0xIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZWQzYjYz
ZmRkZTNhNzdiOGY5ZWI5ODMxNWU1ZThkOWJiNTFjMGRiNy4uMmRjNTA1Y2ZkYjEzYjAwMzJmZGE1
NDllMGM5ZDVkNjcyNzJiNDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTU0MzcsMTMgKzU0MzcsMTMgQEAgdm9pZCBXZWJQYWdlOjpoYXNN
YXJrZWRUZXh0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBG
cmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1l
LCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKS5nZXQo
KSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1l
LCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0
aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFu
Z2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFt
ZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpOwog
fQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTU0NTIsOCAr
NTQ1Miw4IEBAIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgQ2FsbGJhCiAgICAgYXV0byByZXN1bHQgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50
LCBoaXRUeXBlKTsKICAgICBhdXRvJiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KSA/ICpyZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IGZyYW1lLnJhbmdlRm9yUG9p
bnQocmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7Ci0gICAgYXV0byBlZGl0
aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgcmFuZ2UuZ2V0KCkpOwot
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oZWRpdGluZ1JhbmdlLmxvY2F0aW9uKSwgY2FsbGJhY2tJRCkpOworICAg
IGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIG1ha2VT
aW1wbGVSYW5nZShyYW5nZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5z
aWduZWRDYWxsYmFjayhlZGl0aW5nUmFuZ2UubG9jYXRpb24sIGNhbGxiYWNrSUQpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRp
bmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGNh
NDNkODYxM2FiNjNlOTI4MmFlYTJkNDM3ZjcxNjVhY2VhMTdmNTQuLmEwNTMzZWVjYzQwNjRkYTFj
YjZjMWNkMGY2ODY5YmMxOGUzOGFmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xMTQsNiArMTE0LDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BvaW50
ZXJDYXB0dXJlQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9RdWlya3MuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxvY2suaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVySW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5
ZXIuaD4KQEAgLTE1MCwyOSArMTUxLDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBGSVhN
RTogVW5jbGVhciBpZiBjYWxsZXJzIGluIHRoaXMgZmlsZSBhcmUgY29ycmVjdGx5IGNob29zaW5n
IHdoaWNoIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgdG8gdXNlLgogCi1zdGF0aWMgU3RyaW5nIHBs
YWluVGV4dEZvckNvbnRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVy
biBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UpOwotfQotCiBz
dGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KCpy
YW5nZSkgOiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiByYW5nZSA/IFdlYkNvcmU6OnBsYWlu
VGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAog
c3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsK
LSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KFNpbXBsZVJhbmdlIHsgKnJh
bmdlIH0pIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0Rm9yQ29udGV4dCht
YWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKIH0KIAotc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JE
aXNwbGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0
Rm9yRGlzcGxheShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIHJl
dHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UsIFRleHRJ
dGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gV2ViQ29y
ZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSwgVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yLCB0cnVlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcg
cGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJh
bmdlID8gcGxhaW5UZXh0Rm9yRGlzcGxheSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gcGxhaW5UZXh0Rm9yRGlzcGxheShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQpAQCAtMjg5LDcgKzI4NSw3IEBAIHZv
aWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0
YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0RW5k
ID0gcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRTdGFydDsKICAgICAgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgY2hlY2sgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHdyaXRpbmcgZGlyZWN0
aW9uLgogICAgICAgICBwb3N0TGF5b3V0RGF0YS5pc1JlcGxhY2VBbGxvd2VkID0gcmVzdWx0Lmlz
Q29udGVudEVkaXRhYmxlICYmIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHNlbGVjdGlvbi5zdGFy
dCgpLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9u
OjpGb3J3YXJkKTsKLSAgICAgICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gcGxh
aW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkp
LmdldCgpKTsKKyAgICAgICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gcGxhaW5U
ZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpKTsK
ICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAg
Y2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBwb3N0TGF5b3V0RGF0
YS5jaGFyYWN0ZXJBZnRlclNlbGVjdGlvbiwgcG9zdExheW91dERhdGEuY2hhcmFjdGVyQmVmb3Jl
U2VsZWN0aW9uLCBwb3N0TGF5b3V0RGF0YS50d29DaGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb24pOwog
ICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewpAQCAtNTUzLDggKzU0OSw4IEBA
IHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCA9IDM1MDsKICAg
ICAKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKLSAgICBTdHJpbmcg
dGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVy
c0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rp
b246OkJhY2t3YXJkKS5nZXQoKSk7Ci0gICAgU3RyaW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZv
ckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRh
cnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVk
Q29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKS5nZXQoKSk7CisgICAg
U3RyaW5nIHRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNo
YXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpCYWNrd2FyZCkpOworICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRG
b3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5k
YXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRl
ZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpOwogCiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soc2VsZWN0
ZWRUZXh0LCB0ZXh0QmVmb3JlLCB0ZXh0QWZ0ZXIsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTk4OCw4
ICs5ODQsNyBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcoKQogICAgIGF1dG8g
ZnJhbWUgPSBtYWtlUmVmKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCkpOwogICAgIGlmIChhdXRvIHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgbV9wZW5kaW5nSW1h
Z2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdCA9IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdp
dGhOb25Mb2FkZWRJbWFnZXMoKnNlbGVjdGlvblJhbmdlKTsKLSAgICAgICAgYXV0byBjb2xsYXBz
ZWRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFu
Z2UtPmVuZCB9OwotICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShj
cmVhdGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFNpbXBsZVJhbmdlIHsgc2VsZWN0
aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9LCBET1dOU1RSRUFNLCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAg
IG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9
CiAKQEAgLTExMTMsMTUgKzExMDgsMTQgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTdHlsdXNTaW5n
bGVUYXBBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDYKICAgICBp
ZiAocmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdC5s
b2NhbFBvaW50KCksIG51bGxwdHIpOworICAgIGF1dG8gcG9zaXRpb24gPSByZW5kZXJlci0+cG9z
aXRpb25Gb3JQb2ludChoaXRUZXN0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CiAgICAgaWYgKHBv
c2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKTsKLQotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1l
bnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKHJhbmdlLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSgqcmFuZ2UsIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKICAgICBhdXRvIGltYWdlID0gZnJhbWUuZWRpdG9yKCkuaW5zZXJ0RWRp
dGFibGVJbWFnZSgpOwogICAgIGZyYW1lLmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KGlt
YWdlLmdldCgpKTsKIH0KQEAgLTEzNzEsMTIgKzEzNjUsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZWxl
Y3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVU
eXBlLAogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFj
ayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgeyB9LCBjYWxsYmFja0lEKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBm
bGFnczsKICAgICBHZXN0dXJlUmVjb2duaXplclN0YXRlIHdrR2VzdHVyZVN0YXRlID0gc3RhdGlj
X2Nhc3Q8R2VzdHVyZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKTsKICAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PEdlc3R1cmVUeXBlPihnZXN0dXJlVHlwZSkpIHsKLSAgICBjYXNlIEdlc3R1
cmVUeXBlOjpQaHJhc2VCb3VuZGFyeToKLSAgICB7CisgICAgY2FzZSBHZXN0dXJlVHlwZTo6UGhy
YXNlQm91bmRhcnk6IHsKICAgICAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlv
bigpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8gbWFya2VkUmFuZ2UgPSBmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CkBAIC0xMzg2LDQwICsxMzc5LDM2IEBAIHZv
aWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0
dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVu
UG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3NpdGlv
bikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IHsg
fTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNoYW5n
ZWQ7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9z
aXRpb24sIHBvc2l0aW9uKTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHBvc2l0aW9uKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgY2FzZSBHZXN0dXJlVHlw
ZTo6T25lRmluZ2VyVGFwOgotICAgIHsKKyAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVGaW5nZXJU
YXA6IHsKICAgICAgICAgYXV0byBbYWRqdXN0ZWRQb3NpdGlvbiwgd2l0aGluV29yZEJvdW5kYXJ5
XSA9IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGluZShwb3NpdGlvbik7
CiAgICAgICAgIGlmICh3aXRoaW5Xb3JkQm91bmRhcnkgPT0gV2l0aGluV29yZEJvdW5kYXJ5OjpZ
ZXMpCiAgICAgICAgICAgICBmbGFncyA9IFdvcmRJc05lYXJUYXA7Ci0gICAgICAgIGlmIChhZGp1
c3RlZFBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBhZGp1c3RlZFBvc2l0aW9uLCBhZGp1c3RlZFBvc2l0aW9u
KTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGFkanVzdGVkUG9zaXRp
b24pOwogICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdlc3R1cmVUeXBlOjpMb3Vw
ZToKICAgICAgICAgaWYgKHBvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBv
c2l0aW9uKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UocG9zaXRpb24pOworICAgICAgICBlbHNlIHsKICNpZiAhUExBVEZPUk0oTUFDQ0FUQUxZU1Qp
CiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7CiAj
ZWxzZQogICAgICAgICAgICAgc3dpdGNoICh3a0dlc3R1cmVTdGF0ZSkgewotICAgICAgICAgICAg
Y2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbjogewotICAgICAgICAgICAgICAgIGF1
dG8gYm91bmRhcnkgPSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgICAgICAgICAg
ICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IGJvdW5kYXJ5LCBib3Vu
ZGFyeSB9OworICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbjoK
KyAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAgICAgICAgICAg
ICAgICBpZiAobV9zdGFydGluZ0dlc3R1cmVSYW5nZSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc3RhcnRpbmdHZXN0dXJl
UmFuZ2UtPnN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgcG9zaXRpb24p
Ci0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHN0YXJ0LCBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0
YXJ0ID0gbV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnQ7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnQpIDwgcG9zaXRpb24pCisgICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgcG9zaXRp
b24pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBzdGFydCk7
CisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
biwgc3RhcnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6RW5kZWQ6CkBAIC0xNDMyLDYg
KzE0MjEsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50
JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2VzdHVyZVR5cGU6OlRhcEFuZEFIYWxmOgpAQCAtMTQ0NiwxMSArMTQzNiwxMSBAQCB2
b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2Vz
dHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZTo6Q2hhbmdlZDoKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50V29yZFJhbmdlKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoKm1f
Y3VycmVudFdvcmRSYW5nZSk7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPCByYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChwb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IHJhbmdlLT5lbmRQ
b3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQocG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKSk7CisgICAgICAgICAgICByYW5nZSA9IG1fY3VycmVudFdvcmRSYW5nZTsKKyAg
ICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5n
ZS0+c3RhcnQpKQorICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFydCA9ICptYWtlQm91bmRhcnlQ
b2ludChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlv
biA+IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+ZW5kKSkKKyAgICAgICAgICAg
ICAgICByYW5nZS0+ZW5kID0gKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZTo6RW5kZWQ6CiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2Fu
Y2VsbGVkOgpAQCAtMTQ2Nyw3ICsxNDU3LDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2Vz
dHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAg
ICAgICAgICAgLy8gRG91YmxlLXRhcCBhdCBlbmQgb2YgbGluZSBvbmx5IHBsYWNlcyBpbnNlcnRp
b24gcG9pbnQgdGhlcmUuCiAgICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdldCB0aGUgY2Fs
bG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVzLAogICAgICAgICAgICAgLy8gcGFyYWdy
YXBocywgYW5kIGRvY3VtZW50cy4KLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICBicmVh
azsKQEAgLTE0ODAsOSArMTQ3MCw4IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICBjYXNl
IEdlc3R1cmVUeXBlOjpPbmVGaW5nZXJUcmlwbGVUYXA6CiAgICAgICAgIGlmIChhdEJvdW5kYXJ5
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpMaW5lR3JhbnVsYXJpdHks
IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKICAgICAgICAgICAgIC8vIFRyaXBsZS10
YXAgYXQgZW5kIG9mIGxpbmUgb25seSBwbGFjZXMgaW5zZXJ0aW9uIHBvaW50IHRoZXJlLgotICAg
ICAgICAgICAgLy8gVGhpcyBoZWxwcyB0byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQg
ZW5kcyBvZiBsaW5lcywKLSAgICAgICAgICAgIC8vIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMu
Ci0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBv
c2l0aW9uLCBwb3NpdGlvbik7CisgICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdldCB0aGUg
Y2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVzLCBwYXJhZ3JhcGhzLCBhbmQgZG9j
dW1lbnRzLgorICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5
LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwogICAgICAgICBicmVhazsKQEAgLTE0OTEs
MTIgKzE0ODAsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgaWYgKHJhbmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVy
ZUNhbGxiYWNrKHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBmbGFncywgY2FsbGJh
Y2tJRCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUZvclBvaW50SW5Sb290Vmll
d0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Sb290Vmll
d0Nvb3JkaW5hdGVzLCBib29sIGJhc2VJc1N0YXJ0KQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBib29sIGJhc2VJc1N0YXJ0
KQogewogICAgIFZpc2libGVTZWxlY3Rpb24gZXhpc3RpbmdTZWxlY3Rpb24gPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQg
PSBleGlzdGluZ1NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKQEAgLTE1MTUsNyArMTUwNCw3IEBA
IHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
RnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQCiAgICAgfQogICAgIAogICAgIFZpc2libGVQb3NpdGlv
biByZXN1bHQ7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gcmFuZ2U7CiAKICAgICBjb25zdGV4cHIgT3B0aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpS
ZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJl
cXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJlcXVlc3Q6OkFsbG93VmlzaWJsZUNoaWxkRnJhbWVDb250
ZW50T25seSB9OwogICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdCA9IGZyYW1lLmV2ZW50SGFuZGxl
cigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50SW5Eb2N1bWVudCwgaGl0VHlwZSk7CkBAIC0x
NTI5LDIzICsxNTE4LDIxIEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQCiAgICAgICAgICAgICBy
ZXN1bHQgPSBzZWxlY3Rpb25TdGFydC5uZXh0KCk7CiAgICAgICAgIGVsc2UgaWYgKCZzZWxlY3Rp
b25TdGFydC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJmhp
dFRlc3QudGFyZ2V0Tm9kZSgpLT50cmVlU2NvcGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IFZp
c2libGVTZWxlY3Rpb246OmFkanVzdFBvc2l0aW9uRm9yRW5kKHJlc3VsdC5kZWVwRXF1aXZhbGVu
dCgpLCBzZWxlY3Rpb25TdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzZWxlY3Rpb25TdGFydCwgcmVz
dWx0KTsKKworICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwg
cmVzdWx0KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhzZWxl
Y3Rpb25FbmQsIHJlc3VsdCkgPD0gMCkKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVjdGlvbkVu
ZC5wcmV2aW91cygpOwogICAgICAgICBlbHNlIGlmICgmaGl0VGVzdC50YXJnZXROb2RlKCktPnRy
ZWVTY29wZSgpICE9ICZzZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCkt
PnRyZWVTY29wZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNlbGVjdGlvbjo6YWRq
dXN0UG9zaXRpb25Gb3JTdGFydChyZXN1bHQuZGVlcEVxdWl2YWxlbnQoKSwgc2VsZWN0aW9uRW5k
LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChyZXN1bHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
KmZyYW1lLmRvY3VtZW50KCksIHJlc3VsdC5kZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQp
OworCisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHJlc3VsdCwgc2VsZWN0aW9uRW5k
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJhbmdlOwogfQogCi1zdGF0aWMgUmVmUHRyPFJh
bmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUF0V29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBib29sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQogewogICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBzYW1lRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQg
PyBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgOiBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkOwogICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBvcHBvc2l0ZURpcmVjdGlvbiA9IGJhc2VJc1N0
YXJ0ID8gU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6
Rm9yd2FyZDsKQEAgLTE1NTUsNyArMTU0Miw3IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdl
QXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQCiAK
ICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZXh0ZW50LCBUZXh0R3JhbnVsYXJpdHk6
OldvcmRHcmFudWxhcml0eSwgc2FtZURpcmVjdGlvbikpIHsKICAgICAgICAgLy8gVGhpcyBpcyBh
IHdvcmQgYm91bmRhcnkuIExlYXZlIHNlbGVjdGlvbiB3aGVyZSBpdCBpcy4KLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAg
aWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVudCwgVGV4dEdyYW51bGFyaXR5OjpXb3Jk
R3JhbnVsYXJpdHksIG9wcG9zaXRlRGlyZWN0aW9uKSkgewpAQCAtMTU3MCw3ICsxNTU3LDkgQEAg
c3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1l
KiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKICAgICAgICAgJiYgYXRCb3VuZGFyeU9mR3JhbnVsYXJp
dHkod29yZEJvdW5kYXJ5LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgc2FtZURp
cmVjdGlvbikKICAgICAgICAgJiYgaW5pdGlhbEV4dGVudCAhPSB3b3JkQm91bmRhcnkpIHsKICAg
ICAgICAgZXh0ZW50ID0gd29yZEJvdW5kYXJ5OwotICAgICAgICByZXR1cm4gKGJhc2UgPCBleHRl
bnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGJhc2UsIGV4dGVudCkgOiBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgZXh0ZW50LCBiYXNlKTsKKyAgICAgICAg
aWYgKCEoYmFzZSA8IGV4dGVudCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAoYmFzZSwgZXh0ZW50
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShiYXNlLCBleHRlbnQpOwogICAgIH0K
ICAgICAvLyBDb252ZXJzZWx5LCBpZiB0aGUgaW5pdGlhbCBleHRlbnQgZXF1YWxzIHRoZSBjdXJy
ZW50IHdvcmQgYm91bmRhcnksIHRoZW4KICAgICAvLyBydW4gdGhlIHJlc3Qgb2YgdGhpcyBmdW5j
dGlvbiB0byBzZWUgaWYgdGhlIHNlbGVjdGlvbiBzaG91bGQgZXh0ZW5kCkBAIC0xNTkwLDkgKzE1
NzksMTEgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0
aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKICAgICBpZiAoZXh0ZW50LmlzTnVsbCgp
IHx8IGV4dGVudCA9PSBiYXNlKQogICAgICAgICBleHRlbnQgPSB3b3JkQm91bmRhcnk7CiAgICAg
aWYgKGV4dGVudC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGJhc2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRl
KCpmcmFtZS0+ZG9jdW1lbnQoKSwgZXh0ZW50LCBiYXNlKTsKKyAgICBpZiAoIShiYXNlIDwgZXh0
ZW50KSkKKyAgICAgICAgc3RkOjpzd2FwKGJhc2UsIGV4dGVudCk7CisgICAgcmV0dXJuIG1ha2VT
aW1wbGVSYW5nZShiYXNlLCBleHRlbnQpOwogfQogCiBJbnRSZWN0IFdlYlBhZ2U6OnJvb3RWaWV3
Qm91bmRzRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtMTcwNywzMSArMTY5
OCwyOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IElu
dFBvaW50JiBwb2ludCwgU2VsZWN0aW9uVG91Y2ggcwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcmVzdWx0Owot
ICAgIE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4gZmxhZ3M7Ci0KICAgICBpZiAoc2hvdWxkRGlz
cGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c1doZW5Nb2RpZnlpbmdTZWxlY3Rpb24oKSkKICAgICAg
ICAgZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoc2VsZWN0
aW9uVG91Y2gsIHBvaW50KTsKIAorICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKKyAg
ICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdzOworCiAgICAgc3dpdGNoIChzZWxlY3Rp
b25Ub3VjaCkgewogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQ6CiAgICAgY2FzZSBT
ZWxlY3Rpb25Ub3VjaDo6RW5kZWROb3RNb3Zpbmc6CiAgICAgICAgIGJyZWFrOwotICAgIAorCiAg
ICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWQ6Ci0gICAgICAgIGlmIChmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkKLSAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdl
OjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHJlc3VsdCwgcmVzdWx0KTsKLSAgICAgICAgfSBl
bHNlCisgICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKQorICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY2xvc2VzdFdv
cmRCb3VuZGFyeUZvclBvc2l0aW9uKHBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJhbmdlID0gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhmcmFtZSwgcG9p
bnQsIGJhc2VJc1N0YXJ0KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNlbGVjdGlvblRv
dWNoOjpFbmRlZE1vdmluZ0ZvcndhcmQ6CiAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRCb3Vu
ZGFyeUZvclBvc2l0aW9uKCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25E
aXJlY3Rpb246OkZvcndhcmQpOwogICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICBjYXNl
IFNlbGVjdGlvblRvdWNoOjpFbmRlZE1vdmluZ0JhY2t3YXJkOgogICAgICAgICByYW5nZSA9IHJh
bmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbigmZnJhbWUsIHBvc2l0aW9uLCBiYXNlSXNTdGFy
dCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTc0
MCw4ICsxNzI4LDkgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhj
b25zdCBJbnRQb2ludCYgcG9pbnQsIFNlbGVjdGlvblRvdWNoIHMKICAgICAgICAgcmFuZ2UgPSBy
YW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGZyYW1lLCBwb2ludCwgYmFzZUlzU3Rh
cnQpOwogICAgICAgICBicmVhazsKICAgICB9CisKICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVzQ2FsbGJhY2socG9pbnQsIHNlbGVjdGlvblRvdWNo
LCBmbGFncywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMTc0OSwxNSArMTczOCwxMiBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwg
U2VsZWN0aW9uVG91Y2ggcwogdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCBH
ZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSBnZXN0dXJlU3Rh
dGUsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVQb3Np
dGlvbiBmcm9tUG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52
aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhmcm9tKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHRv
UG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJv
b3RWaWV3VG9Db250ZW50cyh0bykpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgaWYg
KGZyb21Qb3NpdGlvbi5pc05vdE51bGwoKSAmJiB0b1Bvc2l0aW9uLmlzTm90TnVsbCgpKSB7Ci0g
ICAgICAgIGlmIChmcm9tUG9zaXRpb24gPCB0b1Bvc2l0aW9uKQotICAgICAgICAgICAgcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBmcm9tUG9zaXRpb24sIHRvUG9zaXRp
b24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHRvUG9zaXRpb24sIGZyb21Qb3NpdGlvbik7Ci0gICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGZyb21Qb3NpdGlvbi5h
ZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7CisgICAgYXV0byBmcm9tUG9zaXRpb24gPSBmcmFtZS52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhmcm9tKSk7
CisgICAgYXV0byB0b1Bvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJh
bWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHModG8pKTsKKyAgICBpZiAoYXV0byByYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZShmcm9tUG9zaXRpb24sIHRvUG9zaXRpb24pKSB7CisgICAgICAgIGlm
ICghKGZyb21Qb3NpdGlvbiA8IHRvUG9zaXRpb24pKQorICAgICAgICAgICAgc3RkOjpzd2FwKHJh
bmdlLT5zdGFydCwgcmFuZ2UtPmVuZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UocmFuZ2UsIGZyb21Qb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAg
fQogCiAgICAgLy8gV2UgY2FuIHVzZSB0aGUgc2FtZSBjYWxsYmFjayBmb3IgdGhlIGdlc3R1cmVz
IHdpdGggb25lIHBvaW50LgpAQCAtMTc4MSwxMyArMTc2NywxMyBAQCB2b2lkIFdlYlBhZ2U6OmV4
dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIENvbXBs
ZXRpb25IYQogICAgIEludFBvaW50IGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHM7
CiAgICAgYm9vbCBzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzID0gc2hvdWxkRGlzcGF0Y2hTeW50
aGV0aWNNb3VzZUV2ZW50c1doZW5Nb2RpZnlpbmdTZWxlY3Rpb24oKTsKICAgICBpZiAoc2hvdWxk
RGlzcGF0Y2hNb3VzZUV2ZW50cykgewotICAgICAgICBhdXRvIHN0YXJ0TG9jYXRpb25Gb3JTeW50
aGV0aWNNb3VzZUV2ZW50cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2li
bGVQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkuYWJzb2x1dGVDYXJldEJvdW5k
cygpKS5jZW50ZXIoKTsKLSAgICAgICAgZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50
cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbih3b3Jk
UmFuZ2UtPmVuZFBvc2l0aW9uKCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7Cisg
ICAgICAgIGF1dG8gc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUu
dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KSkuYWJzb2x1dGVDYXJldEJvdW5kcygpKS5j
ZW50ZXIoKTsKKyAgICAgICAgZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyA9IGZy
YW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkp
LmNlbnRlcigpOwogICAgICAgICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0
aW9uR2VzdHVyZShTZWxlY3Rpb25Ub3VjaDo6U3RhcnRlZCwgc3RhcnRMb2NhdGlvbkZvclN5bnRo
ZXRpY01vdXNlRXZlbnRzKTsKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0Zv
clNlbGVjdGlvbkdlc3R1cmUoU2VsZWN0aW9uVG91Y2g6Ok1vdmVkLCBlbmRMb2NhdGlvbkZvclN5
bnRoZXRpY01vdXNlRXZlbnRzKTsKICAgICB9CiAKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLCBwb3Np
dGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hNb3VzZUV2
ZW50cykKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdl
c3R1cmUoU2VsZWN0aW9uVG91Y2g6OkVuZGVkLCBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNl
RXZlbnRzKTsKQEAgLTE4MTIsMTAgKzE3OTgsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXb3Jk
QmFja3dhcmQoKQogICAgIGlmICghZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0
aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRH
cmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJk
KTsKLSAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBzdGFydFBvc2l0aW9uICE9
IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJh
bmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKS5w
dHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGF1dG8gcG9zaXRpb24gPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHN0
YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlv
biwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6
QmFja3dhcmQpOworICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTnVsbCgpIHx8IHN0YXJ0UG9zaXRp
b24gPT0gcG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9u
KSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogfQogCiB2b2lkIFdlYlBhZ2U6Om1vdmVT
ZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw3ICsxODIxLDcgQEAgdm9pZCBXZWJQYWdl
Ojptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChwb3NpdGlvbi5p
c05vdE51bGwoKSAmJiBzdGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50
KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxl
UmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KICAgICAKQEAgLTE5ODUsNyArMTk3Myw3IEBAIHZvaWQgV2ViUGFn
ZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4
dEdyYW51bGFyaXR5CiAgICAgfQogCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+
IHNlbGVjdGlvblJlY3RzOwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0
VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3RzKTsKKyAgICBjcmVhdGVMaXZlUmFuZ2Uo
KnJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhz
ZWxlY3Rpb25SZWN0cyk7CiAgICAgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3U2VsZWN0aW9uUmVj
dHMoKmZyYW1lLnZpZXcoKSwgc2VsZWN0aW9uUmVjdHMpOwogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayhzZWxlY3Rpb25SZWN0cywgY2FsbGJh
Y2tJRCkpOwogfQpAQCAtMjA2NSw3ICsyMDUzLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RQb3Np
dGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBib29sIGlzSW50ZXIK
ICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWRO
b2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50
KTsKICAgICAKICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVS
YW5nZShwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogfQogCkBAIC0yMDc3LDcgKzIwNjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnNl
bGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvaQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkgewogICAgICAgICBwb3NpdGlv
biA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxh
cml0eSwgZGlyZWN0aW9uKTsKICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAg
ICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBVUFNUUkVBTSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOworICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSht
YWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIH0KICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMjA5MSw3ICsyMDc5LDcgQEAgdm9pZCBXZWJQYWdl
Ojptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5IGdyYW4KICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gKGlzRm9yd2Fy
ZCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkgOiBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgcG9zaXRpb24g
PSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgZ3JhbnVsYXJp
dHksIGRpcmVjdGlvbik7CiAgICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkKLSAgICAg
ICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgaXNGb3J3YXJkPyBV
UFNUUkVBTSA6IERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgaXNGb3J3YXJk
PyBVUFNUUkVBTSA6IERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9CiAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKIH0KQEAgLTIxMDAsMjUgKzIwODgsMTMgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IFdlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KEZyYW1lJiBmcmFtZSwgY29uc3Qg
V2UKIHsKICAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZv
clBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAg
ICAgc3dpdGNoIChncmFudWxhcml0eSkgewotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpDaGFy
YWN0ZXJHcmFudWxhcml0eTogewotICAgICAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24pOwotICAgICAgICBpZiAoIWJvdW5kYXJ5KQotICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgeyAqYm91bmRhcnksICpib3VuZGFy
eSB9IH07Ci0gICAgfQotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6
IHsKLSAgICAgICAgYXV0byByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7
Ci0gICAgICAgIGlmICghcmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgICAgICByZXR1cm4geyAqcmFuZ2UgfTsKLSAgICB9CisgICAgY2FzZSBUZXh0R3JhbnVsYXJp
dHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KHBvc2l0aW9uKTsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5Ogor
ICAgICAgICByZXR1cm4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICBjYXNl
IFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIFRleHRHcmFu
dWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0byByYW5nZSA9IGVu
Y2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgZ3JhbnVsYXJpdHksIFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgICAgIGlmICghcmFuZ2UpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4geyAqcmFuZ2UgfTsKLSAgICB9
CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OgorICAgICAg
ICByZXR1cm4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxh
cml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICBjYXNlIFRleHRHcmFudWxh
cml0eTo6RG9jdW1lbnRHcmFudWxhcml0eToKICAgICAgICAgLy8gRklYTUU6IE1ha2VzIG5vIHNl
bnNlIHRoYXQgdGhpcyBtdXRhdGVzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgcmV0dXJucyBu
dWxsLgogICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKQEAgLTIxNjUsNyAr
MjE0MSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBXCiAgICAgYXV0byYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFu
Z2UgPSByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChmcmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5
LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICBpZiAocmFuZ2UpCi0gICAg
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSkucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UoKnJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIG1faW5pdGlh
bFNlbGVjdGlvbiA9IHJhbmdlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0yMTk3
LDEwICsyMTczLDggQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9p
bnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYKICAgICBlbHNlIGlmIChwb3Np
dGlvbiA8IGluaXRpYWxTZWxlY3Rpb25TdGFydFBvc2l0aW9uKQogICAgICAgICBzZWxlY3Rpb25T
dGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihuZXdSYW5nZS0+c3RhcnQpOwogCi0g
ICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTm90TnVsbCgpICYmIHNlbGVjdGlvbkVuZC5pc05vdE51
bGwoKSkgewotICAgICAgICBhdXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5
UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9
OwotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Ci0gICAgfQorICAgIGlmIChhdXRv
IHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpKQor
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBVUFNUUkVB
TSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENh
bGxiYWNrKHNlbGVjdGlvblN0YXJ0ID09IGluaXRpYWxTZWxlY3Rpb25TdGFydFBvc2l0aW9uLCBj
YWxsYmFja0lEKSk7CiB9CkBAIC0yMjE1LDcgKzIxODksNiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0
ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQs
IGJvbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsK
ICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQ7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHNlbGVjdGlvbkVuZDsKICAgICAKQEAgLTIyNDksMTEgKzIyMjIsOCBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cG9pbnQsIGJvbwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25TdGFy
dC5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb25FbmQuaXNOb3ROdWxsKCkpCi0gICAgICAgIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc2VsZWN0aW9uU3RhcnQsIHNlbGVj
dGlvbkVuZCk7Ci0KLSAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgaWYgKGF1
dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkp
CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIFVQU1RS
RUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNl
clRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVk
Q2FsbGJhY2sobV9zZWxlY3Rpb25BbmNob3IgPT0gU3RhcnQsIGNhbGxiYWNrSUQpKTsKIH0KQEAg
LTIzMDMsMTIgKzIyNzMsMTIgQEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0ZWRUZXh0KGNv
bnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAg
ICAgYXV0byB3b3JkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkKICAgICAgICAg
PyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkKLSAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0gICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQo
d29yZFJhbmdlLmdldCgpKSAhPSBvbGRUZXh0KQorICAgICAgICA6IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKHBsYWluVGV4dEZvckNv
bnRleHQod29yZFJhbmdlKSAhPSBvbGRUZXh0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
ZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgVVBTVFJFQU0s
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZSwgVVBTVFJFQU0sIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBmcmFt
ZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZyYW1lLmVkaXRvcigpLnNl
dElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwogfQpAQCAtMjMyOCwxNCArMjI5OCwxNCBA
QCB2b2lkIFdlYlBhZ2U6OnJlcGxhY2VEaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0
LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCiAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ucHJl
dmlvdXMoKTsKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHBvc2l0aW9uID0g
c3RhcnRPZkRvY3VtZW50KGZyYW1lLmRvY3VtZW50KCkpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShw
b3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKLSAgICBp
ZiAocGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5wdHIoKSkgIT0gb2xkVGV4dCkKKyAgICBpZiAo
cGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSkgIT0gb2xkVGV4dCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBub3RpZnkgdGhlIGNsaWVudCB0aGF0IHRoZSBzZWxl
Y3Rpb24gaGFzIGNoYW5nZWQgdW50aWwgd2UgYXJlIGRvbmUgaW5zZXJ0aW5nIHRoZSBuZXcgdGV4
dC4KICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwot
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UucHRyKCksIFVQU1RS
RUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Cisg
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgVVBTVFJFQU0sIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBmcmFt
ZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZyYW1lLmVkaXRvcigpLnNl
dElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwogfQpAQCAtMjM0OCwyNyArMjMxOCwyNSBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoY29uc3QgU3RyaW5nJiB0
ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIENvbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKTsKLSAgICBhdXRvIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9u
KTsKKyAgICBhdXRvIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAg
ICAgIHJlcGx5KHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHRleHRG
b3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gdGV4
dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgY29uc3QgdW5zaWdu
ZWQgbWF4U2VhcmNoQXR0ZW1wdHMgPSA1OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyAgaSA8IG1h
eFNlYXJjaEF0dGVtcHRzICYmIHRleHRGb3JSYW5nZSAhPSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb247
ICsraSkKLSAgICB7Ci0gICAgICAgIHBvc2l0aW9uID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5w
cmV2aW91cygpOwotICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkgfHwgcG9zaXRpb24gPT0g
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgIGkgPCBtYXhT
ZWFyY2hBdHRlbXB0cyAmJiB0ZXh0Rm9yUmFuZ2UgIT0gdGV4dEZvckF1dG9jb3JyZWN0aW9uOyAr
K2kpIHsKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyYW5nZS0+c3RhcnQpLnByZXZpb3VzKCk7CisgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwo
KSB8fCBwb3NpdGlvbiA9PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0
KSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbiktPnN0YXJ0UG9z
aXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBw
bGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgcmFuZ2UgPSB7IHsgd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS0+c3RhcnQsIHJhbmdlLT5lbmQgfSB9OworICAg
ICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICB9CiAK
ICAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7CiAgICAgaWYgKHRleHRG
b3JSYW5nZSA9PSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24pCi0gICAgICAgIHJhbmdlLT5jb2xsZWN0
U2VsZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHMpOworICAgICAgICBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHMpOwogCiAgICAgYXV0
byByb290Vmlld1NlbGVjdGlvblJlY3RzID0gc2VsZWN0aW9uUmVjdHMubWFwKFsmXShjb25zdCBh
dXRvJiBzZWxlY3Rpb25SZWN0KSAtPiBGbG9hdFJlY3QgeyByZXR1cm4gZnJhbWUudmlldygpLT5j
b250ZW50c1RvUm9vdFZpZXcoc2VsZWN0aW9uUmVjdC5yZWN0KCkpOyB9KTsKIApAQCAtMjQxNCwx
NCArMjM4MiwxNCBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChj
b25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgIGlmICghZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAg
ICAgU3RyaW5nIHRleHRGb3JSYW5nZTsKICAgICBhdXRvIG9yaWdpbmFsVGV4dFdpdGhGb2xkZWRR
dW90ZU1hcmtzID0gZm9sZFF1b3RlTWFya3Mob3JpZ2luYWxUZXh0KTsKIAogICAgIGlmIChmcmFt
ZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICAgICAgYXV0
byBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
OwogICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7Ci0gICAg
ICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAg
ICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICAgICAg
CiAgICAgICAgIC8vIElmICdvcmlnaW5hbFRleHQnIGlzIG5vdCB0aGUgc2FtZSBhcyAndGV4dEZv
clJhbmdlJyB3ZSBuZWVkIHRvIG1vdmUgJ3JhbmdlJwogICAgICAgICAvLyBmb3J3YXJkIHN1Y2gg
dGhhdCBpdCBtYXRjaGVzIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24gYXMgbXVjaCBhcyBwb3NzaWJs
ZS4KQEAgLTI0MzEsMzMgKzIzOTksMzMgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0
aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICAg
ICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgICAgICAgICBp
ZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzdGFydE9m
RG9jdW1lbnQoZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZv
ckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UocG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAg
ICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBsb29wQ291bnQgPSAwOwogICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbWF4UG9zaXRpb25zQXR0ZW1wdHMgPSAxMDsKICAgICAgICAgICAgIHdoaWxlICh0ZXh0Rm9y
UmFuZ2UubGVuZ3RoKCkgJiYgdGV4dEZvclJhbmdlLmxlbmd0aCgpID4gb3JpZ2luYWxUZXh0Lmxl
bmd0aCgpICYmIGxvb3BDb3VudCA8IG1heFBvc2l0aW9uc0F0dGVtcHRzKSB7CiAgICAgICAgICAg
ICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHBv
c2l0aW9uLmlzTm90TnVsbCgpICYmIHBvc2l0aW9uID49IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KTsKLSAgICAgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJh
bmdlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
cG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgICAg
ICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAg
ICAgICAgICAgICAgIGxvb3BDb3VudCsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKHRleHRGb3JSYW5nZS5pc0VtcHR5KCkgJiYgcmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQo
KSkgewogICAgICAgICAgICAgLy8gSWYgJ3JhbmdlJyBkb2VzIG5vdCBpbmNsdWRlIGFueSB0ZXh0
IGJ1dCBpdCBpcyBub3QgY29sbGFwc2VkLCB3ZSBuZWVkIHRvIHNldAogICAgICAgICAgICAgLy8g
J3JhbmdlJyB0byBtYXRjaCB0aGUgc2VsZWN0aW9uLiBPdGhlcndpc2Ugbm9uLXRleHQgbm9kZXMg
d2lsbCBiZSByZW1vdmVkLgotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBSYW5nZSBzZWxlY3Rpb24uCi0gICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAg
ICByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7Cisg
ICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgIH0K
IAogICAgIGlmIChmb2xkUXVvdGVNYXJrcyh0ZXh0Rm9yUmFuZ2UpICE9IG9yaWdpbmFsVGV4dFdp
dGhGb2xkZWRRdW90ZU1hcmtzKQpAQCAtMjQ2Niw5ICsyNDM0LDkgQEAgYm9vbCBXZWJQYWdlOjph
cHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25z
dCBTdHJpbmcKICAgICAvLyBDb3JyZWN0bHkgZGV0ZXJtaW5lIGFmZmluaXR5LCB1c2luZyBsb2dp
YyBjdXJyZW50bHkgb25seSBwcmVzZW50IGluIFZpc2libGVQb3NpdGlvbgogICAgIEVBZmZpbml0
eSBhZmZpbml0eSA9IERPV05TVFJFQU07CiAgICAgaWYgKHJhbmdlICYmIHJhbmdlLT5jb2xsYXBz
ZWQoKSkKLSAgICAgICAgYWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSwgVVBTVFJFQU0pLmFmZmluaXR5KCk7CisgICAgICAgIGFmZmluaXR5ID0gVmlzaWJs
ZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpLCBVUFNU
UkVBTSkuYWZmaW5pdHkoKTsKICAgICAKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHJhbmdlLmdldCgpLCBhZmZpbml0eSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UocmFuZ2UsIGFmZmluaXR5LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7CiAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpCiAgICAgICAgIGZy
YW1lLmVkaXRvcigpLmluc2VydFRleHQoY29ycmVjdGlvbiwgMCwgb3JpZ2luYWxUZXh0LmlzRW1w
dHkoKSA/IFRleHRFdmVudElucHV0S2V5Ym9hcmQgOiBUZXh0RXZlbnRJbnB1dEF1dG9jb21wbGV0
aW9uKTsKICAgICBlbHNlIGlmIChvcmlnaW5hbFRleHQubGVuZ3RoKCkpCkBAIC0yNDk1LDEyICsy
NDYzLDggQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9u
Q29udGV4dCgpCiAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICBp
ZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5n
ZSgpKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QmVmb3JlOwotICAgICAgICBpZiAoYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pKQotICAgICAgICAgICAg
bWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQoeyBjb21wb3NpdGlvblJhbmdl
LT5zdGFydCwgKnN0YXJ0IH0pOwotICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEFmdGVyOwotICAg
ICAgICBpZiAoYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRQb3NpdGlvbikpCi0gICAg
ICAgICAgICBtYXJrZWRUZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KHsgKmVuZCwgY29t
cG9zaXRpb25SYW5nZS0+ZW5kIH0pOworICAgICAgICBhdXRvIG1hcmtlZFRleHRCZWZvcmUgPSBw
bGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShjb21wb3NpdGlvblJhbmdlLT5zdGFy
dCwgc3RhcnRQb3NpdGlvbikpOworICAgICAgICBhdXRvIG1hcmtlZFRleHRBZnRlciA9IHBsYWlu
VGV4dEZvckNvbnRleHQobWFrZVNpbXBsZVJhbmdlKGVuZFBvc2l0aW9uLCBjb21wb3NpdGlvblJh
bmdlLT5lbmQpKTsKICAgICAgICAgbWFya2VkVGV4dCA9IG1hcmtlZFRleHRCZWZvcmUgKyBzZWxl
Y3RlZFRleHQgKyBtYXJrZWRUZXh0QWZ0ZXI7CiAgICAgICAgIGlmICghbWFya2VkVGV4dC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIG1hcmtlZFRleHRSYW5nZS5sb2NhdGlvbiA9IG1hcmtlZFRl
eHRCZWZvcmUubGVuZ3RoKCk7CkBAIC0yNjc0LDkgKzI2MzgsOSBAQCBzdGF0aWMgdm9pZCBkYXRh
RGV0ZWN0b3JMaW5rUG9zaXRpb25JbmZvcm1hdGlvbihFbGVtZW50JiBlbGVtZW50LCBJbnRlcmFj
dGlvbkluZgogICAgIGF1dG8gbGlua1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShlbGVtZW50LmRvY3Vt
ZW50KCkpOwogICAgIGxpbmtSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOwogICAg
IGluZm8udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5zdGFydFBvc2l0aW9u
KCksCi0gICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlv
bkRpcmVjdGlvbjo6QmFja3dhcmQpLmdldCgpKTsKKyAgICAgICAgZGF0YURldGVjdGlvbkV4dGVu
ZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOwogICAgIGlu
Zm8udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0
ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShsaW5rUmFuZ2UtPmVuZFBvc2l0aW9uKCksCi0g
ICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVj
dGlvbjo6Rm9yd2FyZCkuZ2V0KCkpOworICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250
ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKTsKIH0KICNlbmRpZgogCkBA
IC00MTA2LDcgKzQwNzAsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhEZWx0
YShpbnQ2NF90IGxvY2F0aW9uRGVsdGEsIGludDY0X3QgbGVuZ3RoRGVsdAogCiAgICAgYXV0byBu
ZXdTZWxlY3Rpb25SYW5nZSA9IENoYXJhY3RlclJhbmdlKG5ld1NlbGVjdGlvbkxvY2F0aW9uLnVu
c2FmZUdldCgpLCBuZXdTZWxlY3Rpb25MZW5ndGgudW5zYWZlR2V0KCkpOwogICAgIGF1dG8gdXBk
YXRlZFNlbGVjdGlvblJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodXBkYXRlZFNlbGVj
dGlvblJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSwgRE9XTlNUUkVBTSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAgLTQyNjYsMTIgKzQyMzAs
MTEgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVu
dEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICB9CiAKICAgICBhdXRvIG1ha2VTdHJp
bmcgPSBbXSAoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBlbmQpIC0+IEF0dHJpYnV0ZWRTdHJpbmcgewotICAgICAgICBhdXRvIHN0YXJ0Qm91bmRh
cnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAg
YXV0byBlbmRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZC5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICAgICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSB8fCAqc3RhcnRC
b3VuZGFyeSA9PSAqZW5kQm91bmRhcnkpCisgICAgICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHJldHVybiBlZGl0aW5nLW9mZnNldC1jb21wYXRpYmxlIGF0dHJpYnV0ZWQgc3RyaW5ncyBp
ZiB0aGF0IG9wdGlvbiBpcyByZXF1ZXN0ZWQuCi0gICAgICAgIHJldHVybiB7IGFkb3B0TlMoW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOldlYkNvcmU6OnBsYWluVGV4
dFJlcGxhY2luZ05vQnJlYWtTcGFjZSh7IFdURk1vdmUoKnN0YXJ0Qm91bmRhcnkpLCBXVEZNb3Zl
KCplbmRCb3VuZGFyeSkgfSldKSwgbmlsIH07CisgICAgICAgIHJldHVybiB7IGFkb3B0TlMoW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOldlYkNvcmU6OnBsYWluVGV4
dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UpXSksIG5pbCB9OwogICAgIH07CiAKICAgICBj
b250ZXh0LmNvbnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3Rh
cnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKQEAgLTQzMDYsOCArNDI2OSw4IEBAIHZv
aWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5n
Q29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgICAgICBjb250ZXh0LnRleHRSZWN0cyA9IGNo
YXJhY3RlclJlY3RzRm9yUmFuZ2UoKmNvbnRleHRSYW5nZSwgMCk7CiAgICAgfSBlbHNlIGlmICh3
YW50c01hcmtlZFRleHRSZWN0cyAmJiBjb21wb3NpdGlvblJhbmdlKSB7CiAgICAgICAgIHVuc2ln
bmVkIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBpZiAoYXV0byBzdGFydCA9
IG1ha2VCb3VuZGFyeVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkK
LSAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQo
eyBXVEZNb3ZlKCpzdGFydCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0IH0pLmxlbmd0aCgpOwor
ICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb250ZXh0QmVmb3JlU3Rh
cnQsIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KSkKKyAgICAgICAgICAgIGNvbXBvc2l0aW9uU3Rh
cnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOwogICAgICAgICBjb250ZXh0LnRleHRS
ZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9yUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UsIGNvbXBvc2l0
aW9uU3RhcnRPZmZzZXQpOwogICAgIH0KIApAQCAtNDM5Miw3ICs0MzU1LDcgQEAgdm9pZCBXZWJQ
YWdlOjpmb2N1c1RleHRJbnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KGNvbnN0IEVsZW1lbnRDb250
ZXh0JiBlbGVtZW50Q28KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKFJhbmdlOjpjcmVhdGUoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgdGFyZ2V0
RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0
aW9uKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVy
KHRydWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCmluZGV4IGFkYjk5MjNmNTExZDNhZDZmNTI0OTgyZjhmYTUyZjMwMGM4
YzNiZmMuLmNhMWM5NWU0ODQ3Yjc0NWVmNGIyY2Q5MjVkM2UwODZhMjczZjljOTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hh
cmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFu
Z2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7CisgICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6
dG9SYW5nZShmcmFtZSwgZWRpdGluZ1JhbmdlKTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3Rl
clJhbmdlQ2FsbGJhY2soeyB9LCBFZGl0aW5nUmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdh
Y3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0MDE0NGI1OTFjMWI0MTAwODVmNmI2
NjVlZDU5ZTA0ZWZjNDc3ZGQyLi5jN2M2Y2MyNGU2ODFhZGNkYTc2MmIyYTVlNGI3NWI1MmQ1NWI1
OTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4OCw3ICsxODgsNiBAQAogCQk1QzdFNzg3
NjIyRDk1RkUyMDAwNkEyMzAgLyogVW5pZmllZFNvdXJjZTExLW1tLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM3RTc4NjkyMkQ5NUZFMjAwMDZBMjMw
IC8qIFVuaWZpZWRTb3VyY2UxMS1tbS5tbSAqLzsgfTsKIAkJNUM5N0VGNjMyMzQyQzUzNDAwNjAy
MEQ0IC8qIFVuaWZpZWRTb3VyY2UxOS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDOTdFRjYxMjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291
cmNlMTktbW0ubW0gKi87IH07CiAJCTVDOTdFRjY0MjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVk
U291cmNlMjAtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Qzk3RUY2MjIzNDJDNTM0MDA2MDIwRDQgLyogVW5pZmllZFNvdXJjZTIwLW1tLm1tICov
OyB9OwotCQk1QzlBNEU1MzIyREU0NjI3MDA3REIzNTMgLyogRE9NVUlLaXRFeHRlbnNpb25zLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNENDM2Mzcx
RDU3QUJFRTAwQUI4NUVBIC8qIERPTVVJS2l0RXh0ZW5zaW9ucy5tbSAqLzsgfTsKIAkJNUM5RDky
NUEyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXMudHh0IGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlEOTI1ODIyRDdFOEFEMDA4RTkyNjYgLyogU291
cmNlcy50eHQgKi87IH07CiAJCTVDOUQ5MjVCMjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzQ29j
b2EudHh0IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzlEOTI1OTIyRDdFOEFEMDA4RTkyNjYgLyogU291cmNlc0NvY29hLnR4dCAqLzsgfTsKIAkJNUM5
RUYyRjUyMUYwNjFCRTAwM0JEQzU2IC8qIFBhZ2VTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFRjJGNDIxRjA2
MUJFMDAzQkRDNTYgLyogUGFnZVN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLzsgfTsKQEAgLTM0
MDAsNyArMzM5OSw2IEBACiAJCQkJMUE5MTE5RjYxREIwNDcwQTAwODdEMUZEIC8qIEJhY2tGb3J3
YXJkTGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNjA1MTkxMTc1MDJBNUQwMEJDNjJGNSAv
KiBCaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjgyOTU4RDQxMzI3
MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTVD
OUE0RTUzMjJERTQ2MjcwMDdEQjM1MyAvKiBET01VSUtpdEV4dGVuc2lvbnMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQTYwNTE5MzE3NTAyQTVEMDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlz
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOERFRDUxMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0
ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNjQwMDZFMjM5
OTZFODEwMDFFMTg1RSAvKiBJblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNp
YmxlUG9zaXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJWaXNpYmxlUG9zaXRpb24ubW0KaW5kZXggMmIzZDE5YzlkYTdiZDc3Y2I3ZGE3NmU2ZGZlYjVk
NTFjZTM1NGJjMS4uM2IwZWI5NTRlMDlhZmQ4YzczMDVmZmFlZTEyNDFmMTdmMjEyZDFmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJs
ZVBvc2l0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYlZpc2libGVQb3NpdGlvbi5tbQpAQCAtMjkyLDcgKzI5Miw3IEBAIC0gKEJPT0wpd2l0aGlu
VGV4dFVuaXRPZkdyYW51bGFyaXR5OihXZWJUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5E
aXJlY3Rpb25JCiAvLyBpcyBlbmNsb3NlZCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBkaXJlY3Rpb24s
IHVzaW5nIHRoZSBzYW1lIHJ1bGUgYXMgLVtXZWJWaXNpYmxlUG9zaXRpb24gd2l0aGluVGV4dFVu
aXRPZkdyYW51bGFyaXR5OmluRGlyZWN0aW9uQXRCb3VuZGFyeTpdLgogLSAoRE9NUmFuZ2UgKill
bmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxh
cml0eSBpbkRpcmVjdGlvbklmQXRCb3VuZGFyeTooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24p
ZGlyZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtpdChlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkoW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5
KSwgdG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KFtzZWxmIF92aXNpYmxlUG9zaXRpb25d
LCB0b1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRvU2VsZWN0aW9uRGlyZWN0aW9uKGRp
cmVjdGlvbikpKTsKIH0KIAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb25BdFN0YXJ0
T3JFbmRPZldvcmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01I
VE1MLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KaW5kZXggZWEz
MDk4OTI0OThmM2Y2NGVmMGYwNjQ4ZjM1NDVjNTU4NTFiOTY5NS4uODU4NGMyMzFmZWY4YzhkOGI3
MDZlOGY5NmVkMDhkNzM4ODUzZGQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhU
TUwubW0KQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyVGV4dENvbnRyb2wuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
bWFya3VwLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTUyLDcgKzE1Myw3IEBA
IC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1
cFN0cmluZzooTlNTdHJpbmcgKiltYXJrCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRl
RG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKICAgICAvLyBGSVhN
RTogU2luY2UgdGhpcyBpcyBub3QgYSBjb250ZXh0dWFsIGZyYWdtZW50LCBpdCB3b24ndCBoYW5k
bGUgd2hpdGVzcGFjZSBwcm9wZXJseS4KLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY29yZShzZWxmKS0+Y3JlYXRlUmFuZ2UoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVy
biBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoKmNvcmUoc2VsZikpLCB0ZXh0KS5wdHIoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmluZGV4IDgxMDBhYmU2
YmJmN2Q4Njk4ZGE2ZWM3NWJkOGJhZjhmMGVlNGQ2OTEuLjRhMThkZjQ1OWJiZDU5MGUyZTIxYjRm
MTk0MjMyODJmYzIyNGMxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtNzgsOSArNzgsMTIgQEAgQGltcGxlbWVudGF0aW9u
IERPTVJhbmdlIChVSUtpdEV4dGVuc2lvbnMpCiAKIC0gKHZvaWQpbW92ZTooVUludDMyKWFtb3Vu
dCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0g
ICAgUmFuZ2UgKnJhbmdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvIHJhbmdlID0gY29yZShzZWxm
KTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKICAgICBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKLSAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8ocmFu
Z2UpOworICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKnJh
bmdlKSk7CiAgICAgCiAgICAgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0g
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eTsKICAgICAvLyBV
bnRpbCBXZWJLaXQgc3VwcG9ydHMgdmVydGljYWwgbGF5b3V0LCAiZG93biIgaXMgZXF1aXZhbGVu
dCB0byAiZm9yd2FyZCBieSBhIGxpbmUiIGFuZApAQCAtOTIsMTAgKzk1LDEwIEBAIC0gKHZvaWQp
bW92ZTooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rp
b24pZGlyZWN0aW9uCiAgICAgICAgIGRpcmVjdGlvbiA9IFdlYlRleHRBZGp1c3RtZW50QmFja3dh
cmQ7CiAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpMaW5l
R3JhbnVsYXJpdHk7CiAgICAgfQotICAgIAorCiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBh
bW91bnQ7IGkrKykKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgKFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICAKKwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJh
bWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgp
KQpAQCAtMTA2LDEzICsxMDksMTYgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGly
ZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIAogLSAodm9pZCll
eHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0
aW9uKWRpcmVjdGlvbgogewotICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2VsZik7CisgICAgYXV0
byByYW5nZSA9IGNvcmUoc2VsZik7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247Ci0gICAgZnJhbWVT
ZWxlY3Rpb24ubW92ZVRvKHJhbmdlKTsKLSAgICAKKyAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24obWFrZVNpbXBsZVJhbmdlKCpyYW5nZSkpOworCiAgICAgZm9yIChVSW50MzIgaSA9IDA7
IGkgPCBhbW91bnQ7IGkrKykKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCAoV2ViQ29yZTo6U2VsZWN0aW9uRGly
ZWN0aW9uKWRpcmVjdGlvbiwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7Ci0gICAgCisKICAgICBQb3NpdGlvbiBzdGFydCA9IGZyYW1lU2VsZWN0aW9uLnNl
bGVjdGlvbigpLnN0YXJ0KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRp
b24gZW5kID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KaW5kZXggNzFjMDRkYjIy
OTM3YTMzMGUxYTQ3M2YyMTNmYWM4M2M5NTczMWYwYi4uZDNhZTdmNmVmODNkMjA4ZjI2OWI2ZTE2
MmRiZTE0NTQ2MmRmYjk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L1dlYkRPTU9wZXJhdGlvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dl
YkRPTU9wZXJhdGlvbnMubW0KQEAgLTUyLDYgKzUyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNF
bGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUGxhdGZvcm1XaGVlbEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyVHJlZUFzVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFkb3dSb290Lmg+CkBAIC0xODQs
NyArMTg1LDcgQEAgQGltcGxlbWVudGF0aW9uIERPTVJhbmdlIChXZWJET01SYW5nZU9wZXJhdGlv
bnMpCiAKIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCiB7Ci0gICAgcmV0dXJuIFtbW1dlYkFy
Y2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOkxlZ2FjeVdlYkFyY2hp
dmU6OmNyZWF0ZShjb3JlKHNlbGYpKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJB
cmNoaXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGUoKmNvcmUoc2VsZikpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5TU3RyaW5n
ICopbWFya3VwU3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggYmQ5NWE2NjQ4YTMwMzJjMDU3
YTk4MWUwOTQ2OTA4MGU4ODEwNjM1OS4uMjU0YTY1YWNkMjY0ZjNhYTk5OThmNWRkMjNmODk0YmIy
YTY2Mjk0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTAyNSwxMSArMTAyNSwxMCBAQCBzdGF0
aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5ICppbmNvbWluZ1Jlc3Vs
dHMsIE9wdGlvblNldDxUZXh0Qwogc3RhdGljIE5TVUludGVnZXIgaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAg
ICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBh
dXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25T
dGFydCk7Ci0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91
bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlvblN0YXJ0KTsKKyAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291
bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOworICAgIHJl
dHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOwogfQogCiBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3Ry
aW5nLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY29yZUNoZWNraW5nVHlwZXMsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCkBAIC0xMTEwLDggKzExMDksOCBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZQogICAgIG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3Rl
ZENhbmRpZGF0ZXMgPSBzZWxlY3Rpb247CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBh
cmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0
KSB9KTsKLSAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VC
b3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
bi52aXNpYmxlRW5kKCkpIH0pOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChz
ZWxlY3Rpb25TdGFydCksIHNlbGVjdGlvblN0YXJ0KSk7CisgICAgYXV0byBzZWxlY3Rpb25MZW5n
dGggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpKSk7CiAgICAgYXV0byBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVS
ZXF1ZXN0ID0gZnJhbWUtPmVkaXRvcigpLmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3Qo
KTsKICAgICBTdHJpbmcgY29udGV4dEZvckNhbmRpZGF0ZVJlcWV1ZXN0ID0gY29udGV4dFJhbmdl
Rm9yQ2FuZGlkYXRlUmVxdWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRl
UmVxdWVzdCkgOiBTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KaW5kZXggYjMyMDlkYjdlYmU0NDM5YmIzNjZmMGZhNTgyNjEzMDExNWU5M2Rm
YS4uYjU2ZjYyMTk3N2E5OWFjMjlmNDlhMTBjYzQxMzAwMmExZmEyN2QzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05Myw2ICs5Myw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lk
Z2V0Lmg+CkBAIC04MzcsNyArODM4LDcgQEAgLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29u
dmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFcKICAgICBp
ZiAoIXBhcmFncmFwaFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8g
c2NvcGVFbmQgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQt
PmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkuZW5kOworICAgIGF1dG8gc2NvcGVF
bmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5j
b250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOwogICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBo
U3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSkpOwogfQogCkBAIC0xNDc5LDcgKzE0
ODAsNyBAQCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZm
aW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaQogCiAgICAgYXV0byBjb3JlQ2xvc2VUeXBp
bmcgPSBjbG9zZVR5cGluZyA/IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
IDogRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObzsKICAgICBhdXRvIGNvcmVV
c2VyVHJpZ2dlcmVkID0gdXNlclRyaWdnZXJlZCA/IFVzZXJUcmlnZ2VyZWQgOiBOb3RVc2VyVHJp
Z2dlcmVkOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5n
ZSksIGNvcmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dlcmVkKTsK
KyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShj
b3JlKHJhbmdlKSksIGNvcmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJp
Z2dlcmVkKTsKICAgICBpZiAoIWNsb3NlVHlwaW5nKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5l
bnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGlu
ZygpOwogfQpAQCAtMTU0MCwxMiArMTU0MSwyMCBAQCAtIChOU1N0cmluZyAqKXdvcmRJblJhbmdl
OihET01SYW5nZSAqKXJhbmdlCiAKIC0gKGludCl3b3JkT2Zmc2V0SW5SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewotICAgIHJldHVybiBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkT2Zmc2V0
SW5SYW5nZShjb3JlKHJhbmdlKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgYXV0byBzZWxlY3Rpb24gPSBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkpCisgICAgICAgIHJldHVybiAtMTsK
KworICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgb25seSB3b3JrIGluIGNhc2VzIHdoZXJlIHRoZSBz
ZWxlY3Rpb24gcmVtYWlucyBpbiB0aGUgc2FtZSBub2RlIGFmdGVyIGl0IGlzIGV4cGFuZGVkLgor
ICAgIHJldHVybiBzdGQ6Om1heDxpbnQ+KDAsIHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgLSBjb3JlKHJhbmdlKS0+c3RhcnRPZmZzZXQoKSk7CiB9CiAKIC0gKEJP
T0wpc3BhY2VGb2xsb3dzV29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1
cm4gY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc3BhY2VGb2xsb3dzV29yZEluUmFuZ2UoY29yZShy
YW5nZSkpOworICAgIHJldHVybiByYW5nZSAmJiBpc1NwYWNlT3JOZXdsaW5lKFdlYkNvcmU6OlZp
c2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFrZVNpbXBsZVJhbmdl
KGNvcmUocmFuZ2UpKS0+ZW5kKSkuY2hhcmFjdGVyQWZ0ZXIoKSk7CiB9CiAKIC0gKE5TQXJyYXkg
Kil3b3Jkc0luQ3VycmVudFBhcmFncmFwaApAQCAtMTg3MSw3ICsxODgwLDcgQEAgLSAoTlNTdHJp
bmcgKilzdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogLSAodm9pZClfcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wp
c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0
eWxlOihCT09MKW1hdGNoU3R5bGUKIHsKICAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBE
T01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKKyAg
ICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0
UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOm1hdGNoU3R5
bGVdOwogfQogCkBAIC0xOTU0LDcgKzE5NjMsNyBAQCAtIChCT09MKWhhc1JpY2hseUVkaXRhYmxl
U2VsZWN0aW9uCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxh
Y2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7CiAgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
RE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7Cisg
ICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFn
bWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVj
dFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwog
fQogCkBAIC0yMjYzLDcgKzIyNzIsOCBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNX
aXRoUHJpbnRTY2FsZUZhY3RvcjooZmxvYXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChE
T01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAq
KXRleHQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxp
dmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKSwgdGV4dCkucHRyKCkpOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIHJldHVybiByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
dGV4dCkucHRyKCkpIDogbmlsOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3Vt
ZW50RnJhZ21lbnRGb3JXZWJBcmNoaXZlOihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDNhNWJiMDRiYzM0Yjgx
NmI5OWRjZTMzZGQ3MzA2NWVlYjY0ZTU0ODYuLmExODU2OGVmNWI1ZGY4YTBhZDlhNGNlNGMyYjZj
ZWY2N2M0ODVlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KQEAgLTE5NSw2ICsxOTUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50RmFj
dG9yeU1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmll
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KQEAgLTc5MjksOCArNzkzMCw3
IEBAIC0gKERPTVJhbmdlICopRE9NUmFuZ2VPZlN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVs
YXRpdmVUbzooRE9NUmFuZ2UgKilwcmV2aW91CiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPnJh
bmdlT2ZTdHJpbmcoc3RyaW5nLCBjb3JlKHByZXZpb3VzUmFuZ2UpLCBjb3JlT3B0aW9ucyhvcHRp
b25zKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPnJhbmdlT2ZTdHJp
bmcoc3RyaW5nLCBtYWtlU2ltcGxlUmFuZ2UoY29yZShwcmV2aW91c1JhbmdlKSksIGNvcmVPcHRp
b25zKG9wdGlvbnMpKSk7CiB9CiAKIC0gKHZvaWQpc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeToo
Qk9PTCltYWluRnJhbWVEb2N1bWVudFJlYWR5CkBAIC04NDU2LDcgKzg0NTYsNyBAQCAtICh2b2lk
KXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZQogICAgICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
Y29yZShyYW5nZSksIGNvcmUoc2VsZWN0aW9uQWZmaW5pdHkpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSwgY29y
ZShzZWxlY3Rpb25BZmZpbml0eSksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405251</attachid>
            <date>2020-07-26 10:17:11 -0700</date>
            <delta_ts>2020-07-29 12:35:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200726101710.patch</filename>
            <type>text/plain</type>
            <size>246695</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3ODc1ZWI3NWJhMjRl
NmI2NGU0MDUyNjlmNTA1YjU5YjRiMDYzYS4uMTdlYTBkYjcyZWFiOWQ5ZWI5N2M2ZGVhODg4Zjk5
ZGQyNzZhMTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgcGx1Z2luRWxl
bWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdCgpIHNob3VsZCBzdXBwb3J0IFZNSW5xdWlyeSBy
ZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IDIyNDA0MjQzMDc2ZGU0YWQzMDllZjlkZDA1M2I5NzEzNmFkNzFkYTIuLmJlYjcy
MTJjNzUzMTc2NjgwM2FhYWVlYzY5ZTI5NGIyNmI4MDAxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODMsNiArODMsNyBAQAogI2lu
Y2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0
YWNobWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKQEAgLTE2NiwxMCArMTY3LDEwIEBAIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
CiBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0OjpBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3Rh
cnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CisgICAgICAgIG1fcmVwbGFjZWRS
YW5nZS5zdGFydEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7CiAgICAg
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgICAgICBtX3JlcGxhY2VkVGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBp
bmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIG1fcmVwbGFjZWRSYW5nZS5l
bmRJbmRleC5zY29wZSk7CisgICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXgudmFs
dWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBtX3Jl
cGxhY2VkUmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG1fcmVwbGFjZWRSYW5nZS5lbmRJbmRleCA9IG1fcmVwbGFjZWRSYW5nZS5zdGFydEluZGV4Owog
ICAgIH0KQEAgLTE5ODUsMTIgKzE5ODYsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2Jq
ZWN0Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UKICAg
ICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBv
c2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwog
Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07Ci0gICAg
aWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmICghc2VhcmNo
UmFuZ2UgfHwgc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byB0YXJnZXRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHNlYXJj
aFJhbmdlLnN0YXJ0LCBvcmlnaW5hbFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKLSAgICByZXR1cm4gZmluZENsb3Nl
c3RQbGFpblRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwor
ICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS0+c3Rh
cnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4
dCgqc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCiBzdGF0
aWMgYm9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKQEAgLTI4ODAsMTggKzI4ODEs
MTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgQVgKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOwotICAgIGlmICghYm91bmRhcnkp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShvYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KHBvaW50KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5kYXJ5
LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZz
ZXRGb3JSYW5nZSgqcmFuZ2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogewot
ICAgIGF1dG8gYm91bmRhcnkgPSBtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9p
bnQpOwotICAgIGlmICghYm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9pbnQpKTsKKyAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0cnVlKTsKKyAgICByZXR1
cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7CiB9CiAK
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXJzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDk3ZDMwODgzMWIz
N2EyYzM1MTU3MGM1OTUxNzBkMWI4OTJmMmYzZWYuLmQ0YWI1OTM3NTQ1NTI5ZjMzN2VlNDA0Zjc5
YmMzYWU3YjM4YjMzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTcyMSw3ICs3MjIs
NyBAQCBWZWN0b3I8U3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJh
dGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewot
ICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZSh0ZXh0UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCisgICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBT
dHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0UmFuZ2UpOwpAQCAtOTgwLDIxICs5ODEsMTkgQEAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGkKICAgICAgICAgZW5kUG9zID0gdmlzaWJsZVBvczE7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zLCBlbmRQb3Mp
OworICAgIHJldHVybiB7IHN0YXJ0UG9zLCBlbmRQb3MgfTsKIH0KIAogVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHZpc2libGVQb3MsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3Np
dGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gc3RhcnRPZldvcmQodmlzaWJsZVBvcywgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOworICAgIHJldHVybiB7IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQp
IH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc2l0
aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAog
ewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJs
ZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBlbmRPZldvcmQoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0g
c3RhcnRPZldvcmQodmlzaWJsZVBvcywgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICByZXR1
cm4geyBzdGFydCwgZW5kT2ZXb3JkKHN0YXJ0KSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHVwZGF0ZUFYTGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtMTA0NCw4ICsxMDQzLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXMKICAgICB9IGVsc2UKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHVwZGF0ZUFY
TGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKHByZXZWaXNpYmxlUG9zKTsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZE9mTGluZShwcmV2VmlzaWJsZVBvcykgfTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmlnaHRMaW5l
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBj
b25zdApAQCAtMTA3OCwyMyArMTA3NiwyMSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaQogICAg
ICAgICBlbmRQb3NpdGlvbiA9IGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcyk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiB9OwogfQogCiBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogRk8gMiBJTVBMRU1FTlQgKGN1cnJlbnRseSByZXR1cm5zIGluY29ycmVjdCBhbnN3ZXIpCiAg
ICAgLy8gUmVsYXRlZD8gPHJkYXI6Ly9wcm9ibGVtLzM5Mjc3MzY+IFRleHQgc2VsZWN0aW9uIGJy
b2tlbiBpbiA4QTMzNgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRP
ZlNlbnRlbmNlKHZpc2libGVQb3MpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGVuZE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRp
b24gPSBzdGFydE9mU2VudGVuY2UodmlzaWJsZVBvcyk7CisgICAgcmV0dXJuIHsgc3RhcnRQb3Np
dGlvbiwgZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKSB9OwogfQogCiBWaXNpYmxlUG9zaXRp
b25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24pOwot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bik7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9z
KTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRPZlBhcmFncmFwaChzdGFydFBvc2l0
aW9uKSB9OwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKQEAgLTExNDYsOSArMTE0Miw5IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
IGNvbnN0CiB7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0T2ZTdHlsZVJhbmdlKHZpc2libGVQb3MpLCBlbmRP
ZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykpOworICAgIHJldHVybiB7IHN0YXJ0T2ZTdHlsZVJhbmdl
KHZpc2libGVQb3MpLCBlbmRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcykgfTsKIH0KIAogLy8gTk9U
RTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCkBAIC0x
MTU2LDEyICsxMTUyLDExIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhCiB7CiAgICAgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7
CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
c3RhcnQpOwogICAgIHN0YXJ0UG9zaXRpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5n
ZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRQb3NpdGlv
biwgdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpIH07
CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZv
clBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTEx
ODMsOSArMTE3OCw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4CiAKIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdAogewotICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIHJldHVybiB7IHN0YXJ0T2ZMaW5lKHZpc2libGVQb3NpdGlvbiksIGVuZE9mTGlu
ZSh2aXNpYmxlUG9zaXRpb24pIH07CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVw
bGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKQpAQCAtMTI3MSwxNSAr
MTI2NCwxMiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmIHZpc2libGVQb3NpdGlvblJhbmdlKQogewotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7Ci0gICAgaWYgKCFzdGFydCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2li
bGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0gICAgaWYgKCFlbmQpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7CisgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFu
Y2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwg
bm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIg
aW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8v
IEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxpc3QgbWFya2VyIHRleHQuCkBAIC0x
Mjk4LDE2ICsxMjg4LDEzIEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nCiB7CiAgICAgLy8gRklY
TUU6IE11bHRpLWJ5dGUgc3VwcG9ydAogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90IHJldHVybiAwPwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVu
ZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90
IHJldHVybiAwPwogCiAgICAgLy8gRklYTUU6IFVzZSBjaGFyYWN0ZXJDb3VudCBpbnN0ZWFkIG9m
IHdyaXRpbmcgb3VyIG93biBsb29wPwogICAgIGludCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAgICAgIGxlbmd0aCAr
PSBpdC50ZXh0KCkubGVuZ3RoKCk7CkBAIC0xNDMxLDE2ICsxNDE4LDEzIEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5j
ZSBlbmQuCiAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFlbmQpCisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24p
LCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIC8vIEFuIGVtcHR5IGxpbmUgaXMgY29uc2lkZXJlZCBhIHNlbnRlbmNl
LiBJZiBpdCdzIHNraXBwZWQsIHRoZW4gdGhlIHNlbnRlbmNlIHBhcnNlciB3aWxsIG5vdAogICAg
IC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9u
IG9mIHRoZSBlbXB0eSBsaW5lLgotICAgIHJldHVybiBoYXNBbnlQbGFpblRleHQoeyAqc3RhcnQs
ICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0UG9zaXRpb247Cisg
ICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gZW5kT2ZTZW50ZW5jZShuZXh0UG9z
aXRpb24pIDogbmV4dFBvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTE0NTAsMTUgKzE0MzQsMTIgQEAgVmlzaWJsZVBvc2l0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNv
bnN0IFZpc2libGUKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNl
IHN0YXJ0LgogICAgIGF1dG8gcHJldmlvdXNQb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7
Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKHByZXZpb3Vz
UG9zaXRpb24pKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1
dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsK
LSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzUG9zaXRpb24pLCBlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOworICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUcmVhdCBlbXB0eSBs
aW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCi0gICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7
ICpzdGFydCwgKmVuZCB9KSA/IHN0YXJ0T2ZTZW50ZW5jZShwcmV2aW91c1Bvc2l0aW9uKSA6IHBy
ZXZpb3VzUG9zaXRpb247CisgICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCgqcmFuZ2UpID8gc3Rh
cnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlvdXNQb3NpdGlvbjsKIH0KIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRQYXJhZ3JhcGhFbmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMjAzMSw3ICsy
MDEyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlVGV4dEluUmFuZ2UoY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAgICAvLyBBbHNvIG9ubHkgZG8gdGhp
cyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUuCiAgICAgYXV0byYgZnJhbWUgPSBy
ZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50LnNob3VsZFVzZUlucHV0TWV0aG9k
KCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpLmdldCgpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5n
ZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vt
ZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpObywgRWRpdG9yOjpTbWFydFJl
cGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaAppbmRleCBkYzY1NGZjMmIxMmE0ODczODg0ZjYxYmQ1YjY3MTk1ZWI5Mzk3MzgwLi40NWNk
OGVhOTRmYWQyZGRiOTg4NTdkYTFmNjYxNTU3MTIwZmQ1MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaApAQCAtNDMwLDI0ICs0MzAsNiBAQCBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlWaXNpYmxl
UG9zaXRpb25Gb3JCb3VuZHMgewogICAgIExhc3QsCiB9OwogCi1zdHJ1Y3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGUpCi0gICAgICAgIDogc3RhcnQocykKLSAgICAgICAgLCBlbmQoZSkKLSAgICB7
IH0KLQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKLSAgICAgICAgOiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAgLCBl
bmQoc2VsZWN0aW9uLmVuZCgpKQotICAgIHsgfQotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCk7IH0KLX07Ci0KIGVudW0gY2xh
c3MgQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlIHsgU3Vic2NyaXB0LCBTdXBlcnNj
cmlwdCB9OwogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlw
ZSB7IFByZVN1YnNjcmlwdCwgUHJlU3VwZXJzY3JpcHQsIFBvc3RTdWJzY3JpcHQsIFBvc3RTdXBl
cnNjcmlwdCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYjRiYTBkODc4MjNjZDJmODAy
Mzg5MDcxNzVhMmQ5MWEwMWFiOGU3Li40NDg2MmFiNmEyZWJiZjI3YThlYWY1ZWM0NmQ3MDU4ZDNh
MzFjYWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTY0OSwxMiArNjQ5LDkgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0
eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkUmVuZGVyZXIgJiYg
Zmlyc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkgJiYgbGFzdENoaWxkUmVuZGVyZXIgJiYgbGFzdENo
aWxkUmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGRlZmluZSB0aGUg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgZm9yIHRoZSByYW5nZSBhcyB0aGUgb25lcyByaWdodCBi
ZWZvcmUgYW5kIGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGFuZCB0aGUgbGFz
dCBub2RlcyBpbiB0aGUgRE9NIHRyZWUgdGhhdCBpcyB3cmFwcGVkIGluc2lkZSB0aGUgYW5vbnlt
b3VzIGJsb2NrLgotICAgICAgICAgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluQmxvY2sgPSBmaXJz
dENoaWxkUmVuZGVyZXItPm5vZGUoKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZmlyc3ROb2RlSW5CbG9jayk7Ci0g
ICAgICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKGxhc3RDaGlsZFJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgICAgICAgICAgbm9k
ZURvY3VtZW50ID0gJmZpcnN0Tm9kZUluQmxvY2stPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4dFJhbmdlID0geyB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9IH07CisgICAgICAgICAgICAgICAgYXV0byYg
Zmlyc3ROb2RlSW5CbG9jayA9ICpmaXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay5kb2N1bWVudCgpOworICAg
ICAgICAgICAgICAgIHRleHRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZSgmZmlyc3ROb2RlSW5CbG9jayksIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTkxNyw3ICs5MTQsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojps
aW5rQ2xpY2tQb2ludCgpCiAgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24geyBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OwogICAgICAgICBhdXRv
IGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwogICAgICAgICBpZiAoIWVuZC5pc051
bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSkuY2VudGVyKCkg
fTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsK
IH0KQEAgLTkzNSw5ICs5MzIsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjbGlja1BvaW50KCkKICAgICBpZiAoIWlzV2ViQXJlYSgpIHx8ICFjYW5TZXRWYWx1ZUF0dHJp
YnV0ZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgp
OwogICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSkuY2VudGVyKCk7
CisgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbigpKS5j
ZW50ZXIoKTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdApAQCAtMTk5MCw3ICsxOTg1LDYg
QEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAgICAgCi0gICAgLy8gY29uc3RydWN0IFZpc2li
bGVQb3NpdGlvbnMgZm9yIHN0YXJ0IGFuZCBlbmQKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJl
ci0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7CkBAIC0yMDA4LDcgKzIwMDIsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAg
ICAgICAgICBlbmRQb3MgPSBzdGFydFBvczsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFy
dFBvcyksIFdURk1vdmUoZW5kUG9zKSB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWdu
ZWQgbGluZUNvdW50KSBjb25zdApAQCAtMjAzOCw3ICsyMDMyLDcgQEAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JM
aW5lKHVuc2kKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlz
aWJsZVBvcykpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25FeHRlbmQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQsIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5KTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0
aW9uLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGlvbigpOwogfQogICAgIAog
VmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGludCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0YzU0ZDFhYWQzMWRkMC4u
MmExNmY3MGM3ZDI5NWFmNDZhNTg3OTkzMTdkNGRlNTI5OTcyNGUzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY2LDYgKzY2LDcgQEAKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW1wb3J0ICJQbHVnaW5WaWV3QmFz
ZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlcklubGluZS5oIgogI2ltcG9y
dCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKQEAgLTE4NTAs
NyArMTg1MSw3IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuCiAgICAgaWYgKCF0ZXh0TWFya2Vy
UmFuZ2UpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRP
ZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9u
Rm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAgIHJl
dHVybiB7IHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRl
eHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNh
Y2hlLCB0ZXh0TWFya2VyUmFuZ2UpIH07CiB9CiAKIC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENo
aWxkcmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZDc0MmU3MTlkODUwYzcyZTc5OTFm
ZjU3NGYyZjM5ODQzYjgzYTFkLi5iNjVmZTljMzkwNjM0NTMyNDk1ZDU2MDJjZmRjNTZkMmVlYjYz
MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgog
I2luY2x1ZGUgIlF1aXJrcy5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA2OWU1YTliYTY5
MTQ2NmI2MTBhZjllZGJiMzQwMjhjMzkxNDQxMjFjLi5jNTY2MGZjYmVjMWU2ZWViYmU4NWY1NzNj
NDRmODQyNDc3MzNkZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUwZS4uN2EyMGE1
ZjM5MDY2NmUyMjYyZGMxYTQ1ODVjOTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiUmFkaW9C
dXR0b25Hcm91cHMuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0NTNlYjY4NTEy
MGNiNDdkZTUzOTU1OS4uZDMxMjI1NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2EzNTFiNmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdl
IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdjZTgxYmJjMjE3
MGUzODVmY2FjZGUwYzZhMjU5Li5kYmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZkY2FjZTdhOGFm
MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBv
ZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgaWYgKCFwb2lu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpwb2ludCwg
KnBvaW50IH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHBvaW50KQoreworICAgIGlmICghcG9pbnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7CisgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpwb2ludCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisKIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQogewogICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKQEAgLTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0KIAorUmVmUHRy
PE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFp
bmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAppbmRleCAwY2UwYmExOGU0ZGM3ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0Li5mYTZhZjU0
NGIzNzEzMjU3ODYxYzgyNTJiMGFlNWY4YmFjYmYxNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaApAQCAtNTEsMTMgKzUxLDMzIEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBtYWtlU2ltcGxl
UmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25z
dCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5k
YXJ5UG9pbnRIZWxwZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpIHsgcmV0dXJuIHBvaW50
OyB9CitpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBlcihCb3VuZGFy
eVBvaW50JiYgcG9pbnQpIHsgcmV0dXJuIFdURk1vdmUocG9pbnQpOyB9Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBhdXRvIG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4gZGVj
bHR5cGUobWFrZUJvdW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSkpCit7Cisg
ICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHN0ZDo6Zm9yd2FyZDxUPihhcmd1bWVudCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5nZShUJiYgLi4u
YXJndW1lbnRzKSAtPiBkZWNsdHlwZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRI
ZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKSkKK3sKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKHN0ZDo6Zm9yd2FyZDxUPihhcmd1
bWVudHMpKS4uLik7Cit9CisKIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRvIGhhdmUgc2hv
cnRlciBuYW1lczsgYW5vdGhlciBvcHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0byBtYWtlU2lt
cGxlUmFuZ2UuCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3MgSW50ZXJzZWN0
aW5nTm9kZVJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXggOGE0ODQzYjFk
MjYyZmRjYmVlM2M3OTAyMjAxMGY2YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0
YzcyY2NiMDM3YzZhZGQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCkBAIC0yNyw3
ICsyNyw2IEBACiAjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUgIkNvbnRhaW5l
ck5vZGUuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMw
ZTYwZTcxMzE0My4uODc4MWJkMTAwNzgyOTA0YTQxMGFmZTFhY2VhNWY5NzZjZjI4ZTNkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwCkBAIC00NzQsMTUgKzQ3NCwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAg
IGlmIChlbmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJh
bmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBzdHJpbmcgPSBw
bGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24s
IGVuZE9mU2VsZWN0aW9uKTsKKyAgICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJhbmdlKQorICAg
ICAgICByZXR1cm47CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNF
ZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZl
IGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNw
YWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0
IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0g
ICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5n
Rm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCku
YWRkTWFya2VyKCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0
ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJr
ZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCkBAIC01MDAsMTAgKzUwMiwxMSBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygp
OwotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtl
Qm91bmRhcnlQb2ludChiZWZvcmVQcmVjZWRpbmdDaGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5h
dGl2ZS5zdGFydCB9OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZl
LnN0YXJ0KS5wcmV2aW91cygpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCk7CisgICAgaWYg
KCFwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Zm9yIChhdXRvJiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJh
Y3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgeworICAg
IGZvciAoYXV0byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAg
ICAgICAgIGlmIChtYXJrZXItPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0
YjA5NTRlMDIxZTRlZC4uMGU1NGQzMGNkMjliYjEzYjAzNDFlMDUzYzk2MTE1NTJjNjQ3YjQ3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0
NiwxMyArMjQ2LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShF
ZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNjb3BlU3Rh
cnQgPSBCb3VuZGFyeVBvaW50IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5
UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91
bmRhcnlQb2ludCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KHsgc2NvcGVTdGFydCwgKnN0YXJ0Qm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAgYXV0byBlbmRJ
bmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwg
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwor
ICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgcmFuZ2Ut
PnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9z
aXRpb25zKTsKKyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0
LCByYW5nZS0+ZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVTdGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFy
YWdyYXBoU3RhcnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM3
MWM3OWYyN2Q5ZGMzZGVmNzg1NjBmZjAwZWIzNjQ1Y2RjZjI5NzUuLjI5MDU0ZjhkOTFmZWI1YmIw
ZGU0Mjk5MzQ3ZWFlZjM1ZGViZWZjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSW5z
ZXJ0VGV4dENvbW1hbmQuaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEz
MSw3ICsxMzAsNyBAQCBzdGF0aWMgU3RyaW5nIHN0cmluZ0ZvclZpc2libGVQb3NpdGlvbkluZGV4
UmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uSW5kZXhSYW5nZQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5k
ZXgocmFuZ2Uuc3RhcnRJbmRleC52YWx1ZSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZS5nZXQoKSk7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdl
LmVuZEluZGV4LnZhbHVlLCByYW5nZS5lbmRJbmRleC5zY29wZS5nZXQoKSk7Ci0gICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2li
bGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoeyBXVEZNb3ZlKHN0YXJ0KSwgV1RG
TW92ZShlbmQpIH0pOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVVuZG9SZXBsYWNlZFRleHQ6
OnRleHREZWxldGVkQnlVbmFwcGx5KCkKQEAgLTE0MjAsMTggKzE0MTksMTQgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBz
dGFydE9mUGFyYWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7
CiAgICAgICAgICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1
dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAg
ICAgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxl
U3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0YXJ0KQotICAgICAg
ICAgICAgICAgICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3Rh
cnQsICpzZWxlY3Rpb25TdGFydCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2VUb1Nl
bGVjdGlvblN0YXJ0ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZp
c2libGVTdGFydCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJD
b3VudCgqcmFuZ2VUb1NlbGVjdGlvblN0YXJ0LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNC
ZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGVuZEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAgICAg
ICAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOwotICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQot
ICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFw
aFN0YXJ0LCAqc2VsZWN0aW9uRW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRv
U2VsZWN0aW9uRW5kID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZp
c2libGVFbmQpKQorICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50
KCpyYW5nZVRvU2VsZWN0aW9uRW5kLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0xNDQ0LDE3ICsxNDM5LDE1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgUG9zaXRp
b24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0
cmVhbSgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVp
dmFsZW50KCkudXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBi
ZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3Np
dGlvbnMiCi0gICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gZW5k
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3Rh
cnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBs
aWFudC5kZXByZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKKyAgICAvLyBzdGFydCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkg
dG8gY3JlYXRlIGEgcmFuZ2Ugc2luY2UgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIi4KKyAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpLCBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGlu
IHRoZSBwYXJhZ3JhcGggdG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3Vn
aCwgc2luY2UgbW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRoaXMgdXNlZCB0
byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29uZnVzZWQgc29t
ZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3Vh
bEFwcGVhcmFuY2UocmFuZ2UuZ2V0KCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6
Ok5vLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmluZygpKTsKKyAgICAg
ICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFs
aXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoKnJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJp
bmcoKSk7CiAKICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3
aGVuIHdlIGNvcHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5n
IGlmIHdlJ3JlIGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFw
aCBjYW4gaGF2ZSBzdHlsZQpAQCAtMTUwNCw3ICsxNDk3LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXAKICAgICBpZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRv
Y3VtZW50KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7
IHsgKmVkaXRhYmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIGF1dG8gZGVz
dGluYXRpb25JbmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAwIH0sICpt
YWtlQm91bmRhcnlQb2ludChkZXN0aW5hdGlvbikgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0
ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkpOwog
ICAgIEFTU0VSVChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg3
MGM0ZGJiNjhkMzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMuLmY2NWRmNDQ5Njg3ZDNmNTMz
Mjk1N2ZmODQ4MTRmZGM3ZWY3ODZiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGE3
ODdkZmFhZjFjNTEyODk2ZjZlN2JiMTc2NWVhMzQ4M2RkMTUyODQuLmRkZTUyNTAxMzM4M2NhYTdm
NjFlYWViNTNlOTk1YjcyMjFlYTE1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApA
QCAtMTEwNCwyNyArMTEwNCwyMSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAg
ICAgc2NvcGUgPSAmZG9jdW1lbnQ7CiAgICAgfQogCi0gICAgYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKLSAgICBpZiAoIXN0
YXJ0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWVuZCkKKyAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUu
Z2V0KCkpLCBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAq
c3RhcnQsICplbmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVy
YXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogLy8g
RklYTUU6IE1lcmdlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRv
IHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gZW5kID0gbWFrZUJv
dW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFu
Z2UoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVu
ZCB9LCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
cik7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2Vy
dmF0aW9uID8gVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMgOiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggN2I1ZTJlZWNhNDNlZWU1MjFkODYwYzQ4NTZhYWI3MWJmZGFiOGFiMC4uNDI5NDA0ZmVmNDAx
OWVkYTFmODdiOTA3ZjA0MmJiMGJjOTBhN2I5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtNjk2LDcgKzY5Niw4IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYm
IGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKLSAgICAgICAgU3RyaW5nIHRl
eHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShj
b21tYW5kLT52aXNpYmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOworICAgICAgICBhdXRv
IHNlbGVjdGlvbiA9IGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKTsK
KyAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZShzZWxlY3Rpb24pOwogICAgICAgICByZXBsYWNlZFRleHQucG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNo
ZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KQEAgLTcy
NSw3ICs3MjYsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNlbGVjdFJl
cGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0FjdGlvbik7
CisgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5
bGU6OlllcywgZWRpdGluZ0FjdGlvbik7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQpAQCAtMjEyMCw4ICsyMTIxLDcgQEAgdm9pZCBFZGl0b3I6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
VW5kZXJsaW4KIAogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zm
c2V0ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBlbmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVu
ZCksIGV4dGVudE9mZnNldCk7Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2Rl
LCBlbmQpOwotICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6Tm8pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHsgeyB7ICpiYXNlTm9kZSwgc3RhcnQgfSwgeyAqYmFzZU5vZGUsIGVu
ZCB9IH0gfSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpO
byk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyOTUsNyArMzI5NSw3IEBAIFN0cmluZyBFZGl0
b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKICAg
ICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwg
c3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCiAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBwbGFpblRleHQoU2ltcGxlUmFu
Z2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9
LCBiZWhhdmlvcikucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKTsKKyAgICByZXR1cm4gcGxh
aW5UZXh0KCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCksIGJlaGF2aW9yKS5yZXBsYWNlV2l0
aExpdGVyYWwoJ1wwJywgIiIpOwogfQogCiBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4g
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTM3
MTMsNyArMzcxMyw3IEBAIHN0YXRpYyBTaW1wbGVSYW5nZSBleHRlbmRTZWxlY3Rpb24oY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCB1bnNpZ25lZCBjaGFyYWN0ZXJzCiAgICAgICAgIHN0YXJ0ID0g
c3RhcnQucHJldmlvdXMoQ2hhcmFjdGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFj
dGVyKTsKICAgICB9Ci0gICAgcmV0dXJuIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCl9OworICAgIHJldHVybiAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0
LCBlbmQpOwogfQogCiB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJl
cnMoKQpAQCAtMzkyNyw5ICszOTI3LDcgQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBs
YWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiBTdHJpbmcgRWRpdG9y
OjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rp
b24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gcmFuZ2Ug
PSBzZWxlY3Rpb24uaXNDYXJldCgpCi0gICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0
aW9uLnN0YXJ0KCkpCi0gICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYg
KCFjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCkBAIC0zOTQwLDExICszOTM4
LDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSkpOwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkp
OwotICAgIGlmICghc3RhcnQgfHwgIWVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICByZXR1cm4geyB7ICpzdGFydCwgKmVuZCB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVS
YW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IEVkaXRvcjo6cmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5n
UmVzdWx0JiByZXN1bHQpIGNvbnN0CkBAIC00MjI5LDkgKzQyMjMsOCBAQCB2b2lkIEVkaXRvcjo6
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlk
YXRlKQogICAgIH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJl
cGxhY2VtZW50LCBudWxscHRyKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gaW5zZXJ0ZWRDYW5kaWRh
dGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5k
YXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQubGVuZ3RoKCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChpbnNl
cnRlZENhbmRpZGF0ZVJhbmdlKQotICAgICAgICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqaW5zZXJ0ZWRDYW5k
aWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2NlcHRlZENh
bmRpZGF0ZS5yZXBsYWNlbWVudCk7CisgICAgaWYgKGF1dG8gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5n
ZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVu
Z3RoKCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKQorICAgICAgICBpbnNlcnRlZENh
bmRpZGF0ZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcigqaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2Fu
ZGlkYXRlLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CiAKICAgICBtX2lzSGFuZGxp
bmdBY2NlcHRlZENhbmRpZGF0ZSA9IGZhbHNlOwogfQpAQCAtNDI2Miw3ICs0MjU1LDcgQEAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiAgICAg
Ly8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1
ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8gV2hvZXZlciB3cm90ZSB0aGlzIGNvZGUgb3JpZ2lu
YWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhlIHJhdGlvbmFs
ZS4KICAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewot
ICAgICAgICBpZiAoYXV0byBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRh
ZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLT5zdGFy
dC5jb250YWluZXIsIHJhbmdlLT5lbmQuY29udGFpbmVyKS5nZXQoKSksIEhUTUxOYW1lczo6YVRh
ZykpIHsKKyAgICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqcmFu
Z2UpLmdldCgpKSwgSFRNTE5hbWVzOjphVGFnKSkgewogICAgICAgICAgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWlu
ZXIucHRyKCkpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkgPj0g
MCkKICAgICAgICAgICAgICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGVDb250ZW50cygqZW5jbG9zaW5nQW5jaG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0
NTIyOTEwZTY1YzZhOTEzYy4uYTFkMTk0MzZmNjZlYTJkZDZmZTllMzQ2ODgxNDk5MjZhN2QxOGI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xODIsMTAg
KzE4Miw4IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUm
IGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAgaWYgKCFuZXdSYW5nZSB8fCBu
ZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGFm
ZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5j
bGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdSYW5nZSwg
YWZmaW5pdHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCks
IGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2Up
CisgICAgICAgICYmIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKm5ld1Jhbmdl
LCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogfQog
CiBzdGF0aWMgVHJpU3RhdGUgc3RhdGVTdHlsZShGcmFtZSYgZnJhbWUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgY29uc3QgY2hhciogZGVzaXJlZFZhbHVlKQpAQCAtMzU0LDkgKzM1Miw3IEBA
IHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5n
ZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMpOwotICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwotICAgICAgICBpZiAo
IXNlbGVjdGVkKQorICAgICAgICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9u
UmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVsZXRlKCk7
CkBAIC0xMDU2LDggKzEwNTIsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQ
QUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdl
cygqbWFyaywgKnNlbGVjdGlvbikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxl
Y3Rpb24pLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RXb3JkKEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQpAQCAtMTU3MSw3ICsxNTY2
LDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQq
KQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgpIHx8
ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5k
OjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpKS5nZXQoKSk7CisgICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9y
bWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5m
aXJzdFJhbmdlKCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVtZW50LT5sb2NhbE5h
bWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApp
bmRleCBlNDM2YzdmZGUyMWRiYjIwMzRiNTljNWI5NTI4OWZhM2NmZWQ3MGE5Li5iZjUyZTBjMDQ0
YjdjYWMzMWYxNDlkNGEyNjM0Mjk1YjEyYzI0ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNjgsMTQgKzY3LDE0IEBAIHZvaWQgRm9y
bWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQsCiAgICAgUmVmUHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkg
OiBzcGxpdFRyZWVUb05vZGUoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksICpub2RlVG9TcGxpdFRv
KTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24gPSBvdXRlckJs
b2NrOwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnQs
IGVuZE9mU2VsZWN0aW9uKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0
LCBlbmRPZlNlbGVjdGlvbik7CiAgICAgRWxlbWVudCogcmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoZW5kKTsKICAgICBFbGVtZW50KiByb290ID0gZWRpdGFibGVSb290Rm9yUG9z
aXRpb24oc3RhcnQpOwogICAgIC8vIFJvb3QgaXMgbnVsbCBmb3IgZWxlbWVudHMgd2l0aCBjb250
ZW50ZWRpdGFibGU9ZmFsc2UuCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1l
KCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwg
cmFuZ2UuZ2V0KCkpKQorICAgICAgICAmJiAoZW5kID09IGVuZE9mQmxvY2soZW5kKSB8fCAocmFu
Z2UgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwgKnJhbmdlKSkpCiAg
ICAgICAgICYmIHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9vdC0+aXNEZXNjZW5kYW50T2YoKnJlZk5v
ZGUpKSB7CiAgICAgICAgIC8vIEFscmVhZHkgaW4gYSBibG9jayBlbGVtZW50IHRoYXQgb25seSBj
b250YWlucyB0aGUgY3VycmVudCBwYXJhZ3JhcGgKICAgICAgICAgaWYgKHJlZk5vZGUtPmhhc1Rh
Z05hbWUodGFnTmFtZSgpKSkKQEAgLTk5LDIzICs5OCwyMiBAQCB2b2lkIEZvcm1hdEJsb2NrQ29t
bWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kLAogICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGxhc3RQYXJhZ3JhcGhJbkJsb2Nr
Tm9kZSk7CiB9CiAgICAgCi1FbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JG
b3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2UqIHJhbmdlKQorRWxlbWVudCogRm9ybWF0QmxvY2tDb21t
YW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRh
aW5lcigpOwotICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0
QmxvY2soY29tbW9uQW5jZXN0b3IpKQorICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25J
bmNsdXNpdmVBbmNlc3RvcigqcmFuZ2UpOworICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAh
aXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0b3IuZ2V0KCkpKQogICAgICAgICBj
b21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJlbnROb2RlKCk7Ci0KLSAgICBpZiAo
IWNvbW1vbkFuY2VzdG9yKQorICAgIGlmICghaXM8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
YXV0byByb290RWRpdGFibGVFbGVtZW50ID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogICAgIGlmICghcm9vdEVkaXRhYmxlRWxlbWVudCB8fCBjb21tb25B
bmNlc3Rvci0+Y29udGFpbnMocm9vdEVkaXRhYmxlRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkgPyBk
b3duY2FzdDxFbGVtZW50Pihjb21tb25BbmNlc3RvcikgOiBudWxscHRyOworICAgIHJldHVybiAm
ZG93bmNhc3Q8RWxlbWVudD4oKmNvbW1vbkFuY2VzdG9yKTsKIH0KIAogYm9vbCBpc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKaW5kZXggNzliZWRhZDE3ZTBlNjRjODI1
ODIwMTZkNTJlOWI5ZTk2ZjI0MjFjNy4uZGEyYWQ1MDRiYzEwNTM3OTg0NGU3Y2FhNTAyNTA2ZDE1
MTE2Mjc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0Nv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5o
CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHByZXNlcnZlc1R5cGlu
Z1N0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RhdGljIEVs
ZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2UqKTsKKyAgICBzdGF0aWMg
RWxlbWVudCogZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKTsKICAgICBib29sIGRpZEFwcGx5KCkgY29uc3QgeyByZXR1cm4gbV9kaWRBcHBs
eTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAppbmRleCA0YTYzYWQ4MGM1MWUxMTc2ZTRiOTg0MjE1NzQyYTQ5MDBhYjU3YzQ3Li4wYTJkNGZj
MzdlODI5NzgxMjVmMzQ4NDkwMGFkMDM0YzdhYTZkNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjA1LDEyICsyMDUsNiBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBF
VXNlclRyaWdnZQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcywgYWZmaW5p
dHksIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNv
bnN0IFJhbmdlKiByYW5nZSkKLXsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHJh
bmdlID8gVmlzaWJsZVNlbGVjdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5k
UG9zaXRpb24oKSkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbik7Ci19Ci0KIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAm
YmFzZSwgY29uc3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRy
aWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGly
ZWN0aW9uID0gdHJ1ZTsKQEAgLTIwMzQsMTEgKzIwMjgsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2VsZWN0QWxsKCkKICAgICB9CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlw
aW5nIGNsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQorYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3NlVHlwaW5n
LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkgPT0gJnJhbmdlLT5lbmRDb250YWluZXIoKS5kb2N1bWVudCgpKTsKKworICAgIGlm
IChyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpICE9IHJhbmdlLT5lbmQuY29udGFpbmVyLnB0
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbigqcmFuZ2UsIGFmZmluaXR5KTsKIApAQCAtMjYxOCwzNCArMjYxNCw2IEBAIFVDaGFy
IEZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3QKICAg
ICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckFmdGVyKCk7CiB9CiAKLWludCBGcmFt
ZVNlbGVjdGlvbjo6d29yZE9mZnNldEluUmFuZ2UoY29uc3QgUmFuZ2UgKnJhbmdlKSBjb25zdAot
ewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJl
dCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG9ubHkg
d29yayBpbiBjYXNlcyB3aGVyZSB0aGUgc2VsZWN0aW9uIHJlbWFpbnMgaW4KLSAgICAvLyB0aGUg
c2FtZSBub2RlIGFmdGVyIGl0IGlzIGV4cGFuZGVkLiBJbXByb3ZlIHRvIGhhbmRsZSBtb3JlIGNv
bXBsaWNhdGVkCi0gICAgLy8gY2FzZXMuCi0gICAgaW50IHJlc3VsdCA9IHNlbGVjdGlvbi5zdGFy
dCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKLSAg
ICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1ib29sIEZyYW1lU2VsZWN0aW9uOjpzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25z
dCBSYW5nZSAqcmFuZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIE5vZGUmIG5vZGUgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7Ci0gICAgaW50
IGVuZE9mZnNldCA9IHJhbmdlLT5lbmRPZmZzZXQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9z
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgZW5kT2Zmc2V0KSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7Ci0gICAgcmV0dXJuIGlzU3BhY2VPck5ld2xpbmUocG9zLmNoYXJhY3RlckFm
dGVyKCkpOwotfQotCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdERvY3VtZW50U3Rh
cnQoKSBjb25zdAogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rp
b247CkBAIC0yNjYwLDE1ICsyNjI4LDYgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
QXREb2N1bWVudFN0YXJ0KCkgY29uc3QKICAgICByZXR1cm4gaXNTdGFydE9mRG9jdW1lbnQocG9z
KTsKIH0KIAotYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkg
Y29uc3QKLXsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwot
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBhY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoc2VsZWN0aW9uKTsKLX0KLQog
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAogewogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CkBAIC0yODM0LDkgKzI3
OTMsMTIgQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXMKICAgICByZXR1cm4gVmlzaWJsZVNlbGVj
dGlvbihzdGFydFZpc2libGVQb3MsIGVuZFZpc2libGVQb3MpOyAgICAKIH0KIAotYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbCkgY29uc3QKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0U2Vu
dGVuY2VTdGFydCgpIGNvbnN0CiB7Ci0gICAgUG9zaXRpb24gc3RhcnRQb3Moc2VsLnN0YXJ0KCkp
OworICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUG9zaXRpb24gc3RhcnRQb3MobV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnRQb3MuZGVwcmVj
YXRlZE5vZGUoKSwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBkYTQyZTBmZmFj
Y2VlMWRlNWRlN2ZiYTIyZTllOWZkODkwMzQ2YTJkLi5lZGQ0YmFhODI4N2Q4MTFiZjNkODE0NWU5
YzlmYjJlYjZhYzMwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJTY3JvbGxBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlZp
c2libGVTZWxlY3Rpb24uaCIKQEAgLTE0NCw3ICsxNDMsNiBAQCBwdWJsaWM6CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KSBjb25zdDsKICAgICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG8oY29uc3QgUmFu
Z2UqKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3Jv
bGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAgICAgdm9pZCBtb3ZlVG8oY29u
c3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJl
ZCk7CkBAIC0xNTUsNyArMTUzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8U2V0U2VsZWN0
aW9uT3B0aW9uPiA9IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFYVGV4dFN0YXRlQ2hh
bmdlSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSwgQ3Vyc29yQWxpZ25PblNjcm9s
bCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgVGV4dEdyYW51bGFyaXR5ID0gVGV4dEdy
YW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICBlbnVtIGNsYXNzIFNob3Vs
ZENsb3NlVHlwaW5nIDogYm9vbCB7IE5vLCBZZXMgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBF
VXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFQWZmaW5p
dHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwpAQCAt
MjMyLDggKzIzMCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0
ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJCZWZvcmVDYXJldFNlbGVjdGlvbigpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rpb24oKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBpbnQgd29yZE9mZnNldEluUmFuZ2UoY29uc3QgUmFu
Z2UqKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNwYWNlRm9sbG93c1dvcmRJblJh
bmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rp
b25BdERvY3VtZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVj
dGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2Vs
ZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsKQEAgLTMzMyw3ICszMjksNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJikgY29uc3Q7CiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggZjgyZjM5NWNhNTJiZDc2MDJlZmVjYjc2ZmUzZDBhYjM5YTAzMjYwYi4u
NjllN2UzMGU2NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTIwNyw3
ICsyMDcsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVudC0+dGV4dCgpKTsKKyAgICAg
ICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4
dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcAppbmRleCA4MzI4NTZmNmIyZmZhMjNhNWIzNzM5NDdhNjBjNzAwNDkyNTM4NDk4Li4xNWVm
NDgyMTZlZWJhNzNkNWYwZjMxZDEyNDg5MGRmOWY1YmU4M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgpAQCAtMTU4LDEzICsxNTksMTAgQEAgUmVmPFJhbmdlPiBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OnN1YnJhbmdlKENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAogCiBFeGNl
cHRpb25Pcjx1aW50NjRfdD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoIXN0YXJ0
KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoUmFuZ2UoKS5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2lu
dChwb3NpdGlvbik7Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBU
eXBlRXJyb3IgfTsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7
CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSk7CiB9CiAKIGJvb2wgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKQEAgLTIxMCwyNiArMjA4LDE3IEBAIHVpbnQ2
NF90IFRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5ndGgoKSBjb25zdAogCiB1aW50
NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKSBj
b25zdAogewotICAgIGlmIChtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQpCi0gICAgICAgIHJl
dHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwotCi0gICAgYXV0byBzdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBp
ZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFy
eVBvaW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAg
ICBpZiAoIWVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBtX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50U3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKKyAgICBpZiAoIW1f
YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCkgeworICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1Jl
cGxhY2VtZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgIG1fYXV0b21hdGljUmVw
bGFjZW1lbnRTdGFydCA9IHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlKSA6IDA7CisgICAg
fQogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwogfQogCiB1aW50NjRf
dCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29u
c3QKIHsKLSAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKLSAgICAgICAgcmV0
dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwotCi0gICAgbV9hdXRvbWF0aWNSZXBs
YWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSk7CisgICAgaWYgKCFtX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKQorICAgICAgICBtX2F1
dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlKTsKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggYjMxZGFjNWRhNzk0NjBmNzllOTBkYmU2NDlhNjA2OWUyZDQ1
NmYwOS4uNmRiZmQ4NTE5ZWViZTM0NDU2NDEzNzgxYjM4ZGU3N2FjNzg3Yjg3MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgotI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMTQ2LDcgKzE0NSw3IEBA
IHN0YXRpYyBib29sIGlzVG9rZW5EZWxpbWl0ZXIoVUNoYXIgY2hhcmFjdGVyKQogY2xhc3MgUGFy
YWdyYXBoQ29udGVudEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBQYXJhZ3JhcGhDb250ZW50SXRl
cmF0b3IoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgICAg
ICA6IG1faXRlcmF0b3IoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5
UG9pbnQoZW5kKSB9LCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQorICAgICAg
ICA6IG1faXRlcmF0b3IoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSwgVGV4dEl0ZXJhdG9y
SWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKICAgICAgICAgLCBtX25vZGUoc3RhcnQuZmlyc3ROb2Rl
KCkpCiAgICAgICAgICwgbV9wYXN0RW5kTm9kZShlbmQuZmlyc3ROb2RlKCkpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYWY1ZWIxYjdlNmM0MWVk
MTBkNGE2YzhkMDNhNWFlZTQzYTA3M2JhYi4uZDAxNTEwMmE2MDlmZmFlZDI2MTJhZjJlNzljM2I5
ZmVkZDVmMTlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC0zMzIsOCArMzMyLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uRm9yRGVsZXRpb24oY29uc3QgVmlzaWJsZVNlbGUKICAgICAgICAgcmV0dXJu
OwogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGVEZWxl
dGUsIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNl
bGVjdGlvbiksIHNlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb25JbmRleFJh
bmdlIHJhbmdlOwotICAgIHJhbmdlLnN0YXJ0SW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgcmFuZ2Uuc3RhcnRJbmRleC5zY29wZSk7Ci0gICAg
cmFuZ2UuZW5kSW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24u
ZW5kKCksIHJhbmdlLmVuZEluZGV4LnNjb3BlKTsKKyAgICByYW5nZS5zdGFydEluZGV4LnZhbHVl
ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCByYW5n
ZS5zdGFydEluZGV4LnNjb3BlKTsKKyAgICByYW5nZS5lbmRJbmRleC52YWx1ZSA9IGluZGV4Rm9y
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi52aXNpYmxlRW5kKCksIHJhbmdlLmVuZEluZGV4LnNj
b3BlKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmFuZ2Up
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXgg
ZGYzZWFmZGQ1ZTk4MGUyNDI3ZTJhMWI3OThhZDQwZGRlODc5OTlmNC4uMDE2OGViODE4MTQyZDNm
NDY5OWY1NWVhMGZmOGIyMmFhZGI2Mzc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmNwcApAQCAtODQ5LDYgKzg0OSwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpbwogICAgIHJldHVybiBzdHJlYW07CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtl
U2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHJhbmdlKQoreworICAgIHJl
dHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Cit9CisKIH0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCBmODRiY2RmZDcyZjViYzQ1NzYz
M2RhNDgzMjcyMWU1Mjc3YTI0ODUxLi45MWVkNGNjMGYzNDQ4MzQ3NTIyZDVkMTI2YWU0OWYzZTJj
MDFlMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTMy
LDYgKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsKIAorc3RydWN0
IFNpbXBsZVJhbmdlOworCiAvLyBWaXNpYmxlUG9zaXRpb24gZGVmYXVsdCBhZmZpbml0eSBpcyBk
b3duc3RyZWFtIGJlY2F1c2UKIC8vIHRoZSBjYWxsZXJzIGRvIG5vdCByZWFsbHkgY2FyZSAodGhl
eSBqdXN0IHdhbnQgdGhlCiAvLyBkZWVwIHBvc2l0aW9uIHdpdGhvdXQgcmVnYXJkIHRvIGxpbmUg
cG9zaXRpb24pLCBhbmQgdGhpcwpAQCAtMTQwLDYgKzE0MiwxNSBAQCBib29sIGFyZVZpc2libGVQ
b3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlz
aWJsZVBvcwogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVB
ZmZpbml0eSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKK3N0cnVjdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSB7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OworICAgIFZpc2libGVQ
b3NpdGlvbiBlbmQ7CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0Lmlz
TnVsbCgpIHx8IGVuZC5pc051bGwoKTsgfQorfTsKKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VTaW1wbGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpOworCiAvLyBpbmxpbmVz
CiAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBpZ25vcmUgYWZmaW5pdHkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCAwNGY4ODRiNzIwNWU5Mzkz
YWE5OWM3ZDdiNGViYjk2YmM0ZjNmODgwLi45ZGJhZDEwZjg2NGEwZjQzZmUyNDBmOWIwMDFmZjYy
MmVlMmJiN2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMTM2LDcgKzEzNSw3IEBAIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKICAgICBQb3NpdGlvbiBl
bmQgPSBtX2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIFNpbXBsZVJhbmdl
IHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfQogCiBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdApA
QCAtMTc5LDE4ICsxNzgsMTMgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rp
b246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlv
bnMocywgZSkgPiAwKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJl
Zm9yZSB0aGUgZW5kLgogICAgICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUg
dGhlIHN0YXJ0IGlmIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVj
dGVkLgotICAgICAgICAgICAgUG9zaXRpb24gdG1wID0gczsKLSAgICAgICAgICAgIHMgPSBlOwot
ICAgICAgICAgICAgZSA9IHRtcDsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChzLCBlKTsKICAgICAg
ICAgfQogICAgICAgICBzID0gcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICAgICAg
ZSA9IGUucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgfQogCi0gICAgaWYgKHMuaXNO
dWxsKCkgfHwgZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzKSwgKm1ha2VCb3VuZGFy
eVBvaW50KGUpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzLCBlKTsKIH0KIAogYm9v
bCBWaXNpYmxlU2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKQEAgLTIwNCwxNCArMTk4LDEwIEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlv
bjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAK
IHN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwotICAgIGF1dG8gc2NvcGUgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dChub2RlKTsKKyAgICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFzY29wZSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRp
b24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghc3RhcnQpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzdGFydCksIG1ha2VCb3VuZGFy
eVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNjb3BlKSB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1w
bGVSYW5nZShwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgbWFrZUJvdW5kYXJ5
UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2NvcGUpKTsKIH0KIAogYm9vbCBWaXNpYmxlU2VsZWN0
aW9uOjppc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggM2Y4ODJlMTlkNDE5YmZh
OGQ1ZWRlYWU1OTI4NmY2YWFkZGUyMjc3ZS4uODc2ZGUxODY5NTQzYzUyNGVkZGM0NjUzNzg4NWY5
MTRkNzgzZWY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgK
QEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIGlzUmFuZ2UoKSA/IChp
c0Jhc2VGaXJzdCgpID8gVVBTVFJFQU0gOiBET1dOU1RSRUFNKSA6IGFmZmluaXR5KCkpOyB9CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFeHRlbnQoKSBjb25zdCB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb24obV9leHRlbnQsIGlzUmFuZ2UoKSA/IChpc0Jhc2VGaXJzdCgpID8gRE9XTlNUUkVB
TSA6IFVQU1RSRUFNKSA6IGFmZmluaXR5KCkpOyB9CiAKKyAgICBvcGVyYXRvciBWaXNpYmxlUG9z
aXRpb25SYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHsgdmlzaWJsZVN0YXJ0KCksIHZpc2libGVFbmQo
KSB9OyB9CisKICAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUo
KSA9PSBOb1NlbGVjdGlvbjsgfQogICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHNl
bGVjdGlvblR5cGUoKSA9PSBDYXJldFNlbGVjdGlvbjsgfQogICAgIGJvb2wgaXNSYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IDEyZDRjYWMzNmI4NDkwNDlmNmUy
NDQyZTc2MzYxMTNiNjU0YjU3YjcuLmE4MDdmNTYzZTZlZDIwZWRlMDdhNzBkNDRjYzFhZTVjMjcy
MDQwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE4MzMs
MTEgKzE4MzMsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFQKICAgICB9CiB9CiAKLVJlZlB0
cjxSYW5nZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdnAsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFRoaXMgaXMg
cGFydGljdWxhcmx5IGluZWZmaWNpZW50LiAgV2UgY291bGQgZWFzaWx5IG9idGFpbiB0aGUgYW5z
d2VyIHdpdGggdGhlIGJvdW5kYXJpZXMgY29tcHV0ZWQgYmVsb3cuCiAgICAgaWYgKCF3aXRoaW5U
ZXh0VW5pdE9mR3JhbnVsYXJpdHkodnAsIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2Qm91bmRhcnk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3Vu
ZGFyeTsKQEAgLTE4ODksMjUgKzE4ODksMjMgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCiAgICAgaWYgKHByZXZCb3VuZGFyeS5pc051bGwoKSB8fCBuZXh0Qm91bmRhcnku
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgaWYgKHZwIDwgcHJldkJvdW5kYXJ5IHx8IHZwID4gbmV4dEJvdW5kYXJ5
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5
KTsKIH0KIAogc3RkOjpwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIGlmIChh
LmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBh
IDwgYgotICAgICAgICA/IC1jaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwg
Km1ha2VCb3VuZGFyeVBvaW50KGIpIH0pCi0gICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQoYiksICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKKyAgICByZXR1cm4g
YSA8IGIgPyAtY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShhLCBiKSkgOiBjaGFyYWN0
ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGIsIGEpKTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJv
dW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25l
QWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpAQCAtMTkzNCw3
ICsxOTMyLDcgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB9CiAKICAgICBpZiAoc3Rh
cnRQb3NpdGlvbiAhPSBlbmRQb3NpdGlvbikgewotICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3Ry
aW5nID0gcGxhaW5UZXh0KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcp
OworICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KCptYWtlU2ltcGxl
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwg
JyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNoYXJhY3RlclN0cmluZy5sZW5ndGgoKSAtIDEs
IGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4IDwgbWF4Q2hhcmFjdGVyczsgLS1pKSB7CiAgICAg
ICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAg
ICAgICBpbmRleCsrOwpAQCAtMTk0Niw1MyArMTk0NCwzOCBAQCB2b2lkIGNoYXJhY3RlcnNBcm91
bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVB
ZnRlcgogICAgIHR3b0JlZm9yZSA9IGNoYXJhY3RlcnNbMl07CiB9CiAKLVJlZlB0cjxSYW5nZT4g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitP
cHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBjb3VsZCBiZSBpbiBh
IG5vbiB2aXNpYmxlIGVsZW1lbnQgYW5kIHdlIGRvbid0IGhhdmUgYSBWaXNpYmxlUG9zaXRpb24u
CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkJhY2t3YXJkKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlm
ICghcmFuZ2UpIHsKLSAgICAgICAgLy8gV2UgY291bGQgYmUgYXQgdGhlIHN0YXJ0IG9mIGEgd29y
ZCwgdHJ5IGZvcndhcmQuCi0gICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2UpCisgICAgaWYg
KGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRH
cmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkKICAgICAgICAgcmV0dXJu
IHJhbmdlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9u
OwogICAgIGRvIHsKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3Vu
ZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRH
cmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgfSB3aGlsZSAo
Y3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShj
dXJyZW50UG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkKSk7Ci0KICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIGN1cnJlbnRQb3NpdGlv
biwgcG9zaXRpb24pOwotICAgICAgICBBU1NFUlQocmFuZ2UpOwotICAgIH0KLQotICAgIHJldHVy
biByYW5nZTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGN1cnJlbnRQb3NpdGlvbiwgcG9z
aXRpb24pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIHJlc3VsdDsKLQotICAgIC8vIG1vdmUgdGhlIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhl
IHdvcmQKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFu
dWxhcml0eTo6TGluZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7
CiAgICAgICAgIC8vIERvbid0IGNyb3NzIGxpbmUgYm91bmRhcmllcy4KICAgICAgICAgcmVzdWx0
ID0gcG9zaXRpb247CiAgICAgfSBlbHNlIGlmICh3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBsaWVzIHdpdGhpbiBh
IHdvcmQuCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLQotICAgICAgICByZXN1bHQgPSB3b3Jk
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblBvc2l0
aW9ucyhwb3NpdGlvbiwgcmVzdWx0KSA+IDEpCi0gICAgICAgICAgICByZXN1bHQgPSB3b3JkUmFu
Z2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KTsKKyAg
ICAgICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkg
PiAxKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bih3b3JkUmFuZ2UtPmVuZCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0Qm91bmRhcnlP
ZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpIHsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9u
IGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgogICAgICAgICByZXN1bHQgPSBwb3NpdGlvbjsKQEAg
LTIwMDgsNyArMTk5MSw3IEBAIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9y
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVj
dGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBu
dW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikK
K09wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rp
b25BdFdvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBv
c2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDI0LDEwICsyMDA3
LDEwIEBAIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9u
QXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQgJiYgIWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZCwg
VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9y
d2FyZCkpCiAgICAgICAgIGVuZCA9IGVuZE9mV29yZChlbmQpLmRlZXBFcXVpdmFsZW50KCk7CiAK
LSAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBtYWtlU2ltcGxl
UmFuZ2Uoc3RhcnQsIGVuZCk7CiB9ICAgIAogCi1SZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRB
cm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
LCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
cmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCkKIHsKICAgICBQ
b3NpdGlvbiBzdGFydCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24g
ZW5kID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKQEAgLTIwMzUsOCArMjAxOCw3IEBAIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zCiAgICAgICAgIHN0YXJ0ID0gc3RhcnQucHJldmlvdXMoQ2hh
cmFjdGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKICAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZVJhbmdlKHN0YXJ0LCBlbmQpOwogfQogCiBzdGQ6OnBhaXI8VmlzaWJsZVBvc2l0aW9uLCBXaXRo
aW5Xb3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGlu
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMjA0Nyw5ICsyMDI5LDkgQEAg
c3RkOjpwYWlyPFZpc2libGVQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRh
cnlGb3JQb3NpdGlvbldpdGhvdXRDcm8KICAgICBpZiAod2l0aGluVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICBhdXRvIGFkanVzdGVkUG9zaXRpb24gPSBw
b3NpdGlvbjsKICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRP
ZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgewotICAgICAgICAgICAgYWRqdXN0ZWRQb3Np
dGlvbiA9IHdvcmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgICAgICAgICAgYWRqdXN0ZWRQ
b3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KTsK
ICAgICAgICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRpb24sIGFkanVz
dGVkUG9zaXRpb24pID4gMSkKLSAgICAgICAgICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gd29y
ZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGFkanVzdGVkUG9zaXRpb24g
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB7IGFkanVzdGVkUG9zaXRpb24sIFdpdGhpbldvcmRCb3VuZGFyeTo6
WWVzIH07CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggMWE3
ODMyZWIzN2I4MTk5NWI5MWIxMDMwZTk0YjE1NGE0M2Q2MzBkYi4uNDJlNjM3ODk1ZWVjNzliZDhj
MjJiNmRjNzg5NTQ3YTJiOGE5YWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5oCkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09S
RV9FWFBPUlQgYm9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwot
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb24pOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXJp
dHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnB0cmRpZmZfdCBk
aXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFy
eUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pOwogV0VCQ09SRV9F
WFBPUlQgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVm
b3JlKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBv
c2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGludCBudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZCk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhw
YW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0
aW9uKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVk
QXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51
bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQs
IFNlbGVjdGlvbkRpcmVjdGlvbik7CiBlbnVtIGNsYXNzIFdpdGhpbldvcmRCb3VuZGFyeSA6IGJv
b2wgeyBObywgWWVzIH07CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8VmlzaWJsZVBvc2l0aW9u
LCBXaXRoaW5Xb3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3Nz
aW5nTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDIzNmEzYWI0N2FhODU4Y2NlNjE2Y2Qx
YjM1MTFlYmU0ZDI5NGUwZGEuLjE0ZmE2ODgyYzY3MzZjNzNmZDYzNDQwOGZlY2Q3OGE0MmRiYWE2
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0K
QEAgLTczLDcgKzczLDcgQEAgc3RhdGljIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gZGV0ZWN0SXRl
bShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdAogICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBTdHJpbmcgZnVsbFBsYWluVGV4
dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UpOwotICAgIENGSW5kZXggaGl0TG9jYXRp
b24gPSBjaGFyYWN0ZXJDb3VudCh7IGNvbnRleHRSYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKSB9KTsKKyAgICBDRkluZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291
bnQoKm1ha2VTaW1wbGVSYW5nZShjb250ZXh0UmFuZ2Uuc3RhcnQsIHBvc2l0aW9uKSk7CiAKICAg
ICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3Rh
bmRhcmQsIDAsIG51bGxwdHIpKTsKICAgICBhdXRvIHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2Fu
UXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRT
dHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4
dFN0cmluZy5sZW5ndGgoKSkpKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBPcHRpb25hbDxEZXRlY3Rl
ZEl0ZW0+IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0
IEhpdFRlcwogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uOwotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBjb250ZXh0UmFuZ2U7CiAKICAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25G
b3JQb2ludChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CkBAIC0yNzIsMTYg
KzI3MiwxNCBAQCBzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoRWxlbWVu
dCYgZWxlbWVudCkKICAgICBlbGVtZW50UGFyZW50LT5yZW1vdmVDaGlsZChlbGVtZW50KTsKIH0K
IAotc3RhdGljIGJvb2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKE5vZGUm
IHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTm9kZSwgYm9vbCYgZGlkTW9kaWZ5RE9NKQorc3RhdGljIGJv
b2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKE5vZGUmIHN0YXJ0Tm9kZSwg
Tm9kZSYgZW5kTm9kZSkKIHsKLSAgICBkaWRNb2RpZnlET00gPSBmYWxzZTsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSAmc3RhcnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
bm9kZSkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKICAg
ICAgICAgICAgIGF1dG8mIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50Pigqbm9k
ZSk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYW5jaG9yLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oeF9hcHBsZV9kYXRhX2RldGVjdG9yc0F0dHIpLCAi
dHJ1ZSIpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmVtb3Zl
UmVzdWx0TGlua3NGcm9tQW5jaG9yKGFuY2hvcik7Ci0gICAgICAgICAgICBkaWRNb2RpZnlET00g
PSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZSA9PSAmZW5kTm9k
ZSkgewpAQCAtMjkxLDcgKzI4OSw2IEBAIHN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmlu
Z0V4aXN0aW5nRERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsCiAgICAgICAg
ICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGFuY2hvci5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNBdHRyKSwgInRydWUiKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmVtb3Zl
UmVzdWx0TGlua3NGcm9tQW5jaG9yKGFuY2hvcik7Ci0gICAgICAgICAgICAgICAgZGlkTW9kaWZ5
RE9NID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpAQCAtNTUzLDI5ICs1NTAsMTIgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0
ZWN0Q29udGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZSwgRGEKICAg
ICAgICAgaWYgKHJlc3VsdFJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCi0gICAgICAgIC8vIFN0b3JlIHRoZSByYW5nZSBib3VuZGFyaWVzIGFzIFBvc2l0
aW9uLCBiZWNhdXNlIHRoZSBET00gY291bGQgY2hhbmdlIGlmIHdlIGZpbmQKLSAgICAgICAgLy8g
b2xkIGRhdGEgZGV0ZWN0b3IgbGluay4KLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxQb3NpdGlv
biwgUG9zaXRpb24+PiByYW5nZUJvdW5kYXJpZXM7Ci0gICAgICAgIHJhbmdlQm91bmRhcmllcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlc3VsdFJhbmdlcy5zaXplKCkpOwotICAgICAgICBmb3Ig
KGF1dG8mIHJhbmdlIDogcmVzdWx0UmFuZ2VzKQotICAgICAgICAgICAgcmFuZ2VCb3VuZGFyaWVz
LnVuY2hlY2tlZEFwcGVuZCh7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFy
dCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpIH0pOwotCiAgICAgICAg
IE5TU3RyaW5nICppZGVudGlmaWVyID0gZGF0YURldGVjdG9yU3RyaW5nRm9yUGF0aChpbmRleFBh
dGhzW3Jlc3VsdEluZGV4XS5nZXQoKSk7CiAgICAgICAgIE5TU3RyaW5nICpjb3JyZXNwb25kaW5n
VVJMID0gY29uc3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KGNvcmVSZXN1bHQsIGlkZW50aWZpZXIs
IHJlZmVyZW5jZURhdGUsIChOU1RpbWVab25lICopdHouZ2V0KCksIHR5cGVzKTsKLSAgICAgICAg
Ym9vbCBkaWRNb2RpZnlET00gPSBmYWxzZTsKIAotICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdV
UkwgfHwgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5m
aXJzdCgpLnN0YXJ0LmNvbnRhaW5lciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVy
LCBkaWRNb2RpZnlET00pKQorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNo
Rm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5maXJzdCgpLnN0YXJ0
LmNvbnRhaW5lciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVyKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGRpZE1vZGlmeURPTSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIERPTSB3YXMgbW9kaWZpZWQgYmVjYXVzZSBzb21lIG9sZCBsaW5r
cyB3ZXJlIHJlbW92ZWQsCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlY3JlYXRlIHRoZSBy
YW5nZXMgYmVjYXVzZSB0aGV5IGNvdWxkIG5vIGxvbmdlciBiZSB2YWxpZC4KLSAgICAgICAgICAg
IEFTU0VSVChyZXN1bHRSYW5nZXMuc2l6ZSgpID09IHJhbmdlQm91bmRhcmllcy5zaXplKCkpOwot
ICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnNocmluaygwKTsgLy8gS2VlcCBjYXBhY2l0eSBhcyB3
ZSBhcmUgZ29pbmcgdG8gcmVwb3B1bGF0ZSB0aGUgVmVjdG9yIHJpZ2h0IGF3YXkgd2l0aCB0aGUg
c2FtZSBudW1iZXIgb2YgaXRlbXMuCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlQm91bmRh
cnkgOiByYW5nZUJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnVuY2hl
Y2tlZEFwcGVuZCh7ICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LmZpcnN0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KHJhbmdlQm91bmRhcnkuc2Vjb25kKSB9KTsKLSAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHF1ZXJ5UmFuZ2UuZW5k
OwogICAgICAgICBCT09MIHNob3VsZFVzZUxpZ2h0TGlua3MgPSBzb2Z0TGlua19EYXRhRGV0ZWN0
b3JzQ29yZV9ERFNob3VsZFVzZUxpZ2h0TGlua3NGb3JSZXN1bHQoY29yZVJlc3VsdCwgW2luZGV4
UGF0aHNbcmVzdWx0SW5kZXhdIGxlbmd0aF0gPiAxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IGJjY2IwZjAwODI3YjllYTQ0
NzQ5ZjcwZDlkNDVkODZiZDA5YTUzNmMuLjNjMTIzMTlmYWIwODY3NTk1OWU1M2NkOGU3OWFiMzQz
ZDExYTdiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25h
cnlMb29rdXAubW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJS
YW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3Iu
aCIKICNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjc5LDE1ICsyNzgsMTUgQEAgT3B0
aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5
TG9va3VwOjpyYW5nZUZvclNlbGUKICAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNOdWxsKCkgfHwg
cGFyYWdyYXBoRW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
U3RhcnQpIH0pOwotICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJD
b3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQ
b2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9
IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlv
blN0YXJ0KSk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNv
dW50KCptYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpOwogICAg
IE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAg
ICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsKKyAg
ICBhdXRvIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHBhcmFncmFwaEVuZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVs
bENoYXJhY3RlclJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhb
YWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFu
Z2U6cmFuZ2VUb1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAotICAgIHJldHVybiB7IHsg
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdl
KSwgbmlsIH0gfTsKKyAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShmdWxsQ2hh
cmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKIAogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKIApAQCAtMzI4LDI5ICszMjcsMjMgQEAgT3B0aW9uYWw8c3RkOjp0dXBs
ZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGUKICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgp
OwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJv
dW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAg
ICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFw
aChzZWxlY3Rpb25FbmQpKTsKLSAgICAgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCB8fCAhcGFyYWdy
YXBoRW5kKQorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVu
ZCkpOworICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0geyB7ICpwYXJh
Z3JhcGhTdGFydCwgKnBhcmFncmFwaEVuZCB9IH07Ci0gICAgICAgIHNlbGVjdGlvblJhbmdlID0g
TlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICptYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSksCi0gICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb25FbmQpIH0pKTsKLSAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpw
YXJhZ3JhcGhTdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAg
c2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJh
bmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnQsIHNlbGVjdGlvblN0YXJ0KSksCisgICAgICAg
ICAgICBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpKSk7CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1w
bGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBwb3NpdGlvbikpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVS
dWxlcyB7IHBvc2l0aW9uIH07CiAgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVs
ZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0
eSk7CiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5z
dGFydCgpOwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUw
IGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAg
YXV0byBleHBhbmRlZFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0
ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWV4cGFuZGVkUmFuZ2UpCi0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9
IHsgKmV4cGFuZGVkUmFuZ2UgfTsKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VF
eHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwogCiAgICAg
ICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAg
IGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCAq
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOworICAgICAgICBoaXRJbmRleCA9IGNoYXJh
Y3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgcG9z
aXRpb24pKTsKICAgICB9CiAKICAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxl
Y3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpA
W1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOm5pbF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bQppbmRleCBlZWZlOGZkOTUxY2NmYTRlYjY2MTgyN2Q1OGU2OWVhNTliNTg2YjdiLi5iMWYxYTg2
NTVkYmRhMjUxYjA5Y2NkZWZjNTI2MDg2NGQzNDFjYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTk0LDEwICs5NCwxMiBAQCB2b2lkIEVkaXRv
cjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVu
dCwgVmVjdG9yPFN0cgogICAgIG91dFR5cGVzLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
Y29jb2FUeXBlKCkpOwogICAgIG91dERhdGEuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhIHsg
ZWxlbWVudC5kb2N1bWVudCgpLm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSB9
LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAotICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lX
ZWJBcmNoaXZlOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSkuZ2V0KCkpKSB7
Ci0gICAgICAgIGlmIChhdXRvIHdlYkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJl
c2VudGF0aW9uKCkpIHsKLSAgICAgICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJv
YXJkVHlwZSk7Ci0gICAgICAgICAgICBvdXREYXRhLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0
ZSh3ZWJBcmNoaXZlRGF0YS5nZXQoKSkpOworICAgIGlmIChlbGVtZW50UmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgqZWxlbWVudFJh
bmdlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBhcmNoaXZlLT5y
YXdEYXRhUmVwcmVzZW50YXRpb24oKSkgeworICAgICAgICAgICAgICAgIG91dFR5cGVzLmFwcGVu
ZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CisgICAgICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQo
U2hhcmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggNTFhZTIzNDBjZTM3OTNlNzEx
Y2E4ZmQyZDk3NTQ4NDI4OTIyOTEzOC4uMzRhYTdhYmYzM2Y3NDRkZTA3ZDhlOTllNmQ1ZDNmNWVj
NDIwZTJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250
ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJD
b250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIK
ICNpbXBvcnQgIlB1YmxpY1VSTE1hbmFnZXIuaCIKICNpbXBvcnQgIlF1aXJrcy5oIgorI2ltcG9y
dCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgpAQCAt
NjY4LDcgKzY2OSw3IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25z
dCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVM
aXZlUmFuZ2UoY29udGV4dCksIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddKSk7CisgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0
LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOwogCiAgICAg
bWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCmlu
ZGV4IGQ2MDlmMjJjODRmMGNmNzk4MDBhYTkzZDRiMjBiZjgyZDQ4MDI1MjMuLjdjYjY1OTRmYWQ3
OGFmODkwMzJmZGQ1ZGU4NmY4ZGE0NTVmZTFmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJv
b2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAg
ICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRk
RnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCks
IHRleHQpKTsKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQs
IHRleHQpKTsKIAogICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOwogICAgIHJl
dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0
aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25D
b21tYW5kSU9TLmNwcAppbmRleCA4YWM3Njk0MDIwOTM1MGZmNDNhZWMxNDRkMzNhZDYxNjAxMjZl
NDM1Li5lYzgwYmJhYzg0N2I5NzQwNWJlYjU1NTljYzJhNTEwZDQxNzA4YTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCiAjaW5jbHVkZSAiU21hcnRSZXBsYWNlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9s
aWJ3cGUvRWRpdG9yTGliV1BFLmNwcAppbmRleCAwYjdjMjYyNTNhMDA4MmUzYzU0YWVlZmVhMDYx
NjMyNGU2MjQ4YzdhLi45ZGQ0MWQ2MzY2NTEyZmQzODU5MzdhNzYwOGJkM2ZjOWI1YjkwZjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAg
LTU1LDcgKzU1LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0eXBlcy5j
b250YWlucygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAgY2hvc2VQbGFp
blRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxh
aW47Y2hhcnNldD11dGYtOCIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQocmFuZ2UsIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04
IikpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNGYyNzJlZWU4
MTM4MTQwYzliMzY1Y2EyMTE3M2Y2YjM0MDk0ZjIxZi4uODc2MTIwYmIwOWIxMmUwOWU0ZGVjYTU4
ZTU1NGQzMDI3MDFlZjQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC04NiwxNiArODYsMTQgQEAgT3B0aW9uYWw8
c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCk7CiAKICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJy
b3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBh
dXRvIHBhcmFncmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVj
dGlvbkVuZCkpOwotICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAg
ICBhdXRvIHBhcmFncmFwaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uU3RhcnQpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICBpZiAo
IXBhcmFncmFwaFJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKLSAgICBhdXRv
IHBhcmFncmFwaFJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3Jh
cGhFbmQgfTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKIAogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9
IG5pbDsKLSAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSksIGNoYXJhY3Rl
clJhbmdlKHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKKyAgICB0
b2tlblJhbmdlKHBsYWluVGV4dCgqcGFyYWdyYXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZSgqcGFy
YWdyYXBoUmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlvbnMpOwogCiAgICAgcmV0dXJuIHsg
eyAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucyB9IH07CiB9CkBAIC0xMzMsMTIgKzEzMSwxMSBAQCBP
cHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZQogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBmdWxsQ2hhcmFjdGVyU3RhcnQg
PSBtYWtlQm91bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
OwotICAgIGlmICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJvdW5kYXJ5KQorICAg
IGF1dG8gcmFuZ2VUb1Bvc2l0aW9uID0gbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5n
ZS0+c3RhcnQsIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9Qb3NpdGlvbikKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VS
YW5nZShjaGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVyU3RhcnQsICpwb3NpdGlvbkJvdW5k
YXJ5IH0pLCAwKTsKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFj
dGVyQ291bnQoKnJhbmdlVG9Qb3NpdGlvbiksIDApOwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9u
cyA9IG5pbDsKICAgICBhdXRvIGV4dHJhY3RlZFJhbmdlID0gdG9rZW5SYW5nZShwbGFpblRleHQo
KmZ1bGxDaGFyYWN0ZXJSYW5nZSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCBiYTMxYzE4NzczMjM0YjlhZDkzOWFk
MGQzMzE5MzE4YzYyZDhiM2JkLi5lNzMyNWM1MjRhZmZhYjRjNmE3YWQyMGVjNDJhY2M2MDJmZTdm
NTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC00NSw3ICs0
NSw2IEBACiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRl
Z3kuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2ltcG9ydCAiUmFuZ2UuaCIK
ICNpbXBvcnQgIlJlbmRlckJsb2NrLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9y
dCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
aW5kZXggZDU3NGE0OTc3YTg3YTRiMWQyMWViYzIyODU0NjE0ZjU3YTg5MjdjZC4uYjYwMjUyNWQy
ZDMxNGVjN2MzNWRlYWJlNGQyN2I0MDE1MjVlYTJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcApAQCAtNDUxLDEyICs0NTEsOCBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnJlbmRlcmVkVGV4dFJlc3BlY3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0KQogICAgICAgICAg
ICAgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JCZWhhdmVzQXNJZk5vZGVzRm9sbG93aW5nOwogICAg
IH0KIAotICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsK
LSAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAo
IXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLQotICAgIHJldHVybiBwbGFpblRleHQoeyBXVEZNb3ZlKCpzdGFydEJvdW5kYXJ5KSwg
V1RGTW92ZSgqZW5kQm91bmRhcnkpIH0sIGJlaGF2aW9yKTsKKyAgICBhdXRvIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dCgq
cmFuZ2UsIGJlaGF2aW9yKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4
dCkKQEAgLTkzOCw5ICs5MzQsMTAgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5n
VmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICByZXR1
cm4gYWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiog
bm9kZXMsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIENvbnZlcnRCbG9ja3NUb0lu
bGluZXMgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmVzb2x2ZVVSTHMgdXJsc1RvUmVzbHZlKQor
U3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2Ug
YW5ub3RhdGUsIENvbnZlcnRCbG9ja3NUb0lubGluZXMgY29udmVydEJsb2Nrc1RvSW5saW5lcywg
UmVzb2x2ZVVSTHMgdXJsc1RvUmVzbHZlKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2
aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2Uu
ZW5kUG9zaXRpb24oKSwgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVl
OjpObywKKyAgICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRl
cm5hbChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSwKKyAgICAgICAgbm9kZXMsIHVybHNUb1Jlc2x2
ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywKICAgICAgICAgYW5ub3RhdGUsIGNvbnZlcnRC
bG9ja3NUb0lubGluZXMsIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlOjpLZWVw
LCBNU09MaXN0TW9kZTo6RG9Ob3RQcmVzZXJ2ZSk7CiB9CiAKQEAgLTExMTYsMjAgKzExMTMsMTYg
QEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKiBub2RlKQogICAgIHJldHVybiBpc1RhYlNw
YW5UZXh0Tm9kZShmaXJzdENoaWxkLT5maXJzdENoaWxkKCkpICYmIHNlY29uZENoaWxkLT5pc1Rl
eHROb2RlKCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKGNvbnN0
IFJhbmdlJiBjb250ZXh0KQorc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05ld2xpbmUoY29u
c3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9u
KGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBOb2RlKiBjb250YWluZXIgPSBwb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIWNvbnRhaW5lciB8
fCAhY29udGFpbmVyLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwor
ICAgIGF1dG8gY29udGFpbmVyID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb250ZXh0LnN0YXJ0KSkuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7
CisgICAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXItPnJlbmRlcmVyKCkgJiYgY29udGFp
bmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwogfQogCi1SZWY8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiB0ZXh0KQorUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
LSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKLSAgICBS
ZWY8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwpAQCAtMTE2NSwxNCArMTE1OCwxNCBAQCBSZWY8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogICAgIH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxp
bmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrTm9k
ZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOworICAgIE5vZGUqIGJsb2Nr
Tm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250ZXh0KS0+Zmlyc3ROb2Rl
KCkpOwogICAgIEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVudD4oYmxvY2tOb2RlKTsK
ICAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9ja05vZGUKICAgICAgICAg
JiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdO
YW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAg
ICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb250ZXh0LnN0YXJ0UG9z
aXRpb24oKSk7Ci0gICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2woY29udGV4dC5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJs
ZVJvb3RGb3JQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFy
dCkpOworICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7CiAKICAgICBWZWN0b3I8
U3RyaW5nPiBsaXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7CiAg
ICAgc2l6ZV90IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaApp
bmRleCA4NjU2N2Y0NTc4MGFhYmE1MWIzZWQ4MmEwOWE1MWUyMjAyNmEwMjZiLi5mZmEzMjdlOWVl
Y2U1NWRlNTdmMjQ0Y2U4YjVhYTJmZWVkOGI2NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgK
QEAgLTQ0LDExICs0NCwxMiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xh
c3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUHJlc2VudGF0aW9uU2l6ZTsKIGNsYXNzIFF1
YWxpZmllZE5hbWU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK3N0
cnVjdCBQcmVzZW50YXRpb25TaXplOworc3RydWN0IFNpbXBsZVJhbmdlOworCiB2b2lkIHJlcGxh
Y2VTdWJyZXNvdXJjZVVSTHMoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIEhhc2hNYXA8QXRvbVN0
cmluZywgQXRvbVN0cmluZz4mJik7CiB2b2lkIHJlbW92ZVN1YnJlc291cmNlVVJMQXR0cmlidXRl
cyhSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwgV1RGOjpGdW5jdGlvbjxib29sKGNvbnN0IFVSTCYp
PiBzaG91bGRSZW1vdmVVUkwpOwogCkBAIC01Nyw3ICs1OCw3IEBAIGVudW0gY2xhc3MgTVNPTGlz
dFF1aXJrcyA6IGJvb2wgeyBDaGVja0lmTmVlZGVkLCBEaXNhYmxlZCB9OwogU3RyaW5nIHNhbml0
aXplTWFya3VwKGNvbnN0IFN0cmluZyYsIE1TT0xpc3RRdWlya3MgPSBNU09MaXN0UXVpcmtzOjpE
aXNhYmxlZCwgT3B0aW9uYWw8V1RGOjpGdW5jdGlvbjx2b2lkKERvY3VtZW50RnJhZ21lbnQmKT4+
IGZyYWdtZW50U2FuaXRpemVyID0gV1RGOjpudWxsb3B0KTsKIFN0cmluZyBzYW5pdGl6ZWRNYXJr
dXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIERvY3VtZW50
JiwgTVNPTGlzdFF1aXJrcywgY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1hcmt1cCk7CiAKLVdFQkNP
UkVfRVhQT1JUIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJh
bmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOworV0VCQ09SRV9FWFBPUlQgUmVmPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2Um
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiBXRUJDT1JFX0VYUE9SVCBSZWY8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9
IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVu
dD4+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoRWxlbWVudCYsIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBQYXJzZXJDb250ZW50UG9saWN5KTsKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQoRG9jdW1lbnQmLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSk7CkBAIC03
Miw3ICs3Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVu
dChDb250YWluZXJOb2RlJiwgUmVmPERvY3VtZW50RnJhZ21lCiBlbnVtIGNsYXNzIFJlc29sdmVV
UkxzIDogdWludDhfdCB7IE5vLCBZZXMsIFllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2
YWN5IH07CiBlbnVtIGNsYXNzIENvbnZlcnRCbG9ja3NUb0lubGluZXMgOiB1aW50OF90IHsgTm8s
IFllcyB9OwogZW51bSBjbGFzcyBTZXJpYWxpemVDb21wb3NlZFRyZWUgOiB1aW50OF90IHsgTm8s
IFllcyB9OwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlKGNvbnN0IFJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9j
a3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBS
ZXNvbHZlVVJMczo6Tm8pOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBu
dWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6
Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywg
UmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOwogU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZXNvbHZlVVJMcyA9
IFJlc29sdmVVUkxzOjpObywgU2VyaWFsaXplQ29tcG9zZWRUcmVlID0gU2VyaWFsaXplQ29tcG9z
ZWRUcmVlOjpObywgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyKTsKIAogZW51bSBjbGFzcyBTZXJp
YWxpemVkTm9kZXMgOiB1aW50OF90IHsgU3VidHJlZUluY2x1ZGluZ05vZGUsIFN1YnRyZWVzT2ZD
aGlsZHJlbiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9y
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXgg
OTNkZGVhZjg4ODliOGU3ZmNjMjY5MzQxMjQwODU4Mjg0NDc2YzhkNy4uZGZmMTJjM2I4YmRjYjg5
YTI1NjJhOWE3NjM0ODVhZGQxNjBjYTk5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy93aW4vRWRpdG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9F
ZGl0b3JXaW4uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L21hYy9JbWFn
ZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKaW5kZXggNmQ4MDFhNjE1ZjExNmI0ZDU5NjI3
ZTI4OWFhNjNlZDE2ZjZjZWFlYy4uNTg0ZWM2M2ZiMWJhNzQ4ZTNkZjlhOWM3NjQzZmFlZTdmN2Jl
NDE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29u
dHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCkBAIC0zNSw3ICszNSw2IEBA
CiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xl
Z2FjeVdlYkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVn
YWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXggMDFhYjkxN2QwZGM5NzhjMzFmZWZmN2E5YTA5MGNkMDJi
ZjFkZDhkNi4uNjgzMDMxNjg0MzM1ZDU5NjlkYmNiNDZlMTQ0ZmM5OTkzN2U3NWYxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZEF0
dGFjaG1lbnREYXRhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ1NCwxOSArNDUzLDE2
IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoRnJh
bWUmIGZyYW1lKQogICAgIHJldHVybiBjcmVhdGUobWFpblJlc291cmNlLnJlbGVhc2VOb25OdWxs
KCksIGRvY3VtZW50TG9hZGVyLT5zdWJyZXNvdXJjZXMoKSwgV1RGTW92ZShzdWJmcmFtZUFyY2hp
dmVzKSk7CiB9CiAKLVJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGUoUmFuZ2UqIHJhbmdlKQorUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFy
Y2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5n
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgIGF1dG8mIGRvY3VtZW50
ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVu
dCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKICAgICBhdXRvKiBmcmFtZSA9
IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElz
IHRoYXQgcmlnaHQ/CiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFy
a3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKGRvY3VtZW50KSArIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKCpyYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVy
Y2hhbmdlOjpZZXMpOworICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJp
bmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UocmFuZ2Us
ICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKTsKICAgICByZXR1cm4gY3Jl
YXRlKG1hcmt1cFN0cmluZywgKmZyYW1lLCBub2RlTGlzdCwgbnVsbHB0cik7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaApp
bmRleCBiNTFjZjYxNmJmMDgyZTI5NDA5YjQ0MjFhNDNjYjcxMTE0ODBhOTg5Li42N2FmYTgzZGM3
YTliZjIyZjhlODk2NTFlZTllYzQzOTMyZjA2NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oCkBAIC0zNSw3ICszNSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBOb2RlOwotY2xhc3Mg
UmFuZ2U7CisKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgTGVnYWN5V2ViQXJjaGl2ZSBm
aW5hbCA6IHB1YmxpYyBBcmNoaXZlIHsKIHB1YmxpYzoKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3Jl
YXRlKE5vZGUmLCBXVEY6OkZ1bmN0aW9uPGJvb2woRnJhbWUmKT4mJiBmcmFtZUZpbHRlciA9IHsg
fSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBj
cmVhdGUoRnJhbWUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdl
YkFyY2hpdmU+IGNyZWF0ZUZyb21TZWxlY3Rpb24oRnJhbWUqKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShSYW5nZSopOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKGNvbnN0
IFNpbXBsZVJhbmdlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiByYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCmluZGV4IGRmMTM1YWY0MzlmZDdlNzY0MTc0N2JiNzM2N2M4NmI4ZGM1ZmY3MmMuLjU5ZWE0
ZmJmN2U5ZTU1MmQyOTc3MWJiMjVmMDY1ZGUxMDNjZGIxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRk
UmFuZ2UoUmFuZ2UmIHJhbmdlKQogCiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgc2VsZWN0aW9u
Lm1vdmVUbygmcmFuZ2UpOworICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJh
bmdlIHsgcmFuZ2UgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1Niw3ICszNTYs
NyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBub3JtYWxpemVk
UmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IHJhbmdlIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBy
YW5nZS4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKCZyYW5nZSk7CisgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJhbmdlIH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTM2Niw3ICszNjYsNyBA
QCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAgICAg
cmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAq
bm9ybWFsaXplZFJhbmdlKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewogICAgICAgICAgICAgICAg
IC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdlLgotICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgKm5vcm1hbGl6ZWRS
YW5nZSB9KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHJh
bmdlcyBpbnRlcnNlY3QuCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhub3JtYWxp
emVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVB
TSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOThhYWU4ZDc1
NmQyMmQ4NzA4YmQ3YTYzY2VhZGI3ZWE1YzFlN2QuLjU2NmQ1ZDQ2OTMwOWViOGM2MzM1ZTAyYTJl
YzE3MGIxYzYyMTFhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBA
IC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQ
b3NpdGlvbi5oIgogI2luY2x1ZGUgIlByb21pc2VkQXR0YWNobWVudEluZm8uaCIKKyNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0yMzks
NyArMjQwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRpb24oY29u
c3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGlmICghbV9kcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlcnMuaXNFbXB0eSgpICYmIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSAmJiB0cnlU
b1VwZGF0ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVycyhkcmFnRGF0YSkpIHsKICAgICAgICAgbV9k
cm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMuY2xlYXIoKTsKLSAgICAgICAgbV9kcm9wcGVkSW1hZ2VQ
bGFjZWhvbGRlclJhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgICAgICBtX2RvY3VtZW50VW5kZXJNb3VzZSA9
IG51bGxwdHI7CiAgICAgICAgIGNsZWFyRHJhZ0NhcmV0KCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNjMzLDcgKzYzNCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdE
ZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBhdXRvIGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCk7
CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
dGV4dCk7CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5w
ZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTg1Niw5ICs4NTcsMTAg
QEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogCiBzdGF0aWMgdm9p
ZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLT5zZWxl
Y3ROb2RlKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pKTsK
KyAgICBpZiAoYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAg
ICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVtZW50KSkKKyAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oKnJhbmdlKTsKKyAgICB9
CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhUTUxEcmFnKGNvbnN0IEludFBvaW50
JiBtb3VzZURyYWdnZWRQb2ludCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IElu
dFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wgaXNMaW5rSW1hZ2UpCkBAIC0xMzczLDcgKzEz
NzUsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpkb1N5c3RlbURyYWcoRHJhZ0ltYWdlIGltYWdl
LCBjb25zdCBJbnRQb2ludCYgZHJhZ0xvYywgY29ucwogCiB2b2lkIERyYWdDb250cm9sbGVyOjpy
ZW1vdmVBbGxEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMoKQogewotICAgIG1fZHJvcHBlZEltYWdl
UGxhY2Vob2xkZXJSYW5nZSA9IG51bGxwdHI7CisgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRl
clJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBzdGQ6
OmV4Y2hhbmdlKG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzLCB7IH0pKSB7CiAgICAgICAgIGlm
IChwbGFjZWhvbGRlci0+aXNDb25uZWN0ZWQoKSkKICAgICAgICAgICAgIHBsYWNlaG9sZGVyLT5y
ZW1vdmUoKTsKQEAgLTE0NTUsMTMgKzE0NTcsMTMgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5z
ZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4K
ICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1
bWVudCwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZl
bnROZXN0aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIH0sIEVkaXRB
Y3Rpb246Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwogCi0gICAgYXV0
byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IGNvbW1hbmQtPmluc2VydGVkQ29udGVudFJhbmdlKCk7
CisgICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb21tYW5k
LT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpKTsKICAgICBpZiAoIWluc2VydGVkQ29udGVudFJhbmdl
KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBjb250YWluZXIgPSBtYWtlUmVmUHRyKGluc2VydGVkQ29udGVudFJhbmdl
LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKKyAgICBhdXRvIGNvbnRhaW5lciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKCppbnNlcnRlZENvbnRlbnRSYW5nZSk7CiAgICAgaWYgKCFpczxD
b250YWluZXJOb2RlPihjb250YWluZXIpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47CkBAIC0xNDY5LDcgKzE0NzEsNyBAQCB2b2lkIERyYWdDb250cm9s
bGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3RvcjxJ
bnRTaXplPgogCiAgICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gcGxhY2Vob2xkZXJz
OwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBkZXNjZW5kYW50c09mVHlwZTxIVE1MSW1h
Z2VFbGVtZW50Pihkb3duY2FzdDxDb250YWluZXJOb2RlPigqY29udGFpbmVyKSkpIHsKLSAgICAg
ICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGluc2VydGVkQ29udGVudFJhbmdlLT5pbnRlcnNlY3Rz
Tm9kZShwbGFjZWhvbGRlcik7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVhdGVM
aXZlUmFuZ2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xk
ZXIpOwogICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGludGVy
c2VjdHNOb2RlLnJldHVyblZhbHVlKCkpCiAgICAgICAgICAgICBwbGFjZWhvbGRlcnMuYXBwZW5k
KHBsYWNlaG9sZGVyKTsKICAgICB9CkBAIC0xNDkzLDcgKzE0OTUsNyBAQCB2b2lkIERyYWdDb250
cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3Rv
cjxJbnRTaXplPgogICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IFdURk1vdmUo
aW5zZXJ0ZWRDb250ZW50UmFuZ2UpOwogCiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7
Ci0gICAgY2FyZXRDb250cm9sbGVyLnNldENhcmV0UG9zaXRpb24obV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGNhcmV0Q29udHJvbGxlci5zZXRD
YXJldFBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2Ryb3BwZWRJbWFnZVBs
YWNlaG9sZGVyUmFuZ2UtPnN0YXJ0KSk7CiB9CiAKIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmZpbmFs
aXplRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIoSFRNTEltYWdlRWxlbWVudCYgcGxhY2Vob2xkZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggOTIyNGFiMjA2Y2RmZWJiNTNm
MTFjNzhhM2VhZTIwODEzY2ZkZDI2Yy4uZTMwMGQzMjhkNTc5ZWRiMTcxZjAzZTIwMDhmMTRkOGI3
ZWJmNjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYWNlRHJhZ0NhcmV0KGNvbnN0IEludFBvaW50Jik7
CiAKICAgICBjb25zdCBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiYgZHJvcHBlZEltYWdl
UGxhY2Vob2xkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnM7
IH0KLSAgICBjb25zdCBSZWZQdHI8UmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOyB9CisgICAg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOyB9CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmFsaXplRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIoSFRN
TEltYWdlRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0RHJvcHBlZElt
YWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4mIGltYWdlU2l6ZXMp
OwpAQCAtMTYxLDcgKzE2Miw3IEBAIHByaXZhdGU6CiAgICAgVVJMIG1fZHJhZ2dpbmdJbWFnZVVS
TDsKICAgICBib29sIG1faXNQZXJmb3JtaW5nRHJvcCB7IGZhbHNlIH07CiAgICAgVmVjdG9yPFJl
ZjxIVE1MSW1hZ2VFbGVtZW50Pj4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnM7Ci0gICAgUmVm
UHRyPFJhbmdlPiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7CisgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsKIH07CiAKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNEcmFnZ2FibGVMaW5rKGNvbnN0IEVsZW1lbnQmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1ZWRhODMwZWNmNDY1ZDBkZDBiMjQ3ZmFlMDAy
MGM1ZTI1MmViOGUwLi45Njc1NTgxZjkzZjhkMjFlODcwNDA3ODhlNmQ5YWYwMTRiNTMzNTAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02NzUsMTEgKzY3NSwxMCBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UgogCiBzdGF0aWMgdWludDY0X3QgdGV4dERpc3RhbmNlKGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHN0
YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7Ci0gICAgYXV0byBlbmRCb3Vu
ZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZCk7Ci0gICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8
ICFlbmRCb3VuZGFyeSkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBl
bmQpOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjaGFy
YWN0ZXJDb3VudCh7ICpzdGFydEJvdW5kYXJ5LCAqZW5kQm91bmRhcnkgfSwgVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHJldHVybiBj
aGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5B
bGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
IGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzNTUxYjRkNjJiODQ2MGRiYzYxNzRiN2Rl
NWYyYjlmMzgzYWYwNzViLi42NDEwNTQ4ZDQyMjIzNzdjMTQxMzg2MWNiNWQ5MDI0MjUzZGVkNzMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtODE5LDI0ICs4MTksMTkgQEAgRG9jdW1lbnQqIEZy
YW1lOjpkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogUmVmUHRyPFJhbmdl
PiBGcmFtZTo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKIHsKICAg
ICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0g
ICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwot
ICAgIGlmICghcG9zaXRpb25Cb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBhdXRvIGNvbnRhaW5lclRleHQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5l
clRleHQoKTsKICAgICBpZiAoIWNvbnRhaW5lclRleHQgfHwgIWNvbnRhaW5lclRleHQtPnJlbmRl
cmVyKCkgfHwgY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS51c2VyU2VsZWN0KCkg
PT0gVXNlclNlbGVjdDo6Tm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAo
YXV0byBwcmV2aW91cyA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnByZXZpb3VzKCkpKSB7
Ci0gICAgICAgIGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnBy
ZXZpb3VzLCAqcG9zaXRpb25Cb3VuZGFyeSB9OwotICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RS
ZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkp
Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFu
Z2UpOworICAgIGlmIChhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UocG9zaXRpb24ucHJldmlvdXMoKSwgcG9zaXRpb24pKSB7CisgICAgICAgIGlmIChlZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZSgqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJh
bWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpwcmV2aW91c0No
YXJhY3RlclJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBuZXh0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24ubmV4dCgpKSkgewotICAgICAgICBhdXRvIG5leHRDaGFyYWN0ZXJSYW5n
ZSA9IFNpbXBsZVJhbmdlIHsgKnBvc2l0aW9uQm91bmRhcnksICpuZXh0IH07Ci0gICAgICAgIGlm
IChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5z
KGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShuZXh0Q2hh
cmFjdGVyUmFuZ2UpOworICAgIGlmIChhdXRvIG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VTaW1w
bGVSYW5nZShwb3NpdGlvbiwgcG9zaXRpb24ubmV4dCgpKSkgeworICAgICAgICBpZiAoZWRpdG9y
KCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm5leHRDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQ
b2ludCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpuZXh0Q2hhcmFjdGVy
UmFuZ2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5k
ZXggMGUyYTc3YjhkYzM1NWU2M2UzNDk1YTJiMTg5MmM3NTc1YWE4NDhlZi4uODA1ZjNkMWQ4OTY1
YWJhNTE5NDY2MDNlNzRjOTkxYTZkMjkzZDI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC05OCw2
ICs5OCw3IEBACiAjaW5jbHVkZSAiUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiUG9pbnRlckxvY2tDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgi
CisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJEZXNjZW5kYW50SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgpAQCAtNzExLDEyICs3MTIsMTAgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBEaWRXcmFwKiBkaWRXcmEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2Vz
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpbnQgbGltaXQsIFZl
Y3RvcjxSZWZQdHI8UmFuZ2U+PiYgbWF0Y2hSYW5nZXMsIGludCYgaW5kZXhGb3JTZWxlY3Rpb24p
CithdXRvIFBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9w
dGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQpIC0+IE1hdGNoaW5nUmFuZ2VzCiB7CiAgICAg
VmVjdG9yPFNpbXBsZVJhbmdlPiByZXN1bHRSYW5nZXM7CiAKLSAgICBpbmRleEZvclNlbGVjdGlv
biA9IDA7Ci0KICAgICBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUqIGZy
YW1lV2l0aFNlbGVjdGlvbiA9IG51bGxwdHI7CiAgICAgZG8gewpAQCAtNzI3LDEwICs3MjYsMTEg
QEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKICAgICBp
ZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OworCisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4Rm9yU2VsZWN0aW9uOwogCiAg
ICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewotICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9
IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CiAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9
IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkgewpAQCAt
NzU2LDM1ICs3NTYsMzcgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgICAgIGlu
ZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmVz
dWx0UmFuZ2VzKQotICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHJh
bmdlKSk7CisgICAgaWYgKCFpbmRleEZvclNlbGVjdGlvbikKKyAgICAgICAgaW5kZXhGb3JTZWxl
Y3Rpb24gPSByZXN1bHRSYW5nZXMuc2l6ZSgpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShyZXN1
bHRSYW5nZXMpLCAqaW5kZXhGb3JTZWxlY3Rpb24gfTsKIH0KIAotUmVmUHRyPFJhbmdlPiBQYWdl
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFu
Z2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gUGFnZTo6cmFu
Z2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAodGFy
Z2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBDYW5XcmFwIGNhbldyYXAgPSBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQp
ID8gQ2FuV3JhcDo6WWVzIDogQ2FuV3JhcDo6Tm87Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVmZXJl
bmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFp
bkZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VS
YW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7
CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChh
dXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBm
cmFtZSA9PSBzdGFydEZyYW1lID8gbWFrZVNpbXBsZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSA6IFdU
Rjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQotICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdl
ID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFydEZy
YW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJvdW5k
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRSYW5nZTsKICAgICAgICAgZnJhbWUgPSBpbmNy
ZW1lbnRGcmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSwgY2FuV3JhcCk7
CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAvLyBT
ZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHJl
ZmVyZW5jZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEgYml0
IGFuZCBqdXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24uCiAgICAgaWYgKGNhbldyYXAgPT0g
Q2FuV3JhcDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlc3Vs
dFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1ha2VT
aW1wbGVSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0
SW5TZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRS
YW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsICpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucyB8IFdyYXBB
cm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRSYW5n
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogfQogCiB1bnNpZ25lZCBQYWdlOjpmaW5kTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQsIFNob3Vs
ZEhpZ2hsaWdodE1hdGNoZXMgc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlcywgU2hvdWxkTWFya01hdGNo
ZXMgc2hvdWxkTWFya01hdGNoZXMpCkBAIC04NzksMjQgKzg4MSwyMiBAQCBzdGF0aWMgdm9pZCBy
ZXBsYWNlUmFuZ2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxGaW5kUmVwbGFjZW1lbnRSYW5n
ZT4mIHJhbmdlcwogICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICAgICAgZnJhbWUtPmVkaXRv
cigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlbWVudFRleHQsIEVkaXRvcjo6U2Vs
ZWN0UmVwbGFjZW1lbnQ6OlllcywgRWRpdG9yOjpTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9u
OjpJbnNlcnRSZXBsYWNlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXVpbnQzMl90IFBh
Z2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJhbmdl
c1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9u
T25seSkKK3VpbnQzMl90IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8
U2ltcGxlUmFuZ2U+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRU
ZXh0LCBib29sIC8qc2VsZWN0aW9uT25seSovKQogewotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0
dXJlLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hlY2tp
bmcgd2hldGhlciBlYWNoIHJhbmdlIGJlaW5nIHJlcGxhY2VkIGlzCi0gICAgLy8gY29udGFpbmVk
IHdpdGhpbiBpdHMgZnJhbWUncyBzZWxlY3Rpb24uCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlv
bk9ubHkpOworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVjdCB0
aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hlY2tpbmcgd2hldGhlciBlYWNoIHJhbmdlIGJl
aW5nIHJlcGxhY2VkIGlzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGZyYW1lJ3Mgc2VsZWN0aW9uLgog
CiAgICAgVmVjdG9yPEZpbmRSZXBsYWNlbWVudFJhbmdlPiByZXBsYWNlbWVudFJhbmdlczsKICAg
ICByZXBsYWNlbWVudFJhbmdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJhbmdlc1RvUmVwbGFj
ZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFjZSkgewot
ICAgICAgICBhdXRvIGhpZ2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBo
aWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigpKSB8
fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgYXV0byBoaWdoZXN0
Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwgaGln
aGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwogICAgICAgICByZXBsYWNlbWVudFJhbmdlcy5h
cHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHJhbmdl
KSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOWQ4ZjhmYjUzZjgzYTY2NzUwMTYzZTlmMDM0NDIxNzAx
M2Y2YjM3Yy4uY2ZmYTZjOWI2MGI3MzNmODVhYjE2NDYwYTc1MTRmMzI1N2UzNzFjOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKQEAgLTEyOSw3ICsxMjksNiBAQCBjbGFzcyBQbHVnaW5WaWV3QmFzZTsKIGNsYXNz
IFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjsKIGNsYXNzIFBvaW50ZXJMb2NrQ29udHJvbGxlcjsK
IGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyT2JqZWN0
OwogY2xhc3MgUmVzb3VyY2VVc2FnZU92ZXJsYXk7CiBjbGFzcyBTY3JvbGxMYXRjaGluZ1N0YXRl
OwpAQCAtMTUyLDYgKzE1MSw4IEBAIGNsYXNzIFdlYkdMU3RhdGVUcmFja2VyOwogY2xhc3MgV2hl
ZWxFdmVudERlbHRhRmlsdGVyOwogY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOwogCitzdHJ1
Y3QgU2ltcGxlUmFuZ2U7CisKIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7CiB1
c2luZyBTaGFyZWRTdHJpbmdIYXNoID0gdWludDMyX3Q7CiAKQEAgLTI4OSwxMiArMjkwLDEyIEBA
IHB1YmxpYzoKICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIERpZFdyYXAq
ID0gbnVsbHB0cik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVJhbmdlc1dp
dGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB1aW50MzJfdCByZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFNpbXBs
ZVJhbmdlPiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwg
Ym9vbCBzZWxlY3Rpb25Pbmx5KTsKICAgICBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCByZXBsYWNl
U2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgUmFu
Z2UqLCBGaW5kT3B0aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiBzZWFyY2hSYW5nZSwgRmluZE9wdGlvbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWdu
ZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbWFya0FsbE1h
dGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBib29sIHNob3VsZEhpZ2hs
aWdodCwgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CkBAIC0zMDQsMTMgKzMwNSwxNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEJlZm9yZVByaW50RXZlbnQoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQWZ0ZXJQcmludEV2ZW50KCk7CiAKLSAg
ICAvLyBGaW5kIGFsbCB0aGUgUmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KKyAgICAvLyBG
aW5kIGFsbCB0aGUgcmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KICAgICAvLyBVcG9uIHJl
dHVybiwgaW5kZXhGb3JTZWxlY3Rpb24gd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAg
ICAvLyAwIGlmIHRoZXJlIGlzIG5vIHVzZXIgc2VsZWN0aW9uCi0gICAgLy8gdGhlIGluZGV4IG9m
IHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24KLSAgICAvLyBOb01hdGNo
QWZ0ZXJVc2VyU2VsZWN0aW9uIGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIgdGhl
IHVzZXIgc2VsZWN0aW9uLgotICAgIGVudW0geyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uID0g
LTEgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhj
b25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgaW50IG1heENvdW50LCBWZWN0b3I8UmVmUHRyPFJh
bmdlPj4mLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICAvLyAgMCBpZiB0aGVyZSBpcyBu
byB1c2VyIHNlbGVjdGlvbiwKKyAgICAvLyAgaW5kZXggb2YgdGhlIGZpcnN0IHJhbmdlIGFmdGVy
IHRoZSB1c2VyIHNlbGVjdGlvbiwKKyAgICAvLyAgc2l6ZSBvZiB0aGUgcmFuZ2UgdmVjdG9yIGlm
IHRoZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0aW9uLgorICAg
IHN0cnVjdCBNYXRjaGluZ1JhbmdlcyB7CisgICAgICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmFu
Z2VzOworICAgICAgICB1bnNpZ25lZCBpbmRleEZvclNlbGVjdGlvbiB7IDAgfTsKKyAgICB9Owor
ICAgIFdFQkNPUkVfRVhQT1JUIE1hdGNoaW5nUmFuZ2VzIGZpbmRUZXh0TWF0Y2hlcyhjb25zdCBT
dHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4Q291bnQpOwogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Rl
eHRJbmRpY2F0b3IuY3BwCmluZGV4IGRkOTQyZTkyNDhkNWQ3MjM1MmQ0YjViMjU5MGM4YjZhZmQ1
ODc4MjAuLjllNjIxMDk2ZGEyZTJmN2JmNWFlNzBlOGEzZWRmYjRjNmQ4NTJhMGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyBD
b2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IEZyCiAgICAgYXV0byBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgPSBmcmFt
ZS52aWV3KCkgPyBmcmFtZS52aWV3KCktPmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkgOiBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gbnVs
bHB0cjsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
cmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKKyAgICBhdXRvIGNv
bW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpOwogICAgIHdoaWxl
IChjb21tb25BbmNlc3RvcikgewogICAgICAgICBpZiAoaXM8UmVuZGVyRWxlbWVudD4oY29tbW9u
QW5jZXN0b3ItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICByZW5kZXJlciA9IGRvd25jYXN0
PFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigpKTsKQEAgLTMwOSw3ICsz
MDksNyBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRh
JiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogCiAgICAgYm9vbCB1c2VCb3VuZGluZ1Jl
Y3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzID0gZGF0YS5vcHRpb25zLmNvbnRh
aW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVu
dEZvckNvbXBsZXhSYW5nZXMpOwogICAgIGlmICh1c2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENv
bnRlbnRGb3JDb21wbGV4UmFuZ2VzICYmIGNvbnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KHJhbmdl
KSkgewotICAgICAgICBpZiAoYXV0byogY29udGFpbmVyUmVuZGVyZXIgPSBjb21tb25JbmNsdXNp
dmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpLT5y
ZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlKS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgZGF0
YS5vcHRpb25zLmFkZChUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQpOwogICAg
ICAgICAgICAgdGV4dFJlY3RzLmFwcGVuZChjb250YWluZXJSZW5kZXJlci0+YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0K
aW5kZXggM2Q3YTVlOWQ5NjJjZDcwMzkzY2ZkZjM1YjhkZTA5ZmM4MTAzYzI5Ni4uODdkZDFmM2U2
ODE4NjQ1ZDgxNDdiMGVkNGUzNjUzOThjM2QxMTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBhZ2VUcmFuc2l0aW9uRXZlbnQu
aCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaCIKKyNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXll
ci5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW1wb3J0ICJSZW5kZXJU
ZXh0Q29udHJvbC5oIgpAQCAtMTE1LDIwICsxMTYsMTkgQEAgTlNBcnJheSAqRnJhbWU6OndvcmRz
SW5DdXJyZW50UGFyYWdyYXBoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbihwYWdlKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIHBhZ2Uo
KS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZChwb3Np
dGlvbik7CisKKyAgICBhdXRvIGVuZCA9IHBvc2l0aW9uOwogICAgIGlmICghaXNTdGFydE9mUGFy
YWdyYXBoKGVuZCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gZW5kLnBy
ZXZpb3VzKCk7Ci0gICAgICAgIFVDaGFyIGMocHJldmlvdXMuY2hhcmFjdGVyQWZ0ZXIoKSk7Cisg
ICAgICAgIFVDaGFyIGMgPSBwcmV2aW91cy5jaGFyYWN0ZXJBZnRlcigpOworICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHVzZSBzb21ldGhpbmcgZnJvbSBJQ1Ugb3IgQVNDSUlDVHlwZSB0aGF0IGlz
IG5vdCBzdWJqZWN0IHRvIFBPU0lYIGN1cnJlbnQgbGFuZ3VhZ2UgcmF0aGVyIHRoYW4gaXN3cHVu
Y3QuCiAgICAgICAgIGlmICghaXN3cHVuY3QoYykgJiYgIWlzU3BhY2VPck5ld2xpbmUoYykgJiYg
YyAhPSBub0JyZWFrU3BhY2UpCiAgICAgICAgICAgICBlbmQgPSBzdGFydE9mV29yZChlbmQpOwog
ICAgIH0KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRPZlBhcmFncmFwaChlbmQpKTsK
IAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVu
dCgpKSk7Ci0gICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0KTsKLSAgICBzZXRF
bmQoc2VhcmNoUmFuZ2UuZ2V0KCksIGVuZCk7Ci0KLSAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxh
cHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVu
ZCk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSB8fCBzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICBOU011dGFibGVBcnJheSAqd29yZHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCmluZGV4IDQwNmQ1YmU5MjlkNTNhMTk3NDIwMGI5NDgzZmQ0MWE2NmQzNTZmZWUuLjE3YWZl
YWMxNDQyZGJlMWE2NjM5ZDcxNDRlMTVhNjBkNmRiN2NlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU3OSwxMSArNTc5LDggQEAgYm9vbCBIaXRU
ZXN0UmVzdWx0Ojppc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QKICAg
ICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKTsKLSAgICBpZiAoIXdvcmRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuICF3b3JkUmFuZ2UtPnRleHQoKS5pc0VtcHR5KCk7CisgICAgYXV0byB3
b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRH
cmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQp
OworICAgIHJldHVybiB3b3JkUmFuZ2UgJiYgaGFzQW55UGxhaW5UZXh0KCp3b3JkUmFuZ2UpOwog
fQogCiBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVMaW5rVVJMKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dlYkFyY2hpdmVSZWYuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKaW5kZXgg
YjljNTg3Y2NiZWIwMmQyNmZmZjY3MTc2OGYyNmU0ZDY3ZWY0MDg5ZS4uNTkwM2MwNTcyNWM1NmU3
ZWVlOWU0MTFiNDYzM2ZmYTQ3Y2E1ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElD
YXN0LmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9S
YW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAogV0tUeXBlSUQgV0tX
ZWJBcmNoaXZlR2V0VHlwZUlEKCkKIHsKQEAgLTUzLDcgKzU1LDcgQEAgV0tXZWJBcmNoaXZlUmVm
IFdLV2ViQXJjaGl2ZUNyZWF0ZVdpdGhEYXRhKFdLRGF0YVJlZiBkYXRhUmVmKQogCiBXS1dlYkFy
Y2hpdmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlRnJvbVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgcmFuZ2VIYW5kbGVSZWYpCiB7Ci0gICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJBcmNo
aXZlOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5jb3JlUmFuZ2UoKSk7
CisgICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJBcmNoaXZlOjpjcmVhdGUobWFrZVNpbXBs
ZVJhbmdlKFdlYktpdDo6dG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+Y29yZVJhbmdlKCkpKTsKICAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmd2ViQXJjaGl2ZS5sZWFrUmVmKCkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgKaW5kZXggNzFkZTI4YmRhNzRkN2YwMzRmYjkyYzZm
MjgyNGZlYTM5ZTJjZjlhZi4uMTQ2NGE2Yjc5YWVjZGZlODJlN2NhYzQ0YWNlOWYzZTkzODAzNGJk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaApAQCAtMjMsOCArMjMsNyBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQXJj
aGl2ZV9oCi0jZGVmaW5lIFdlYkFyY2hpdmVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBQTEFURk9S
TShDT0NPQSkKIApAQCAtMzgsNyArMzcsNyBAQCBjbGFzcyBEYXRhOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlOwotY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2lt
cGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNTIsNyArNTEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQXJjaGl2ZVJlc291cmNlKiBt
YWluUmVzb3VyY2UsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YnJlc291cmNlcywgUmVmUHRyPEFQ
STo6QXJyYXk+JiYgc3ViZnJhbWVBcmNoaXZlcyk7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZl
PiBjcmVhdGUoQVBJOjpEYXRhKik7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUo
UmVmUHRyPFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU+JiYpOwotICAgIHN0YXRpYyBSZWY8V2Vi
QXJjaGl2ZT4gY3JlYXRlKFdlYkNvcmU6OlJhbmdlJik7CisgICAgc3RhdGljIFJlZjxXZWJBcmNo
aXZlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKTsKIAogICAgIFdlYkFyY2hp
dmVSZXNvdXJjZSogbWFpblJlc291cmNlKCk7CiAgICAgQVBJOjpBcnJheSogc3VicmVzb3VyY2Vz
KCk7CkBAIC03Niw1ICs3NSwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBBUEkKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0jZW5kaWYgLy8gV2ViQXJjaGl2ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5tbQppbmRleCBmYjU0YWY0MGJjMDBkMjQzYmY5MGU5MjI5
NmNkMWIzZDBkYmJjZWVmLi4xOGRkYzU3YTlkNDEyMDA5ZDZkZjMwYTk4YzZlNmE1MDIzYWYyOTZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0KQEAgLTUyLDkgKzUyLDkgQEAg
UmVmPFdlYkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSZWZQdHI8TGVnYWN5V2ViQXJjaGl2
ZT4mJiBsZWdhY3lXZWJBcmNoaXZlKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hp
dmUobGVnYWN5V2ViQXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKLVJlZjxXZWJBcmNo
aXZlPiBXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UmIHJhbmdlKQorUmVmPFdlYkFyY2hpdmU+IFdl
YkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoJnJhbmdl
KSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hpdmUoTGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlKHJhbmdlKSkpOwogfQogCiBXZWJBcmNoaXZlOjpXZWJBcmNoaXZlKFdlYkFyY2hp
dmVSZXNvdXJjZSogbWFpblJlc291cmNlLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBzdWJyZXNvdXJj
ZXMsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YmZyYW1lQXJjaGl2ZXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCA4NmFjNTUzZTZmY2MwODIyYWQ0MThjNmEwZDNmOGNm
OWM0YTk5Yjk4Li45ZjdjNzMxMDkzY2Y4NzFhN2U0YzYzZjFiMWYxYTZjMzA1M2YzNTM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLVJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0
b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5n
UmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBiYXNlKQorT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUs
IGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG8gYmFzZSkKIHsKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5k
KTsKICAgICBXZWJDb3JlOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSB7IGVkaXRpbmdSYW5nZS5sb2Nh
dGlvbiwgZWRpdGluZ1JhbmdlLmxlbmd0aCB9OwpAQCAtNDcsMjEgKzQ3LDIxIEBAIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFt
ZSwgY29uc3QgRWRpdGluCiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEg
b2YgYW4gaW5wdXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9IGZyYW1lLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpOwogICAgICAgICBp
ZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwogICAgIH0KIAogICAgIEFT
U0VSVChiYXNlID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAogICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBo
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSk7CiAgICAgaWYg
KCFwYXJhZ3JhcGhTdGFydCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHNjb3BlRW5kID0gbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3RO
b2RlKCkpLmVuZDsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OnJlc29sdmVD
aGFyYWN0ZXJSYW5nZSh7IFdURk1vdmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RGTW92ZShzY29wZUVu
ZCkgfSwgcmFuZ2UpKTsKKyAgICBhdXRvIHNjb3BlRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290
Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RG
TW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSk7CiB9CiAK
LUVkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJh
bWUsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiByYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRv
IGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKK0VkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZy
b21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFuZ2VJ
c1JlbGF0aXZlVG8pCiB7CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9PSBF
ZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
RWRpdGluZ1JhbmdlLmgKaW5kZXggZTA0M2Y5NzI0MGU0MjVlY2QyNWE0MjdlZGQ5MjdhY2I3NDVl
MzYxNC4uZjE5YjQ0M2YwZGM3MTlhNzQ4MzVjNzhjNzRiMTY1M2Q5NDExYTE0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgRnJhbWU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsK
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01OCw4ICs1OCw4IEBAIHN0cnVjdCBFZGl0aW5n
UmFuZ2UgewogICAgIC8vIChub3RGb3VuZCwgMCkgaXMgbm90YWJseSB2YWxpZC4KICAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBsb2NhdGlvbiArIGxlbmd0aCA+PSBsb2NhdGlvbjsg
fQogCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gdG9SYW5nZShXZWJDb3JlOjpG
cmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9IEVk
aXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKLSAgICBzdGF0aWMgRWRpdGlu
Z1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiwg
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0
YWJsZVJvb3QpOworICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gdG9S
YW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlz
UmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKKyAg
ICBzdGF0aWMgRWRpdGluZ1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIAogI2lmIGRlZmluZWQo
X19PQkpDX18pCiAgICAgRWRpdGluZ1JhbmdlKE5TUmFuZ2UgcmFuZ2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVu
ZGxlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKaW5kZXggNjk2Y2ZmY2JkZjgw
ZTUxMmUxZDNmZGRhN2YxMDhmMzFkYjMwZTZiMS4uZDg4NTExMWQ5Zjc1MDAwYmU3ZDY3ZTAwYmNm
MDczYTQ5YTYxZTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQuaApAQCAtMzEsMTEgKzMxLDExIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZTsKLWNsYXNzIFJhbmdlOwog
Y2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOworc3RydWN0IFNpbXBs
ZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUxLDIxICs1MSwyMSBAQCBjbGFz
cyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNsaWVudCgpIHsg
fQogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2Um
LCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJLaXQ6OldlYlBh
Z2UmLCBXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiwgV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViS2l0
OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29y
ZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVB
ZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNv
cmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFN0
cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRF
ZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1w
bCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNlbGVj
dGlvbihXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYs
IFdlYkNvcmU6OlJhbmdlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8V1RGOjpT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYktpdDo6
V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNv
cmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3Jl
OjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVS
YW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6
RUFmZmluaXR5LCBib29sKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwg
Y29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZyhX
ZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0
IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2Fy
ZChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJLaXQ6
OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8
V1RGOjpTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2Um
KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2ViUGFn
ZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYsIGJvb2wpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6
U2ltcGxlUmFuZ2UmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSW5qZWN0ZWRCdW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAK
aW5kZXggZmM3ZTAwYjI4ZWIzYTU2OGY2Zjg0YzU2YTI2YWIxYmYwNzliNzRjMy4uNTM3M2YzYjk2
MzliMjAzNGIyMjMyMTA2NTcwZWYwZjg3M2Y3MGY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJXS0J1bmRsZU5v
ZGVIYW5kbGVQcml2YXRlLmgiCiAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUu
aCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViRnJh
bWUuaCIKQEAgLTkwLDcgKzg5LDggQEAgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlTm9k
ZUhhbmRsZUNvcHlEb2N1bWVudChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZUgKIAogV0tSZWN0
IFdLQnVuZGxlTm9kZUhhbmRsZUdldFJlbmRlclJlY3QoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5v
ZGVIYW5kbGVSZWYsIGJvb2wqIGlzUmVwbGFjZWQpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9B
UEkoV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRsZVJlZiktPnJlbmRlclJlY3QoaXNSZXBsYWNlZCkp
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIFdLSW1h
Z2VSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weVNuYXBzaG90V2l0aE9wdGlvbnMoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVSZWYsIFdLU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCkBA
IC05OSwxMCArOTksMTAgQEAgV0tJbWFnZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5U25hcHNo
b3RXaXRoT3B0aW9ucyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZUgKICAgICByZXR1cm4gdG9B
UEkoaW1hZ2UubGVha1JlZigpKTsKIH0KIAotV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBXS0J1bmRs
ZU5vZGVIYW5kbGVDb3B5VmlzaWJsZVJhbmdlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFu
ZGxlUmVmKQorV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5Vmlz
aWJsZVJhbmdlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8V2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKG5v
ZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2UoKTsKLSAgICByZXR1cm4gdG9BUEkocmFuZ2VIYW5k
bGUubGVha1JlZigpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEVsZW1lbnRCb3VuZHMoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRIYW5kbGVSZWYpCkBAIC0xMTUsMTQgKzExNSwxNSBA
QCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bQogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVs
ZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKFdlYktpdDo6
dG9XVEZTdHJpbmcodmFsdWVSZWYpKTsKIH0KIAotdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRI
VE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgV0tCdW5kbGVOb2Rl
SGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVkKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiwgYm9vbCkKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFu
ZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVkKGVuYWJsZWQpOwor
ICAgIC8vIEZJWE1FOiBXb3VsZCBwdXQgQVNTRVJUX05PVF9SRUFDSEVEKCkgaGVyZSBidXQgc29t
ZSBjb21waWxlcnMgYXJlIHdhcm5pbmcgdGhlIGZ1bmN0aW9uIGlzICJub3JldHVybiIuCiB9CiAK
LWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVu
ZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFu
ZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZmlsbGVkKQpAQCAtMTM1LDkgKzEzNiwxMCBA
QCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkQW5k
Vmlld2FibGUoV0tCdW5kbGVOb2RlSGFuZAogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVs
ZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZEFuZFZpZXdhYmxl
KGF1dG9GaWxsZWRBbmRWaWV3YWJsZSk7CiB9CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVS
ZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoKTsKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVO
b2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZFdpdGhCdXR0
b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBX
S0F1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUpCkBAIC0xNTUsOSArMTU3LDEw
IEBAIFdLQXV0b0ZpbGxCdXR0b25UeXBlIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVs
ZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25UeXBlCiAgICAgcmV0dXJuIHRvV0tBdXRvRmlsbEJ1dHRv
blR5cGUoV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmh0bWxJbnB1
dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25UeXBlKCkpOwogfQogCi1ib29sIFdLQnVuZGxlTm9k
ZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFu
ZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiktPmlzQXV0b0ZpbGxBdmFpbGFibGUoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElu
cHV0RWxlbWVudEF1dG9GaWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5w
dXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGF1dG9GaWxsQXZhaWxhYmxlKQpAQCAtMTY1LDkgKzE2
OCwxMCBAQCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmls
bEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVSZQogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRBdXRvRmlsbEF2YWlsYWJsZShhdXRvRmlsbEF2YWls
YWJsZSk7CiB9CiAKLVdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50
QXV0b0ZpbGxCdXR0b25Cb3VuZHMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYpCitXS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVu
dEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVm
KS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKCkpOworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgV0tCdW5kbGVOb2RlSGFu
ZGxlR2V0SFRNTElucHV0RWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKQEAgLTE4MCwxMCArMTg0LDEwIEBA
IGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VX
YXNVc2VyRWRpdChXS0J1bmRsZU5vZGVICiAgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxU
ZXh0QXJlYUVsZW1lbnRIYW5kbGVSZWYpLT5odG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdh
c1VzZXJFZGl0KCk7CiB9CiAKLVdLQnVuZGxlTm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5k
bGVDb3B5SFRNTFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxlUmVmKQorV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdL
QnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MVGFibGVDZWxsRWxlbWVudENlbGxBYm92ZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlPiBub2RlSGFuZGxlID0gV2ViS2l0Ojp0b0ltcGwoaHRtbFRhYmxlQ2VsbEVsZW1lbnRI
YW5kbGVSZWYpLT5odG1sVGFibGVDZWxsRWxlbWVudENlbGxBYm92ZSgpOwotICAgIHJldHVybiB0
b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFu
ZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtZW50SGFuZGxl
UmVmKQpAQCAtMTk0LDggKzE5OCw4IEBAIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFu
ZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtCiAKIFdLQnVu
ZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxGcmFtZUVsZW1lbnRDb250ZW50
RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpCiB7
Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+IGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoaHRt
bEZyYW1lRWxlbWVudEhhbmRsZVJlZiktPmh0bWxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoKTsK
LSAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVha1JlZigpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRs
ZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxJRnJhbWVFbGVtZW50SGFuZGxlUmVmKQpAQCAtMjA0LDIyICsyMDgsMTgg
QEAgV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFtZUVsZW1l
bnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2QKICAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVha1Jl
ZigpKTsKIH0KIAotLy8gRGVwcmVjYXRlZCAtIHVzZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1M
SW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYpLgogYm9vbCBXS0J1
bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1
dG9GaWxsZWQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLS8vIERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0
RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBib29sKS4KLXZvaWQgV0tC
dW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZmlsbGVkKQordm9pZCBX
S0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5v
ZGVIYW5kbGVSZWYgaGFuZGxlLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwo
aHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVk
KGZpbGxlZCk7CisgICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9G
aWxsZWQoaGFuZGxlLCBlbmFibGVkKTsKIH0KIAotLy8gRGVwcmVjYXRlZCAtIHVzZSBXS0J1bmRs
ZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkV2l0aEJ1
dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSkuCi12
b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVu
YWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJv
b2wgZW5hYmxlZCkKK3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1
dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIGJvb2wpCiB7Ci0gICAg
V2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVuYWJsZWQg
PyBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5cGU6OkNyZWRlbnRpYWxzIDogV2ViQ29yZTo6QXV0
b0ZpbGxCdXR0b25UeXBlOjpOb25lOwotCi0gICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxl
bWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQo
YXV0b0ZpbGxCdXR0b25UeXBlKTsKKyAgICAvLyBGSVhNRTogV291bGQgcHV0IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpIGhlcmUgYnV0IHNvbWUgY29tcGlsZXJzIGFyZSB3YXJuaW5nIHRoZSBmdW5jdGlv
biBpcyAibm9yZXR1cm4iLgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVkaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViRWRpdG9yLmNw
cAppbmRleCBjY2I1MWUwZDk2NDBjNjZmODU5NmU0NzQxNzE0MDU4ZTkxMzk3Njg0Li5hODllZjM1
YzA1NDkwYjUwNzVhMGIwNjlmZDA0MmY1ODlmN2M3ZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIv
V2ViS2l0V2ViRWRpdG9yLmNwcApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmLCBTdHJpbmdJbXBs
Kikgb3ZlcnJpZGUKKyAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgY29uc3Qg
U3RyaW5nJikgZmluYWwKICAgICB7CiAgICAgICAgIGdfc2lnbmFsX2VtaXQobV9lZGl0b3IsIHNp
Z25hbHNbU0VMRUNUSU9OX0NIQU5HRURdLCAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01E
b2N1bWVudC5tbQppbmRleCAxNjZlNzlkMDMyMjJlYzk4MjQxMThhNDcwYzAyMDQ5NGE2YjU4YzBk
Li45NWQxYzA3YWIyY2NiNjU1ZDZkN2IxZmUzMjVjYzU5ZTA4M2JlZGM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTURvY3Vt
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NRG9jdW1lbnQubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL21hcmt1cC5oPgog
I2ltcG9ydCA8d3RmL05ha2VkUmVmLmg+CkBAIC03OSw3ICs4MCw3IEBAIC0gKFdLRE9NTm9kZSAq
KWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1
cFN0cmluZyBiCiAKIC0gKFdLRE9NTm9kZSAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTU5vZGUoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChkb3duY2FzdDxXZWJDb3JlOjpEb2N1bWVudD4oKl9pbXBsKS5j
cmVhdGVSYW5nZSgpLmdldCgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9X
S0RPTU5vZGUoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpfaW1wbCkpLCB0ZXh0KS5wdHIoKSk7
CiB9CiAKIC0gKGlkKXBhcnNlcllpZWxkVG9rZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmlu
ZGV4IDAwOTBiODk4YTJlMWUxZDYxY2FlMDQ1MDM4YTJmODVkNzVkYmMzZTcuLjFiNmJiNzdlY2E3
ZTZlYzBmMWY2MWU4NzIxMmM0YzQ1ZjY5NmI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bQpAQCAtMTM0LDkgKzEzNCw4IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIAogLSAoV0tET01S
YW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFyeUJ5Q2hhcmFjdGVyczooTlNVSW50
ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJhbmdlRGlyZWN0aW9uKWRpcmVjdGlv
bgogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVk
QnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShkaXJlY3Rpb24gPT0gV0tET01S
YW5nZURpcmVjdGlvbkZvcndhcmQgPyAgX2ltcGwtPmVuZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3Rh
cnRQb3NpdGlvbigpLCBjaGFyYWN0ZXJzLCBkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlv
bkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3Jl
OjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLQotICAgIHJldHVybiBbW1tXS0RPTVJh
bmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOm5ld1JhbmdlLmdldCgpXSBhdXRvcmVsZWFzZV07Cisg
ICAgYXV0byBuZXdSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0
V29yZEJvdW5kYXJ5KGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/ICBf
aW1wbC0+ZW5kUG9zaXRpb24oKSA6IF9pbXBsLT5zdGFydFBvc2l0aW9uKCksIGNoYXJhY3RlcnMs
IGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/IFdlYkNvcmU6OlNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFj
a3dhcmQpOworICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmNy
ZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9t
YWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1
Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCmluZGV4IDQ3N2ZmOTQ1YTZhYjRhY2E5ZTcz
MzEyNTViMDQwZGQ1ZmFkNmU4ZTAuLmM3NzYyNTJlYmQ0YWU4ODg0NWJlOGM2Nzc4YjZlZjczMGRm
ZjMxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dl
YlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KQEAgLTU1OSwyMSArNTU5
LDIxIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJ
bkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJ
bXBsKiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRv
ckluc2VydEFjdGlvbiBhY3Rpb24pIGZpbmFsCisgICAgICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4
dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9y
SW5zZXJ0QWN0aW9uIGFjdGlvbikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFt
X2RlbGVnYXRlTWV0aG9kcy5zaG91bGRJbnNlcnRUZXh0KQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgICAgICAgICByZXR1cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxl
Z2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2Nv
bnRyb2xsZXIgc2hvdWxkSW5zZXJ0VGV4dDpTdHJpbmcodGV4dCkgcmVwbGFjaW5nUmFuZ2U6d3Jh
cHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5n
ZVRvUmVwbGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9uKV07CisgICAgICAgICAgICByZXR1
cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgc2hvdWxkSW5zZXJ0VGV4dDp0
ZXh0IHJlcGxhY2luZ1JhbmdlOndyYXBwZXIoKldlYktpdDo6Y3JlYXRlSGFuZGxlKHJhbmdlVG9S
ZXBsYWNlKSkgZ2l2ZW5BY3Rpb246dG9XSyhhY3Rpb24pXTsKICAgICAgICAgfQogCi0gICAgICAg
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbAorICAgICAgICBib29s
IHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNv
cmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBi
b29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
ZGVsZWdhdGVNZXRob2RzLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIGF1dG8gYXBpRnJvbVJhbmdlID0gZnJvbVJh
bmdlID8gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6ZnJvbVJhbmdl
XSkgOiBuaWw7Ci0gICAgICAgICAgICBhdXRvIGFwaVRvUmFuZ2UgPSB0b1JhbmdlID8gYWRvcHRO
UyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6dG9SYW5nZV0pIDogbmlsOworICAg
ICAgICAgICAgYXV0byBhcGlGcm9tUmFuZ2UgPSBhZG9wdE5TKFtbV0tET01SYW5nZSBhbGxvY10g
X2luaXRXaXRoSW1wbDpjcmVhdGVMaXZlUmFuZ2UoZnJvbVJhbmdlKS5nZXQoKV0pOworICAgICAg
ICAgICAgYXV0byBhcGlUb1JhbmdlID0gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0
V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKHRvUmFuZ2UpLmdldCgpXSk7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICAgICAgICAgIFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb24gYXBpQWZmaW5p
dHkgPSBhZmZpbml0eSA9PSBXZWJDb3JlOjpVUFNUUkVBTSA/IFVJVGV4dFN0b3JhZ2VEaXJlY3Rp
b25CYWNrd2FyZCA6IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25Gb3J3YXJkOwogI2Vsc2UKQEAgLTU4
Myw3ICs1ODMsNyBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nl
c3NQbHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAgICAgcmV0dXJu
IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2U6YXBpRnJvbVJhbmdlLmdldCgpIHRvUmFuZ2U6YXBpVG9SYW5nZS5nZXQoKSBhZmZpbml0
eTphcGlBZmZpbml0eSBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKikg
ZmluYWwKKyAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgU3Ry
aW5nJikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9k
cy5kaWRDaGFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTkxLDIwICs1OTEsMjAg
QEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0luRWRp
dGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAgICAgIFttX2NvbnRyb2xsZXItPl9l
ZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXJEaWRDaGFuZ2VCeUVkaXRpbmc6bV9jb250cm9sbGVyXTsKICAgICAgICAgfQogCi0gICAg
ICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6
OlJhbmdlKiByYW5nZSkgZmluYWwKKyAgICAgICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQo
V2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBy
YW5nZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9k
cy53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNz
UGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsV3JpdGVSYW5n
ZVRvUGFzdGVib2FyZDp3cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OmdldE9yQ3JlYXRlKHJhbmdlKS5nZXQoKSldOworICAgICAgICAgICAgW21fY29udHJvbGxlci0+
X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlcjptX2NvbnRyb2xsZXIgd2lsbFdyaXRlUmFuZ2VUb1Bhc3RlYm9hcmQ6d3JhcHBlcihX
ZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpXTsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbAorICAg
ICAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYg
cGFzdGVib2FyZERhdGEpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxl
Z2F0ZU1ldGhvZHMuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlwZSA9IFttX2NvbnRyb2xsZXItPl9l
ZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXI6bV9jb250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9yUmFuZ2U6d3JhcHBlcigqV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSkuZ2V0KCkpXTsK
KyAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlwZSA9IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVs
ZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9j
b250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9yUmFuZ2U6d3JhcHBlcihXZWJLaXQ6OmNyZWF0ZUhh
bmRsZShyYW5nZSkuZ2V0KCkpXTsKICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKnR5cGUgaW4g
ZGF0YUJ5VHlwZSkgewogICAgICAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlw
ZSk7CiAgICAgICAgICAgICAgICAgcGFzdGVib2FyZERhdGEuYXBwZW5kKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGFCeVR5cGVbdHlwZV0pKTsKQEAgLTYxOSwxMiArNjE5LDEyIEBA
IC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRp
bmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRp
dGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9s
bGVyRGlkV3JpdGVUb1Bhc3RlYm9hcmQ6bV9jb250cm9sbGVyXTsKICAgICAgICAgfQogCi0gICAg
ICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRv
Y3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBXZWJDb3JlOjpSYW5nZSYgcmFuZ2UsIGJvb2wgaXNN
b3ZlKSBmaW5hbAorICAgICAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJLaXQ6OldlYlBh
Z2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgV2ViQ29yZTo6
U2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIGlzTW92ZSkgZmluYWwKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5wZXJmb3JtVHdvU3RlcERyb3ApCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhdXRvIHJhbmdlSGFuZGxlID0g
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZSgmcmFuZ2UpOwor
ICAgICAgICAgICAgYXV0byByYW5nZUhhbmRsZSA9IFdlYktpdDo6Y3JlYXRlSGFuZGxlKHJhbmdl
KTsKICAgICAgICAgICAgIGF1dG8gbm9kZUhhbmRsZSA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjpnZXRPckNyZWF0ZSgmZnJhZ21lbnQpOwogICAgICAgICAgICAgcmV0dXJuIFtt
X2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93
c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBlcmZvcm1Ud29TdGVwRHJvcDp3cmFw
cGVyKCpub2RlSGFuZGxlKSBhdERlc3RpbmF0aW9uOndyYXBwZXIoKnJhbmdlSGFuZGxlKSBpc01v
dmU6aXNNb3ZlXTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZS5jcHAKaW5kZXggMjIwZWZlZDU4ZWQxNTc3OWU3NWI5YzQ4YzE3MDcxN2ZmZTJk
ZjBkZi4uYTkxZjdmNzA3ODE3OGRmYmU0M2I1ODQ2YmMwMGM0NGViZDk2ZDc0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC01NCw3ICs1NCw3
IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi10eXBl
ZGVmIEhhc2hNYXA8UmFuZ2UqLCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKj4gRE9NUmFuZ2VI
YW5kbGVDYWNoZTsKK3VzaW5nIERPTVJhbmdlSGFuZGxlQ2FjaGUgPSBIYXNoTWFwPFJhbmdlKiwg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+OwogCiBzdGF0aWMgRE9NUmFuZ2VIYW5kbGVDYWNo
ZSYgZG9tUmFuZ2VIYW5kbGVDYWNoZSgpCiB7CkBAIC02NCwyOSArNjQsMjEgQEAgc3RhdGljIERP
TVJhbmdlSGFuZGxlQ2FjaGUmIGRvbVJhbmdlSGFuZGxlQ2FjaGUoKQogCiBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVh
dGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKLSAgICBSYW5n
ZSogcmFuZ2UgPSBKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhjb250ZXh0KS0+dm0oKSwgdG9KUyhv
YmplY3QpKTsKLSAgICByZXR1cm4gZ2V0T3JDcmVhdGUocmFuZ2UpOworICAgIHJldHVybiBnZXRP
ckNyZWF0ZShKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhjb250ZXh0KS0+dm0oKSwgdG9KUyhvYmpl
Y3QpKSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBET01SYW5nZUhhbmRsZUNhY2hl
OjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwgbnVs
bHB0cik7CisgICAgYXV0byByZXN1bHQgPSBkb21SYW5nZUhhbmRsZUNhY2hlKCkuYWRkKHJhbmdl
LCBudWxscHRyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUoKnJhbmdlKTsKKyAgICBhdXRvIHJhbmdlSGFuZGxl
ID0gYWRvcHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKCpyYW5nZSkpOwogICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRsZS5wdHIoKTsKICAgICByZXR1cm4g
cmFuZ2VIYW5kbGU7CiB9CiAKLVJlZjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUoUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUocmFuZ2UpKTsKLX0KLQogSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZShSYW5nZSYg
cmFuZ2UpCiAgICAgOiBtX3JhbmdlKHJhbmdlKQogewpAQCAtMTc4LDQgKzE3MCw5IEBAIFN0cmlu
ZyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9y
YW5nZS0+dGV4dCgpOwogfQogCitSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3Jl
YXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpCit7
CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgKaW5kZXggZjgwZTMzYWJl
ODA2NTFkOTc5MThiOGRiZmExNDllNDYxZjU2YmM4NS4uNWU4YmVlZGExMDBkMjVmMDkxZTdlMGMx
Zjc2YTRmMGNiMTRjMjQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGVfaAotI2RlZmlu
ZSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPcHRpb25zLmgiCkBAIC0zNSw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgUmFuZ2U7CitzdHJ1
Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTksMTIgKzU5LDEx
IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpSYW5nZSYgY29yZVJhbmdlKCkgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIFJlZjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGUo
V2ViQ29yZTo6UmFuZ2UmKTsKICAgICBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKFdlYkNvcmU6
OlJhbmdlJik7CiAKICAgICBSZWY8V2ViQ29yZTo6UmFuZ2U+IG1fcmFuZ2U7CiB9OwogCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKK1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBjcmVh
dGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jik7CiAKLSNlbmRp
ZiAvLyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAppbmRleCBj
ZTAyN2I1YTdiZTY4MjdhNzhlN2I3NzI1YmRiYjMyNjRhNjI1MjBhLi5lMzQwYWYxY2JjMzAyOWU1
N2FiZGIyMmRjNGY5YTliZGMyNWYwNTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcApAQCAtMzgsMTIzICszOCwxMTEgQEAKICNpbmNsdWRlICJX
S1N0cmluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50RnJhZ21lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlUHJvcGVydGllcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgUmVmUHRyPEluamVjdGVkQnVuZGxlQ1NTU3R5
bGVEZWNsYXJhdGlvbkhhbmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYg
c3R5bGUpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhh
bmRsZTo6Z2V0T3JDcmVhdGUoJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVj
bGFyYXRpb24oKSk7Cit9CisKIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6SW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50KGNvbnN0IFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudEJh
c2UmIGNsaWVudCkKIHsKICAgICBpbml0aWFsaXplKCZjbGllbnQpOwogfQogCi1ib29sIEluamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBh
Z2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpz
aG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
KQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcpIHsKLSAgICAgICAgUmVm
UHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGll
bnQuc2hvdWxkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQu
c2hvdWxkQmVnaW5FZGl0aW5nKQorICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQmVnaW5F
ZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBh
Z2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpz
aG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
IHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRpdGluZykgewotICAgICAgICBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5z
aG91bGRFbmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxk
RW5kRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcodG9B
UEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYgcGFnZSwgTm9kZSog
bm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQor
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoV2Vi
UGFnZSYgcGFnZSwgTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAobV9jbGll
bnQuc2hvdWxkSW5zZXJ0Tm9kZSkgewogICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0
ZShub2RlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdl
VG9SZXBsYWNlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
cmFuZ2VUb1JlcGxhY2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9k
ZSh0b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShyYW5nZVRvUmVw
bGFjZUhhbmRsZS5nZXQoKSksIHRvQVBJKGFjdGlvbiksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnROb2RlKHRvQVBJKCZwYWdl
KSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZVRvUmVw
bGFjZSkuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogdGV4
dCwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoV2ViUGFn
ZSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIGlmICht
X2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiByYW5nZVRvUmVwbGFjZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlVG9SZXBsYWNlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LnNob3VsZEluc2VydFRleHQodG9BUEkoJnBhZ2UpLCB0b0FQSSh0ZXh0KSwgdG9BUEkocmFu
Z2VUb1JlcGxhY2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4dCkKKyAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRleHQodG9BUEkoJnBhZ2UpLCB0b0FQ
SSh0ZXh0LmltcGwoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCkp
LCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRGVs
ZXRlUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fY2xp
ZW50LnNob3VsZERlbGV0ZVJhbmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9y
Q3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdl
KHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UpCisg
ICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWxldGVSYW5nZSh0b0FQSSgmcGFnZSksIHRv
QVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQYWdlJiBwYWdlLCBSYW5nZSogZnJv
bVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmlu
aXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAgIGlmIChtX2NsaWVudC5z
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiBmcm9tUmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
OjpnZXRPckNyZWF0ZShmcm9tUmFuZ2UpOwotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZT4gdG9SYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6Omdl
dE9yQ3JlYXRlKHRvUmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyb21SYW5nZUhhbmRsZS5nZXQoKSks
IHRvQVBJKHRvUmFuZ2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhZmZpbml0eSksIHN0aWxsU2VsZWN0
aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQu
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3Vs
ZENoYW5nZVNlbGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUoZnJv
bVJhbmdlKS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZSh0b1JhbmdlKS5nZXQoKSksIHRvQVBJ
KGFmZmluaXR5KSwgc3RpbGxTZWxlY3RpbmcsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmIHBhZ2UsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
c2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0
eWxlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmIChtX2Ns
aWVudC5zaG91bGRBcHBseVN0eWxlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUNT
U1N0eWxlRGVjbGFyYXRpb25IYW5kbGU+IHN0eWxlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVDU1NT
dHlsZURlY2xhcmF0aW9uSGFuZGxlOjpnZXRPckNyZWF0ZShzdHlsZSk7Ci0gICAgICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50
LnNob3VsZEFwcGx5U3R5bGUodG9BUEkoJnBhZ2UpLCB0b0FQSShzdHlsZUhhbmRsZS5nZXQoKSks
IHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAg
ICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUpCisgICAgICAgIHJldHVybiBt
X2NsaWVudC5zaG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxl
KHN0eWxlKS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFN0
cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90
aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKQotICAg
ICAgICBtX2NsaWVudC5kaWRCZWdpbkVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmlj
YXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQu
ZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBs
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBTdHJpbmdJbXBs
KiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25O
YW1lKQogewogICAgIGlmIChtX2NsaWVudC5kaWRFbmRFZGl0aW5nKQotICAgICAgICBtX2NsaWVu
dC5kaWRFbmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRpZEVuZEVkaXRpbmco
dG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpkaWRDaGFuZ2UoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkK
K3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2UoV2ViUGFnZSYg
cGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVu
dC5kaWRDaGFuZ2UpCi0gICAgICAgIG1fY2xpZW50LmRpZENoYW5nZSh0b0FQSSgmcGFnZSksIHRv
QVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1l
LmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYgcGFnZSwg
U3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5n
JiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rp
b24pCi0gICAgICAgIG1fY2xpZW50LmRpZENoYW5nZVNlbGVjdGlvbih0b0FQSSgmcGFnZSksIHRv
QVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmlj
YXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2Vi
UGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ6OndpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiBwYWdlLCBjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC53aWxsV3JpdGVUb1Bh
c3RlYm9hcmQpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJh
bmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2Up
OwotICAgICAgICBtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQodG9BUEkoJnBhZ2UpLCB0
b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAg
fQorICAgIGlmIChtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpCisgICAgICAgIG1fY2xp
ZW50LndpbGxXcml0ZVRvUGFzdGVib2FyZCh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRs
ZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShX
ZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQordm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYg
cGFzdGVib2FyZERhdGEpCiB7CiAgICAgaWYgKG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdl
SGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwot
ICAgICAgICBXS0FycmF5UmVmIHR5cGVzID0gMDsKLSAgICAgICAgV0tBcnJheVJlZiBkYXRhID0g
MDsKLSAgICAgICAgbV9jbGllbnQuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSh0b0FQSSgmcGFn
ZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgJnR5cGVzLCAmZGF0YSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKLSAgICAgICAgUmVmUHRyPEFQSTo6QXJyYXk+IHR5cGVzQXJyYXkgPSBh
ZG9wdFJlZih0b0ltcGwodHlwZXMpKTsKLSAgICAgICAgUmVmUHRyPEFQSTo6QXJyYXk+IGRhdGFB
cnJheSA9IGFkb3B0UmVmKHRvSW1wbChkYXRhKSk7CisgICAgICAgIFdLQXJyYXlSZWYgdHlwZXMg
PSBudWxscHRyOworICAgICAgICBXS0FycmF5UmVmIGRhdGEgPSBudWxscHRyOworICAgICAgICBt
X2NsaWVudC5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3Jl
YXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksICZ0eXBlcywgJmRhdGEsIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CisgICAgICAgIGF1dG8gdHlwZXNBcnJheSA9IGFkb3B0UmVmKHRvSW1wbCh0eXBl
cykpOworICAgICAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0UmVmKHRvSW1wbChkYXRhKSk7CiAK
ICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmNsZWFyKCk7CiAgICAgICAgIHBhc3RlYm9hcmREYXRh
LmNsZWFyKCk7CkBAIC0xNzQsMTQgKzE2MiwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiBwYWdlLCBSYQog
ICAgIH0KIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcChXZWJQYWdlJiBwYWdlLCBEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFu
Z2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYgcGFnZSwgRG9jdW1lbnRGcmFn
bWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01v
dmUpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5wZXJmb3JtVHdvU3RlcERyb3ApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpnZXRPckNyZWF0ZSgmZGVzdGluYXRpb24pOwogICAgIGF1dG8gbm9kZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmZyYWdtZW50KTsKLSAgICBy
ZXR1cm4gbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9k
ZUhhbmRsZS5nZXQoKSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgaXNNb3ZlLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOworICAgIHJldHVybiBtX2NsaWVudC5wZXJmb3JtVHdvU3RlcERy
b3AodG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkoY3JlYXRlSGFu
ZGxlKGRlc3RpbmF0aW9uKS5nZXQoKSksIGlzTW92ZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZFdyaXRlVG9Q
YXN0ZWJvYXJkKFdlYlBhZ2UmIHBhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50LmgKaW5kZXggNjg5OTQxYTE4ZThkOWU5NGNhNDI2Zjk0MmIxZWI4YTBiM2Nm
ODRiYi4uZjNhMGU3NDc2NzIwZmIxYjVkOWNiMTc3MTdlZGQ3Mzk5NDk3ZGMxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaApAQCAtMzksNyArMzksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3Mg
RG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1w
bGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01MiwyMSArNTIsMjEgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudChjb25zdCBX
S0J1bmRsZVBhZ2VFZGl0b3JDbGllbnRCYXNlJik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91
bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9v
bCBzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAg
IGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlJiwgV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6
OlJhbmdlKiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5h
bDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViUGFnZSYsIFN0cmluZ0ltcGwqLCBXZWJD
b3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikg
ZmluYWw7Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiwgV2ViQ29yZTo6UmFu
Z2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYs
IFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJD
b3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwotICAgIGJvb2wgc2hv
dWxkQXBwbHlTdHlsZShXZWJQYWdlJiwgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFdl
YkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViUGFnZSYs
IFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZvaWQgZGlkRW5kRWRp
dGluZyhXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Ci0gICAg
dm9pZCBkaWRDaGFuZ2UoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZp
bmFsOwotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBu
b3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2FyZChX
ZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRE
YXRhRm9yUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBh
c3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFz
dGVib2FyZERhdGEpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2Um
LCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5k
RWRpdGluZyhXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAg
ICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpF
ZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJQ
YWdlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAg
ICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2UoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJh
bmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNv
cmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91
bGRBcHBseVN0eWxlKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMmLCBj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZEJlZ2luRWRpdGluZyhXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKSBm
aW5hbDsKKyAgICB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90
aWZpY2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2UoV2ViUGFnZSYsIGNvbnN0
IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2VTZWxl
Y3Rpb24oV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Cisg
ICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFG
b3JSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jiwg
VmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVU
b1Bhc3RlYm9hcmQoV2ViUGFnZSYpIGZpbmFsOwotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9w
KFdlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgV2ViQ29yZTo6UmFuZ2UmIGRl
c3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERy
b3AoV2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpT
aW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5hbDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBkZDljMzUyNjA1ZjA4
ZjM5NDBkOTAwZDhmMDI2NTI0N2UwNGJhMzc5Li4xNzVhYzdkNzI2NjYyNGE1OGJhNTg1N2E0MzMw
Yjg4NTMzYzNiMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNzYsNyArNzYsNyBAQCBz
dGF0aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogCiBib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNs
aWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSku
Z2V0KCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiBib29sIFdlYkVkaXRvckNs
aWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTExNywzMiArMTE3LDMyIEBAIGlu
dCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91
bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7Cisg
ICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdp
bkVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRFbmRFZGl0aW5nKCptX3Bh
Z2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOworICAgIHJldHVybiBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCByYW5n
ZSk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5v
ZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsICZub2RlLCBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24pOworICAgIHJldHVybiBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCBu
b2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewot
ICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5z
ZXJ0VGV4dCgqbV9wYWdlLCB0ZXh0LmltcGwoKSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBs
YWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVk
aXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFnZSwgdGV4dCwgcmFuZ2VUb1JlcGxh
Y2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBz
dGlsbFNlbGVjdGluZykKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJh
bmdlKGZyb21SYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKSwgYWZm
aW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgZnJvbVJh
bmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogICAgIAogYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBz
dHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5bGUoKm1f
cGFnZSwgJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwg
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0eWxlKCptX3BhZ2UsIHN0eWxlLCBy
YW5nZSk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpAQCAtMjY3LDE3ICsy
NjcsMTcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFn
ZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLndpbGxXcml0ZVRvUGFzdGVib2FyZCgqbV9wYWdlLCByYW5nZSk7
CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsK
LSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERh
dGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJv
YXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCByYW5nZSwgcGFz
dGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNp
bXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7Ci0gICAgcmV0dXJuIG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFn
ZSwgZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShkZXN0aW5hdGlvbiksIGlzTW92ZSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3Rl
cERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGRlc3RpbmF0aW9uLCBpc01vdmUpOwogfQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYgc3RlcCkKQEAgLTUz
NiwxMSArNTM2LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW0KIHN0YXRpYyB1aW50NjRfdCBp
bnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRT
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5kYXJ5
ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBo
U3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0
KSk7Ci0gICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFwYXJhZ3JhcGhTdGFydCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFw
aFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsKKyAgICBhdXRvIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KSk7CisgICAgcmV0dXJuIHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlKSA6IDA7CiB9
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5n
Q29udHJvbGxlclByb3h5Lm1tCmluZGV4IDk1ZjE2M2MxZTExYjAxZDA3MjAzZTQ2YWI1Y2NhYjAw
YzllMmE3MDIuLjY2ZTNkOTk1N2VkYjlhZjMzNjQ5ODMxNDRlNzRhMTAzYzI4ZWRlM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTE3NiwxNSArMTc2LDEz
IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVs
YXRpdmVUb1NlbGVjdGlvbihjb25zdCBTdHJpCiAKIFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmcg
VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVuUG9z
aXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQor
ICAgIGF1dG8gZW50aXJlUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAg
aWYgKCFlbnRpcmVSYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVudGlyZVJh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqc3RhcnRCb3VuZGFyeSwgKmVuZEJvdW5kYXJ5IH07CiAKICAg
ICBhdXRvIHN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0XSk7CiAKLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdChlbnRpcmVSYW5nZSk7ICFpdC5h
dEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgqZW50aXJl
UmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGlmICghaXQudGV4
dCgpLmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFtzdHJpbmcgYXBw
ZW5kQXR0cmlidXRlZFN0cmluZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdl
dCgpXSkuZ2V0KCldOwpAQCAtMTkyLDcgKzE5MCw3IEBAIFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJp
bmcgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVu
CiAgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2UsIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZykpIHsKICAgICAgICAgICAgIGF1dG8mIGRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1h
cmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRhdGEoKSk7CiAgICAgICAg
ICAgICBhdXRvIHN1YnJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCB7IG1hcmtl
ci0+c3RhcnRPZmZzZXQoKSwgbWFya2VyLT5lbmRPZmZzZXQoKSAtIG1hcmtlci0+c3RhcnRPZmZz
ZXQoKSB9KTsKLSAgICAgICAgICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlOmRhdGEua2V5IHZhbHVl
OmRhdGEudmFsdWUgcmFuZ2U6Y2hhcmFjdGVyUmFuZ2UoZW50aXJlUmFuZ2UsIHN1YnJhbmdlKV07
CisgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZh
bHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKCplbnRpcmVSYW5nZSwgc3VicmFuZ2UpXTsKICAgICAg
ICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDVmNWU4NjQxYWRlY2QyNmNiOWVmZDc5OGEzOTAwZjc3
M2Q5NGU3M2IuLjUzMTg1NTM4YjllMDUxOTAzYTlkNmVkZTc1YjRlMGVjODM1MjY5MzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGx1Z2luRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTEs
MTEgKzExMiwxMSBAQCB1aW50MzJfdCBGaW5kQ29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMoY29u
c3QgVmVjdG9yPHVpbnQzMl90PiYgbWF0Y2hJbmRpY2VzLCBjbwogICAgIC8vIHBlcmlvZGljYWxs
eSB1cGRhdGUgYW4gTlNQcm9ncmVzcyBpbiB0aGUgVUkgcHJvY2VzcyB3aGVuIGEgYmF0Y2ggb2Yg
ZmluZC1pbi1wYWdlIG1hdGNoZXMgYXJlIHJlcGxhY2VkLgogICAgIGNvbnN0IHVpbnQzMl90IG1h
eGltdW1OdW1iZXJPZk1hdGNoZXNUb1JlcGxhY2UgPSAxMDAwOwogCi0gICAgVmVjdG9yPFJlZjxS
YW5nZT4+IHJhbmdlc1RvUmVwbGFjZTsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlc1Rv
UmVwbGFjZTsKICAgICByYW5nZXNUb1JlcGxhY2UucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWluPHVp
bnQzMl90PihtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6
ZSgpKSk7CiAgICAgZm9yIChhdXRvIGluZGV4IDogbWF0Y2hJbmRpY2VzKSB7CiAgICAgICAgIGlm
IChpbmRleCA8IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmFuZ2VzVG9SZXBs
YWNlLnVuY2hlY2tlZEFwcGVuZCgqbV9maW5kTWF0Y2hlc1tpbmRleF0pOworICAgICAgICAgICAg
cmFuZ2VzVG9SZXBsYWNlLnVuY2hlY2tlZEFwcGVuZChtX2ZpbmRNYXRjaGVzW2luZGV4XSk7CiAg
ICAgICAgIGlmIChyYW5nZXNUb1JlcGxhY2Uuc2l6ZSgpID49IG1heGltdW1OdW1iZXJPZk1hdGNo
ZXNUb1JlcGxhY2UpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNDMsMTIgKzI0NCwx
MCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBPcHRpb25TZXQ8RmluZE9wdGlvbnM+IG9wdAogICAgIGJvb2wgZm91bmRTdHJpbmdTdGFydHNB
ZnRlclNlbGVjdGlvbiA9IGZhbHNlOwogICAgIGlmICghcGx1Z2luVmlldykgewogICAgICAgICBp
ZiAoRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5j
b3JlUGFnZSgpKSkgewotICAgICAgICAgICAgRnJhbWVTZWxlY3Rpb24mIGZzID0gc2VsZWN0ZWRG
cmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoZnMuc2VsZWN0aW9uQm91bmRzKCku
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOwotICAg
ICAgICAgICAgICAgIGludCBpbmRleEZvclNlbGVjdGlvbjsKLSAgICAgICAgICAgICAgICBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmVP
cHRpb25zLCBtYXhNYXRjaENvdW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7
Ci0gICAgICAgICAgICAgICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPSBpbmRleEZvclNlbGVj
dGlvbjsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b25Cb3VuZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZU9wdGlvbnMs
IG1heE1hdGNoQ291bnQpOworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3Zl
KHJlc3VsdC5yYW5nZXMpOworICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4
ID0gcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uOwogICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5n
U3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yODQsMTYgKzI4MywxNCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8RmluZE9wdGlvbnM+IG9wdAogCiB2b2lkIEZpbmRD
b250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9u
U2V0PEZpbmRPcHRpb25zPiBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAg
IG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKLSAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0KLSAg
ICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcs
IGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9yU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRl
eHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9m
aW5kTWF0Y2hlcyA9IFdURk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKICAgICBWZWN0b3I8VmVjdG9y
PEludFJlY3Q+PiBtYXRjaFJlY3RzOwogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRj
aGVzKQotICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFJlY3RzKCpyYW5nZSkpOworICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3Rz
LCBpbmRleEZvclNlbGVjdGlvbikpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMsIHJlc3Vs
dC5pbmRleEZvclNlbGVjdGlvbikpOwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEZpbmRP
cHRpb25zOjpTaG93T3ZlcmxheSkgJiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNo
b3dGaW5kSW5kaWNhdG9yKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA4LDEyICszMDUsMTIgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJ
bmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRl
eF0tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFt
ZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgp
LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpt
X2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKTsKIAogICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IHNlbGVjdGlvblNuYXBzaG90ID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZy
YW1lKS0+Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKTsKIApAQCAtMzM5LDEwICszMzYsMTAgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgp
CiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLT5z
dGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBt
X2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKm1fZmluZE1hdGNoZXNbbWF0Y2hJ
bmRleF0pKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNo
ZXNbbWF0Y2hJbmRleF0pOwogfQogCiB2b2lkIEZpbmRDb250cm9sbGVyOjppbmRpY2F0ZUZpbmRN
YXRjaCh1aW50MzJfdCBtYXRjaEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKaW5kZXggMmZkM2ZhYzFlYzZjMmMyMTE5MjVjYjVk
N2FkYmMxOTI1NzI3ZDlkOS4uZjZmNmY5ZDIxMDRkM2E3OWUzZmU4ZDk4MWYxNDQ1OTY0MjI0MzIz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgZmluZCBpbmRp
Y2F0b3IgaXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBp
cyBzaG93aW5nLgogICAgIGJvb2wgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yIHsgZmFsc2UgfTsK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZmluZEluZGljYXRvclJlY3Q7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4+IG1fZmluZE1hdGNoZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiBtX2ZpbmRNYXRjaGVzOwogICAgIC8vIEluZGV4IHZhbHVlIGlzIC0xIGlm
IG5vdCBmb3VuZCBvciBpZiBudW1iZXIgb2YgbWF0Y2hlcyBleGNlZWRzIHByb3ZpZGVkIG1heGlt
dW0uCiAgICAgaW50IG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IHsgLTEgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlZDNiNjNmZGRlM2E3
N2I4ZjllYjk4MzE1ZTVlOGQ5YmI1MWMwZGI3Li4yZGM1MDVjZmRiMTNiMDAzMmZkYTU0OWUwYzlk
NWQ2NzI3MmI0MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcApAQCAtNTQzNywxMyArNTQzNywxMyBAQCB2b2lkIFdlYlBhZ2U6Omhhc01hcmtlZFRl
eHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHZv
aWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0
ZUxpdmVSYW5nZShmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1l
LmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNl
bGVjdGVkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5n
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtNTQ1Miw4ICs1NDUyLDgg
QEAgdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvaW50LCBDYWxsYmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFp
bkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5
cGUpOwogICAgIGF1dG8mIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJl
c3VsdC5pbm5lck5vZGVGcmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1
bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5n
ZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihlZGl0aW5nUmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CisgICAgYXV0byBl
ZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgbWFrZVNpbXBsZVJh
bmdlKHJhbmdlKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENh
bGxiYWNrKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdl
YlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1Jhbmdl
JiBlZGl0aW5nUmFuZ2UsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKaW5kZXggNDY5
MjU1M2EwYTgwOWRkM2Y3MDM5NTNlMzU4ZGYzMzQ2MjJlYzU5ZS4uODE5ODIzNTBlZTk5MzA4Yzgx
YjU1MmFiNTU4OGE0ZDhjOGY3OWNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTElucHV0
RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRleHRBcmVhRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9WaXNpYmxlVW5pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggY2E0M2Q4NjEzYWI2M2U5MjgyYWVhMmQ0MzdmNzE2
NWFjZWExN2Y1NC4uYTA1MzNlZWNjNDA2NGRhMWNiNmMxY2QwZjY4NjliYzE4ZTM4YWZmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZl
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1F1aXJrcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJCbG9jay5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgpAQCAtMTUwLDI5ICsxNTEsMjQgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEZJWE1FOiBVbmNsZWFyIGlmIGNhbGxlcnMgaW4gdGhp
cyBmaWxlIGFyZSBjb3JyZWN0bHkgY2hvb3Npbmcgd2hpY2ggb2YgdGhlc2UgdHdvIGZ1bmN0aW9u
cyB0byB1c2UuCiAKLXN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2lu
Z05vQnJlYWtTcGFjZShyYW5nZSk7Ci19Ci0KIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29u
dGV4dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBy
YW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CisgICAg
cmV0dXJuIHJhbmdlID8gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpy
YW5nZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNv
bnRleHQoY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4
dEZvckNvbnRleHQoU2ltcGxlUmFuZ2UgeyAqcmFuZ2UgfSkgOiBlbXB0eVN0cmluZygpOworICAg
IHJldHVybiBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOwogfQog
Ci1zdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQorc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxh
Y2luZ05vQnJlYWtTcGFjZShyYW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVl
KTsKKyAgICByZXR1cm4gcmFuZ2UgPyBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFr
U3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpIDogZW1wdHlT
dHJpbmcoKTsKIH0KIAogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFJh
bmdlKiByYW5nZSkKIHsKLSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JEaXNwbGF5KCpy
YW5nZSkgOiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBwbGFpblRleHRGb3JEaXNwbGF5KG1h
a2VTaW1wbGVSYW5nZShyYW5nZSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlh
bGl6ZSgpCkBAIC0yODksNyArMjg1LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRv
clN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAg
cG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRFbmQgPSBwb3N0TGF5b3V0RGF0YS5jYXJldFJlY3RB
dFN0YXJ0OwogICAgICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgdGFr
ZSBpbnRvIGFjY291bnQgd3JpdGluZyBkaXJlY3Rpb24uCiAgICAgICAgIHBvc3RMYXlvdXREYXRh
LmlzUmVwbGFjZUFsbG93ZWQgPSByZXN1bHQuaXNDb250ZW50RWRpdGFibGUgJiYgYXRCb3VuZGFy
eU9mR3JhbnVsYXJpdHkoc2VsZWN0aW9uLnN0YXJ0KCksIFRleHRHcmFudWxhcml0eTo6V29yZEdy
YW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBwb3N0TGF5
b3V0RGF0YS53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkuZ2V0KCkpOworICAgICAgICBwb3N0TGF5b3V0
RGF0YS53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oc2Vs
ZWN0aW9uLnN0YXJ0KCksIHBvc3RMYXlvdXREYXRhLmNoYXJhY3RlckFmdGVyU2VsZWN0aW9uLCBw
b3N0TGF5b3V0RGF0YS5jaGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb24sIHBvc3RMYXlvdXREYXRhLnR3
b0NoYXJhY3RlckJlZm9yZVNlbGVjdGlvbik7CiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNS
YW5nZSgpKSB7CkBAIC01NTMsOCArNTQ5LDggQEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25D
b250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBjb25zdCBpbnQgc2VsZWN0aW9uRXh0
ZW5kZWRDb250ZXh0TGVuZ3RoID0gMzUwOwogICAgIAogICAgIFN0cmluZyBzZWxlY3RlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwotICAgIFN0cmluZyB0ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yRGlz
cGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb25FeHRlbmRlZENv
bnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpLmdldCgpKTsKLSAgICBT
dHJpbmcgdGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFy
YWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpLmdldCgpKTsKKyAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4
dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91
bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0
ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7CisgICAg
U3RyaW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpGb3J3YXJkKSk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNl
bGVjdGlvbkNvbnRleHRDYWxsYmFjayhzZWxlY3RlZFRleHQsIHRleHRCZWZvcmUsIHRleHRBZnRl
ciwgY2FsbGJhY2tJRCkpOwogfQpAQCAtOTg4LDggKzk4NCw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlk
Q29uY2x1ZGVFZGl0RHJhZygpCiAgICAgYXV0byBmcmFtZSA9IG1ha2VSZWYobV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKSk7CiAgICAgaWYgKGF1dG8gc2VsZWN0
aW9uUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkgewogICAgICAgICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90ID0g
dmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcygqc2VsZWN0aW9u
UmFuZ2UpOwotICAgICAgICBhdXRvIGNvbGxhcHNlZFJhbmdlID0gU2ltcGxlUmFuZ2UgeyBzZWxl
Y3Rpb25SYW5nZS0+ZW5kLCBzZWxlY3Rpb25SYW5nZS0+ZW5kIH07Ci0gICAgICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShjb2xsYXBzZWRSYW5n
ZSkucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UoU2ltcGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5kLCBzZWxlY3Rpb25SYW5n
ZS0+ZW5kIH0sIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICAgICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IFdU
Rk1vdmUoc2VsZWN0aW9uUmFuZ2UpOwogICAgIH0KIApAQCAtMTExMywxNSArMTEwOCwxNCBAQCB2
b2lkIFdlYlBhZ2U6OmhhbmRsZVN0eWx1c1NpbmdsZVRhcEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCB1aW50NgogICAgIGlmIChyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJl
ci0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CisgICAg
YXV0byBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3QubG9jYWxQ
b2ludCgpLCBudWxscHRyKTsKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHBv
c2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwotCi0gICAgaWYgKHBv
c2l0aW9uLmlzTnVsbCgpKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRp
b24pOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwot
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UucHRyKCksIHBvc2l0
aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKCpyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGF1dG8gaW1h
Z2UgPSBmcmFtZS5lZGl0b3IoKS5pbnNlcnRFZGl0YWJsZUltYWdlKCk7CiAgICAgZnJhbWUuZG9j
dW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQoaW1hZ2UuZ2V0KCkpOwogfQpAQCAtMTM3MSwxMiAr
MTM2NSwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50
JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVy
ZVN0YXRlLCB7IH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAg
ICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdzOwogICAgIEdlc3R1cmVSZWNvZ25pemVy
U3RhdGUgd2tHZXN0dXJlU3RhdGUgPSBzdGF0aWNfY2FzdDxHZXN0dXJlUmVjb2duaXplclN0YXRl
PihnZXN0dXJlU3RhdGUpOwogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8R2VzdHVyZVR5cGU+KGdl
c3R1cmVUeXBlKSkgewotICAgIGNhc2UgR2VzdHVyZVR5cGU6OlBocmFzZUJvdW5kYXJ5OgotICAg
IHsKKyAgICBjYXNlIEdlc3R1cmVUeXBlOjpQaHJhc2VCb3VuZGFyeTogewogICAgICAgICBpZiAo
IWZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgYXV0byBtYXJrZWRSYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2Uo
KTsKQEAgLTEzODYsNDAgKzEzNzksMzYgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVy
ZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAg
ICAgICAgZmxhZ3MgPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgIT0gZGlzdGFuY2VCZXR3ZWVuUG9z
aXRpb25zKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSA/IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZCA6
IE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4geyB9OwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBmbGFncyA9IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZDsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwotICAgIH0KKyAg
ICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgICAgICBicmVhazsK
KyAgICB9CiAKLSAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVGaW5nZXJUYXA6Ci0gICAgeworICAg
IGNhc2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdlclRhcDogewogICAgICAgICBhdXRvIFthZGp1c3Rl
ZFBvc2l0aW9uLCB3aXRoaW5Xb3JkQm91bmRhcnldID0gd29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25X
aXRob3V0Q3Jvc3NpbmdMaW5lKHBvc2l0aW9uKTsKICAgICAgICAgaWYgKHdpdGhpbldvcmRCb3Vu
ZGFyeSA9PSBXaXRoaW5Xb3JkQm91bmRhcnk6OlllcykKICAgICAgICAgICAgIGZsYWdzID0gV29y
ZElzTmVhclRhcDsKLSAgICAgICAgaWYgKGFkanVzdGVkUG9zaXRpb24uaXNOb3ROdWxsKCkpCi0g
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGFkanVz
dGVkUG9zaXRpb24sIGFkanVzdGVkUG9zaXRpb24pOwotICAgIH0KKyAgICAgICAgcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoYWRqdXN0ZWRQb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOworICAgIH0K
IAogICAgIGNhc2UgR2VzdHVyZVR5cGU6OkxvdXBlOgogICAgICAgICBpZiAocG9zaXRpb24ucm9v
dEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpm
cmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwotICAgICAgICBlbHNlCisgICAg
ICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CisgICAgICAgIGVsc2Ug
ewogI2lmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICAgICAgICAgIHJhbmdlID0gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKICNlbHNlCiAgICAgICAgICAgICBzd2l0Y2ggKHdr
R2VzdHVyZVN0YXRlKSB7Ci0gICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6
OkJlZ2FuOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBib3VuZGFyeSA9ICptYWtlQm91bmRhcnlQ
b2ludChwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9
IFNpbXBsZVJhbmdlIHsgYm91bmRhcnksIGJvdW5kYXJ5IH07CisgICAgICAgICAgICBjYXNlIEdl
c3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuOgorICAgICAgICAgICAgICAgIG1fc3RhcnRpbmdH
ZXN0dXJlUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXpl
clN0YXRlOjpDaGFuZ2VkOgogICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0aW5nR2VzdHVyZVJh
bmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnQpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhcnQgPCBwb3NpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnQsIHBvc2l0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhcnQgPSBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdl
LT5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihzdGFydCkgPCBwb3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUu
ZG9jdW1lbnQoKSwgcG9zaXRpb24sIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBzdGFydCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2du
aXplclN0YXRlOjpFbmRlZDoKQEAgLTE0MzIsNiArMTQyMSw3IEBAIHZvaWQgV2ViUGFnZTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJl
VHlwZSwKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICNlbmRpZgorICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXN0dXJlVHlwZTo6VGFwQW5kQUhh
bGY6CkBAIC0xNDQ2LDExICsxNDM2LDExIEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1
cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAg
ICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDaGFuZ2VkOgogICAgICAgICAgICAgaWYg
KCFtX2N1cnJlbnRXb3JkUmFuZ2UpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqbV9jdXJyZW50V29yZFJhbmdlKTsKLSAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiA8IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCi0gICAgICAgICAgICAg
ICAgcmFuZ2UtPnNldFN0YXJ0KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uID4gcmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgICAgICAgICAg
cmFuZ2UtPnNldEVuZChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgIHJh
bmdlID0gbV9jdXJyZW50V29yZFJhbmdlOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkpCisgICAgICAgICAgICAgICAg
cmFuZ2UtPnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLT5lbmQpKQorICAgICAgICAgICAgICAgIHJhbmdlLT5lbmQgPSAqbWFrZUJvdW5k
YXJ5UG9pbnQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpFbmRlZDoKICAgICAgICAgY2Fz
ZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDYW5jZWxsZWQ6CkBAIC0xNDY3LDcgKzE0NTcsNyBA
QCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwg
R2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAvLyBEb3VibGUtdGFwIGF0IGVu
ZCBvZiBsaW5lIG9ubHkgcGxhY2VzIGluc2VydGlvbiBwb2ludCB0aGVyZS4KICAgICAgICAgICAg
IC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0aW5nIGF0IGVuZHMgb2Yg
bGluZXMsCiAgICAgICAgICAgICAvLyBwYXJhZ3JhcGhzLCBhbmQgZG9jdW1lbnRzLgotICAgICAg
ICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24p
OwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3Np
dGlvbihwb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ4MCw5ICsxNDcwLDggQEAgdm9p
ZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1
cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgIGNhc2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdlclRyaXBs
ZVRhcDoKICAgICAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0
R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KSkgewogICAgICAgICAgICAgLy8gVHJpcGxlLXRhcCBhdCBlbmQgb2YgbGluZSBvbmx5IHBsYWNl
cyBpbnNlcnRpb24gcG9pbnQgdGhlcmUuCi0gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdl
dCB0aGUgY2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVzLAotICAgICAgICAgICAg
Ly8gcGFyYWdyYXBocywgYW5kIGRvY3VtZW50cy4KLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0aW5nIGF0IGVuZHMg
b2YgbGluZXMsIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCisgICAgICAgICAgICByYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFu
dWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2Fy
ZCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ5MSwxMiArMTQ4MCwxMiBAQCB2b2lkIFdlYlBhZ2U6
OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2Vz
dHVyZVR5cGUsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0gICAgICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9u
LmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQsIGdlc3R1cmVUeXBl
LCBnZXN0dXJlU3RhdGUsIGZsYWdzLCBjYWxsYmFja0lEKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGJvb2wgYmFzZUlzU3Rh
cnQpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3
Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3
Q29vcmRpbmF0ZXMsIGJvb2wgYmFzZUlzU3RhcnQpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBl
eGlzdGluZ1NlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGV4aXN0aW5nU2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwpAQCAtMTUxNSw3ICsxNTA0LDcgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VG
b3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUsIGNvbnN0IEludFAKICAg
ICB9CiAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKIAogICAgIGNvbnN0ZXhw
ciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVz
dFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVz
dDo6QWxsb3dWaXNpYmxlQ2hpbGRGcmFtZUNvbnRlbnRPbmx5IH07CiAgICAgSGl0VGVzdFJlc3Vs
dCBoaXRUZXN0ID0gZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9p
bnRJbkRvY3VtZW50LCBoaXRUeXBlKTsKQEAgLTE1MjksMjMgKzE1MTgsMjEgQEAgc3RhdGljIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJh
bWUsIGNvbnN0IEludFAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVjdGlvblN0YXJ0Lm5leHQo
KTsKICAgICAgICAgZWxzZSBpZiAoJnNlbGVjdGlvblN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuYW5j
aG9yTm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmaGl0VGVzdC50YXJnZXROb2RlKCktPnRyZWVTY29w
ZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0UG9zaXRp
b25Gb3JFbmQocmVzdWx0LmRlZXBFcXVpdmFsZW50KCksIHNlbGVjdGlvblN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkuY29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQu
aXNOb3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOworCisgICAgICAgIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHNlbGVjdGlvbkVuZCwgcmVzdWx0KSA8PSAwKQogICAg
ICAgICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uRW5kLnByZXZpb3VzKCk7CiAgICAgICAgIGVsc2Ug
aWYgKCZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJnNlbGVjdGlvbkVuZC5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZvclN0YXJ0KHJlc3VsdC5k
ZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJO
b2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkKLSAgICAg
ICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcmVzdWx0LmRl
ZXBFcXVpdmFsZW50KCksIHNlbGVjdGlvbkVuZCk7CisKKyAgICAgICAgcmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UocmVzdWx0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
cmFuZ2U7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQ
b3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGJv
b2wgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitzdGF0aWMgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihGcmFtZSog
ZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wgYmFzZUlzU3RhcnQs
IFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9u
IHNhbWVEaXJlY3Rpb24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2Fy
ZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9u
IG9wcG9zaXRlRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwpAQCAtMTU1NSw3ICsxNTQyLDcg
QEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZy
YW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKIAogICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxh
cml0eShleHRlbnQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0
aW9uKSkgewogICAgICAgICAvLyBUaGlzIGlzIGEgd29yZCBib3VuZGFyeS4gTGVhdmUgc2VsZWN0
aW9uIHdoZXJlIGl0IGlzLgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHko
ZXh0ZW50LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgb3Bwb3NpdGVEaXJlY3Rp
b24pKSB7CkBAIC0xNTcwLDcgKzE1NTcsOSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0
V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUAogICAg
ICAgICAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eSh3b3JkQm91bmRhcnksIFRleHRHcmFudWxh
cml0eTo6V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9uKQogICAgICAgICAmJiBpbml0aWFs
RXh0ZW50ICE9IHdvcmRCb3VuZGFyeSkgewogICAgICAgICBleHRlbnQgPSB3b3JkQm91bmRhcnk7
Ci0gICAgICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+
ZG9jdW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVu
dCgpLCBleHRlbnQsIGJhc2UpOworICAgICAgICBpZiAoIShiYXNlIDwgZXh0ZW50KSkKKyAgICAg
ICAgICAgIHN0ZDo6c3dhcChiYXNlLCBleHRlbnQpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBs
ZVJhbmdlKGJhc2UsIGV4dGVudCk7CiAgICAgfQogICAgIC8vIENvbnZlcnNlbHksIGlmIHRoZSBp
bml0aWFsIGV4dGVudCBlcXVhbHMgdGhlIGN1cnJlbnQgd29yZCBib3VuZGFyeSwgdGhlbgogICAg
IC8vIHJ1biB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgc2VsZWN0aW9u
IHNob3VsZCBleHRlbmQKQEAgLTE1OTAsOSArMTU3OSwxMSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdl
PiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNp
YmxlUAogICAgIGlmIChleHRlbnQuaXNOdWxsKCkgfHwgZXh0ZW50ID09IGJhc2UpCiAgICAgICAg
IGV4dGVudCA9IHdvcmRCb3VuZGFyeTsKICAgICBpZiAoZXh0ZW50LmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwg
YmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBleHRlbnQs
IGJhc2UpOworICAgIGlmICghKGJhc2UgPCBleHRlbnQpKQorICAgICAgICBzdGQ6OnN3YXAoYmFz
ZSwgZXh0ZW50KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGJhc2UsIGV4dGVudCk7CiB9
CiAKIEludFJlY3QgV2ViUGFnZTo6cm9vdFZpZXdCb3VuZHNGb3JFbGVtZW50KGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCkBAIC0xNzA3LDMxICsxNjk4LDI4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRl
U2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3Vj
aCBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwot
ICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdz
PiBmbGFnczsKLQogICAgIGlmIChzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzV2hl
bk1vZGlmeWluZ1NlbGVjdGlvbigpKQogICAgICAgICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZl
bnRzRm9yU2VsZWN0aW9uR2VzdHVyZShzZWxlY3Rpb25Ub3VjaCwgcG9pbnQpOwogCisgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOworICAgIE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4g
ZmxhZ3M7CisKICAgICBzd2l0Y2ggKHNlbGVjdGlvblRvdWNoKSB7CiAgICAgY2FzZSBTZWxlY3Rp
b25Ub3VjaDo6U3RhcnRlZDoKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZE5vdE1vdmlu
ZzoKICAgICAgICAgYnJlYWs7Ci0gICAgCisKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRl
ZDoKLSAgICAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVk
aXRhYmxlKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQ
b3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQot
ICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cmVzdWx0LCByZXN1bHQpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICByYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24ocG9zaXRp
b24pKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUZvclBvaW50SW5S
b290Vmlld0Nvb3JkaW5hdGVzKGZyYW1lLCBwb2ludCwgYmFzZUlzU3RhcnQpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTW92aW5nRm9yd2FyZDoKICAg
ICAgICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oJmZyYW1lLCBwb3Np
dGlvbiwgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAgICAg
IGJyZWFrOwotICAgICAgICAKKwogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTW92aW5n
QmFja3dhcmQ6CiAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9u
KCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNzQwLDggKzE3MjgsOSBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0
aW9uVG91Y2ggcwogICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRp
bmF0ZXMoZnJhbWUsIHBvaW50LCBiYXNlSXNTdGFydCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBwb3NpdGlvbi5hZmZpbml0
eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNl
clRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXND
YWxsYmFjayhwb2ludCwgc2VsZWN0aW9uVG91Y2gsIGZsYWdzLCBjYWxsYmFja0lEKSk7CiB9CkBA
IC0xNzQ5LDE1ICsxNzM4LDEyIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRv
dWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3VjaCBzCiB2b2lkIFdlYlBh
Z2U6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9tLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLCBHZXN0
dXJlUmVjb2duaXplclN0YXRlIGdlc3R1cmVTdGF0ZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQog
ewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGZyb21Qb3NpdGlvbiA9IGZyYW1lLnZp
c2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGZy
b20pKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3Np
dGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHRvKSk7Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBpZiAoZnJvbVBvc2l0aW9uLmlzTm90TnVsbCgpICYm
IHRvUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGZyb21Qb3NpdGlvbiA8IHRv
UG9zaXRpb24pCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3Vt
ZW50KCksIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdG9Qb3NpdGlvbiwg
ZnJvbVBvc2l0aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBhdXRv
IGZyb21Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXco
KS0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyb20pKTsKKyAgICBhdXRvIHRvUG9zaXRpb24gPSBmcmFt
ZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50
cyh0bykpOworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGZyb21Qb3NpdGlv
biwgdG9Qb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKCEoZnJvbVBvc2l0aW9uIDwgdG9Qb3NpdGlv
bikpCisgICAgICAgICAgICBzdGQ6OnN3YXAocmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kKTsKKyAg
ICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgZnJvbVBvc2l0
aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9CiAKICAgICAvLyBXZSBjYW4gdXNlIHRoZSBz
YW1lIGNhbGxiYWNrIGZvciB0aGUgZ2VzdHVyZXMgd2l0aCBvbmUgcG9pbnQuCkBAIC0xNzgxLDEz
ICsxNzY3LDEzIEBAIHZvaWQgV2ViUGFnZTo6ZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgQ29tcGxldGlvbkhhCiAgICAgSW50UG9pbnQgZW5kTG9j
YXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50czsKICAgICBib29sIHNob3VsZERpc3BhdGNoTW91
c2VFdmVudHMgPSBzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzV2hlbk1vZGlmeWlu
Z1NlbGVjdGlvbigpOwogICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKSB7Ci0gICAg
ICAgIGF1dG8gc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmll
dygpLT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOwotICAgICAgICBlbmRM
b2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1Rv
Um9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKSkuYWJzb2x1
dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKKyAgICAgICAgYXV0byBzdGFydExvY2F0aW9uRm9y
U3ludGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhW
aXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+c3Rh
cnQpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOworICAgICAgICBlbmRMb2NhdGlv
bkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZp
ZXcoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2Ut
PmVuZCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7CiAgICAgICAgIGRpc3BhdGNo
U3ludGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoOjpT
dGFydGVkLCBzdGFydExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwogICAgICAgICBk
aXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rpb25U
b3VjaDo6TW92ZWQsIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwogICAgIH0K
IAotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLmdldCgp
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAog
ICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKQogICAgICAgICBkaXNwYXRjaFN5bnRo
ZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rpb25Ub3VjaDo6RW5kZWQs
IGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwpAQCAtMTgxMiwxMCArMTc5OCwx
MiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdvcmRCYWNrd2FyZCgpCiAgICAgaWYgKCFmcmFtZS5z
ZWxlY3Rpb24oKS5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHks
IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChzdGFydFBvc2l0aW9uLmlz
Tm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdn
ZXJlZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0
Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFu
dWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CisgICAgaWYgKHN0YXJ0UG9z
aXRpb24uaXNOdWxsKCkgfHwgc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxl
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJl
ZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zm
c2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
ODMzLDcgKzE4MjEsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQz
Ml90IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24g
IT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIo
KSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogICAgIApAQCAt
MTk4NSw3ICsxOTczLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0
aFNlbGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkKICAgICB9CiAKICAgICBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAgcmFuZ2Ut
PmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9u
UmVjdHMpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVj
dHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3RzKTsKICAgICBjb252ZXJ0
Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxlY3Rpb25S
ZWN0cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0Nh
bGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMDY1LDcgKzIwNTMs
NyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcgogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
biA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlz
SW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIAogICAgIGlmIChwb3NpdGlvbi5p
c05vdE51bGwoKSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigp
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgcG9zaXRpb24uYWZm
aW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMs
IFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAgLTIwNzcs
NyArMjA2NSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERp
cmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pCiAgICAgaWYgKHBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7CiAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAgICAgICBp
ZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9u
LCBwb3NpdGlvbikucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiksIFVQ
U1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcywg
VXNlclRyaWdnZXJlZCk7CiAgICAgfQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0y
MDkxLDcgKzIwNzksNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0
aERpcmVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbgogICAgICAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb24gPSAoaXNGb3J3YXJkKSA/IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVFbmQoKSA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpOwogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgZGlyZWN0aW9uKTsKICAgICAgICAgaWYg
KHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pLnB0cigpLCBpc0ZvcndhcmQ/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2lt
cGxlUmFuZ2UocG9zaXRpb24pLCBpc0ZvcndhcmQ/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMjEwMCwyNSArMjA4
OCwxMyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0
eUF0UG9pbnQoRnJhbWUmIGZyYW1lLCBjb25zdCBXZQogewogICAgIGF1dG8gcG9zaXRpb24gPSB2
aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVy
YWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0g
ICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OiB7Ci0gICAgICAg
IGF1dG8gYm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7Ci0gICAgICAgIGlm
ICghYm91bmRhcnkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBy
ZXR1cm4geyB7ICpib3VuZGFyeSwgKmJvdW5kYXJ5IH0gfTsKLSAgICB9Ci0gICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eTogewotICAgICAgICBhdXRvIHJhbmdlID0gd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7ICpyYW5nZSB9Owot
ICAgIH0KKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6Cisg
ICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOworICAgIGNhc2UgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiB3b3JkUmFuZ2VGcm9t
UG9zaXRpb24ocG9zaXRpb24pOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpTZW50ZW5jZUdy
YW51bGFyaXR5OgotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFudWxhcml0
eTogewotICAgICAgICBhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5
KHBvc2l0aW9uLCBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAg
ICAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIHJldHVybiB7ICpyYW5nZSB9OwotICAgIH0KKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6
UGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdUZXh0VW5pdE9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZv
cndhcmQpOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpEb2N1bWVudEdyYW51bGFyaXR5Ogog
ICAgICAgICAvLyBGSVhNRTogTWFrZXMgbm8gc2Vuc2UgdGhhdCB0aGlzIG11dGF0ZXMgdGhlIGN1
cnJlbnQgc2VsZWN0aW9uIGFuZCByZXR1cm5zIG51bGwuCiAgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdEFsbCgpOwpAQCAtMjE2NSw3ICsyMTQxLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxl
Y3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9p
bnQsIFcKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBv
aW50KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVs
ZW1lbnQpOwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwgVVBTVFJFQU0sIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSgqcmFuZ2UsIFVQ
U1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcywg
VXNlclRyaWdnZXJlZCk7CiAgICAgbV9pbml0aWFsU2VsZWN0aW9uID0gcmFuZ2U7CiAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIxOTcsMTAgKzIxNzMsOCBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JgogICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgaW5pdGlhbFNlbGVjdGlvblN0YXJ0
UG9zaXRpb24pCiAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG5ld1JhbmdlLT5zdGFydCk7CiAKLSAgICBpZiAoc2VsZWN0aW9uU3RhcnQuaXNOb3RO
dWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIGF1dG8gcmFuZ2Ug
PSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtl
Qm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH07Ci0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgVVBTVFJFQU0s
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJp
Z2dlcmVkKTsKLSAgICB9CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2Vs
ZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpCisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UocmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc2VsZWN0aW9uU3RhcnQgPT0gaW5p
dGlhbFNlbGVjdGlvblN0YXJ0UG9zaXRpb24sIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIyMTUsNyAr
MjE4OSw2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rp
b25TdGFydDsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uRW5kOwogICAgIApAQCAtMjI0
OSwxMSArMjIyMiw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vCiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTm90TnVsbCgpICYmIHNlbGVjdGlvbkVu
ZC5pc05vdE51bGwoKSkKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1
bWVudCgpLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKLQotICAgIGlmIChyYW5nZSkK
LSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwg
VVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShz
ZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhtX3NlbGVjdGlvbkFuY2hvciA9
PSBTdGFydCwgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjMwMywxMiArMjI3MywxMiBAQCB2b2lkIFdl
YlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBjb25zdCBT
dHJpbmcmIG5ld1RleHQpCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHdvcmRSYW5nZSA9IGZyYW1lLnNl
bGVjdGlvbigpLmlzQ2FyZXQoKQogICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQotICAgICAgICA6IGNyZWF0ZUxpdmVS
YW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsK
LSAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UuZ2V0KCkpICE9IG9sZFRleHQp
CisgICAgICAgIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UpICE9IG9sZFRleHQp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2Uod29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2Uod29yZFJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQobmV3VGV4
dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxz
ZSk7CiB9CkBAIC0yMzI4LDE0ICsyMjk4LDE0IEBAIHZvaWQgV2ViUGFnZTo6cmVwbGFjZURpY3Rh
dGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCkKICAg
ICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOwogICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkKICAgICAgICAgcG9zaXRpb24gPSBzdGFydE9mRG9jdW1lbnQoZnJhbWUuZG9jdW1l
bnQoKSk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBh
dXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKIAotICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0KHJhbmdl
LnB0cigpKSAhPSBvbGRUZXh0KQorICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKSAh
PSBvbGRUZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG5v
dGlmeSB0aGUgY2xpZW50IHRoYXQgdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCB1bnRpbCB3ZSBh
cmUgZG9uZSBpbnNlcnRpbmcgdGhlIG5ldyB0ZXh0LgogICAgIGZyYW1lLmVkaXRvcigpLnNldEln
bm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZS5wdHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQobmV3VGV4
dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxz
ZSk7CiB9CkBAIC0yMzQ4LDI3ICsyMzE4LDI1IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEF1dG9j
b3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgQ29tCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIGF1dG8gcmFuZ2UgPSB3
b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgIGF1dG8gcmFuZ2UgPSB3b3JkUmFu
Z2VGcm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCkpOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgcmVwbHkoeyB9KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChyYW5nZS5nZXQoKSk7CisgICAgYXV0byB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250
ZXh0KHJhbmdlKTsKICAgICBjb25zdCB1bnNpZ25lZCBtYXhTZWFyY2hBdHRlbXB0cyA9IDU7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1wdHMgJiYgdGV4dEZvclJh
bmdlICE9IHRleHRGb3JBdXRvY29ycmVjdGlvbjsgKytpKQotICAgIHsKLSAgICAgICAgcG9zaXRp
b24gPSByYW5nZS0+c3RhcnRQb3NpdGlvbigpLnByZXZpb3VzKCk7Ci0gICAgICAgIGlmIChwb3Np
dGlvbi5pc051bGwoKSB8fCBwb3NpdGlvbiA9PSByYW5nZS0+c3RhcnRQb3NpdGlvbigpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyAgaSA8IG1heFNlYXJjaEF0dGVtcHRzICYmIHRleHRGb3JSYW5n
ZSAhPSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb247ICsraSkgeworICAgICAgICBhdXRvIHBvc2l0aW9u
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkucHJldmlvdXMoKTsK
KyAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpIHx8IHBvc2l0aW9uID09IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgd29yZFJhbmdlRnJv
bVBvc2l0aW9uKHBvc2l0aW9uKS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24o
KSk7Ci0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0
KCkpOworICAgICAgICByYW5nZSA9IHsgeyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24p
LT5zdGFydCwgcmFuZ2UtPmVuZCB9IH07CisgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4
dEZvckNvbnRleHQocmFuZ2UpOwogICAgIH0KIAogICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiBz
ZWxlY3Rpb25SZWN0czsKICAgICBpZiAodGV4dEZvclJhbmdlID09IHRleHRGb3JBdXRvY29ycmVj
dGlvbikKLSAgICAgICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0
cyk7CisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhzZWxlY3Rpb25SZWN0cyk7CiAKICAgICBhdXRvIHJvb3RWaWV3U2VsZWN0aW9uUmVjdHMgPSBz
ZWxlY3Rpb25SZWN0cy5tYXAoWyZdKGNvbnN0IGF1dG8mIHNlbGVjdGlvblJlY3QpIC0+IEZsb2F0
UmVjdCB7IHJldHVybiBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhzZWxlY3Rpb25S
ZWN0LnJlY3QoKSk7IH0pOwogCkBAIC0yNDE0LDE0ICsyMzgyLDE0IEBAIGJvb2wgV2ViUGFnZTo6
YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29u
c3QgU3RyaW5nCiAgICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICBTdHJpbmcgdGV4dEZvclJhbmdlOwogICAg
IGF1dG8gb3JpZ2luYWxUZXh0V2l0aEZvbGRlZFF1b3RlTWFya3MgPSBmb2xkUXVvdGVNYXJrcyhv
cmlnaW5hbFRleHQpOwogCiAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpOworICAgICAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgICAgIHJhbmdlID0gd29yZFJhbmdl
RnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4
dEZvckNvbnRleHQocmFuZ2UpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgJ29yaWdpbmFsVGV4
dCcgaXMgbm90IHRoZSBzYW1lIGFzICd0ZXh0Rm9yUmFuZ2UnIHdlIG5lZWQgdG8gbW92ZSAncmFu
Z2UnCiAgICAgICAgIC8vIGZvcndhcmQgc3VjaCB0aGF0IGl0IG1hdGNoZXMgdGhlIG9yaWdpbmFs
IHNlbGVjdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlLgpAQCAtMjQzMSwzMyArMjM5OSwzMyBAQCBi
b29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNv
cnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRp
b24ucHJldmlvdXMoKTsKICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAg
ICAgICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChmcmFtZS5kb2N1bWVudCgpKTsK
LSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9z
aXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgICAgICAg
ICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAg
ICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFp
blRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvb3BDb3VudCA9
IDA7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhQb3NpdGlvbnNBdHRlbXB0cyA9IDEw
OwogICAgICAgICAgICAgd2hpbGUgKHRleHRGb3JSYW5nZS5sZW5ndGgoKSAmJiB0ZXh0Rm9yUmFu
Z2UubGVuZ3RoKCkgPiBvcmlnaW5hbFRleHQubGVuZ3RoKCkgJiYgbG9vcENvdW50IDwgbWF4UG9z
aXRpb25zQXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLm5l
eHQoKTsKICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgcG9zaXRp
b24gPj0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmFuZ2UgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFdU
Rjo6bnVsbG9wdDsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgICAgICAgICAgICAgIHRleHRGb3JS
YW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgICAgICAgICAgICAgbG9vcENvdW50Kys7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodGV4dEZvclJhbmdlLmlzRW1wdHkoKSAm
JiByYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICAvLyBJZiAncmFu
Z2UnIGRvZXMgbm90IGluY2x1ZGUgYW55IHRleHQgYnV0IGl0IGlzIG5vdCBjb2xsYXBzZWQsIHdl
IG5lZWQgdG8gc2V0CiAgICAgICAgICAgICAvLyAncmFuZ2UnIHRvIG1hdGNoIHRoZSBzZWxlY3Rp
b24uIE90aGVyd2lzZSBub24tdGV4dCBub2RlcyB3aWxsIGJlIHJlbW92ZWQuCi0gICAgICAgICAg
ICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3Np
dGlvbik7CisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAg
ICAgICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNlbGVjdGlvbi4KLSAgICAg
ICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRl
eHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5U
ZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgfQogCiAgICAgaWYgKGZvbGRRdW90ZU1hcmtzKHRl
eHRGb3JSYW5nZSkgIT0gb3JpZ2luYWxUZXh0V2l0aEZvbGRlZFF1b3RlTWFya3MpCkBAIC0yNDY2
LDkgKzI0MzQsOSBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChj
b25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgIC8vIENvcnJlY3RseSBk
ZXRlcm1pbmUgYWZmaW5pdHksIHVzaW5nIGxvZ2ljIGN1cnJlbnRseSBvbmx5IHByZXNlbnQgaW4g
VmlzaWJsZVBvc2l0aW9uCiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gRE9XTlNUUkVBTTsKICAg
ICBpZiAocmFuZ2UgJiYgcmFuZ2UtPmNvbGxhcHNlZCgpKQotICAgICAgICBhZmZpbml0eSA9IFZp
c2libGVQb3NpdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBVUFNUUkVBTSkuYWZmaW5pdHko
KTsKKyAgICAgICAgYWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLT5zdGFydCksIFVQU1RSRUFNKS5hZmZpbml0eSgpOwogICAgIAotICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGFmZmluaXR5
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgYWZmaW5pdHksIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBpZiAoY29y
cmVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChjb3Jy
ZWN0aW9uLCAwLCBvcmlnaW5hbFRleHQuaXNFbXB0eSgpID8gVGV4dEV2ZW50SW5wdXRLZXlib2Fy
ZCA6IFRleHRFdmVudElucHV0QXV0b2NvbXBsZXRpb24pOwogICAgIGVsc2UgaWYgKG9yaWdpbmFs
VGV4dC5sZW5ndGgoKSkKQEAgLTI0OTUsMTIgKzI0NjMsOCBAQCBXZWJBdXRvY29ycmVjdGlvbkNv
bnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAgICAgc2VsZWN0ZWRU
ZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBm
cmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtl
ZFRleHRCZWZvcmU7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
c3RhcnRQb3NpdGlvbikpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dCh7IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0LCAqc3RhcnQgfSk7Ci0gICAgICAg
IFN0cmluZyBtYXJrZWRUZXh0QWZ0ZXI7Ci0gICAgICAgIGlmIChhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGVuZFBvc2l0aW9uKSkKLSAgICAgICAgICAgIG1hcmtlZFRleHRBZnRlciA9IHBs
YWluVGV4dEZvckNvbnRleHQoeyAqZW5kLCBjb21wb3NpdGlvblJhbmdlLT5lbmQgfSk7CisgICAg
ICAgIGF1dG8gbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQobWFrZVNpbXBs
ZVJhbmdlKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0LCBzdGFydFBvc2l0aW9uKSk7CisgICAgICAg
IGF1dG8gbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2ltcGxlUmFu
Z2UoZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBtYXJrZWRU
ZXh0ID0gbWFya2VkVGV4dEJlZm9yZSArIHNlbGVjdGVkVGV4dCArIG1hcmtlZFRleHRBZnRlcjsK
ICAgICAgICAgaWYgKCFtYXJrZWRUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbWFya2Vk
VGV4dFJhbmdlLmxvY2F0aW9uID0gbWFya2VkVGV4dEJlZm9yZS5sZW5ndGgoKTsKQEAgLTI2NzQs
OSArMjYzOCw5IEBAIHN0YXRpYyB2b2lkIGRhdGFEZXRlY3RvckxpbmtQb3NpdGlvbkluZm9ybWF0
aW9uKEVsZW1lbnQmIGVsZW1lbnQsIEludGVyYWN0aW9uSW5mCiAgICAgYXV0byBsaW5rUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAgICAgbGlua1JhbmdlLT5zZWxl
Y3ROb2RlQ29udGVudHMoZWxlbWVudCk7CiAgICAgaW5mby50ZXh0QmVmb3JlID0gcGxhaW5UZXh0
Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3Vu
ZGFyeShsaW5rUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwKLSAgICAgICAgZGF0YURldGVjdGlvbkV4
dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkuZ2V0KCkp
OworICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25E
aXJlY3Rpb246OkJhY2t3YXJkKSk7CiAgICAgaW5mby50ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JE
aXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5
KGxpbmtSYW5nZS0+ZW5kUG9zaXRpb24oKSwKLSAgICAgICAgZGF0YURldGVjdGlvbkV4dGVuZGVk
Q29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKS5nZXQoKSk7CisgICAg
ICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlv
bjo6Rm9yd2FyZCkpOwogfQogI2VuZGlmCiAKQEAgLTQxMDYsNyArNDA3MCw3IEBAIHZvaWQgV2Vi
UGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aERlbHRhKGludDY0X3QgbG9jYXRpb25EZWx0YSwgaW50
NjRfdCBsZW5ndGhEZWx0CiAKICAgICBhdXRvIG5ld1NlbGVjdGlvblJhbmdlID0gQ2hhcmFjdGVy
UmFuZ2UobmV3U2VsZWN0aW9uTG9jYXRpb24udW5zYWZlR2V0KCksIG5ld1NlbGVjdGlvbkxlbmd0
aC51bnNhZmVHZXQoKSk7CiAgICAgYXV0byB1cGRhdGVkU2VsZWN0aW9uUmFuZ2UgPSByZXNvbHZl
Q2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgbmV3
U2VsZWN0aW9uUmFuZ2UpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KGNyZWF0ZUxpdmVSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFN
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodXBkYXRl
ZFNlbGVjdGlvblJhbmdlLCBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKIH0KIApAQCAtNDI2NiwxMiArNDIzMCwxMSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RE
b2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVl
cwogICAgIH0KIAogICAgIGF1dG8gbWFrZVN0cmluZyA9IFtdIChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZCkgLT4gQXR0cmlidXRlZFN0cmlu
ZyB7Ci0gICAgICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBpZiAoIXN0YXJ0Qm91bmRh
cnkgfHwgIWVuZEJvdW5kYXJ5IHx8ICpzdGFydEJvdW5kYXJ5ID09ICplbmRCb3VuZGFyeSkKKyAg
ICAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICAgICAg
aWYgKCFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIGVkaXRpbmctb2Zmc2V0LWNv
bXBhdGlibGUgYXR0cmlidXRlZCBzdHJpbmdzIGlmIHRoYXQgb3B0aW9uIGlzIHJlcXVlc3RlZC4K
LSAgICAgICAgcmV0dXJuIHsgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHsgV1RG
TW92ZSgqc3RhcnRCb3VuZGFyeSksIFdURk1vdmUoKmVuZEJvdW5kYXJ5KSB9KV0pLCBuaWwgfTsK
KyAgICAgICAgcmV0dXJuIHsgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5n
ZSldKSwgbmlsIH07CiAgICAgfTsKIAogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9IG1ha2VT
dHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24pOwpAQCAtNDMwNiw4ICs0MjY5LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRF
ZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAg
ICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29udGV4
dFJhbmdlLCAwKTsKICAgICB9IGVsc2UgaWYgKHdhbnRzTWFya2VkVGV4dFJlY3RzICYmIGNvbXBv
c2l0aW9uUmFuZ2UpIHsKICAgICAgICAgdW5zaWduZWQgY29tcG9zaXRpb25TdGFydE9mZnNldCA9
IDA7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJl
Zm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKQotICAgICAgICAgICAgY29tcG9zaXRpb25TdGFy
dE9mZnNldCA9IFdlYkNvcmU6OnBsYWluVGV4dCh7IFdURk1vdmUoKnN0YXJ0KSwgY29tcG9zaXRp
b25SYW5nZS0+c3RhcnQgfSkubGVuZ3RoKCk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKGNvbnRleHRCZWZvcmVTdGFydCwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQp
KQorICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KCpy
YW5nZSk7CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5n
ZSgqY29tcG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNldCk7CiAgICAgfQogCkBA
IC00MzkyLDcgKzQzNTUsNyBAQCB2b2lkIFdlYlBhZ2U6OmZvY3VzVGV4dElucHV0Q29udGV4dEFu
ZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGVsZW1lbnRDbwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGFyZ2V0
RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdn
ZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggYWRiOTky
M2Y1MTFkM2FkNmY1MjQ5ODJmOGZhNTJmMzAwYzhjM2JmYy4uY2ExYzk1ZTQ4NDdiNzQ1ZWY0YjJj
ZDkyNWQzZTA4NmEyNzNmOWM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFdlYlBh
Z2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRp
bmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGluZ1JhbmdlKTsKKyAg
ICBhdXRvIHJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCBlZGl0aW5nUmFuZ2Up
OwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayh7IH0sIEVkaXRpbmdS
YW5nZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDQwMTQ0YjU5MWMxYjQxMDA4NWY2YjY2NWVkNTllMDRlZmM0NzdkZDIuLmM3YzZjYzI0
ZTY4MWFkY2RhNzYyYjJhNWU0Yjc1YjUyZDU1YjU5NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTg4LDcgKzE4OCw2IEBACiAJCTVDN0U3ODc2MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVk
U291cmNlMTEtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzdFNzg2OTIyRDk1RkUyMDAwNkEyMzAgLyogVW5pZmllZFNvdXJjZTExLW1tLm1tICov
OyB9OwogCQk1Qzk3RUY2MzIzNDJDNTM0MDA2MDIwRDQgLyogVW5pZmllZFNvdXJjZTE5LW1tLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5N0VGNjEy
MzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UxOS1tbS5tbSAqLzsgfTsKIAkJNUM5N0VG
NjQyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UyMC1tbS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOTdFRjYyMjM0MkM1MzQwMDYwMjBE
NCAvKiBVbmlmaWVkU291cmNlMjAtbW0ubW0gKi87IH07Ci0JCTVDOUE0RTUzMjJERTQ2MjcwMDdE
QjM1MyAvKiBET01VSUtpdEV4dGVuc2lvbnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q0MzYzNzFENTdBQkVFMDBBQjg1RUEgLyogRE9NVUlLaXRF
eHRlbnNpb25zLm1tICovOyB9OwogCQk1QzlEOTI1QTIyRDdFOEFEMDA4RTkyNjYgLyogU291cmNl
cy50eHQgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUQ5MjU4MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCAqLzsgfTsKIAkJNUM5RDkyNUIy
MkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXNDb2NvYS50eHQgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUQ5MjU5MjJEN0U4QUQwMDhFOTI2NiAvKiBT
b3VyY2VzQ29jb2EudHh0ICovOyB9OwogCQk1QzlFRjJGNTIxRjA2MUJFMDAzQkRDNTYgLyogUGFn
ZVN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDOUVGMkY0MjFGMDYxQkUwMDNCREM1NiAvKiBQYWdlU3RvcmFnZVNl
c3Npb25Qcm92aWRlci5oICovOyB9OwpAQCAtMzQwMCw3ICszMzk5LDYgQEAKIAkJCQkxQTkxMTlG
NjFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE2MDUxOTExNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCODI5NThENDEzMjcwN0QwMDAwRDBFNzkgLyogQ29ycmVjdGlvblBh
bmVsLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUM5QTRFNTMyMkRFNDYyNzAwN0RCMzUzIC8qIERP
TVVJS2l0RXh0ZW5zaW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNjA1MTkzMTc1MDJBNUQw
MEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4
REVENTEwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM2NDAwNkUyMzk5NkU4MTAwMUUxODVFIC8qIEluUHJvY2Vzc0lE
QlNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQppbmRleCAy
YjNkMTljOWRhN2JkNzdjYjdkYTc2ZTZkZmViNWQ1MWNlMzU0YmMxLi4zYjBlYjk1NGUwOWFmZDhj
NzMwNWZmYWVlMTI0MWYxN2YyMTJkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCkBAIC0y
OTIsNyArMjkyLDcgQEAgLSAoQk9PTCl3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHk6KFdlYlRl
eHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbkkKIC8vIGlzIGVuY2xvc2VkIGRl
cGVuZHMgb24gdGhlIGdpdmVuIGRpcmVjdGlvbiwgdXNpbmcgdGhlIHNhbWUgcnVsZSBhcyAtW1dl
YlZpc2libGVQb3NpdGlvbiB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHk6aW5EaXJlY3Rpb25B
dEJvdW5kYXJ5Ol0uCiAtIChET01SYW5nZSAqKWVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0
eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uSWZBdEJvdW5kYXJ5
OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0
KGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXSwg
dG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVjdGlvbkRpcmVjdGlvbihkaXJl
Y3Rpb24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVs
YXJpdHkoW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51bGFyaXR5KGdyYW51bGFy
aXR5KSwgdG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkpOwogfQogCiAtIChXZWJWaXNp
YmxlUG9zaXRpb24gKilwb3NpdGlvbkF0U3RhcnRPckVuZE9mV29yZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCBlYTMwOTg5MjQ5OGYzZjY0ZWYwZjA2NDhmMzU0NWM1
NTg1MWI5Njk1Li44NTg0YzIzMWZlZjhjOGQ4YjcwNmU4Zjk2ZWQwOGQ3Mzg4NTNkZDUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUZXh0Q29udHJv
bC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1w
bGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCkBAIC0xNTIsNyArMTUzLDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKWNy
ZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmsKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dAogewogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGlzIGlzIG5vdCBhIGNvbnRl
eHR1YWwgZnJhZ21lbnQsIGl0IHdvbid0IGhhbmRsZSB3aGl0ZXNwYWNlIHByb3Blcmx5LgotICAg
IHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3JlKHNlbGYpLT5jcmVhdGVSYW5n
ZSgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqY29yZShzZWxmKSksIHRleHQpLnB0cigp
KTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW0KaW5kZXggODEwMGFiZTZiYmY3ZDg2OThkYTZlYzc1YmQ4YmFmOGYwZWU0
ZDY5MS4uNGExOGRmNDU5YmJkNTkwZTJlMjFiNGYxOTQyMzI4MmZjMjI0YzFiNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC03
OCw5ICs3OCwxMiBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2UgKFVJS2l0RXh0ZW5zaW9ucykK
IAogLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0
bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYp
OworICAgIGF1dG8gcmFuZ2UgPSBjb3JlKHNlbGYpOworICAgIGlmICghcmFuZ2UpCisgICAgICAg
IHJldHVybjsKKwogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOwot
ICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7CisgICAgZnJhbWVTZWxlY3Rpb24uc2V0
U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZSgqcmFuZ2UpKTsKICAgICAKICAgICBXZWJDb3JlOjpU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkNo
YXJhY3RlckdyYW51bGFyaXR5OwogICAgIC8vIFVudGlsIFdlYktpdCBzdXBwb3J0cyB2ZXJ0aWNh
bCBsYXlvdXQsICJkb3duIiBpcyBlcXVpdmFsZW50IHRvICJmb3J3YXJkIGJ5IGEgbGluZSIgYW5k
CkBAIC05MiwxMCArOTUsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0
aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICAgICAgZGlyZWN0
aW9uID0gV2ViVGV4dEFkanVzdG1lbnRCYWNrd2FyZDsKICAgICAgICAgZ3JhbnVsYXJpdHkgPSBX
ZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eTsKICAgICB9Ci0gICAgCisK
ICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFtb3VudDsgaSsrKQogICAgICAgICBmcmFtZVNl
bGVjdGlvbi5tb2RpZnkoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCAo
V2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAg
IAorCiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFy
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwog
ICAgIGlmIChzdGFydC5jb250YWluZXJOb2RlKCkpCkBAIC0xMDYsMTMgKzEwOSwxNiBAQCAtICh2
b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGly
ZWN0aW9uKWRpcmVjdGlvbgogCiAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVj
dGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgUmFuZ2Ug
KnJhbmdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvIHJhbmdlID0gY29yZShzZWxmKTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
biBmcmFtZVNlbGVjdGlvbjsKLSAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UpOwotICAg
IAorICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKnJhbmdl
KSk7CisKICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFtb3VudDsgaSsrKQogICAgICAgICBm
cmFtZVNlbGVjdGlvbi5tb2RpZnkoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25F
eHRlbmQsIChXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uLCBXZWJDb3JlOjpU
ZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICAKKwogICAgIFBvc2l0
aW9uIHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxl
Y3Rpb24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQu
Y29udGFpbmVyTm9kZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9N
T3BlcmF0aW9ucy5tbQppbmRleCA3MWMwNGRiMjI5MzdhMzMwZTFhNDczZjIxM2ZhYzgzYzk1NzMx
ZjBiLi5kM2FlN2Y2ZWY4M2QyMDhmMjY5YjZlMTYyZGJlMTQ1NDYyZGZiOTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtNTIsNiAr
NTIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TGVnYWN5V2ViQXJjaGl2ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NoYWRvd1Jvb3QuaD4KQEAgLTE4NCw3ICsxODUsNyBAQCBAaW1wbGVtZW50YXRpb24g
RE9NUmFuZ2UgKFdlYkRPTVJhbmdlT3BlcmF0aW9ucykKIAogLSAoV2ViQXJjaGl2ZSAqKXdlYkFy
Y2hpdmUKIHsKLSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxl
Z2FjeVdlYkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNvcmUoc2VsZikpXSBhdXRv
cmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVM
ZWdhY3lXZWJBcmNoaXZlOkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgqY29yZShzZWxmKSldIGF1
dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbQppbmRleCBiZDk1YTY2NDhhMzAzMmMwNTdhOTgxZTA5NDY5MDgwZTg4MTA2MzU5Li4yNTRh
NjVhY2QyNjRmM2FhOTk5OGY1ZGQyM2Y4OTRiYjJhNjYyOTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CkBAIC0xMDI1LDExICsxMDI1LDEwIEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBjb3JlKE5TQXJyYXkgKmluY29taW5nUmVzdWx0cywgT3B0aW9uU2V0PFRleHRDCiBzdGF0aWMg
TlNVSW50ZWdlciBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkp
OwotICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQpCisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
blN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVj
dGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5nZSk7
CiB9CiAKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiBjb3JlQ2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbikKQEAgLTExMTAsOCArMTEwOSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlCiAg
ICAgbV9sYXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2FuZGlkYXRlcyA9IHNlbGVjdGlvbjsKIAog
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAg
YXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQoeyAq
bWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwotICAgIGF1dG8gc2VsZWN0aW9uTGVu
Z3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgfSk7CisgICAgYXV0
byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQoKm1ha2VT
aW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3Rh
cnQpKTsKKyAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2lt
cGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKICAgICBh
dXRvIGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS0+ZWRpdG9yKCkuY29u
dGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogICAgIFN0cmluZyBjb250ZXh0Rm9yQ2Fu
ZGlkYXRlUmVxZXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID8gcGxhaW5U
ZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KSA6IFN0cmluZygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBiMzIwOWRiN2Vi
ZTQ0MzliYjM2NmYwZmE1ODI2MTMwMTE1ZTkzZGZhLi5iNTZmNjIxOTc3YTk5YWMyOWY0OWExMGNj
NDEzMDAyYTFmYTI3ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KQEAgLTkzLDYgKzkzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QcmludENvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KQEAgLTgzNyw3ICs4MzgsNyBAQCAt
IChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5n
ZSByYW5nZUlzUmVsYXRpdmVUbzooVwogICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzY29wZUVuZCA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290
Tm9kZSgpKS5lbmQ7CisgICAgYXV0byBzY29wZUVuZCA9IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9vdE5v
ZGUoKSk7CiAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpyZXNvbHZlQ2hhcmFj
dGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1vdmUoc2NvcGVFbmQpIH0s
IHJhbmdlKSk7CiB9CiAKQEAgLTE0NzksNyArMTQ4MCw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRE
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlh
ZmZpCiAKICAgICBhdXRvIGNvcmVDbG9zZVR5cGluZyA9IGNsb3NlVHlwaW5nID8gRnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMgOiBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Ok5vOwogICAgIGF1dG8gY29yZVVzZXJUcmlnZ2VyZWQgPSB1c2VyVHJpZ2dlcmVk
ID8gVXNlclRyaWdnZXJlZCA6IE5vdFVzZXJUcmlnZ2VyZWQ7Ci0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShhZmZpbml0eSksIGNvcmVDbG9z
ZVR5cGluZywgY29yZVVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKGNvcmUocmFuZ2UpKSwgY29yZShhZmZpbml0eSks
IGNvcmVDbG9zZVR5cGluZywgY29yZVVzZXJUcmlnZ2VyZWQpOwogICAgIGlmICghY2xvc2VUeXBp
bmcpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCk7CiB9CkBAIC0xNTQwLDEyICsxNTQxLDIw
IEBAIC0gKE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAoaW50
KXdvcmRPZmZzZXRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0dXJuIGNvcmUo
c2VsZiktPnNlbGVjdGlvbigpLndvcmRPZmZzZXRJblJhbmdlKGNvcmUocmFuZ2UpKTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGNv
cmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlz
Q2FyZXQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBv
bmx5IHdvcmsgaW4gY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiByZW1haW5zIGluIHRoZSBzYW1l
IG5vZGUgYWZ0ZXIgaXQgaXMgZXhwYW5kZWQuCisgICAgcmV0dXJuIHN0ZDo6bWF4PGludD4oMCwg
c2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIGNvcmUocmFuZ2Up
LT5zdGFydE9mZnNldCgpKTsKIH0KIAogLSAoQk9PTClzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQogewotICAgIHJldHVybiBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5z
cGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb3JlKHJhbmdlKSk7CisgICAgcmV0dXJuIHJhbmdlICYm
IGlzU3BhY2VPck5ld2xpbmUoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihtYWtlU2ltcGxlUmFuZ2UoY29yZShyYW5nZSkpLT5lbmQpKS5jaGFyYWN0
ZXJBZnRlcigpKTsKIH0KIAogLSAoTlNBcnJheSAqKXdvcmRzSW5DdXJyZW50UGFyYWdyYXBoCkBA
IC0xODcxLDcgKzE4ODAsNyBAQCAtIChOU1N0cmluZyAqKXN0cmluZ0ZvclJhbmdlOihET01SYW5n
ZSAqKXJhbmdlCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxh
Y2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewogICAg
IGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdt
ZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLnB0
cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFn
bWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21h
cnRSZXBsYWNlIG1hdGNoU3R5bGU6bWF0Y2hTdHlsZV07CiB9CiAKQEAgLTE5NTQsNyArMTk2Myw3
IEBAIC0gKEJPT0wpaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24KIC0gKHZvaWQpX3JlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihCT09M
KXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UKIHsKICAg
ICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVu
dCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5w
dHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJh
Z21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNt
YXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107CiB9CiAKQEAgLTIyNjMsNyArMjI3Miw4IEBAIC0g
KE5TQXJyYXkgKilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFNjYWxlRmFjdG9yOihmbG9hdClw
cmludFNjYWxlRmFjdG9yIHBhZ2VTCiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWVudEZvclRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBraXQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCgqY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLCB0ZXh0KS5wdHIo
KSk7CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdlID8ga2l0KGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiB9CiAKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZvcldlYkFyY2hpdmU6KFdl
YkFyY2hpdmUgKil3ZWJBcmNoaXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KaW5kZXggM2E1YmIwNGJjMzRiODE2Yjk5ZGNlMzNkZDczMDY1ZWViNjRlNTQ4Ni4u
YTE4NTY4ZWY1YjVkZjhhMGFkOWE0Y2U0YzJiNmNlZjY3YzQ4NWViMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTk1LDYgKzE5NSw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUaGVtZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
cldpZGdldC5oPgpAQCAtNzkyOSw4ICs3OTMwLDcgQEAgLSAoRE9NUmFuZ2UgKilET01SYW5nZU9m
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvOihET01SYW5nZSAqKXByZXZpb3UK
IHsKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
cmV0dXJuIGtpdChfcHJpdmF0ZS0+cGFnZS0+cmFuZ2VPZlN0cmluZyhzdHJpbmcsIGNvcmUocHJl
dmlvdXNSYW5nZSksIGNvcmVPcHRpb25zKG9wdGlvbnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChfcHJpdmF0ZS0+cGFnZS0+cmFuZ2VPZlN0cmluZyhzdHJpbmcsIG1ha2VTaW1wbGVSYW5nZShj
b3JlKHByZXZpb3VzUmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucykpKTsKIH0KIAogLSAodm9p
ZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFtZURvY3VtZW50UmVhZHkK
QEAgLTg0NTYsNyArODQ1Niw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFu
Z2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlCiAgICAgICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShzZWxlY3Rpb25B
ZmZpbml0eSksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VT
aW1wbGVSYW5nZSgqY29yZShyYW5nZSkpLCBjb3JlKHNlbGVjdGlvbkFmZmluaXR5KSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405485</attachid>
            <date>2020-07-29 12:35:22 -0700</date>
            <delta_ts>2020-07-29 13:22:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200729123521.patch</filename>
            <type>text/plain</type>
            <size>167659</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjllMDdhODdkYzQ4YTFm
OGFkMjFiY2QzYTJjOGMyZTUxZDE2ZTUyOC4uZWU3MDhhY2Y0OWY3YWYyZDIzYmYzYmZmOWU3Yzc0
YmExM2FjMjhmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ugc3Vy
ZSBwbGF5YmFjayBzdGF0ZSBjb25zdGFudHMgcmVtYWluIG9uIE9zY2lsbGF0b3JOb2RlIGZvciBi
YWNrd2FyZCBjb21wYXRpYmlsaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCAyNzQyMWExZWEwODgxMjkzOGM2ZTk3
ZWU4ZWVkNjEwNzk4ZWI2Zjk2Li5kNGFiNTkzNzU0NTUyOWYzMzdlZTQwNGY3OWJjM2FlN2IzOGIz
MzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKQEAgLTcyMiw3ICs3MjIsNyBAQCBWZWN0b3I8U3RyaW5nPiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJhdGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJh
dAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmFu
Z2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewotICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh0ZXh0UmFuZ2UpLnB0cigpLCBE
T1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcykpCisgICAg
ICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdlLCBE
T1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0
UmFuZ2UpOwpAQCAtMjAxMiw3ICsyMDEyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpy
ZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAg
ICAvLyBBbHNvIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUu
CiAgICAgYXV0byYgZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50
LnNob3VsZFVzZUlucHV0TWV0aG9kKCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5n
ZSkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2VG
b3JQbGFpblRleHRSYW5nZShyYW5nZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KHJlcGxhY2VtZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50
OjpObywgRWRpdG9yOjpTbWFydFJlcGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAppbmRleCAxYzdmZDE0MWVlMTNiNzE3NmM1MzM2YTdkNWE3YWY4ZDI3OWQ4OGRmLi43NzE2MTYy
M2Y3YzBlYzk2YTMxNTU3YmIwYjhmNmY0Mjk1MTUwNDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNTUsNyArNTUsNiBAQAogI2lu
Y2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCiAjaW5jbHVkZSAiTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCi0jaW5jbHVkZSAiUmFu
Z2UuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93
LmgiCkBAIC0xNDQwLDE3ICsxNDM5LDExIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1v
dmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAg
UG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCku
ZG93bnN0cmVhbSgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRl
ZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8gc3RhcnQgYW5kIGVuZCBj
YW4ndCBiZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGlu
ZyBwb3NpdGlvbnMiCi0gICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50
ID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUo
KSwgc3RhcnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5n
ZUNvbXBsaWFudC5kZXByZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKLQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGluZWZmaWNpZW50
IHdheSB0byBwcmVzZXJ2ZSBzdHlsZSBvbiBub2RlcyBpbiB0aGUgcGFyYWdyYXBoIHRvIG1vdmUu
IEl0CiAgICAgLy8gc2hvdWxkbid0IG1hdHRlciB0aG91Z2gsIHNpbmNlIG1vdmVkIHBhcmFncmFw
aHMgd2lsbCB1c3VhbGx5IGJlIHF1aXRlIHNtYWxsLgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudDsKLSAgICAvLyBUaGlzIHVzZWQgdG8gdXNlIGEgdGVybmFyeSBmb3IgaW5p
dGlhbGl6YXRpb24sIGJ1dCB0aGF0IGNvbmZ1c2VkIHNvbWUgdmVyc2lvbnMgb2YgR0NDLCBzZWUg
YnVnIDM3OTEyCiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgIT0gZW5kT2ZQYXJhZ3Jh
cGhUb01vdmUpCi0gICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRv
Y3VtZW50KCksIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKHJhbmdlLmdldCgp
LCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5s
aW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKGRvY3VtZW50KCksIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBl
YXJhbmNlKCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCksIG51bGxwdHIsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2U6Ok5vLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmlu
ZygpKTsKIAogICAgIC8vIEEgbm9uLWVtcHR5IHBhcmFncmFwaCdzIHN0eWxlIGlzIG1vdmVkIHdo
ZW4gd2UgY29weSBhbmQgbW92ZSBpdC4gIFdlIGRvbid0IG1vdmUgCiAgICAgLy8gYW55dGhpbmcg
aWYgd2UncmUgZ2l2ZW4gYW4gZW1wdHkgcGFyYWdyYXBoLCBidXQgYW4gZW1wdHkgcGFyYWdyYXBo
IGNhbiBoYXZlIHN0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNzdlZDY4MDkz
N2IwZjg1ZDVhYTdkNTFhZTkyODgxMGE0YWU5ZTQ4OS4uMWM0YzM5ZmQ5ZGUxMGQ0NDdiZDEwYTJj
NzY1NDlmMTM0Y2RlM2ZiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjk2LDcg
KzY5Niw4IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rp
b24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb21tYW5kLT52aXNp
YmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOworICAgICAgICBhdXRvIHNlbGVjdGlvbiA9
IGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKTsKKyAgICAgICAgU3Ry
aW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShzZWxlY3Rpb24pOwogICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRF
ZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
ICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5
KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KQEAgLTcyNSw3ICs3MjYsNyBA
QCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4
dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBz
bWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0FjdGlvbik7CisgICAgcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4
dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRp
dGluZ0FjdGlvbik7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVk
UmFuZ2UoKQpAQCAtMjEyMCw4ICsyMTIxLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAog
ICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0
aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6
Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVudE9m
ZnNldCk7Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJh
c2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwotICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVk
UmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6Tm8pOworICAgICAgICAgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqYmFzZU5v
ZGUsIHN0YXJ0IH0sIHsgKmJhc2VOb2RlLCBlbmQgfSB9OworICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
Mzg5Miw5ICszODkzLDcgQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiBTdHJpbmcgRWRpdG9yOjpzdHJpbmdG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rp
b24uaXNDYXJldCgpCi0gICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0
KCkpCi0gICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkp
OworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBv
c2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFjYW5kaWRh
dGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCkBAIC00MTkwLDggKzQxODksNyBAQCB2b2lk
IEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2Vw
dGVkQ2FuZGlkYXRlKQogICAgIH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0KGFjY2VwdGVkQ2Fu
ZGlkYXRlLnJlcGxhY2VtZW50LCBudWxscHRyKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gaW5zZXJ0
ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0
V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUu
cmVwbGFjZW1lbnQubGVuZ3RoKCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAg
IGlmIChpbnNlcnRlZENhbmRpZGF0ZVJhbmdlKQorICAgIGlmIChhdXRvIGluc2VydGVkQ2FuZGlk
YXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3Vu
ZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2Vt
ZW50Lmxlbmd0aCgpLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkKICAgICAgICAgYWRk
TWFya2VyKCppbnNlcnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRD
YW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKIAogICAgIG1faXNIYW5k
bGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAppbmRleCA0NDBmY2Y2ZmE1ZmZmMWZkYjgyZTZkNTQ1MjI5MTBlNjVjNmE5
MTNjLi42ZmY5NDM0NmFlNTE0NTA2ZjcxNWE1OWRkY2ZjZDlmYWU2YTg3Nzc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE4NCw3ICsxODQsOCBAQCBzdGF0
aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaQogICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5p
dHkoKTsKICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2UpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShj
cmVhdGVMaXZlUmFuZ2UoKm5ld1JhbmdlKS5wdHIoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKCpuZXdSYW5nZSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGlnbm9yZSB0aGUgcmV0dXJu
IHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBoZXJlPwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0zNTQsOSArMzU1LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICBhdXRvIG1h
cmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRv
JiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKICAgICBpZiAobWFyayAmJiBmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVj
dGlvbi5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywg
KmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Ci0gICAgICAgIEFTU0VSVChzZWxl
Y3RlZCk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWQpCisgICAgICAgIGlmICghc2VsZWN0aW9uLnNl
dFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3IoKS5zZWxlY3Rl
ZFJhbmdlKCkpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGZyYW1lLmVkaXRv
cigpLnBlcmZvcm1EZWxldGUoKTsKQEAgLTEwNTYsNyArMTA1NSw4IEBAIHN0YXRpYyBib29sIGV4
ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0CiAgICAgICAgIFBBTDo6c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKSkucHRyKCksIERPV05TVFJF
QU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9u
KSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwor
ICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBzZXRT
ZWxlY3RlZFJhbmdlIGhlcmU/CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1NzEsNyArMTU3
MSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVGb3JtYXRCbG9jayhGcmFtZSYgZnJhbWUsIEV2ZW50
KikKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZU9yT3JwaGFuZWQoKSB8
fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFu
ZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOworICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVudCA9IEZv
cm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChzZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpKTsKICAgICBpZiAoIWZvcm1hdEJsb2NrRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgcmV0dXJuIGZvcm1hdEJsb2NrRWxlbWVudC0+bG9jYWxO
YW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
aW5kZXggZTQzNmM3ZmRlMjFkYmIyMDM0YjU5YzViOTUyODlmYTNjZmVkNzBhOS4uYmY1MmUwYzA0
NGI3Y2FjMzFmMTQ5ZDRhMjYzNDI5NWIxMmMyNGVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTY4LDE0ICs2NywxNCBAQCB2b2lkIEZv
cm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kLAogICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBzdGFydC5kZXByZWNhdGVkTm9kZSgp
IDogc3BsaXRUcmVlVG9Ob2RlKCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCAqbm9kZVRvU3BsaXRU
byk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckluc2VydGlvblBvc2l0aW9uID0gb3V0ZXJC
bG9jazsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0
LCBlbmRPZlNlbGVjdGlvbik7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFy
dCwgZW5kT2ZTZWxlY3Rpb24pOwogICAgIEVsZW1lbnQqIHJlZk5vZGUgPSBlbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KGVuZCk7CiAgICAgRWxlbWVudCogcm9vdCA9IGVkaXRhYmxlUm9vdEZvclBv
c2l0aW9uKHN0YXJ0KTsKICAgICAvLyBSb290IGlzIG51bGwgZm9yIGVsZW1lbnRzIHdpdGggY29u
dGVudGVkaXRhYmxlPWZhbHNlLgogICAgIGlmICghcm9vdCB8fCAhcmVmTm9kZSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmIChpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhyZWZOb2RlLT50YWdRTmFt
ZSgpKSAmJiBzdGFydCA9PSBzdGFydE9mQmxvY2soc3RhcnQpCi0gICAgICAgICYmIChlbmQgPT0g
ZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oKnJlZk5vZGUs
IHJhbmdlLmdldCgpKSkKKyAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2NrKGVuZCkgfHwgKHJh
bmdlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oKnJlZk5vZGUsICpyYW5nZSkpKQog
ICAgICAgICAmJiByZWZOb2RlICE9IHJvb3QgJiYgIXJvb3QtPmlzRGVzY2VuZGFudE9mKCpyZWZO
b2RlKSkgewogICAgICAgICAvLyBBbHJlYWR5IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkg
Y29udGFpbnMgdGhlIGN1cnJlbnQgcGFyYWdyYXBoCiAgICAgICAgIGlmIChyZWZOb2RlLT5oYXNU
YWdOYW1lKHRhZ05hbWUoKSkpCkBAIC05OSwyMyArOTgsMjIgQEAgdm9pZCBGb3JtYXRCbG9ja0Nv
bW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCwKICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihsYXN0UGFyYWdyYXBoSW5CbG9j
a05vZGUpOwogfQogICAgIAotRWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9y
Rm9ybWF0QmxvY2tDb21tYW5kKFJhbmdlKiByYW5nZSkKK0VsZW1lbnQqIEZvcm1hdEJsb2NrQ29t
bWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250
YWluZXIoKTsKLSAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IgJiYgIWlzRWxlbWVudEZvckZvcm1h
dEJsb2NrKGNvbW1vbkFuY2VzdG9yKSkKKyAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKTsKKyAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IgJiYg
IWlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbW1vbkFuY2VzdG9yLmdldCgpKSkKICAgICAgICAg
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwotCi0gICAgaWYg
KCFjb21tb25BbmNlc3RvcikKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVt
ZW50ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAg
IGF1dG8gcm9vdEVkaXRhYmxlRWxlbWVudCA9IHJhbmdlLT5zdGFydC5jb250YWluZXItPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFZGl0YWJsZUVsZW1lbnQgfHwgY29tbW9u
QW5jZXN0b3ItPmNvbnRhaW5zKHJvb3RFZGl0YWJsZUVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBjb21tb25BbmNlc3Rvci0+aXNFbGVtZW50Tm9kZSgpID8g
ZG93bmNhc3Q8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
JmRvd25jYXN0PEVsZW1lbnQ+KCpjb21tb25BbmNlc3Rvcik7CiB9CiAKIGJvb2wgaXNFbGVtZW50
Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCmluZGV4IDc5YmVkYWQxN2UwZTY0Yzgy
NTgyMDE2ZDUyZTliOWU5NmYyNDIxYzcuLmRhMmFkNTA0YmMxMDUzNzk4NDRlN2NhYTUwMjUwNmQx
NTExNjI3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
aApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBwcmVzZXJ2ZXNUeXBp
bmdTdHlsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0YXRpYyBF
bGVtZW50KiBlbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKFJhbmdlKik7CisgICAgc3RhdGlj
IEVsZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+Jik7CiAgICAgYm9vbCBkaWRBcHBseSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQXBw
bHk7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggMGQyOGNjZGRhMDQxZGE1ZjYwMmFmZWY0MGYxODJmMDNjNzQxYWFkZi4uMGEyZDRm
YzM3ZTgyOTc4MTI1ZjM0ODQ5MDBhZDAzNGM3YWE2ZDQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIwNSwxMiArMjA1LDYgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSwg
RVVzZXJUcmlnZ2UKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MsIGFmZmlu
aXR5LCBtX3NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucyh1c2VyVHJpZ2dlcmVkKSk7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhj
b25zdCBSYW5nZSogcmFuZ2UpCi17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBy
YW5nZSA/IFZpc2libGVTZWxlY3Rpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpIDogVmlzaWJsZVNlbGVjdGlvbigpOwotICAgIHNldFNlbGVjdGlvbihzZWxl
Y3Rpb24pOwotfQotCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRpb24g
JmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSwgRVVzZXJU
cmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25zdCBib29sIHNlbGVjdGlvbkhhc0Rp
cmVjdGlvbiA9IHRydWU7CkBAIC0yMDM0LDExICsyMDI4LDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNlbGVjdEFsbCgpCiAgICAgfQogfQogCi1ib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbG9zZVR5
cGluZyBjbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK2Jvb2wgRnJh
bWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZyBjbG9zZVR5cGlu
ZywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCkuZG9jdW1lbnQoKSk7CisKKyAgICBp
ZiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSByYW5nZS0+ZW5kLmNvbnRhaW5lci5w
dHIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdT
ZWxlY3Rpb24oKnJhbmdlLCBhZmZpbml0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaAppbmRleCAyMTFjYThiYjM2ZDgwMjZkNGIyYTBiMGVlMWI2M2FjZmI5NjdiYWQ4
Li5lZGQ0YmFhODI4N2Q4MTFiZjNkODE0NWU5YzlmYjJlYjZhYzMwN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JvbGxBbGlnbm1lbnQuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKQEAgLTE0NCw3ICsx
NDMsNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFi
bGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBtb3ZlVG8oY29uc3QgUmFuZ2UqKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdn
ZXJlZCk7CiAgICAgdm9pZCBtb3ZlVG8oY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2Vy
VHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CkBAIC0xNTUsNyArMTUzLDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiA9IGRlZmF1bHRTZXRTZWxlY3Rp
b25PcHRpb25zKCksIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQoKSwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCwgVGV4dEdyYW51bGFyaXR5ID0gVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAKICAgICBlbnVtIGNsYXNzIFNob3VsZENsb3NlVHlwaW5nIDogYm9vbCB7IE5vLCBZZXMg
fTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZm
aW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2Vy
ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRy
aWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vs
ZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgd2ls
bEJlUmVtb3ZlZEZyb21GcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBmODJmMzk1Y2E1MmJkNzYwMmVmZWNiNzZm
ZTNkMGFiMzlhMDMyNjBiLi42OWU3ZTMwZTY1YTk2MTYwMjVlZDI0OTI1OTIxYjMwY2RmN2IxN2Q2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2Vt
ZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAg
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGV2ZW50
LT50ZXh0KCkpOworICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCmluZGV4IDkyMGQ2YmRjMzI3MjNlMmQ4MjlhNGE5NTgwNDAwNmZkMjlmNzZlMWIu
LmE4MDdmNTYzZTZlZDIwZWRlMDdhNzBkNDRjYzFhZTVjMjcyMDQwYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE4MzMsMTEgKzE4MzMsMTEgQEAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdnAsIFQKICAgICB9CiB9CiAKLVJlZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4
dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFRoaXMgaXMgcGFydGljdWxhcmx5IGluZWZmaWNp
ZW50LiAgV2UgY291bGQgZWFzaWx5IG9idGFpbiB0aGUgYW5zd2VyIHdpdGggdGhlIGJvdW5kYXJp
ZXMgY29tcHV0ZWQgYmVsb3cuCiAgICAgaWYgKCF3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
dnAsIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2Qm91
bmRhcnk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeTsKQEAgLTE4ODksMTYgKzE4
ODksMTYgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KIAogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKHBy
ZXZCb3VuZGFyeS5pc051bGwoKSB8fCBuZXh0Qm91bmRhcnkuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHZw
IDwgcHJldkJvdW5kYXJ5IHx8IHZwID4gbmV4dEJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBSYW5nZTo6
Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRv
Y3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKKyAgICByZXR1cm4gbWFrZVNp
bXBsZVJhbmdlKHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKIH0KIAogc3RkOjpwdHJkaWZm
X3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBiKQpAQCAtMTk0NCwxOSArMTk0NCwxNCBAQCB2b2lkIGNoYXJh
Y3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hh
cjMyJiBvbmVBZnRlcgogICAgIHR3b0JlZm9yZSA9IGNoYXJhY3RlcnNbMl07CiB9CiAKLVJlZlB0
cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25E
aXJlY3Rpb246OkJhY2t3YXJkKTsKLQotICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgLy8gV2Ug
Y291bGQgYmUgYXQgdGhlIHN0YXJ0IG9mIGEgd29yZCwgdHJ5IGZvcndhcmQuCi0gICAgICAgIHJh
bmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAg
ICB9Ci0KLSAgICBpZiAocmFuZ2UpCisgICAgaWYgKGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFy
aXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkKKyAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKSkKICAgICAgICAgcmV0dXJuIHJhbmdlOwogCiAgICAgVmlzaWJsZVBvc2l0
aW9uIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwpAQCAtMTk2NSwxMyArMTk2MCw3IEBAIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24pCiAgICAgfSB3aGlsZSAoY3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFh
dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjdXJyZW50UG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6
V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7CiAgICAgaWYg
KGN1cnJlbnRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9z
aXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0
eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotCi0gICAg
aWYgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdl
OjpjcmVhdGUocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1
bWVudCgpLCBjdXJyZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAgICAgQVNTRVJUKHJhbmdl
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmFuZ2U7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5n
ZShjdXJyZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGNsb3Nl
c3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
KQpAQCAtMTk4MiwxMSArMTk3MSwxMSBAQCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3Vu
ZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAg
IHJlc3VsdCA9IHBvc2l0aW9uOwogICAgIH0gZWxzZSBpZiAod2l0aGluVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAvLyBUaGUgcG9zaXRpb24gbGllcyB3
aXRoaW4gYSB3b3JkLgotICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICAgICAgcmVzdWx0
ID0gd29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChkaXN0YW5jZUJldHdl
ZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkgPiAxKQotICAgICAgICAgICAgcmVzdWx0ID0g
d29yZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBl
bmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6
V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5zdGFy
dCk7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBvc2l0aW9uLCBy
ZXN1bHQpID4gMSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24od29yZFJhbmdlLT5lbmQpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdEJv
dW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKSB7CiAgICAgICAgIC8vIFRoZSBw
b3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KICAgICAgICAgcmVzdWx0ID0gcG9zaXRp
b247CkBAIC0yMDAyLDcgKzE5OTEsNyBAQCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3Vu
ZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJz
SW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
LCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0lu
RGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwg
aW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICBQb3NpdGlvbiBlbmQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwpAQCAtMjAxOCwx
MCArMjAwNywxMCBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRp
cmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQbwogICAgIGlmIChkaXJlY3Rpb24g
PT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0
eShlbmQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQpKQogICAgICAgICBlbmQgPSBlbmRPZldvcmQoZW5kKS5kZWVwRXF1aXZhbGVu
dCgpOwogCi0gICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfSAgICAKIAotUmVmUHRyPFJhbmdlPiByYW5nZUV4
cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBw
b3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpCiB7
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBv
c2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDI5LDggKzIwMTgs
NyBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVy
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcwogICAgICAgICBzdGFydCA9IHN0YXJ0LnByZXZp
b3VzKENoYXJhY3Rlcik7CiAgICAgICAgIGVuZCA9IGVuZC5uZXh0KENoYXJhY3Rlcik7CiAgICAg
fQotICAgIAotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKIH0KIAogc3RkOjpwYWlyPFZpc2libGVQb3NpdGlv
biwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldpdGhvdXRDcm9z
c2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTIwNDEsOSArMjAy
OSw5IEBAIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldvcmRCb3VuZGFyeT4gd29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3JvCiAgICAgaWYgKHdpdGhpblRleHRVbml0T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKICAgICAgICAgYXV0byBhZGp1c3RlZFBvc2l0
aW9uID0gcG9zaXRpb247CiAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKLSAgICAgICAgICAgIGFkanVz
dGVkUG9zaXRpb24gPSB3b3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGFk
anVzdGVkUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5z
dGFydCk7CiAgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBvc2l0aW9u
LCBhZGp1c3RlZFBvc2l0aW9uKSA+IDEpCi0gICAgICAgICAgICAgICAgYWRqdXN0ZWRQb3NpdGlv
biA9IHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFBv
c2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4geyBhZGp1c3RlZFBvc2l0aW9uLCBXaXRoaW5Xb3JkQm91
bmRhcnk6OlllcyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVVuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmlu
ZGV4IDFhNzgzMmViMzdiODE5OTViOTFiMTAzMGU5NGIxNTRhNDNkNjMwZGIuLjQyZTYzNzg5NWVl
Yzc5YmQ4YzIyYjZkYzc4OTU0N2EyYjhhOWFlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlVW5pdHMuaApAQCAtMTAxLDEzICsxMDEsMTMgQEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Vu
ZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
IFdFQkNPUkVfRVhQT1JUIGJvb2wgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09S
RV9FWFBPUlQgYm9vbCB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9F
WFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbmNs
b3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdy
YW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9FWFBPUlQgc3RkOjpwdHJk
aWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3Jk
Qm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKTsKIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUsIFVDaGFyMzIm
IHR3b0JlZm9yZSk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRB
cm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBy
YW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlv
bkRpcmVjdGlvbik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VF
eHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCk7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3Jk
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1Rv
RXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogZW51bSBjbGFzcyBXaXRoaW5Xb3JkQm91bmRh
cnkgOiBib29sIHsgTm8sIFllcyB9OwogV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFZpc2libGVQ
b3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldpdGhv
dXRDcm9zc2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCA2YjA4ZmQyZGYxOThhYWVm
Y2JjOTkyMjIzNTk5NWI1NjJlNmQ3MmRmLi4xNGZhNjg4MmM2NzM2YzczZmQ2MzQ0MDhmZWNkNzhh
NDJkYmFhNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCkBAIC0xMjgsNyArMTI4LDcgQEAgT3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXMKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICBSZWZQ
dHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4
dFJhbmdlOwogCiAgICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUp
KSB7CiAgICAgICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVz
dFJlc3VsdC5sb2NhbFBvaW50KCksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IDJkZDA1ZTE2NWIwYjZkZDQ4ZDZj
NmY2MDM3MmU3ZDVjZWY4Y2E3ZDIuLjNjMTIzMTlmYWIwODY3NTk1OWU1M2NkOGU3OWFiMzQzZDEx
YTdiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5n
ZS5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIK
ICNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjgzLDExICsyODIsMTEgQEAgT3B0aW9u
YWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50ID0gY2hh
cmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5k
KSk7CiAgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKIAotICAgIFJlZlB0cjxSYW5nZT4g
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOwotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KCpmdWxsQ2hhcmFjdGVyUmFu
Z2UpOworICAgIGF1dG8gZnVsbENoYXJhY3RlclJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShwYXJh
Z3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWlu
VGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UpOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBh
ZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2Vs
ZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pLmdldCgpLmhpZ2hsaWdodFJhbmdlOwogCi0gICAgcmV0
dXJuIHsgeyByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxp
Z2h0UmFuZ2UpLCBuaWwgfSB9OworICAgIHJldHVybiB7IHsgcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KGZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UpLCBuaWwgfSB9OwogCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCkBAIC0zNDEsMTEgKzM0MCw3IEBAIE9wdGlvbmFsPHN0
ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VBdEhpdFRlCiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0Zvckxp
bmVSdWxlcy5zdGFydCgpOwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4K
LSAgICAgICAgYXV0byBleHBhbmRlZFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9u
QnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWV4cGFuZGVkUmFuZ2Up
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IHsgKmV4cGFuZGVkUmFuZ2UgfTsKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTAp
OwogCiAgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
CiAgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShmdWxs
Q2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBwb3NpdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThl
NjllYTU5YjU4NmI3Yi4uOWVmMjBjNjM2YTUwYjljMmMzYzM2OTMwNzhhYTdkNWNhYzUzMTlhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC05NCwx
MCArOTQsMTIgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRh
Y2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBvdXRUeXBlcy5hcHBlbmQo
UGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKICAgICBvdXREYXRhLmFwcGVuZChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5vcmlnaW5JZGVudGlmaWVy
Rm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIoKSk7CiAKLSAgICBpZiAo
YXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShl
bGVtZW50UmFuZ2UpLmdldCgpKSkgewotICAgICAgICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9
IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpKSB7Ci0gICAgICAgICAgICBvdXRUeXBl
cy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOwotICAgICAgICAgICAgb3V0RGF0YS5hcHBl
bmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICBpZiAo
ZWxlbWVudFJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGUoKmVsZW1lbnRSYW5nZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGRhdGEg
PSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSkgeworICAgICAgICAgICAgICAgIG91
dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CisgICAgICAgICAgICAgICAgb3V0
RGF0YS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5nZXQoKSkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCAyODczM2VlZWEzNzZjZjhm
ZTA4MTc1NDQ3MGViMzMxODU0YWRlNDMwLi4zNGFhN2FiZjMzZjc0NGRlMDdkOGU5OWU2ZDVkM2Y1
ZWM0MjBlMmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dl
YkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNjY5LDcgKzY2OSw3IEBAIGJvb2wgV2ViQ29udGVu
dFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFhbGxv
d1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIFt0ZXh0IHByZWNv
bXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKSk7CisgICAgYWRkRnJhZ21lbnQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhD
YW5vbmljYWxNYXBwaW5nXSkpOwogCiAgICAgbWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dCA9IHRy
dWU7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCmluZGV4IGQ2MDlmMjJjODRmMGNmNzk4MDBhYTkzZDRi
MjBiZjgyZDQ4MDI1MjMuLjdjYjY1OTRmYWQ3OGFmODkwMzJmZGQ1ZGU4NmY4ZGE0NTVmZTFmNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJH
dGsuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWlu
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIHRleHQpKTsKKyAgICBhZGRGcmFnbWVudChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQsIHRleHQpKTsKIAogICAgIG1hZGVGcmFnbWVudEZy
b21QbGFpblRleHQgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggMGI3YzI2MjUzYTAwODJlM2M1
NGFlZWZlYTA2MTYzMjRlNjI0OGM3YS4uOWRkNDFkNjM2NjUxMmZkMzg1OTM3YTc2MDhiZDNmYzli
NWI5MGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9y
TGliV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJX
UEUuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzCiAKICAgICBp
ZiAodHlwZXMuY29udGFpbnMoInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIpKSB7CiAgICAgICAg
IGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFzdGVib2FyZC5yZWFkU3RyaW5n
KCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcmFn
bWVudEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hh
cnNldD11dGYtOCIpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4
IDdmYTM1NmI5ZjBhYTk2YjBlYTk1NDZhZGVjZmNlNWJkYzhhMWIxM2MuLjg3NjEyMGJiMDliMTJl
MDllNGRlY2E1OGU1NTRkMzAyNzAxZWY0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAtMTMxLDcgKzEzMSw3IEBA
IE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlVG9Qb3NpdGlvbiA9
IG1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9z
aXRpb24pOworICAgIGF1dG8gcmFuZ2VUb1Bvc2l0aW9uID0gbWFrZVNpbXBsZVJhbmdlKGZ1bGxD
aGFyYWN0ZXJSYW5nZS0+c3RhcnQsIHBvc2l0aW9uKTsKICAgICBpZiAoIXJhbmdlVG9Qb3NpdGlv
bikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCmluZGV4IGJmZjEzMjBkMzY5ZjgyZWRkZTJlMTE1ZTA3YTg1NGQxZDMzMWJiMTcuLmVjMmQ5
YjQ3OGFmYzJiOTYyNTQzNzI1ZTZiMThhOGI5NWMzOGY5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKQEAgLTMzMSw5ICszMzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbk1TT0xp
c3QgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBSZXNvbHZlVVJMcyB1cmxzVG9SZXNvbHZlLCBT
ZXJpYWxpemVDb21wb3NlZFRyZWUgc2VyaWFsaXplQ29tcG9zZWRUcmVlLAotICAgIEFubm90YXRl
Rm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25N
b2RlIHN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlLCBNU09MaXN0TW9kZSBtc29M
aXN0TW9kZSwgYm9vbCBuZWVkc1Bvc2l0aW9uU3R5bGVDb252ZXJzaW9uLCBOb2RlKiBoaWdoZXN0
Tm9kZVRvQmVTZXJpYWxpemVkKQotICAgIDogTWFya3VwQWNjdW11bGF0b3Iobm9kZXMsIHVybHNU
b1Jlc29sdmUpCitpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgVmVj
dG9yPE5vZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHJlc29sdmVVUkxzLCBTZXJpYWxpemVDb21w
b3NlZFRyZWUgc2VyaWFsaXplQ29tcG9zZWRUcmVlLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFu
bm90YXRlLCBTdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSBzdGFuZGFyZEZvbnRG
YW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgTVNPTGlzdE1vZGUgbXNvTGlzdE1vZGUsIGJvb2wgbmVl
ZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwgTm9kZSogaGlnaGVzdE5vZGVUb0JlU2VyaWFsaXpl
ZCkKKyAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCByZXNvbHZlVVJMcykKICAgICAsIG1f
c3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChlbmQpCiAgICAgLCBtX2Fubm90YXRlKGFubm90YXRl
KQpAQCAtODM1LDcgKzgzNCw3IEBAIHN0YXRpYyBOb2RlKiBoaWdoZXN0QW5jZXN0b3JUb1dyYXBN
YXJrdXAoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYKICAgICByZXR1cm4g
c3BlY2lhbENvbW1vbkFuY2VzdG9yOwogfQogCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgUmVzb2x2ZVVSTHMgdXJsc1Rv
UmVzb2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNlcmlhbGl6ZUNvbXBvc2VkVHJlZSwKK3N0
YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFZlY3RvcjxOb2RlKj4q
IG5vZGVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJMcywgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNl
cmlhbGl6ZUNvbXBvc2VkVHJlZSwKICAgICBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRl
LCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFN0YW5kYXJk
Rm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlIHN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRp
b25Nb2RlLCBNU09MaXN0TW9kZSBtc29MaXN0TW9kZSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIjxiciBjbGFzcz1cIiIgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgIlwiPiIp
KTsKQEAgLTg2Miw3ICs4NjEsNyBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdW
aXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAogCiAgICAgTm9k
ZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKHN0
YXJ0LCBlbmQsICpjb21tb25BbmNlc3RvciwgYW5ub3RhdGUpOwogCi0gICAgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3IgYWNjdW11bGF0b3Ioc3RhcnQsIGVuZCwgbm9kZXMsIHVybHNUb1Jlc29sdmUs
IHNlcmlhbGl6ZUNvbXBvc2VkVHJlZSwgYW5ub3RhdGUsIHN0YW5kYXJkRm9udEZhbWlseVNlcmlh
bGl6YXRpb25Nb2RlLCBtc29MaXN0TW9kZSwgbmVlZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwg
c3BlY2lhbENvbW1vbkFuY2VzdG9yKTsKKyAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBhY2N1
bXVsYXRvcihzdGFydCwgZW5kLCBub2RlcywgcmVzb2x2ZVVSTHMsIHNlcmlhbGl6ZUNvbXBvc2Vk
VHJlZSwgYW5ub3RhdGUsIHN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlLCBtc29M
aXN0TW9kZSwgbmVlZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwgc3BlY2lhbENvbW1vbkFuY2Vz
dG9yKTsKIAogICAgIFBvc2l0aW9uIHN0YXJ0QWRqdXN0ZWRGb3JJbnRlcmNoYW5nZU5ld2xpbmUg
PSBzdGFydDsKICAgICBpZiAoYW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVz
ICYmIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcih2aXNpYmxlU3RhcnQpKSB7CkBAIC05MzQs
OSArOTMzLDEwIEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVh
cmFuY2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsCiAgICAgcmV0dXJuIGFjY3VtdWxh
dG9yLnRha2VSZXN1bHRzKCk7CiB9CiAKLVN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZShjb25zdCBSYW5nZSYgcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzIGNvbnZl
cnRCbG9ja3NUb0lubGluZXMsIFJlc29sdmVVUkxzIHVybHNUb1Jlc2x2ZSkKK1N0cmluZyBzZXJp
YWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBD
b252ZXJ0QmxvY2tzVG9JbmxpbmVzIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJlc29sdmVVUkxz
IHJlc29sdmVVUkxzKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZUludGVybmFsKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24o
KSwgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywKKyAgICBy
ZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UuZW5kKSwKKyAgICAgICAgbm9kZXMsIHJlc29sdmVVUkxzLCBTZXJpYWxpemVD
b21wb3NlZFRyZWU6Ok5vLAogICAgICAgICBhbm5vdGF0ZSwgY29udmVydEJsb2Nrc1RvSW5saW5l
cywgU3RhbmRhcmRGb250RmFtaWx5U2VyaWFsaXphdGlvbk1vZGU6OktlZXAsIE1TT0xpc3RNb2Rl
OjpEb05vdFByZXNlcnZlKTsKIH0KIApAQCAtMTA0Myw5ICsxMDQzLDkgQEAgUmVmPERvY3VtZW50
RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKLVN0cmluZyBzZXJpYWxpemVG
cmFnbWVudChjb25zdCBOb2RlJiBub2RlLCBTZXJpYWxpemVkTm9kZXMgcm9vdCwgVmVjdG9yPE5v
ZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHVybHNUb1Jlc29sdmUsIFZlY3RvcjxRdWFsaWZpZWRO
YW1lPiogdGFnTmFtZXNUb1NraXAsIFNlcmlhbGl6YXRpb25TeW50YXggc2VyaWFsaXphdGlvblN5
bnRheCkKK1N0cmluZyBzZXJpYWxpemVGcmFnbWVudChjb25zdCBOb2RlJiBub2RlLCBTZXJpYWxp
emVkTm9kZXMgcm9vdCwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHJlc29sdmVV
UkxzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBTZXJpYWxpemF0aW9u
U3ludGF4IHNlcmlhbGl6YXRpb25TeW50YXgpCiB7Ci0gICAgTWFya3VwQWNjdW11bGF0b3IgYWNj
dW11bGF0b3Iobm9kZXMsIHVybHNUb1Jlc29sdmUsIHNlcmlhbGl6YXRpb25TeW50YXgpOworICAg
IE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCByZXNvbHZlVVJMcywgc2VyaWFs
aXphdGlvblN5bnRheCk7CiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGNv
bnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpLCByb290LCB0YWdOYW1lc1RvU2tpcCk7CiB9CiAKQEAgLTEx
MTIsMjAgKzExMTIsMTYgQEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKiBub2RlKQogICAg
IHJldHVybiBpc1RhYlNwYW5UZXh0Tm9kZShmaXJzdENoaWxkLT5maXJzdENoaWxkKCkpICYmIHNl
Y29uZENoaWxkLT5pc1RleHROb2RlKCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2
ZXNOZXdsaW5lKGNvbnN0IFJhbmdlJiBjb250ZXh0KQorc3RhdGljIGJvb2wgY29udGV4dFByZXNl
cnZlc05ld2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiB7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uKGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBOb2RlKiBjb250
YWluZXIgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBp
ZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNl
cnZlTmV3bGluZSgpOworICAgIGF1dG8gY29udGFpbmVyID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSkuZGVlcEVxdWl2YWxlbnQoKS5j
b250YWluZXJOb2RlKCk7CisgICAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXItPnJlbmRl
cmVyKCkgJiYgY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgp
OwogfQogCi1SZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5n
ZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9j
dW1lbnQoKTsKLSAgICBSZWY8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0
YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwpAQCAtMTE2MSwxNCArMTE1NywxNCBAQCBSZWY8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiB0ZXh0KQogICAgIH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFn
cmFwaHMuIEV4dHJhIGxpbmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAg
IE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOwor
ICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250
ZXh0KS0+Zmlyc3ROb2RlKCkpOwogICAgIEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVu
dD4oYmxvY2tOb2RlKTsKICAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9j
a05vZGUKICAgICAgICAgJiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYg
IWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFt
ZShodG1sVGFnKQotICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihj
b250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2woY29udGV4dC5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBi
bG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29udGV4dC5zdGFydCkpOworICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4
dEZvcm1Db250cm9sKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7
CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVu
dHJpZXMoJ1xuJyk7CiAgICAgc2l6ZV90IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuaAppbmRleCA4NjU2N2Y0NTc4MGFhYmE1MWIzZWQ4MmEwOWE1MWUyMjAyNmEw
MjZiLi5mZmEzMjdlOWVlY2U1NWRlNTdmMjQ0Y2U4YjVhYTJmZWVkOGI2NGRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmgKQEAgLTQ0LDExICs0NCwxMiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhU
TUxFbGVtZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUHJlc2VudGF0aW9u
U2l6ZTsKIGNsYXNzIFF1YWxpZmllZE5hbWU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFZpc2libGVT
ZWxlY3Rpb247CiAKK3N0cnVjdCBQcmVzZW50YXRpb25TaXplOworc3RydWN0IFNpbXBsZVJhbmdl
OworCiB2b2lkIHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYs
IEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz4mJik7CiB2b2lkIHJlbW92ZVN1YnJlc291
cmNlVVJMQXR0cmlidXRlcyhSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwgV1RGOjpGdW5jdGlvbjxi
b29sKGNvbnN0IFVSTCYpPiBzaG91bGRSZW1vdmVVUkwpOwogCkBAIC01Nyw3ICs1OCw3IEBAIGVu
dW0gY2xhc3MgTVNPTGlzdFF1aXJrcyA6IGJvb2wgeyBDaGVja0lmTmVlZGVkLCBEaXNhYmxlZCB9
OwogU3RyaW5nIHNhbml0aXplTWFya3VwKGNvbnN0IFN0cmluZyYsIE1TT0xpc3RRdWlya3MgPSBN
U09MaXN0UXVpcmtzOjpEaXNhYmxlZCwgT3B0aW9uYWw8V1RGOjpGdW5jdGlvbjx2b2lkKERvY3Vt
ZW50RnJhZ21lbnQmKT4+IGZyYWdtZW50U2FuaXRpemVyID0gV1RGOjpudWxsb3B0KTsKIFN0cmlu
ZyBzYW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21l
bnQ+JiYsIERvY3VtZW50JiwgTVNPTGlzdFF1aXJrcywgY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1h
cmt1cCk7CiAKLVdFQkNPUkVfRVhQT1JUIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOworV0VCQ09S
RV9FWFBPUlQgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29u
c3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiBXRUJDT1JFX0VY
UE9SVCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3Vt
ZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2Vy
Q29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBFeGNlcHRpb25PcjxSZWY8
RG9jdW1lbnRGcmFnbWVudD4+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoRWxlbWVu
dCYsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBQYXJzZXJDb250ZW50UG9saWN5KTsKIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQoRG9j
dW1lbnQmLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VN
SU1FVHlwZSk7CkBAIC03Miw3ICs3Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlcGxhY2VDaGls
ZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUmVmPERvY3VtZW50RnJhZ21lCiBlbnVt
IGNsYXNzIFJlc29sdmVVUkxzIDogdWludDhfdCB7IE5vLCBZZXMsIFllc0V4Y2x1ZGluZ0xvY2Fs
RmlsZVVSTHNGb3JQcml2YWN5IH07CiBlbnVtIGNsYXNzIENvbnZlcnRCbG9ja3NUb0lubGluZXMg
OiB1aW50OF90IHsgTm8sIFllcyB9OwogZW51bSBjbGFzcyBTZXJpYWxpemVDb21wb3NlZFRyZWUg
OiB1aW50OF90IHsgTm8sIFllcyB9OwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBu
dWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6
Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywg
UmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVmVj
dG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tz
VG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOwogU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
LCBSZXNvbHZlVVJMcyA9IFJlc29sdmVVUkxzOjpObywgU2VyaWFsaXplQ29tcG9zZWRUcmVlID0g
U2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyKTsKIAog
ZW51bSBjbGFzcyBTZXJpYWxpemVkTm9kZXMgOiB1aW50OF90IHsgU3VidHJlZUluY2x1ZGluZ05v
ZGUsIFN1YnRyZWVzT2ZDaGlsZHJlbiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAppbmRleCAwMWFiOTE3ZDBkYzk3OGMz
MWZlZmY3YTlhMDkwY2QwMmJmMWRkOGQ2Li5hNWJlMDcxZTM2ODYwNzdlZTM2ZDIxZTM1YTU4Mzk4
MDRkOTg3ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9j
Zi9MZWdhY3lXZWJBcmNoaXZlLmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTZXJpYWxpemVkQXR0YWNobWVudERhdGEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpA
QCAtNDE3LDcgKzQxNiw3IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGUoTm9kZSYgbm9kZSwgV1RGOjpGdW5jdGlvbjxib29sCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZSgpOwogCi0gICAgLy8gSWYgdGhlIHBhZ2Ugd2FzIGxv
YWRlZCB3aXRoIGphdmFzY3JpcHQgZW5hYmxlZCwgd2UgZG9uJ3Qgd2FudCB0byBhcmNoaXZlIDxu
b3NjcmlwdD4gdGFncworICAgIC8vIElmIHRoZSBwYWdlIHdhcyBsb2FkZWQgd2l0aCBKYXZhU2Ny
aXB0IGVuYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gYXJjaGl2ZSA8bm9zY3JpcHQ+IHRhZ3MKICAg
ICAvLyBJbiBwcmFjdGljZSB3ZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgc2NyaXB0aW5n
IHdhcyBlbmFibGVkIHdoZW4gdGhlIHBhZ2Ugd2FzIG9yaWdpbmFsbHkgbG9hZGVkCiAgICAgLy8g
YnV0IHdlIGNhbiBhcHByb3hpbWF0ZSB0aGF0IGJ5IGNoZWNraW5nIGlmIHNjcmlwdGluZyBpcyBl
bmFibGVkIHJpZ2h0IG5vdy4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFF1YWxpZmllZE5h
bWU+PiB0YWdOYW1lc1RvRmlsdGVyOwpAQCAtNDU0LDE5ICs0NTMsMTYgQEAgUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShGcmFtZSYgZnJhbWUpCiAgICAg
cmV0dXJuIGNyZWF0ZShtYWluUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgZG9jdW1lbnRMb2Fk
ZXItPnN1YnJlc291cmNlcygpLCBXVEZNb3ZlKHN1YmZyYW1lQXJjaGl2ZXMpKTsKIH0KIAotUmVm
UHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShSYW5nZSogcmFu
Z2UpCitSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgYXV0byYgZG9jdW1lbnQgPSByYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsd2F5cyAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8KICAg
ICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1
bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVh
cmFuY2UoKnJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Olllcyk7Cisg
ICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhkb2N1bWVudCkgKyBz
ZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShyYW5nZSwgJm5vZGVMaXN0LCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOwogICAgIHJldHVybiBjcmVhdGUobWFya3VwU3RyaW5n
LCAqZnJhbWUsIG5vZGVMaXN0LCBudWxscHRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oCmluZGV4IGI1MWNmNjE2YmYw
ODJlMjk0MDliNDQyMWE0M2NiNzExMTQ4MGE5ODkuLjY3YWZhODNkYzdhOWJmMjJmOGU4OTY1MWVl
OWVjNDM5MzJmMDY1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKQEAgLTM1LDcgKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKKworc3RydWN0
IFNpbXBsZVJhbmdlOwogCiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlIGZpbmFsIDogcHVibGljIEFy
Y2hpdmUgewogcHVibGljOgpAQCAtNDYsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoTm9kZSYsIFdURjo6
RnVuY3Rpb248Ym9vbChGcmFtZSYpPiYmIGZyYW1lRmlsdGVyID0geyB9KTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShGcmFtZSYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRl
RnJvbVNlbGVjdGlvbihGcmFtZSopOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8
TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKFJhbmdlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2UmKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkRhdGFSZWY+IHJhd0RhdGFSZXByZXNl
bnRhdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZm
OThhYWU4ZDc1NmQyMmQ4NzA4YmQ3YTYzY2VhZGI3ZWE1YzFlN2QuLjU2NmQ1ZDQ2OTMwOWViOGM2
MzM1ZTAyYTJlYzE3MGIxYzYyMTFhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNp
bmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlByb21pc2VkQXR0YWNobWVudEluZm8uaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgi
CkBAIC0yMzksNyArMjQwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVy
YXRpb24oY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGlmICghbV9kcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlcnMuaXNFbXB0eSgpICYmIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5n
ZSAmJiB0cnlUb1VwZGF0ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVycyhkcmFnRGF0YSkpIHsKICAg
ICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMuY2xlYXIoKTsKLSAgICAgICAgbV9kcm9w
cGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgbV9kcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgICAgICBtX2RvY3VtZW50VW5k
ZXJNb3VzZSA9IG51bGxwdHI7CiAgICAgICAgIGNsZWFyRHJhZ0NhcmV0KCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNjMzLDcgKzYzNCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNs
dWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KSwgdGV4dCk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCk7CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNs
aWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTg1Niw5
ICs4NTcsMTAgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogCiBz
dGF0aWMgdm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJh
bmdlLT5zZWxlY3ROb2RlKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgp
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05T
VFJFQU0pKTsKKyAgICBpZiAoYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgp
KSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVt
ZW50KSkKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oKnJhbmdl
KTsKKyAgICB9CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhUTUxEcmFnKGNvbnN0
IEludFBvaW50JiBtb3VzZURyYWdnZWRQb2ludCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4s
IGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wgaXNMaW5rSW1hZ2UpCkBAIC0x
MzczLDcgKzEzNzUsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpkb1N5c3RlbURyYWcoRHJhZ0lt
YWdlIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0xvYywgY29ucwogCiB2b2lkIERyYWdDb250
cm9sbGVyOjpyZW1vdmVBbGxEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMoKQogewotICAgIG1fZHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IG51bGxwdHI7CisgICAgbV9kcm9wcGVkSW1hZ2VQ
bGFjZWhvbGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xk
ZXIgOiBzdGQ6OmV4Y2hhbmdlKG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzLCB7IH0pKSB7CiAg
ICAgICAgIGlmIChwbGFjZWhvbGRlci0+aXNDb25uZWN0ZWQoKSkKICAgICAgICAgICAgIHBsYWNl
aG9sZGVyLT5yZW1vdmUoKTsKQEAgLTE0NTUsMTMgKzE0NTcsMTMgQEAgdm9pZCBEcmFnQ29udHJv
bGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8
SW50U2l6ZT4KICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3Jl
YXRlKCpkb2N1bWVudCwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlByZXZlbnROZXN0aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNl
IH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwog
Ci0gICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IGNvbW1hbmQtPmluc2VydGVkQ29udGVu
dFJhbmdlKCk7CisgICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShjb21tYW5kLT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpKTsKICAgICBpZiAoIWluc2VydGVkQ29u
dGVudFJhbmdlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBjb250YWluZXIgPSBtYWtlUmVmUHRyKGluc2VydGVkQ29u
dGVudFJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKKyAgICBhdXRvIGNvbnRhaW5l
ciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCppbnNlcnRlZENvbnRlbnRSYW5nZSk7CiAgICAg
aWYgKCFpczxDb250YWluZXJOb2RlPihjb250YWluZXIpKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNDY5LDcgKzE0NzEsNyBAQCB2b2lkIERy
YWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0
IFZlY3RvcjxJbnRTaXplPgogCiAgICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gcGxh
Y2Vob2xkZXJzOwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBkZXNjZW5kYW50c09mVHlw
ZTxIVE1MSW1hZ2VFbGVtZW50Pihkb3duY2FzdDxDb250YWluZXJOb2RlPigqY29udGFpbmVyKSkp
IHsKLSAgICAgICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGluc2VydGVkQ29udGVudFJhbmdlLT5p
bnRlcnNlY3RzTm9kZShwbGFjZWhvbGRlcik7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUg
PSBjcmVhdGVMaXZlUmFuZ2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUo
cGxhY2Vob2xkZXIpOwogICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigp
ICYmIGludGVyc2VjdHNOb2RlLnJldHVyblZhbHVlKCkpCiAgICAgICAgICAgICBwbGFjZWhvbGRl
cnMuYXBwZW5kKHBsYWNlaG9sZGVyKTsKICAgICB9CkBAIC0xNDkzLDcgKzE0OTUsNyBAQCB2b2lk
IERyYWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNv
bnN0IFZlY3RvcjxJbnRTaXplPgogICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9
IFdURk1vdmUoaW5zZXJ0ZWRDb250ZW50UmFuZ2UpOwogCiAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LmNsZWFyKCk7Ci0gICAgY2FyZXRDb250cm9sbGVyLnNldENhcmV0UG9zaXRpb24obV9kcm9wcGVk
SW1hZ2VQbGFjZWhvbGRlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGNhcmV0Q29udHJv
bGxlci5zZXRDYXJldFBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2Ryb3Bw
ZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UtPnN0YXJ0KSk7CiB9CiAKIHZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OmZpbmFsaXplRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIoSFRNTEltYWdlRWxlbWVudCYgcGxh
Y2Vob2xkZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggOTIyNGFiMjA2
Y2RmZWJiNTNmMTFjNzhhM2VhZTIwODEzY2ZkZDI2Yy4uZTMwMGQzMjhkNTc5ZWRiMTcxZjAzZTIw
MDhmMTRkOGI3ZWJmNjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIkludFBvaW50
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OSw3ICs5MCw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYWNlRHJhZ0NhcmV0KGNvbnN0IElu
dFBvaW50Jik7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiYgZHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlcnM7IH0KLSAgICBjb25zdCBSZWZQdHI8UmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
OyB9CisgICAgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
OyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmFsaXplRHJvcHBlZEltYWdlUGxhY2Vo
b2xkZXIoSFRNTEltYWdlRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0
RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4mIGlt
YWdlU2l6ZXMpOwpAQCAtMTYxLDcgKzE2Miw3IEBAIHByaXZhdGU6CiAgICAgVVJMIG1fZHJhZ2dp
bmdJbWFnZVVSTDsKICAgICBib29sIG1faXNQZXJmb3JtaW5nRHJvcCB7IGZhbHNlIH07CiAgICAg
VmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnM7
Ci0gICAgUmVmUHRyPFJhbmdlPiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsKIH07
CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEcmFnZ2FibGVMaW5rKGNvbnN0IEVsZW1lbnQmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDBlMmE3N2I4ZGMzNTVlNjNlMzQ5NWEyYjE4OTJjNzU3NWFh
ODQ4ZWYuLmY1NjJlMGNhNDU3ZWQyMDVmMTc4OWU0YzVhMDhjMWQ2ZWRkNjUwOGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgIlBvaW50ZXJDYXB0dXJlQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlBvaW50ZXJMb2NrQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
RGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTcxMSw4MCArNzEyLDc3IEBAIGJvb2wgUGFn
ZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywg
RGlkV3JhcCogZGlkV3JhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFBhZ2U6OmZpbmRT
dHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0
aW9ucywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hdGNoUmFuZ2VzLCBpbnQm
IGluZGV4Rm9yU2VsZWN0aW9uKQorYXV0byBQYWdlOjpmaW5kVGV4dE1hdGNoZXMoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0KSAtPiBNYXRj
aGluZ1JhbmdlcwogewotICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0UmFuZ2VzOwotCi0g
ICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOworICAgIE1hdGNoaW5nUmFuZ2VzIHJlc3VsdDsKIAog
ICAgIEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogZnJhbWVXaXRoU2Vs
ZWN0aW9uID0gbnVsbHB0cjsKICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jb3Vu
dE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgeyB9LCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIHJl
c3VsdFJhbmdlcy5zaXplKCkpIDogMCwgdHJ1ZSwgJnJlc3VsdFJhbmdlcyk7CisgICAgICAgIGZy
YW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgeyB9LCBvcHRpb25zLCBs
aW1pdCA/IChsaW1pdCAtIHJlc3VsdC5yYW5nZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHQu
cmFuZ2VzKTsKICAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCiAgICAg
ICAgICAgICBmcmFtZVdpdGhTZWxlY3Rpb24gPSBmcmFtZTsKICAgICAgICAgZnJhbWUgPSBpbmNy
ZW1lbnRGcmFtZShmcmFtZSwgdHJ1ZSwgQ2FuV3JhcDo6Tm8pOwogICAgIH0gd2hpbGUgKGZyYW1l
KTsKIAotICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHJlc3VsdC5yYW5nZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owog
CiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewotICAgICAgICBpbmRleEZvclNlbGVjdGlv
biA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CisgICAgICAgIHJlc3VsdC5pbmRleEZvclNl
bGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CiAgICAgICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0t
aSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3Jl
YXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlc1tpIC0gMV0pKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NU
QVJULCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0LnJhbmdlc1tpIC0gMV0pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJl
c3VsdC5yZXR1cm5WYWx1ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5k
ZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZXN1bHRSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uo
c2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5E
LCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwg
MCkgewotICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdC5yYW5nZXNbaV0pKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFy
aXNvblJlc3VsdC5yZXR1cm5WYWx1ZSgpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKQotICAgICAgICAgICAgaW5k
ZXhGb3JTZWxlY3Rpb24gPSByZXN1bHRSYW5nZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIHJl
c3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpIC0gMTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOworICAgICAgICAgICAg
cmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHJh
bmdlIDogcmVzdWx0UmFuZ2VzKQotICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiBQ
YWdlOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNl
UmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gUGFnZTo6
cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAo
dGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBDYW5XcmFwIGNhbldyYXAgPSBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91
bmQpID8gQ2FuV3JhcDo6WWVzIDogQ2FuV3JhcDo6Tm87Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVm
ZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkgOiAm
bWFpbkZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVu
Y2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1l
KCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlm
IChhdXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0
LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gbWFrZVNpbXBsZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSA6
IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQotICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJh
bmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFy
dEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJv
dW5kKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRSYW5nZTsKICAgICAgICAgZnJhbWUgPSBp
bmNyZW1lbnRGcmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSwgY2FuV3Jh
cCk7CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAv
LyBTZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhl
IHJlZmVyZW5jZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEg
Yml0IGFuZCBqdXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24uCiAgICAgaWYgKGNhbldyYXAg
PT0gQ2FuV3JhcDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIHJl
c3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1h
a2VTaW1wbGVSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0
YXJ0SW5TZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1
bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRp
dG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsICpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucyB8IFdy
YXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRS
YW5nZTsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiB1bnNpZ25lZCBQYWdlOjpmaW5kTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQsIFNo
b3VsZEhpZ2hsaWdodE1hdGNoZXMgc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlcywgU2hvdWxkTWFya01h
dGNoZXMgc2hvdWxkTWFya01hdGNoZXMpCkBAIC04NzksMjQgKzg3NywyMiBAQCBzdGF0aWMgdm9p
ZCByZXBsYWNlUmFuZ2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxGaW5kUmVwbGFjZW1lbnRS
YW5nZT4mIHJhbmdlcwogICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgICAgICBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlbWVudFRleHQsIEVkaXRvcjo6
U2VsZWN0UmVwbGFjZW1lbnQ6OlllcywgRWRpdG9yOjpTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0
aW9uOjpJbnNlcnRSZXBsYWNlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXVpbnQzMl90
IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJh
bmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0
aW9uT25seSkKK3VpbnQzMl90IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0
b3I8U2ltcGxlUmFuZ2U+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRUZXh0LCBib29sIC8qc2VsZWN0aW9uT25seSovKQogewotICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hl
Y2tpbmcgd2hldGhlciBlYWNoIHJhbmdlIGJlaW5nIHJlcGxhY2VkIGlzCi0gICAgLy8gY29udGFp
bmVkIHdpdGhpbiBpdHMgZnJhbWUncyBzZWxlY3Rpb24uCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVj
dGlvbk9ubHkpOworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVj
dCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hlY2tpbmcgd2hldGhlciBlYWNoIHJhbmdl
IGJlaW5nIHJlcGxhY2VkIGlzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGZyYW1lJ3Mgc2VsZWN0aW9u
LgogCiAgICAgVmVjdG9yPEZpbmRSZXBsYWNlbWVudFJhbmdlPiByZXBsYWNlbWVudFJhbmdlczsK
ICAgICByZXBsYWNlbWVudFJhbmdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJhbmdlc1RvUmVw
bGFjZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFjZSkg
ewotICAgICAgICBhdXRvIGhpZ2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVS
b290KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8
fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigp
KSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgYXV0byBoaWdo
ZXN0Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwg
aGlnaGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwogICAgICAgICByZXBsYWNlbWVudFJhbmdl
cy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHJh
bmdlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOWQ4ZjhmYjUzZjgzYTY2NzUwMTYzZTlmMDM0NDIx
NzAxM2Y2YjM3Yy4uOTE3MzZmYjhkY2JjMDIwMzRiMmMwNDNlZTMzMTFmM2QyMGM5NmYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKQEAgLTEyOSw3ICsxMjksNiBAQCBjbGFzcyBQbHVnaW5WaWV3QmFzZTsKIGNs
YXNzIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjsKIGNsYXNzIFBvaW50ZXJMb2NrQ29udHJvbGxl
cjsKIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwogY2xhc3MgUmVzb3VyY2VVc2FnZU92ZXJsYXk7CiBjbGFzcyBTY3JvbGxMYXRjaGluZ1N0
YXRlOwpAQCAtMTUyLDYgKzE1MSw4IEBAIGNsYXNzIFdlYkdMU3RhdGVUcmFja2VyOwogY2xhc3Mg
V2hlZWxFdmVudERlbHRhRmlsdGVyOwogY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOwogCitz
dHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7
CiB1c2luZyBTaGFyZWRTdHJpbmdIYXNoID0gdWludDMyX3Q7CiAKQEAgLTI4OSwxMiArMjkwLDEy
IEBAIHB1YmxpYzoKICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIERpZFdy
YXAqID0gbnVsbHB0cik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVJhbmdl
c1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB1aW50MzJfdCByZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFNp
bXBsZVJhbmdlPiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4
dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKICAgICBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwg
UmFuZ2UqLCBGaW5kT3B0aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiBzZWFyY2hSYW5nZSwgRmluZE9wdGlvbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
dW5zaWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbWFya0Fs
bE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBib29sIHNob3VsZEhp
Z2hsaWdodCwgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CkBAIC0zMDQsMTMgKzMwNSwxNyBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEJlZm9yZVByaW50RXZlbnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQWZ0ZXJQcmludEV2ZW50KCk7CiAK
LSAgICAvLyBGaW5kIGFsbCB0aGUgUmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KKyAgICAv
LyBGaW5kIGFsbCB0aGUgcmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KICAgICAvLyBVcG9u
IHJldHVybiwgaW5kZXhGb3JTZWxlY3Rpb24gd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoK
ICAgICAvLyAwIGlmIHRoZXJlIGlzIG5vIHVzZXIgc2VsZWN0aW9uCiAgICAgLy8gdGhlIGluZGV4
IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24KICAgICAvLyBOb01h
dGNoQWZ0ZXJVc2VyU2VsZWN0aW9uIGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIg
dGhlIHVzZXIgc2VsZWN0aW9uLgotICAgIGVudW0geyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9u
ID0gLTEgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdl
cyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgaW50IG1heENvdW50LCBWZWN0b3I8UmVmUHRy
PFJhbmdlPj4mLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICBzdHJ1Y3QgTWF0Y2hpbmdS
YW5nZXMgeworICAgICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlczsKKyAgICAgICAgaW50
IGluZGV4Rm9yU2VsZWN0aW9uIHsgMCB9OyAvLyBGSVhNRTogQ29uc2lkZXIgT3B0aW9uYWw8dW5z
aWduZWQ+IG9yIHVuc2lnbmVkIGZvciB0aGlzIGluc3RlYWQuCisgICAgfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGludCBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uID0gLTE7CisgICAgV0VCQ09S
RV9FWFBPUlQgTWF0Y2hpbmdSYW5nZXMgZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCBtYXhDb3VudCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQppbmRleCAzZDdhNWU5ZDk2MmNkNzAzOTNjZmRmMzViOGRlMDlmYzgxMDNjMjk2Li41ODk4YmU3
MGIzZmEyMzVjOTA4OGI0M2E3NmQ3Mjk3YjFmZDI0NzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQpAQCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCAiUGFnZVRyYW5zaXRpb25FdmVu
dC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxh
eWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbXBvcnQgIlJlbmRl
clRleHRDb250cm9sLmgiCkBAIC0xMTYsMTkgKzExNywxOCBAQCBOU0FycmF5ICpGcmFtZTo6d29y
ZHNJbkN1cnJlbnRQYXJhZ3JhcGgoKSBjb25zdAogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uKHBhZ2UoKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgcGFnZSgpLT5zZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kKHBvc2l0aW9uKTsKKwogICAgIGlmICgh
aXNTdGFydE9mUGFyYWdyYXBoKGVuZCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzID0gZW5kLnByZXZpb3VzKCk7CiAgICAgICAgIFVDaGFyIGMocHJldmlvdXMuY2hhcmFjdGVy
QWZ0ZXIoKSk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHNvbWV0aGluZyBmcm9tIElD
VSBvciBBU0NJSUNUeXBlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gUE9TSVggY3VycmVudCBsYW5n
dWFnZSByYXRoZXIgdGhhbiBpc3dwdW5jdC4KICAgICAgICAgaWYgKCFpc3dwdW5jdChjKSAmJiAh
aXNTcGFjZU9yTmV3bGluZShjKSAmJiBjICE9IG5vQnJlYWtTcGFjZSkKICAgICAgICAgICAgIGVu
ZCA9IHN0YXJ0T2ZXb3JkKGVuZCk7CiAgICAgfQogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChz
dGFydE9mUGFyYWdyYXBoKGVuZCkpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShy
YW5nZU9mQ29udGVudHMoKmRvY3VtZW50KCkpKTsKLSAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5n
ZXQoKSwgc3RhcnQpOwotICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgZW5kKTsKLQotICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgYXV0byBzZWFyY2hSYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNlYXJj
aFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIE5TTXV0YWJs
ZUFycmF5ICp3b3JkcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNDA2ZDViZTkyOWQ1M2ExOTc0MjAwYjk0
ODNmZDQxYTY2ZDM1NmZlZS4uMTdhZmVhYzE0NDJkYmUxYTY2MzlkNzE0NGUxNWE2MGQ2ZGI3Y2Uy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNTc5
LDExICs1NzksOCBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzT3ZlclRleHRJbnNpZGVGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdU
ZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgIGlmICghd29yZFJhbmdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXdvcmRSYW5nZS0+dGV4dCgp
LmlzRW1wdHkoKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFu
dWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CisgICAgcmV0dXJuIHdvcmRSYW5nZSAmJiBoYXNBbnlQ
bGFpblRleHQoKndvcmRSYW5nZSk7CiB9CiAKIFVSTCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxp
bmtVUkwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFj
L1dLV2ViQXJjaGl2ZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tX
ZWJBcmNoaXZlUmVmLmNwcAppbmRleCBiOWM1ODdjY2JlYjAyZDI2ZmZmNjcxNzY4ZjI2ZTRkNjdl
ZjQwODllLi41OTAzYzA1NzI1YzU2ZTdlZWU5ZTQxMWI0NjMzZmZhNDdjYTVkN2RmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcApA
QCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCIK
ICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3Qu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVS
YW5nZS5oPgogCiBXS1R5cGVJRCBXS1dlYkFyY2hpdmVHZXRUeXBlSUQoKQogewpAQCAtNTMsNyAr
NTUsNyBAQCBXS1dlYkFyY2hpdmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlV2l0aERhdGEoV0tEYXRh
UmVmIGRhdGFSZWYpCiAKIFdLV2ViQXJjaGl2ZVJlZiBXS1dlYkFyY2hpdmVDcmVhdGVGcm9tUmFu
Z2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZUhhbmRsZVJlZikKIHsKLSAgICBhdXRvIHdl
YkFyY2hpdmUgPSBBUEk6OldlYkFyY2hpdmU6OmNyZWF0ZShXZWJLaXQ6OnRvSW1wbChyYW5nZUhh
bmRsZVJlZiktPmNvcmVSYW5nZSgpKTsKKyAgICBhdXRvIHdlYkFyY2hpdmUgPSBBUEk6OldlYkFy
Y2hpdmU6OmNyZWF0ZShtYWtlU2ltcGxlUmFuZ2UoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVS
ZWYpLT5jb3JlUmFuZ2UoKSkpOwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZ3ZWJBcmNoaXZl
LmxlYWtSZWYoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdl
YkFyY2hpdmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaAppbmRleCA3
MWRlMjhiZGE3NGQ3ZjAzNGZiOTJjNmYyODI0ZmVhMzllMmNmOWFmLi4xNDY0YTZiNzlhZWNkZmU4
MmU3Y2FjNDRhY2U5ZjNlOTM4MDM0YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BUElXZWJBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2
ZS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBXZWJBcmNoaXZlX2gKLSNkZWZpbmUgV2ViQXJjaGl2ZV9oCisjcHJh
Z21hIG9uY2UKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogCkBAIC0zOCw3ICszNyw3IEBAIGNsYXNz
IERhdGE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExlZ2FjeVdlYkFyY2hpdmU7Ci1j
bGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBA
IC01Miw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0
ZShXZWJBcmNoaXZlUmVzb3VyY2UqIG1haW5SZXNvdXJjZSwgUmVmUHRyPEFQSTo6QXJyYXk+JiYg
c3VicmVzb3VyY2VzLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBzdWJmcmFtZUFyY2hpdmVzKTsKICAg
ICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShBUEk6OkRhdGEqKTsKICAgICBzdGF0aWMg
UmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShSZWZQdHI8V2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZT4m
Jik7Ci0gICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQ29yZTo6UmFuZ2UmKTsK
KyAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYpOwogCiAgICAgV2ViQXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UoKTsKICAgICBB
UEk6OkFycmF5KiBzdWJyZXNvdXJjZXMoKTsKQEAgLTc2LDUgKzc1LDMgQEAgcHJpdmF0ZToKIH0g
Ly8gbmFtZXNwYWNlIEFQSQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNlbmRpZiAv
LyBXZWJBcmNoaXZlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFy
Y2hpdmUubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCmluZGV4IGZi
NTRhZjQwYmMwMGQyNDNiZjkwZTkyMjk2Y2QxYjNkMGRiYmNlZWYuLjE4ZGRjNTdhOWQ0MTIwMDlk
NmRmMzBhOThjNmU2YTUwMjNhZjI5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FQSVdlYkFyY2hpdmUubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2
ZS5tbQpAQCAtNTIsOSArNTIsOSBAQCBSZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRl
KFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiYmIGxlZ2FjeVdlYkFyY2hpdmUpCiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShsZWdhY3lXZWJBcmNoaXZlLnJlbGVhc2VOb25OdWxs
KCkpKTsKIH0KIAotUmVmPFdlYkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSYW5nZSYgcmFu
Z2UpCitSZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJBcmNoaXZlKExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZSgmcmFuZ2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
QXJjaGl2ZShMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUocmFuZ2UpKSk7CiB9CiAKIFdlYkFyY2hp
dmU6OldlYkFyY2hpdmUoV2ViQXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UsIFJlZlB0cjxB
UEk6OkFycmF5PiYmIHN1YnJlc291cmNlcywgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3ViZnJhbWVB
cmNoaXZlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCmluZGV4IDg2YWM1NTNl
NmZjYzA4MjJhZDQxOGM2YTBkM2Y4Y2Y5YzRhOTliOTguLjlmN2M3MzEwOTNjZjg3MWE3ZTRjNjNm
MWIxZjFhNmMzMDUzZjM1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRp
bmdSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApA
QCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25z
dCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGJh
c2UpCitPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1Jhbmdl
KFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2Us
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBiYXNlKQogewogICAgIEFTU0VSVChlZGl0aW5nUmFu
Z2UubG9jYXRpb24gIT0gbm90Rm91bmQpOwogICAgIFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlIHJh
bmdlIHsgZWRpdGluZ1JhbmdlLmxvY2F0aW9uLCBlZGl0aW5nUmFuZ2UubGVuZ3RoIH07CkBAIC00
NywyMSArNDcsMjEgQEAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFu
Z2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW4KICAgICAgICAgLy8gVGhhdCBm
aXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0LgogICAgICAgICBhdXRv
KiBlbGVtZW50ID0gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1l
bnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSkpOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBy
YW5nZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKGJhc2UgPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2
ZVRvOjpQYXJhZ3JhcGgpOwogCiAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkpKTsKICAgICBpZiAoIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc2NvcGVF
bmQgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRh
aW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkuZW5kOwotICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBo
U3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSkpOworICAgIGF1dG8gc2NvcGVFbmQg
PSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250
YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOworICAgIHJldHVybiBXZWJDb3JlOjpyZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1vdmUoc2Nv
cGVFbmQpIH0sIHJhbmdlKTsKIH0KIAotRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBF
ZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQorRWRpdGlu
Z1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdGluZ1JhbmdlSXNS
ZWxhdGl2ZVRvIGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKIHsKICAgICBBU1NFUlQoZWRpdGlu
Z1JhbmdlSXNSZWxhdGl2ZVRvID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVS
b290KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaAppbmRleCBlMDQzZjk3MjQwZTQy
NWVjZDI1YTQyN2VkZDkyN2FjYjc0NWUzNjE0Li5mMTliNDQzZjBkYzcxOWE3NDgzNWM3OGM3NGIx
NjUzZDk0MTFhMTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaApAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFJhbmdl
Oworc3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU4LDgg
KzU4LDggQEAgc3RydWN0IEVkaXRpbmdSYW5nZSB7CiAgICAgLy8gKG5vdEZvdW5kLCAwKSBpcyBu
b3RhYmx5IHZhbGlkLgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9u
ICsgbGVuZ3RoID49IGxvY2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiB0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgRWRpdGlu
Z1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJv
b3QpOwotICAgIHN0YXRpYyBFZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiwg
Y29uc3QgV2ViQ29yZTo6UmFuZ2UqLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5n
UmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiB0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgRWRpdGlu
Z1JhbmdlJiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2
ZVRvOjpFZGl0YWJsZVJvb3QpOworICAgIHN0YXRpYyBFZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdl
YkNvcmU6OkZyYW1lJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgRWRp
dGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJs
ZVJvb3QpOwogCiAjaWYgZGVmaW5lZChfX09CSkNfXykKICAgICBFZGl0aW5nUmFuZ2UoTlNSYW5n
ZSByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQuaAppbmRleCA2OTZjZmZjYmRmODBlNTEyZTFkM2ZkZGE3ZjEwOGYzMWRiMzBlNmIxLi5kODg1
MTExZDlmNzUwMDBiZTdkNjdlMDBiY2YwNzNhNDlhNjFlMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oCkBAIC0zMSwxMSArMzEsMTEgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFz
cyBOb2RlOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBTdHlsZVBy
b3BlcnRpZXM7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTEsMjEgKzUxLDIxIEBAIGNsYXNzIEVkaXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RWRpdG9yQ2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFdl
YkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJ
bnNlcnROb2RlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5n
ZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFn
ZSYsIFN0cmluZ0ltcGwqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5n
ZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0
aW5nKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUo
V2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6
OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRp
bmcoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1w
bCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwq
IG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSosIFZlY3RvcjxXVEY6OlN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIHsgfQorICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3VsZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFu
Z2UmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUo
V2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYs
IGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlv
bmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25z
dCBXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRp
dGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25z
dCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24o
V2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxXVEY6OlN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4+JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlVG9QYXN0
ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdv
U3RlcERyb3AoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdl
YkNvcmU6OlJhbmdlJiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJh
Z21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGJvb2wpIHsgcmV0dXJuIGZhbHNl
OyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbmplY3RlZEJ1bmRsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVk
aXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2ds
aWIvV2ViS2l0V2ViRWRpdG9yLmNwcAppbmRleCBjY2I1MWUwZDk2NDBjNjZmODU5NmU0NzQxNzE0
MDU4ZTkxMzk3Njg0Li5hODllZjM1YzA1NDkwYjUwNzVhMGIwNjlmZDA0MmY1ODlmN2M3ZmY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2ds
aWIvV2ViS2l0V2ViRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViRWRpdG9yLmNwcApAQCAtODIsNyArODIsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9u
KFdlYlBhZ2UmLCBTdHJpbmdJbXBsKikgb3ZlcnJpZGUKKyAgICB2b2lkIGRpZENoYW5nZVNlbGVj
dGlvbihXZWJQYWdlJiwgY29uc3QgU3RyaW5nJikgZmluYWwKICAgICB7CiAgICAgICAgIGdfc2ln
bmFsX2VtaXQobV9lZGl0b3IsIHNpZ25hbHNbU0VMRUNUSU9OX0NIQU5HRURdLCAwKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTURvY3VtZW50Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9tYWMvV0tET01Eb2N1bWVudC5tbQppbmRleCAxNjZlNzlkMDMyMjJlYzk4MjQx
MThhNDcwYzAyMDQ5NGE2YjU4YzBkLi45NWQxYzA3YWIyY2NiNjU1ZDZkN2IxZmUzMjVjYzU5ZTA4
M2JlZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRG9jdW1lbnQubW0KQEAgLTMwLDYgKzMwLDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnRGcmFnbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL21hcmt1cC5oPgogI2ltcG9ydCA8d3RmL05ha2VkUmVmLmg+CkBAIC03OSw3ICs4
MCw3IEBAIC0gKFdLRE9NTm9kZSAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3Ry
aW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiCiAKIC0gKFdLRE9NTm9kZSAqKWNyZWF0ZURv
Y3VtZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIFdl
YktpdDo6dG9XS0RPTU5vZGUoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChkb3duY2FzdDxXZWJDb3Jl
OjpEb2N1bWVudD4oKl9pbXBsKS5jcmVhdGVSYW5nZSgpLmdldCgpLCB0ZXh0KS5wdHIoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTU5vZGUoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpf
aW1wbCkpLCB0ZXh0KS5wdHIoKSk7CiB9CiAKIC0gKGlkKXBhcnNlcllpZWxkVG9rZW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDAwOTBiODk4YTJlMWUxZDYxY2FlMDQ1MDM4YTJmODVk
NzVkYmMzZTcuLjFiNmJiNzdlY2E3ZTZlYzBmMWY2MWU4NzIxMmM0YzQ1ZjY5NmI2NjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtMTM0LDkgKzEzNCw4IEBAIC0gKE5TQXJyYXkgKil0
ZXh0UmVjdHMKIAogLSAoV0tET01SYW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFy
eUJ5Q2hhcmFjdGVyczooTlNVSW50ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJh
bmdlRGlyZWN0aW9uKWRpcmVjdGlvbgogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbmV3
UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyAgX2ltcGwtPmVuZFBv
c2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBjaGFyYWN0ZXJzLCBkaXJlY3Rpb24g
PT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLQot
ICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOm5ld1JhbmdlLmdl
dCgpXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byBuZXdSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNo
YXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdl
RGlyZWN0aW9uRm9yd2FyZCA/ICBfaW1wbC0+ZW5kUG9zaXRpb24oKSA6IF9pbXBsLT5zdGFydFBv
c2l0aW9uKCksIGNoYXJhY3RlcnMsIGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9y
d2FyZCA/IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNl
bGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOworICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFs
bG9jXSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCldIGF1dG9y
ZWxlYXNlXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCmluZGV4
IDQ3N2ZmOTQ1YTZhYjRhY2E5ZTczMzEyNTViMDQwZGQ1ZmFkNmU4ZTAuLmM3NzYyNTJlYmQ0YWU4
ODg0NWJlOGM2Nzc4YjZlZjczMGRmZjMxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXIubW0KQEAgLTU1OSwyMSArNTU5LDIxIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZToo
aWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJL
aXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1Jl
cGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGZpbmFsCisgICAgICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmlu
ZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVw
bGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgZmluYWwKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5zaG91bGRJbnNlcnRUZXh0KQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICByZXR1cm4gW21fY29u
dHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgc2hvdWxkSW5zZXJ0VGV4dDpTdHJpbmcodGV4
dCkgcmVwbGFjaW5nUmFuZ2U6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9u
KV07CisgICAgICAgICAgICByZXR1cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5n
ZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xs
ZXIgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ1JhbmdlOndyYXBwZXIoKldlYktpdDo6
Y3JlYXRlSGFuZGxlKHJhbmdlVG9SZXBsYWNlKSkgZ2l2ZW5BY3Rpb246dG9XSyhhY3Rpb24pXTsK
ICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSog
dG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBmaW5hbAorICAgICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpX
ZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2Us
IGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbAogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdhdGVNZXRob2RzLnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIGF1dG8g
YXBpRnJvbVJhbmdlID0gZnJvbVJhbmdlID8gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9p
bml0V2l0aEltcGw6ZnJvbVJhbmdlXSkgOiBuaWw7Ci0gICAgICAgICAgICBhdXRvIGFwaVRvUmFu
Z2UgPSB0b1JhbmdlID8gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6
dG9SYW5nZV0pIDogbmlsOworICAgICAgICAgICAgYXV0byBhcGlGcm9tUmFuZ2UgPSBhZG9wdE5T
KFtbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpjcmVhdGVMaXZlUmFuZ2UoZnJvbVJh
bmdlKS5nZXQoKV0pOworICAgICAgICAgICAgYXV0byBhcGlUb1JhbmdlID0gYWRvcHROUyhbW1dL
RE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKHRvUmFuZ2UpLmdl
dCgpXSk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgICAgIFVJVGV4dFN0b3Jh
Z2VEaXJlY3Rpb24gYXBpQWZmaW5pdHkgPSBhZmZpbml0eSA9PSBXZWJDb3JlOjpVUFNUUkVBTSA/
IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25CYWNrd2FyZCA6IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25G
b3J3YXJkOwogI2Vsc2UKQEAgLTU4Myw3ICs1ODMsNyBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVs
ZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxl
ZwogICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0
KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVy
IHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2U6YXBpRnJvbVJhbmdlLmdldCgpIHRvUmFuZ2U6YXBp
VG9SYW5nZS5nZXQoKSBhZmZpbml0eTphcGlBZmZpbml0eSBzdGlsbFNlbGVjdGluZzpzdGlsbFNl
bGVjdGluZ107CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRpZENoYW5nZShXZWJLaXQ6Oldl
YlBhZ2UmLCBTdHJpbmdJbXBsKikgZmluYWwKKyAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0
OjpXZWJQYWdlJiwgY29uc3QgU3RyaW5nJikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5kaWRDaGFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNTkxLDIwICs1OTEsMjAgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8
V0tXZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAg
ICAgIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVn
SW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJEaWRDaGFuZ2VCeUVkaXRpbmc6bV9jb250cm9sbGVy
XTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktp
dDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiByYW5nZSkgZmluYWwKKyAgICAgICAgdm9pZCB3
aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtX2RlbGVnYXRlTWV0aG9kcy53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVn
YXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29u
dHJvbGxlciB3aWxsV3JpdGVSYW5nZVRvUGFzdGVib2FyZDp3cmFwcGVyKCpXZWJLaXQ6OkluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKS5nZXQoKSldOworICAgICAg
ICAgICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgd2lsbFdyaXRlUmFuZ2VU
b1Bhc3RlYm9hcmQ6d3JhcHBlcihXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpXTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3Rl
Ym9hcmREYXRhKSBmaW5hbAorICAgICAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBy
YW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlw
ZSA9IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVn
SW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9y
UmFuZ2U6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNy
ZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlwZSA9IFttX2Nv
bnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9yUmFuZ2U6d3Jh
cHBlcihXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpXTsKICAgICAgICAgICAgIGZv
ciAoTlNTdHJpbmcgKnR5cGUgaW4gZGF0YUJ5VHlwZSkgewogICAgICAgICAgICAgICAgIHBhc3Rl
Ym9hcmRUeXBlcy5hcHBlbmQodHlwZSk7CiAgICAgICAgICAgICAgICAgcGFzdGVib2FyZERhdGEu
YXBwZW5kKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGFCeVR5cGVbdHlwZV0pKTsK
QEAgLTYxOSwxMiArNjE5LDEyIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdL
V2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAg
ICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyRGlkV3JpdGVUb1Bhc3RlYm9hcmQ6bV9jb250cm9sbGVy
XTsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6
V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBXZWJDb3JlOjpS
YW5nZSYgcmFuZ2UsIGJvb2wgaXNNb3ZlKSBmaW5hbAorICAgICAgICBib29sIHBlcmZvcm1Ud29T
dGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIGlzTW92ZSkgZmlu
YWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5wZXJmb3Jt
VHdvU3RlcERyb3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBhdXRvIHJhbmdlSGFuZGxlID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpn
ZXRPckNyZWF0ZSgmcmFuZ2UpOworICAgICAgICAgICAgYXV0byByYW5nZUhhbmRsZSA9IFdlYktp
dDo6Y3JlYXRlSGFuZGxlKHJhbmdlKTsKICAgICAgICAgICAgIGF1dG8gbm9kZUhhbmRsZSA9IFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSgmZnJhZ21lbnQpOwog
ICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkg
X3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBl
cmZvcm1Ud29TdGVwRHJvcDp3cmFwcGVyKCpub2RlSGFuZGxlKSBhdERlc3RpbmF0aW9uOndyYXBw
ZXIoKnJhbmdlSGFuZGxlKSBpc01vdmU6aXNNb3ZlXTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMjIwZWZlZDU4ZWQxNTc3
OWU3NWI5YzQ4YzE3MDcxN2ZmZTJkZjBkZi4uYTkxZjdmNzA3ODE3OGRmYmU0M2I1ODQ2YmMwMGM0
NGViZDk2ZDc0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwCkBAIC01NCw3ICs1NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi10eXBlZGVmIEhhc2hNYXA8UmFuZ2UqLCBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlKj4gRE9NUmFuZ2VIYW5kbGVDYWNoZTsKK3VzaW5nIERPTVJhbmdlSGFuZGxlQ2Fj
aGUgPSBIYXNoTWFwPFJhbmdlKiwgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+OwogCiBzdGF0
aWMgRE9NUmFuZ2VIYW5kbGVDYWNoZSYgZG9tUmFuZ2VIYW5kbGVDYWNoZSgpCiB7CkBAIC02NCwy
OSArNjQsMjEgQEAgc3RhdGljIERPTVJhbmdlSGFuZGxlQ2FjaGUmIGRvbVJhbmdlSGFuZGxlQ2Fj
aGUoKQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IG9iamVjdCkKIHsKLSAgICBSYW5nZSogcmFuZ2UgPSBKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhj
b250ZXh0KS0+dm0oKSwgdG9KUyhvYmplY3QpKTsKLSAgICByZXR1cm4gZ2V0T3JDcmVhdGUocmFu
Z2UpOworICAgIHJldHVybiBnZXRPckNyZWF0ZShKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhjb250
ZXh0KS0+dm0oKSwgdG9KUyhvYmplY3QpKSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShSYW5nZSog
cmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBET01SYW5nZUhhbmRsZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVD
YWNoZSgpLmFkZChyYW5nZSwgbnVsbHB0cik7CisgICAgYXV0byByZXN1bHQgPSBkb21SYW5nZUhh
bmRsZUNhY2hlKCkuYWRkKHJhbmdlLCBudWxscHRyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8g
cmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUoKnJhbmdlKTsK
KyAgICBhdXRvIHJhbmdlSGFuZGxlID0gYWRvcHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlKCpyYW5nZSkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRs
ZS5wdHIoKTsKICAgICByZXR1cm4gcmFuZ2VIYW5kbGU7CiB9CiAKLVJlZjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUoUmFuZ2UmIHJh
bmdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUocmFuZ2UpKTsKLX0KLQogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6SW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZShSYW5nZSYgcmFuZ2UpCiAgICAgOiBtX3JhbmdlKHJhbmdlKQogewpAQCAt
MTc4LDQgKzE3MCw5IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjp0ZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gbV9yYW5nZS0+dGV4dCgpOwogfQogCitSZWZQdHI8SW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgcmFuZ2UpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OmdldE9yQ3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlLmgKaW5kZXggZjgwZTMzYWJlODA2NTFkOTc5MThiOGRiZmExNDllNDYxZjU2YmM4NS4uNWU4
YmVlZGExMDBkMjVmMDkxZTdlMGMxZjc2YTRmMGNiMTRjMjQ5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGVfaAotI2RlZmluZSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPcHRpb25z
LmgiCkBAIC0zNSw2ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtNTksMTIgKzU5LDExIEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpSYW5nZSYgY29y
ZVJhbmdlKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiBjcmVhdGUoV2ViQ29yZTo6UmFuZ2UmKTsKICAgICBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlKFdlYkNvcmU6OlJhbmdlJik7CiAKICAgICBSZWY8V2ViQ29yZTo6UmFuZ2U+
IG1fcmFuZ2U7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKK1JlZlB0cjxJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+Jik7CiAKLSNlbmRpZiAvLyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50LmNwcAppbmRleCBjZTAyN2I1YTdiZTY4MjdhNzhlN2I3NzI1YmRiYjMyNjRhNjI1
MjBhLi5lMzQwYWYxY2JjMzAyOWU1N2FiZGIyMmRjNGY5YTliZGMyNWYwNTEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcApAQCAtMzgsMTIzICsz
OCwxMTEgQEAKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0
eWxlUHJvcGVydGllcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgUmVmUHRy
PEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZT4gY3JlYXRlSGFuZGxlKGNv
bnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxl
Q1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZTo6Z2V0T3JDcmVhdGUoJnN0eWxlLm11dGFibGVDb3B5
KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7Cit9CisKIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50KGNvbnN0IFdLQnVu
ZGxlUGFnZUVkaXRvckNsaWVudEJhc2UmIGNsaWVudCkKIHsKICAgICBpbml0aWFsaXplKCZjbGll
bnQpOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQmVn
aW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdpbkVk
aXRpbmcpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdl
SGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwot
ICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwg
dG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAg
IH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKQorICAgICAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFu
ZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRF
bmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRpdGlu
ZykgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5k
bGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAg
ICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
cmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAg
ICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50
LnNob3VsZEVuZEVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2Up
LmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUo
V2ViUGFnZSYgcGFnZSwgTm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJ
bnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OnNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYgcGFnZSwgTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlv
bikKIHsKICAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSkgewogICAgICAgICBSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjpnZXRPckNyZWF0ZShub2RlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IHJhbmdlVG9SZXBsYWNlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2VUb1JlcGxhY2UpOwotICAgICAgICByZXR1cm4gbV9j
bGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0
KCkpLCB0b0FQSShyYW5nZVRvUmVwbGFjZUhhbmRsZS5nZXQoKSksIHRvQVBJKGFjdGlvbiksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJ
bnNlcnROb2RlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNy
ZWF0ZUhhbmRsZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoV2ViUGFnZSYg
cGFnZSwgU3RyaW5nSW1wbCogdGV4dCwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZEluc2VydFRleHQoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24g
YWN0aW9uKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KSB7Ci0gICAgICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZVRvUmVwbGFjZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlVG9SZXBsYWNlKTsK
LSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRleHQodG9BUEkoJnBhZ2UpLCB0
b0FQSSh0ZXh0KSwgdG9BUEkocmFuZ2VUb1JlcGxhY2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rp
b24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQu
c2hvdWxkSW5zZXJ0VGV4dCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRl
eHQodG9BUEkoJnBhZ2UpLCB0b0FQSSh0ZXh0LmltcGwoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShy
YW5nZVRvUmVwbGFjZSkuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdl
KQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdl
KFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdlKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LnNob3VsZERlbGV0ZVJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQu
c2hvdWxkRGVsZXRlUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWxldGVS
YW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQ
YWdlJiBwYWdlLCBSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQog
ewotICAgIGlmIChtX2NsaWVudC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBmcm9tUmFuZ2VIYW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShmcm9tUmFuZ2UpOwotICAgICAgICBS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gdG9SYW5nZUhhbmRsZSA9IEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHRvUmFuZ2UpOwotICAgICAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZy
b21SYW5nZUhhbmRsZS5nZXQoKSksIHRvQVBJKHRvUmFuZ2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShh
ZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAg
IH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSkKKyAgICAgICAg
cmV0dXJuIG1fY2xpZW50LnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0
b0FQSShjcmVhdGVIYW5kbGUoZnJvbVJhbmdlKS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZSh0
b1JhbmdlKS5nZXQoKSksIHRvQVBJKGFmZmluaXR5KSwgc3RpbGxTZWxlY3RpbmcsIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmIHBhZ2UsIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBjb25z
dCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGU+IHN0eWxlSGFuZGxl
ID0gSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlOjpnZXRPckNyZWF0ZShz
dHlsZSk7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhh
bmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUodG9BUEkoJnBhZ2UpLCB0b0FQ
SShzdHlsZUhhbmRsZS5nZXQoKSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEFwcGx5U3R5
bGUpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdl
KSwgdG9BUEkoY3JlYXRlSGFuZGxlKHN0eWxlKS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShy
YW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0
aW5nKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBh
Z2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQu
ZGlkQmVnaW5FZGl0aW5nKQotICAgICAgICBtX2NsaWVudC5kaWRCZWdpbkVkaXRpbmcodG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgbV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
bm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQog
Ci12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZyhXZWJQ
YWdlJiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3Qg
U3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVudC5kaWRFbmRFZGl0
aW5nKQotICAgICAgICBtX2NsaWVudC5kaWRFbmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
bm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1f
Y2xpZW50LmRpZEVuZEVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1l
LmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2UoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1w
bCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpkaWRDaGFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1l
KQogewogICAgIGlmIChtX2NsaWVudC5kaWRDaGFuZ2UpCi0gICAgICAgIG1fY2xpZW50LmRpZENo
YW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEkoJnBhZ2UpLCB0
b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxl
Y3Rpb24oV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFn
ZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2Ns
aWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24pCi0gICAgICAgIG1fY2xpZW50LmRpZENoYW5nZVNlbGVj
dGlvbih0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3aWxs
V3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQordm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdl
JiBwYWdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmICht
X2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICBtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAgIGlmIChtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQpCisgICAgICAgIG1fY2xpZW50LndpbGxXcml0ZVRvUGFzdGVib2FyZCh0b0FQSSgmcGFn
ZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFz
dGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJl
ZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7CiAgICAgaWYgKG1fY2xpZW50
LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6
Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICBXS0FycmF5UmVmIHR5cGVzID0gMDsKLSAgICAg
ICAgV0tBcnJheVJlZiBkYXRhID0gMDsKLSAgICAgICAgbV9jbGllbnQuZ2V0UGFzdGVib2FyZERh
dGFGb3JSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgJnR5cGVz
LCAmZGF0YSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICAgICAgUmVmUHRyPEFQSTo6
QXJyYXk+IHR5cGVzQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwodHlwZXMpKTsKLSAgICAgICAgUmVm
UHRyPEFQSTo6QXJyYXk+IGRhdGFBcnJheSA9IGFkb3B0UmVmKHRvSW1wbChkYXRhKSk7CisgICAg
ICAgIFdLQXJyYXlSZWYgdHlwZXMgPSBudWxscHRyOworICAgICAgICBXS0FycmF5UmVmIGRhdGEg
PSBudWxscHRyOworICAgICAgICBtX2NsaWVudC5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHRv
QVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksICZ0eXBlcywgJmRh
dGEsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGF1dG8gdHlwZXNBcnJheSA9
IGFkb3B0UmVmKHRvSW1wbCh0eXBlcykpOworICAgICAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0
UmVmKHRvSW1wbChkYXRhKSk7CiAKICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmNsZWFyKCk7CiAg
ICAgICAgIHBhc3RlYm9hcmREYXRhLmNsZWFyKCk7CkBAIC0xNzQsMTQgKzE2MiwxMyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZShXZWJQYWdlJiBwYWdlLCBSYQogICAgIH0KIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChXZWJQYWdlJiBwYWdlLCBEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFn
ZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBk
ZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5wZXJmb3JtVHdv
U3RlcERyb3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gcmFuZ2VIYW5kbGUg
PSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZSgmZGVzdGluYXRpb24pOwog
ICAgIGF1dG8gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVh
dGUoJmZyYWdtZW50KTsKLSAgICByZXR1cm4gbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKHRv
QVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKHJhbmdlSGFuZGxlLmdl
dCgpKSwgaXNNb3ZlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgIHJldHVybiBtX2Ns
aWVudC5wZXJmb3JtVHdvU3RlcERyb3AodG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdl
dCgpKSwgdG9BUEkoY3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uKS5nZXQoKSksIGlzTW92ZSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OmRpZFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmIHBhZ2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKaW5kZXggNjg5OTQxYTE4ZThkOWU5
NGNhNDI2Zjk0MmIxZWI4YTBiM2NmODRiYi4uZjNhMGU3NDc2NzIwZmIxYjVkOWNiMTc3MTdlZGQ3
Mzk5NDk3ZGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NTdHls
ZURlY2xhcmF0aW9uOwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC01MiwyMSArNTIsMjEgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnRCYXNlJik7CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSYsIFdlYkNvcmU6OlJh
bmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlJiwgV2Vi
Q29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRp
dG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViUGFn
ZSYsIFN0cmluZ0ltcGwqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShX
ZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6
OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiwgV2ViQ29yZTo6Q1NT
U3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBkaWRC
ZWdpbkVkaXRpbmcoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFs
OwotICAgIHZvaWQgZGlkRW5kRWRpdGluZyhXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0
aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCBkaWRDaGFuZ2UoV2ViUGFnZSYsIFN0cmluZ0ltcGwq
IG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdl
YlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIHdp
bGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAg
ICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdl
KiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFs
OworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdl
YkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdl
VG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wg
c2hvdWxkSW5zZXJ0VGV4dChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmLCBj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3Jl
OjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
KSBmaW5hbDsKKyAgICB2b2lkIGRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiwgY29uc3QgU3RyaW5n
JiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViUGFn
ZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRD
aGFuZ2UoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFn
ZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOworICAgIHZv
aWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFs
OwogICAgIHZvaWQgZGlkV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYpIGZpbmFsOwotICAgIGJv
b2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50
JiwgV2ViQ29yZTo6UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAg
Ym9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21l
bnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3Zl
KSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAppbmRleCA2Y2Y0ZjVhMzE5MWFkOTliMmQxYTczMzhkNGYzOTM1NTM4ZjZhYjMzLi45YzZiN2Jh
N2NiNTZhNDIzNWIwMDViOWZiYWJiMWFjMjkxY2M0ODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cApAQCAtNzcsNyArNzcsNyBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SUQoKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwog
fQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAg
LTExOCwzMiArMTE4LDMyIEBAIGludCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKS5wdHIoKSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiBib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRFbmRFZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOwor
ICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5k
RWRpdGluZygqbV9wYWdlLCByYW5nZSk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3Bh
Z2UsICZub2RlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24p
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
SW5zZXJ0Tm9kZSgqbV9wYWdlLCBub2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKIH0KIAog
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4dCgqbV9wYWdlLCB0ZXh0LmltcGwoKSwgY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFn
ZSwgdGV4dCwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZp
bml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICByZXR1cm4gbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Km1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZSh0b1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoKm1fcGFnZSwgZnJvbVJhbmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogICAgIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnNob3VsZEFwcGx5U3R5bGUoKm1fcGFnZSwgJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNT
U1N0eWxlRGVjbGFyYXRpb24oKSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0
eWxlKCptX3BhZ2UsIHN0eWxlLCByYW5nZSk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQpAQCAtMjY4LDE3ICsyNjgsMTcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3Jp
dGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7Cisg
ICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLndpbGxXcml0ZVRvUGFzdGVi
b2FyZCgqbV9wYWdlLCByYW5nZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGll
bnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+
JiBwYXN0ZWJvYXJkRGF0YSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKKyAgICBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZSgqbV9wYWdlLCByYW5nZSwgcGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CiB9CiAK
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVu
dCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUp
CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJm
b3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShkZXN0aW5h
dGlvbiksIGlzTW92ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGRlc3RpbmF0aW9u
LCBpc01vdmUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChV
bmRvU3RlcCYgc3RlcCkKQEAgLTUzNywxMSArNTM3LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6Okdy
YW0KIHN0YXRpYyB1aW50NjRfdCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgYXV0byBzZWxl
Y3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBz
ZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
OwotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Ci0gICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5
IHx8ICFwYXJhZ3JhcGhTdGFydCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNoYXJh
Y3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzdGFydE9m
UGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisgICAgcmV0dXJuIHJhbmdlID8gY2hhcmFjdGVy
Q291bnQoKnJhbmdlKSA6IDA7CiB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwCmluZGV4IDVmNWU4NjQxYWRlY2QyNmNiOWVmZDc5OGEzOTAwZjc3M2Q5NGU3M2IuLjUzMTg1
NTM4YjllMDUxOTAzYTlkNmVkZTc1YjRlMGVjODM1MjY5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTQ2LDYgKzQ2
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1w
bGVSYW5nZS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTEsMTEgKzExMiwxMSBAQCB1
aW50MzJfdCBGaW5kQ29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMoY29uc3QgVmVjdG9yPHVpbnQz
Ml90PiYgbWF0Y2hJbmRpY2VzLCBjbwogICAgIC8vIHBlcmlvZGljYWxseSB1cGRhdGUgYW4gTlNQ
cm9ncmVzcyBpbiB0aGUgVUkgcHJvY2VzcyB3aGVuIGEgYmF0Y2ggb2YgZmluZC1pbi1wYWdlIG1h
dGNoZXMgYXJlIHJlcGxhY2VkLgogICAgIGNvbnN0IHVpbnQzMl90IG1heGltdW1OdW1iZXJPZk1h
dGNoZXNUb1JlcGxhY2UgPSAxMDAwOwogCi0gICAgVmVjdG9yPFJlZjxSYW5nZT4+IHJhbmdlc1Rv
UmVwbGFjZTsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlc1RvUmVwbGFjZTsKICAgICBy
YW5nZXNUb1JlcGxhY2UucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWluPHVpbnQzMl90PihtYXhpbXVt
TnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6ZSgpKSk7CiAgICAgZm9y
IChhdXRvIGluZGV4IDogbWF0Y2hJbmRpY2VzKSB7CiAgICAgICAgIGlmIChpbmRleCA8IG1fZmlu
ZE1hdGNoZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmFuZ2VzVG9SZXBsYWNlLnVuY2hlY2tlZEFw
cGVuZCgqbV9maW5kTWF0Y2hlc1tpbmRleF0pOworICAgICAgICAgICAgcmFuZ2VzVG9SZXBsYWNl
LnVuY2hlY2tlZEFwcGVuZChtX2ZpbmRNYXRjaGVzW2luZGV4XSk7CiAgICAgICAgIGlmIChyYW5n
ZXNUb1JlcGxhY2Uuc2l6ZSgpID49IG1heGltdW1OdW1iZXJPZk1hdGNoZXNUb1JlcGxhY2UpCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNDMsMTIgKzI0NCwxMCBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8Rmlu
ZE9wdGlvbnM+IG9wdAogICAgIGJvb2wgZm91bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbiA9
IGZhbHNlOwogICAgIGlmICghcGx1Z2luVmlldykgewogICAgICAgICBpZiAoRnJhbWUqIHNlbGVj
dGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5jb3JlUGFnZSgpKSkgewot
ICAgICAgICAgICAgRnJhbWVTZWxlY3Rpb24mIGZzID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoZnMuc2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOwotICAgICAgICAgICAgICAgIGlu
dCBpbmRleEZvclNlbGVjdGlvbjsKLSAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRj
aENvdW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7Ci0gICAgICAgICAgICAg
ICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPSBpbmRleEZvclNlbGVjdGlvbjsKKyAgICAgICAg
ICAgIGlmIChzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291bnQp
OworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMp
OworICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gcmVzdWx0LmluZGV4
Rm9yU2VsZWN0aW9uOwogICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxl
Y3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODQsMTYgKzI4Mywx
NCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBPcHRpb25TZXQ8RmluZE9wdGlvbnM+IG9wdAogCiB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5k
U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25z
PiBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIG1fZmluZE1hdGNoZXMu
Y2xlYXIoKTsKLSAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0KLSAgICBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyks
IG1heE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmlu
ZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9maW5kTWF0Y2hlcyA9IFdU
Rk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKICAgICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRj
aFJlY3RzOwogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBt
YXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSkp
OworICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJl
Y3RzKHJhbmdlKSk7CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCBpbmRleEZvclNlbGVj
dGlvbikpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRG
aW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMsIHJlc3VsdC5pbmRleEZvclNlbGVj
dGlvbikpOwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93T3Zl
cmxheSkgJiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dGaW5kSW5kaWNhdG9y
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA4LDEyICszMDUsMTIgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBp
ZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0tPnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNo
ZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRT
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUtPnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCptX2ZpbmRNYXRjaGVzW21h
dGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtX2ZpbmRN
YXRjaGVzW21hdGNoSW5kZXhdKTsKIAogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNlbGVj
dGlvblNuYXBzaG90ID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKS0+Y3JlYXRlU2Vs
ZWN0aW9uU25hcHNob3QoKTsKIApAQCAtMzM5LDEwICszMzYsMTAgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1h
dGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBG
cmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21h
dGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oKm1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pKTsKKyAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0p
OwogfQogCiB2b2lkIEZpbmRDb250cm9sbGVyOjppbmRpY2F0ZUZpbmRNYXRjaCh1aW50MzJfdCBt
YXRjaEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmgKaW5kZXggMmZkM2ZhYzFlYzZjMmMyMTE5MjVjYjVkN2FkYmMxOTI1NzI3ZDlk
OS4uZjZmNmY5ZDIxMDRkM2E3OWUzZmU4ZDk4MWYxNDQ1OTY0MjI0MzIzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0xMDYs
NyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hv
d2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgogICAg
IGJvb2wgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yIHsgZmFsc2UgfTsKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fZmluZEluZGljYXRvclJlY3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4+IG1fZmluZE1hdGNoZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBt
X2ZpbmRNYXRjaGVzOwogICAgIC8vIEluZGV4IHZhbHVlIGlzIC0xIGlmIG5vdCBmb3VuZCBvciBp
ZiBudW1iZXIgb2YgbWF0Y2hlcyBleGNlZWRzIHByb3ZpZGVkIG1heGltdW0uCiAgICAgaW50IG1f
Zm91bmRTdHJpbmdNYXRjaEluZGV4IHsgLTEgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlZDNiNjNmZGRlM2E3N2I4ZjllYjk4MzE1ZTVl
OGQ5YmI1MWMwZGI3Li4yZGM1MDVjZmRiMTNiMDAzMmZkYTU0OWUwYzlkNWQ2NzI3MmI0MWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQz
NywxMyArNTQzNywxMyBAQCB2b2lkIFdlYlBhZ2U6Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHZvaWQgV2ViUGFnZTo6Z2V0
TWFya2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5n
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7CisgICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1lLmVkaXRvcigpLmNvbXBv
c2l0aW9uUmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3lu
YyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1Jh
bmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Y2hh
cmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwg
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtNTQ1Miw4ICs1NDUyLDggQEAgdm9pZCBXZWJQYWdl
OjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBv
aW50LCBDYWxsYmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwogICAgIGF1dG8m
IGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVG
cmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
ICAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50
SW5Jbm5lck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5n
ZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlZGl0aW5n
UmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CisgICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBF
ZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGVkaXRpbmdS
YW5nZS5sb2NhdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2Us
IENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNWZlYTJiMTNmNjc1ODcyYTU2N2QyYTRk
NzYzN2NkZTg4ZjZkY2I3ZC4uMmRjNDkzMmEwYzRlNDkxNDBjN2FlMzljZWRmOGExODQ4Zjg1NmRh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KQEAgLTE1MSwyOSArMTUxLDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBG
SVhNRTogVW5jbGVhciBpZiBjYWxsZXJzIGluIHRoaXMgZmlsZSBhcmUgY29ycmVjdGx5IGNob29z
aW5nIHdoaWNoIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgdG8gdXNlLgogCi1zdGF0aWMgU3RyaW5n
IHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQotewotICAgIHJl
dHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UpOwotfQot
CiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0
KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiByYW5nZSA/IFdlYkNvcmU6OnBs
YWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0K
IAogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkK
IHsKLSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KFNpbXBsZVJhbmdlIHsg
KnJhbmdlIH0pIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0Rm9yQ29udGV4
dChtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKIH0KIAotc3RhdGljIFN0cmluZyBwbGFpblRleHRG
b3JEaXNwbGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3N0YXRpYyBTdHJpbmcgcGxhaW5U
ZXh0Rm9yRGlzcGxheShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAg
IHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UsIFRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gV2Vi
Q29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSwgVGV4dEl0ZXJhdG9y
RGVmYXVsdEJlaGF2aW9yLCB0cnVlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBTdHJp
bmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0gICAgcmV0dXJu
IHJhbmdlID8gcGxhaW5UZXh0Rm9yRGlzcGxheSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKKyAg
ICByZXR1cm4gcGxhaW5UZXh0Rm9yRGlzcGxheShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKIH0K
IAogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQpAQCAtMjkwLDcgKzI4NSw3IEBA
IHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRv
clN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0
RW5kID0gcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRTdGFydDsKICAgICAgICAgLy8gRklYTUU6
IFRoZSBmb2xsb3dpbmcgY2hlY2sgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHdyaXRpbmcgZGly
ZWN0aW9uLgogICAgICAgICBwb3N0TGF5b3V0RGF0YS5pc1JlcGxhY2VBbGxvd2VkID0gcmVzdWx0
LmlzQ29udGVudEVkaXRhYmxlICYmIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHNlbGVjdGlvbi5z
dGFydCgpLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKTsKLSAgICAgICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0g
cGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0
KCkpLmdldCgpKTsKKyAgICAgICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gcGxh
aW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkp
KTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAg
ICAgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBwb3N0TGF5b3V0
RGF0YS5jaGFyYWN0ZXJBZnRlclNlbGVjdGlvbiwgcG9zdExheW91dERhdGEuY2hhcmFjdGVyQmVm
b3JlU2VsZWN0aW9uLCBwb3N0TGF5b3V0RGF0YS50d29DaGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb24p
OwogICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewpAQCAtNTUyLDEwICs1NDcs
MTEgQEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjb25zdCBpbnQgc2VsZWN0aW9uRXh0
ZW5kZWRDb250ZXh0TGVuZ3RoID0gMzUwOwotICAgIAotICAgIFN0cmluZyBzZWxlY3RlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwotICAgIFN0cmluZyB0ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yRGlz
cGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb25FeHRlbmRlZENv
bnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpLmdldCgpKTsKLSAgICBT
dHJpbmcgdGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFy
YWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpLmdldCgpKTsKKworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBwbGFpblRl
eHRGb3JDb250ZXh0KHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpOworICAgIFN0cmluZyB0ZXh0QmVm
b3JlID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJl
Y3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRD
b250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7CisgICAgU3RyaW5n
IHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVy
c0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLmVuZCgpLCBzZWxlY3Rpb25FeHRl
bmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpOwogCiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soc2Vs
ZWN0ZWRUZXh0LCB0ZXh0QmVmb3JlLCB0ZXh0QWZ0ZXIsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTk4
OCw4ICs5ODQsNyBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcoKQogICAgIGF1
dG8gZnJhbWUgPSBtYWtlUmVmKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkpOwogICAgIGlmIChhdXRvIHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgbV9wZW5kaW5n
SW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdCA9IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5n
ZVdpdGhOb25Mb2FkZWRJbWFnZXMoKnNlbGVjdGlvblJhbmdlKTsKLSAgICAgICAgYXV0byBjb2xs
YXBzZWRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9u
UmFuZ2UtPmVuZCB9OwotICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFNpbXBsZVJhbmdlIHsgc2Vs
ZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9LCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAg
ICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAg
ICB9CiAKQEAgLTExMTMsMTUgKzExMDgsMTQgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTdHlsdXNT
aW5nbGVUYXBBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDYKICAg
ICBpZiAocmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVz
dC5sb2NhbFBvaW50KCksIG51bGxwdHIpOworICAgIGF1dG8gcG9zaXRpb24gPSByZW5kZXJlci0+
cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CiAgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShub2RlKTsKLQotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICBhdXRv
IHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9j
dW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Cisg
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSgqcmFuZ2UsIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKICAgICBhdXRvIGltYWdlID0gZnJhbWUuZWRpdG9yKCkuaW5zZXJ0
RWRpdGFibGVJbWFnZSgpOwogICAgIGZyYW1lLmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50
KGltYWdlLmdldCgpKTsKIH0KQEAgLTEzNzEsNyArMTM2NSw3IEBAIHZvaWQgV2ViUGFnZTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJl
VHlwZSwKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJh
Y2socG9pbnQsIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIHsgfSwgY2FsbGJhY2tJRCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgIE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4g
ZmxhZ3M7CiAgICAgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSB3a0dlc3R1cmVTdGF0ZSA9IHN0YXRp
Y19jYXN0PEdlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSk7CiAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxHZXN0dXJlVHlwZT4oZ2VzdHVyZVR5cGUpKSB7CkBAIC0xMzg1LDQwICsx
Mzc5LDM2IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQm
IHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgIGZsYWdzID0gZGlz
dGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0
aW9uLCBwb3NpdGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0
aW9uRmxhZ3M+IHsgfTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VC
b3VuZGFyeUNoYW5nZWQ7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9j
dW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgY2Fz
ZSBHZXN0dXJlVHlwZTo6T25lRmluZ2VyVGFwOgotICAgIHsKKyAgICBjYXNlIEdlc3R1cmVUeXBl
OjpPbmVGaW5nZXJUYXA6IHsKICAgICAgICAgYXV0byBbYWRqdXN0ZWRQb3NpdGlvbiwgd2l0aGlu
V29yZEJvdW5kYXJ5XSA9IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGlu
ZShwb3NpdGlvbik7CiAgICAgICAgIGlmICh3aXRoaW5Xb3JkQm91bmRhcnkgPT0gV2l0aGluV29y
ZEJvdW5kYXJ5OjpZZXMpCiAgICAgICAgICAgICBmbGFncyA9IFdvcmRJc05lYXJUYXA7Ci0gICAg
ICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBhZGp1c3RlZFBvc2l0aW9uLCBhZGp1
c3RlZFBvc2l0aW9uKTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGFk
anVzdGVkUG9zaXRpb24pOwogICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdlc3R1
cmVUeXBlOjpMb3VwZToKICAgICAgICAgaWYgKHBvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSkKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOworICAgICAgICBlbHNlIHsKICNpZiAhUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihw
b3NpdGlvbik7CiAjZWxzZQogICAgICAgICAgICAgc3dpdGNoICh3a0dlc3R1cmVTdGF0ZSkgewot
ICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbjogewotICAgICAg
ICAgICAgICAgIGF1dG8gYm91bmRhcnkgPSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwot
ICAgICAgICAgICAgICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IGJv
dW5kYXJ5LCBib3VuZGFyeSB9OworICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0
YXRlOjpCZWdhbjoKKyAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoK
ICAgICAgICAgICAgICAgICBpZiAobV9zdGFydGluZ0dlc3R1cmVSYW5nZSkgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc3Rh
cnRpbmdHZXN0dXJlUmFuZ2UtPnN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0
IDwgcG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0LCBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8mIHN0YXJ0ID0gbV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnQ7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnQpIDwgcG9z
aXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShz
dGFydCwgcG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0
aW9uLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShwb3NpdGlvbiwgc3RhcnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6RW5kZWQ6
CkBAIC0xNDMxLDYgKzE0MjEsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNv
bnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfQogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgR2VzdHVyZVR5cGU6OlRhcEFuZEFIYWxmOgpAQCAtMTQ0NSwxMSAr
MTQzNiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50
JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgIGNhc2UgR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50V29yZFJh
bmdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVM
aXZlUmFuZ2UoKm1fY3VycmVudFdvcmRSYW5nZSk7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24g
PCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFy
dChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+
IHJhbmdlLT5lbmRQb3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQocG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICByYW5nZSA9IG1fY3VycmVudFdv
cmRSYW5nZTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS0+c3RhcnQpKQorICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFydCA9ICpt
YWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPiBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPmVuZCkpCisgICAgICAgICAgICAgICAg
cmFuZ2UtPmVuZCA9ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpFbmRlZDoKICAgICAg
ICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDYW5jZWxsZWQ6CkBAIC0xNDY2LDcgKzE0
NTcsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBw
b2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAvLyBEb3VibGUtdGFw
IGF0IGVuZCBvZiBsaW5lIG9ubHkgcGxhY2VzIGluc2VydGlvbiBwb2ludCB0aGVyZS4KICAgICAg
ICAgICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0aW5nIGF0IGVu
ZHMgb2YgbGluZXMsCiAgICAgICAgICAgICAvLyBwYXJhZ3JhcGhzLCBhbmQgZG9jdW1lbnRzLgot
ICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3Np
dGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9z
aXRpb24pOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ3OSw5ICsxNDcwLDgg
QEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQs
IEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgIGNhc2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdl
clRyaXBsZVRhcDoKICAgICAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9u
LCBUZXh0R3JhbnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpG
b3J3YXJkKSkgewogICAgICAgICAgICAgLy8gVHJpcGxlLXRhcCBhdCBlbmQgb2YgbGluZSBvbmx5
IHBsYWNlcyBpbnNlcnRpb24gcG9pbnQgdGhlcmUuCi0gICAgICAgICAgICAvLyBUaGlzIGhlbHBz
IHRvIGdldCB0aGUgY2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVzLAotICAgICAg
ICAgICAgLy8gcGFyYWdyYXBocywgYW5kIGRvY3VtZW50cy4KLSAgICAgICAgICAgIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0aW5nIGF0
IGVuZHMgb2YgbGluZXMsIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCisgICAgICAgICAgICBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRl
eHRHcmFudWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6
Rm9yd2FyZCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ5MCwxMiArMTQ4MCwxMiBAQCB2b2lkIFdl
YlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5
cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0g
ICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBv
c2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQsIGdlc3R1
cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGZsYWdzLCBjYWxsYmFja0lEKSk7CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZy
YW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGJvb2wgYmFz
ZUlzU3RhcnQpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJblJv
b3RWaWV3Q29vcmRpbmF0ZXMsIGJvb2wgYmFzZUlzU3RhcnQpCiB7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBleGlzdGluZ1NlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwog
ICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGV4aXN0aW5nU2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwpAQCAtMTUxNCw3ICsxNTA0LDcgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4g
cmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUsIGNvbnN0IElu
dFAKICAgICB9CiAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKIAogICAgIGNv
bnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsg
SGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0
UmVxdWVzdDo6QWxsb3dWaXNpYmxlQ2hpbGRGcmFtZUNvbnRlbnRPbmx5IH07CiAgICAgSGl0VGVz
dFJlc3VsdCBoaXRUZXN0ID0gZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQocG9pbnRJbkRvY3VtZW50LCBoaXRUeXBlKTsKQEAgLTE1MjgsMjMgKzE1MTgsMjEgQEAgc3Rh
dGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFt
ZSYgZnJhbWUsIGNvbnN0IEludFAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVjdGlvblN0YXJ0
Lm5leHQoKTsKICAgICAgICAgZWxzZSBpZiAoJnNlbGVjdGlvblN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkuYW5jaG9yTm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmaGl0VGVzdC50YXJnZXROb2RlKCktPnRy
ZWVTY29wZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0
UG9zaXRpb25Gb3JFbmQocmVzdWx0LmRlZXBFcXVpdmFsZW50KCksIHNlbGVjdGlvblN0YXJ0LmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChy
ZXN1bHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOworCisgICAgICAgIHJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHNlbGVjdGlvbkVuZCwgcmVzdWx0KSA8PSAw
KQogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uRW5kLnByZXZpb3VzKCk7CiAgICAgICAg
IGVsc2UgaWYgKCZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJnNlbGVjdGlv
bkVuZC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkpCiAgICAgICAg
ICAgICByZXN1bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZvclN0YXJ0KHJl
c3VsdC5kZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250
YWluZXJOb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkK
LSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcmVz
dWx0LmRlZXBFcXVpdmFsZW50KCksIHNlbGVjdGlvbkVuZCk7CisKKyAgICAgICAgcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UocmVzdWx0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gcmFuZ2U7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRh
cnlGb3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24sIGJvb2wgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitzdGF0
aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihG
cmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wgYmFzZUlz
U3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgU2VsZWN0aW9uRGly
ZWN0aW9uIHNhbWVEaXJlY3Rpb24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkRpcmVjdGlvbjo6
Rm9yd2FyZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgU2VsZWN0aW9uRGly
ZWN0aW9uIG9wcG9zaXRlRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBTZWxlY3Rpb25EaXJlY3Rp
b246OkJhY2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwpAQCAtMTU1NCw3ICsx
NTQyLDcgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0
aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKIAogICAgIGlmIChhdEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShleHRlbnQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBzYW1l
RGlyZWN0aW9uKSkgewogICAgICAgICAvLyBUaGlzIGlzIGEgd29yZCBib3VuZGFyeS4gTGVhdmUg
c2VsZWN0aW9uIHdoZXJlIGl0IGlzLgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVs
YXJpdHkoZXh0ZW50LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgb3Bwb3NpdGVE
aXJlY3Rpb24pKSB7CkBAIC0xNTY5LDcgKzE1NTcsOSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiBy
YW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxl
UAogICAgICAgICAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eSh3b3JkQm91bmRhcnksIFRleHRH
cmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9uKQogICAgICAgICAmJiBp
bml0aWFsRXh0ZW50ICE9IHdvcmRCb3VuZGFyeSkgewogICAgICAgICBleHRlbnQgPSB3b3JkQm91
bmRhcnk7Ci0gICAgICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpm
cmFtZS0+ZG9jdW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5k
b2N1bWVudCgpLCBleHRlbnQsIGJhc2UpOworICAgICAgICBpZiAoIShiYXNlIDwgZXh0ZW50KSkK
KyAgICAgICAgICAgIHN0ZDo6c3dhcChiYXNlLCBleHRlbnQpOworICAgICAgICByZXR1cm4gbWFr
ZVNpbXBsZVJhbmdlKGJhc2UsIGV4dGVudCk7CiAgICAgfQogICAgIC8vIENvbnZlcnNlbHksIGlm
IHRoZSBpbml0aWFsIGV4dGVudCBlcXVhbHMgdGhlIGN1cnJlbnQgd29yZCBib3VuZGFyeSwgdGhl
bgogICAgIC8vIHJ1biB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgc2Vs
ZWN0aW9uIHNob3VsZCBleHRlbmQKQEAgLTE1ODksOSArMTU3OSwxMSBAQCBzdGF0aWMgUmVmUHRy
PFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25z
dCBWaXNpYmxlUAogICAgIGlmIChleHRlbnQuaXNOdWxsKCkgfHwgZXh0ZW50ID09IGJhc2UpCiAg
ICAgICAgIGV4dGVudCA9IHdvcmRCb3VuZGFyeTsKICAgICBpZiAoZXh0ZW50LmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1l
bnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBl
eHRlbnQsIGJhc2UpOworICAgIGlmICghKGJhc2UgPCBleHRlbnQpKQorICAgICAgICBzdGQ6OnN3
YXAoYmFzZSwgZXh0ZW50KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGJhc2UsIGV4dGVu
dCk7CiB9CiAKIEludFJlY3QgV2ViUGFnZTo6cm9vdFZpZXdCb3VuZHNGb3JFbGVtZW50KGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xNzA2LDMxICsxNjk4LDI4IEBAIHZvaWQgV2ViUGFnZTo6
dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rp
b25Ub3VjaCBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlOwotICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgT3B0aW9uU2V0PFNlbGVjdGlv
bkZsYWdzPiBmbGFnczsKLQogICAgIGlmIChzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZl
bnRzV2hlbk1vZGlmeWluZ1NlbGVjdGlvbigpKQogICAgICAgICBkaXNwYXRjaFN5bnRoZXRpY01v
dXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShzZWxlY3Rpb25Ub3VjaCwgcG9pbnQpOwogCisg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOworICAgIE9wdGlvblNldDxTZWxlY3Rpb25G
bGFncz4gZmxhZ3M7CisKICAgICBzd2l0Y2ggKHNlbGVjdGlvblRvdWNoKSB7CiAgICAgY2FzZSBT
ZWxlY3Rpb25Ub3VjaDo6U3RhcnRlZDoKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZE5v
dE1vdmluZzoKICAgICAgICAgYnJlYWs7Ci0gICAgCisKICAgICBjYXNlIFNlbGVjdGlvblRvdWNo
OjpFbmRlZDoKLSAgICAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nlc3RXb3JkQm91bmRh
cnlGb3JQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVs
bCgpKQotICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1l
bnQoKSwgcmVzdWx0LCByZXN1bHQpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAg
ICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24o
cG9zaXRpb24pKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUZvclBv
aW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGZyYW1lLCBwb2ludCwgYmFzZUlzU3RhcnQpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTW92aW5nRm9yd2Fy
ZDoKICAgICAgICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oJmZyYW1l
LCBwb3NpdGlvbiwgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAg
ICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVk
TW92aW5nQmFja3dhcmQ6CiAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBv
c2l0aW9uKCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb246
OkJhY2t3YXJkKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNzM5LDggKzE3MjgsOSBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwg
U2VsZWN0aW9uVG91Y2ggcwogICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3
Q29vcmRpbmF0ZXMoZnJhbWUsIHBvaW50LCBiYXNlSXNTdGFydCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAg
ICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBwb3NpdGlvbi5h
ZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRv
dWNoZXNDYWxsYmFjayhwb2ludCwgc2VsZWN0aW9uVG91Y2gsIGZsYWdzLCBjYWxsYmFja0lEKSk7
CiB9CkBAIC0xNzQ4LDE1ICsxNzM4LDEyIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9u
V2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3VjaCBzCiB2b2lk
IFdlYlBhZ2U6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBm
cm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBl
LCBHZXN0dXJlUmVjb2duaXplclN0YXRlIGdlc3R1cmVTdGF0ZSwgQ2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGZyb21Qb3NpdGlvbiA9IGZy
YW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRl
bnRzKGZyb20pKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHRvKSk7
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBpZiAoZnJvbVBvc2l0aW9uLmlzTm90TnVs
bCgpICYmIHRvUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGZyb21Qb3NpdGlv
biA8IHRvUG9zaXRpb24pCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdG9Qb3Np
dGlvbiwgZnJvbVBvc2l0aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShyYW5nZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAg
ICBhdXRvIGZyb21Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1l
LnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyb20pKTsKKyAgICBhdXRvIHRvUG9zaXRpb24g
PSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9D
b250ZW50cyh0bykpOworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGZyb21Q
b3NpdGlvbiwgdG9Qb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKCEoZnJvbVBvc2l0aW9uIDwgdG9Q
b3NpdGlvbikpCisgICAgICAgICAgICBzdGQ6OnN3YXAocmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5k
KTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgZnJv
bVBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9CiAKICAgICAvLyBXZSBjYW4gdXNl
IHRoZSBzYW1lIGNhbGxiYWNrIGZvciB0aGUgZ2VzdHVyZXMgd2l0aCBvbmUgcG9pbnQuCkBAIC0x
NzgwLDEzICsxNzY3LDEzIEBAIHZvaWQgV2ViUGFnZTo6ZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgQ29tcGxldGlvbkhhCiAgICAgSW50UG9pbnQg
ZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50czsKICAgICBib29sIHNob3VsZERpc3Bh
dGNoTW91c2VFdmVudHMgPSBzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzV2hlbk1v
ZGlmeWluZ1NlbGVjdGlvbigpOwogICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKSB7
Ci0gICAgICAgIGF1dG8gc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJh
bWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+
c3RhcnRQb3NpdGlvbigpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOwotICAgICAg
ICBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250
ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKSku
YWJzb2x1dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKKyAgICAgICAgYXV0byBzdGFydExvY2F0
aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290
VmlldyhWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5n
ZS0+c3RhcnQpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOworICAgICAgICBlbmRM
b2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1Rv
Um9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3Jk
UmFuZ2UtPmVuZCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7CiAgICAgICAgIGRp
c3BhdGNoU3ludGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRv
dWNoOjpTdGFydGVkLCBzdGFydExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwogICAg
ICAgICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxl
Y3Rpb25Ub3VjaDo6TW92ZWQsIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwog
ICAgIH0KIAotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdl
LmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKIAogICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKQogICAgICAgICBkaXNwYXRj
aFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rpb25Ub3VjaDo6
RW5kZWQsIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwpAQCAtMTgxMSwxMCAr
MTc5OCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdvcmRCYWNrd2FyZCgpCiAgICAgaWYgKCFm
cmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJv
dW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChzdGFydFBvc2l0
aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9j
dW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0
eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNl
clRyaWdnZXJlZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9u
T2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6Oldv
cmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CisgICAgaWYgKHN0
YXJ0UG9zaXRpb24uaXNOdWxsKCkgfHwgc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgp
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMy
X3Qgb2Zmc2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xODMyLDcgKzE4MjEsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNl
dChpbnQzMl90IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9z
aXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9u
KS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiksIHBvc2l0
aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogICAg
IApAQCAtMTk4NCw3ICsxOTczLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0ZvckdyYW51bGFy
aXR5V2l0aFNlbGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkKICAgICB9CiAK
ICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAg
cmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2Vs
ZWN0aW9uUmVjdHMpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb2xsZWN0U2VsZWN0
aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3RzKTsKICAgICBj
b252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxl
Y3Rpb25SZWN0cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25S
ZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMDY0LDcg
KzIwNTMsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcgogICAgIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9p
bnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIAogICAgIGlmIChwb3Np
dGlvbi5pc05vdE51bGwoKSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24p
LnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgcG9zaXRp
b24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAg
LTIwNzYsNyArMjA2NSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5
V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pCiAgICAgaWYgKHBvc2l0
aW9uLmlzTm90TnVsbCgpKSB7CiAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3Vu
ZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAg
ICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBv
c2l0aW9uLCBwb3NpdGlvbikucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
biksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9
CkBAIC0yMDkwLDcgKzIwNzksNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25BdEJvdW5k
YXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbgogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSAoaXNGb3J3YXJkKSA/IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVFbmQoKSA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpOwogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgZGlyZWN0aW9uKTsKICAgICAg
ICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3Np
dGlvbiwgcG9zaXRpb24pLnB0cigpLCBpc0ZvcndhcmQ/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOworICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSht
YWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBpc0ZvcndhcmQ/IFVQU1RSRUFNIDogRE9XTlNUUkVB
TSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMjA5OSwy
NSArMjA4OCwxMyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JHcmFu
dWxhcml0eUF0UG9pbnQoRnJhbWUmIGZyYW1lLCBjb25zdCBXZQogewogICAgIGF1dG8gcG9zaXRp
b24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7Ci0gICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OiB7Ci0g
ICAgICAgIGF1dG8gYm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7Ci0gICAg
ICAgIGlmICghYm91bmRhcnkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICByZXR1cm4geyB7ICpib3VuZGFyeSwgKmJvdW5kYXJ5IH0gfTsKLSAgICB9Ci0gICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eTogewotICAgICAgICBhdXRvIHJhbmdl
ID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKCFyYW5nZSkK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7ICpyYW5n
ZSB9OwotICAgIH0KKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJp
dHk6CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOworICAgIGNhc2Ug
VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiB3b3JkUmFu
Z2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpTZW50
ZW5jZUdyYW51bGFyaXR5OgotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFu
dWxhcml0eTogewotICAgICAgICBhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KTsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgICAgIHJldHVybiB7ICpyYW5nZSB9OwotICAgIH0KKyAgICBjYXNlIFRleHRHcmFudWxh
cml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQpOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpEb2N1bWVudEdyYW51bGFy
aXR5OgogICAgICAgICAvLyBGSVhNRTogTWFrZXMgbm8gc2Vuc2UgdGhhdCB0aGlzIG11dGF0ZXMg
dGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCByZXR1cm5zIG51bGwuCiAgICAgICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdEFsbCgpOwpAQCAtMjE2NCw3ICsyMTQxLDcgQEAgdm9pZCBXZWJQYWdl
OjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQsIFcKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJp
dHlBdFBvaW50KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQpOwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwgVVBTVFJFQU0s
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJp
Z2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSgqcmFu
Z2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgbV9pbml0aWFsU2VsZWN0aW9uID0gcmFuZ2U7CiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIxOTYsMTAgKzIxNzMsOCBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JgogICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgaW5pdGlhbFNlbGVjdGlv
blN0YXJ0UG9zaXRpb24pCiAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG5ld1JhbmdlLT5zdGFydCk7CiAKLSAgICBpZiAoc2VsZWN0aW9uU3RhcnQu
aXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIGF1dG8g
cmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCks
ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH07Ci0gICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgVVBT
VFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKLSAgICB9CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpCisgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc2VsZWN0aW9uU3RhcnQg
PT0gaW5pdGlhbFNlbGVjdGlvblN0YXJ0UG9zaXRpb24sIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIy
MTQsNyArMjE4OSw2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25TdGFydDsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uRW5kOwogICAgIApA
QCAtMjI0OCwxMSArMjIyMiw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4
dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vCiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTm90TnVsbCgpICYmIHNlbGVj
dGlvbkVuZC5pc05vdE51bGwoKSkKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKLQotICAgIGlmIChy
YW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5n
ZXQoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSkKKyAgICAgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhtX3NlbGVjdGlvbkFu
Y2hvciA9PSBTdGFydCwgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjMwMiwxMiArMjI3MywxMiBAQCB2
b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBj
b25zdCBTdHJpbmcmIG5ld1RleHQpCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHdvcmRSYW5nZSA9IGZy
YW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKQogICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQotICAgICAgICA6IGNyZWF0
ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKLSAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UuZ2V0KCkpICE9IG9s
ZFRleHQpCisgICAgICAgIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UpICE9IG9s
ZFRleHQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2Uod29yZFJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQo
bmV3VGV4dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7CiB9CkBAIC0yMzI3LDE0ICsyMjk4LDE0IEBAIHZvaWQgV2ViUGFnZTo6cmVwbGFj
ZURpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4
dCkKICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOwogICAgIGlmIChwb3Np
dGlvbi5pc051bGwoKSkKICAgICAgICAgcG9zaXRpb24gPSBzdGFydE9mRG9jdW1lbnQoZnJhbWUu
ZG9jdW1lbnQoKSk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3Vt
ZW50KCksIHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAotICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0
KHJhbmdlLnB0cigpKSAhPSBvbGRUZXh0KQorICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0KHJh
bmdlKSAhPSBvbGRUZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBkb24ndCB3YW50
IHRvIG5vdGlmeSB0aGUgY2xpZW50IHRoYXQgdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCB1bnRp
bCB3ZSBhcmUgZG9uZSBpbnNlcnRpbmcgdGhlIG5ldyB0ZXh0LgogICAgIGZyYW1lLmVkaXRvcigp
LnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5wdHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQo
bmV3VGV4dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7CiB9CkBAIC0yMzQ3LDI3ICsyMzE4LDI1IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVz
dEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwg
Q29tCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIGF1dG8gcmFu
Z2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgIGF1dG8gcmFuZ2UgPSB3
b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkpOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgcmVwbHkoeyB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgYXV0byB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRG
b3JDb250ZXh0KHJhbmdlKTsKICAgICBjb25zdCB1bnNpZ25lZCBtYXhTZWFyY2hBdHRlbXB0cyA9
IDU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1wdHMgJiYgdGV4
dEZvclJhbmdlICE9IHRleHRGb3JBdXRvY29ycmVjdGlvbjsgKytpKQotICAgIHsKLSAgICAgICAg
cG9zaXRpb24gPSByYW5nZS0+c3RhcnRQb3NpdGlvbigpLnByZXZpb3VzKCk7Ci0gICAgICAgIGlm
IChwb3NpdGlvbi5pc051bGwoKSB8fCBwb3NpdGlvbiA9PSByYW5nZS0+c3RhcnRQb3NpdGlvbigp
KQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyAgaSA8IG1heFNlYXJjaEF0dGVtcHRzICYmIHRleHRG
b3JSYW5nZSAhPSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb247ICsraSkgeworICAgICAgICBhdXRvIHBv
c2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkucHJldmlv
dXMoKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpIHx8IHBvc2l0aW9uID09IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9z
aXRpb24oKSk7Ci0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFu
Z2UuZ2V0KCkpOworICAgICAgICByYW5nZSA9IHsgeyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9z
aXRpb24pLT5zdGFydCwgcmFuZ2UtPmVuZCB9IH07CisgICAgICAgIHRleHRGb3JSYW5nZSA9IHBs
YWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgIH0KIAogICAgIFZlY3RvcjxTZWxlY3Rpb25S
ZWN0PiBzZWxlY3Rpb25SZWN0czsKICAgICBpZiAodGV4dEZvclJhbmdlID09IHRleHRGb3JBdXRv
Y29ycmVjdGlvbikKLSAgICAgICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rp
b25SZWN0cyk7CisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyhzZWxlY3Rpb25SZWN0cyk7CiAKICAgICBhdXRvIHJvb3RWaWV3U2VsZWN0aW9uUmVj
dHMgPSBzZWxlY3Rpb25SZWN0cy5tYXAoWyZdKGNvbnN0IGF1dG8mIHNlbGVjdGlvblJlY3QpIC0+
IEZsb2F0UmVjdCB7IHJldHVybiBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhzZWxl
Y3Rpb25SZWN0LnJlY3QoKSk7IH0pOwogCkBAIC0yNDEzLDE0ICsyMzgyLDE0IEBAIGJvb2wgV2Vi
UGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
biwgY29uc3QgU3RyaW5nCiAgICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5n
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwor
ICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICBTdHJpbmcgdGV4dEZvclJhbmdl
OwogICAgIGF1dG8gb3JpZ2luYWxUZXh0V2l0aEZvbGRlZFF1b3RlTWFya3MgPSBmb2xkUXVvdGVN
YXJrcyhvcmlnaW5hbFRleHQpOwogCiAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQo
KSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgICAgICBhdXRvIHBvc2l0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgICAgIHJhbmdlID0gd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgdGV4dEZvclJhbmdlID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIHRleHRGb3JSYW5nZSA9IHBs
YWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgJ29yaWdp
bmFsVGV4dCcgaXMgbm90IHRoZSBzYW1lIGFzICd0ZXh0Rm9yUmFuZ2UnIHdlIG5lZWQgdG8gbW92
ZSAncmFuZ2UnCiAgICAgICAgIC8vIGZvcndhcmQgc3VjaCB0aGF0IGl0IG1hdGNoZXMgdGhlIG9y
aWdpbmFsIHNlbGVjdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlLgpAQCAtMjQzMCwzMyArMjM5OSwz
MyBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0g
cG9zaXRpb24ucHJldmlvdXMoKTsKICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkK
ICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChmcmFtZS5kb2N1bWVu
dCgpKTsKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgcG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAg
ICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7
CisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2Ug
PSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvb3BD
b3VudCA9IDA7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhQb3NpdGlvbnNBdHRlbXB0
cyA9IDEwOwogICAgICAgICAgICAgd2hpbGUgKHRleHRGb3JSYW5nZS5sZW5ndGgoKSAmJiB0ZXh0
Rm9yUmFuZ2UubGVuZ3RoKCkgPiBvcmlnaW5hbFRleHQubGVuZ3RoKCkgJiYgbG9vcENvdW50IDwg
bWF4UG9zaXRpb25zQXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0
aW9uLm5leHQoKTsKICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
cG9zaXRpb24gPj0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICByYW5n
ZSA9IFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgICAgICAgICAgICAgIHRl
eHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgICAgICAgICAgdGV4dEZvclJhbmdl
ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgICAgICAgICAgICAgbG9vcENvdW50
Kys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodGV4dEZvclJhbmdlLmlzRW1w
dHkoKSAmJiByYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiAncmFuZ2UnIGRvZXMgbm90IGluY2x1ZGUgYW55IHRleHQgYnV0IGl0IGlzIG5vdCBjb2xsYXBz
ZWQsIHdlIG5lZWQgdG8gc2V0CiAgICAgICAgICAgICAvLyAncmFuZ2UnIHRvIG1hdGNoIHRoZSBz
ZWxlY3Rpb24uIE90aGVyd2lzZSBub24tdGV4dCBub2RlcyB3aWxsIGJlIHJlbW92ZWQuCi0gICAg
ICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9u
LCBwb3NpdGlvbik7CisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
bik7CiAgICAgICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNlbGVjdGlvbi4K
LSAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIHJhbmdlID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBw
bGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0g
cGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgfQogCiAgICAgaWYgKGZvbGRRdW90ZU1h
cmtzKHRleHRGb3JSYW5nZSkgIT0gb3JpZ2luYWxUZXh0V2l0aEZvbGRlZFF1b3RlTWFya3MpCkBA
IC0yNDY1LDkgKzI0MzQsOSBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRl
cm5hbChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwogICAgIC8vIENvcnJl
Y3RseSBkZXRlcm1pbmUgYWZmaW5pdHksIHVzaW5nIGxvZ2ljIGN1cnJlbnRseSBvbmx5IHByZXNl
bnQgaW4gVmlzaWJsZVBvc2l0aW9uCiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gRE9XTlNUUkVB
TTsKICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UtPmNvbGxhcHNlZCgpKQotICAgICAgICBhZmZpbml0
eSA9IFZpc2libGVQb3NpdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBVUFNUUkVBTSkuYWZm
aW5pdHkoKTsKKyAgICAgICAgYWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCksIFVQU1RSRUFNKS5hZmZpbml0eSgpOwogICAg
IAotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGFm
ZmluaXR5LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgYWZmaW5pdHks
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBp
ZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4
dChjb3JyZWN0aW9uLCAwLCBvcmlnaW5hbFRleHQuaXNFbXB0eSgpID8gVGV4dEV2ZW50SW5wdXRL
ZXlib2FyZCA6IFRleHRFdmVudElucHV0QXV0b2NvbXBsZXRpb24pOwogICAgIGVsc2UgaWYgKG9y
aWdpbmFsVGV4dC5sZW5ndGgoKSkKQEAgLTI0OTQsMTIgKzI0NjMsOCBAQCBXZWJBdXRvY29ycmVj
dGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAgICAgc2Vs
ZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFu
Z2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgU3RyaW5n
IG1hcmtlZFRleHRCZWZvcmU7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQoc3RhcnRQb3NpdGlvbikpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QmVmb3JlID0gcGxh
aW5UZXh0Rm9yQ29udGV4dCh7IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0LCAqc3RhcnQgfSk7Ci0g
ICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QWZ0ZXI7Ci0gICAgICAgIGlmIChhdXRvIGVuZCA9IG1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSkKLSAgICAgICAgICAgIG1hcmtlZFRleHRBZnRl
ciA9IHBsYWluVGV4dEZvckNvbnRleHQoeyAqZW5kLCBjb21wb3NpdGlvblJhbmdlLT5lbmQgfSk7
CisgICAgICAgIGF1dG8gbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQobWFr
ZVNpbXBsZVJhbmdlKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0LCBzdGFydFBvc2l0aW9uKSk7Cisg
ICAgICAgIGF1dG8gbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2lt
cGxlUmFuZ2UoZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBt
YXJrZWRUZXh0ID0gbWFya2VkVGV4dEJlZm9yZSArIHNlbGVjdGVkVGV4dCArIG1hcmtlZFRleHRB
ZnRlcjsKICAgICAgICAgaWYgKCFtYXJrZWRUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
bWFya2VkVGV4dFJhbmdlLmxvY2F0aW9uID0gbWFya2VkVGV4dEJlZm9yZS5sZW5ndGgoKTsKQEAg
LTI2NzMsOSArMjYzOCw5IEBAIHN0YXRpYyB2b2lkIGRhdGFEZXRlY3RvckxpbmtQb3NpdGlvbklu
Zm9ybWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIEludGVyYWN0aW9uSW5mCiAgICAgYXV0byBsaW5r
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAgICAgbGlua1Jhbmdl
LT5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7CiAgICAgaW5mby50ZXh0QmVmb3JlID0gcGxh
aW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdv
cmRCb3VuZGFyeShsaW5rUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwKLSAgICAgICAgZGF0YURldGVj
dGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCku
Z2V0KCkpOworICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7CiAgICAgaW5mby50ZXh0QWZ0ZXIgPSBwbGFpblRl
eHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJv
dW5kYXJ5KGxpbmtSYW5nZS0+ZW5kUG9zaXRpb24oKSwKLSAgICAgICAgZGF0YURldGVjdGlvbkV4
dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKS5nZXQoKSk7
CisgICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRp
cmVjdGlvbjo6Rm9yd2FyZCkpOwogfQogI2VuZGlmCiAKQEAgLTQxMDUsNyArNDA3MCw3IEBAIHZv
aWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aERlbHRhKGludDY0X3QgbG9jYXRpb25EZWx0
YSwgaW50NjRfdCBsZW5ndGhEZWx0CiAKICAgICBhdXRvIG5ld1NlbGVjdGlvblJhbmdlID0gQ2hh
cmFjdGVyUmFuZ2UobmV3U2VsZWN0aW9uTG9jYXRpb24udW5zYWZlR2V0KCksIG5ld1NlbGVjdGlv
bkxlbmd0aC51bnNhZmVHZXQoKSk7CiAgICAgYXV0byB1cGRhdGVkU2VsZWN0aW9uUmFuZ2UgPSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290
KSwgbmV3U2VsZWN0aW9uUmFuZ2UpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2UpLnB0cigpLCBET1dO
U1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcywg
VXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
dXBkYXRlZFNlbGVjdGlvblJhbmdlLCBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKIH0KIApAQCAtNDM5MCw3ICs0MzU1LDcgQEAgdm9pZCBXZWJQYWdlOjpmb2N1
c1RleHRJbnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KGNvbnN0IEVsZW1lbnRDb250ZXh0JiBlbGVt
ZW50Q28KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJh
bmdlOjpjcmVhdGUoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24p
LnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgdGFyZ2V0RnJhbWUtPnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgcG9z
aXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJWaXNpYmxlUG9zaXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KaW5kZXggMmIzZDE5YzlkYTdiZDc3Y2I3ZGE3NmU2
ZGZlYjVkNTFjZTM1NGJjMS4uM2IwZWI5NTRlMDlhZmQ4YzczMDVmZmFlZTEyNDFmMTdmMjEyZDFm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
VmlzaWJsZVBvc2l0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQpAQCAtMjkyLDcgKzI5Miw3IEBAIC0gKEJPT0wp
d2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5OihXZWJUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJp
dHkgaW5EaXJlY3Rpb25JCiAvLyBpcyBlbmNsb3NlZCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBkaXJl
Y3Rpb24sIHVzaW5nIHRoZSBzYW1lIHJ1bGUgYXMgLVtXZWJWaXNpYmxlUG9zaXRpb24gd2l0aGlu
VGV4dFVuaXRPZkdyYW51bGFyaXR5OmluRGlyZWN0aW9uQXRCb3VuZGFyeTpdLgogLSAoRE9NUmFu
Z2UgKillbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSln
cmFudWxhcml0eSBpbkRpcmVjdGlvbklmQXRCb3VuZGFyeTooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtpdChlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkoW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51bGFyaXR5KGdyYW51
bGFyaXR5KSwgdG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkuZ2V0KCkpOworICAgIHJl
dHVybiBraXQoZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KFtzZWxmIF92aXNpYmxlUG9z
aXRpb25dLCB0b1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRvU2VsZWN0aW9uRGlyZWN0
aW9uKGRpcmVjdGlvbikpKTsKIH0KIAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb25B
dFN0YXJ0T3JFbmRPZldvcmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KaW5k
ZXggZWEzMDk4OTI0OThmM2Y2NGVmMGYwNjQ4ZjM1NDVjNTU4NTFiOTY5NS4uODU4NGMyMzFmZWY4
YzhkOGI3MDZlOGY5NmVkMDhkNzM4ODUzZGQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTUhUTUwubW0KQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGV4dENvbnRyb2wuaD4KICNpbXBvcnQgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdl
YkNvcmUvbWFya3VwLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTUyLDcgKzE1
Myw3IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0
aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICop
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKICAgICAv
LyBGSVhNRTogU2luY2UgdGhpcyBpcyBub3QgYSBjb250ZXh0dWFsIGZyYWdtZW50LCBpdCB3b24n
dCBoYW5kbGUgd2hpdGVzcGFjZSBwcm9wZXJseS4KLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoY29yZShzZWxmKS0+Y3JlYXRlUmFuZ2UoKSwgdGV4dCkucHRyKCkpOworICAg
IHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoKmNvcmUoc2VsZikpLCB0ZXh0KS5wdHIoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmluZGV4IDgx
MDBhYmU2YmJmN2Q4Njk4ZGE2ZWM3NWJkOGJhZjhmMGVlNGQ2OTEuLjRmMDY4MzQ2MjJiNzMyZmU2
YTZjYzY0YzdjOTU1ZGEyMTRmMmY2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtNzgsOSArNzgsMTAgQEAgQGltcGxlbWVu
dGF0aW9uIERPTVJhbmdlIChVSUtpdEV4dGVuc2lvbnMpCiAKIC0gKHZvaWQpbW92ZTooVUludDMy
KWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9u
CiB7Ci0gICAgUmFuZ2UgKnJhbmdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvJiByYW5nZSA9ICpj
b3JlKHNlbGYpOworCiAgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247
Ci0gICAgZnJhbWVTZWxlY3Rpb24ubW92ZVRvKHJhbmdlKTsKKyAgICBmcmFtZVNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CiAgICAgCiAgICAgV2ViQ29yZTo6
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpD
aGFyYWN0ZXJHcmFudWxhcml0eTsKICAgICAvLyBVbnRpbCBXZWJLaXQgc3VwcG9ydHMgdmVydGlj
YWwgbGF5b3V0LCAiZG93biIgaXMgZXF1aXZhbGVudCB0byAiZm9yd2FyZCBieSBhIGxpbmUiIGFu
ZApAQCAtOTIsMzMgKzkzLDM0IEBAIC0gKHZvaWQpbW92ZTooVUludDMyKWFtb3VudCBpbkRpcmVj
dGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiAgICAgICAgIGRpcmVj
dGlvbiA9IFdlYlRleHRBZGp1c3RtZW50QmFja3dhcmQ7CiAgICAgICAgIGdyYW51bGFyaXR5ID0g
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpMaW5lR3JhbnVsYXJpdHk7CiAgICAgfQotICAgIAor
CiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKICAgICAgICAgZnJhbWVT
ZWxlY3Rpb24ubW9kaWZ5KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAg
ICAKKwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3Rh
cnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFt
ZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
ICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQo
KnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwor
ICAgICAgICByYW5nZS5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKGVuZC5jb250YWluZXJOb2RlKCkpCi0gICAg
ICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgICAgIHJhbmdlLnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwg
ZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIH0KIAogLSAodm9pZClleHRlbmQ6KFVJbnQz
MilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlv
bgogewotICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2VsZik7CisgICAgYXV0byYgcmFuZ2UgPSAq
Y29yZShzZWxmKTsKKwogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9u
OwotICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7Ci0gICAgCisgICAgZnJhbWVTZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworCiAgICAgZm9yIChV
SW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9k
aWZ5KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCAoV2ViQ29yZTo6
U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5OjpD
aGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgCisKICAgICBQb3NpdGlvbiBzdGFydCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7
CiAgICAgUG9zaXRpb24gZW5kID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkK
LSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoKnN0YXJ0LmNv
bnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIGlmIChl
bmQuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByYW5nZS0+c2V0RW5kKCplbmQuY29udGFpbmVy
Tm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICByYW5nZS5zZXRF
bmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9
CiAKIC0gKERPTU5vZGUgKilmaXJzdE5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KaW5kZXggNzFjMDRkYjIyOTM3YTMzMGUxYTQ3M2YyMTNm
YWM4M2M5NTczMWYwYi4uZDNhZTdmNmVmODNkMjA4ZjI2OWI2ZTE2MmRiZTE0NTQ2MmRmYjk2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0K
QEAgLTUyLDYgKzUyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1X
aGVlbEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TaGFkb3dSb290Lmg+CkBAIC0xODQsNyArMTg1LDcgQEAgQGltcGxl
bWVudGF0aW9uIERPTVJhbmdlIChXZWJET01SYW5nZU9wZXJhdGlvbnMpCiAKIC0gKFdlYkFyY2hp
dmUgKil3ZWJBcmNoaXZlCiB7Ci0gICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0
V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb3JlKHNl
bGYpKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJBcmNoaXZlIGFsbG9jXSBfaW5p
dFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoKmNvcmUo
c2VsZikpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5TU3RyaW5nICopbWFya3VwU3RyaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAzNGU2OGYw
YzNkNTcyYmE5ZTQzYWU1MTlmOTNjNGI4YWNlMGNlODdlLi4zM2EyNjA5MjY2YTllOTU0N2VhY2Qx
MWI0MTdkNGYyY2IxMWJhMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KQEAgLTkzLDYgKzkzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmll
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KQEAgLTcyMiw3ICs3MjMsNyBA
QCAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0gICAgcmV0dXJuIF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCptYWtlU2ltcGxl
UmFuZ2UoY29yZShyYW5nZSkpKTsKKyAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRp
dG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSkpOwog
fQogCiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZQpA
QCAtMTQ3OSw3ICsxNDgwLDcgQEAgLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmkKIAogICAgIGF1dG8g
Y29yZUNsb3NlVHlwaW5nID0gY2xvc2VUeXBpbmcgPyBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcyA6IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm87CiAg
ICAgYXV0byBjb3JlVXNlclRyaWdnZXJlZCA9IHVzZXJUcmlnZ2VyZWQgPyBVc2VyVHJpZ2dlcmVk
IDogTm90VXNlclRyaWdnZXJlZDsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKGNvcmUocmFuZ2UpLCBjb3JlKGFmZmluaXR5KSwgY29yZUNsb3NlVHlwaW5nLCBjb3JlVXNl
clRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtl
U2ltcGxlUmFuZ2UoY29yZShyYW5nZSkpLCBjb3JlKGFmZmluaXR5KSwgY29yZUNsb3NlVHlwaW5n
LCBjb3JlVXNlclRyaWdnZXJlZCk7CiAgICAgaWYgKCFjbG9zZVR5cGluZykKICAgICAgICAgZnJh
bWUuZWRpdG9yKCkuZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3Bl
bkZvck1vcmVUeXBpbmcoKTsKIH0KQEAgLTE4NzksNyArMTg4MCw3IEBAIC0gKE5TU3RyaW5nICop
c3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVj
dFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZToo
Qk9PTCltYXRjaFN0eWxlCiB7CiAgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgRE9NRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CisgICAgRE9N
RG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZy
b21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxh
Y2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTptYXRjaFN0eWxlXTsK
IH0KIApAQCAtMTk2Miw3ICsxOTYzLDcgQEAgLSAoQk9PTCloYXNSaWNobHlFZGl0YWJsZVNlbGVj
dGlvbgogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQg
c2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihC
T09MKXNtYXJ0UmVwbGFjZQogewogICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIERPTURv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIERP
TURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dCgqcmFuZ2UsIHRleHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNl
bGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBs
YWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6WUVTXTsKIH0KIApA
QCAtMjI3MSw3ICsyMjcyLDggQEAgLSAoTlNBcnJheSAqKV9jb21wdXRlUGFnZVJlY3RzV2l0aFBy
aW50U2NhbGVGYWN0b3I6KGZsb2F0KXByaW50U2NhbGVGYWN0b3IgcGFnZVMKIAogLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDooTlNTdHJpbmcgKil0ZXh0
CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpjcmVhdGVMaXZlUmFu
Z2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSksIHRleHQpLnB0cigpKTsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICByZXR1cm4gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQp
LnB0cigpKSA6IG5pbDsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50Rm9yV2ViQXJjaGl2ZTooV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAzYTViYjA0YmMzNGI4MTZiOTlk
Y2UzM2RkNzMwNjVlZWI2NGU1NDg2Li5hMTg1NjhlZjViNWRmOGEwYWQ5YTRjZTRjMmI2Y2VmNjdj
NDg1ZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBA
IC0xOTUsNiArMTk1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVudEZhY3RvcnlN
YWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYkNv
cmUvUHJvZ3Jlc3NUcmFja2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CkBAIC03OTI5LDggKzc5MzAsNyBAQCAt
IChET01SYW5nZSAqKURPTVJhbmdlT2ZTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZl
VG86KERPTVJhbmdlICopcHJldmlvdQogewogICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5yYW5nZU9m
U3RyaW5nKHN0cmluZywgY29yZShwcmV2aW91c1JhbmdlKSwgY29yZU9wdGlvbnMob3B0aW9ucykp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5yYW5nZU9mU3RyaW5nKHN0
cmluZywgbWFrZVNpbXBsZVJhbmdlKGNvcmUocHJldmlvdXNSYW5nZSkpLCBjb3JlT3B0aW9ucyhv
cHRpb25zKSkpOwogfQogCiAtICh2b2lkKXNldE1haW5GcmFtZURvY3VtZW50UmVhZHk6KEJPT0wp
bWFpbkZyYW1lRG9jdW1lbnRSZWFkeQpAQCAtODQ1Niw3ICs4NDU2LDcgQEAgLSAodm9pZClzZXRT
ZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFm
ZmluaXR5KXNlbGUKICAgICAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvcmUo
cmFuZ2UpLCBjb3JlKHNlbGVjdGlvbkFmZmluaXR5KSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSksIGNvcmUoc2Vs
ZWN0aW9uQWZmaW5pdHkpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6Olllcyk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405492</attachid>
            <date>2020-07-29 13:22:42 -0700</date>
            <delta_ts>2020-07-29 16:01:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200729132241.patch</filename>
            <type>text/plain</type>
            <size>169246</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc1YWQwYTc4MWI0Yjdm
NTVjZGFkMjE3NjYxMjA5MzA5YmIyYzNiMC4uNmQxN2RhYzViMmQ4MTVmN2VkNWFkZmVkN2YzNzI1
MDcwODE4YjczMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDctMjUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGlu
IHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKwogMjAyMC0w
Ny0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OOiBBU1NFUlRJT04gRkFJTEVEOiAhbmVlZHNMYXlvdXQoKSBvbiB0aWxlZC1kcmF3
aW5nL3Njcm9sbGluZy9mYXN0LXNjcm9sbC1tYWluZnJhbWUtem9vbS5odG1sIGZsYWtpbHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IDI3NDIxYTFlYTA4ODEyOTM4YzZlOTdlZThlZWQ2MTA3OThlYjZmOTYuLmQ0YWI1
OTM3NTQ1NTI5ZjMzN2VlNDA0Zjc5YmMzYWU3YjM4YjMzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzIyLDcg
KzcyMiw3IEBAIFZlY3RvcjxTdHJpbmc+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBlcmZvcm1UZXh0
T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSYW5nZSA6IG9wZXJhdGlvbi50ZXh0UmFuZ2Vz
KSB7Ci0gICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3Jl
YXRlTGl2ZVJhbmdlKHRleHRSYW5nZSkucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKSkKKyAgICAgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZSh0ZXh0UmFuZ2UsIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5UZXh0KHRleHRSYW5nZSk7CkBAIC0yMDEyLDcgKzIwMTIs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VUZXh0SW5SYW5nZShjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjbwogICAgIC8vIEFsc28gb25seSBkbyB0aGlzIHdo
ZW4gdGhlIGZpZWxkIGlzIGluIGVkaXRpbmcgbW9kZS4KICAgICBhdXRvJiBmcmFtZSA9IHJlbmRl
cmVyKCktPmZyYW1lKCk7CiAgICAgaWYgKGVsZW1lbnQuc2hvdWxkVXNlSW5wdXRNZXRob2QoKSkg
ewotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVS
YW5nZShyYW5nZUZvclBsYWluVGV4dFJhbmdlKHJhbmdlKSkuZ2V0KCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZUZvclBsYWluVGV4dFJhbmdlKHJhbmdlKSwg
RE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAg
ICAgICBmcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZW1lbnRT
dHJpbmcsIEVkaXRvcjo6U2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBFZGl0b3I6OlNtYXJ0UmVwbGFj
ZTo6Tm8pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDFjN2ZkMTQxZWUxM2I3MTc2
YzUzMzZhN2Q1YTdhZjhkMjc5ZDg4ZGYuLjc3MTYxNjIzZjdjMGVjOTZhMzE1NTdiYjBiOGY2ZjQy
OTUxNTA0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQu
aCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgogI2luY2x1ZGUg
Ik5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbW92ZU5v
ZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTE0NDAsMTcgKzE0MzksMTEg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZQ
YXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CiAgICAgUG9zaXRp
b24gZW5kID0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgp
OwogICAgICAKLSAgICAvLyBzdGFydCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8g
Y3JlYXRlIGEgUmFuZ2U7IHRoZXkgYXJlICJlZGl0aW5nIHBvc2l0aW9ucyIKLSAgICBQb3NpdGlv
biBzdGFydFJhbmdlQ29tcGxpYW50ID0gc3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7
Ci0gICAgUG9zaXRpb24gZW5kUmFuZ2VDb21wbGlhbnQgPSBlbmQucGFyZW50QW5jaG9yZWRFcXVp
dmFsZW50KCk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3Rh
cnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydFJhbmdlQ29tcGxpYW50LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVuZFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWROb2Rl
KCksIGVuZFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotCiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9u
IG5vZGVzIGluIHRoZSBwYXJhZ3JhcGggdG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0
dGVyIHRob3VnaCwgc2luY2UgbW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUg
c21hbGwuCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwotICAgIC8vIFRo
aXMgdXNlZCB0byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29u
ZnVzZWQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UocmFuZ2UuZ2V0KCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2U6Ok5vLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZZXMpLCBlbXB0eVN0cmluZygp
KTsKKyAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQo
KSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoKm1ha2VTaW1wbGVSYW5nZShz
dGFydCwgZW5kKSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRC
bG9ja3NUb0lubGluZXM6OlllcyksIGVtcHR5U3RyaW5nKCkpOwogCiAgICAgLy8gQSBub24tZW1w
dHkgcGFyYWdyYXBoJ3Mgc3R5bGUgaXMgbW92ZWQgd2hlbiB3ZSBjb3B5IGFuZCBtb3ZlIGl0LiAg
V2UgZG9uJ3QgbW92ZSAKICAgICAvLyBhbnl0aGluZyBpZiB3ZSdyZSBnaXZlbiBhbiBlbXB0eSBw
YXJhZ3JhcGgsIGJ1dCBhbiBlbXB0eSBwYXJhZ3JhcGggY2FuIGhhdmUgc3R5bGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAppbmRleCA3N2VkNjgwOTM3YjBmODVkNWFhN2Q1MWFlOTI4ODEwYTRh
ZTllNDg5Li4xYzRjMzlmZDlkZTEwZDQ0N2JkMTBhMmM3NjU0OWYxMzRjZGUzZmIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC02OTYsNyArNjk2LDggQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNl
bGVjdFJlcGwKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpQYXN0ZSkg
ewotICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZp
c2libGVQb3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRl
eHQoKSk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uID0gY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlv
bkZvckluc2VydGVkVGV4dCgpOworICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHNlbGVjdGlvbik7CiAgICAgICAg
IHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCku
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3Np
dGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFu
Z2UoKSk7CiAgICAgfQpAQCAtNzI1LDcgKzcyNiw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxl
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwbGFjZVNlbGVjdGlv
bldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFu
Z2UpLCB0ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6
WWVzLCBlZGl0aW5nQWN0aW9uKTsKKyAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNt
YXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCkBAIC0yMTIwLDggKzIxMjEs
OCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFy
dCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNl
T2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGF1dG8g
c2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VO
b2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAgICBhdXRv
IHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7ICpiYXNlTm9kZSwgc3RhcnQgfSwgeyAqYmFzZU5vZGUs
IGVuZCB9IH07CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UocmFuZ2UsIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zODkyLDkgKzM4OTMsNyBAQCBzdGF0aWMg
Ym9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25z
dAogewogICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7Ci0gICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi5pc0NhcmV0KCkKLSAgICA/IHdvcmRS
YW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICA6IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkp
IDogc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0
aW9uKSkKQEAgLTQxOTAsOCArNDE4OSw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENh
bmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgfSBlbHNl
CiAgICAgICAgIGluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIG51bGxw
dHIpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFuZ2VF
eHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwgU2Vs
ZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0gICAgaWYgKGluc2VydGVkQ2FuZGlkYXRlUmFu
Z2UpCisgICAgaWYgKGF1dG8gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRC
eUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3RoKCksIFNlbGVjdGlvbkRp
cmVjdGlvbjo6QmFja3dhcmQpKQogICAgICAgICBhZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRl
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDQ0MGZj
ZjZmYTVmZmYxZmRiODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MuLjZmZjk0MzQ2YWU1MTQ1MDZmNzE1
YTU5ZGRjZmNkOWZhZTZhODc3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcApAQCAtMTg0LDcgKzE4NCw4IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRv
R3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAg
YXV0byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm9sZFJhbmdlLCAqbmV3
UmFuZ2UsIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqbmV3UmFuZ2Up
LnB0cigpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMp
OworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKm5ld1JhbmdlLCBhZmZp
bml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2UgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBzZXRTZWxlY3RlZFJh
bmdlIGhlcmU/CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM1NCw5ICszNTUsNyBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdAogICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmso
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVj
dGlvbigpOwogICAgIGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkg
ewotICAgICAgICBib29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3Jl
YXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRS
YW5nZSgpKSkucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzKTsKLSAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKLSAgICAgICAgaWYgKCFzZWxl
Y3RlZCkKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdl
cygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgZnJhbWUuZWRpdG9yKCkucGVyZm9ybURlbGV0ZSgpOwpAQCAt
MTA1Niw3ICsxMDU1LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpz
eXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1h
cmssICpzZWxlY3Rpb24pKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBp
Z25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHNldFNlbGVjdGVkUmFuZ2UgaGVyZT8KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU3MSw3ICsxNTcxLDcgQEAgc3RhdGljIFN0cmluZyB2YWx1
ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlm
IChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgYXV0byogZm9ybWF0
QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tD
b21tYW5kKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSk7Cisg
ICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50
Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpOwogICAgIGlmICgh
Zm9ybWF0QmxvY2tFbGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICBy
ZXR1cm4gZm9ybWF0QmxvY2tFbGVtZW50LT5sb2NhbE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBlNDM2YzdmZGUyMWRiYjIwMzRi
NTljNWI5NTI4OWZhM2NmZWQ3MGE5Li5iZjUyZTBjMDQ0YjdjYWMzMWYxNDlkNGEyNjM0Mjk1YjEy
YzI0ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIApAQCAtNjgsMTQgKzY3LDE0IEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRS
YW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsCiAgICAgUmVm
UHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBub2RlVG9T
cGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoKnN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCksICpub2RlVG9TcGxpdFRvKTsKICAgICBSZWZQdHI8Tm9kZT4gbm9k
ZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24gPSBvdXRlckJsb2NrOwogCi0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnQsIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBh
dXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmRPZlNlbGVjdGlvbik7CiAgICAg
RWxlbWVudCogcmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZW5kKTsKICAgICBF
bGVtZW50KiByb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oc3RhcnQpOwogICAgIC8vIFJv
b3QgaXMgbnVsbCBmb3IgZWxlbWVudHMgd2l0aCBjb250ZW50ZWRpdGFibGU9ZmFsc2UuCiAgICAg
aWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGlzRWxlbWVu
dEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1lKCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZC
bG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2NrKGVuZCkgfHwgaXNOb2Rl
VmlzaWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwgcmFuZ2UuZ2V0KCkpKQorICAgICAgICAm
JiAoZW5kID09IGVuZE9mQmxvY2soZW5kKSB8fCAocmFuZ2UgJiYgaXNOb2RlVmlzaWJseUNvbnRh
aW5lZFdpdGhpbigqcmVmTm9kZSwgKnJhbmdlKSkpCiAgICAgICAgICYmIHJlZk5vZGUgIT0gcm9v
dCAmJiAhcm9vdC0+aXNEZXNjZW5kYW50T2YoKnJlZk5vZGUpKSB7CiAgICAgICAgIC8vIEFscmVh
ZHkgaW4gYSBibG9jayBlbGVtZW50IHRoYXQgb25seSBjb250YWlucyB0aGUgY3VycmVudCBwYXJh
Z3JhcGgKICAgICAgICAgaWYgKHJlZk5vZGUtPmhhc1RhZ05hbWUodGFnTmFtZSgpKSkKQEAgLTk5
LDIzICs5OCwyMiBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAgICAgICBpbnNlcnRCbG9j
a1BsYWNlaG9sZGVyKGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSk7CiB9CiAgICAgCi1FbGVtZW50
KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2Uq
IHJhbmdlKQorRWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0Qmxv
Y2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBOb2RlKiBjb21tb25BbmNl
c3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIHdoaWxlIChjb21t
b25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0b3IpKQor
ICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqcmFuZ2Up
OworICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2so
Y29tbW9uQW5jZXN0b3IuZ2V0KCkpKQogICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFu
Y2VzdG9yLT5wYXJlbnROb2RlKCk7Ci0KLSAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQorICAgIGlm
ICghaXM8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSByYW5nZS0+c3RhcnRDb250YWlu
ZXIoKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byByb290RWRpdGFibGVFbGVtZW50
ID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlm
ICghcm9vdEVkaXRhYmxlRWxlbWVudCB8fCBjb21tb25BbmNlc3Rvci0+Y29udGFpbnMocm9vdEVk
aXRhYmxlRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNv
bW1vbkFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkgPyBkb3duY2FzdDxFbGVtZW50Pihjb21tb25B
bmNlc3RvcikgOiBudWxscHRyOworICAgIHJldHVybiAmZG93bmNhc3Q8RWxlbWVudD4oKmNvbW1v
bkFuY2VzdG9yKTsKIH0KIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
b3JtYXRCbG9ja0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmgKaW5kZXggNzliZWRhZDE3ZTBlNjRjODI1ODIwMTZkNTJlOWI5ZTk2ZjI0MjFjNy4u
ZGEyYWQ1MDRiYzEwNTM3OTg0NGU3Y2FhNTAyNTA2ZDE1MTE2Mjc5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RhdGljIEVsZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRC
bG9ja0NvbW1hbmQoUmFuZ2UqKTsKKyAgICBzdGF0aWMgRWxlbWVudCogZWxlbWVudEZvckZvcm1h
dEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKICAgICBib29sIGRp
ZEFwcGx5KCkgY29uc3QgeyByZXR1cm4gbV9kaWRBcHBseTsgfQogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAwZDI4Y2NkZGEwNDFkYTVm
NjAyYWZlZjQwZjE4MmYwM2M3NDFhYWRmLi4xZmZkYThjYTI2Zjc2YjdhOTQ5OGQ1MjJlOWVlNGJi
ODYxODU5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApA
QCAtMjA1LDEyICsyMDUsNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9z
aXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZQogICAgIHNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcywgYWZmaW5pdHksIG1fc2VsZWN0aW9uLmlzRGlyZWN0
aW9uYWwoKSksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0K
IAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFJhbmdlKiByYW5nZSkKLXsKLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHJhbmdlID8gVmlzaWJsZVNlbGVjdGlvbihy
YW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSkgOiBWaXNpYmxlU2Vs
ZWN0aW9uKCk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci19Ci0KIHZvaWQgRnJhbWVT
ZWxlY3Rpb246Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmYmFzZSwgY29uc3QgUG9zaXRpb24gJmV4
dGVudCwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQog
ewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGlyZWN0aW9uID0gdHJ1ZTsKQEAgLTIwMzQs
MTEgKzIwMjgsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICB9CiB9
CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBF
QWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3NlVHlwaW5nLCBFVXNlclRy
aWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQorYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRS
YW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5p
dHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJp
Z2dlcmVkKQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBB
U1NFUlQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkgPT0gJnJhbmdlLT5lbmRD
b250YWluZXIoKS5kb2N1bWVudCgpKTsKKworICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmNvbnRhaW5l
ci0+ZG9jdW1lbnQoKSAhPSAmcmFuZ2UtPmVuZC5jb250YWluZXItPmRvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpy
YW5nZSwgYWZmaW5pdHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgK
aW5kZXggMjExY2E4YmIzNmQ4MDI2ZDRiMmEwYjBlZTFiNjNhY2ZiOTY3YmFkOC4uZWRkNGJhYTgy
ODdkODExYmYzZDgxNDVlOWM5ZmIyZWI2YWMzMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUg
IlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0xNDQsNyArMTQzLDYgQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9y
RG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bW92ZVRvKGNvbnN0IFJhbmdlKik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG8oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkLCBD
dXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAg
IHZvaWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCA9
IE5vdFVzZXJUcmlnZ2VyZWQpOwpAQCAtMTU1LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0
aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4gPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
LCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIEN1
cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFu
dWxhcml0eSA9IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogCiAgICAg
ZW51bSBjbGFzcyBTaG91bGRDbG9zZVR5cGluZyA6IGJvb2wgeyBObywgWWVzIH07Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5LCBTaG91
bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiwgRUFmZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgPSBO
b3RVc2VyVHJpZ2dlcmVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEFsbCgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHdpbGxCZVJlbW92ZWRG
cm9tRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKaW5kZXggZjgyZjM5NWNhNTJiZDc2MDJlZmVjYjc2ZmUzZDBhYjM5YTAz
MjYwYi4uNjllN2UzMGU2NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAg
LTIwNyw3ICsyMDcsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50
KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICBpZiAoIXJh
bmdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVudC0+dGV4dCgpKTsK
KyAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVu
dC0+dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApp
bmRleCA5MjBkNmJkYzMyNzIzZTJkODI5YTRhOTU4MDQwMDZmZDI5Zjc2ZTFiLi5hODA3ZjU2M2U2
ZWQyMGVkZTA3YTcwZDQ0Y2MxYWU1YzI3MjA0MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlVW5pdHMuY3BwCkBAIC0xODMzLDExICsxODMzLDExIEBAIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZwLCBUCiAgICAgfQogfQogCi1SZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFu
dWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dnAsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbikKIHsKICAgICAvLyBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbmVmZmljaWVudC4gIFdlIGNv
dWxkIGVhc2lseSBvYnRhaW4gdGhlIGFuc3dlciB3aXRoIHRoZSBib3VuZGFyaWVzIGNvbXB1dGVk
IGJlbG93LgogICAgIGlmICghd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KHZwLCBncmFudWxh
cml0eSwgZGlyZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldkJvdW5kYXJ5OwogICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnk7CkBAIC0xODg5LDE2ICsxODg5LDE2IEBAIFJl
ZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdnAsIFRleHRHcmFuCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGlmIChwcmV2Qm91bmRhcnku
aXNOdWxsKCkgfHwgbmV4dEJvdW5kYXJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICh2cCA8IHByZXZCb3Vu
ZGFyeSB8fCB2cCA+IG5leHRCb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShwcmV2
Qm91bmRhcnkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLCBw
cmV2Qm91bmRhcnksIG5leHRCb3VuZGFyeSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShw
cmV2Qm91bmRhcnksIG5leHRCb3VuZGFyeSk7CiB9CiAKIHN0ZDo6cHRyZGlmZl90IGRpc3RhbmNl
QmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYikKQEAgLTE5NDQsMTkgKzE5NDQsMTQgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5k
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0
ZXIKICAgICB0d29CZWZvcmUgPSBjaGFyYWN0ZXJzWzJdOwogfQogCi1SZWZQdHI8UmFuZ2U+IHdv
cmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQorT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9u
LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpC
YWNrd2FyZCk7Ci0KLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGJlIGF0
IHRoZSBzdGFydCBvZiBhIHdvcmQsIHRyeSBmb3J3YXJkLgotICAgICAgICByYW5nZSA9IGVuY2xv
c2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3Jk
R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgfQotCi0gICAg
aWYgKHJhbmdlKQorICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpCisgICAgICAgIHJldHVybiByYW5nZTsKKyAgICBpZiAo
YXV0byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4
dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2Fy
ZCkpCiAgICAgICAgIHJldHVybiByYW5nZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50
UG9zaXRpb24gPSBwb3NpdGlvbjsKQEAgLTE5NjUsMTMgKzE5NjAsNyBAQCBSZWZQdHI8UmFuZ2U+
IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQog
ICAgIH0gd2hpbGUgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhYXRCb3VuZGFyeU9m
R3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxh
cml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOwogICAgIGlmIChjdXJyZW50UG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0
Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFu
dWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLQotICAgIGlmIChjdXJyZW50
UG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSwgY3Vy
cmVudFBvc2l0aW9uLCBwb3NpdGlvbik7Ci0gICAgICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJhbmdlOworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoY3VycmVudFBv
c2l0aW9uLCBwb3NpdGlvbik7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5k
YXJ5Rm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTE5ODIs
MTEgKzE5NzEsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICByZXN1bHQgPSBw
b3NpdGlvbjsKICAgICB9IGVsc2UgaWYgKHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlv
bjo6Rm9yd2FyZCkpIHsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGxpZXMgd2l0aGluIGEgd29y
ZC4KLSAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBT
ZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotCi0gICAgICAgIHJlc3VsdCA9IHdvcmRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25z
KHBvc2l0aW9uLCByZXN1bHQpID4gMSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHdvcmRSYW5nZS0+
ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4
dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxh
cml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgeworICAgICAgICAgICAgcmVzdWx0
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnQpOworICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhwb3NpdGlvbiwgcmVzdWx0KSA+IDEp
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdv
cmRSYW5nZS0+ZW5kKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkgewogICAgICAgICAvLyBUaGUgcG9zaXRpb24gaXMg
YXQgdGhlIGVuZCBvZiBhIHdvcmQuCiAgICAgICAgIHJlc3VsdCA9IHBvc2l0aW9uOwpAQCAtMjAw
Miw3ICsxOTkxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9u
QXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgaW50IG51bWJl
ck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0
V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJP
ZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICBQb3NpdGlvbiBzdGFydCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRp
b24gZW5kID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKQEAgLTIwMTgsMTAgKzIwMDcsMTAg
QEAgUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdv
cmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG8KICAgICBpZiAoZGlyZWN0aW9uID09IFNlbGVjdGlv
bkRpcmVjdGlvbjo6Rm9yd2FyZCAmJiAhYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZW5kLCBUZXh0
R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KSkKICAgICAgICAgZW5kID0gZW5kT2ZXb3JkKGVuZCkuZGVlcEVxdWl2YWxlbnQoKTsKIAotICAg
IHJldHVybiBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5n
ZShzdGFydCwgZW5kKTsKIH0gICAgCiAKLVJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3Vu
ZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGlu
dCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBwb3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKQogewogICAgIFBvc2l0
aW9uIHN0YXJ0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQg
PSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwpAQCAtMjAyOSw4ICsyMDE4LDcgQEAgUmVmUHRy
PFJhbmdlPiByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwb3MKICAgICAgICAgc3RhcnQgPSBzdGFydC5wcmV2aW91cyhDaGFyYWN0
ZXIpOwogICAgICAgICBlbmQgPSBlbmQubmV4dChDaGFyYWN0ZXIpOwogICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBtYWtlU2ltcGxlUmFu
Z2Uoc3RhcnQsIGVuZCk7CiB9CiAKIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldv
cmRCb3VuZGFyeT4gd29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3Jvc3NpbmdMaW5lKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC0yMDQxLDkgKzIwMjksOSBAQCBzdGQ6
OnBhaXI8VmlzaWJsZVBvc2l0aW9uLCBXaXRoaW5Xb3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZv
clBvc2l0aW9uV2l0aG91dENybwogICAgIGlmICh3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRQb3NpdGlvbiA9IHBvc2l0
aW9uOwogICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7Ci0gICAgICAgICAgICBhZGp1c3RlZFBvc2l0aW9u
ID0gd29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgICAgICAgICBhZGp1c3RlZFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnQpOwogICAg
ICAgICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhwb3NpdGlvbiwgYWRqdXN0ZWRQ
b3NpdGlvbikgPiAxKQotICAgICAgICAgICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSB3b3JkUmFu
Z2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRQb3NpdGlvbiA9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPmVuZCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHsgYWRqdXN0ZWRQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5OjpZZXMg
fTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAppbmRleCAxYTc4MzJl
YjM3YjgxOTk1YjkxYjEwMzBlOTRiMTU0YTQzZDYzMGRiLi40MmU2Mzc4OTVlZWM3OWJkOGMyMmI2
ZGM3ODk1NDdhMmI4YTlhZTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgK
QEAgLTEwMSwxMyArMTAxLDEzIEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbmRPZkVkaXRhYmxl
T3JOb25FZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VY
UE9SVCBib29sIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IFRleHRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIGJv
b2wgd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRl
eHRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7Ci1XRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlv
bik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cHRyZGlmZl90IGRpc3Rh
bmNlQmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9y
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbik7CiBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBV
Q2hhcjMyJiBvbmVBZnRlciwgVUNoYXIzMiYgb25lQmVmb3JlLCBVQ2hhcjMyJiB0d29CZWZvcmUp
OwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRp
b25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hhcmFj
dGVyc1RvRXhwYW5kKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRl
ZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24p
OworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91
bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVy
T2ZDaGFyYWN0ZXJzVG9FeHBhbmQpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2Vs
ZWN0aW9uRGlyZWN0aW9uKTsKIGVudW0gY2xhc3MgV2l0aGluV29yZEJvdW5kYXJ5IDogYm9vbCB7
IE5vLCBZZXMgfTsKIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdp
dGhpbldvcmRCb3VuZGFyeT4gd29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3Jvc3NpbmdM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggNmIwOGZkMmRmMTk4YWFlZmNiYzk5MjIyMzU5
OTViNTYyZTZkNzJkZi4uMTRmYTY4ODJjNjczNmM3M2ZkNjM0NDA4ZmVjZDc4YTQyZGJhYTZkMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAt
MTI4LDcgKzEyOCw3IEBAIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gRGF0YURldGVjdGlvbjo6ZGV0
ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzCiAgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247Ci0gICAgUmVmUHRyPFJhbmdlPiBj
b250ZXh0UmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNvbnRleHRSYW5nZTsKIAog
ICAgIGlmICghaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAg
ICBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9j
YWxQb2ludCgpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCAyZGQwNWUxNjViMGI2ZGQ0OGQ2YzZmNjAzNzJlN2Q1
Y2VmOGNhN2QyLi4zYzEyMzE5ZmFiMDg2NzU5NTllNTNjZDhlNzlhYjM0M2QxMWE3YmU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBA
IC00MSw3ICs0MSw2IEBACiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBv
cnQgIlJlbmRlck9iamVjdC5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJW
aXNpYmxlUG9zaXRpb24uaCIKQEAgLTI4MywxMSArMjgyLDExIEBAIE9wdGlvbmFsPHN0ZDo6dHVw
bGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VG
b3JTZWxlCiAgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50
KCptYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpOwogICAgIE5T
UmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBT
dHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsKKyAgICBh
dXRvIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHBhcmFncmFwaEVuZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENo
YXJhY3RlclJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhbYWxs
b2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6
cmFuZ2VUb1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAotICAgIHJldHVybiB7IHsgcmVz
b2x2ZUNoYXJhY3RlclJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwg
bmlsIH0gfTsKKyAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShmdWxsQ2hhcmFj
dGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKIAogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKIApAQCAtMzQxLDExICszNDAsNyBAQCBPcHRpb25hbDxzdGQ6OnR1cGxlPFNp
bXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRU
ZQogICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3Rh
cnQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBj
aGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgICAgIGF1
dG8gZXhwYW5kZWRSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVy
cyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgaWYgKCFleHBhbmRlZFJhbmdlKQotICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSB7
ICpleHBhbmRlZFJhbmdlIH07CisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhw
YW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKIAogICAgICAg
ICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgICAgICBo
aXRJbmRleCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJh
bmdlLT5zdGFydCwgcG9zaXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tCmluZGV4IGVlZmU4ZmQ5NTFjY2ZhNGViNjYxODI3ZDU4ZTY5ZWE1OWI1ODZi
N2IuLjllZjIwYzYzNmE1MGI5YzJjM2MzNjkzMDc4YWE3ZDVjYWM1MzE5YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtOTQsMTAgKzk0LDEyIEBA
IHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVt
ZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyCiAgICAgb3V0VHlwZXMuYXBwZW5kKFBhc3RlYm9hcmRD
dXN0b21EYXRhOjpjb2NvYVR5cGUoKSk7CiAgICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1
c3RvbURhdGEgeyBlbGVtZW50LmRvY3VtZW50KCkub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKSwgeyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogCi0gICAgaWYgKGF1dG8gYXJjaGl2
ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdl
KS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBhcmNoaXZlLT5y
YXdEYXRhUmVwcmVzZW50YXRpb24oKSkgewotICAgICAgICAgICAgb3V0VHlwZXMuYXBwZW5kKFdl
YkFyY2hpdmVQYm9hcmRUeXBlKTsKLSAgICAgICAgICAgIG91dERhdGEuYXBwZW5kKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHdlYkFyY2hpdmVEYXRhLmdldCgpKSk7CisgICAgaWYgKGVsZW1lbnRSYW5n
ZSkgeworICAgICAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
KCplbGVtZW50UmFuZ2UpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBkYXRhID0gYXJjaGl2ZS0+
cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBvdXRUeXBlcy5hcHBl
bmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOworICAgICAgICAgICAgICAgIG91dERhdGEuYXBwZW5k
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggMjg3MzNlZWVhMzc2Y2Y4ZmUwODE3NTQ0NzBl
YjMzMTg1NGFkZTQzMC4uMzRhYTdhYmYzM2Y3NDRkZTA3ZDhlOTllNmQ1ZDNmNWVjNDIwZTJkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVy
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVh
ZGVyQ29jb2EubW0KQEAgLTY2OSw3ICs2NjksNyBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJl
YWRQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIGlmICghYWxsb3dQbGFpblRleHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKGNvbnRleHQpLCBbdGV4dCBwcmVjb21wb3NlZFN0cmlu
Z1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoY29udGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFw
cGluZ10pKTsKIAogICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOwogICAgIHJl
dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvV2ViQ29u
dGVudFJlYWRlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50
UmVhZGVyR3RrLmNwcAppbmRleCBkNjA5ZjIyYzg0ZjBjZjc5ODAwYWE5M2Q0YjIwYmY4MmQ0ODAy
NTIzLi43Y2I2NTk0ZmFkNzhhZjg5MDMyZmRkNWRlODZmOGRhNDU1ZmUxZjU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcApAQCAt
NjUsNyArNjUsNyBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0KQogICAgIGlmICghYWxsb3dQbGFpblRleHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2
ZVJhbmdlKGNvbnRleHQpLCB0ZXh0KSk7CisgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjb250ZXh0LCB0ZXh0KSk7CiAKICAgICBtYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0
ID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xp
YndwZS9FZGl0b3JMaWJXUEUuY3BwCmluZGV4IDBiN2MyNjI1M2EwMDgyZTNjNTRhZWVmZWEwNjE2
MzI0ZTYyNDhjN2EuLjlkZDQxZDYzNjY1MTJmZDM4NTkzN2E3NjA4YmQzZmM5YjViOTBmNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcApAQCAt
NTUsNyArNTUsNyBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWlu
VGV4dCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFp
bjtjaGFyc2V0PXV0Zi04IikpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChyYW5nZSwgcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgi
KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA3ZmEzNTZiOWYw
YWE5NmIwZWE5NTQ2YWRlY2ZjZTViZGM4YTFiMTNjLi44NzYxMjBiYjA5YjEyZTA5ZTRkZWNhNThl
NTU0ZDMwMjcwMWVmNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTEzMSw3ICsxMzEsNyBAQCBPcHRpb25hbDxz
dGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6
OnJhbmdlQXRIaXRUZQogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byByYW5nZVRvUG9zaXRpb24gPSBtYWtlU2ltcGxl
UmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKTsKKyAg
ICBhdXRvIHJhbmdlVG9Qb3NpdGlvbiA9IG1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFu
Z2UtPnN0YXJ0LCBwb3NpdGlvbik7CiAgICAgaWYgKCFyYW5nZVRvUG9zaXRpb24pCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBi
ZmYxMzIwZDM2OWY4MmVkZGUyZTExNWUwN2E4NTRkMWQzMzFiYjE3Li5lYzJkOWI0NzhhZmMyYjk2
MjU0MzcyNWU2YjE4YThiOTVjMzhmOTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBA
IC0zMzEsOSArMzMxLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5NU09MaXN0IHsgZmFsc2Ug
fTsKIH07CiAKLWlubGluZSBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6U3R5bGVkTWFya3VwQWNj
dW11bGF0b3IoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBWZWN0
b3I8Tm9kZSo+KiBub2RlcywgUmVzb2x2ZVVSTHMgdXJsc1RvUmVzb2x2ZSwgU2VyaWFsaXplQ29t
cG9zZWRUcmVlIHNlcmlhbGl6ZUNvbXBvc2VkVHJlZSwKLSAgICBBbm5vdGF0ZUZvckludGVyY2hh
bmdlIGFubm90YXRlLCBTdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSBzdGFuZGFy
ZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgTVNPTGlzdE1vZGUgbXNvTGlzdE1vZGUsIGJv
b2wgbmVlZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwgTm9kZSogaGlnaGVzdE5vZGVUb0JlU2Vy
aWFsaXplZCkKLSAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCB1cmxzVG9SZXNvbHZlKQor
aW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcihj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFZlY3RvcjxOb2RlKj4q
IG5vZGVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJMcywgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNl
cmlhbGl6ZUNvbXBvc2VkVHJlZSwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgU3Rh
bmRhcmRGb250RmFtaWx5U2VyaWFsaXphdGlvbk1vZGUgc3RhbmRhcmRGb250RmFtaWx5U2VyaWFs
aXphdGlvbk1vZGUsIE1TT0xpc3RNb2RlIG1zb0xpc3RNb2RlLCBib29sIG5lZWRzUG9zaXRpb25T
dHlsZUNvbnZlcnNpb24sIE5vZGUqIGhpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQpCisgICAgOiBN
YXJrdXBBY2N1bXVsYXRvcihub2RlcywgcmVzb2x2ZVVSTHMpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0
KQogICAgICwgbV9lbmQoZW5kKQogICAgICwgbV9hbm5vdGF0ZShhbm5vdGF0ZSkKQEAgLTgzNSw3
ICs4MzQsNyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mCiAgICAgcmV0dXJuIHNwZWNpYWxDb21t
b25BbmNlc3RvcjsKIH0KIAotc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHVybHNUb1Jlc29sdmUsIFNl
cmlhbGl6ZUNvbXBvc2VkVHJlZSBzZXJpYWxpemVDb21wb3NlZFRyZWUsCitzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgUmVz
b2x2ZVVSTHMgcmVzb2x2ZVVSTHMsIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZSBzZXJpYWxpemVDb21w
b3NlZFRyZWUsCiAgICAgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVydEJs
b2Nrc1RvSW5saW5lcyBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBTdGFuZGFyZEZvbnRGYW1pbHlT
ZXJpYWxpemF0aW9uTW9kZSBzdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgTVNP
TGlzdE1vZGUgbXNvTGlzdE1vZGUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCI8YnIgY2xhc3M9XCIiIEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lICJcIj4iKSk7CkBAIC04NjIs
NyArODYxLDcgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKIAogICAgIE5vZGUqIHNwZWNpYWxD
b21tb25BbmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cChzdGFydCwgZW5kLCAq
Y29tbW9uQW5jZXN0b3IsIGFubm90YXRlKTsKIAotICAgIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
IGFjY3VtdWxhdG9yKHN0YXJ0LCBlbmQsIG5vZGVzLCB1cmxzVG9SZXNvbHZlLCBzZXJpYWxpemVD
b21wb3NlZFRyZWUsIGFubm90YXRlLCBzdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9k
ZSwgbXNvTGlzdE1vZGUsIG5lZWRzUG9zaXRpb25TdHlsZUNvbnZlcnNpb24sIHNwZWNpYWxDb21t
b25BbmNlc3Rvcik7CisgICAgU3R5bGVkTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3Ioc3Rh
cnQsIGVuZCwgbm9kZXMsIHJlc29sdmVVUkxzLCBzZXJpYWxpemVDb21wb3NlZFRyZWUsIGFubm90
YXRlLCBzdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgbXNvTGlzdE1vZGUsIG5l
ZWRzUG9zaXRpb25TdHlsZUNvbnZlcnNpb24sIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7CiAKICAg
ICBQb3NpdGlvbiBzdGFydEFkanVzdGVkRm9ySW50ZXJjaGFuZ2VOZXdsaW5lID0gc3RhcnQ7CiAg
ICAgaWYgKGFubm90YXRlID09IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6OlllcyAmJiBuZWVkSW50
ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIodmlzaWJsZVN0YXJ0KSkgewpAQCAtOTM0LDkgKzkzMywxMCBA
QCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJu
YWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAogICAgIHJldHVybiBhY2N1bXVsYXRvci50YWtlUmVz
dWx0cygpOwogfQogCi1TdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2Uo
Y29uc3QgUmFuZ2UmIHJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVydEJsb2Nrc1RvSW5saW5lcyBjb252ZXJ0QmxvY2tzVG9J
bmxpbmVzLCBSZXNvbHZlVVJMcyB1cmxzVG9SZXNsdmUpCitTdHJpbmcgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBWZWN0b3I8Tm9k
ZSo+KiBub2RlcywgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVydEJsb2Nr
c1RvSW5saW5lcyBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJM
cykKIHsKLSAgICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRl
cm5hbChyYW5nZS5zdGFydFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCksIG5vZGVzLCB1
cmxzVG9SZXNsdmUsIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8sCisgICAgcmV0dXJuIHNlcmlh
bGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdl
LmVuZCksCisgICAgICAgIG5vZGVzLCByZXNvbHZlVVJMcywgU2VyaWFsaXplQ29tcG9zZWRUcmVl
OjpObywKICAgICAgICAgYW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFN0YW5kYXJk
Rm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlOjpLZWVwLCBNU09MaXN0TW9kZTo6RG9Ob3RQcmVz
ZXJ2ZSk7CiB9CiAKQEAgLTEwNDMsOSArMTA0Myw5IEBAIFJlZjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcm
CiAgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCi1TdHJpbmcgc2VyaWFsaXplRnJhZ21lbnQoY29u
c3QgTm9kZSYgbm9kZSwgU2VyaWFsaXplZE5vZGVzIHJvb3QsIFZlY3RvcjxOb2RlKj4qIG5vZGVz
LCBSZXNvbHZlVVJMcyB1cmxzVG9SZXNvbHZlLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05h
bWVzVG9Ta2lwLCBTZXJpYWxpemF0aW9uU3ludGF4IHNlcmlhbGl6YXRpb25TeW50YXgpCitTdHJp
bmcgc2VyaWFsaXplRnJhZ21lbnQoY29uc3QgTm9kZSYgbm9kZSwgU2VyaWFsaXplZE5vZGVzIHJv
b3QsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJMcywgVmVjdG9y
PFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCwgU2VyaWFsaXphdGlvblN5bnRheCBzZXJp
YWxpemF0aW9uU3ludGF4KQogewotICAgIE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5v
ZGVzLCB1cmxzVG9SZXNvbHZlLCBzZXJpYWxpemF0aW9uU3ludGF4KTsKKyAgICBNYXJrdXBBY2N1
bXVsYXRvciBhY2N1bXVsYXRvcihub2RlcywgcmVzb2x2ZVVSTHMsIHNlcmlhbGl6YXRpb25TeW50
YXgpOwogICAgIHJldHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5v
ZGUmPihub2RlKSwgcm9vdCwgdGFnTmFtZXNUb1NraXApOwogfQogCkBAIC0xMTEyLDIwICsxMTEy
LDE2IEBAIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSogbm9kZSkKICAgICByZXR1cm4gaXNU
YWJTcGFuVGV4dE5vZGUoZmlyc3RDaGlsZC0+Zmlyc3RDaGlsZCgpKSAmJiBzZWNvbmRDaGlsZC0+
aXNUZXh0Tm9kZSgpOwogfQogCi1zdGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVzTmV3bGluZShj
b25zdCBSYW5nZSYgY29udGV4dCkKK3N0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5l
KGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0KQogewotICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbihjb250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgTm9kZSogY29udGFpbmVyID0gcG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7Ci0gICAgaWYgKCFjb250YWlu
ZXIgfHwgIWNvbnRhaW5lci0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUo
KTsKKyAgICBhdXRvIGNvbnRhaW5lciA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCkpLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9k
ZSgpOworICAgIHJldHVybiBjb250YWluZXIgJiYgY29udGFpbmVyLT5yZW5kZXJlcigpICYmIGNv
bnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIAotUmVm
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgdGV4dCkKK1JlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQp
CiB7Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY29udGV4dC5vd25lckRvY3VtZW50KCk7Ci0g
ICAgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCk7CisgICAgYXV0byBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKICAgICAKICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmcmFnbWVudDsKQEAgLTExNjEsMTQgKzExNTcsMTQgQEAgUmVmPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
dGV4dCkKICAgICB9CiAKICAgICAvLyBCcmVhayBzdHJpbmcgaW50byBwYXJhZ3JhcGhzLiBFeHRy
YSBsaW5lIGJyZWFrcyB0dXJuIGludG8gZW1wdHkgcGFyYWdyYXBocy4KLSAgICBOb2RlKiBibG9j
a05vZGUgPSBlbmNsb3NpbmdCbG9jayhjb250ZXh0LmZpcnN0Tm9kZSgpKTsKKyAgICBOb2RlKiBi
bG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCktPmZpcnN0
Tm9kZSgpKTsKICAgICBFbGVtZW50KiBibG9jayA9IGRvd25jYXN0PEVsZW1lbnQ+KGJsb2NrTm9k
ZSk7CiAgICAgYm9vbCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Jsb2NrID0gYmxvY2tOb2RlCiAgICAg
ICAgICYmIGJsb2NrTm9kZS0+aXNFbGVtZW50Tm9kZSgpCiAgICAgICAgICYmICFibG9jay0+aGFz
VGFnTmFtZShib2R5VGFnKQogICAgICAgICAmJiAhYmxvY2stPmhhc1RhZ05hbWUoaHRtbFRhZykK
LSAgICAgICAgJiYgYmxvY2sgIT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29udGV4dC5zdGFy
dFBvc2l0aW9uKCkpOwotICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgJiYgYmxvY2sgIT0gZWRp
dGFibGVSb290Rm9yUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnRleHQu
c3RhcnQpKTsKKyAgICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJv
bChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCkpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4gbGlzdCA9IHN0cmluZy5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCdcbicp
OwogICAgIHNpemVfdCBudW1MaW5lcyA9IGxpc3Quc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmgKaW5kZXggODY1NjdmNDU3ODBhYWJhNTFiM2VkODJhMDlhNTFlMjIwMjZhMDI2Yi4uZmZhMzI3
ZTllZWNlNTVkZTU3ZjI0NGNlOGI1YWEyZmVlZDhiNjRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5oCkBAIC00NCwxMSArNDQsMTIgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBIVE1MRWxlbWVudDsK
IGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwotc3RydWN0IFByZXNlbnRhdGlvblNpemU7CiBjbGFz
cyBRdWFsaWZpZWROYW1lOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwog
CitzdHJ1Y3QgUHJlc2VudGF0aW9uU2l6ZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogdm9pZCBy
ZXBsYWNlU3VicmVzb3VyY2VVUkxzKFJlZjxEb2N1bWVudEZyYWdtZW50PiYmLCBIYXNoTWFwPEF0
b21TdHJpbmcsIEF0b21TdHJpbmc+JiYpOwogdm9pZCByZW1vdmVTdWJyZXNvdXJjZVVSTEF0dHJp
YnV0ZXMoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIFdURjo6RnVuY3Rpb248Ym9vbChjb25zdCBV
UkwmKT4gc2hvdWxkUmVtb3ZlVVJMKTsKIApAQCAtNTcsNyArNTgsNyBAQCBlbnVtIGNsYXNzIE1T
T0xpc3RRdWlya3MgOiBib29sIHsgQ2hlY2tJZk5lZWRlZCwgRGlzYWJsZWQgfTsKIFN0cmluZyBz
YW5pdGl6ZU1hcmt1cChjb25zdCBTdHJpbmcmLCBNU09MaXN0UXVpcmtzID0gTVNPTGlzdFF1aXJr
czo6RGlzYWJsZWQsIE9wdGlvbmFsPFdURjo6RnVuY3Rpb248dm9pZChEb2N1bWVudEZyYWdtZW50
Jik+PiBmcmFnbWVudFNhbml0aXplciA9IFdURjo6bnVsbG9wdCk7CiBTdHJpbmcgc2FuaXRpemVk
TWFya3VwRm9yRnJhZ21lbnRJbkRvY3VtZW50KFJlZjxEb2N1bWVudEZyYWdtZW50PiYmLCBEb2N1
bWVudCYsIE1TT0xpc3RRdWlya3MsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxNYXJrdXApOwogCi1X
RUJDT1JFX0VYUE9SVCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKK1dFQkNPUkVfRVhQT1JUIFJl
ZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJh
bmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOwogV0VCQ09SRV9FWFBPUlQgUmVmPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCYsIGNvbnN0
IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xp
Y3kgPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJh
Z21lbnQ+PiBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKEVsZW1lbnQmLCBjb25zdCBT
dHJpbmcmIG1hcmt1cCwgUGFyc2VyQ29udGVudFBvbGljeSk7CiBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gY3JlYXRlRnJhZ21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KERvY3VtZW50JiwgY29u
c3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUpOwpA
QCAtNzIsNyArNzMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiByZXBsYWNlQ2hpbGRyZW5XaXRoRnJh
Z21lbnQoQ29udGFpbmVyTm9kZSYsIFJlZjxEb2N1bWVudEZyYWdtZQogZW51bSBjbGFzcyBSZXNv
bHZlVVJMcyA6IHVpbnQ4X3QgeyBObywgWWVzLCBZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9y
UHJpdmFjeSB9OwogZW51bSBjbGFzcyBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzIDogdWludDhfdCB7
IE5vLCBZZXMgfTsKIGVudW0gY2xhc3MgU2VyaWFsaXplQ29tcG9zZWRUcmVlIDogdWludDhfdCB7
IE5vLCBZZXMgfTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZShjb25zdCBSYW5nZSYsIFZlY3RvcjxOb2RlKj4qID0gbnVsbHB0ciwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSA9IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252ZXJ0
QmxvY2tzVG9JbmxpbmVzID0gQ29udmVydEJsb2Nrc1RvSW5saW5lczo6Tm8sIFJlc29sdmVVUkxz
ID0gUmVzb2x2ZVVSTHM6Ok5vKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemVQcmVz
ZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShjb25zdCBTaW1wbGVSYW5nZSYsIFZlY3RvcjxOb2RlKj4q
ID0gbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IEFubm90YXRlRm9ySW50ZXJjaGFu
Z2U6Ok5vLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gQ29udmVydEJsb2Nrc1RvSW5saW5lczo6
Tm8sIFJlc29sdmVVUkxzID0gUmVzb2x2ZVVSTHM6Ok5vKTsKIFN0cmluZyBzZXJpYWxpemVQcmVz
ZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVzb2x2ZVVS
THMgPSBSZXNvbHZlVVJMczo6Tm8sIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZSA9IFNlcmlhbGl6ZUNv
bXBvc2VkVHJlZTo6Tm8sIFZlY3RvcjxOb2RlKj4qID0gbnVsbHB0cik7CiAKIGVudW0gY2xhc3Mg
U2VyaWFsaXplZE5vZGVzIDogdWludDhfdCB7IFN1YnRyZWVJbmNsdWRpbmdOb2RlLCBTdWJ0cmVl
c09mQ2hpbGRyZW4gfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
Y2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXggMDFhYjkxN2QwZGM5NzhjMzFmZWZmN2E5YTA5
MGNkMDJiZjFkZDhkNi4uYTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2YyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJj
aGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2Uu
aCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VyaWFs
aXplZEF0dGFjaG1lbnREYXRhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQxNyw3ICs0
MTYsNyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
KE5vZGUmIG5vZGUsIFdURjo6RnVuY3Rpb248Ym9vbAogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBjcmVhdGUoKTsKIAotICAgIC8vIElmIHRoZSBwYWdlIHdhcyBsb2FkZWQgd2l0aCBq
YXZhc2NyaXB0IGVuYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gYXJjaGl2ZSA8bm9zY3JpcHQ+IHRh
Z3MKKyAgICAvLyBJZiB0aGUgcGFnZSB3YXMgbG9hZGVkIHdpdGggSmF2YVNjcmlwdCBlbmFibGVk
LCB3ZSBkb24ndCB3YW50IHRvIGFyY2hpdmUgPG5vc2NyaXB0PiB0YWdzCiAgICAgLy8gSW4gcHJh
Y3RpY2Ugd2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHNjcmlwdGluZyB3YXMgZW5hYmxl
ZCB3aGVuIHRoZSBwYWdlIHdhcyBvcmlnaW5hbGx5IGxvYWRlZAogICAgIC8vIGJ1dCB3ZSBjYW4g
YXBwcm94aW1hdGUgdGhhdCBieSBjaGVja2luZyBpZiBzY3JpcHRpbmcgaXMgZW5hYmxlZCByaWdo
dCBub3cuCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxRdWFsaWZpZWROYW1lPj4gdGFnTmFt
ZXNUb0ZpbHRlcjsKQEAgLTQ1NCwxOSArNDUzLDE2IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBjcmVh
dGUobWFpblJlc291cmNlLnJlbGVhc2VOb25OdWxsKCksIGRvY3VtZW50TG9hZGVyLT5zdWJyZXNv
dXJjZXMoKSwgV1RGTW92ZShzdWJmcmFtZUFyY2hpdmVzKSk7CiB9CiAKLVJlZlB0cjxMZWdhY3lX
ZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UqIHJhbmdlKQorUmVmUHRy
PExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIAotICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/CiAgICAgVmVjdG9yPE5v
ZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3Ry
aW5nKGRvY3VtZW50KSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKCpyYW5n
ZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOworICAgIFN0cmluZyBt
YXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UocmFuZ2UsICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZTo6WWVzKTsKICAgICByZXR1cm4gY3JlYXRlKG1hcmt1cFN0cmluZywgKmZyYW1lLCBu
b2RlTGlzdCwgbnVsbHB0cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAppbmRleCBiNTFjZjYxNmJmMDgyZTI5NDA5YjQ0
MjFhNDNjYjcxMTE0ODBhOTg5Li42N2FmYTgzZGM3YTliZjIyZjhlODk2NTFlZTllYzQzOTMyZjA2
NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lX
ZWJBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5
V2ViQXJjaGl2ZS5oCkBAIC0zNSw3ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRnJhbWU7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CisKK3N0cnVjdCBTaW1wbGVSYW5n
ZTsKIAogY2xhc3MgTGVnYWN5V2ViQXJjaGl2ZSBmaW5hbCA6IHB1YmxpYyBBcmNoaXZlIHsKIHB1
YmxpYzoKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKE5vZGUmLCBXVEY6OkZ1bmN0aW9uPGJv
b2woRnJhbWUmKT4mJiBmcmFtZUZpbHRlciA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoRnJhbWUmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZUZyb21TZWxlY3Rp
b24oRnJhbWUqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IGNyZWF0ZShSYW5nZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8
TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiByYXdEYXRhUmVwcmVzZW50YXRpb24oKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA2Zjk4YWFlOGQ3NTZk
MjJkODcwOGJkN2E2M2NlYWRiN2VhNWMxZTdkLi41NjZkNWQ0NjkzMDllYjhjNjMzNWUwMmEyZWMx
NzBiMWM2MjExYTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAt
NzEsNiArNzEsNyBAQAogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUG9z
aXRpb24uaCIKICNpbmNsdWRlICJQcm9taXNlZEF0dGFjaG1lbnRJbmZvLmgiCisjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJBdHRhY2htZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtMjM5LDcg
KzI0MCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBpZiAoIW1fZHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJzLmlzRW1wdHkoKSAmJiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UgJiYgdHJ5VG9V
cGRhdGVEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMoZHJhZ0RhdGEpKSB7CiAgICAgICAgIG1fZHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJzLmNsZWFyKCk7Ci0gICAgICAgIG1fZHJvcHBlZEltYWdlUGxh
Y2Vob2xkZXJSYW5nZSA9IG51bGxwdHI7CisgICAgICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJSYW5nZSA9IFdURjo6bnVsbG9wdDsKICAgICAgICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBu
dWxscHRyOwogICAgICAgICBjbGVhckRyYWdDYXJldCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTYzMyw3ICs2MzQsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFn
KGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgYXV0byBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpOwor
ICAgICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRl
eHQpOwogICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVy
Zm9ybVR3b1N0ZXBEcm9wKGZyYWdtZW50LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwg
aXNNb3ZlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC04NTYsOSArODU3LDEwIEBA
IHN0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIAogc3RhdGljIHZvaWQg
c2VsZWN0RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBlbGVtZW50LmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICByYW5nZS0+c2VsZWN0
Tm9kZShlbGVtZW50KTsKLSAgICBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7Cisg
ICAgaWYgKGF1dG8gZnJhbWUgPSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKSkgeworICAgICAg
ICBpZiAoYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoZWxlbWVudCkpCisgICAg
ICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKCpyYW5nZSk7CisgICAgfQog
fQogCiBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvckRIVE1MRHJhZyhjb25zdCBJbnRQb2ludCYg
bW91c2VEcmFnZ2VkUG9pbnQsIGNvbnN0IEludFBvaW50JiBkcmFnT3JpZ2luLCBjb25zdCBJbnRQ
b2ludCYgZHJhZ0ltYWdlT2Zmc2V0LCBib29sIGlzTGlua0ltYWdlKQpAQCAtMTM3Myw3ICsxMzc1
LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKERyYWdJbWFnZSBpbWFnZSwg
Y29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNvbnMKIAogdm9pZCBEcmFnQ29udHJvbGxlcjo6cmVt
b3ZlQWxsRHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKCkKIHsKLSAgICBtX2Ryb3BwZWRJbWFnZVBs
YWNlaG9sZGVyUmFuZ2UgPSBudWxscHRyOworICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJS
YW5nZSA9IFdURjo6bnVsbG9wdDsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogc3RkOjpl
eGNoYW5nZShtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVycywgeyB9KSkgewogICAgICAgICBpZiAo
cGxhY2Vob2xkZXItPmlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICBwbGFjZWhvbGRlci0+cmVt
b3ZlKCk7CkBAIC0xNDU1LDEzICsxNDU3LDEzIEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6Omluc2Vy
dERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVjdG9yPEludFNpemU+CiAg
ICAgYXV0byBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqZG9jdW1l
bnQsIFdURk1vdmUoZnJhZ21lbnQpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50
TmVzdGluZywgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFjZSB9LCBFZGl0QWN0
aW9uOjpJbnNlcnRGcm9tRHJvcCk7CiAgICAgY29tbWFuZC0+YXBwbHkoKTsKIAotICAgIGF1dG8g
aW5zZXJ0ZWRDb250ZW50UmFuZ2UgPSBjb21tYW5kLT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpOwor
ICAgIGF1dG8gaW5zZXJ0ZWRDb250ZW50UmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29tbWFuZC0+
aW5zZXJ0ZWRDb250ZW50UmFuZ2UoKSk7CiAgICAgaWYgKCFpbnNlcnRlZENvbnRlbnRSYW5nZSkg
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gY29udGFpbmVyID0gbWFrZVJlZlB0cihpbnNlcnRlZENvbnRlbnRSYW5nZS0+
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSk7CisgICAgYXV0byBjb250YWluZXIgPSBjb21tb25J
bmNsdXNpdmVBbmNlc3RvcigqaW5zZXJ0ZWRDb250ZW50UmFuZ2UpOwogICAgIGlmICghaXM8Q29u
dGFpbmVyTm9kZT4oY29udGFpbmVyKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2OSw3ICsxNDcxLDcgQEAgdm9pZCBEcmFnQ29udHJvbGxl
cjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50
U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+IHBsYWNlaG9sZGVyczsK
ICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEltYWdl
RWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKmNvbnRhaW5lcikpKSB7Ci0gICAgICAg
IGF1dG8gaW50ZXJzZWN0c05vZGUgPSBpbnNlcnRlZENvbnRlbnRSYW5nZS0+aW50ZXJzZWN0c05v
ZGUocGxhY2Vob2xkZXIpOworICAgICAgICBhdXRvIGludGVyc2VjdHNOb2RlID0gY3JlYXRlTGl2
ZVJhbmdlKCppbnNlcnRlZENvbnRlbnRSYW5nZSktPmludGVyc2VjdHNOb2RlKHBsYWNlaG9sZGVy
KTsKICAgICAgICAgaWYgKCFpbnRlcnNlY3RzTm9kZS5oYXNFeGNlcHRpb24oKSAmJiBpbnRlcnNl
Y3RzTm9kZS5yZXR1cm5WYWx1ZSgpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFwcGVuZChw
bGFjZWhvbGRlcik7CiAgICAgfQpAQCAtMTQ5Myw3ICsxNDk1LDcgQEAgdm9pZCBEcmFnQ29udHJv
bGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8
SW50U2l6ZT4KICAgICBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UgPSBXVEZNb3ZlKGlu
c2VydGVkQ29udGVudFJhbmdlKTsKIAogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5jbGVhcigpOwot
ICAgIGNhcmV0Q29udHJvbGxlci5zZXRDYXJldFBvc2l0aW9uKG1fZHJvcHBlZEltYWdlUGxhY2Vo
b2xkZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBjYXJldENvbnRyb2xsZXIuc2V0Q2Fy
ZXRQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlclJhbmdlLT5zdGFydCkpOwogfQogCiB2b2lkIERyYWdDb250cm9sbGVyOjpmaW5hbGl6
ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVyKEhUTUxJbWFnZUVsZW1lbnQmIHBsYWNlaG9sZGVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCmluZGV4IDkyMjRhYjIwNmNkZmViYjUzZjEx
Yzc4YTNlYWUyMDgxM2NmZGQyNmMuLmUzMDBkMzI4ZDU3OWVkYjE3MWYwM2UyMDA4ZjE0ZDhiN2Vi
ZjY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwbGFjZURyYWdDYXJldChjb25zdCBJbnRQb2ludCYpOwog
CiAgICAgY29uc3QgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4mIGRyb3BwZWRJbWFnZVBs
YWNlaG9sZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzOyB9
Ci0gICAgY29uc3QgUmVmUHRyPFJhbmdlPiYgZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsgfQorICAgIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaW5hbGl6ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVyKEhUTUxJ
bWFnZUVsZW1lbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydERyb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVjdG9yPEludFNpemU+JiBpbWFnZVNpemVzKTsK
QEAgLTE2MSw3ICsxNjIsNyBAQCBwcml2YXRlOgogICAgIFVSTCBtX2RyYWdnaW5nSW1hZ2VVUkw7
CiAgICAgYm9vbCBtX2lzUGVyZm9ybWluZ0Ryb3AgeyBmYWxzZSB9OwogICAgIFZlY3RvcjxSZWY8
SFRNTEltYWdlRWxlbWVudD4+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzOwotICAgIFJlZlB0
cjxSYW5nZT4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOworICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7CiB9OwogCiBXRUJDT1JF
X0VYUE9SVCBib29sIGlzRHJhZ2dhYmxlTGluayhjb25zdCBFbGVtZW50Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCAyOTUwOWM1M2M2YmY4MjYyYmJiYjczZTExYjViYmM1ZmUyOTk5ZWNhLi4yMDgz
NTg2YzI3M2JlNWJlNTQ4NzcyYTFmNTQ2ZmY5NGIzZjczZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
QEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCkBAIC03MTEsODAgKzcxMiw3NyBAQCBib29sIFBhZ2U6OmZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRp
ZFdyYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hp
bmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGludCBs
aW1pdCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdlcywgaW50JiBpbmRleEZvclNl
bGVjdGlvbikKK2F1dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsaW1pdCkgLT4gTWF0Y2hpbmdSYW5nZXMK
IHsKLSAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJlc3VsdFJhbmdlczsKLQotICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gMDsKKyAgICBNYXRjaGluZ1JhbmdlcyByZXN1bHQ7CiAKICAgICBGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUqIGZyYW1lV2l0aFNlbGVjdGlvbiA9IG51
bGxwdHI7CiAgICAgZG8gewotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9y
VGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSByZXN1bHRSYW5nZXMu
c2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHRSYW5nZXMpOworICAgICAgICBmcmFtZS0+ZWRpdG9y
KCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGlt
aXQgLSByZXN1bHQucmFuZ2VzLnNpemUoKSkgOiAwLCB0cnVlLCAmcmVzdWx0LnJhbmdlcyk7CiAg
ICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICAgICAgZnJh
bWVXaXRoU2VsZWN0aW9uID0gZnJhbWU7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUo
ZnJhbWUsIHRydWUsIENhbldyYXA6Ok5vKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKLSAgICBp
ZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChyZXN1
bHQucmFuZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGlmIChm
cmFtZVdpdGhTZWxlY3Rpb24pIHsKLSAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNo
QWZ0ZXJVc2VyU2VsZWN0aW9uOworICAgICAgICByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBO
b01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uOwogICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBm
cmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
ICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkgewotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IHJlc3VsdFJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5n
ZShyZXN1bHRSYW5nZXNbaSAtIDFdKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFz
RXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkgewotICAgICAg
ICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAg
ICAgICAgICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVk
UmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3JlYXRl
TGl2ZVJhbmdlKHJlc3VsdC5yYW5nZXNbaSAtIDFdKSk7CisgICAgICAgICAgICAgICAgaWYgKCFj
b21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmV0dXJu
VmFsdWUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0
aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFu
Z2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgY3JlYXRlTGl2
ZVJhbmdlKHJlc3VsdFJhbmdlc1tpXSkpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhh
c0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19F
TkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQu
cmV0dXJuVmFsdWUoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9y
U2VsZWN0aW9uID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKLSAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0
aW9uID0gcmVzdWx0UmFuZ2VzLnNpemUoKSAtIDE7CisgICAgICAgICAgICByZXN1bHQuaW5kZXhG
b3JTZWxlY3Rpb24gPSByZXN1bHQucmFuZ2VzLnNpemUoKSAtIDE7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKKyAgICAgICAgICAgIHJlc3VsdC5pbmRl
eEZvclNlbGVjdGlvbiA9IDA7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3Vs
dFJhbmdlcykKLSAgICAgICAgbWF0Y2hSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5k
T3B0aW9ucyBvcHRpb25zKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVm
ZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5vd25lckRv
Y3VtZW50KCkucGFnZSgpICE9IHRoaXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpLnBhZ2UoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgQ2FuV3JhcCBjYW5XcmFwID0gb3B0aW9ucy5jb250YWlucyhXcmFwQXJvdW5kKSA/IENhbldy
YXA6OlllcyA6IENhbldyYXA6Ok5vOwotICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdl
ID8gcmVmZXJlbmNlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgp
OworICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0
YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOwogICAgIEZy
YW1lKiBzdGFydEZyYW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAoYXV0byByZXN1
bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0g
c3RhcnRGcmFtZSA/IG1ha2VTaW1wbGVSYW5nZShyZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxv
cHQsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UocmVzdWx0UmFuZ2UpOworICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZyYW1l
LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IHJl
ZmVyZW5jZVJhbmdlIDogV1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJh
bWUoZnJhbWUsICFvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyksIGNhbldyYXApOwogICAgIH0g
d2hpbGUgKGZyYW1lICYmIGZyYW1lICE9IHN0YXJ0RnJhbWUpOwogCiAgICAgLy8gU2VhcmNoIGNv
bnRlbnRzIG9mIHN0YXJ0RnJhbWUsIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSByZWZlcmVuY2Ug
cmFuZ2UgdGhhdCB3ZSBkaWQgZWFybGllci4KICAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVz
dCBzZWFyY2ggYWdhaW4gd2l0aCB3cmFwIG9uLgogICAgIGlmIChjYW5XcmFwID09IENhbldyYXA6
OlllcyAmJiByZWZlcmVuY2VSYW5nZSkgewotICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9
IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBtYWtlU2ltcGxlUmFu
Z2UoKnJlZmVyZW5jZVJhbmdlKSwgb3B0aW9ucyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0
aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOwor
ICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdl
T2ZTdHJpbmcodGFyZ2V0LCAqcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwg
U3RhcnRJblNlbGVjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAog
dW5zaWduZWQgUGFnZTo6ZmluZE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50LCBTaG91bGRIaWdobGln
aHRNYXRjaGVzIHNob3VsZEhpZ2hsaWdodE1hdGNoZXMsIFNob3VsZE1hcmtNYXRjaGVzIHNob3Vs
ZE1hcmtNYXRjaGVzKQpAQCAtODc5LDI0ICs4NzcsMjIgQEAgc3RhdGljIHZvaWQgcmVwbGFjZVJh
bmdlcyhQYWdlJiBwYWdlLCBjb25zdCBWZWN0b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+JiByYW5n
ZXMKICAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5yZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZW1lbnRUZXh0LCBFZGl0b3I6OlNlbGVjdFJlcGxh
Y2VtZW50OjpZZXMsIEVkaXRvcjo6U21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0
UmVwbGFjZW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQogCi11aW50MzJfdCBQYWdlOjpyZXBs
YWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFJlZjxSYW5nZT4+JiByYW5nZXNUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpCit1
aW50MzJfdCBQYWdlOjpyZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFNpbXBsZVJh
bmdlPiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9v
bCAvKnNlbGVjdGlvbk9ubHkqLykKIHsKLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ug
c2hvdWxkIHJlc3BlY3QgdGhlIGBzZWxlY3Rpb25Pbmx5YCBmbGFnIGJ5IGNoZWNraW5nIHdoZXRo
ZXIgZWFjaCByYW5nZSBiZWluZyByZXBsYWNlZCBpcwotICAgIC8vIGNvbnRhaW5lZCB3aXRoaW4g
aXRzIGZyYW1lJ3Mgc2VsZWN0aW9uLgotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25Pbmx5KTsK
KyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIHJlc3BlY3QgdGhlIGBzZWxl
Y3Rpb25Pbmx5YCBmbGFnIGJ5IGNoZWNraW5nIHdoZXRoZXIgZWFjaCByYW5nZSBiZWluZyByZXBs
YWNlZCBpcyBjb250YWluZWQgd2l0aGluIGl0cyBmcmFtZSdzIHNlbGVjdGlvbi4KIAogICAgIFZl
Y3RvcjxGaW5kUmVwbGFjZW1lbnRSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZXM7CiAgICAgcmVwbGFj
ZW1lbnRSYW5nZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyYW5nZXNUb1JlcGxhY2Uuc2l6ZSgp
KTsKIAogICAgIGZvciAoYXV0byYgcmFuZ2UgOiByYW5nZXNUb1JlcGxhY2UpIHsKLSAgICAgICAg
YXV0byBoaWdoZXN0Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChyYW5nZS0+
c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwgaGlnaGVzdFJv
b3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChyYW5nZS0+ZW5kUG9zaXRpb24oKSkgfHwgIWhpZ2hl
c3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgIGF1dG8gaGlnaGVzdFJvb3QgPSBt
YWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJhbmdlLnN0YXJ0KSkpOworICAgICAgICBpZiAoIWhpZ2hlc3RSb290IHx8IGhpZ2hlc3RSb290
ICE9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdl
LmVuZCkpIHx8ICFoaWdoZXN0Um9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKmhpZ2hlc3RSb290KTsKICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5kKHsg
V1RGTW92ZShoaWdoZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZSkgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5oCmluZGV4IDlkOGY4ZmI1M2Y4M2E2Njc1MDE2M2U5ZjAzNDQyMTcwMTNmNmIzN2Mu
LjkxNzM2ZmI4ZGNiYzAyMDM0YjJjMDQzZWUzMzExZjNkMjBjOTZmMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CkBAIC0xMjksNyArMTI5LDYgQEAgY2xhc3MgUGx1Z2luVmlld0Jhc2U7CiBjbGFzcyBQb2ludGVy
Q2FwdHVyZUNvbnRyb2xsZXI7CiBjbGFzcyBQb2ludGVyTG9ja0NvbnRyb2xsZXI7CiBjbGFzcyBQ
cm9ncmVzc1RyYWNrZXI7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNz
IFJlc291cmNlVXNhZ2VPdmVybGF5OwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKQEAgLTE1
Miw2ICsxNTEsOCBAQCBjbGFzcyBXZWJHTFN0YXRlVHJhY2tlcjsKIGNsYXNzIFdoZWVsRXZlbnRE
ZWx0YUZpbHRlcjsKIGNsYXNzIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjsKIAorc3RydWN0IFNpbXBs
ZVJhbmdlOworCiB1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OwogdXNpbmcgU2hh
cmVkU3RyaW5nSGFzaCA9IHVpbnQzMl90OwogCkBAIC0yODksMTIgKzI5MCwxMiBAQCBwdWJsaWM6
CiAgICAgYm9vbCB0YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBt
X3RhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50czsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBEaWRXcmFwKiA9IG51bGxw
dHIpOwotICAgIFdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHJlcGxhY2VSYW5nZXNXaXRoVGV4dChj
b25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJhbmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dWludDMyX3QgcmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4m
IHJhbmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2Vs
ZWN0aW9uT25seSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0KGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPFJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmlu
ZE9wdGlvbnMpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc2Vh
cmNoUmFuZ2UsIEZpbmRPcHRpb25zKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNv
dW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1h
dGNoQ291bnQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVu
c2lnbmVkIG1heE1hdGNoQ291bnQpOwpAQCAtMzA0LDEzICszMDUsMTcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hCZWZvcmVQcmludEV2ZW50KCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEFmdGVyUHJpbnRFdmVudCgpOwogCi0gICAgLy8gRmlu
ZCBhbGwgdGhlIFJhbmdlcyBmb3IgdGhlIG1hdGNoaW5nIHRleHQuCisgICAgLy8gRmluZCBhbGwg
dGhlIHJhbmdlcyBmb3IgdGhlIG1hdGNoaW5nIHRleHQuCiAgICAgLy8gVXBvbiByZXR1cm4sIGlu
ZGV4Rm9yU2VsZWN0aW9uIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICAgLy8gMCBp
ZiB0aGVyZSBpcyBubyB1c2VyIHNlbGVjdGlvbgogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmly
c3QgcmFuZ2UgYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0aW9uCiAgICAgLy8gTm9NYXRjaEFmdGVyVXNl
clNlbGVjdGlvbiBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyB0ZXh0IGFmdGVyIHRoZSB1c2VyIHNl
bGVjdGlvbi4KLSAgICBlbnVtIHsgTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbiA9IC0xIH07Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3Ry
aW5nJiwgRmluZE9wdGlvbnMsIGludCBtYXhDb3VudCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+Jiwg
aW50JiBpbmRleEZvclNlbGVjdGlvbik7CisgICAgc3RydWN0IE1hdGNoaW5nUmFuZ2VzIHsKKyAg
ICAgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByYW5nZXM7CisgICAgICAgIGludCBpbmRleEZvclNl
bGVjdGlvbiB7IDAgfTsgLy8gRklYTUU6IENvbnNpZGVyIE9wdGlvbmFsPHVuc2lnbmVkPiBvciB1
bnNpZ25lZCBmb3IgdGhpcyBpbnN0ZWFkLgorICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbiA9IC0xOworICAgIFdFQkNPUkVfRVhQT1JUIE1h
dGNoaW5nUmFuZ2VzIGZpbmRUZXh0TWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywg
dW5zaWduZWQgbWF4Q291bnQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0Zy
YW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggM2Q3
YTVlOWQ5NjJjZDcwMzkzY2ZkZjM1YjhkZTA5ZmM4MTAzYzI5Ni4uNTg5OGJlNzBiM2ZhMjM1Yzkw
ODhiNDNhNzZkNzI5N2IxZmQyNDcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9p
b3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0K
QEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKICNpbXBv
cnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb24uaCIKKyNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgogI2lt
cG9ydCAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0Q29udHJv
bC5oIgpAQCAtMTE2LDE5ICsxMTcsMTggQEAgTlNBcnJheSAqRnJhbWU6OndvcmRzSW5DdXJyZW50
UGFyYWdyYXBoKCkgY29uc3QKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbihwYWdlKCkt
PnNlbGVjdGlvbigpLnN0YXJ0KCksIHBhZ2UoKS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGVuZChwb3NpdGlvbik7CisKICAgICBpZiAoIWlzU3RhcnRPZlBh
cmFncmFwaChlbmQpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IGVuZC5w
cmV2aW91cygpOwogICAgICAgICBVQ2hhciBjKHByZXZpb3VzLmNoYXJhY3RlckFmdGVyKCkpOwor
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzb21ldGhpbmcgZnJvbSBJQ1Ugb3IgQVNDSUlD
VHlwZSB0aGF0IGlzIG5vdCBzdWJqZWN0IHRvIFBPU0lYIGN1cnJlbnQgbGFuZ3VhZ2UgcmF0aGVy
IHRoYW4gaXN3cHVuY3QuCiAgICAgICAgIGlmICghaXN3cHVuY3QoYykgJiYgIWlzU3BhY2VPck5l
d2xpbmUoYykgJiYgYyAhPSBub0JyZWFrU3BhY2UpCiAgICAgICAgICAgICBlbmQgPSBzdGFydE9m
V29yZChlbmQpOwogICAgIH0KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRPZlBhcmFn
cmFwaChlbmQpKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRl
bnRzKCpkb2N1bWVudCgpKSk7Ci0gICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0
KTsKLSAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIGVuZCk7Ci0KLSAgICBpZiAoc2VhcmNo
UmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2Uoc3RhcnQsIGVuZCk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSB8fCBzZWFyY2hSYW5nZS0+Y29s
bGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBOU011dGFibGVBcnJheSAqd29y
ZHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCmluZGV4IDQwNmQ1YmU5MjlkNTNhMTk3NDIwMGI5NDgzZmQ0MWE2NmQz
NTZmZWUuLjE3YWZlYWMxNDQyZGJlMWE2NjM5ZDcxNDRlMTVhNjBkNmRiN2NlMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU3OSwxMSArNTc5LDgg
QEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50
KCkgY29uc3QKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2Vs
ZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAgICBpZiAoIXdvcmRSYW5nZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICF3b3JkUmFuZ2UtPnRleHQoKS5pc0VtcHR5KCk7
CisgICAgYXV0byB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9z
aXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQpOworICAgIHJldHVybiB3b3JkUmFuZ2UgJiYgaGFzQW55UGxhaW5UZXh0KCp3
b3JkUmFuZ2UpOwogfQogCiBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVMaW5rVVJMKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dlYkFyY2hp
dmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJl
Zi5jcHAKaW5kZXggYjljNTg3Y2NiZWIwMmQyNmZmZjY3MTc2OGYyNmU0ZDY3ZWY0MDg5ZS4uNTkw
M2MwNTcyNWM1NmU3ZWVlOWU0MTFiNDYzM2ZmYTQ3Y2E1ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKQEAgLTMzLDYgKzMz
LDggQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
V0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAog
V0tUeXBlSUQgV0tXZWJBcmNoaXZlR2V0VHlwZUlEKCkKIHsKQEAgLTUzLDcgKzU1LDcgQEAgV0tX
ZWJBcmNoaXZlUmVmIFdLV2ViQXJjaGl2ZUNyZWF0ZVdpdGhEYXRhKFdLRGF0YVJlZiBkYXRhUmVm
KQogCiBXS1dlYkFyY2hpdmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlRnJvbVJhbmdlKFdLQnVuZGxl
UmFuZ2VIYW5kbGVSZWYgcmFuZ2VIYW5kbGVSZWYpCiB7Ci0gICAgYXV0byB3ZWJBcmNoaXZlID0g
QVBJOjpXZWJBcmNoaXZlOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5j
b3JlUmFuZ2UoKSk7CisgICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJBcmNoaXZlOjpjcmVh
dGUobWFrZVNpbXBsZVJhbmdlKFdlYktpdDo6dG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+Y29yZVJh
bmdlKCkpKTsKICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmd2ViQXJjaGl2ZS5sZWFrUmVmKCkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgKaW5kZXggNzFkZTI4YmRhNzRk
N2YwMzRmYjkyYzZmMjgyNGZlYTM5ZTJjZjlhZi4uMTQ2NGE2Yjc5YWVjZGZlODJlN2NhYzQ0YWNl
OWYzZTkzODAzNGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJj
aGl2ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaApAQCAtMjMs
OCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgV2ViQXJjaGl2ZV9oCi0jZGVmaW5lIFdlYkFyY2hpdmVfaAorI3ByYWdtYSBvbmNlCiAK
ICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAtMzgsNyArMzcsNyBAQCBjbGFzcyBEYXRhOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlOwotY2xhc3MgUmFuZ2U7
CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNTIsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQXJjaGl2
ZVJlc291cmNlKiBtYWluUmVzb3VyY2UsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YnJlc291cmNl
cywgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3ViZnJhbWVBcmNoaXZlcyk7CiAgICAgc3RhdGljIFJl
ZjxXZWJBcmNoaXZlPiBjcmVhdGUoQVBJOjpEYXRhKik7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNo
aXZlPiBjcmVhdGUoUmVmUHRyPFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU+JiYpOwotICAgIHN0
YXRpYyBSZWY8V2ViQXJjaGl2ZT4gY3JlYXRlKFdlYkNvcmU6OlJhbmdlJik7CisgICAgc3RhdGlj
IFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKTsKIAog
ICAgIFdlYkFyY2hpdmVSZXNvdXJjZSogbWFpblJlc291cmNlKCk7CiAgICAgQVBJOjpBcnJheSog
c3VicmVzb3VyY2VzKCk7CkBAIC03Niw1ICs3NSwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFj
ZSBBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0jZW5kaWYgLy8gV2ViQXJjaGl2
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5tbQppbmRleCBmYjU0YWY0MGJjMDBk
MjQzYmY5MGU5MjI5NmNkMWIzZDBkYmJjZWVmLi4xOGRkYzU3YTlkNDEyMDA5ZDZkZjMwYTk4YzZl
NmE1MDIzYWYyOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNo
aXZlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0KQEAgLTUy
LDkgKzUyLDkgQEAgUmVmPFdlYkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4mJiBsZWdhY3lXZWJBcmNoaXZlKQogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYkFyY2hpdmUobGVnYWN5V2ViQXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAK
LVJlZjxXZWJBcmNoaXZlPiBXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UmIHJhbmdlKQorUmVmPFdl
YkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGUoJnJhbmdlKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hpdmUoTGVn
YWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKHJhbmdlKSkpOwogfQogCiBXZWJBcmNoaXZlOjpXZWJBcmNo
aXZlKFdlYkFyY2hpdmVSZXNvdXJjZSogbWFpblJlc291cmNlLCBSZWZQdHI8QVBJOjpBcnJheT4m
JiBzdWJyZXNvdXJjZXMsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YmZyYW1lQXJjaGl2ZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCA4NmFjNTUzZTZmY2MwODIyYWQ0
MThjNmEwZDNmOGNmOWM0YTk5Yjk4Li45ZjdjNzMxMDkzY2Y4NzFhN2U0YzYzZjFiMWYxYTZjMzA1
M2YzNTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTMzLDcgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gRWRp
dGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluZ1Jh
bmdlJiBlZGl0aW5nUmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBiYXNlKQorT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShXZWJDb3JlOjpG
cmFtZSYgZnJhbWUsIGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBFZGl0aW5nUmFu
Z2VJc1JlbGF0aXZlVG8gYmFzZSkKIHsKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlLmxvY2F0aW9u
ICE9IG5vdEZvdW5kKTsKICAgICBXZWJDb3JlOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSB7IGVkaXRp
bmdSYW5nZS5sb2NhdGlvbiwgZWRpdGluZ1JhbmdlLmxlbmd0aCB9OwpAQCAtNDcsMjEgKzQ3LDIx
IEBAIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6
OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluCiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFw
cEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9
IGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgp
OwogICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpKTsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwogICAg
IH0KIAogICAgIEFTU0VSVChiYXNlID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdy
YXBoKTsKIAogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFy
dE9mUGFyYWdyYXBoKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
KSk7CiAgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHNjb3BlRW5kID0gbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCkpLmVuZDsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFdlYkNv
cmU6OnJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IFdURk1vdmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RG
TW92ZShzY29wZUVuZCkgfSwgcmFuZ2UpKTsKKyAgICBhdXRvIHNjb3BlRW5kID0gbWFrZUJvdW5k
YXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVl
U2NvcGUoKS5yb290Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCBy
YW5nZSk7CiB9CiAKLUVkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShXZWJDb3Jl
OjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiByYW5nZSwgRWRpdGluZ1Jhbmdl
SXNSZWxhdGl2ZVRvIGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKK0VkaXRpbmdSYW5nZSBFZGl0
aW5nUmFuZ2U6OmZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBl
ZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8pCiB7CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5nZUlzUmVs
YXRpdmVUbyA9PSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKaW5kZXggZTA0M2Y5NzI0MGU0MjVlY2QyNWE0Mjdl
ZGQ5MjdhY2I3NDVlMzYxNC4uZjE5YjQ0M2YwZGM3MTlhNzQ4MzVjNzhjNzRiMTY1M2Q5NDExYTE0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBT
aW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01OCw4ICs1OCw4IEBAIHN0
cnVjdCBFZGl0aW5nUmFuZ2UgewogICAgIC8vIChub3RGb3VuZCwgMCkgaXMgbm90YWJseSB2YWxp
ZC4KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBsb2NhdGlvbiArIGxlbmd0aCA+
PSBsb2NhdGlvbjsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gdG9SYW5n
ZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVs
YXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKLSAgICBz
dGF0aWMgRWRpdGluZ1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNv
cmU6OlJhbmdlKiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxh
dGl2ZVRvOjpFZGl0YWJsZVJvb3QpOworICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4gdG9SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVk
aXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFi
bGVSb290KTsKKyAgICBzdGF0aWMgRWRpdGluZ1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFt
ZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIEVkaXRpbmdSYW5nZUlz
UmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIAog
I2lmIGRlZmluZWQoX19PQkpDX18pCiAgICAgRWRpdGluZ1JhbmdlKE5TUmFuZ2UgcmFuZ2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQ
SUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKaW5kZXgg
Njk2Y2ZmY2JkZjgwZTUxMmUxZDNmZGRhN2YxMDhmMzFkYjMwZTZiMS4uZDg4NTExMWQ5Zjc1MDAw
YmU3ZDY3ZTAwYmNmMDczYTQ5YTYxZTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaApAQCAtMzEsMTEgKzMxLDExIEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU1N0
eWxlRGVjbGFyYXRpb247CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZTsKLWNs
YXNzIFJhbmdlOwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwor
c3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUxLDIxICs1
MSwyMSBAQCBjbGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRv
ckNsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5n
ZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9S
ZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJ
bXBsKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRl
UmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQ
YWdlJiwgV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2Us
IFdlYkNvcmU6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYktpdDo6V2Vi
UGFnZSYsIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLCBXZWJDb3JlOjpSYW5nZSopIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYktpdDo6
V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNh
dGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdl
JiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZVNlbGVjdGlvbihXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRp
b25OYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktp
dDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqLCBW
ZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQmVnaW5FZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBs
ZVJhbmdlJikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0
aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYktpdDo6V2Vi
UGFnZSYsIFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6
OlN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JiwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViS2l0
OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJp
bmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYktpdDo6V2Vi
UGFnZSYsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxXcml0
ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JS
YW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+PiYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVRvUGFzdGVib2FyZChXZWJL
aXQ6OldlYlBhZ2UmKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdl
YktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5n
ZSYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29T
dGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29u
c3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSW5qZWN0ZWRCdW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJFZGl0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdl
YkVkaXRvci5jcHAKaW5kZXggY2NiNTFlMGQ5NjQwYzY2Zjg1OTZlNDc0MTcxNDA1OGU5MTM5NzY4
NC4uYTg5ZWYzNWMwNTQ5MGI1MDc1YTBiMDY5ZmQwNDJmNTg5ZjdjN2ZmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdl
YkVkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9nbGliL1dlYktpdFdlYkVkaXRvci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwg
U3RyaW5nSW1wbCopIG92ZXJyaWRlCisgICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFn
ZSYsIGNvbnN0IFN0cmluZyYpIGZpbmFsCiAgICAgewogICAgICAgICBnX3NpZ25hbF9lbWl0KG1f
ZWRpdG9yLCBzaWduYWxzW1NFTEVDVElPTl9DSEFOR0VEXSwgMCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01E
b2N1bWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NRG9jdW1lbnQubW0KaW5kZXggMTY2ZTc5ZDAzMjIyZWM5ODI0MTE4YTQ3MGMwMjA0
OTRhNmI1OGMwZC4uOTVkMWMwN2FiMmNjYjY1NWQ2ZDdiMWZlMzI1Y2M1OWUwODNiZWRjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMv
V0tET01Eb2N1bWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2lt
cGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9t
YXJrdXAuaD4KICNpbXBvcnQgPHd0Zi9OYWtlZFJlZi5oPgpAQCAtNzksNyArODAsNyBAQCAtIChX
S0RPTU5vZGUgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJp
bmcgKiltYXJrdXBTdHJpbmcgYgogCiAtIChXS0RPTU5vZGUgKiljcmVhdGVEb2N1bWVudEZyYWdt
ZW50V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBXZWJLaXQ6OnRvV0tE
T01Ob2RlKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+
KCpfaW1wbCkuY3JlYXRlUmFuZ2UoKS5nZXQoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvV0tET01Ob2RlKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvd25jYXN0PFdlYkNvcmU6OkRvY3VtZW50PigqX2ltcGwpKSwgdGV4
dCkucHRyKCkpOwogfQogCiAtIChpZClwYXJzZXJZaWVsZFRva2VuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01S
YW5nZS5tbQppbmRleCAwMDkwYjg5OGEyZTFlMWQ2MWNhZTA0NTAzOGEyZjg1ZDc1ZGJjM2U3Li4x
YjZiYjc3ZWNhN2U2ZWMwZjFmNjFlODcyMTJjNGM0NWY2OTZiNjY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0KQEAgLTEzNCw5ICsxMzQsOCBAQCAtIChOU0FycmF5ICopdGV4dFJlY3RzCiAK
IC0gKFdLRE9NUmFuZ2UgKilyYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3Rl
cnM6KE5TVUludGVnZXIpY2hhcmFjdGVycyBpbkRpcmVjdGlvbjooV0tET01SYW5nZURpcmVjdGlv
bilkaXJlY3Rpb24KIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG5ld1JhbmdlID0gcmFu
Z2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZGlyZWN0aW9u
ID09IFdLRE9NUmFuZ2VEaXJlY3Rpb25Gb3J3YXJkID8gIF9pbXBsLT5lbmRQb3NpdGlvbigpIDog
X2ltcGwtPnN0YXJ0UG9zaXRpb24oKSwgY2hhcmFjdGVycywgZGlyZWN0aW9uID09IFdLRE9NUmFu
Z2VEaXJlY3Rpb25Gb3J3YXJkID8gV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
IDogV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0KLSAgICByZXR1cm4g
W1tbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpuZXdSYW5nZS5nZXQoKV0gYXV0b3Jl
bGVhc2VdOworICAgIGF1dG8gbmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5E
aXJlY3Rpb25BdFdvcmRCb3VuZGFyeShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZv
cndhcmQgPyAgX2ltcGwtPmVuZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBj
aGFyYWN0ZXJzLCBkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJD
b3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJl
Y3Rpb246OkJhY2t3YXJkKTsKKyAgICByZXR1cm4gW1tbV0tET01SYW5nZSBhbGxvY10gX2luaXRX
aXRoSW1wbDpjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2Vi
UHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCA0NzdmZjk0NWE2
YWI0YWNhOWU3MzMxMjU1YjA0MGRkNWZhZDZlOGUwLi5jNzc2MjUyZWJkNGFlODg4NDViZThjNjc3
OGI2ZWY3MzBkZmYzMTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCkBAIC01
NTksMjEgKzU1OSwyMSBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlBy
b2Nlc3NQbHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICB9CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdl
JiwgU3RyaW5nSW1wbCogdGV4dCwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBmaW5hbAorICAgICAgICBib29sIHNob3Vs
ZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmIHRleHQsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIFdlYkNv
cmU6OkVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuc2hvdWxkSW5zZXJ0VGV4dCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9l
ZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXI6bV9jb250cm9sbGVyIHNob3VsZEluc2VydFRleHQ6U3RyaW5nKHRleHQpIHJlcGxhY2lu
Z1JhbmdlOndyYXBwZXIoKldlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JD
cmVhdGUocmFuZ2VUb1JlcGxhY2UpKSBnaXZlbkFjdGlvbjp0b1dLKGFjdGlvbildOworICAgICAg
ICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlBy
b2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHNob3VsZElu
c2VydFRleHQ6dGV4dCByZXBsYWNpbmdSYW5nZTp3cmFwcGVyKCpXZWJLaXQ6OmNyZWF0ZUhhbmRs
ZShyYW5nZVRvUmVwbGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9uKV07CiAgICAgICAgIH0K
IAotICAgICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdl
JiwgV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdl
YkNvcmU6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWwKKyAg
ICAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBh
ZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICBhdXRvIGFwaUZyb21SYW5n
ZSA9IGZyb21SYW5nZSA/IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBs
OmZyb21SYW5nZV0pIDogbmlsOwotICAgICAgICAgICAgYXV0byBhcGlUb1JhbmdlID0gdG9SYW5n
ZSA/IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOnRvUmFuZ2VdKSA6
IG5pbDsKKyAgICAgICAgICAgIGF1dG8gYXBpRnJvbVJhbmdlID0gYWRvcHROUyhbW1dLRE9NUmFu
Z2UgYWxsb2NdIF9pbml0V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCld
KTsKKyAgICAgICAgICAgIGF1dG8gYXBpVG9SYW5nZSA9IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFs
bG9jXSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKV0pOwogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBVSVRleHRTdG9yYWdlRGlyZWN0aW9u
IGFwaUFmZmluaXR5ID0gYWZmaW5pdHkgPT0gV2ViQ29yZTo6VVBTVFJFQU0gPyBVSVRleHRTdG9y
YWdlRGlyZWN0aW9uQmFja3dhcmQgOiBVSVRleHRTdG9yYWdlRGlyZWN0aW9uRm9yd2FyZDsKICNl
bHNlCkBAIC01ODMsNyArNTgzLDcgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8
V0tXZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAg
ICAgIHJldHVybiBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9j
ZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBzaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlOmFwaUZyb21SYW5nZS5nZXQoKSB0b1JhbmdlOmFwaVRvUmFuZ2UuZ2V0
KCkgYWZmaW5pdHk6YXBpQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwog
ICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3Ry
aW5nSW1wbCopIGZpbmFsCisgICAgICAgIHZvaWQgZGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZSYs
IGNvbnN0IFN0cmluZyYpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxl
Z2F0ZU1ldGhvZHMuZGlkQ2hhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5MSwy
MCArNTkxLDIwIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vz
c1BsdWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAgICBbbV9jb250
cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyRGlkQ2hhbmdlQnlFZGl0aW5nOm1fY29udHJvbGxlcl07CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2Um
LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2lsbFdyaXRlVG9Q
YXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYgcmFuZ2UpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxl
Z2F0ZU1ldGhvZHMud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBf
d2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgd2ls
bFdyaXRlUmFuZ2VUb1Bhc3RlYm9hcmQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAgICAgICAgIFttX2Nv
bnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHdpbGxXcml0ZVJhbmdlVG9QYXN0ZWJvYXJk
OndyYXBwZXIoV2ViS2l0OjpjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdl
JiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkg
ZmluYWwKKyAgICAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2Vi
UGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fZGVsZWdhdGVNZXRob2RzLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250
cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBw
ZXIoKldlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2Up
LmdldCgpKV07CisgICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9sbGVyLT5f
ZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250
cm9sbGVyOm1fY29udHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIoV2ViS2l0
OjpjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgICAgICBmb3IgKE5TU3RyaW5n
ICp0eXBlIGluIGRhdGFCeVR5cGUpIHsKICAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMu
YXBwZW5kKHR5cGUpOwogICAgICAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhQnlUeXBlW3R5cGVdKSk7CkBAIC02MTksMTIg
KzYxOSwxMiBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQ
bHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAgICAgW21fY29udHJv
bGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250
ZXh0Q29udHJvbGxlckRpZFdyaXRlVG9QYXN0ZWJvYXJkOm1fY29udHJvbGxlcl07CiAgICAgICAg
IH0KIAotICAgICAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBX
ZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgV2ViQ29yZTo6UmFuZ2UmIHJhbmdl
LCBib29sIGlzTW92ZSkgZmluYWwKKyAgICAgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2Vi
S2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0
IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBpc01vdmUpIGZpbmFsCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMucGVyZm9ybVR3b1N0ZXBEcm9w
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byByYW5n
ZUhhbmRsZSA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
JnJhbmdlKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6OmNyZWF0ZUhh
bmRsZShyYW5nZSk7CiAgICAgICAgICAgICBhdXRvIG5vZGVIYW5kbGUgPSBXZWJLaXQ6OkluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmZyYWdtZW50KTsKICAgICAgICAgICAg
IHJldHVybiBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNz
UGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBwZXJmb3JtVHdvU3Rl
cERyb3A6d3JhcHBlcigqbm9kZUhhbmRsZSkgYXREZXN0aW5hdGlvbjp3cmFwcGVyKCpyYW5nZUhh
bmRsZSkgaXNNb3ZlOmlzTW92ZV07CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCmluZGV4IDIyMGVmZWQ1OGVkMTU3NzllNzViOWM0OGMx
NzA3MTdmZmUyZGYwZGYuLmE5MWY3ZjcwNzgxNzhkZmJlNDNiNTg0NmJjMDBjNDRlYmQ5NmQ3NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAt
NTQsNyArNTQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotdHlwZWRlZiBIYXNoTWFwPFJhbmdlKiwgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+
IERPTVJhbmdlSGFuZGxlQ2FjaGU7Cit1c2luZyBET01SYW5nZUhhbmRsZUNhY2hlID0gSGFzaE1h
cDxSYW5nZSosIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUqPjsKIAogc3RhdGljIERPTVJhbmdl
SGFuZGxlQ2FjaGUmIGRvbVJhbmdlSGFuZGxlQ2FjaGUoKQogewpAQCAtNjQsMjkgKzY0LDIxIEBA
IHN0YXRpYyBET01SYW5nZUhhbmRsZUNhY2hlJiBkb21SYW5nZUhhbmRsZUNhY2hlKCkKIAogUmVm
UHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OmdldE9yQ3JlYXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCiB7
Ci0gICAgUmFuZ2UqIHJhbmdlID0gSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZt
KCksIHRvSlMob2JqZWN0KSk7Ci0gICAgcmV0dXJuIGdldE9yQ3JlYXRlKHJhbmdlKTsKKyAgICBy
ZXR1cm4gZ2V0T3JDcmVhdGUoSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCks
IHRvSlMob2JqZWN0KSkpOwogfQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuZ2UqIHJhbmdlKQogewog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRE9NUmFuZ2VI
YW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbVJhbmdlSGFuZGxlQ2FjaGUoKS5hZGQo
cmFuZ2UsIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVDYWNoZSgp
LmFkZChyYW5nZSwgbnVsbHB0cik7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBhdXRvIHJhbmdlSGFuZGxl
ID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRlKCpyYW5nZSk7CisgICAgYXV0byBy
YW5nZUhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSgqcmFu
Z2UpKTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUucHRyKCk7CiAg
ICAgcmV0dXJuIHJhbmdlSGFuZGxlOwogfQogCi1SZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRlKFJhbmdlJiByYW5nZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKHJhbmdlKSk7
Ci19Ci0KIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUoUmFuZ2UmIHJhbmdlKQogICAgIDogbV9yYW5nZShyYW5nZSkKIHsKQEAgLTE3OCw0ICsxNzAs
OSBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKIH0KIAorUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
IHJhbmdlKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNy
ZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCmluZGV4
IGY4MGUzM2FiZTgwNjUxZDk3OTE4YjhkYmZhMTQ5ZTQ2MWY1NmJjODUuLjVlOGJlZWRhMTAwZDI1
ZjA5MWU3ZTBjMWY3NmE0ZjBjYjE0YzI0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
X2gKLSNkZWZpbmUgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkltYWdlT3B0aW9ucy5oIgpAQCAtMzUs
NiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJh
bmdlOworc3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU5
LDEyICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6UmFuZ2UmIGNvcmVSYW5nZSgpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBSZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4gY3JlYXRlKFdlYkNvcmU6OlJhbmdlJik7CiAgICAgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZShXZWJDb3JlOjpSYW5nZSYpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlOwog
fTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CitSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYp
OwogCi0jZW5kaWYgLy8gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5j
cHAKaW5kZXggY2UwMjdiNWE3YmU2ODI3YTc4ZTdiNzcyNWJkYmIzMjY0YTYyNTIwYS4uZTM0MGFm
MWNiYzMwMjllNTdhYmRiMjJkYzRmOWE5YmRjMjVmMDUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKQEAgLTM4LDEyMyArMzgsMTExIEBACiAj
aW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRp
ZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljIFJlZlB0cjxJbmplY3RlZEJ1
bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBTdHlsZVBy
b3BlcnRpZXMmIHN0eWxlKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVj
bGFyYXRpb25IYW5kbGU6OmdldE9yQ3JlYXRlKCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVD
U1NTdHlsZURlY2xhcmF0aW9uKCkpOworfQorCiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQ6OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRsZVBhZ2VFZGl0
b3JDbGllbnRCYXNlJiBjbGllbnQpCiB7CiAgICAgaW5pdGlhbGl6ZSgmY2xpZW50KTsKIH0KIAot
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhX
ZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKSB7Ci0g
ICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0
dXJuIG1fY2xpZW50LnNob3VsZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdl
SGFuZGxlLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYg
KG1fY2xpZW50LnNob3VsZEJlZ2luRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNo
b3VsZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSku
Z2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhX
ZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcpIHsKLSAgICAg
ICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxl
LmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xp
ZW50LnNob3VsZEVuZEVkaXRpbmcpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRFbmRF
ZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmIHBh
Z2UsIE5vZGUqIG5vZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
IGFjdGlvbikKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNl
cnROb2RlKFdlYlBhZ2UmIHBhZ2UsIE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7CiAgICAg
aWYgKG1fY2xpZW50LnNob3VsZEluc2VydE5vZGUpIHsKICAgICAgICAgUmVmUHRyPEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6
Z2V0T3JDcmVhdGUobm9kZSk7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZVRvUmVwbGFjZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6Omdl
dE9yQ3JlYXRlKHJhbmdlVG9SZXBsYWNlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3Vs
ZEluc2VydE5vZGUodG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEko
cmFuZ2VUb1JlcGxhY2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0
b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUo
cmFuZ2VUb1JlcGxhY2UpLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmIHBhZ2UsIFN0cmlu
Z0ltcGwqIHRleHQsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFj
dGlvbikKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRU
ZXh0KFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsK
LSAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4dCkgewotICAgICAgICBSZWZQdHI8SW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VUb1JlcGxhY2VIYW5kbGUgPSBJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSk7Ci0gICAgICAgIHJl
dHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdlKSwgdG9BUEkodGV4dCks
IHRvQVBJKHJhbmdlVG9SZXBsYWNlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEluc2Vy
dFRleHQpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZw
YWdlKSwgdG9BUEkodGV4dC5pbXBsKCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxh
Y2UpLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OnNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiBw
YWdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAg
IGlmIChtX2NsaWVudC5zaG91bGREZWxldGVSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRE
ZWxldGVSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0
ZVJhbmdlKQorICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UodG9BUEko
JnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwg
UmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFu
Z2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBpZiAo
bV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gZnJvbVJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZnJvbVJhbmdlKTsKLSAgICAgICAgUmVmUHRyPEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHRvUmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpnZXRPckNyZWF0ZSh0b1JhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShmcm9tUmFuZ2VIYW5k
bGUuZ2V0KCkpLCB0b0FQSSh0b1JhbmdlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWZmaW5pdHkpLCBz
dGlsbFNlbGVjdGluZywgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYg
KG1fY2xpZW50LnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2Ns
aWVudC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRl
SGFuZGxlKGZyb21SYW5nZSkuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUodG9SYW5nZSkuZ2V0
KCkpLCB0b0FQSShhZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAg
ICBpZiAobV9jbGllbnQuc2hvdWxkQXBwbHlTdHlsZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlPiBzdHlsZUhhbmRsZSA9IEluamVjdGVk
QnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZTo6Z2V0T3JDcmVhdGUoc3R5bGUpOwotICAg
ICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVy
biBtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdlKSwgdG9BUEkoc3R5bGVIYW5k
bGUuZ2V0KCkpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7Ci0gICAgfQorICAgIGlmIChtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKQorICAgICAg
ICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQXBwbHlTdHlsZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNy
ZWF0ZUhhbmRsZShzdHlsZSkuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdl
JiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBT
dHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKG1fY2xpZW50LmRpZEJlZ2luRWRp
dGluZykKLSAgICAgICAgbV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9B
UEkobm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAg
IG1fY2xpZW50LmRpZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlv
bk5hbWUuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwg
U3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90
aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkRW5kRWRpdGluZykKLSAgICAg
ICAgbV9jbGllbnQuZGlkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlv
bk5hbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRF
bmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6ZGlkQ2hhbmdlKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNh
dGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdl
KFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBp
ZiAobV9jbGllbnQuZGlkQ2hhbmdlKQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgbV9jbGllbnQuZGlkQ2hhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZp
Y2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lk
IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBh
Z2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmIHBhZ2UsIGNv
bnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQ2hh
bmdlU2VsZWN0aW9uKQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgbV9jbGllbnQuZGlkQ2hhbmdlU2VsZWN0aW9uKHRvQVBJKCZwYWdlKSwgdG9B
UEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwog
fQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6d2lsbFdyaXRlVG9QYXN0
ZWJvYXJkKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQud2ls
bFdyaXRlVG9QYXN0ZWJvYXJkKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3Jl
YXRlKHJhbmdlKTsKLSAgICAgICAgbV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKHRvQVBJ
KCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQorICAg
ICAgICBtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShj
cmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0K
IAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFz
dGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0
YSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0
YUZvclJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQogewogICAgIGlmIChtX2NsaWVudC5nZXRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRl
KHJhbmdlKTsKLSAgICAgICAgV0tBcnJheVJlZiB0eXBlcyA9IDA7Ci0gICAgICAgIFdLQXJyYXlS
ZWYgZGF0YSA9IDA7Ci0gICAgICAgIG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
dG9BUEkoJnBhZ2UpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksICZ0eXBlcywgJmRhdGEsIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiB0eXBl
c0FycmF5ID0gYWRvcHRSZWYodG9JbXBsKHR5cGVzKSk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFy
cmF5PiBkYXRhQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwoZGF0YSkpOworICAgICAgICBXS0FycmF5
UmVmIHR5cGVzID0gbnVsbHB0cjsKKyAgICAgICAgV0tBcnJheVJlZiBkYXRhID0gbnVsbHB0cjsK
KyAgICAgICAgbV9jbGllbnQuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSh0b0FQSSgmcGFnZSks
IHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCAmdHlwZXMsICZkYXRhLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBhdXRvIHR5cGVzQXJyYXkgPSBhZG9wdFJlZih0
b0ltcGwodHlwZXMpKTsKKyAgICAgICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwo
ZGF0YSkpOwogCiAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5jbGVhcigpOwogICAgICAgICBwYXN0
ZWJvYXJkRGF0YS5jbGVhcigpOwpAQCAtMTc0LDE0ICsxNjIsMTMgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYg
cGFnZSwgUmEKICAgICB9CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYgZnJh
Z21lbnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmIHBhZ2UsIERv
Y3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24s
IGJvb2wgaXNNb3ZlKQogewogICAgIGlmICghbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmRlc3RpbmF0aW9uKTsKICAgICBhdXRvIG5v
ZGVIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKCZmcmFnbWVu
dCk7Ci0gICAgcmV0dXJuIG1fY2xpZW50LnBlcmZvcm1Ud29TdGVwRHJvcCh0b0FQSSgmcGFnZSks
IHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIGlzTW92
ZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbV9jbGllbnQucGVyZm9y
bVR3b1N0ZXBEcm9wKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJ
KGNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbikuZ2V0KCkpLCBpc01vdmUsIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpk
aWRXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiBwYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudC5oCmluZGV4IDY4OTk0MWExOGU4ZDllOTRjYTQyNmY5NDJi
MWViOGEwYjNjZjg0YmIuLmYzYTBlNzQ3NjcyMGZiMWI1ZDljYjE3NzE3ZWRkNzM5OTQ5N2RjMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKQEAgLTM5
LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlv
bjsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7Citz
dHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTIsMjEgKzUy
LDIxIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQoY29uc3QgV0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50QmFzZSYpOwogCiBwcml2YXRlOgotICAg
IGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFs
OwotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBm
aW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUq
LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmLCBTdHJpbmdJ
bXBsKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYsIFdl
YkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9S
YW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKLSAg
ICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYsIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFy
YXRpb24qLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5n
KFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lk
IGRpZEVuZEVkaXRpbmcoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZp
bmFsOwotICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRp
b25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgU3Ry
aW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVUb1Bh
c3RlYm9hcmQoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBnZXRQ
YXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGlu
ZyhXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29s
IHNob3VsZEVuZEVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmLCBXZWJDb3JlOjpOb2Rl
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwg
V2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2Vy
dFRleHQoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikg
ZmluYWw7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1Jh
bmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAg
IGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9w
ZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7Cisg
ICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0
aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBT
dHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBh
Z2UmLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlk
Q2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUp
IGZpbmFsOworICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmLCBjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICB2b2lkIGdldFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICB2b2lk
IGRpZFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmKSBmaW5hbDsKLSAgICBib29sIHBlcmZvcm1U
d29TdGVwRHJvcChXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6
OlJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9y
bVR3b1N0ZXBEcm9wKFdlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3Qg
V2ViQ29yZTo6U2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNmNm
NGY1YTMxOTFhZDk5YjJkMWE3MzM4ZDRmMzkzNTUzOGY2YWIzMy4uOWM2YjdiYTdjYjU2YTQyMzVi
MDA1YjlmYmFiYjFhYzI5MWNjNDg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc3LDcg
Kzc3LDcgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkK
IAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLmdldCgpKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0xMTgsMzIgKzEx
OCwzMiBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAK
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuc2hvdWxkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSku
cHRyKCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAg
IHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRp
dGluZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKKyAgICByZXR1cm4g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1f
cGFnZSwgcmFuZ2UpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlJiBub2RlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCAmbm9kZSwg
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1
cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUo
Km1fcGFnZSwgbm9kZSwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFj
dGlvbikKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnNob3VsZEluc2VydFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShy
YW5nZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQsIHJh
bmdlVG9SZXBsYWNlLCBhY3Rpb24pOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5n
ZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGNy
ZWF0ZUxpdmVSYW5nZShmcm9tUmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UodG9SYW5nZSku
Z2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3Bh
Z2UsIGZyb21SYW5nZSwgdG9SYW5nZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KICAg
ICAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0g
ICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBs
eVN0eWxlKCptX3BhZ2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIHJldHVybiBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdl
LCBzdHlsZSwgcmFuZ2UpOwogfQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAg
LTI2OCwxNyArMjY4LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCgpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAg
ICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJv
YXJkKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFn
ZSwgcmFuZ2UpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpCiB7Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQo
KSwgcGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CisgICAgbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwg
cmFuZ2UsIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCiBib29sIFdlYkVk
aXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50
LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewotICAgIHJl
dHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBE
cm9wKCptX3BhZ2UsIGZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01v
dmUpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVy
Zm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZyYWdtZW50LCBkZXN0aW5hdGlvbiwgaXNNb3ZlKTsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoVW5kb1N0ZXAmIHN0
ZXApCkBAIC01MzcsMTEgKzUzNyw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1t
YXJPZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtCiBzdGF0aWMg
dWludDY0X3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQg
PSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3Rh
cnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRv
IHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb25TdGFydCkpOwotICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdy
YXBoU3RhcnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7
ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc3RhcnRPZlBhcmFncmFwaChz
ZWxlY3Rpb25TdGFydCkpOworICAgIHJldHVybiByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5n
ZSkgOiAwOwogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCA1
ZjVlODY0MWFkZWNkMjZjYjllZmQ3OThhMzkwMGY3NzNkOTRlNzNiLi41MzE4NTUzOGI5ZTA1MTkw
M2E5ZDZlZGU3NWI0ZTBlYzgzNTI2OTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9QYXRoVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4K
IAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTExLDExICsxMTIsMTEgQEAgdWludDMyX3QgRmlu
ZENvbnRyb2xsZXI6OnJlcGxhY2VNYXRjaGVzKGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIG1hdGNo
SW5kaWNlcywgY28KICAgICAvLyBwZXJpb2RpY2FsbHkgdXBkYXRlIGFuIE5TUHJvZ3Jlc3MgaW4g
dGhlIFVJIHByb2Nlc3Mgd2hlbiBhIGJhdGNoIG9mIGZpbmQtaW4tcGFnZSBtYXRjaGVzIGFyZSBy
ZXBsYWNlZC4KICAgICBjb25zdCB1aW50MzJfdCBtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBs
YWNlID0gMTAwMDsKIAotICAgIFZlY3RvcjxSZWY8UmFuZ2U+PiByYW5nZXNUb1JlcGxhY2U7Cisg
ICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByYW5nZXNUb1JlcGxhY2U7CiAgICAgcmFuZ2VzVG9SZXBs
YWNlLnJlc2VydmVDYXBhY2l0eShzdGQ6Om1pbjx1aW50MzJfdD4obWF4aW11bU51bWJlck9mTWF0
Y2hlc1RvUmVwbGFjZSwgbWF0Y2hJbmRpY2VzLnNpemUoKSkpOwogICAgIGZvciAoYXV0byBpbmRl
eCA6IG1hdGNoSW5kaWNlcykgewogICAgICAgICBpZiAoaW5kZXggPCBtX2ZpbmRNYXRjaGVzLnNp
emUoKSkKLSAgICAgICAgICAgIHJhbmdlc1RvUmVwbGFjZS51bmNoZWNrZWRBcHBlbmQoKm1fZmlu
ZE1hdGNoZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIHJhbmdlc1RvUmVwbGFjZS51bmNoZWNrZWRB
cHBlbmQobV9maW5kTWF0Y2hlc1tpbmRleF0pOwogICAgICAgICBpZiAocmFuZ2VzVG9SZXBsYWNl
LnNpemUoKSA+PSBtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMjQzLDEyICsyNDQsMTAgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6
ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25zPiBv
cHQKICAgICBib29sIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSBmYWxzZTsKICAg
ICBpZiAoIXBsdWdpblZpZXcpIHsKICAgICAgICAgaWYgKEZyYW1lKiBzZWxlY3RlZEZyYW1lID0g
ZnJhbWVXaXRoU2VsZWN0aW9uKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKSkpIHsKLSAgICAgICAgICAg
IEZyYW1lU2VsZWN0aW9uJiBmcyA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpOwotICAgICAg
ICAgICAgaWYgKGZzLnNlbGVjdGlvbkJvdW5kcygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JT
ZWxlY3Rpb247Ci0gICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3Ry
aW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlT3B0aW9ucywgbWF4TWF0Y2hDb3VudCwgbV9m
aW5kTWF0Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOwotICAgICAgICAgICAgICAgIG1fZm91bmRT
dHJpbmdNYXRjaEluZGV4ID0gaW5kZXhGb3JTZWxlY3Rpb247CisgICAgICAgICAgICBpZiAoc2Vs
ZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRU
ZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICAgICAg
ICAgICAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShyZXN1bHQucmFuZ2VzKTsKKyAgICAgICAg
ICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IHJlc3VsdC5pbmRleEZvclNlbGVjdGlv
bjsKICAgICAgICAgICAgICAgICBmb3VuZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjg0LDE2ICsyODMsMTQgQEAgdm9pZCBG
aW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0
PEZpbmRPcHRpb25zPiBvcHQKIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNo
ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW9ucz4gb3B0aW9ucywg
dW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIHsKLSAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7Ci0g
ICAgaW50IGluZGV4Rm9yU2VsZWN0aW9uOwotCi0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5m
aW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENv
dW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7CisgICAgYXV0byByZXN1bHQg
PSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0
aW9ucyksIG1heE1hdGNoQ291bnQpOworICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3Vs
dC5yYW5nZXMpOwogCiAgICAgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKICAg
ICBmb3IgKGF1dG8mIHJhbmdlIDogbV9maW5kTWF0Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0cy5h
cHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygqcmFuZ2UpKTsKKyAgICAgICAg
bWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkp
OwogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRT
dHJpbmdNYXRjaGVzKHN0cmluZywgbWF0Y2hSZWN0cywgaW5kZXhGb3JTZWxlY3Rpb24pKTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01h
dGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24pKTsKIAog
ICAgIGlmICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd092ZXJsYXkpICYmICFv
cHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZEluZGljYXRvcikpCiAgICAgICAg
IHJldHVybjsKQEAgLTMwOCwxMiArMzA1LDEyIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldElt
YWdlRm9yRmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5k
ZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSog
ZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLT5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5k
ZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSkp
OworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obV9maW5kTWF0Y2hlc1ttYXRj
aEluZGV4XSk7CiAKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzZWxlY3Rpb25TbmFwc2hv
dCA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSktPmNyZWF0ZVNlbGVjdGlvblNuYXBz
aG90KCk7CiAKQEAgLTMzOSwxMCArMzM2LDEwIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnNlbGVj
dEZpbmRNYXRjaCh1aW50MzJfdCBtYXRjaEluZGV4KQogewogICAgIGlmIChtYXRjaEluZGV4ID49
IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1l
ID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
LmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5z
dGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKCptX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKTsKIH0KIAogdm9p
ZCBGaW5kQ29udHJvbGxlcjo6aW5kaWNhdGVGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5o
CmluZGV4IDJmZDNmYWMxZWM2YzJjMjExOTI1Y2I1ZDdhZGJjMTkyNTcyN2Q5ZDkuLmY2ZjZmOWQy
MTA0ZDNhNzllM2ZlOGQ5ODFmMTQ0NTk2NDIyNDMyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaApAQCAtMTA2LDcgKzEwNiw3IEBA
IHByaXZhdGU6CiAgICAgLy8gdGhlIGZpbmQgaW5kaWNhdG9yIGlzbid0IHNob3dpbmcsIGJ1dCBp
dCB3aWxsIG5ldmVyIGJlIGZhbHNlIHdoZW4gaXQgaXMgc2hvd2luZy4KICAgICBib29sIG1faXNT
aG93aW5nRmluZEluZGljYXRvciB7IGZhbHNlIH07CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX2Zp
bmRJbmRpY2F0b3JSZWN0OwotICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+PiBtX2Zp
bmRNYXRjaGVzOworICAgIFZlY3RvcjxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9maW5kTWF0Y2hl
czsKICAgICAvLyBJbmRleCB2YWx1ZSBpcyAtMSBpZiBub3QgZm91bmQgb3IgaWYgbnVtYmVyIG9m
IG1hdGNoZXMgZXhjZWVkcyBwcm92aWRlZCBtYXhpbXVtLgogICAgIGludCBtX2ZvdW5kU3RyaW5n
TWF0Y2hJbmRleCB7IC0xIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggZWQzYjYzZmRkZTNhNzdiOGY5ZWI5ODMxNWU1ZThkOWJiNTFjMGRi
Ny4uMmRjNTA1Y2ZkYjEzYjAwMzJmZGE1NDllMGM5ZDVkNjcyNzJiNDFlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTU0MzcsMTMgKzU0Mzcs
MTMgQEAgdm9pZCBXZWJQYWdlOjpoYXNNYXJrZWRUZXh0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdl
QXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRp
bmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRp
bmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdl
KCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0
aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4
Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKQEAgLTU0NTIsOCArNTQ1Miw4IEBAIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVy
SW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgQ2FsbGJh
CiAgICAgYXV0byByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhp
dFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBoaXRUeXBlKTsKICAgICBhdXRvJiBmcmFtZSA9IHJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/ICpyZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byBy
YW5nZSA9IGZyYW1lLnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2Rl
RnJhbWUoKSk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5n
ZShmcmFtZSwgcmFuZ2UuZ2V0KCkpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
VW5zaWduZWRDYWxsYmFjayhzdGF0aWNfY2FzdDx1aW50NjRfdD4oZWRpdGluZ1JhbmdlLmxvY2F0
aW9uKSwgY2FsbGJhY2tJRCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1Jhbmdl
Ojpmcm9tUmFuZ2UoZnJhbWUsIG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhlZGl0aW5nUmFuZ2UubG9jYXRp
b24sIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFyYWN0
ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCmluZGV4IDVmZWEyYjEzZjY3NTg3MmE1NjdkMmE0ZDc2MzdjZGU4OGY2
ZGNiN2QuLjJkYzQ5MzJhMGM0ZTQ5MTQwYzdhZTM5Y2VkZjhhMTg0OGY4NTZkYTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBA
IC0xNTEsMjkgKzE1MSwyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gRklYTUU6IFVuY2xl
YXIgaWYgY2FsbGVycyBpbiB0aGlzIGZpbGUgYXJlIGNvcnJlY3RseSBjaG9vc2luZyB3aGljaCBv
ZiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIHVzZS4KIAotc3RhdGljIFN0cmluZyBwbGFpblRleHRG
b3JDb250ZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gV2ViQ29y
ZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlKTsKLX0KLQogc3RhdGljIFN0
cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDog
ZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBXZWJDb3JlOjpwbGFpblRleHRSZXBs
YWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBT
dHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0gICAgcmV0
dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dChTaW1wbGVSYW5nZSB7ICpyYW5nZSB9KSA6
IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHBsYWluVGV4dEZvckNvbnRleHQobWFrZVNpbXBs
ZVJhbmdlKHJhbmdlKSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3Bs
YXkoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlLCBUZXh0SXRlcmF0b3JE
ZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJldHVybiByYW5nZSA/IFdlYkNvcmU6OnBsYWlu
VGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UsIFRleHRJdGVyYXRvckRlZmF1bHRCZWhh
dmlvciwgdHJ1ZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4
dEZvckRpc3BsYXkoY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIHJldHVybiByYW5nZSA/IHBs
YWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHBs
YWluVGV4dEZvckRpc3BsYXkobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTI5MCw3ICsyODUsNyBAQCB2b2lkIFdlYlBh
Z2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVz
dWx0KSBjb25zdAogICAgICAgICBwb3N0TGF5b3V0RGF0YS5jYXJldFJlY3RBdEVuZCA9IHBvc3RM
YXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQ7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93
aW5nIGNoZWNrIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB3cml0aW5nIGRpcmVjdGlvbi4KICAg
ICAgICAgcG9zdExheW91dERhdGEuaXNSZXBsYWNlQWxsb3dlZCA9IHJlc3VsdC5pc0NvbnRlbnRF
ZGl0YWJsZSAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShzZWxlY3Rpb24uc3RhcnQoKSwgVGV4
dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2Fy
ZCk7Ci0gICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHBsYWluVGV4dEZv
ckNvbnRleHQod29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5nZXQoKSk7
CisgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHBsYWluVGV4dEZvckNv
bnRleHQod29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSk7CiAgICAgICAg
IGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGNoYXJhY3Rl
cnNBcm91bmRQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgcG9zdExheW91dERhdGEuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24sIHBvc3RMYXlvdXREYXRhLmNoYXJhY3RlckJlZm9yZVNlbGVjdGlv
biwgcG9zdExheW91dERhdGEudHdvQ2hhcmFjdGVyQmVmb3JlU2VsZWN0aW9uKTsKICAgICB9IGVs
c2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKQEAgLTU1MiwxMCArNTQ3LDExIEBAIHZvaWQg
V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4
dExlbmd0aCA9IDM1MDsKLSAgICAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKLSAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VF
eHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3Ro
LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKS5nZXQoKSk7Ci0gICAgU3RyaW5nIHRleHRB
ZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGly
ZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCks
IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3
YXJkKS5nZXQoKSk7CisKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKTsKKyAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWlu
VGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3Jk
Qm91bmRhcnkoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0
aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOworICAgIFN0cmluZyB0ZXh0QWZ0ZXIg
PSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlv
bkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi5lbmQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0
TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKTsKIAogICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uQ29udGV4dENhbGxiYWNrKHNlbGVjdGVkVGV4dCwg
dGV4dEJlZm9yZSwgdGV4dEFmdGVyLCBjYWxsYmFja0lEKSk7CiB9CkBAIC05ODgsOCArOTg0LDcg
QEAgdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZUVkaXREcmFnKCkKICAgICBhdXRvIGZyYW1lID0g
bWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsK
ICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVu
dHNGb3JEcm9wU25hcHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9h
ZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkUmFuZ2Ug
PSBTaW1wbGVSYW5nZSB7IHNlbGVjdGlvblJhbmdlLT5lbmQsIHNlbGVjdGlvblJhbmdlLT5lbmQg
fTsKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKGNvbGxhcHNlZFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShTaW1wbGVSYW5nZSB7IHNlbGVjdGlvblJhbmdl
LT5lbmQsIHNlbGVjdGlvblJhbmdlLT5lbmQgfSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBtX3Jhbmdl
Rm9yRHJvcFNuYXBzaG90ID0gV1RGTW92ZShzZWxlY3Rpb25SYW5nZSk7CiAgICAgfQogCkBAIC0x
MTEzLDE1ICsxMTA4LDE0IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlU3R5bHVzU2luZ2xlVGFwQXRQ
b2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQ2CiAgICAgaWYgKHJlbmRl
cmVyLT5pc1JlcGxhY2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3QubG9jYWxQb2lu
dCgpLCBudWxscHRyKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9y
UG9pbnQoaGl0VGVzdC5sb2NhbFBvaW50KCksIG51bGxwdHIpOwogICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkKICAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bm9kZSk7Ci0KLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBv
c2l0aW9uLCBwb3NpdGlvbik7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKnJhbmdlLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdn
ZXJlZCk7CiAgICAgYXV0byBpbWFnZSA9IGZyYW1lLmVkaXRvcigpLmluc2VydEVkaXRhYmxlSW1h
Z2UoKTsKICAgICBmcmFtZS5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChpbWFnZS5nZXQo
KSk7CiB9CkBAIC0xMzcxLDcgKzEzNjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0
dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBn
ZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCB7IH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiByYW5nZTsKICAgICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdzOwogICAg
IEdlc3R1cmVSZWNvZ25pemVyU3RhdGUgd2tHZXN0dXJlU3RhdGUgPSBzdGF0aWNfY2FzdDxHZXN0
dXJlUmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpOwogICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8R2VzdHVyZVR5cGU+KGdlc3R1cmVUeXBlKSkgewpAQCAtMTM4NSw0MCArMTM3OSwzNiBAQCB2
b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2Vz
dHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2Vl
blBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpKSAhPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9zaXRp
b24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiB7
IH07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZsYWdzID0gUGhyYXNlQm91bmRhcnlDaGFu
Z2VkOwotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBv
c2l0aW9uLCBwb3NpdGlvbik7Ci0gICAgfQorICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShwb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIGNhc2UgR2VzdHVyZVR5
cGU6Ok9uZUZpbmdlclRhcDoKLSAgICB7CisgICAgY2FzZSBHZXN0dXJlVHlwZTo6T25lRmluZ2Vy
VGFwOiB7CiAgICAgICAgIGF1dG8gW2FkanVzdGVkUG9zaXRpb24sIHdpdGhpbldvcmRCb3VuZGFy
eV0gPSB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldpdGhvdXRDcm9zc2luZ0xpbmUocG9zaXRpb24p
OwogICAgICAgICBpZiAod2l0aGluV29yZEJvdW5kYXJ5ID09IFdpdGhpbldvcmRCb3VuZGFyeTo6
WWVzKQogICAgICAgICAgICAgZmxhZ3MgPSBXb3JkSXNOZWFyVGFwOwotICAgICAgICBpZiAoYWRq
dXN0ZWRQb3NpdGlvbi5pc05vdE51bGwoKSkKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgYWRqdXN0ZWRQb3NpdGlvbiwgYWRqdXN0ZWRQb3NpdGlv
bik7Ci0gICAgfQorICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShhZGp1c3RlZFBvc2l0
aW9uKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBHZXN0dXJlVHlwZTo6TG91
cGU6CiAgICAgICAgIGlmIChwb3NpdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAg
ICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBw
b3NpdGlvbik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHBvc2l0aW9uKTsKKyAgICAgICAgZWxzZSB7CiAjaWYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNU
KQogICAgICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwog
I2Vsc2UKICAgICAgICAgICAgIHN3aXRjaCAod2tHZXN0dXJlU3RhdGUpIHsKLSAgICAgICAgICAg
IGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW46IHsKLSAgICAgICAgICAgICAgICBh
dXRvIGJvdW5kYXJ5ID0gKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICAgICAgICAg
ICAgICBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlID0gU2ltcGxlUmFuZ2UgeyBib3VuZGFyeSwgYm91
bmRhcnkgfTsKKyAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW46
CisgICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkNoYW5nZWQ6CiAgICAgICAgICAg
ICAgICAgaWYgKG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBzdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3N0YXJ0aW5nR2VzdHVy
ZVJhbmdlLT5zdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IHBvc2l0aW9u
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5k
b2N1bWVudCgpLCBzdGFydCwgcG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBhdXRvJiBz
dGFydCA9IG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UtPnN0YXJ0OworICAgICAgICAgICAgICAgICAg
ICBpZiAoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHN0YXJ0KSA8IHBvc2l0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIHBvc2l0
aW9uKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgc3RhcnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRp
b24sIHN0YXJ0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkVuZGVkOgpAQCAtMTQzMSw2
ICsxNDIxLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogI2VuZGlmCisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEdlc3R1cmVUeXBlOjpUYXBBbmRBSGFsZjoKQEAgLTE0NDUsMTEgKzE0MzYsMTEgQEAg
dm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdl
c3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3Rh
dGU6OkNoYW5nZWQ6CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFdvcmRSYW5nZSkKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCpt
X2N1cnJlbnRXb3JkUmFuZ2UpOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQocG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPiByYW5nZS0+ZW5k
UG9zaXRpb24oKSkKLSAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kKHBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkpOworICAgICAgICAgICAgcmFuZ2UgPSBtX2N1cnJlbnRXb3JkUmFuZ2U7Cisg
ICAgICAgICAgICBpZiAocG9zaXRpb24gPCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFu
Z2UtPnN0YXJ0KSkKKyAgICAgICAgICAgICAgICByYW5nZS0+c3RhcnQgPSAqbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5lbmQpKQorICAgICAgICAgICAgICAgIHJhbmdlLT5lbmQg
PSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6RW5kZWQ6CiAgICAgICAgIGNhc2UgR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2FuY2VsbGVkOgpAQCAtMTQ2Niw3ICsxNDU3LDcgQEAgdm9p
ZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1
cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICAgICAgLy8gRG91YmxlLXRhcCBhdCBlbmQgb2Yg
bGluZSBvbmx5IHBsYWNlcyBpbnNlcnRpb24gcG9pbnQgdGhlcmUuCiAgICAgICAgICAgICAvLyBU
aGlzIGhlbHBzIHRvIGdldCB0aGUgY2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVz
LAogICAgICAgICAgICAgLy8gcGFyYWdyYXBocywgYW5kIGRvY3VtZW50cy4KLSAgICAgICAgICAg
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0
aW9uKTsKKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24o
cG9zaXRpb24pOwogICAgICAgICBicmVhazsKQEAgLTE0NzksOSArMTQ3MCw4IEBAIHZvaWQgV2Vi
UGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlw
ZSBnZXN0dXJlVHlwZSwKICAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVGaW5nZXJUcmlwbGVUYXA6
CiAgICAgICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51
bGFyaXR5OjpMaW5lR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsK
ICAgICAgICAgICAgIC8vIFRyaXBsZS10YXAgYXQgZW5kIG9mIGxpbmUgb25seSBwbGFjZXMgaW5z
ZXJ0aW9uIHBvaW50IHRoZXJlLgotICAgICAgICAgICAgLy8gVGhpcyBoZWxwcyB0byBnZXQgdGhl
IGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5kcyBvZiBsaW5lcywKLSAgICAgICAgICAgIC8vIHBh
cmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7CisgICAgICAgICAgICAv
LyBUaGlzIGhlbHBzIHRvIGdldCB0aGUgY2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxp
bmVzLCBwYXJhZ3JhcGhzLCBhbmQgZG9jdW1lbnRzLgorICAgICAgICAgICAgcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJhbmdl
ID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJp
dHk6OlBhcmFncmFwaEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwog
ICAgICAgICBicmVhazsKQEAgLTE0OTAsMTIgKzE0ODAsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZWxl
Y3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVU
eXBlLAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJhbmdlKQotICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZp
bml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcywg
VXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UocmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBnZXN0dXJlVHlwZSwgZ2Vz
dHVyZVN0YXRlLCBmbGFncywgY2FsbGJhY2tJRCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdl
PiByYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBib29sIGJhc2VJc1N0YXJ0KQor
c3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLCBib29sIGJhc2VJc1N0YXJ0KQogewogICAgIFZpc2libGVTZWxlY3Rpb24gZXhpc3Rp
bmdTZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBWaXNpYmxl
UG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBleGlzdGluZ1NlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKQEAgLTE1MTQsNyArMTUwNCw3IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9p
bnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQCiAgICAgfQog
ICAgIAogICAgIFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAKICAgICBjb25zdGV4cHIgT3B0
aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhpdFRlc3RSZXF1
ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJlcXVlc3Q6OkFs
bG93VmlzaWJsZUNoaWxkRnJhbWVDb250ZW50T25seSB9OwogICAgIEhpdFRlc3RSZXN1bHQgaGl0
VGVzdCA9IGZyYW1lLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50SW5E
b2N1bWVudCwgaGl0VHlwZSk7CkBAIC0xNTI4LDIzICsxNTE4LDIxIEBAIHN0YXRpYyBSZWZQdHI8
UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBj
b25zdCBJbnRQCiAgICAgICAgICAgICByZXN1bHQgPSBzZWxlY3Rpb25TdGFydC5uZXh0KCk7CiAg
ICAgICAgIGVsc2UgaWYgKCZzZWxlY3Rpb25TdGFydC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5v
ZGUoKS0+dHJlZVNjb3BlKCkgIT0gJmhpdFRlc3QudGFyZ2V0Tm9kZSgpLT50cmVlU2NvcGUoKSkK
ICAgICAgICAgICAgIHJlc3VsdCA9IFZpc2libGVTZWxlY3Rpb246OmFkanVzdFBvc2l0aW9uRm9y
RW5kKHJlc3VsdC5kZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25TdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0LmlzTm90
TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpLCBzZWxlY3Rpb25TdGFydCwgcmVzdWx0KTsKKworICAgICAgICByYW5nZSA9IG1ha2VTaW1w
bGVSYW5nZShzZWxlY3Rpb25TdGFydCwgcmVzdWx0KTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoY29tcGFyZVBvc2l0aW9ucyhzZWxlY3Rpb25FbmQsIHJlc3VsdCkgPD0gMCkKICAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGVjdGlvbkVuZC5wcmV2aW91cygpOwogICAgICAgICBlbHNlIGlmICgm
aGl0VGVzdC50YXJnZXROb2RlKCktPnRyZWVTY29wZSgpICE9ICZzZWxlY3Rpb25FbmQuZGVlcEVx
dWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPnRyZWVTY29wZSgpKQogICAgICAgICAgICAgcmVzdWx0
ID0gVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0UG9zaXRpb25Gb3JTdGFydChyZXN1bHQuZGVlcEVx
dWl2YWxlbnQoKSwgc2VsZWN0aW9uRW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAg
ICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHJlc3VsdC5kZWVwRXF1
aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQpOworCisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHJlc3VsdCwgc2VsZWN0aW9uRW5kKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJhbmdl
OwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRp
b24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIGJh
c2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorc3RhdGljIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1l
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIGJhc2VJc1N0YXJ0LCBTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBzYW1l
RGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgOiBT
ZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkOwogICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBvcHBv
c2l0ZURpcmVjdGlvbiA9IGJhc2VJc1N0YXJ0ID8gU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2Fy
ZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZDsKQEAgLTE1NTQsNyArMTU0Miw3IEBAIHN0
YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihGcmFtZSog
ZnJhbWUsIGNvbnN0IFZpc2libGVQCiAKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHko
ZXh0ZW50LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgc2FtZURpcmVjdGlvbikp
IHsKICAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmQgYm91bmRhcnkuIExlYXZlIHNlbGVjdGlvbiB3
aGVyZSBpdCBpcy4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVu
dCwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIG9wcG9zaXRlRGlyZWN0aW9uKSkg
ewpAQCAtMTU2OSw3ICsxNTU3LDkgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRC
b3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKICAgICAgICAg
JiYgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkod29yZEJvdW5kYXJ5LCBUZXh0R3JhbnVsYXJpdHk6
OldvcmRHcmFudWxhcml0eSwgc2FtZURpcmVjdGlvbikKICAgICAgICAgJiYgaW5pdGlhbEV4dGVu
dCAhPSB3b3JkQm91bmRhcnkpIHsKICAgICAgICAgZXh0ZW50ID0gd29yZEJvdW5kYXJ5OwotICAg
ICAgICByZXR1cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3Vt
ZW50KCksIGJhc2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwg
ZXh0ZW50LCBiYXNlKTsKKyAgICAgICAgaWYgKCEoYmFzZSA8IGV4dGVudCkpCisgICAgICAgICAg
ICBzdGQ6OnN3YXAoYmFzZSwgZXh0ZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5n
ZShiYXNlLCBleHRlbnQpOwogICAgIH0KICAgICAvLyBDb252ZXJzZWx5LCBpZiB0aGUgaW5pdGlh
bCBleHRlbnQgZXF1YWxzIHRoZSBjdXJyZW50IHdvcmQgYm91bmRhcnksIHRoZW4KICAgICAvLyBy
dW4gdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiB0byBzZWUgaWYgdGhlIHNlbGVjdGlvbiBzaG91
bGQgZXh0ZW5kCkBAIC0xNTg5LDkgKzE1NzksMTEgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFu
Z2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVAK
ICAgICBpZiAoZXh0ZW50LmlzTnVsbCgpIHx8IGV4dGVudCA9PSBiYXNlKQogICAgICAgICBleHRl
bnQgPSB3b3JkQm91bmRhcnk7CiAgICAgaWYgKGV4dGVudC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
KGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGJhc2Us
IGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgZXh0ZW50LCBiYXNl
KTsKKyAgICBpZiAoIShiYXNlIDwgZXh0ZW50KSkKKyAgICAgICAgc3RkOjpzd2FwKGJhc2UsIGV4
dGVudCk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShiYXNlLCBleHRlbnQpOwogfQogCiBJ
bnRSZWN0IFdlYlBhZ2U6OnJvb3RWaWV3Qm91bmRzRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBl
bGVtZW50KQpAQCAtMTcwNiwzMSArMTY5OCwyOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVj
dGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9uVG91Y2ggcwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gcmVzdWx0OwotICAgIE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4gZmxh
Z3M7Ci0KICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c1doZW5Nb2Rp
ZnlpbmdTZWxlY3Rpb24oKSkKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0Zv
clNlbGVjdGlvbkdlc3R1cmUoc2VsZWN0aW9uVG91Y2gsIHBvaW50KTsKIAorICAgIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdz
OworCiAgICAgc3dpdGNoIChzZWxlY3Rpb25Ub3VjaCkgewogICAgIGNhc2UgU2VsZWN0aW9uVG91
Y2g6OlN0YXJ0ZWQ6CiAgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWROb3RNb3Zpbmc6CiAg
ICAgICAgIGJyZWFrOwotICAgIAorCiAgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWQ6Ci0g
ICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJs
ZSgpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRp
b24ocG9zaXRpb24pOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkKLSAgICAg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHJlc3Vs
dCwgcmVzdWx0KTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKHBvc2l0aW9uKSk7
CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VGb3JQb2ludEluUm9vdFZp
ZXdDb29yZGluYXRlcyhmcmFtZSwgcG9pbnQsIGJhc2VJc1N0YXJ0KTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZE1vdmluZ0ZvcndhcmQ6CiAgICAgICAg
IHJhbmdlID0gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKCZmcmFtZSwgcG9zaXRpb24s
IGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwogICAgICAgICBicmVh
azsKLSAgICAgICAgCisKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZE1vdmluZ0JhY2t3
YXJkOgogICAgICAgICByYW5nZSA9IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbigmZnJh
bWUsIHBvc2l0aW9uLCBiYXNlSXNTdGFydCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTczOSw4ICsxNzI4LDkgQEAgdm9pZCBXZWJQYWdlOjp1cGRh
dGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBJbnRQb2ludCYgcG9pbnQsIFNlbGVjdGlvblRv
dWNoIHMKICAgICAgICAgcmFuZ2UgPSByYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVz
KGZyYW1lLCBwb2ludCwgYmFzZUlzU3RhcnQpOwogICAgICAgICBicmVhazsKICAgICB9CisKICAg
ICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
cmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVzQ2FsbGJh
Y2socG9pbnQsIHNlbGVjdGlvblRvdWNoLCBmbGFncywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMTc0
OCwxNSArMTczOCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVz
KGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9uVG91Y2ggcwogdm9pZCBXZWJQYWdlOjpz
ZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZnJvbSwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHRvLCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwgR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZSBnZXN0dXJlU3RhdGUsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAg
ICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBmcm9tUG9zaXRpb24gPSBmcmFtZS52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhmcm9tKSk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHRvUG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25G
b3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyh0bykpOwotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2U7Ci0gICAgaWYgKGZyb21Qb3NpdGlvbi5pc05vdE51bGwoKSAmJiB0b1Bv
c2l0aW9uLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIGlmIChmcm9tUG9zaXRpb24gPCB0b1Bvc2l0
aW9uKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgp
LCBmcm9tUG9zaXRpb24sIHRvUG9zaXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHRvUG9zaXRpb24sIGZyb21Q
b3NpdGlvbik7Ci0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFu
Z2UuZ2V0KCksIGZyb21Qb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgYXV0byBmcm9t
UG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJv
b3RWaWV3VG9Db250ZW50cyhmcm9tKSk7CisgICAgYXV0byB0b1Bvc2l0aW9uID0gZnJhbWUudmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHModG8p
KTsKKyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShmcm9tUG9zaXRpb24sIHRv
UG9zaXRpb24pKSB7CisgICAgICAgIGlmICghKGZyb21Qb3NpdGlvbiA8IHRvUG9zaXRpb24pKQor
ICAgICAgICAgICAgc3RkOjpzd2FwKHJhbmdlLT5zdGFydCwgcmFuZ2UtPmVuZCk7CisgICAgICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIGZyb21Qb3NpdGlvbi5h
ZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQogCiAgICAgLy8gV2UgY2FuIHVzZSB0aGUgc2FtZSBj
YWxsYmFjayBmb3IgdGhlIGdlc3R1cmVzIHdpdGggb25lIHBvaW50LgpAQCAtMTc4MCwxMyArMTc2
NywxMyBAQCB2b2lkIFdlYlBhZ2U6OmV4dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIENvbXBsZXRpb25IYQogICAgIEludFBvaW50IGVuZExvY2F0aW9u
Rm9yU3ludGhldGljTW91c2VFdmVudHM7CiAgICAgYm9vbCBzaG91bGREaXNwYXRjaE1vdXNlRXZl
bnRzID0gc2hvdWxkRGlzcGF0Y2hTeW50aGV0aWNNb3VzZUV2ZW50c1doZW5Nb2RpZnlpbmdTZWxl
Y3Rpb24oKTsKICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hNb3VzZUV2ZW50cykgewotICAgICAgICBh
dXRvIHN0YXJ0TG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKLSAgICAgICAgZW5kTG9jYXRp
b25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RW
aWV3KFZpc2libGVQb3NpdGlvbih3b3JkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKSkuY2VudGVyKCk7CisgICAgICAgIGF1dG8gc3RhcnRMb2NhdGlvbkZvclN5bnRo
ZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJs
ZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPnN0YXJ0KSku
YWJzb2x1dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKKyAgICAgICAgZW5kTG9jYXRpb25Gb3JT
eW50aGV0aWNNb3VzZUV2ZW50cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZp
c2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5lbmQp
KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOwogICAgICAgICBkaXNwYXRjaFN5bnRo
ZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rpb25Ub3VjaDo6U3RhcnRl
ZCwgc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzKTsKICAgICAgICAgZGlzcGF0
Y2hTeW50aGV0aWNNb3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoU2VsZWN0aW9uVG91Y2g6
Ok1vdmVkLCBlbmRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzKTsKICAgICB9CiAKLSAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgcG9z
aXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2Uod29yZFJhbmdlLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBp
ZiAoc2hvdWxkRGlzcGF0Y2hNb3VzZUV2ZW50cykKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNN
b3VzZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoU2VsZWN0aW9uVG91Y2g6OkVuZGVkLCBlbmRM
b2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzKTsKQEAgLTE4MTEsMTAgKzE3OTgsMTIgQEAg
dm9pZCBXZWJQYWdlOjpzZWxlY3RXb3JkQmFja3dhcmQoKQogICAgIGlmICghZnJhbWUuc2VsZWN0
aW9uKCkuaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLSAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51
bGwoKSAmJiBzdGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0
YXJ0UG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5k
YXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJp
dHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOworICAgIGlmIChzdGFydFBvc2l0aW9u
LmlzTnVsbCgpIHx8IHN0YXJ0UG9zaXRpb24gPT0gcG9zaXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdl
KHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwog
fQogCiB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMiw3
ICsxODIxLDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBv
ZmZzZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBzdGFydFBvc2l0aW9uICE9IHBv
c2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdl
OjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBv
c2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0
eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNl
clRyaWdnZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KICAgICAKQEAgLTE5ODQs
NyArMTk3Myw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxl
Y3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5CiAgICAgfQogCiAgICAgVmVjdG9y
PFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOwotICAgIHJhbmdlLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3Rz
KTsKKyAgICBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzV2l0
aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhzZWxlY3Rpb25SZWN0cyk7CiAgICAgY29udmVydENvbnRl
bnRUb1Jvb3RWaWV3U2VsZWN0aW9uUmVjdHMoKmZyYW1lLnZpZXcoKSwgc2VsZWN0aW9uUmVjdHMp
OwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFj
ayhzZWxlY3Rpb25SZWN0cywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjA2NCw3ICsyMDUzLDcgQEAg
dm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvaW50LCBib29sIGlzSW50ZXIKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2
aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVy
YWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICAKICAgICBpZiAocG9zaXRpb24uaXNOb3RO
dWxsKCkpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgcG9z
aXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmluaXR5
KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2Vy
VHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCkBAIC0yMDc2LDcgKzIw
NjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rp
b24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51
bGwoKSkgewogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgZGlyZWN0aW9uKTsKICAgICAgICAgaWYgKHBv
c2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9z
aXRpb24pLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICAgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBVUFNUUkVB
TSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMjA5MCw3
ICsyMDc5LDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJl
Y3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW4KICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uID0gKGlzRm9yd2FyZCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlRW5kKCkgOiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKTsKICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxh
cml0eShwb3NpdGlvbiwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbik7CiAgICAgICAgIGlmIChwb3Np
dGlvbi5pc05vdE51bGwoKSkKLSAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0
aW9uKS5wdHIoKSwgaXNGb3J3YXJkPyBVUFNUUkVBTSA6IERPV05TVFJFQU0sIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAg
ICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJh
bmdlKHBvc2l0aW9uKSwgaXNGb3J3YXJkPyBVUFNUUkVBTSA6IERPV05TVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIwOTksMjUgKzIwODgsMTMg
QEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJpdHlBdFBv
aW50KEZyYW1lJiBmcmFtZSwgY29uc3QgV2UKIHsKICAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJs
ZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGlu
Z1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewotICAgIGNh
c2UgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eTogewotICAgICAgICBhdXRv
IGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgICAgICBpZiAoIWJv
dW5kYXJ5KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJu
IHsgeyAqYm91bmRhcnksICpib3VuZGFyeSB9IH07Ci0gICAgfQotICAgIGNhc2UgVGV4dEdyYW51
bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0byByYW5nZSA9IHdvcmRSYW5n
ZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIGlmICghcmFuZ2UpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4geyAqcmFuZ2UgfTsKLSAgICB9
CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgorICAgICAg
ICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKKyAgICBjYXNlIFRleHRHcmFudWxh
cml0eTo6V29yZEdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4gd29yZFJhbmdlRnJvbVBvc2l0
aW9uKHBvc2l0aW9uKTsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VHcmFudWxh
cml0eToKLSAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6IHsK
LSAgICAgICAgYXV0byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgZ3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgICAg
IGlmICghcmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBy
ZXR1cm4geyAqcmFuZ2UgfTsKLSAgICB9CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFn
cmFwaEdyYW51bGFyaXR5OgorICAgICAgICByZXR1cm4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KTsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6RG9jdW1lbnRHcmFudWxhcml0eToKICAgICAg
ICAgLy8gRklYTUU6IE1ha2VzIG5vIHNlbnNlIHRoYXQgdGhpcyBtdXRhdGVzIHRoZSBjdXJyZW50
IHNlbGVjdGlvbiBhbmQgcmV0dXJucyBudWxsLgogICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3RBbGwoKTsKQEAgLTIxNjQsNyArMjE0MSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4
dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBX
CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChm
cmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50
KTsKICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Cisg
ICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKnJhbmdlLCBVUFNUUkVB
TSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwogICAgIG1faW5pdGlhbFNlbGVjdGlvbiA9IHJhbmdlOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiB9CkBAIC0yMTk2LDEwICsyMTczLDggQEAgdm9pZCBXZWJQYWdlOjp1cGRh
dGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYKICAgICBlbHNlIGlmIChwb3NpdGlvbiA8IGluaXRpYWxTZWxlY3Rpb25TdGFydFBvc2l0
aW9uKQogICAgICAgICBzZWxlY3Rpb25TdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihuZXdSYW5nZS0+c3RhcnQpOwogCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTm90TnVsbCgp
ICYmIHNlbGVjdGlvbkVuZC5pc05vdE51bGwoKSkgewotICAgICAgICBhdXRvIHJhbmdlID0gU2lt
cGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9OwotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIFVQU1RSRUFNLCBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJl
ZCk7Ci0gICAgfQorICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpKQorICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHNlbGVjdGlvblN0YXJ0ID09IGluaXRpYWxT
ZWxlY3Rpb25TdGFydFBvc2l0aW9uLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMjE0LDcgKzIxODks
NiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3Rh
cnQ7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZDsKICAgICAKQEAgLTIyNDgsMTEg
KzIyMjIsOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvbwogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb25FbmQuaXNO
b3ROdWxsKCkpCi0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0KLSAgICBpZiAocmFuZ2UpCi0gICAg
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RS
RUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNl
clRyaWdnZXJlZCk7CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpCisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UocmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2sobV9zZWxlY3Rpb25BbmNob3IgPT0gU3Rh
cnQsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIzMDIsMTIgKzIyNzMsMTIgQEAgdm9pZCBXZWJQYWdl
OjpyZXBsYWNlU2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5n
JiBuZXdUZXh0KQogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byB3b3JkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rp
b24oKS5pc0NhcmV0KCkKICAgICAgICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkKLSAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2Uo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0gICAg
aWYgKHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlLmdldCgpKSAhPSBvbGRUZXh0KQorICAg
ICAgICA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlKSAhPSBvbGRUZXh0KQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9u
Q2hhbmdlcyh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdv
cmRSYW5nZS5nZXQoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KHdvcmRSYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzKTsKICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDAp
OwogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwog
fQpAQCAtMjMyNywxNCArMjI5OCwxNCBAQCB2b2lkIFdlYlBhZ2U6OnJlcGxhY2VEaWN0YXRlZFRl
eHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCiAgICAgICAg
IHBvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsKICAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRPZkRvY3VtZW50KGZyYW1lLmRvY3VtZW50KCkp
OwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3Np
dGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSk7CiAKLSAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5wdHIo
KSkgIT0gb2xkVGV4dCkKKyAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZSkgIT0gb2xk
VGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBub3RpZnkg
dGhlIGNsaWVudCB0aGF0IHRoZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQgdW50aWwgd2UgYXJlIGRv
bmUgaW5zZXJ0aW5nIHRoZSBuZXcgdGV4dC4KICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UocmFuZ2UucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzKTsKICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDAp
OwogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwog
fQpAQCAtMjM0NywyNyArMjMxOCwyNSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVj
dGlvbkRhdGEoY29uc3QgU3RyaW5nJiB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIENvbQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBhdXRvIHJhbmdlID0gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBhdXRvIHJhbmdlID0gd29yZFJhbmdlRnJv
bVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsK
ICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIHJlcGx5KHsgfSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFu
Z2UuZ2V0KCkpOworICAgIGF1dG8gdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChy
YW5nZSk7CiAgICAgY29uc3QgdW5zaWduZWQgbWF4U2VhcmNoQXR0ZW1wdHMgPSA1OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyAgaSA8IG1heFNlYXJjaEF0dGVtcHRzICYmIHRleHRGb3JSYW5nZSAh
PSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb247ICsraSkKLSAgICB7Ci0gICAgICAgIHBvc2l0aW9uID0g
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5wcmV2aW91cygpOwotICAgICAgICBpZiAocG9zaXRpb24u
aXNOdWxsKCkgfHwgcG9zaXRpb24gPT0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgIGkgPCBtYXhTZWFyY2hBdHRlbXB0cyAmJiB0ZXh0Rm9yUmFuZ2UgIT0g
dGV4dEZvckF1dG9jb3JyZWN0aW9uOyArK2kpIHsKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpLnByZXZpb3VzKCk7CisgICAg
ICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSB8fCBwb3NpdGlvbiA9PSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHdvcmRSYW5nZUZyb21Qb3Np
dGlvbihwb3NpdGlvbiktPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwot
ICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsK
KyAgICAgICAgcmFuZ2UgPSB7IHsgd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS0+c3Rh
cnQsIHJhbmdlLT5lbmQgfSB9OworICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JD
b250ZXh0KHJhbmdlKTsKICAgICB9CiAKICAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gc2VsZWN0
aW9uUmVjdHM7CiAgICAgaWYgKHRleHRGb3JSYW5nZSA9PSB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24p
Ci0gICAgICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHMpOwor
ICAgICAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMoc2Vs
ZWN0aW9uUmVjdHMpOwogCiAgICAgYXV0byByb290Vmlld1NlbGVjdGlvblJlY3RzID0gc2VsZWN0
aW9uUmVjdHMubWFwKFsmXShjb25zdCBhdXRvJiBzZWxlY3Rpb25SZWN0KSAtPiBGbG9hdFJlY3Qg
eyByZXR1cm4gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoc2VsZWN0aW9uUmVjdC5y
ZWN0KCkpOyB9KTsKIApAQCAtMjQxMywxNCArMjM4MiwxNCBAQCBib29sIFdlYlBhZ2U6OmFwcGx5
QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0
cmluZwogICAgIGlmICghZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgU3RyaW5nIHRleHRGb3JSYW5nZTsKICAgICBhdXRv
IG9yaWdpbmFsVGV4dFdpdGhGb2xkZWRRdW90ZU1hcmtzID0gZm9sZFF1b3RlTWFya3Mob3JpZ2lu
YWxUZXh0KTsKIAogICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKTsKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpOwogICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNv
bnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JD
b250ZXh0KHJhbmdlKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmICdvcmlnaW5hbFRleHQnIGlz
IG5vdCB0aGUgc2FtZSBhcyAndGV4dEZvclJhbmdlJyB3ZSBuZWVkIHRvIG1vdmUgJ3JhbmdlJwog
ICAgICAgICAvLyBmb3J3YXJkIHN1Y2ggdGhhdCBpdCBtYXRjaGVzIHRoZSBvcmlnaW5hbCBzZWxl
Y3Rpb24gYXMgbXVjaCBhcyBwb3NzaWJsZS4KQEAgLTI0MzAsMzMgKzIzOTksMzMgQEAgYm9vbCBX
ZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0
aW9uLCBjb25zdCBTdHJpbmcKICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLnBy
ZXZpb3VzKCk7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAg
ICAgICAgcG9zaXRpb24gPSBzdGFydE9mRG9jdW1lbnQoZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAg
ICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9u
LCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAgIHRl
eHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICAg
ICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpOworICAgICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChyYW5nZSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb29wQ291bnQgPSAwOwog
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4UG9zaXRpb25zQXR0ZW1wdHMgPSAxMDsKICAg
ICAgICAgICAgIHdoaWxlICh0ZXh0Rm9yUmFuZ2UubGVuZ3RoKCkgJiYgdGV4dEZvclJhbmdlLmxl
bmd0aCgpID4gb3JpZ2luYWxUZXh0Lmxlbmd0aCgpICYmIGxvb3BDb3VudCA8IG1heFBvc2l0aW9u
c0F0dGVtcHRzKSB7CiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5uZXh0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHBvc2l0aW9uID49
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBXVEY6Om51
bGxvcHQ7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2Ug
PSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkpOworICAgICAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4
dEZvckNvbnRleHQocmFuZ2UpOwogICAgICAgICAgICAgICAgIGxvb3BDb3VudCsrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHRleHRGb3JSYW5nZS5pc0VtcHR5KCkgJiYgcmFu
Z2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQoKSkgewogICAgICAgICAgICAgLy8gSWYgJ3JhbmdlJyBk
b2VzIG5vdCBpbmNsdWRlIGFueSB0ZXh0IGJ1dCBpdCBpcyBub3QgY29sbGFwc2VkLCB3ZSBuZWVk
IHRvIHNldAogICAgICAgICAgICAgLy8gJ3JhbmdlJyB0byBtYXRjaCB0aGUgc2VsZWN0aW9uLiBP
dGhlcndpc2Ugbm9uLXRleHQgbm9kZXMgd2lsbCBiZSByZW1vdmVkLgotICAgICAgICAgICAgcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24p
OworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgICAg
ICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBSYW5nZSBzZWxlY3Rpb24uCi0gICAgICAgIHJh
bmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOworICAgICAgICByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZv
ckNvbnRleHQocmFuZ2UpOwogICAgIH0KIAogICAgIGlmIChmb2xkUXVvdGVNYXJrcyh0ZXh0Rm9y
UmFuZ2UpICE9IG9yaWdpbmFsVGV4dFdpdGhGb2xkZWRRdW90ZU1hcmtzKQpAQCAtMjQ2NSw5ICsy
NDM0LDkgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICAvLyBDb3JyZWN0bHkgZGV0ZXJt
aW5lIGFmZmluaXR5LCB1c2luZyBsb2dpYyBjdXJyZW50bHkgb25seSBwcmVzZW50IGluIFZpc2li
bGVQb3NpdGlvbgogICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IERPV05TVFJFQU07CiAgICAgaWYg
KHJhbmdlICYmIHJhbmdlLT5jb2xsYXBzZWQoKSkKLSAgICAgICAgYWZmaW5pdHkgPSBWaXNpYmxl
UG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgVVBTVFJFQU0pLmFmZmluaXR5KCk7Cisg
ICAgICAgIGFmZmluaXR5ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihyYW5nZS0+c3RhcnQpLCBVUFNUUkVBTSkuYWZmaW5pdHkoKTsKICAgICAKLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBhZmZpbml0eSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIGFmZmluaXR5LCBXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgaWYgKGNvcnJlY3Rp
b24ubGVuZ3RoKCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQoY29ycmVjdGlv
biwgMCwgb3JpZ2luYWxUZXh0LmlzRW1wdHkoKSA/IFRleHRFdmVudElucHV0S2V5Ym9hcmQgOiBU
ZXh0RXZlbnRJbnB1dEF1dG9jb21wbGV0aW9uKTsKICAgICBlbHNlIGlmIChvcmlnaW5hbFRleHQu
bGVuZ3RoKCkpCkBAIC0yNDk0LDEyICsyNDYzLDggQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0
IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAgICAgIHNlbGVjdGVkVGV4dCA9
IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSk7CiAKICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUu
ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZWRUZXh0
QmVmb3JlOwotICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
UG9zaXRpb24pKQotICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQoeyBjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgKnN0YXJ0IH0pOwotICAgICAgICBTdHJp
bmcgbWFya2VkVGV4dEFmdGVyOwotICAgICAgICBpZiAoYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQ
b2ludChlbmRQb3NpdGlvbikpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QWZ0ZXIgPSBwbGFpblRl
eHRGb3JDb250ZXh0KHsgKmVuZCwgY29tcG9zaXRpb25SYW5nZS0+ZW5kIH0pOworICAgICAgICBh
dXRvIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5n
ZShjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgc3RhcnRQb3NpdGlvbikpOworICAgICAgICBhdXRv
IG1hcmtlZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQobWFrZVNpbXBsZVJhbmdlKGVu
ZFBvc2l0aW9uLCBjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAgbWFya2VkVGV4dCA9
IG1hcmtlZFRleHRCZWZvcmUgKyBzZWxlY3RlZFRleHQgKyBtYXJrZWRUZXh0QWZ0ZXI7CiAgICAg
ICAgIGlmICghbWFya2VkVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1hcmtlZFRleHRS
YW5nZS5sb2NhdGlvbiA9IG1hcmtlZFRleHRCZWZvcmUubGVuZ3RoKCk7CkBAIC0yNjczLDkgKzI2
MzgsOSBAQCBzdGF0aWMgdm9pZCBkYXRhRGV0ZWN0b3JMaW5rUG9zaXRpb25JbmZvcm1hdGlvbihF
bGVtZW50JiBlbGVtZW50LCBJbnRlcmFjdGlvbkluZgogICAgIGF1dG8gbGlua1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShlbGVtZW50LmRvY3VtZW50KCkpOwogICAgIGxpbmtSYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKGVsZW1lbnQpOwogICAgIGluZm8udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRp
c3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnko
bGlua1JhbmdlLT5zdGFydFBvc2l0aW9uKCksCi0gICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRl
ZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpLmdldCgpKTsKKyAg
ICAgICAgZGF0YURldGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpCYWNrd2FyZCkpOwogICAgIGluZm8udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxh
eShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShsaW5r
UmFuZ2UtPmVuZFBvc2l0aW9uKCksCi0gICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRl
eHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkuZ2V0KCkpOworICAgICAgICBk
YXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkZv
cndhcmQpKTsKIH0KICNlbmRpZgogCkBAIC00MTA1LDcgKzQwNzAsNyBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVNlbGVjdGlvbldpdGhEZWx0YShpbnQ2NF90IGxvY2F0aW9uRGVsdGEsIGludDY0X3Qg
bGVuZ3RoRGVsdAogCiAgICAgYXV0byBuZXdTZWxlY3Rpb25SYW5nZSA9IENoYXJhY3RlclJhbmdl
KG5ld1NlbGVjdGlvbkxvY2F0aW9uLnVuc2FmZUdldCgpLCBuZXdTZWxlY3Rpb25MZW5ndGgudW5z
YWZlR2V0KCkpOwogICAgIGF1dG8gdXBkYXRlZFNlbGVjdGlvblJhbmdlID0gcmVzb2x2ZUNoYXJh
Y3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVj
dGlvblJhbmdlKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UodXBkYXRlZFNlbGVjdGlvblJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVwZGF0ZWRTZWxl
Y3Rpb25SYW5nZSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CiAKQEAgLTQzOTAsNyArNDM1NSw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9jdXNUZXh0SW5wdXRD
b250ZXh0QW5kUGxhY2VDYXJldChjb25zdCBFbGVtZW50Q29udGV4dCYgZWxlbWVudENvCiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRl
KCp0YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgcG9z
aXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBv
c2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlz
aWJsZVBvc2l0aW9uLm1tCmluZGV4IDJiM2QxOWM5ZGE3YmQ3N2NiN2RhNzZlNmRmZWI1ZDUxY2Uz
NTRiYzEuLjNiMGViOTU0ZTA5YWZkOGM3MzA1ZmZhZWUxMjQxZjE3ZjIxMmQxZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJW
aXNpYmxlUG9zaXRpb24ubW0KQEAgLTI5Miw3ICsyOTIsNyBAQCAtIChCT09MKXdpdGhpblRleHRV
bml0T2ZHcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0
aW9uSQogLy8gaXMgZW5jbG9zZWQgZGVwZW5kcyBvbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCB1c2lu
ZyB0aGUgc2FtZSBydWxlIGFzIC1bV2ViVmlzaWJsZVBvc2l0aW9uIHdpdGhpblRleHRVbml0T2ZH
cmFudWxhcml0eTppbkRpcmVjdGlvbkF0Qm91bmRhcnk6XS4KIC0gKERPTVJhbmdlICopZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5OihXZWJUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkg
aW5EaXJlY3Rpb25JZkF0Qm91bmRhcnk6KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVj
dGlvbgogewotICAgIHJldHVybiBraXQoZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KFtz
ZWxmIF92aXNpYmxlUG9zaXRpb25dLCB0b1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRv
U2VsZWN0aW9uRGlyZWN0aW9uKGRpcmVjdGlvbikpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGVu
Y2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXSwgdG9U
ZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rp
b24pKSk7CiB9CiAKIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uQXRTdGFydE9yRW5k
T2ZXb3JkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4IGVhMzA5ODky
NDk4ZjNmNjRlZjBmMDY0OGYzNTQ1YzU1ODUxYjk2OTUuLjg1ODRjMjMxZmVmOGM4ZDhiNzA2ZThm
OTZlZDA4ZDczODg1M2RkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1t
CkBAIC00NCw2ICs0NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlclRleHRDb250cm9sLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL21hcmt1
cC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE1Miw3ICsxNTMsNyBAQCAtIChE
T01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJp
bmc6KE5TU3RyaW5nICopbWFyawogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKWNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiAgICAgLy8gRklYTUU6IFNp
bmNlIHRoaXMgaXMgbm90IGEgY29udGV4dHVhbCBmcmFnbWVudCwgaXQgd29uJ3QgaGFuZGxlIHdo
aXRlc3BhY2UgcHJvcGVybHkuCi0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KGNvcmUoc2VsZiktPmNyZWF0ZVJhbmdlKCksIHRleHQpLnB0cigpKTsKKyAgICByZXR1cm4ga2l0
KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpj
b3JlKHNlbGYpKSwgdGV4dCkucHRyKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCA4MTAwYWJlNmJiZjdk
ODY5OGRhNmVjNzViZDhiYWY4ZjBlZTRkNjkxLi40ZjA2ODM0NjIyYjczMmZlNmE2Y2M2NGM3Yzk1
NWRhMjE0ZjJmNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
VUlLaXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01V
SUtpdEV4dGVuc2lvbnMubW0KQEAgLTc4LDkgKzc4LDEwIEBAIEBpbXBsZW1lbnRhdGlvbiBET01S
YW5nZSAoVUlLaXRFeHRlbnNpb25zKQogCiAtICh2b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5E
aXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogewotICAgIFJh
bmdlICpyYW5nZSA9IGNvcmUoc2VsZik7CisgICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsK
KwogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOwotICAgIGZyYW1l
U2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7CisgICAgZnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9u
KG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOwogICAgIAogICAgIFdlYkNvcmU6OlRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSA9IFdlYkNvcmU6OlRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3Jh
bnVsYXJpdHk7CiAgICAgLy8gVW50aWwgV2ViS2l0IHN1cHBvcnRzIHZlcnRpY2FsIGxheW91dCwg
ImRvd24iIGlzIGVxdWl2YWxlbnQgdG8gImZvcndhcmQgYnkgYSBsaW5lIiBhbmQKQEAgLTkyLDMz
ICs5MywzNCBAQCAtICh2b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRl
eHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogICAgICAgICBkaXJlY3Rpb24gPSBXZWJU
ZXh0QWRqdXN0bWVudEJhY2t3YXJkOwogICAgICAgICBncmFudWxhcml0eSA9IFdlYkNvcmU6OlRl
eHRHcmFudWxhcml0eTo6TGluZUdyYW51bGFyaXR5OwogICAgIH0KLSAgICAKKwogICAgIGZvciAo
VUludDMyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1v
ZGlmeShXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIChXZWJDb3JlOjpT
ZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgCisKICAgICBQ
b3NpdGlvbiBzdGFydCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gZnJhbWVTZWxlY3Rpb24u
c2VsZWN0aW9uKCkuZW5kKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaWYgKHN0
YXJ0LmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5jb250
YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgcmFu
Z2Uuc2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkpOwogICAgIGlmIChlbmQuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByYW5nZS0+
c2V0RW5kKCplbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OworICAgICAgICByYW5nZS5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKIC0gKHZvaWQpZXh0ZW5kOihVSW50MzIpYW1vdW50IGlu
RGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICBS
YW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7
CisKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKLSAgICBmcmFt
ZVNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UpOwotICAgIAorICAgIGZyYW1lU2VsZWN0aW9uLnNldFNl
bGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKwogICAgIGZvciAoVUludDMyIGkgPSAw
OyBpIDwgYW1vdW50OyBpKyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlmeShXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgKFdlYkNvcmU6OlNlbGVjdGlvbkRp
cmVjdGlvbilkaXJlY3Rpb24sIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOwotICAgIAorCiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0
aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIGlmIChzdGFydC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJh
bmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KCpzdGFydC5jb250YWluZXJOb2Rl
KCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoZW5kLmNvbnRhaW5l
ck5vZGUoKSkKLSAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5k
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKCplbmQuY29u
dGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogfQogCiAtIChET01O
b2RlICopZmlyc3ROb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
V2ViRE9NT3BlcmF0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01P
cGVyYXRpb25zLm1tCmluZGV4IDcxYzA0ZGIyMjkzN2EzMzBlMWE0NzNmMjEzZmFjODNjOTU3MzFm
MGIuLmQzYWU3ZjZlZjgzZDIwOGYyNjliNmUxNjJkYmUxNDU0NjJkZmI5NmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCkBAIC01Miw2ICs1
Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0pTRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9M
ZWdhY3lXZWJBcmNoaXZlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtV2hlZWxFdmVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJFbGVt
ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU2hhZG93Um9vdC5oPgpAQCAtMTg0LDcgKzE4NSw3IEBAIEBpbXBsZW1lbnRhdGlvbiBE
T01SYW5nZSAoV2ViRE9NUmFuZ2VPcGVyYXRpb25zKQogCiAtIChXZWJBcmNoaXZlICopd2ViQXJj
aGl2ZQogewotICAgIHJldHVybiBbW1tXZWJBcmNoaXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVn
YWN5V2ViQXJjaGl2ZTpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY29yZShzZWxmKSldIGF1dG9y
ZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxl
Z2FjeVdlYkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKCpjb3JlKHNlbGYpKV0gYXV0
b3JlbGVhc2VdOwogfQogCiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggMzRlNjhmMGMzZDU3MmJhOWU0
M2FlNTE5ZjkzYzRiOGFjZTBjZTg3ZS4uMzNhMjYwOTI2NmE5ZTk1NDdlYWNkMTFiNDE3ZDRmMmNi
MTFiYTAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CkBAIC05Myw2ICs5Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UHJpbnRDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlckxheWVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CkBAIC03MjIsNyArNzIzLDcgQEAgLSAoTlNSZWN0
KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBOU1plcm9SZWN0OwotICAgIHJldHVybiBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqbWFrZVNpbXBsZVJhbmdlKGNvcmUo
cmFuZ2UpKSk7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0
UmVjdEZvclJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpKTsKIH0KIAogLSAodm9p
ZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKQEAgLTE0NzksNyAr
MTQ4MCw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBh
ZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpCiAKICAgICBhdXRvIGNvcmVDbG9zZVR5
cGluZyA9IGNsb3NlVHlwaW5nID8gRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZ
ZXMgOiBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vOwogICAgIGF1dG8gY29y
ZVVzZXJUcmlnZ2VyZWQgPSB1c2VyVHJpZ2dlcmVkID8gVXNlclRyaWdnZXJlZCA6IE5vdFVzZXJU
cmlnZ2VyZWQ7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJh
bmdlKSwgY29yZShhZmZpbml0eSksIGNvcmVDbG9zZVR5cGluZywgY29yZVVzZXJUcmlnZ2VyZWQp
OworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdl
KGNvcmUocmFuZ2UpKSwgY29yZShhZmZpbml0eSksIGNvcmVDbG9zZVR5cGluZywgY29yZVVzZXJU
cmlnZ2VyZWQpOwogICAgIGlmICghY2xvc2VUeXBpbmcpCiAgICAgICAgIGZyYW1lLmVkaXRvcigp
LmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlw
aW5nKCk7CiB9CkBAIC0xODc5LDcgKzE4ODAsNyBAQCAtIChOU1N0cmluZyAqKXN0cmluZ0ZvclJh
bmdlOihET01SYW5nZSAqKXJhbmdlCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6
KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVu
dCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hT
dHlsZQogewogICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIERPTURvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIERPTURvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFu
Z2UsIHRleHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhG
cmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFy
dFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6bWF0Y2hTdHlsZV07CiB9CiAKQEAgLTE5
NjIsNyArMTk2Myw3IEBAIC0gKEJPT0wpaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24KIC0gKHZv
aWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxh
Y2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJl
cGxhY2UKIHsKICAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBET01Eb2N1bWVudEZyYWdt
ZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRl
TGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBET01Eb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJh
bmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21h
cnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107CiB9CiAKQEAgLTIyNzEsNyAr
MjI3Miw4IEBAIC0gKE5TQXJyYXkgKilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFNjYWxlRmFj
dG9yOihmbG9hdClwcmludFNjYWxlRmFjdG9yIHBhZ2VTCiAKIC0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJl
dHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LCB0ZXh0KS5wdHIoKSk7CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIHJh
bmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBu
aWw7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZvcldl
YkFyY2hpdmU6KFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggM2E1YmIwNGJjMzRiODE2Yjk5ZGNlMzNkZDczMDY1
ZWViNjRlNTQ4Ni4uYTE4NTY4ZWY1YjVkZjhhMGFkOWE0Y2U0YzJiNmNlZjY3YzQ4NWViMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTk1LDYgKzE5
NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Byb2dyZXNz
VHJhY2tlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlcldpZGdldC5oPgpAQCAtNzkyOSw4ICs3OTMwLDcgQEAgLSAoRE9NUmFuZ2Ug
KilET01SYW5nZU9mU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvOihET01SYW5n
ZSAqKXByZXZpb3UKIHsKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+cGFnZS0+cmFuZ2VPZlN0cmluZyhzdHJp
bmcsIGNvcmUocHJldmlvdXNSYW5nZSksIGNvcmVPcHRpb25zKG9wdGlvbnMpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+cGFnZS0+cmFuZ2VPZlN0cmluZyhzdHJpbmcsIG1ha2VT
aW1wbGVSYW5nZShjb3JlKHByZXZpb3VzUmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucykpKTsK
IH0KIAogLSAodm9pZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFtZURv
Y3VtZW50UmVhZHkKQEAgLTg0NTYsNyArODQ1Niw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
CiAgICAgICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29y
ZShzZWxlY3Rpb25BZmZpbml0eSksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzKTsKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpLCBjb3JlKHNlbGVjdGlvbkFmZmlu
aXR5KSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJs
ZVRleHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1w
bC5jcHAKaW5kZXggM2RkZDAwZjdhYjcyNmUwZWU0Mjk0YTk1MDI2M2NhYjVjM2ZjYTRlZi4uNjFj
MDIyN2UyOGQyM2E5NzY2ZGRjZjIwODg0OGQ5NmEyMjQ3ZTgyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTm9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUG9zaXRpb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUZXh0Q29udHJvbC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVNlbGVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVmlzaWJsZVVuaXRzLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54
Y3NjaGVtZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNz
aGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCmluZGV4IDVmNWVjMmU0
YWVjMzllZGMzOWZjN2Y4NWM3ZDk2N2U1YzQ5NDY5NGUuLmQyYmU4Mzg5MzE1Y2Y5Y2E2NjkyMmYz
ZmY5ZmU5ZWRmMjNhYzc1OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhj
c2NoZW1lCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
eGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCkBAIC01MCw2ICs1
MCwxMiBAQAogICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6VGVz
dFdlYktpdEFQSS54Y29kZXByb2oiPgogICAgICAgICAgPC9CdWlsZGFibGVSZWZlcmVuY2U+CiAg
ICAgICA8L0J1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZT4KKyAgICAgIDxDb21tYW5kTGluZUFyZ3Vt
ZW50cz4KKyAgICAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50CisgICAgICAgICAgICBhcmd1bWVu
dCA9ICItLWd0ZXN0X2ZpbHRlcj1Gb250TWFuYWdlclRlc3RzLkNoYW5nZUZvbnRDb2xvcldpdGhD
b2xvclBhbmVsIgorICAgICAgICAgICAgaXNFbmFibGVkID0gIllFUyI+CisgICAgICAgICA8L0Nv
bW1hbmRMaW5lQXJndW1lbnQ+CisgICAgICA8L0NvbW1hbmRMaW5lQXJndW1lbnRzPgogICAgPC9M
YXVuY2hBY3Rpb24+CiAgICA8UHJvZmlsZUFjdGlvbgogICAgICAgYnVpbGRDb25maWd1cmF0aW9u
ID0gIlJlbGVhc2UiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405523</attachid>
            <date>2020-07-29 16:01:04 -0700</date>
            <delta_ts>2020-07-29 17:57:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200729160103.patch</filename>
            <type>text/plain</type>
            <size>182753</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc1YWQwYTc4MWI0Yjdm
NTVjZGFkMjE3NjYxMjA5MzA5YmIyYzNiMC4uMTFmNzNiMWQ0NmQ0YmRhMDcxYThjMTQ5ZTc2NGU5
YTkyNWE3NGJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wNy0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRnVydGhlciByZWR1Y3Rpb24g
aW4gdGhlIHVzZSBvZiBsaXZlIHJhbmdlcywgcGFydGljdWxhcmx5IGluIGhlYWRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnBlcmZvcm1UZXh0T3BlcmF0aW9uKTogRG8gbm90IGNhbGwgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZVRleHRJ
blJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBocyk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCk6
IERvIG5vdCBjYWxsIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2V0Q29tcG9zaXRpb24pOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOiBEbyBub3QgY2FsbCBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlKTogVXNlIGF1dG8gaW50ZWFkIG9mIFJlZlB0cjxSYW5nZT4uCisKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0aW9u
VG9HcmFudWxhcml0eSk6IERvIG5vdCBjYWxsIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVEZWxldGVUb01hcmspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmV4
ZWN1dGVTZWxlY3RUb01hcmspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9ybWF0
QmxvY2spOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOiBV
c2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybWF0QmxvY2tDb21tYW5k
OjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKTogVGFrZSBhCisgICAgICAgIFNpbXBsZVJh
bmdlLgorICAgICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmg6IFVwZGF0ZWQgZm9y
IGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKTogRGVsZXRlZCBvdmVybG9hZCB0YWtp
bmcgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGVkUmFuZ2UpOiBUYWtlIGEgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRG
cmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudCk6IERvIG5vdCBjYWxsCisgICAgICAgIGNyZWF0
ZUxpdmVSYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eSk6IFJldHVybiBTaW1w
bGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OndvcmRSYW5nZUZyb21Qb3NpdGlvbik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKTogVXNl
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVy
c0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkpOiBSZXR1cm4KKyAgICAgICAgYSBTaW1wbGVSYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFj
dGVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25X
aXRob3V0Q3Jvc3NpbmdMaW5lKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcv
VmlzaWJsZVVuaXRzLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6
ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQpOgorICAgICAgICBVc2UgU2ltcGxlUmFuZ2Uu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW06CisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IFVzZSBTaW1w
bGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRU
ZXN0UmVzdWx0KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29h
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRh
Rm9yQXR0YWNobWVudCk6CisgICAgICAgIERvIG5vdCBjYWxsIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQpOiBEaXR0by4KKyAgICAg
ICAgKiBlZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKiBl
ZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEpOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcv
bWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9u
YXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IFVzZSBTaW1wbGVSYW5nZS4KKworICAg
ICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGcmFnbWVudEZyb21UZXh0KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9tYXJr
dXAuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIHBhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnBl
cmZvcm1EcmFnT3BlcmF0aW9uKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBEbyBub3QgY2FsbCBjcmVhdGVMaXZl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RFbGVtZW50KTogVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnJlbW92ZUFsbERyb3BwZWRJbWFn
ZVBsYWNlaG9sZGVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQpOiBEaXR0by4KKworICAgICAg
ICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuaDogVXNlIFNpbXBsZVJhbmdlLgorCisgICAgICAgICog
cGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyk6
IFJldHVybiB2ZWN0b3Igb2YgU2ltcGxlUmFuZ2UsIGluCisgICAgICAgIHN0cnVjdHVyZSBzbyB3
ZSBoYXZlIG9uZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiB0d28gb3V0IGFyZ3VtZW50cy4KKyAg
ICAgICAgQWxzbyByZW5hbWVkIGZyb20gZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzLgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6cmFuZ2VPZlN0cmluZyk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlcGxhY2VSYW5nZXMpOiBEbyBub3QgY2FsbCBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZXBsYWNlUmFuZ2VzV2l0aFRleHQpOiBUYWtl
IFNpbXBsZVJhbmdlLgorICAgICAgICAqIHBhZ2UvUGFnZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OndvcmRzSW5DdXJyZW50UGFyYWdyYXBoIGNvbnN0KTogVXNlIFNpbXBsZVJhbmdlLgorCisg
ICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6aXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCBjb25zdCk6
CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZSwgYW5kIGFsc28gdXNlIGhhc0FueVBsYWluVGV4dCBp
bnN0ZWFkIG9mIGNvbXB1dGluZworICAgICAgICB0aGUgcGxhaW4gdGV4dCBzdHJpbmcgYW5kIGNo
ZWNraW5nIGlmIGl0J3MgZW1wdHkuCisKIDIwMjAtMDctMjkgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogQVNTRVJUSU9OIEZBSUxF
RDogIW5lZWRzTGF5b3V0KCkgb24gdGlsZWQtZHJhd2luZy9zY3JvbGxpbmcvZmFzdC1zY3JvbGwt
bWFpbmZyYW1lLXpvb20uaHRtbCBmbGFraWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ3M2JlMzZiMzg0ZWNiNGUw
MmQxYTlhYzYwNzQxMDBhNjVjMjAxOWIuLjU5N2VhNDc1OGEwMTBiNGE4NzI2MzA3ODQ0YTVlYzY1
NjFiZGMwNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI3IEBACisyMDIwLTA3LTI5ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGdXJ0aGVyIHJlZHVjdGlvbiBpbiB0
aGUgdXNlIG9mIGxpdmUgcmFuZ2VzLCBwYXJ0aWN1bGFybHkgaW4gaGVhZGVycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NzkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvbWFj
L1dLV2ViQXJjaGl2ZVJlZi5jcHA6CisgICAgICAgIChXS1dlYkFyY2hpdmVDcmVhdGVGcm9tUmFu
Z2UpOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogU2hhcmVkL0FQSVdlYkFyY2hp
dmUuaDogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIFNoYXJlZC9BUElXZWJBcmNoaXZlLm1t
OgorICAgICAgICAoQVBJOjpXZWJBcmNoaXZlOjpjcmVhdGUpOiBUYWtlIFNpbXBsZVJhbmdlLgor
CisgICAgICAgICogU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVk
aXRpbmdSYW5nZTo6dG9SYW5nZSk6IERvbid0IGNhbGwgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZSk6IFRha2UgU2ltcGxlUmFuZ2UuCisg
ICAgICAgICogU2hhcmVkL0VkaXRpbmdSYW5nZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50Lmg6CisgICAgICAgIFRha2UgU2ltcGxlUmFuZ2UsIFN0cmluZywgU3R5bGVQcm9w
ZXJ0aWVzIGluc3RlYWQgb2YKKyAgICAgICAgUmFuZ2UsIFN0cmluZ0ltcGwsIENTU1N0eWxlRGVj
bGFyYXRpb24uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGli
L1dlYktpdFdlYkVkaXRvci5jcHA6CisgICAgICAgIFN0cmluZyBpbnN0ZWFkIG9mIFN0cmluZ0lt
cGwuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01E
b2N1bWVudC5tbToKKyAgICAgICAgKC1bV0tET01Eb2N1bWVudCBjcmVhdGVEb2N1bWVudEZyYWdt
ZW50V2l0aFRleHQ6XSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAgICAgKC1bV0tET01SYW5n
ZSByYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3RlcnM6aW5EaXJlY3Rpb246
XSk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZSBhbmQgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tXZWJQcm9jZXNzUGx1
Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyIF9zZXRFZGl0aW5nRGVsZWdhdGU6XSk6CisgICAg
ICAgIFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gYnVuZGxlIGVkaXRvciBjbGllbnQuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3Jl
YXRlKTogRGVsZXRlZC4gTW92ZWQgdGhlCisgICAgICAgIGNvZGUgaW50byBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZS4KKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlSGFuZGxl
KTogQWRkZWQuIE1ha2VzIGEgaGFuZGxlIGZvciBhIFNpbXBsZVJhbmdlLgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaDoK
KyAgICAgICAgVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OmNyZWF0ZUhhbmRsZSk6IEFkZGVkLiBNYWtlcyBhIGhhbmRsZSBmb3IgYSBDU1NTdHls
ZURlY2xhcmF0aW9uLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIFVwZGF0ZWQgZm9yIGNoYW5nZXMg
dG8gYnVuZGxlIGVkaXRvciBjbGllbnQuCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpz
aG91bGRJbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRp
bmcpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50OjpkaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVUb1Bhc3RlYm9h
cmQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKTogRGl0
dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UpOiBVcGRhdGVkIHRv
IGNhbGwgbmV3CisgICAgICAgIHJldmlzZWQgYnVuZGxlIGVkaXRvciBjbGllbnQuCisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEFwcGx5U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YSk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcCk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9u
KTogVXNlIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnJlcGxhY2VN
YXRjaGVzKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxl
cjo6ZmluZFN0cmluZyk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0bworICAgICAgICBQYWdlOjpmaW5k
VGV4dE1hdGNoZXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpm
aW5kU3RyaW5nTWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxl
cjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2gpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJL
aXQ6OkZpbmRDb250cm9sbGVyOjpzZWxlY3RGaW5kTWF0Y2gpOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMpOiBEbyBub3QgY2FsbCBjcmVhdGVMaXZl
UmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50
QXN5bmMpOiBDYWxsIG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6cGxhaW5UZXh0Rm9yQ29u
dGV4dCk6IENoYW5nZWQgb3ZlcmxvYWRzIGEgYml0IHRvIHdvcmsKKyAgICAgICAgYmV0dGVyIHdp
dGggT3B0aW9uYWw8U2ltcGxlUmFuZ2U+LgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRGb3JE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRp
dG9yU3RhdGUgY29uc3QpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmdldFNlbGVjdGlvbkNvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGlkQ29uY2x1ZGVFZGl0RHJhZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpoYW5kbGVTdHlsdXNTaW5nbGVUYXBBdFBvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OnJh
bmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisg
ICAgICAgIChXZWJLaXQ6OnJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyk6IFVz
ZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VsZWN0V2l0aFR3b1Rv
dWNoZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZXh0ZW5kU2VsZWN0aW9u
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdvcmRCYWNrd2FyZCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0
eVdpdGhTZWxlY3Rpb25PZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2VsZWN0UG9zaXRpb25BdFBvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJpdHlBdFBv
aW50KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3Jh
bnVsYXJpdHlBdFBvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0
ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXBsYWNlU2VsZWN0ZWRUZXh0KTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VEaWN0YXRlZFRleHQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YSk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OmRhdGFEZXRlY3RvckxpbmtQb3NpdGlvbkluZm9y
bWF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlv
bldpdGhEZWx0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpmb2N1c1RleHRJ
bnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KTogRGl0dG8uCisKIDIwMjAtMDctMjkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgcmFuZ2UgaWRpb21zIGFu
ZCBvdGhlciBjaGFuZ2VzIHRvIHByZXBhcmUgdGhlIHdheSBmb3IgbW9yZSByZWR1Y3Rpb24gaW4g
bGl2ZSByYW5nZSB1c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCBhNjllZDc4YmU0
NTI2YjMwZjA5Yjg1YWJkMTVjNTY0ZGNiZGExNGRkLi5mOWRhZmExNmNmNGM1ZGY3ODdmZmFiM2Q2
M2JiOWUxNmM3ODA0NzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMjAtMDctMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGluIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3Vs
YXJseSBpbiBoZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTQ3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbToKKyAgICAgICAg
KC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eTppbkRp
cmVjdGlvbklmQXRCb3VuZGFyeTpdKToKKyAgICAgICAgVXNlIFNpbXBsZVJhbmdlLgorCiAyMDIw
LTA3LTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
bGl2ZSByYW5nZXMgZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCAxOWYzYmQ3ZjFiNzc3YTkzMTY0MGIyMDAxOGFkOWQxZjM0ZTQ2
NzQwLi5lYzZlNTIzYzZlYjZkOGM4NWI0ZWFiNGE2YmQwZGEyZGM2YTE5NDdkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjAtMDctMjkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGluIHRo
ZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET01IVE1MLm1tOgor
ICAgICAgICAoLVtET01IVE1MRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0
Ol0pOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5t
bToKKyAgICAgICAgKC1bRE9NUmFuZ2UgbW92ZTppbkRpcmVjdGlvbjpdKTogRGl0dG8uCisgICAg
ICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpdKTogRGl0dG8uCisgICAgICAgICog
RE9NL1dlYkRPTU9wZXJhdGlvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIHdlYkFyY2hpdmVd
KTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOl0pOiBNb3ZlZCBhICIqIiB0byBzYXZlIGEgbGl0
dGxlIHdvcmsuCisgICAgICAgICgtW1dlYkZyYW1lIHNldFNlbGVjdGVkRE9NUmFuZ2U6YWZmaW5p
dHk6Y2xvc2VUeXBpbmc6dXNlclRyaWdnZXJlZDpdKToKKyAgICAgICAgVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJl
cGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAgICBEaXR0by4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpzZWxlY3RSZXBsYWNl
bWVudDpzbWFydFJlcGxhY2U6XSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoLVtXZWJGcmFt
ZSBfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6XSk6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBET01SYW5nZU9mU3RyaW5nOnJlbGF0aXZl
VG86b3B0aW9uczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0U2VsZWN0ZWRET01S
YW5nZTphZmZpbml0eTpdKTogRGl0dG8uCisKIDIwMjAtMDctMjkgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgcmFuZ2UgaWRpb21zIGFuZCBvdGhlciBj
aGFuZ2VzIHRvIHByZXBhcmUgdGhlIHdheSBmb3IgbW9yZSByZWR1Y3Rpb24gaW4gbGl2ZSByYW5n
ZSB1c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA3NGNhMTFlYzE2Njk1YTdlOTI3
ZjI5MWJkOTM5YzkzZTQ1NzZlYzZlLi4wMjc5NGM3Y2RmODM1NDQ0YjkwZDMzYmI1Nzc4M2RhMjRm
NGQzYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjAtMDctMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRo
ZXIgcmVkdWN0aW9uIGluIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBo
ZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTQ3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IEFjY2Vzc2libGVUZXh0SW1wbC5jcHA6IEFkZGVkIGFuIGluY2x1ZGUgb2YgUmFuZ2UuaC4KKwog
MjAyMC0wNy0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFNwbGl0IFdpbmRvd3MgcGFydHMgZnJvbSBDRk5ldHdvcmtTUEkuaCB0byBDRk5l
dHdvcmtTUElXaW4uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggMjc0MjFhMWVhMDg4MTI5MzhjNmU5N2VlOGVlZDYx
MDc5OGViNmY5Ni4uZDRhYjU5Mzc1NDU1MjlmMzM3ZWU0MDRmNzliYzNhZTdiMzhiMzM2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCkBAIC03MjIsNyArNzIyLDcgQEAgVmVjdG9yPFN0cmluZz4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXQKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJhbmdlIDogb3Bl
cmF0aW9uLnRleHRSYW5nZXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodGV4dFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQorICAgICAgICBpZiAo
IWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHRleHRSYW5nZSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgU3RyaW5nIHRleHQgPSBwbGFpblRleHQodGV4dFJhbmdlKTsK
QEAgLTIwMTIsNyArMjAxMiw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZVRl
eHRJblJhbmdlKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvCiAgICAgLy8gQWxz
byBvbmx5IGRvIHRoaXMgd2hlbiB0aGUgZmllbGQgaXMgaW4gZWRpdGluZyBtb2RlLgogICAgIGF1
dG8mIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJhbWUoKTsKICAgICBpZiAoZWxlbWVudC5zaG91bGRV
c2VJbnB1dE1ldGhvZCgpKSB7Ci0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKS5nZXQo
KSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwor
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlRm9yUGxhaW5U
ZXh0UmFuZ2UocmFuZ2UpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChyZXBsYWNlbWVudFN0cmluZywgRWRpdG9yOjpTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIEVk
aXRvcjo6U21hcnRSZXBsYWNlOjpObyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXgg
MWM3ZmQxNDFlZTEzYjcxNzZjNTMzNmE3ZDVhN2FmOGQyNzlkODhkZi4uNzcxNjE2MjNmN2MwZWM5
NmEzMTU1N2JiMGI4ZjZmNDI5NTE1MDQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJJ
bnNlcnRUZXh0Q29tbWFuZC5oIgogI2luY2x1ZGUgIk1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiUmVtb3ZlTm9kZUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgpAQCAt
MTQ0MCwxNyArMTQzOSwxMSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJl
YW0oKTsKICAgICBQb3NpdGlvbiBlbmQgPSBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZh
bGVudCgpLnVwc3RyZWFtKCk7CiAgICAgIAotICAgIC8vIHN0YXJ0IGFuZCBlbmQgY2FuJ3QgYmUg
dXNlZCBkaXJlY3RseSB0byBjcmVhdGUgYSBSYW5nZTsgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRp
b25zIgotICAgIFBvc2l0aW9uIHN0YXJ0UmFuZ2VDb21wbGlhbnQgPSBzdGFydC5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKLSAgICBQb3NpdGlvbiBlbmRSYW5nZUNvbXBsaWFudCA9IGVuZC5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCgpLCBzdGFydFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0
UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmFuZ2VDb21wbGlh
bnQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kUmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBpbmVmZmljaWVudCB3YXkgdG8g
cHJlc2VydmUgc3R5bGUgb24gbm9kZXMgaW4gdGhlIHBhcmFncmFwaCB0byBtb3ZlLiBJdAogICAg
IC8vIHNob3VsZG4ndCBtYXR0ZXIgdGhvdWdoLCBzaW5jZSBtb3ZlZCBwYXJhZ3JhcGhzIHdpbGwg
dXN1YWxseSBiZSBxdWl0ZSBzbWFsbC4KICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQ7Ci0gICAgLy8gVGhpcyB1c2VkIHRvIHVzZSBhIHRlcm5hcnkgZm9yIGluaXRpYWxpemF0
aW9uLCBidXQgdGhhdCBjb25mdXNlZCBzb21lIHZlcnNpb25zIG9mIEdDQywgc2VlIGJ1ZyAzNzkx
MgogICAgIGlmIChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlICE9IGVuZE9mUGFyYWdyYXBoVG9Nb3Zl
KQotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCgp
LCBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShyYW5nZS5nZXQoKSwgbnVsbHB0
ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXM6Olll
cyksIGVtcHR5U3RyaW5nKCkpOworICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cChkb2N1bWVudCgpLCBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZSgq
bWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlOjpObywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CiAK
ICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3aGVuIHdlIGNv
cHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5nIGlmIHdlJ3Jl
IGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFwaCBjYW4gaGF2
ZSBzdHlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDc3ZWQ2ODA5MzdiMGY4NWQ1
YWE3ZDUxYWU5Mjg4MTBhNGFlOWU0ODkuLjc2NjBjOGU1ZjI0ZTkxZWUwNGRjMDhlYzVmNmRiZWUz
ZjM2ZDQ1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcyNSw3ICs3MjUsNyBA
QCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4
dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBz
bWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0FjdGlvbik7CisgICAgcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4
dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRp
dGluZ0FjdGlvbik7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVk
UmFuZ2UoKQpAQCAtMjEyMCw4ICsyMTIwLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAog
ICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0
aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6
Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVudE9m
ZnNldCk7Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJh
c2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwotICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVk
UmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6Tm8pOworICAgICAgICAgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqYmFzZU5v
ZGUsIHN0YXJ0IH0sIHsgKmJhc2VOb2RlLCBlbmQgfSB9OworICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dOU1RSRUFNLCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
Mzg5Myw4ICszODkzLDggQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVz
dCgpIGNvbnN0CiB7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQotICAg
ID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQotICAgIDogY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgPyB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpCisgICAgICAgIDogc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICBpZiAoIWNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKQEAgLTQx
OTAsOCArNDE5MCw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0
Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgfSBlbHNlCiAgICAgICAgIGlu
c2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIG51bGxwdHIpOwogCi0gICAg
UmVmUHRyPFJhbmdlPiBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
LCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpCYWNrd2FyZCk7Ci0gICAgaWYgKGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UpCisgICAgaWYg
KGF1dG8gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJ
bkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0
ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3RoKCksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFj
a3dhcmQpKQogICAgICAgICBhZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDQ0MGZjZjZmYTVmZmYxZmRi
ODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MuLjZmZjk0MzQ2YWU1MTQ1MDZmNzE1YTU5ZGRjZmNkOWZh
ZTZhODc3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAt
MTg0LDcgKzE4NCw4IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHko
RnJhbWUmIGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAgYXV0byBhZmZpbml0
eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50
KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm9sZFJhbmdlLCAqbmV3UmFuZ2UsIGFmZmlu
aXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqbmV3UmFuZ2UpLnB0cigpLCBhZmZp
bml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoKm5ld1JhbmdlLCBhZmZpbml0eSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIC8vIEZJWE1FOiBXaHkgZG8g
d2UgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBzZXRTZWxlY3RlZFJhbmdlIGhlcmU/CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM1NCw5ICszNTUsNyBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdAogICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAg
IGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KHVuaW9uUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRy
KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
LSAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZCkKKyAgICAg
ICAgaWYgKCFzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKmZy
YW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgZnJhbWUuZWRpdG9yKCkucGVyZm9ybURlbGV0ZSgpOwpAQCAtMTA1Niw3ICsxMDU1
LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rp
b24pKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5n
ZXMoKm1hcmssICpzZWxlY3Rpb24pLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Olllcyk7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBpZ25vcmUgdGhlIHJl
dHVybiB2YWx1ZSBmcm9tIHNldFNlbGVjdGVkUmFuZ2UgaGVyZT8KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTU3MSw3ICsxNTcxLDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2Nr
KEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24u
aXNOb25lT3JPcnBoYW5lZCgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50
ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSk7CisgICAgYXV0byogZm9y
bWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0Qmxv
Y2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tF
bGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0
QmxvY2tFbGVtZW50LT5sb2NhbE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBlNDM2YzdmZGUyMWRiYjIwMzRiNTljNWI5NTI4OWZh
M2NmZWQ3MGE5Li5iZjUyZTBjMDQ0YjdjYWMzMWYxNDlkNGEyNjM0Mjk1YjEyYzI0ZWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJW
aXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNjgs
MTQgKzY3LDE0IEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsCiAgICAgUmVmUHRyPE5vZGU+IG91
dGVyQmxvY2sgPSAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoKnN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCksICpub2RlVG9TcGxpdFRvKTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0
aW9uUG9zaXRpb24gPSBvdXRlckJsb2NrOwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSwgc3RhcnQsIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmRPZlNlbGVjdGlvbik7CiAgICAgRWxlbWVudCogcmVm
Tm9kZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZW5kKTsKICAgICBFbGVtZW50KiByb290
ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oc3RhcnQpOwogICAgIC8vIFJvb3QgaXMgbnVsbCBm
b3IgZWxlbWVudHMgd2l0aCBjb250ZW50ZWRpdGFibGU9ZmFsc2UuCiAgICAgaWYgKCFyb290IHx8
ICFyZWZOb2RlKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJs
b2NrKHJlZk5vZGUtPnRhZ1FOYW1lKCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkK
LSAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRh
aW5lZFdpdGhpbigqcmVmTm9kZSwgcmFuZ2UuZ2V0KCkpKQorICAgICAgICAmJiAoZW5kID09IGVu
ZE9mQmxvY2soZW5kKSB8fCAocmFuZ2UgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigq
cmVmTm9kZSwgKnJhbmdlKSkpCiAgICAgICAgICYmIHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9vdC0+
aXNEZXNjZW5kYW50T2YoKnJlZk5vZGUpKSB7CiAgICAgICAgIC8vIEFscmVhZHkgaW4gYSBibG9j
ayBlbGVtZW50IHRoYXQgb25seSBjb250YWlucyB0aGUgY3VycmVudCBwYXJhZ3JhcGgKICAgICAg
ICAgaWYgKHJlZk5vZGUtPmhhc1RhZ05hbWUodGFnTmFtZSgpKSkKQEAgLTk5LDIzICs5OCwyMiBA
QCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVy
KGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSk7CiB9CiAgICAgCi1FbGVtZW50KiBGb3JtYXRCbG9j
a0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoUmFuZ2UqIHJhbmdlKQorRWxl
bWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdl
LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAm
JiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0b3IpKQorICAgIGF1dG8gY29t
bW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqcmFuZ2UpOworICAgIHdoaWxl
IChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0
b3IuZ2V0KCkpKQogICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJl
bnROb2RlKCk7Ci0KLSAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQorICAgIGlmICghaXM8RWxlbWVu
dD4oY29tbW9uQW5jZXN0b3IpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEVsZW1l
bnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5yb290RWRp
dGFibGVFbGVtZW50KCk7CisgICAgYXV0byByb290RWRpdGFibGVFbGVtZW50ID0gcmFuZ2UtPnN0
YXJ0LmNvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmICghcm9vdEVkaXRh
YmxlRWxlbWVudCB8fCBjb21tb25BbmNlc3Rvci0+Y29udGFpbnMocm9vdEVkaXRhYmxlRWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9y
LT5pc0VsZW1lbnROb2RlKCkgPyBkb3duY2FzdDxFbGVtZW50Pihjb21tb25BbmNlc3RvcikgOiBu
dWxscHRyOworICAgIHJldHVybiAmZG93bmNhc3Q8RWxlbWVudD4oKmNvbW1vbkFuY2VzdG9yKTsK
IH0KIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0Nv
bW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKaW5k
ZXggNzliZWRhZDE3ZTBlNjRjODI1ODIwMTZkNTJlOWI5ZTk2ZjI0MjFjNy4uZGEyYWQ1MDRiYzEw
NTM3OTg0NGU3Y2FhNTAyNTA2ZDE1MTE2Mjc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgc3RhdGljIEVsZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQo
UmFuZ2UqKTsKKyAgICBzdGF0aWMgRWxlbWVudCogZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFu
ZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKICAgICBib29sIGRpZEFwcGx5KCkgY29u
c3QgeyByZXR1cm4gbV9kaWRBcHBseTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAwZDI4Y2NkZGEwNDFkYTVmNjAyYWZlZjQwZjE4
MmYwM2M3NDFhYWRmLi4xZmZkYThjYTI2Zjc2YjdhOTQ5OGQ1MjJlOWVlNGJiODYxODU5Y2ZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjA1LDEyICsy
MDUsNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKHBvcywgYWZmaW5pdHksIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSksIGRl
ZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAotdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFJhbmdlKiByYW5nZSkKLXsKLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IHJhbmdlID8gVmlzaWJsZVNlbGVjdGlvbihyYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7Ci0g
ICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci19Ci0KIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1v
dmVUbyhjb25zdCBQb3NpdGlvbiAmYmFzZSwgY29uc3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmlu
aXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGNvbnN0
IGJvb2wgc2VsZWN0aW9uSGFzRGlyZWN0aW9uID0gdHJ1ZTsKQEAgLTIwMzQsMTEgKzIwMjgsMTMg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICB9CiB9CiAKLWJvb2wgRnJh
bWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZm
aW5pdHksIFNob3VsZENsb3NlVHlwaW5nIGNsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCB1c2Vy
VHJpZ2dlcmVkKQorYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENs
b3NlVHlwaW5nIGNsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoJnJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkgPT0gJnJhbmdlLT5lbmRDb250YWluZXIoKS5k
b2N1bWVudCgpKTsKKworICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KSAhPSAmcmFuZ2UtPmVuZC5jb250YWluZXItPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwgYWZmaW5p
dHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggMjExY2E4
YmIzNmQ4MDI2ZDRiMmEwYjBlZTFiNjNhY2ZiOTY3YmFkOC4uZWRkNGJhYTgyODdkODExYmYzZDgx
NDVlOWM5ZmIyZWI2YWMzMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
ICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0xNDQsNyArMTQzLDYgQEAgcHVibGljOgogCiAgICAg
V0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVt
ZW50KCkgY29uc3Q7CiAgICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvKGNvbnN0
IFJhbmdlKik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG8oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9u
U2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIHZvaWQgbW92ZVRv
KGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmln
Z2VyZWQpOwpAQCAtMTU1LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PFNldFNl
bGVjdGlvbk9wdGlvbj4gPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIEN1cnNvckFsaWduT25T
Y3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eSA9IFRl
eHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogCiAgICAgZW51bSBjbGFzcyBT
aG91bGRDbG9zZVR5cGluZyA6IGJvb2wgeyBObywgWWVzIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5LCBTaG91bGRDbG9zZVR5cGlu
ZywgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIHNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRUFm
ZmluaXR5LCBTaG91bGRDbG9zZVR5cGluZywgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dl
cmVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEFsbCgpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKaW5kZXggZjgyZjM5NWNhNTJiZDc2MDJlZmVjYjc2ZmUzZDBhYjM5YTAzMjYwYi4uNjllN2Uz
MGU2NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTIwNyw3ICsyMDcs
NyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVudC0+dGV4dCgpKTsKKyAgICAgICAgbV9m
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsK
ICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCA5MjBkNmJk
YzMyNzIzZTJkODI5YTRhOTU4MDQwMDZmZDI5Zjc2ZTFiLi5hODA3ZjU2M2U2ZWQyMGVkZTA3YTcw
ZDQ0Y2MxYWU1YzI3MjA0MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCkBAIC0xODMzLDExICsxODMzLDExIEBAIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbk9mTmV4
dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUCiAgICAg
fQogfQogCi1SZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNlbGVj
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gZW5jbG9zaW5n
VGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICAvLyBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbmVmZmljaWVudC4gIFdlIGNvdWxkIGVhc2lseSBv
YnRhaW4gdGhlIGFuc3dlciB3aXRoIHRoZSBib3VuZGFyaWVzIGNvbXB1dGVkIGJlbG93LgogICAg
IGlmICghd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KHZwLCBncmFudWxhcml0eSwgZGlyZWN0
aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldkJvdW5kYXJ5OwogICAgIFZpc2libGVQb3Np
dGlvbiBuZXh0Qm91bmRhcnk7CkBAIC0xODg5LDE2ICsxODg5LDE2IEBAIFJlZlB0cjxSYW5nZT4g
ZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAs
IFRleHRHcmFuCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGlmIChwcmV2Qm91bmRhcnkuaXNOdWxsKCkgfHwg
bmV4dEJvdW5kYXJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICh2cCA8IHByZXZCb3VuZGFyeSB8fCB2cCA+
IG5leHRCb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShwcmV2Qm91bmRhcnkuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLCBwcmV2Qm91bmRhcnks
IG5leHRCb3VuZGFyeSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShwcmV2Qm91bmRhcnks
IG5leHRCb3VuZGFyeSk7CiB9CiAKIHN0ZDo6cHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBvc2l0
aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikK
QEAgLTE5NDQsMTkgKzE5NDQsMTQgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB0d29C
ZWZvcmUgPSBjaGFyYWN0ZXJzWzJdOwogfQogCi1SZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0K
LSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGJlIGF0IHRoZSBzdGFydCBv
ZiBhIHdvcmQsIHRyeSBmb3J3YXJkLgotICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHks
IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgfQotCi0gICAgaWYgKHJhbmdlKQor
ICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0
aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9u
OjpCYWNrd2FyZCkpCisgICAgICAgIHJldHVybiByYW5nZTsKKyAgICBpZiAoYXV0byByYW5nZSA9
IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5
OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpCiAgICAgICAg
IHJldHVybiByYW5nZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24gPSBw
b3NpdGlvbjsKQEAgLTE5NjUsMTMgKzE5NjAsNyBAQCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIH0gd2hpbGUg
KGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHko
Y3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOwogICAgIGlmIChjdXJyZW50UG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2Vs
ZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLQotICAgIGlmIChjdXJyZW50UG9zaXRpb24uaXNO
b3ROdWxsKCkpIHsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSwgY3VycmVudFBvc2l0aW9u
LCBwb3NpdGlvbik7Ci0gICAgICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJhbmdlOworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoY3VycmVudFBvc2l0aW9uLCBwb3Np
dGlvbik7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTE5ODIsMTEgKzE5NzEsMTEg
QEAgVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICByZXN1bHQgPSBwb3NpdGlvbjsKICAg
ICB9IGVsc2UgaWYgKHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkp
IHsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGxpZXMgd2l0aGluIGEgd29yZC4KLSAgICAgICAg
UmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpOwotCi0gICAgICAgIHJlc3VsdCA9IHdvcmRSYW5nZS0+c3RhcnRQb3Np
dGlvbigpOwotICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBvc2l0aW9uLCBy
ZXN1bHQpID4gMSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24o
KTsKKyAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnQpOworICAgICAgICAgICAgaWYgKGRp
c3RhbmNlQmV0d2VlblBvc2l0aW9ucyhwb3NpdGlvbiwgcmVzdWx0KSA+IDEpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+ZW5k
KTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9z
aXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkJhY2t3YXJkKSkgewogICAgICAgICAvLyBUaGUgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBv
ZiBhIHdvcmQuCiAgICAgICAgIHJlc3VsdCA9IHBvc2l0aW9uOwpAQCAtMjAwMiw3ICsxOTkxLDcg
QEAgVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0
cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVy
c1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNoYXJhY3RlcnNU
b0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBQb3NpdGlvbiBz
dGFydCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gcG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKQEAgLTIwMTgsMTAgKzIwMDcsMTAgQEAgUmVmUHRyPFJh
bmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShj
b25zdCBWaXNpYmxlUG8KICAgICBpZiAoZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6
Rm9yd2FyZCAmJiAhYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZW5kLCBUZXh0R3JhbnVsYXJpdHk6
OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkKICAgICAgICAg
ZW5kID0gZW5kT2ZXb3JkKGVuZCkuZGVlcEVxdWl2YWxlbnQoKTsKIAotICAgIHJldHVybiBtYWtl
UmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5k
KTsKIH0gICAgCiAKLVJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlD
aGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUV4cGFuZGVkQXJv
dW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwg
aW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKQogewogICAgIFBvc2l0aW9uIHN0YXJ0ID0g
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpOwpAQCAtMjAyOSw4ICsyMDE4LDcgQEAgUmVmUHRyPFJhbmdlPiByYW5n
ZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBwb3MKICAgICAgICAgc3RhcnQgPSBzdGFydC5wcmV2aW91cyhDaGFyYWN0ZXIpOwogICAgICAg
ICBlbmQgPSBlbmQubmV4dChDaGFyYWN0ZXIpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbWFr
ZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVu
ZCk7CiB9CiAKIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldvcmRCb3VuZGFyeT4g
d29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3Jvc3NpbmdMaW5lKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24pCkBAIC0yMDQxLDkgKzIwMjksOSBAQCBzdGQ6OnBhaXI8VmlzaWJs
ZVBvc2l0aW9uLCBXaXRoaW5Xb3JkQm91bmRhcnk+IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0
aG91dENybwogICAgIGlmICh3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndh
cmQpKSB7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRQb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgICAg
ICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9z
aXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQpKSB7Ci0gICAgICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gd29yZFJhbmdl
LT5zdGFydFBvc2l0aW9uKCk7CisgICAgICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnQpOwogICAgICAgICAgICAgaWYg
KGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhwb3NpdGlvbiwgYWRqdXN0ZWRQb3NpdGlvbikgPiAx
KQotICAgICAgICAgICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSB3b3JkUmFuZ2UtPmVuZFBvc2l0
aW9uKCk7CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPmVuZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHsgYWRqdXN0ZWRQb3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5OjpZZXMgfTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAppbmRleCAxYTc4MzJlYjM3YjgxOTk1Yjkx
YjEwMzBlOTRiMTU0YTQzZDYzMGRiLi40MmU2Mzc4OTVlZWM3OWJkOGMyMmI2ZGM3ODk1NDdhMmI4
YTlhZTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKQEAgLTEwMSwxMyAr
MTAxLDEzIEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJs
ZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGF0
Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxh
cml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgd2l0aGluVGV4
dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7Ci1XRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxl
UG9zaXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CitXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFy
aXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGly
ZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBv
c2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
LVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIFdFQkNPUkVf
RVhQT1JUIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIGNoYXJh
Y3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBVQ2hhcjMyJiBvbmVB
ZnRlciwgVUNoYXIzMiYgb25lQmVmb3JlLCBVQ2hhcjMyJiB0d29CZWZvcmUpOwotV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3Rl
cnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5k
KTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVy
c0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51
bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24pOworV0VCQ09SRV9F
WFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5
Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJz
VG9FeHBhbmQpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRXhw
YW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgU2VsZWN0aW9uRGlyZWN0
aW9uKTsKIGVudW0gY2xhc3MgV2l0aGluV29yZEJvdW5kYXJ5IDogYm9vbCB7IE5vLCBZZXMgfTsK
IFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldvcmRCb3Vu
ZGFyeT4gd29yZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3Jvc3NpbmdMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KaW5kZXggNmIwOGZkMmRmMTk4YWFlZmNiYzk5MjIyMzU5OTViNTYyZTZkNzJk
Zi4uMTRmYTY4ODJjNjczNmM3M2ZkNjM0NDA4ZmVjZDc4YTQyZGJhYTZkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtMTI4LDcgKzEyOCw3
IEBAIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3Vu
ZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb247Ci0gICAgUmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2U7
CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNvbnRleHRSYW5nZTsKIAogICAgIGlmICghaXM8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBwb3NpdGlvbiA9
IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9jYWxQb2ludCgpLCBu
dWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxv
b2t1cC5tbQppbmRleCAyZGQwNWUxNjViMGI2ZGQ0OGQ2YzZmNjAzNzJlN2Q1Y2VmOGNhN2QyLi4z
YzEyMzE5ZmFiMDg2NzU5NTllNTNjZDhlNzlhYjM0M2QxMWE3YmU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC00MSw3ICs0MSw2
IEBACiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5o
IgogI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlck9i
amVjdC5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJWaXNpYmxlUG9zaXRp
b24uaCIKQEAgLTI4MywxMSArMjgyLDExIEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFu
Z2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlCiAgICAg
YXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxl
UmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpOwogICAgIE5TUmFuZ2UgcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFy
YWN0ZXJDb3VudCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0
cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsKKyAgICBhdXRvIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVu
ZCk7CisgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdl
KTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0
YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3Nd
KS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAotICAgIHJldHVybiB7IHsgcmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKKyAg
ICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhp
Z2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
IApAQCAtMzQxLDExICszNDAsNyBAQCBPcHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBO
U0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZQogICAgICAgICBw
b3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKIAogICAg
ICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9m
IHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCi0gICAgICAgIGF1dG8gZXhwYW5kZWRS
YW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwg
MjUwKTsKLSAgICAgICAgaWYgKCFleHBhbmRlZFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSB7ICpleHBhbmRlZFJh
bmdlIH07CisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQ
b3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKIAogICAgICAgICBzZWxlY3Rpb25S
YW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgICAgICBoaXRJbmRleCA9IGNo
YXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwg
cG9zaXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
CmluZGV4IGVlZmU4ZmQ5NTFjY2ZhNGViNjYxODI3ZDU4ZTY5ZWE1OWI1ODZiN2IuLjllZjIwYzYz
NmE1MGI5YzJjM2MzNjkzMDc4YWE3ZDVjYWM1MzE5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtOTQsMTAgKzk0LDEyIEBAIHZvaWQgRWRpdG9y
OjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVtZW50
LCBWZWN0b3I8U3RyCiAgICAgb3V0VHlwZXMuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpj
b2NvYVR5cGUoKSk7CiAgICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURhdGEgeyBl
bGVtZW50LmRvY3VtZW50KCkub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKSwgeyB9IH0u
Y3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogCi0gICAgaWYgKGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS5nZXQoKSkpIHsK
LSAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVz
ZW50YXRpb24oKSkgewotICAgICAgICAgICAgb3V0VHlwZXMuYXBwZW5kKFdlYkFyY2hpdmVQYm9h
cmRUeXBlKTsKLSAgICAgICAgICAgIG91dERhdGEuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KHdlYkFyY2hpdmVEYXRhLmdldCgpKSk7CisgICAgaWYgKGVsZW1lbnRSYW5nZSkgeworICAgICAg
ICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKCplbGVtZW50UmFu
Z2UpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBkYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJl
c2VudGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJjaGl2
ZVBib2FyZFR5cGUpOworICAgICAgICAgICAgICAgIG91dERhdGEuYXBwZW5kKFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGRhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJl
YWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVh
ZGVyQ29jb2EubW0KaW5kZXggMjg3MzNlZWVhMzc2Y2Y4ZmUwODE3NTQ0NzBlYjMzMTg1NGFkZTQz
MC4uMzRhYTdhYmYzM2Y3NDRkZTA3ZDhlOTllNmQ1ZDNmNWVjNDIwZTJkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0K
QEAgLTY2OSw3ICs2NjksNyBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIGlmICghYWxsb3dQbGFpblRleHQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3Jl
YXRlTGl2ZVJhbmdlKGNvbnRleHQpLCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmlj
YWxNYXBwaW5nXSkpOworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29u
dGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pKTsKIAog
ICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNw
cAppbmRleCBkNjA5ZjIyYzg0ZjBjZjc5ODAwYWE5M2Q0YjIwYmY4MmQ0ODAyNTIzLi43Y2I2NTk0
ZmFkNzhhZjg5MDMyZmRkNWRlODZmOGRhNDU1ZmUxZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcApAQCAtNjUsNyArNjUsNyBA
QCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQogICAgIGlmICghYWxsb3dQbGFpblRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKGNvbnRl
eHQpLCB0ZXh0KSk7CisgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250
ZXh0LCB0ZXh0KSk7CiAKICAgICBtYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0ID0gdHJ1ZTsKICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3Bl
L0VkaXRvckxpYldQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JM
aWJXUEUuY3BwCmluZGV4IDBiN2MyNjI1M2EwMDgyZTNjNTRhZWVmZWEwNjE2MzI0ZTYyNDhjN2Eu
LjlkZDQxZDYzNjY1MTJmZDM4NTkzN2E3NjA4YmQzZmM5YjViOTBmNjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcApAQCAtNTUsNyArNTUsNyBA
QCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmREYXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0
L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7
Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkuZ2V0KCksIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0
Zi04IikpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgcGFz
dGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA3ZmEzNTZiOWYwYWE5NmIwZWE5NTQ2
YWRlY2ZjZTViZGM4YTFiMTNjLi44NzYxMjBiYjA5YjEyZTA5ZTRkZWNhNThlNTU0ZDMwMjcwMWVm
NDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9v
a3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlM
b29rdXBMZWdhY3kubW0KQEAgLTEzMSw3ICsxMzEsNyBAQCBPcHRpb25hbDxzdGQ6OnR1cGxlPFNp
bXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRU
ZQogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgYXV0byByYW5nZVRvUG9zaXRpb24gPSBtYWtlU2ltcGxlUmFuZ2UoZnVsbENo
YXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKTsKKyAgICBhdXRvIHJhbmdl
VG9Qb3NpdGlvbiA9IG1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBw
b3NpdGlvbik7CiAgICAgaWYgKCFyYW5nZVRvUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBiZmYxMzIwZDM2OWY4
MmVkZGUyZTExNWUwN2E4NTRkMWQzMzFiYjE3Li5lYzJkOWI0NzhhZmMyYjk2MjU0MzcyNWU2YjE4
YThiOTVjMzhmOTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC0zMzEsOSArMzMx
LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5NU09MaXN0IHsgZmFsc2UgfTsKIH07CiAKLWlu
bGluZSBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3IoY29u
c3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBWZWN0b3I8Tm9kZSo+KiBu
b2RlcywgUmVzb2x2ZVVSTHMgdXJsc1RvUmVzb2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNl
cmlhbGl6ZUNvbXBvc2VkVHJlZSwKLSAgICBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRl
LCBTdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSBzdGFuZGFyZEZvbnRGYW1pbHlT
ZXJpYWxpemF0aW9uTW9kZSwgTVNPTGlzdE1vZGUgbXNvTGlzdE1vZGUsIGJvb2wgbmVlZHNQb3Np
dGlvblN0eWxlQ29udmVyc2lvbiwgTm9kZSogaGlnaGVzdE5vZGVUb0JlU2VyaWFsaXplZCkKLSAg
ICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCB1cmxzVG9SZXNvbHZlKQoraW5saW5lIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcihjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBSZXNv
bHZlVVJMcyByZXNvbHZlVVJMcywgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNlcmlhbGl6ZUNvbXBv
c2VkVHJlZSwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgU3RhbmRhcmRGb250RmFt
aWx5U2VyaWFsaXphdGlvbk1vZGUgc3RhbmRhcmRGb250RmFtaWx5U2VyaWFsaXphdGlvbk1vZGUs
IE1TT0xpc3RNb2RlIG1zb0xpc3RNb2RlLCBib29sIG5lZWRzUG9zaXRpb25TdHlsZUNvbnZlcnNp
b24sIE5vZGUqIGhpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQpCisgICAgOiBNYXJrdXBBY2N1bXVs
YXRvcihub2RlcywgcmVzb2x2ZVVSTHMpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9l
bmQoZW5kKQogICAgICwgbV9hbm5vdGF0ZShhbm5vdGF0ZSkKQEAgLTgzNSw3ICs4MzQsNyBAQCBz
dGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mCiAgICAgcmV0dXJuIHNwZWNpYWxDb21tb25BbmNlc3RvcjsK
IH0KIAotc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUlu
dGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgVmVjdG9y
PE5vZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHVybHNUb1Jlc29sdmUsIFNlcmlhbGl6ZUNvbXBv
c2VkVHJlZSBzZXJpYWxpemVDb21wb3NlZFRyZWUsCitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgUmVzb2x2ZVVSTHMgcmVz
b2x2ZVVSTHMsIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZSBzZXJpYWxpemVDb21wb3NlZFRyZWUsCiAg
ICAgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVydEJsb2Nrc1RvSW5saW5l
cyBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBTdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9u
TW9kZSBzdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgTVNPTGlzdE1vZGUgbXNv
TGlzdE1vZGUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gaW50
ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCI8YnIgY2xhc3M9
XCIiIEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lICJcIj4iKSk7CkBAIC04NjIsNyArODYxLDcgQEAg
c3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFs
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKIAogICAgIE5vZGUqIHNwZWNpYWxDb21tb25BbmNlc3Rv
ciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cChzdGFydCwgZW5kLCAqY29tbW9uQW5jZXN0
b3IsIGFubm90YXRlKTsKIAotICAgIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9y
KHN0YXJ0LCBlbmQsIG5vZGVzLCB1cmxzVG9SZXNvbHZlLCBzZXJpYWxpemVDb21wb3NlZFRyZWUs
IGFubm90YXRlLCBzdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgbXNvTGlzdE1v
ZGUsIG5lZWRzUG9zaXRpb25TdHlsZUNvbnZlcnNpb24sIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7
CisgICAgU3R5bGVkTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3Ioc3RhcnQsIGVuZCwgbm9k
ZXMsIHJlc29sdmVVUkxzLCBzZXJpYWxpemVDb21wb3NlZFRyZWUsIGFubm90YXRlLCBzdGFuZGFy
ZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgbXNvTGlzdE1vZGUsIG5lZWRzUG9zaXRpb25T
dHlsZUNvbnZlcnNpb24sIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7CiAKICAgICBQb3NpdGlvbiBz
dGFydEFkanVzdGVkRm9ySW50ZXJjaGFuZ2VOZXdsaW5lID0gc3RhcnQ7CiAgICAgaWYgKGFubm90
YXRlID09IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6OlllcyAmJiBuZWVkSW50ZXJjaGFuZ2VOZXds
aW5lQWZ0ZXIodmlzaWJsZVN0YXJ0KSkgewpAQCAtOTM0LDkgKzkzMywxMCBAQCBzdGF0aWMgU3Ry
aW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9z
aXRpb24mIHN0YXJ0LAogICAgIHJldHVybiBhY2N1bXVsYXRvci50YWtlUmVzdWx0cygpOwogfQog
Ci1TdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoY29uc3QgUmFuZ2Um
IHJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5v
dGF0ZSwgQ29udmVydEJsb2Nrc1RvSW5saW5lcyBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSZXNv
bHZlVVJMcyB1cmxzVG9SZXNsdmUpCitTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFw
cGVhcmFuY2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBWZWN0b3I8Tm9kZSo+KiBub2Rlcywg
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ29udmVydEJsb2Nrc1RvSW5saW5lcyBj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJMcykKIHsKLSAgICBy
ZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChyYW5nZS5z
dGFydFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCksIG5vZGVzLCB1cmxzVG9SZXNsdmUs
IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8sCisgICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJh
bmdlLnN0YXJ0KSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCksCisgICAg
ICAgIG5vZGVzLCByZXNvbHZlVVJMcywgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywKICAgICAg
ICAgYW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFN0YW5kYXJkRm9udEZhbWlseVNl
cmlhbGl6YXRpb25Nb2RlOjpLZWVwLCBNU09MaXN0TW9kZTo6RG9Ob3RQcmVzZXJ2ZSk7CiB9CiAK
QEAgLTEwNDMsOSArMTA0Myw5IEBAIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJu
IGZyYWdtZW50OwogfQogCi1TdHJpbmcgc2VyaWFsaXplRnJhZ21lbnQoY29uc3QgTm9kZSYgbm9k
ZSwgU2VyaWFsaXplZE5vZGVzIHJvb3QsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBSZXNvbHZlVVJM
cyB1cmxzVG9SZXNvbHZlLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBT
ZXJpYWxpemF0aW9uU3ludGF4IHNlcmlhbGl6YXRpb25TeW50YXgpCitTdHJpbmcgc2VyaWFsaXpl
RnJhZ21lbnQoY29uc3QgTm9kZSYgbm9kZSwgU2VyaWFsaXplZE5vZGVzIHJvb3QsIFZlY3RvcjxO
b2RlKj4qIG5vZGVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJMcywgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCwgU2VyaWFsaXphdGlvblN5bnRheCBzZXJpYWxpemF0aW9uU3lu
dGF4KQogewotICAgIE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCB1cmxzVG9S
ZXNvbHZlLCBzZXJpYWxpemF0aW9uU3ludGF4KTsKKyAgICBNYXJrdXBBY2N1bXVsYXRvciBhY2N1
bXVsYXRvcihub2RlcywgcmVzb2x2ZVVSTHMsIHNlcmlhbGl6YXRpb25TeW50YXgpOwogICAgIHJl
dHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5vZGUmPihub2RlKSwg
cm9vdCwgdGFnTmFtZXNUb1NraXApOwogfQogCkBAIC0xMTEyLDIwICsxMTEyLDE2IEBAIGJvb2wg
aXNQbGFpblRleHRNYXJrdXAoTm9kZSogbm9kZSkKICAgICByZXR1cm4gaXNUYWJTcGFuVGV4dE5v
ZGUoZmlyc3RDaGlsZC0+Zmlyc3RDaGlsZCgpKSAmJiBzZWNvbmRDaGlsZC0+aXNUZXh0Tm9kZSgp
OwogfQogCi1zdGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVzTmV3bGluZShjb25zdCBSYW5nZSYg
Y29udGV4dCkKK3N0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKGNvbnN0IFNpbXBs
ZVJhbmdlJiBjb250ZXh0KQogewotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbihjb250ZXh0
LnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgTm9kZSogY29udGFpbmVyID0gcG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7Ci0gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRh
aW5lci0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNv
bnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKKyAgICBhdXRv
IGNvbnRhaW5lciA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Y29udGV4dC5zdGFydCkpLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpOworICAgIHJl
dHVybiBjb250YWluZXIgJiYgY29udGFpbmVyLT5yZW5kZXJlcigpICYmIGNvbnRhaW5lci0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIAotUmVmPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKK1JlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNv
bnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gY29udGV4dC5vd25lckRvY3VtZW50KCk7Ci0gICAgUmVmPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
OworICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5jb250YWluZXItPmRvY3VtZW50
KCk7CisgICAgYXV0byBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKICAgICAKICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmcmFnbWVu
dDsKQEAgLTExNjEsMTQgKzExNTcsMTQgQEAgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICB9
CiAKICAgICAvLyBCcmVhayBzdHJpbmcgaW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5lIGJyZWFr
cyB0dXJuIGludG8gZW1wdHkgcGFyYWdyYXBocy4KLSAgICBOb2RlKiBibG9ja05vZGUgPSBlbmNs
b3NpbmdCbG9jayhjb250ZXh0LmZpcnN0Tm9kZSgpKTsKKyAgICBOb2RlKiBibG9ja05vZGUgPSBl
bmNsb3NpbmdCbG9jayhjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCktPmZpcnN0Tm9kZSgpKTsKICAg
ICBFbGVtZW50KiBibG9jayA9IGRvd25jYXN0PEVsZW1lbnQ+KGJsb2NrTm9kZSk7CiAgICAgYm9v
bCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Jsb2NrID0gYmxvY2tOb2RlCiAgICAgICAgICYmIGJsb2Nr
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShib2R5
VGFnKQogICAgICAgICAmJiAhYmxvY2stPmhhc1RhZ05hbWUoaHRtbFRhZykKLSAgICAgICAgJiYg
YmxvY2sgIT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29udGV4dC5zdGFydFBvc2l0aW9uKCkp
OwotICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNvbnRl
eHQuc3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgJiYgYmxvY2sgIT0gZWRpdGFibGVSb290Rm9y
UG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnRleHQuc3RhcnQpKTsKKyAg
ICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCkpOwogCiAgICAgVmVjdG9yPFN0cmluZz4g
bGlzdCA9IHN0cmluZy5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCdcbicpOwogICAgIHNpemVf
dCBudW1MaW5lcyA9IGxpc3Quc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKaW5kZXggODY1
NjdmNDU3ODBhYWJhNTFiM2VkODJhMDlhNTFlMjIwMjZhMDI2Yi4uZmZhMzI3ZTllZWNlNTVkZTU3
ZjI0NGNlOGI1YWEyZmVlZDhiNjRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCkBAIC00NCwx
MSArNDQsMTIgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBQYWdlOwotc3RydWN0IFByZXNlbnRhdGlvblNpemU7CiBjbGFzcyBRdWFsaWZpZWRO
YW1lOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCitzdHJ1Y3QgUHJl
c2VudGF0aW9uU2l6ZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogdm9pZCByZXBsYWNlU3VicmVz
b3VyY2VVUkxzKFJlZjxEb2N1bWVudEZyYWdtZW50PiYmLCBIYXNoTWFwPEF0b21TdHJpbmcsIEF0
b21TdHJpbmc+JiYpOwogdm9pZCByZW1vdmVTdWJyZXNvdXJjZVVSTEF0dHJpYnV0ZXMoUmVmPERv
Y3VtZW50RnJhZ21lbnQ+JiYsIFdURjo6RnVuY3Rpb248Ym9vbChjb25zdCBVUkwmKT4gc2hvdWxk
UmVtb3ZlVVJMKTsKIApAQCAtNTcsNyArNTgsNyBAQCBlbnVtIGNsYXNzIE1TT0xpc3RRdWlya3Mg
OiBib29sIHsgQ2hlY2tJZk5lZWRlZCwgRGlzYWJsZWQgfTsKIFN0cmluZyBzYW5pdGl6ZU1hcmt1
cChjb25zdCBTdHJpbmcmLCBNU09MaXN0UXVpcmtzID0gTVNPTGlzdFF1aXJrczo6RGlzYWJsZWQs
IE9wdGlvbmFsPFdURjo6RnVuY3Rpb248dm9pZChEb2N1bWVudEZyYWdtZW50Jik+PiBmcmFnbWVu
dFNhbml0aXplciA9IFdURjo6bnVsbG9wdCk7CiBTdHJpbmcgc2FuaXRpemVkTWFya3VwRm9yRnJh
Z21lbnRJbkRvY3VtZW50KFJlZjxEb2N1bWVudEZyYWdtZW50PiYmLCBEb2N1bWVudCYsIE1TT0xp
c3RRdWlya3MsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxNYXJrdXApOwogCi1XRUJDT1JFX0VYUE9S
VCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29u
dGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKK1dFQkNPUkVfRVhQT1JUIFJlZjxEb2N1bWVudEZy
YWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIHRleHQpOwogV0VCQ09SRV9FWFBPUlQgUmVmPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgbWFy
a3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kgPSBBbGxvd1Nj
cmlwdGluZ0NvbnRlbnQpOwogRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjcmVh
dGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIG1hcmt1
cCwgUGFyc2VyQ29udGVudFBvbGljeSk7CiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBz
b3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUpOwpAQCAtNzIsNyArNzMs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoQ29udGFp
bmVyTm9kZSYsIFJlZjxEb2N1bWVudEZyYWdtZQogZW51bSBjbGFzcyBSZXNvbHZlVVJMcyA6IHVp
bnQ4X3QgeyBObywgWWVzLCBZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSB9Owog
ZW51bSBjbGFzcyBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzIDogdWludDhfdCB7IE5vLCBZZXMgfTsK
IGVudW0gY2xhc3MgU2VyaWFsaXplQ29tcG9zZWRUcmVlIDogdWludDhfdCB7IE5vLCBZZXMgfTsK
LVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5j
ZShjb25zdCBSYW5nZSYsIFZlY3RvcjxOb2RlKj4qID0gbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSA9IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzID0gQ29udmVydEJsb2Nrc1RvSW5saW5lczo6Tm8sIFJlc29sdmVVUkxzID0gUmVzb2x2ZVVS
THM6Ok5vKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZShjb25zdCBTaW1wbGVSYW5nZSYsIFZlY3RvcjxOb2RlKj4qID0gbnVsbHB0ciwg
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252
ZXJ0QmxvY2tzVG9JbmxpbmVzID0gQ29udmVydEJsb2Nrc1RvSW5saW5lczo6Tm8sIFJlc29sdmVV
UkxzID0gUmVzb2x2ZVVSTHM6Ok5vKTsKIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVzb2x2ZVVSTHMgPSBSZXNvbHZl
VVJMczo6Tm8sIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZSA9IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8sIFZlY3RvcjxOb2RlKj4qID0gbnVsbHB0cik7CiAKIGVudW0gY2xhc3MgU2VyaWFsaXplZE5v
ZGVzIDogdWludDhfdCB7IFN1YnRyZWVJbmNsdWRpbmdOb2RlLCBTdWJ0cmVlc09mQ2hpbGRyZW4g
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAKaW5kZXggMDFhYjkxN2QwZGM5NzhjMzFmZWZmN2E5YTA5MGNkMDJiZjFkZDhk
Ni4uYTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2YyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAK
QEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5
Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZEF0dGFjaG1l
bnREYXRhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQxNyw3ICs0MTYsNyBAQCBSZWZQ
dHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKE5vZGUmIG5vZGUs
IFdURjo6RnVuY3Rpb248Ym9vbAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBjcmVh
dGUoKTsKIAotICAgIC8vIElmIHRoZSBwYWdlIHdhcyBsb2FkZWQgd2l0aCBqYXZhc2NyaXB0IGVu
YWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gYXJjaGl2ZSA8bm9zY3JpcHQ+IHRhZ3MKKyAgICAvLyBJ
ZiB0aGUgcGFnZSB3YXMgbG9hZGVkIHdpdGggSmF2YVNjcmlwdCBlbmFibGVkLCB3ZSBkb24ndCB3
YW50IHRvIGFyY2hpdmUgPG5vc2NyaXB0PiB0YWdzCiAgICAgLy8gSW4gcHJhY3RpY2Ugd2UgZG9u
J3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHNjcmlwdGluZyB3YXMgZW5hYmxlZCB3aGVuIHRoZSBw
YWdlIHdhcyBvcmlnaW5hbGx5IGxvYWRlZAogICAgIC8vIGJ1dCB3ZSBjYW4gYXBwcm94aW1hdGUg
dGhhdCBieSBjaGVja2luZyBpZiBzY3JpcHRpbmcgaXMgZW5hYmxlZCByaWdodCBub3cuCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxRdWFsaWZpZWROYW1lPj4gdGFnTmFtZXNUb0ZpbHRlcjsK
QEAgLTQ1NCwxOSArNDUzLDE2IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJB
cmNoaXZlOjpjcmVhdGUoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBjcmVhdGUobWFpblJlc291
cmNlLnJlbGVhc2VOb25OdWxsKCksIGRvY3VtZW50TG9hZGVyLT5zdWJyZXNvdXJjZXMoKSwgV1RG
TW92ZShzdWJmcmFtZUFyY2hpdmVzKSk7CiB9CiAKLVJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBM
ZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UqIHJhbmdlKQorUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAot
ICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsK
KyAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsK
ICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgImZv
ciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/CiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlz
dDsKLSAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKGRvY3VtZW50
KSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKCpyYW5nZSwgJm5vZGVMaXN0
LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOworICAgIFN0cmluZyBtYXJrdXBTdHJpbmcg
PSBkb2N1bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3Vh
bEFwcGVhcmFuY2UocmFuZ2UsICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVz
KTsKICAgICByZXR1cm4gY3JlYXRlKG1hcmt1cFN0cmluZywgKmZyYW1lLCBub2RlTGlzdCwgbnVs
bHB0cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2Nm
L0xlZ2FjeVdlYkFyY2hpdmUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xl
Z2FjeVdlYkFyY2hpdmUuaAppbmRleCBiNTFjZjYxNmJmMDgyZTI5NDA5YjQ0MjFhNDNjYjcxMTE0
ODBhOTg5Li42N2FmYTgzZGM3YTliZjIyZjhlODk2NTFlZTllYzQzOTMyZjA2NWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5o
CkBAIC0zNSw3ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBj
bGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CisKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3Mg
TGVnYWN5V2ViQXJjaGl2ZSBmaW5hbCA6IHB1YmxpYyBBcmNoaXZlIHsKIHB1YmxpYzoKQEAgLTQ2
LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gY3JlYXRlKE5vZGUmLCBXVEY6OkZ1bmN0aW9uPGJvb2woRnJhbWUmKT4m
JiBmcmFtZUZpbHRlciA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxM
ZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoRnJhbWUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZUZyb21TZWxlY3Rpb24oRnJhbWUqKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0
ZShSYW5nZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJj
aGl2ZT4gY3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiByYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA2Zjk4YWFlOGQ3NTZkMjJkODcwOGJkN2E2
M2NlYWRiN2VhNWMxZTdkLi41NjZkNWQ0NjkzMDllYjhjNjMzNWUwMmEyZWMxNzBiMWM2MjExYTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNzEsNiArNzEsNyBA
QAogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNp
bmNsdWRlICJQcm9taXNlZEF0dGFjaG1lbnRJbmZvLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJBdHRhY2htZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtMjM5LDcgKzI0MCw3IEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSkKIHsKICAgICBpZiAoIW1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzLmlzRW1wdHko
KSAmJiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UgJiYgdHJ5VG9VcGRhdGVEcm9wcGVk
SW1hZ2VQbGFjZWhvbGRlcnMoZHJhZ0RhdGEpKSB7CiAgICAgICAgIG1fZHJvcHBlZEltYWdlUGxh
Y2Vob2xkZXJzLmNsZWFyKCk7Ci0gICAgICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5n
ZSA9IG51bGxwdHI7CisgICAgICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IFdU
Rjo6bnVsbG9wdDsKICAgICAgICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBudWxscHRyOwogICAg
ICAgICBjbGVhckRyYWdDYXJldCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMyw3ICs2
MzQsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdE
YXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGll
bnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rp
b246OkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpOworICAgICAgICBhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpOwogICAgICAg
ICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBE
cm9wKGZyYWdtZW50LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC04NTYsOSArODU3LDEwIEBAIHN0YXRpYyBJbWFn
ZSogZ2V0SW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIAogc3RhdGljIHZvaWQgc2VsZWN0RWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50
LmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShlbGVtZW50
KTsKLSAgICBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgaWYgKGF1dG8g
ZnJhbWUgPSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKSkgeworICAgICAgICBpZiAoYXV0byBy
YW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoZWxlbWVudCkpCisgICAgICAgICAgICBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKCpyYW5nZSk7CisgICAgfQogfQogCiBzdGF0aWMg
SW50UG9pbnQgZHJhZ0xvY0ZvckRIVE1MRHJhZyhjb25zdCBJbnRQb2ludCYgbW91c2VEcmFnZ2Vk
UG9pbnQsIGNvbnN0IEludFBvaW50JiBkcmFnT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZHJhZ0lt
YWdlT2Zmc2V0LCBib29sIGlzTGlua0ltYWdlKQpAQCAtMTM3Myw3ICsxMzc1LDcgQEAgdm9pZCBE
cmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKERyYWdJbWFnZSBpbWFnZSwgY29uc3QgSW50UG9p
bnQmIGRyYWdMb2MsIGNvbnMKIAogdm9pZCBEcmFnQ29udHJvbGxlcjo6cmVtb3ZlQWxsRHJvcHBl
ZEltYWdlUGxhY2Vob2xkZXJzKCkKIHsKLSAgICBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFu
Z2UgPSBudWxscHRyOworICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IFdURjo6
bnVsbG9wdDsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogc3RkOjpleGNoYW5nZShtX2Ry
b3BwZWRJbWFnZVBsYWNlaG9sZGVycywgeyB9KSkgewogICAgICAgICBpZiAocGxhY2Vob2xkZXIt
PmlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICBwbGFjZWhvbGRlci0+cmVtb3ZlKCk7CkBAIC0x
NDU1LDEzICsxNDU3LDEzIEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVjdG9yPEludFNpemU+CiAgICAgYXV0byBjb21t
YW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqZG9jdW1lbnQsIFdURk1vdmUo
ZnJhZ21lbnQpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZywgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFjZSB9LCBFZGl0QWN0aW9uOjpJbnNlcnRG
cm9tRHJvcCk7CiAgICAgY29tbWFuZC0+YXBwbHkoKTsKIAotICAgIGF1dG8gaW5zZXJ0ZWRDb250
ZW50UmFuZ2UgPSBjb21tYW5kLT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpOworICAgIGF1dG8gaW5z
ZXJ0ZWRDb250ZW50UmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29tbWFuZC0+aW5zZXJ0ZWRDb250
ZW50UmFuZ2UoKSk7CiAgICAgaWYgKCFpbnNlcnRlZENvbnRlbnRSYW5nZSkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y29udGFpbmVyID0gbWFrZVJlZlB0cihpbnNlcnRlZENvbnRlbnRSYW5nZS0+Y29tbW9uQW5jZXN0
b3JDb250YWluZXIoKSk7CisgICAgYXV0byBjb250YWluZXIgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcigqaW5zZXJ0ZWRDb250ZW50UmFuZ2UpOwogICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4o
Y29udGFpbmVyKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTQ2OSw3ICsxNDcxLDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KIAogICAg
IFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+IHBsYWNlaG9sZGVyczsKICAgICBmb3IgKGF1
dG8mIHBsYWNlaG9sZGVyIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKmNvbnRhaW5lcikpKSB7Ci0gICAgICAgIGF1dG8gaW50ZXJz
ZWN0c05vZGUgPSBpbnNlcnRlZENvbnRlbnRSYW5nZS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xk
ZXIpOworICAgICAgICBhdXRvIGludGVyc2VjdHNOb2RlID0gY3JlYXRlTGl2ZVJhbmdlKCppbnNl
cnRlZENvbnRlbnRSYW5nZSktPmludGVyc2VjdHNOb2RlKHBsYWNlaG9sZGVyKTsKICAgICAgICAg
aWYgKCFpbnRlcnNlY3RzTm9kZS5oYXNFeGNlcHRpb24oKSAmJiBpbnRlcnNlY3RzTm9kZS5yZXR1
cm5WYWx1ZSgpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFwcGVuZChwbGFjZWhvbGRlcik7
CiAgICAgfQpAQCAtMTQ5Myw3ICsxNDk1LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0
RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KICAg
ICBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UgPSBXVEZNb3ZlKGluc2VydGVkQ29udGVu
dFJhbmdlKTsKIAogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5jbGVhcigpOwotICAgIGNhcmV0Q29u
dHJvbGxlci5zZXRDYXJldFBvc2l0aW9uKG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZS0+
c3RhcnRQb3NpdGlvbigpKTsKKyAgICBjYXJldENvbnRyb2xsZXIuc2V0Q2FyZXRQb3NpdGlvbihj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
LT5zdGFydCkpOwogfQogCiB2b2lkIERyYWdDb250cm9sbGVyOjpmaW5hbGl6ZURyb3BwZWRJbWFn
ZVBsYWNlaG9sZGVyKEhUTUxJbWFnZUVsZW1lbnQmIHBsYWNlaG9sZGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5oCmluZGV4IDkyMjRhYjIwNmNkZmViYjUzZjExYzc4YTNlYWUyMDgx
M2NmZGQyNmMuLmUzMDBkMzI4ZDU3OWVkYjE3MWYwM2UyMDA4ZjE0ZDhiN2ViZjY0NDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBwbGFjZURyYWdDYXJldChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgY29uc3Qg
VmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4mIGRyb3BwZWRJbWFnZVBsYWNlaG9sZGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzOyB9Ci0gICAgY29uc3Qg
UmVmUHRyPFJhbmdlPiYgZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsgfQorICAgIGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYgZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsgfQogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaW5hbGl6ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVyKEhUTUxJbWFnZUVsZW1lbnQm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVy
c0F0Q2FyZXQoY29uc3QgVmVjdG9yPEludFNpemU+JiBpbWFnZVNpemVzKTsKQEAgLTE2MSw3ICsx
NjIsNyBAQCBwcml2YXRlOgogICAgIFVSTCBtX2RyYWdnaW5nSW1hZ2VVUkw7CiAgICAgYm9vbCBt
X2lzUGVyZm9ybWluZ0Ryb3AgeyBmYWxzZSB9OwogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdlRWxl
bWVudD4+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzOwotICAgIFJlZlB0cjxSYW5nZT4gbV9k
cm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
X2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBib29s
IGlzRHJhZ2dhYmxlTGluayhjb25zdCBFbGVtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCAy
OTUwOWM1M2M2YmY4MjYyYmJiYjczZTExYjViYmM1ZmUyOTk5ZWNhLi4yMDgzNTg2YzI3M2JlNWJl
NTQ4NzcyYTFmNTQ2ZmY5NGIzZjczZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTk4LDYgKzk4
LDcgQEAKICNpbmNsdWRlICJQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQ
b2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCkBAIC03MTEsODAgKzcxMiw3NyBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdyYQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGludCBsaW1pdCwgVmVjdG9y
PFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdlcywgaW50JiBpbmRleEZvclNlbGVjdGlvbikKK2F1
dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1bnNpZ25lZCBsaW1pdCkgLT4gTWF0Y2hpbmdSYW5nZXMKIHsKLSAgICBWZWN0
b3I8U2ltcGxlUmFuZ2U+IHJlc3VsdFJhbmdlczsKLQotICAgIGluZGV4Rm9yU2VsZWN0aW9uID0g
MDsKKyAgICBNYXRjaGluZ1JhbmdlcyByZXN1bHQ7CiAKICAgICBGcmFtZSogZnJhbWUgPSAmbWFp
bkZyYW1lKCk7CiAgICAgRnJhbWUqIGZyYW1lV2l0aFNlbGVjdGlvbiA9IG51bGxwdHI7CiAgICAg
ZG8gewotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQs
IHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSByZXN1bHRSYW5nZXMuc2l6ZSgpKSA6IDAs
IHRydWUsICZyZXN1bHRSYW5nZXMpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRj
aGVzRm9yVGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSByZXN1bHQu
cmFuZ2VzLnNpemUoKSkgOiAwLCB0cnVlLCAmcmVzdWx0LnJhbmdlcyk7CiAgICAgICAgIGlmIChm
cmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICAgICAgZnJhbWVXaXRoU2VsZWN0
aW9uID0gZnJhbWU7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUs
IENhbldyYXA6Ok5vKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKLSAgICBpZiAocmVzdWx0UmFu
Z2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChyZXN1bHQucmFuZ2VzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGlmIChmcmFtZVdpdGhTZWxl
Y3Rpb24pIHsKLSAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2VyU2Vs
ZWN0aW9uOworICAgICAgICByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJV
c2VyU2VsZWN0aW9uOwogICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxl
Y3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYg
KG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IHJlc3VsdFJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5n
ZXNbaSAtIDFdKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAg
ICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgYXV0
byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJl
c3VsdC5yYW5nZXNbaSAtIDFdKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJpc29uUmVz
dWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmV0dXJuVmFsdWUoKSA+IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3Vs
dFJhbmdlc1tpXSkpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAs
IHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJh
bmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIGNyZWF0ZUxp
dmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJp
c29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmV0dXJuVmFsdWUo
KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0g
aTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG9wdGlvbnMuY29u
dGFpbnMoQmFja3dhcmRzKSkKLSAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gcmVzdWx0
UmFuZ2VzLnNpemUoKSAtIDE7CisgICAgICAgICAgICByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24g
PSByZXN1bHQucmFuZ2VzLnNpemUoKSAtIDE7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlu
ZGV4Rm9yU2VsZWN0aW9uID0gMDsKKyAgICAgICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlv
biA9IDA7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKLSAg
ICAgICAgbWF0Y2hSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRp
b25zKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVmZXJlbmNlUmFuZ2Us
IEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
aWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkucGFn
ZSgpICE9IHRoaXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZWZlcmVuY2VS
YW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnBhZ2Uo
KSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgQ2FuV3JhcCBj
YW5XcmFwID0gb3B0aW9ucy5jb250YWlucyhXcmFwQXJvdW5kKSA/IENhbldyYXA6OlllcyA6IENh
bldyYXA6Ok5vOwotICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNl
UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOworICAgIEZyYW1l
KiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmNvbnRhaW5l
ci0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFydEZy
YW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZy
YW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/
IG1ha2VTaW1wbGVSYW5nZShyZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMg
LSBXcmFwQXJvdW5kKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0
UmFuZ2UpOworICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5y
YW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IHJlZmVyZW5jZVJhbmdl
IDogV1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0UmFuZ2U7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsICFv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyksIGNhbldyYXApOwogICAgIH0gd2hpbGUgKGZyYW1l
ICYmIGZyYW1lICE9IHN0YXJ0RnJhbWUpOwogCiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0
YXJ0RnJhbWUsIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSByZWZlcmVuY2UgcmFuZ2UgdGhhdCB3
ZSBkaWQgZWFybGllci4KICAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCBzZWFyY2ggYWdh
aW4gd2l0aCB3cmFwIG9uLgogICAgIGlmIChjYW5XcmFwID09IENhbldyYXA6OlllcyAmJiByZWZl
cmVuY2VSYW5nZSkgewotICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUt
PmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBtYWtlU2ltcGxlUmFuZ2UoKnJlZmVyZW5j
ZVJhbmdlKSwgb3B0aW9ucyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKLSAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOworICAgICAgICBpZiAo
YXV0byByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFy
Z2V0LCAqcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVj
dGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiAgICAgfQogCi0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdW5zaWduZWQgUGFn
ZTo6ZmluZE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBv
cHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50LCBTaG91bGRIaWdobGlnaHRNYXRjaGVzIHNo
b3VsZEhpZ2hsaWdodE1hdGNoZXMsIFNob3VsZE1hcmtNYXRjaGVzIHNob3VsZE1hcmtNYXRjaGVz
KQpAQCAtODc5LDI0ICs4NzcsMjIgQEAgc3RhdGljIHZvaWQgcmVwbGFjZVJhbmdlcyhQYWdlJiBw
YWdlLCBjb25zdCBWZWN0b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+JiByYW5nZXMKICAgICAgICAg
ICAgIGlmIChyYW5nZS5jb2xsYXBzZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMpOworICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UocmFuZ2UsIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzKTsKICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQocmVwbGFjZW1lbnRUZXh0LCBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpZZXMs
IEVkaXRvcjo6U21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQp
OwogICAgICAgICB9CiAgICAgfQogfQogCi11aW50MzJfdCBQYWdlOjpyZXBsYWNlUmFuZ2VzV2l0
aFRleHQoY29uc3QgVmVjdG9yPFJlZjxSYW5nZT4+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpCit1aW50MzJfdCBQYWdl
OjpyZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFNpbXBsZVJhbmdlPiYgcmFuZ2Vz
VG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCAvKnNlbGVjdGlv
bk9ubHkqLykKIHsKLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIHJlc3Bl
Y3QgdGhlIGBzZWxlY3Rpb25Pbmx5YCBmbGFnIGJ5IGNoZWNraW5nIHdoZXRoZXIgZWFjaCByYW5n
ZSBiZWluZyByZXBsYWNlZCBpcwotICAgIC8vIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGZyYW1lJ3Mg
c2VsZWN0aW9uLgotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25Pbmx5KTsKKyAgICAvLyBGSVhN
RTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIHJlc3BlY3QgdGhlIGBzZWxlY3Rpb25Pbmx5YCBm
bGFnIGJ5IGNoZWNraW5nIHdoZXRoZXIgZWFjaCByYW5nZSBiZWluZyByZXBsYWNlZCBpcyBjb250
YWluZWQgd2l0aGluIGl0cyBmcmFtZSdzIHNlbGVjdGlvbi4KIAogICAgIFZlY3RvcjxGaW5kUmVw
bGFjZW1lbnRSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZXM7CiAgICAgcmVwbGFjZW1lbnRSYW5nZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyYW5nZXNUb1JlcGxhY2Uuc2l6ZSgpKTsKIAogICAgIGZv
ciAoYXV0byYgcmFuZ2UgOiByYW5nZXNUb1JlcGxhY2UpIHsKLSAgICAgICAgYXV0byBoaWdoZXN0
Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChyYW5nZS0+c3RhcnRQb3NpdGlv
bigpKSk7Ci0gICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwgaGlnaGVzdFJvb3QgIT0gaGlnaGVz
dEVkaXRhYmxlUm9vdChyYW5nZS0+ZW5kUG9zaXRpb24oKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1
bWVudCgpLmZyYW1lKCkpCisgICAgICAgIGF1dG8gaGlnaGVzdFJvb3QgPSBtYWtlUmVmUHRyKGhp
Z2hlc3RFZGl0YWJsZVJvb3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0
KSkpOworICAgICAgICBpZiAoIWhpZ2hlc3RSb290IHx8IGhpZ2hlc3RSb290ICE9IGhpZ2hlc3RF
ZGl0YWJsZVJvb3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkpIHx8ICFo
aWdoZXN0Um9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmhpZ2hl
c3RSb290KTsKICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5kKHsgV1RGTW92ZShoaWdo
ZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZSkgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmlu
ZGV4IDlkOGY4ZmI1M2Y4M2E2Njc1MDE2M2U5ZjAzNDQyMTcwMTNmNmIzN2MuLjkxNzM2ZmI4ZGNi
YzAyMDM0YjJjMDQzZWUzMzExZjNkMjBjOTZmMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xMjksNyAr
MTI5LDYgQEAgY2xhc3MgUGx1Z2luVmlld0Jhc2U7CiBjbGFzcyBQb2ludGVyQ2FwdHVyZUNvbnRy
b2xsZXI7CiBjbGFzcyBQb2ludGVyTG9ja0NvbnRyb2xsZXI7CiBjbGFzcyBQcm9ncmVzc1RyYWNr
ZXI7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlc291cmNlVXNh
Z2VPdmVybGF5OwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKQEAgLTE1Miw2ICsxNTEsOCBA
QCBjbGFzcyBXZWJHTFN0YXRlVHJhY2tlcjsKIGNsYXNzIFdoZWVsRXZlbnREZWx0YUZpbHRlcjsK
IGNsYXNzIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiB1
c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OwogdXNpbmcgU2hhcmVkU3RyaW5nSGFz
aCA9IHVpbnQzMl90OwogCkBAIC0yODksMTIgKzI5MCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCB0
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3RhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50czsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmaW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBEaWRXcmFwKiA9IG51bGxwdHIpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHVpbnQzMl90IHJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8
UmVmPFJhbmdlPj4mIHJhbmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRl
eHQsIGJvb2wgc2VsZWN0aW9uT25seSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVw
bGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVw
bGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJh
bmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU9mU3RyaW5nKGNv
bnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc2VhcmNoUmFuZ2UsIEZp
bmRPcHRpb25zKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50RmluZE1hdGNo
ZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBT
dHJpbmcmLCBGaW5kT3B0aW9ucywgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkIG1heE1h
dGNoQ291bnQpOwpAQCAtMzA0LDEzICszMDUsMTcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlzcGF0Y2hCZWZvcmVQcmludEV2ZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkaXNwYXRjaEFmdGVyUHJpbnRFdmVudCgpOwogCi0gICAgLy8gRmluZCBhbGwgdGhlIFJh
bmdlcyBmb3IgdGhlIG1hdGNoaW5nIHRleHQuCisgICAgLy8gRmluZCBhbGwgdGhlIHJhbmdlcyBm
b3IgdGhlIG1hdGNoaW5nIHRleHQuCiAgICAgLy8gVXBvbiByZXR1cm4sIGluZGV4Rm9yU2VsZWN0
aW9uIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICAgLy8gMCBpZiB0aGVyZSBpcyBu
byB1c2VyIHNlbGVjdGlvbgogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmFuZ2UgYWZ0
ZXIgdGhlIHVzZXIgc2VsZWN0aW9uCiAgICAgLy8gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbiBp
ZiB0aGVyZSBpcyBubyBtYXRjaGluZyB0ZXh0IGFmdGVyIHRoZSB1c2VyIHNlbGVjdGlvbi4KLSAg
ICBlbnVtIHsgTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbiA9IC0xIH07Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMsIGludCBtYXhDb3VudCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiwgaW50JiBpbmRleEZv
clNlbGVjdGlvbik7CisgICAgc3RydWN0IE1hdGNoaW5nUmFuZ2VzIHsKKyAgICAgICAgVmVjdG9y
PFNpbXBsZVJhbmdlPiByYW5nZXM7CisgICAgICAgIGludCBpbmRleEZvclNlbGVjdGlvbiB7IDAg
fTsgLy8gRklYTUU6IENvbnNpZGVyIE9wdGlvbmFsPHVuc2lnbmVkPiBvciB1bnNpZ25lZCBmb3Ig
dGhpcyBpbnN0ZWFkLgorICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgTm9NYXRjaEFm
dGVyVXNlclNlbGVjdGlvbiA9IC0xOworICAgIFdFQkNPUkVfRVhQT1JUIE1hdGNoaW5nUmFuZ2Vz
IGZpbmRUZXh0TWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4
Q291bnQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggM2Q3YTVlOWQ5NjJjZDcw
MzkzY2ZkZjM1YjhkZTA5ZmM4MTAzYzI5Ni4uNTg5OGJlNzBiM2ZhMjM1YzkwODhiNDNhNzZkNzI5
N2IxZmQyNDcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTU0LDYgKzU0
LDcgQEAKICNpbXBvcnQgIlBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKICNpbXBvcnQgIlBsYXRmb3Jt
U2NyZWVuLmgiCiAjaW1wb3J0ICJQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCIKKyNp
bXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgogI2ltcG9ydCAiUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5oIgpAQCAtMTE2
LDE5ICsxMTcsMTggQEAgTlNBcnJheSAqRnJhbWU6OndvcmRzSW5DdXJyZW50UGFyYWdyYXBoKCkg
Y29uc3QKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbihwYWdlKCktPnNlbGVjdGlvbigp
LnN0YXJ0KCksIHBhZ2UoKS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZChwb3NpdGlvbik7CisKICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChlbmQp
KSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IGVuZC5wcmV2aW91cygpOwog
ICAgICAgICBVQ2hhciBjKHByZXZpb3VzLmNoYXJhY3RlckFmdGVyKCkpOworICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHVzZSBzb21ldGhpbmcgZnJvbSBJQ1Ugb3IgQVNDSUlDVHlwZSB0aGF0IGlz
IG5vdCBzdWJqZWN0IHRvIFBPU0lYIGN1cnJlbnQgbGFuZ3VhZ2UgcmF0aGVyIHRoYW4gaXN3cHVu
Y3QuCiAgICAgICAgIGlmICghaXN3cHVuY3QoYykgJiYgIWlzU3BhY2VPck5ld2xpbmUoYykgJiYg
YyAhPSBub0JyZWFrU3BhY2UpCiAgICAgICAgICAgICBlbmQgPSBzdGFydE9mV29yZChlbmQpOwog
ICAgIH0KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRPZlBhcmFncmFwaChlbmQpKTsK
IAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVu
dCgpKSk7Ci0gICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0KTsKLSAgICBzZXRF
bmQoc2VhcmNoUmFuZ2UuZ2V0KCksIGVuZCk7Ci0KLSAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxh
cHNlZCgpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVu
ZCk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSB8fCBzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICBOU011dGFibGVBcnJheSAqd29yZHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCmluZGV4IDQwNmQ1YmU5MjlkNTNhMTk3NDIwMGI5NDgzZmQ0MWE2NmQzNTZmZWUuLjE3YWZl
YWMxNDQyZGJlMWE2NjM5ZDcxNDRlMTVhNjBkNmRiN2NlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU3OSwxMSArNTc5LDggQEAgYm9vbCBIaXRU
ZXN0UmVzdWx0Ojppc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QKICAg
ICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKTsKLSAgICBpZiAoIXdvcmRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuICF3b3JkUmFuZ2UtPnRleHQoKS5pc0VtcHR5KCk7CisgICAgYXV0byB3
b3JkUmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRH
cmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQp
OworICAgIHJldHVybiB3b3JkUmFuZ2UgJiYgaGFzQW55UGxhaW5UZXh0KCp3b3JkUmFuZ2UpOwog
fQogCiBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVMaW5rVVJMKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL21hYy9XS1dlYkFyY2hpdmVSZWYuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKaW5kZXgg
YjljNTg3Y2NiZWIwMmQyNmZmZjY3MTc2OGYyNmU0ZDY3ZWY0MDg5ZS4uNTkwM2MwNTcyNWM1NmU3
ZWVlOWU0MTFiNDYzM2ZmYTQ3Y2E1ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElD
YXN0LmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9S
YW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAogV0tUeXBlSUQgV0tX
ZWJBcmNoaXZlR2V0VHlwZUlEKCkKIHsKQEAgLTUzLDcgKzU1LDcgQEAgV0tXZWJBcmNoaXZlUmVm
IFdLV2ViQXJjaGl2ZUNyZWF0ZVdpdGhEYXRhKFdLRGF0YVJlZiBkYXRhUmVmKQogCiBXS1dlYkFy
Y2hpdmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlRnJvbVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgcmFuZ2VIYW5kbGVSZWYpCiB7Ci0gICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJBcmNo
aXZlOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5jb3JlUmFuZ2UoKSk7
CisgICAgYXV0byB3ZWJBcmNoaXZlID0gQVBJOjpXZWJBcmNoaXZlOjpjcmVhdGUobWFrZVNpbXBs
ZVJhbmdlKFdlYktpdDo6dG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+Y29yZVJhbmdlKCkpKTsKICAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmd2ViQXJjaGl2ZS5sZWFrUmVmKCkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLmgKaW5kZXggNzFkZTI4YmRhNzRkN2YwMzRmYjkyYzZm
MjgyNGZlYTM5ZTJjZjlhZi4uMTQ2NGE2Yjc5YWVjZGZlODJlN2NhYzQ0YWNlOWYzZTkzODAzNGJk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaApAQCAtMjMsOCArMjMsNyBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQXJj
aGl2ZV9oCi0jZGVmaW5lIFdlYkFyY2hpdmVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBQTEFURk9S
TShDT0NPQSkKIApAQCAtMzgsNyArMzcsNyBAQCBjbGFzcyBEYXRhOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlOwotY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2lt
cGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNTIsNyArNTEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQXJjaGl2ZVJlc291cmNlKiBt
YWluUmVzb3VyY2UsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YnJlc291cmNlcywgUmVmUHRyPEFQ
STo6QXJyYXk+JiYgc3ViZnJhbWVBcmNoaXZlcyk7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZl
PiBjcmVhdGUoQVBJOjpEYXRhKik7CiAgICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUo
UmVmUHRyPFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU+JiYpOwotICAgIHN0YXRpYyBSZWY8V2Vi
QXJjaGl2ZT4gY3JlYXRlKFdlYkNvcmU6OlJhbmdlJik7CisgICAgc3RhdGljIFJlZjxXZWJBcmNo
aXZlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKTsKIAogICAgIFdlYkFyY2hp
dmVSZXNvdXJjZSogbWFpblJlc291cmNlKCk7CiAgICAgQVBJOjpBcnJheSogc3VicmVzb3VyY2Vz
KCk7CkBAIC03Niw1ICs3NSwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBBUEkKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0jZW5kaWYgLy8gV2ViQXJjaGl2ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJV2ViQXJjaGl2ZS5tbQppbmRleCBmYjU0YWY0MGJjMDBkMjQzYmY5MGU5MjI5
NmNkMWIzZDBkYmJjZWVmLi4xOGRkYzU3YTlkNDEyMDA5ZDZkZjMwYTk4YzZlNmE1MDIzYWYyOTZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUubW0KQEAgLTUyLDkgKzUyLDkgQEAg
UmVmPFdlYkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSZWZQdHI8TGVnYWN5V2ViQXJjaGl2
ZT4mJiBsZWdhY3lXZWJBcmNoaXZlKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hp
dmUobGVnYWN5V2ViQXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKLVJlZjxXZWJBcmNo
aXZlPiBXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UmIHJhbmdlKQorUmVmPFdlYkFyY2hpdmU+IFdl
YkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoJnJhbmdl
KSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkFyY2hpdmUoTGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlKHJhbmdlKSkpOwogfQogCiBXZWJBcmNoaXZlOjpXZWJBcmNoaXZlKFdlYkFyY2hp
dmVSZXNvdXJjZSogbWFpblJlc291cmNlLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBzdWJyZXNvdXJj
ZXMsIFJlZlB0cjxBUEk6OkFycmF5PiYmIHN1YmZyYW1lQXJjaGl2ZXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCA4NmFjNTUzZTZmY2MwODIyYWQ0MThjNmEwZDNmOGNm
OWM0YTk5Yjk4Li45ZjdjNzMxMDkzY2Y4NzFhN2U0YzYzZjFiMWYxYTZjMzA1M2YzNTM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLVJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0
b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5n
UmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBiYXNlKQorT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUs
IGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG8gYmFzZSkKIHsKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5k
KTsKICAgICBXZWJDb3JlOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSB7IGVkaXRpbmdSYW5nZS5sb2Nh
dGlvbiwgZWRpdGluZ1JhbmdlLmxlbmd0aCB9OwpAQCAtNDcsMjEgKzQ3LDIxIEBAIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFt
ZSwgY29uc3QgRWRpdGluCiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEg
b2YgYW4gaW5wdXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9IGZyYW1lLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpOwogICAgICAgICBp
ZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwogICAgIH0KIAogICAgIEFT
U0VSVChiYXNlID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAogICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBo
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSk7CiAgICAgaWYg
KCFwYXJhZ3JhcGhTdGFydCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHNjb3BlRW5kID0gbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3RO
b2RlKCkpLmVuZDsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OnJlc29sdmVD
aGFyYWN0ZXJSYW5nZSh7IFdURk1vdmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RGTW92ZShzY29wZUVu
ZCkgfSwgcmFuZ2UpKTsKKyAgICBhdXRvIHNjb3BlRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cyhwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290
Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RG
TW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSk7CiB9CiAK
LUVkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJh
bWUsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiByYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRv
IGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKK0VkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZy
b21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFuZ2VJ
c1JlbGF0aXZlVG8pCiB7CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9PSBF
ZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
RWRpdGluZ1JhbmdlLmgKaW5kZXggZTA0M2Y5NzI0MGU0MjVlY2QyNWE0MjdlZGQ5MjdhY2I3NDVl
MzYxNC4uZjE5YjQ0M2YwZGM3MTlhNzQ4MzVjNzhjNzRiMTY1M2Q5NDExYTE0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgRnJhbWU7Ci1jbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsK
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01OCw4ICs1OCw4IEBAIHN0cnVjdCBFZGl0aW5n
UmFuZ2UgewogICAgIC8vIChub3RGb3VuZCwgMCkgaXMgbm90YWJseSB2YWxpZC4KICAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBsb2NhdGlvbiArIGxlbmd0aCA+PSBsb2NhdGlvbjsg
fQogCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gdG9SYW5nZShXZWJDb3JlOjpG
cmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9IEVk
aXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKLSAgICBzdGF0aWMgRWRpdGlu
Z1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiwg
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0
YWJsZVJvb3QpOworICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gdG9S
YW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlz
UmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKKyAg
ICBzdGF0aWMgRWRpdGluZ1JhbmdlIGZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIAogI2lmIGRlZmluZWQo
X19PQkpDX18pCiAgICAgRWRpdGluZ1JhbmdlKE5TUmFuZ2UgcmFuZ2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVu
ZGxlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmgKaW5kZXggNjk2Y2ZmY2JkZjgw
ZTUxMmUxZDNmZGRhN2YxMDhmMzFkYjMwZTZiMS4uZDg4NTExMWQ5Zjc1MDAwYmU3ZDY3ZTAwYmNm
MDczYTQ5YTYxZTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQuaApAQCAtMzEsMTEgKzMxLDExIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZTsKLWNsYXNzIFJhbmdlOwog
Y2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOworc3RydWN0IFNpbXBs
ZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUxLDIxICs1MSwyMSBAQCBjbGFz
cyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNsaWVudCgpIHsg
fQogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2Um
LCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRW5kRWRpdGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJLaXQ6OldlYlBh
Z2UmLCBXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiwgV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViS2l0
OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29y
ZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVB
ZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNv
cmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFN0
cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRF
ZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1w
bCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNlbGVj
dGlvbihXZWJLaXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYs
IFdlYkNvcmU6OlJhbmdlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8V1RGOjpT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYktpdDo6
V2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNv
cmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3Jl
OjpFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVS
YW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6
RUFmZmluaXR5LCBib29sKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwg
Y29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZyhX
ZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0
IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2Fy
ZChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJLaXQ6
OldlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8
V1RGOjpTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2Um
KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2ViUGFn
ZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYsIGJvb2wpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6
U2ltcGxlUmFuZ2UmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSW5qZWN0ZWRCdW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJFZGl0b3IuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVkaXRvci5jcHAK
aW5kZXggY2NiNTFlMGQ5NjQwYzY2Zjg1OTZlNDc0MTcxNDA1OGU5MTM5NzY4NC4uYTg5ZWYzNWMw
NTQ5MGI1MDc1YTBiMDY5ZmQwNDJmNTg5ZjdjN2ZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dl
YktpdFdlYkVkaXRvci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgU3RyaW5nSW1wbCop
IG92ZXJyaWRlCisgICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYsIGNvbnN0IFN0
cmluZyYpIGZpbmFsCiAgICAgewogICAgICAgICBnX3NpZ25hbF9lbWl0KG1fZWRpdG9yLCBzaWdu
YWxzW1NFTEVDVElPTl9DSEFOR0VEXSwgMCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01Eb2N1bWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRG9j
dW1lbnQubW0KaW5kZXggMTY2ZTc5ZDAzMjIyZWM5ODI0MTE4YTQ3MGMwMjA0OTRhNmI1OGMwZC4u
OTVkMWMwN2FiMmNjYjY1NWQ2ZDdiMWZlMzI1Y2M1OWUwODNiZWRjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01Eb2N1bWVu
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTURvY3VtZW50Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KICNp
bXBvcnQgPHd0Zi9OYWtlZFJlZi5oPgpAQCAtNzksNyArODAsNyBAQCAtIChXS0RPTU5vZGUgKilj
cmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBT
dHJpbmcgYgogCiAtIChXS0RPTU5vZGUgKiljcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aFRleHQ6
KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBXZWJLaXQ6OnRvV0tET01Ob2RlKGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpfaW1wbCkuY3Jl
YXRlUmFuZ2UoKS5nZXQoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvV0tE
T01Ob2RlKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvd25jYXN0PFdlYkNvcmU6OkRvY3VtZW50PigqX2ltcGwpKSwgdGV4dCkucHRyKCkpOwog
fQogCiAtIChpZClwYXJzZXJZaWVsZFRva2VuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRl
eCAwMDkwYjg5OGEyZTFlMWQ2MWNhZTA0NTAzOGEyZjg1ZDc1ZGJjM2U3Li4xYjZiYjc3ZWNhN2U2
ZWMwZjFmNjFlODcyMTJjNGM0NWY2OTZiNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0K
QEAgLTEzNCw5ICsxMzQsOCBAQCAtIChOU0FycmF5ICopdGV4dFJlY3RzCiAKIC0gKFdLRE9NUmFu
Z2UgKilyYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3RlcnM6KE5TVUludGVn
ZXIpY2hhcmFjdGVycyBpbkRpcmVjdGlvbjooV0tET01SYW5nZURpcmVjdGlvbilkaXJlY3Rpb24K
IHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VFeHBhbmRlZEJ5
Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZGlyZWN0aW9uID09IFdLRE9NUmFu
Z2VEaXJlY3Rpb25Gb3J3YXJkID8gIF9pbXBsLT5lbmRQb3NpdGlvbigpIDogX2ltcGwtPnN0YXJ0
UG9zaXRpb24oKSwgY2hhcmFjdGVycywgZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VEaXJlY3Rpb25G
b3J3YXJkID8gV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIDogV2ViQ29yZTo6
U2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0KLSAgICByZXR1cm4gW1tbV0tET01SYW5n
ZSBhbGxvY10gX2luaXRXaXRoSW1wbDpuZXdSYW5nZS5nZXQoKV0gYXV0b3JlbGVhc2VdOworICAg
IGF1dG8gbmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdv
cmRCb3VuZGFyeShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyAgX2lt
cGwtPmVuZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBjaGFyYWN0ZXJzLCBk
aXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkKTsKKyAgICByZXR1cm4gW1tbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpjcmVh
dGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFj
L1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCA0NzdmZjk0NWE2YWI0YWNhOWU3MzMx
MjU1YjA0MGRkNWZhZDZlOGUwLi5jNzc2MjUyZWJkNGFlODg4NDViZThjNjc3OGI2ZWY3MzBkZmYz
MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQ
cm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCkBAIC01NTksMjEgKzU1OSwy
MSBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVnSW5F
ZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1w
bCogdGV4dCwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJ
bnNlcnRBY3Rpb24gYWN0aW9uKSBmaW5hbAorICAgICAgICBib29sIHNob3VsZEluc2VydFRleHQo
V2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9k
ZWxlZ2F0ZU1ldGhvZHMuc2hvdWxkSW5zZXJ0VGV4dCkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdh
dGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250
cm9sbGVyIHNob3VsZEluc2VydFRleHQ6U3RyaW5nKHRleHQpIHJlcGxhY2luZ1JhbmdlOndyYXBw
ZXIoKldlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2VU
b1JlcGxhY2UpKSBnaXZlbkFjdGlvbjp0b1dLKGFjdGlvbildOworICAgICAgICAgICAgcmV0dXJu
IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHNob3VsZEluc2VydFRleHQ6dGV4
dCByZXBsYWNpbmdSYW5nZTp3cmFwcGVyKCpXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZVRvUmVw
bGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9uKV07CiAgICAgICAgIH0KIAotICAgICAgICBi
b29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6
UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZp
bml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWwKKyAgICAgICAgYm9vbCBz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2Rl
bGVnYXRlTWV0aG9kcy5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICBhdXRvIGFwaUZyb21SYW5nZSA9IGZyb21SYW5n
ZSA/IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmZyb21SYW5nZV0p
IDogbmlsOwotICAgICAgICAgICAgYXV0byBhcGlUb1JhbmdlID0gdG9SYW5nZSA/IGFkb3B0TlMo
W1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOnRvUmFuZ2VdKSA6IG5pbDsKKyAgICAg
ICAgICAgIGF1dG8gYXBpRnJvbVJhbmdlID0gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9p
bml0V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCldKTsKKyAgICAgICAg
ICAgIGF1dG8gYXBpVG9SYW5nZSA9IGFkb3B0TlMoW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdp
dGhJbXBsOmNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKV0pOwogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgICAgICAgICBVSVRleHRTdG9yYWdlRGlyZWN0aW9uIGFwaUFmZmluaXR5
ID0gYWZmaW5pdHkgPT0gV2ViQ29yZTo6VVBTVFJFQU0gPyBVSVRleHRTdG9yYWdlRGlyZWN0aW9u
QmFja3dhcmQgOiBVSVRleHRTdG9yYWdlRGlyZWN0aW9uRm9yd2FyZDsKICNlbHNlCkBAIC01ODMs
NyArNTgzLDcgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNz
UGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAgICAgIHJldHVybiBb
bV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJv
d3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlOmFwaUZyb21SYW5nZS5nZXQoKSB0b1JhbmdlOmFwaVRvUmFuZ2UuZ2V0KCkgYWZmaW5pdHk6
YXBpQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwogICAgICAgICB9CiAK
LSAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCopIGZp
bmFsCisgICAgICAgIHZvaWQgZGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFN0cmlu
ZyYpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMu
ZGlkQ2hhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5MSwyMCArNTkxLDIwIEBA
IC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRp
bmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRp
dGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9s
bGVyRGlkQ2hhbmdlQnlFZGl0aW5nOm1fY29udHJvbGxlcl07CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHdpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpS
YW5nZSogcmFuZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdl
YktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFu
Z2UpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMu
d2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICAgICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgd2lsbFdyaXRlUmFuZ2VU
b1Bhc3RlYm9hcmQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpn
ZXRPckNyZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAgICAgICAgIFttX2NvbnRyb2xsZXItPl9l
ZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXI6bV9jb250cm9sbGVyIHdpbGxXcml0ZVJhbmdlVG9QYXN0ZWJvYXJkOndyYXBwZXIoV2Vi
S2l0OjpjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6
UmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWwKKyAgICAg
ICAgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdh
dGVNZXRob2RzLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9sbGVyLT5fZWRp
dGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9s
bGVyOm1fY29udHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIoKldlYktpdDo6
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpLmdldCgpKV07Cisg
ICAgICAgICAgICBhdXRvIGRhdGFCeVR5cGUgPSBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVn
YXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29u
dHJvbGxlciBwYXN0ZWJvYXJkRGF0YUZvclJhbmdlOndyYXBwZXIoV2ViS2l0OjpjcmVhdGVIYW5k
bGUocmFuZ2UpLmdldCgpKV07CiAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICp0eXBlIGluIGRh
dGFCeVR5cGUpIHsKICAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUp
OwogICAgICAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNyZWF0ZShkYXRhQnlUeXBlW3R5cGVdKSk7CkBAIC02MTksMTIgKzYxOSwxMiBAQCAt
ICh2b2lkKV9zZXRFZGl0aW5nRGVsZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVnSW5FZGl0aW5n
RGVsZWdhdGU+KWVkaXRpbmdEZWxlZwogICAgICAgICAgICAgW21fY29udHJvbGxlci0+X2VkaXRp
bmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxl
ckRpZFdyaXRlVG9QYXN0ZWJvYXJkOm1fY29udHJvbGxlcl07CiAgICAgICAgIH0KIAotICAgICAg
ICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgV2ViQ29yZTo6UmFuZ2UmIHJhbmdlLCBib29sIGlzTW92
ZSkgZmluYWwKKyAgICAgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViS2l0OjpXZWJQYWdl
JiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJiByYW5nZSwgYm9vbCBpc01vdmUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMucGVyZm9ybVR3b1N0ZXBEcm9wKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byByYW5nZUhhbmRsZSA9IFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJnJhbmdlKTsKKyAg
ICAgICAgICAgIGF1dG8gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSk7
CiAgICAgICAgICAgICBhdXRvIG5vZGVIYW5kbGUgPSBXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9k
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUoJmZyYWdtZW50KTsKICAgICAgICAgICAgIHJldHVybiBbbV9j
b250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3Nl
ckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBwZXJmb3JtVHdvU3RlcERyb3A6d3JhcHBl
cigqbm9kZUhhbmRsZSkgYXREZXN0aW5hdGlvbjp3cmFwcGVyKCpyYW5nZUhhbmRsZSkgaXNNb3Zl
OmlzTW92ZV07CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGUuY3BwCmluZGV4IDIyMGVmZWQ1OGVkMTU3NzllNzViOWM0OGMxNzA3MTdmZmUyZGYw
ZGYuLmE5MWY3ZjcwNzgxNzhkZmJlNDNiNTg0NmJjMDBjNDRlYmQ5NmQ3NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtNTQsNyArNTQsNyBA
QAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdHlwZWRl
ZiBIYXNoTWFwPFJhbmdlKiwgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+IERPTVJhbmdlSGFu
ZGxlQ2FjaGU7Cit1c2luZyBET01SYW5nZUhhbmRsZUNhY2hlID0gSGFzaE1hcDxSYW5nZSosIElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUqPjsKIAogc3RhdGljIERPTVJhbmdlSGFuZGxlQ2FjaGUm
IGRvbVJhbmdlSGFuZGxlQ2FjaGUoKQogewpAQCAtNjQsMjkgKzY0LDIxIEBAIHN0YXRpYyBET01S
YW5nZUhhbmRsZUNhY2hlJiBkb21SYW5nZUhhbmRsZUNhY2hlKCkKIAogUmVmUHRyPEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRl
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgUmFuZ2Uq
IHJhbmdlID0gSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRvSlMob2Jq
ZWN0KSk7Ci0gICAgcmV0dXJuIGdldE9yQ3JlYXRlKHJhbmdlKTsKKyAgICByZXR1cm4gZ2V0T3JD
cmVhdGUoSlNSYW5nZTo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRvSlMob2JqZWN0
KSkpOwogfQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRE9NUmFuZ2VIYW5kbGVDYWNoZTo6
QWRkUmVzdWx0IHJlc3VsdCA9IGRvbVJhbmdlSGFuZGxlQ2FjaGUoKS5hZGQocmFuZ2UsIG51bGxw
dHIpOworICAgIGF1dG8gcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwg
bnVsbHB0cik7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBhdXRvIHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRlKCpyYW5nZSk7CisgICAgYXV0byByYW5nZUhhbmRsZSA9
IGFkb3B0UmVmKCpuZXcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSgqcmFuZ2UpKTsKICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUucHRyKCk7CiAgICAgcmV0dXJuIHJh
bmdlSGFuZGxlOwogfQogCi1SZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRlKFJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKHJhbmdlKSk7Ci19Ci0KIEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUoUmFuZ2UmIHJh
bmdlKQogICAgIDogbV9yYW5nZShyYW5nZSkKIHsKQEAgLTE3OCw0ICsxNzAsOSBAQCBTdHJpbmcg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmFu
Z2UtPnRleHQoKTsKIH0KIAorUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IGNyZWF0
ZUhhbmRsZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQorewor
ICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCmluZGV4IGY4MGUzM2FiZTgw
NjUxZDk3OTE4YjhkYmZhMTQ5ZTQ2MWY1NmJjODUuLjVlOGJlZWRhMTAwZDI1ZjA5MWU3ZTBjMWY3
NmE0ZjBjYjE0YzI0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKLSNkZWZpbmUg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQ
SU9iamVjdC5oIgogI2luY2x1ZGUgIkltYWdlT3B0aW9ucy5oIgpAQCAtMzUsNiArMzQsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJhbmdlOworc3RydWN0
IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU5LDEyICs1OSwxMSBA
QCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6UmFuZ2UmIGNvcmVSYW5nZSgpIGNvbnN0OwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBSZWY8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlKFdl
YkNvcmU6OlJhbmdlJik7CiAgICAgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZShXZWJDb3JlOjpS
YW5nZSYpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlOwogfTsKIAotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CitSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRl
SGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwogCi0jZW5kaWYg
Ly8gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZV9oCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKaW5kZXggY2Uw
MjdiNWE3YmU2ODI3YTc4ZTdiNzcyNWJkYmIzMjY0YTYyNTIwYS4uZTM0MGFmMWNiYzMwMjllNTdh
YmRiMjJkYzRmOWE5YmRjMjVmMDUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudC5jcHAKQEAgLTM4LDEyMyArMzgsMTExIEBACiAjaW5jbHVkZSAiV0tT
dHJpbmcuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dEZyYWdtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUNTU1N0eWxl
RGVjbGFyYXRpb25IYW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0
eWxlKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5k
bGU6OmdldE9yQ3JlYXRlKCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uKCkpOworfQorCiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OkluamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnRCYXNl
JiBjbGllbnQpCiB7CiAgICAgaW5pdGlhbGl6ZSgmY2xpZW50KTsKIH0KIAotYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdl
LCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hv
dWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
IHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKSB7Ci0gICAgICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50
LnNob3VsZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNo
b3VsZEJlZ2luRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEJlZ2luRWRp
dGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdl
LCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hv
dWxkRW5kRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7
Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcpIHsKLSAgICAgICAgUmVmUHRyPElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hv
dWxkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEVu
ZEVkaXRpbmcpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5nKHRvQVBJ
KCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmIHBhZ2UsIE5vZGUqIG5v
ZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKFdlYlBh
Z2UmIHBhZ2UsIE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VU
b1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKG1fY2xpZW50
LnNob3VsZEluc2VydE5vZGUpIHsKICAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
bm9kZSk7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZVRv
UmVwbGFjZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJh
bmdlVG9SZXBsYWNlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydE5vZGUo
dG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdldCgpKSwgdG9BUEkocmFuZ2VUb1JlcGxh
Y2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OworICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0b0FQSSgmcGFnZSks
IHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxh
Y2UpLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIHRleHQs
IFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2Um
IHBhZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBpZiAobV9j
bGllbnQuc2hvdWxkSW5zZXJ0VGV4dCkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZT4gcmFuZ2VUb1JlcGxhY2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVu
dC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdlKSwgdG9BUEkodGV4dCksIHRvQVBJKHJhbmdl
VG9SZXBsYWNlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEluc2VydFRleHQpCisgICAg
ICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KHRvQVBJKCZwYWdlKSwgdG9BUEko
dGV4dC5pbXBsKCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2VUb1JlcGxhY2UpLmdldCgpKSwg
dG9BUEkoYWN0aW9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0
ZVJhbmdlKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiBwYWdlLCBjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVu
dC5zaG91bGREZWxldGVSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNy
ZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWxldGVSYW5nZSh0
b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdlKQorICAg
ICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQ
SShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIGZyb21S
YW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVj
dGluZykKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYg
ZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0
eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBpZiAobV9jbGllbnQuc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZT4gZnJvbVJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6
Z2V0T3JDcmVhdGUoZnJvbVJhbmdlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU+IHRvUmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRP
ckNyZWF0ZSh0b1JhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQSShmcm9tUmFuZ2VIYW5kbGUuZ2V0KCkpLCB0
b0FQSSh0b1JhbmdlSGFuZGxlLmdldCgpKSwgdG9BUEkoYWZmaW5pdHkpLCBzdGlsbFNlbGVjdGlu
ZywgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKGZyb21S
YW5nZSkuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUodG9SYW5nZSkuZ2V0KCkpLCB0b0FQSShh
ZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
c2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZEFwcGx5U3R5bGUoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHls
ZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGll
bnQuc2hvdWxkQXBwbHlTdHlsZSkgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVDU1NT
dHlsZURlY2xhcmF0aW9uSGFuZGxlPiBzdHlsZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlQ1NTU3R5
bGVEZWNsYXJhdGlvbkhhbmRsZTo6Z2V0T3JDcmVhdGUoc3R5bGUpOwotICAgICAgICBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBtX2NsaWVudC5z
aG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdlKSwgdG9BUEkoc3R5bGVIYW5kbGUuZ2V0KCkpLCB0
b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAg
fQorICAgIGlmIChtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKQorICAgICAgICByZXR1cm4gbV9j
bGllbnQuc2hvdWxkQXBwbHlTdHlsZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShz
dHlsZSkuZ2V0KCkpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2UpLmdldCgpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBTdHJp
bmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ6OmRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIG5vdGlm
aWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKG1fY2xpZW50LmRpZEJlZ2luRWRpdGluZykKLSAgICAg
ICAgbV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0
aW9uTmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRp
ZEJlZ2luRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUuaW1wbCgp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCog
bm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojpk
aWRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFt
ZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkRW5kRWRpdGluZykKLSAgICAgICAgbV9jbGllbnQu
ZGlkRW5kRWRpdGluZyh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRFbmRFZGl0aW5nKHRv
QVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
ZGlkQ2hhbmdlKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2
b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlKFdlYlBhZ2UmIHBh
Z2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQu
ZGlkQ2hhbmdlKQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEkoJnBhZ2UpLCB0b0FQ
SShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
bV9jbGllbnQuZGlkQ2hhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0aW9uTmFtZS5p
bXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmIHBhZ2UsIFN0
cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYg
bm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQuZGlkQ2hhbmdlU2VsZWN0aW9u
KQotICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEkoJnBhZ2UpLCB0b0FQ
SShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
bV9jbGllbnQuZGlkQ2hhbmdlU2VsZWN0aW9uKHRvQVBJKCZwYWdlKSwgdG9BUEkobm90aWZpY2F0
aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6d2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBh
Z2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50Ojp3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQud2lsbFdyaXRlVG9QYXN0
ZWJvYXJkKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5n
ZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsK
LSAgICAgICAgbV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKHRvQVBJKCZwYWdlKSwgdG9B
UEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0K
KyAgICBpZiAobV9jbGllbnQud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKQorICAgICAgICBtX2NsaWVu
dC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUo
cmFuZ2UpLmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2Vi
UGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKK3ZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdl
YlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKQogewogICAgIGlmIChtX2NsaWVudC5nZXRQYXN0ZWJvYXJkRGF0YUZvclJh
bmdlKSB7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhh
bmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAg
ICAgICAgV0tBcnJheVJlZiB0eXBlcyA9IDA7Ci0gICAgICAgIFdLQXJyYXlSZWYgZGF0YSA9IDA7
Ci0gICAgICAgIG1fY2xpZW50LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UodG9BUEkoJnBhZ2Up
LCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksICZ0eXBlcywgJmRhdGEsIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiB0eXBlc0FycmF5ID0gYWRv
cHRSZWYodG9JbXBsKHR5cGVzKSk7Ci0gICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiBkYXRhQXJy
YXkgPSBhZG9wdFJlZih0b0ltcGwoZGF0YSkpOworICAgICAgICBXS0FycmF5UmVmIHR5cGVzID0g
bnVsbHB0cjsKKyAgICAgICAgV0tBcnJheVJlZiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgbV9j
bGllbnQuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0
ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCAmdHlwZXMsICZkYXRhLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOworICAgICAgICBhdXRvIHR5cGVzQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwodHlwZXMp
KTsKKyAgICAgICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwoZGF0YSkpOwogCiAg
ICAgICAgIHBhc3RlYm9hcmRUeXBlcy5jbGVhcigpOwogICAgICAgICBwYXN0ZWJvYXJkRGF0YS5j
bGVhcigpOwpAQCAtMTc0LDE0ICsxNjIsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmEKICAg
ICB9CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdv
U3RlcERyb3AoV2ViUGFnZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdl
JiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmIHBhZ2UsIERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3Zl
KQogewogICAgIGlmICghbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTo6Z2V0T3JDcmVhdGUoJmRlc3RpbmF0aW9uKTsKICAgICBhdXRvIG5vZGVIYW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKCZmcmFnbWVudCk7Ci0gICAgcmV0
dXJuIG1fY2xpZW50LnBlcmZvcm1Ud29TdGVwRHJvcCh0b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVI
YW5kbGUuZ2V0KCkpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIGlzTW92ZSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9w
KHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRs
ZShkZXN0aW5hdGlvbikuZ2V0KCkpLCBpc01vdmUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVRvUGFz
dGVib2FyZChXZWJQYWdlJiBwYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5oCmluZGV4IDY4OTk0MWExOGU4ZDllOTRjYTQyNmY5NDJiMWViOGEwYjNjZjg0
YmIuLmYzYTBlNzQ3NjcyMGZiMWI1ZDljYjE3NzE3ZWRkNzM5OTQ5N2RjMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIERv
Y3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2ltcGxl
UmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTIsMjEgKzUyLDIxIEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQoY29uc3QgV0tC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50QmFzZSYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wg
c2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBi
b29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpS
YW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7
Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiwgV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZp
bmFsOwotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdl
KikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBhZ2UmLCBX
ZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29y
ZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKLSAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoV2ViUGFnZSYsIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLCBXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOwotICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBT
dHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZEVkaXRp
bmcoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZv
aWQgZGlkQ2hhbmdlKFdlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5h
bDsKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90
aWZpY2F0aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2Vi
UGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0
YUZvclJhbmdlKFdlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3Rl
Ym9hcmREYXRhKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlJiwg
Y29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVk
aXRpbmcoV2ViUGFnZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRJbnNlcnROb2RlKFdlYlBhZ2UmLCBXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRp
dG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViUGFn
ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYg
cmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGREZWxldGVSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5n
ZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3Jl
OjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
QXBwbHlTdHlsZShXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CisgICAgdm9pZCBkaWRC
ZWdpbkVkaXRpbmcoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmlu
YWw7CisgICAgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIG5vdGlm
aWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBhZ2UmLCBjb25zdCBT
dHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0
aW9uKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOworICAg
IHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmLCBjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZl
Y3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICB2b2lkIGRpZFdyaXRlVG9Q
YXN0ZWJvYXJkKFdlYlBhZ2UmKSBmaW5hbDsKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChX
ZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9w
KFdlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNmNmNGY1YTMxOTFhZDk5
YjJkMWE3MzM4ZDRmMzkzNTUzOGY2YWIzMy4uOWM2YjdiYTdjYjU2YTQyMzViMDA1YjlmYmFiYjFh
YzI5MWNjNDg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgc3Rh
dGljIHVpbnQ2NF90IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkKIAogYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdl
dCgpKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0xMTgsMzIgKzExOCwzMiBAQCBpbnQg
V2ViRWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAKIGJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
QmVnaW5FZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOworICAg
IHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQmVnaW5F
ZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdl
LCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmpl
Y3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgcmFuZ2Up
OwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiBub2Rl
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCAmbm9kZSwgY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4gbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwgbm9k
ZSwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAg
ICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2Vy
dFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFj
ZSkuZ2V0KCksIGFjdGlvbik7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQsIHJhbmdlVG9SZXBsYWNl
LCBhY3Rpb24pOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3Rp
bGxTZWxlY3RpbmcpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5n
ZShmcm9tUmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UodG9SYW5nZSkuZ2V0KCksIGFmZmlu
aXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGZyb21SYW5n
ZSwgdG9SYW5nZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KICAgICAKIGJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5
bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0eWxlKCptX3Bh
Z2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCBzdHlsZSwgcmFu
Z2UpOwogfQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTI2OCwxNyArMjY4
LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZCgpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2Us
IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgcmFuZ2UpOwog
fQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7Ci0g
ICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFzdGVib2Fy
ZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgcmFuZ2UsIHBhc3Rl
Ym9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6
cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1w
bGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewotICAgIHJldHVybiBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2Us
IGZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01vdmUpOworICAgIHJl
dHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBE
cm9wKCptX3BhZ2UsIGZyYWdtZW50LCBkZXN0aW5hdGlvbiwgaXNNb3ZlKTsKIH0KIAogdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoVW5kb1N0ZXAmIHN0ZXApCkBAIC01Mzcs
MTEgKzUzNyw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhT
dHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtCiBzdGF0aWMgdWludDY0X3QgaW5z
ZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBj
dXJyZW50U2VsZWN0aW9uKQogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkp
OwotICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFy
dCkpOworICAgIHJldHVybiByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSkgOiAwOwogfQog
CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCA1ZjVlODY0MWFkZWNk
MjZjYjllZmQ3OThhMzkwMGY3NzNkOTRlNzNiLi41MzE4NTUzOGI5ZTA1MTkwM2E5ZDZlZGU3NWI0
ZTBlYzgzNTI2OTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYXRoVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAogI2lmIFBMQVRG
T1JNKENPQ09BKQpAQCAtMTExLDExICsxMTIsMTEgQEAgdWludDMyX3QgRmluZENvbnRyb2xsZXI6
OnJlcGxhY2VNYXRjaGVzKGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIG1hdGNoSW5kaWNlcywgY28K
ICAgICAvLyBwZXJpb2RpY2FsbHkgdXBkYXRlIGFuIE5TUHJvZ3Jlc3MgaW4gdGhlIFVJIHByb2Nl
c3Mgd2hlbiBhIGJhdGNoIG9mIGZpbmQtaW4tcGFnZSBtYXRjaGVzIGFyZSByZXBsYWNlZC4KICAg
ICBjb25zdCB1aW50MzJfdCBtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlID0gMTAwMDsK
IAotICAgIFZlY3RvcjxSZWY8UmFuZ2U+PiByYW5nZXNUb1JlcGxhY2U7CisgICAgVmVjdG9yPFNp
bXBsZVJhbmdlPiByYW5nZXNUb1JlcGxhY2U7CiAgICAgcmFuZ2VzVG9SZXBsYWNlLnJlc2VydmVD
YXBhY2l0eShzdGQ6Om1pbjx1aW50MzJfdD4obWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFj
ZSwgbWF0Y2hJbmRpY2VzLnNpemUoKSkpOwogICAgIGZvciAoYXV0byBpbmRleCA6IG1hdGNoSW5k
aWNlcykgewogICAgICAgICBpZiAoaW5kZXggPCBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKLSAgICAg
ICAgICAgIHJhbmdlc1RvUmVwbGFjZS51bmNoZWNrZWRBcHBlbmQoKm1fZmluZE1hdGNoZXNbaW5k
ZXhdKTsKKyAgICAgICAgICAgIHJhbmdlc1RvUmVwbGFjZS51bmNoZWNrZWRBcHBlbmQobV9maW5k
TWF0Y2hlc1tpbmRleF0pOwogICAgICAgICBpZiAocmFuZ2VzVG9SZXBsYWNlLnNpemUoKSA+PSBt
YXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMjQzLDEyICsyNDQsMTAgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25zPiBvcHQKICAgICBib29s
IGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSBmYWxzZTsKICAgICBpZiAoIXBsdWdp
blZpZXcpIHsKICAgICAgICAgaWYgKEZyYW1lKiBzZWxlY3RlZEZyYW1lID0gZnJhbWVXaXRoU2Vs
ZWN0aW9uKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKSkpIHsKLSAgICAgICAgICAgIEZyYW1lU2VsZWN0
aW9uJiBmcyA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpOwotICAgICAgICAgICAgaWYgKGZz
LnNlbGVjdGlvbkJvdW5kcygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fZmluZE1h
dGNoZXMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0g
ICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdS
YW5nZXMoc3RyaW5nLCBjb3JlT3B0aW9ucywgbWF4TWF0Y2hDb3VudCwgbV9maW5kTWF0Y2hlcywg
aW5kZXhGb3JTZWxlY3Rpb24pOwotICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaElu
ZGV4ID0gaW5kZXhGb3JTZWxlY3Rpb247CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhz
dHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICAgICAgICAgICAgICBtX2Zp
bmRNYXRjaGVzID0gV1RGTW92ZShyZXN1bHQucmFuZ2VzKTsKKyAgICAgICAgICAgICAgICBtX2Zv
dW5kU3RyaW5nTWF0Y2hJbmRleCA9IHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbjsKICAgICAgICAg
ICAgICAgICBmb3VuZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjg0LDE2ICsyODMsMTQgQEAgdm9pZCBGaW5kQ29udHJvbGxl
cjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25z
PiBvcHQKIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW9ucz4gb3B0aW9ucywgdW5zaWduZWQgbWF4
TWF0Y2hDb3VudCkKIHsKLSAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7Ci0gICAgaW50IGluZGV4
Rm9yU2VsZWN0aW9uOwotCi0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0
Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50LCBtX2ZpbmRN
YXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7CisgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1h
dGNoQ291bnQpOworICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwog
CiAgICAgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKICAgICBmb3IgKGF1dG8m
IHJhbmdlIDogbV9maW5kTWF0Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygqcmFuZ2UpKTsKKyAgICAgICAgbWF0Y2hSZWN0cy5h
cHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwogCi0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVz
KHN0cmluZywgbWF0Y2hSZWN0cywgaW5kZXhGb3JTZWxlY3Rpb24pKTsKKyAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5n
LCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24pKTsKIAogICAgIGlmICghb3B0
aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd092ZXJsYXkpICYmICFvcHRpb25zLmNvbnRh
aW5zKEZpbmRPcHRpb25zOjpTaG93RmluZEluZGljYXRvcikpCiAgICAgICAgIHJldHVybjsKQEAg
LTMwOCwxMiArMzA1LDEyIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1h
dGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5k
TWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2Zp
bmRNYXRjaGVzW21hdGNoSW5kZXhdLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUo
KTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbigqbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSkpOworICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSk7CiAK
ICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzZWxlY3Rpb25TbmFwc2hvdCA9IFdlYkZyYW1l
Ojpmcm9tQ29yZUZyYW1lKCpmcmFtZSktPmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCk7CiAKQEAg
LTMzOSwxMCArMzM2LDEwIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1
aW50MzJfdCBtYXRjaEluZGV4KQogewogICAgIGlmIChtYXRjaEluZGV4ID49IG1fZmluZE1hdGNo
ZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0
Y2hlc1ttYXRjaEluZGV4XS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7Cisg
ICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpt
X2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKTsKIH0KIAogdm9pZCBGaW5kQ29udHJv
bGxlcjo6aW5kaWNhdGVGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDJmZDNm
YWMxZWM2YzJjMjExOTI1Y2I1ZDdhZGJjMTkyNTcyN2Q5ZDkuLmY2ZjZmOWQyMTA0ZDNhNzllM2Zl
OGQ5ODFmMTQ0NTk2NDIyNDMyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAg
ICAgLy8gdGhlIGZpbmQgaW5kaWNhdG9yIGlzbid0IHNob3dpbmcsIGJ1dCBpdCB3aWxsIG5ldmVy
IGJlIGZhbHNlIHdoZW4gaXQgaXMgc2hvd2luZy4KICAgICBib29sIG1faXNTaG93aW5nRmluZElu
ZGljYXRvciB7IGZhbHNlIH07CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX2ZpbmRJbmRpY2F0b3JS
ZWN0OwotICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+PiBtX2ZpbmRNYXRjaGVzOwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9maW5kTWF0Y2hlczsKICAgICAvLyBJ
bmRleCB2YWx1ZSBpcyAtMSBpZiBub3QgZm91bmQgb3IgaWYgbnVtYmVyIG9mIG1hdGNoZXMgZXhj
ZWVkcyBwcm92aWRlZCBtYXhpbXVtLgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCB7
IC0xIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggZWQzYjYzZmRkZTNhNzdiOGY5ZWI5ODMxNWU1ZThkOWJiNTFjMGRiNy4uMmRjNTA1Y2Zk
YjEzYjAwMzJmZGE1NDllMGM5ZDVkNjcyNzJiNDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTU0MzcsMTMgKzU0MzcsMTMgQEAgdm9pZCBX
ZWJQYWdlOjpoYXNNYXJrZWRUZXh0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJv
bVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25S
YW5nZSgpKS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJv
bVJhbmdlKGZyYW1lLCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFt
ZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBj
cmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZy
b21SYW5nZShmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3lu
Yyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
QEAgLTU0NTIsOCArNTQ1Miw4IEBAIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2lu
dEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgQ2FsbGJhCiAgICAgYXV0byBy
ZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRB
dFBvaW50KHBvaW50LCBoaXRUeXBlKTsKICAgICBhdXRvJiBmcmFtZSA9IHJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKSA/ICpyZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IGZyYW1l
LnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7Ci0g
ICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgcmFu
Z2UuZ2V0KCkpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxs
YmFjayhzdGF0aWNfY2FzdDx1aW50NjRfdD4oZWRpdGluZ1JhbmdlLmxvY2F0aW9uKSwgY2FsbGJh
Y2tJRCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2Uo
ZnJhbWUsIG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhlZGl0aW5nUmFuZ2UubG9jYXRpb24sIGNhbGxiYWNr
SUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5j
KGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IDVmZWEyYjEzZjY3NTg3MmE1NjdkMmE0ZDc2MzdjZGU4OGY2ZGNiN2QuLmE5NzM1
ZGEzNTZlZjE2MTc0NWRlMmJhODlkMTYxMDVmMzEyZjk3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNTEsMzEgKzE1
MSwzNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gRklYTUU6IFVuY2xlYXIgaWYgY2FsbGVy
cyBpbiB0aGlzIGZpbGUgYXJlIGNvcnJlY3RseSBjaG9vc2luZyB3aGljaCBvZiB0aGVzZSB0d28g
ZnVuY3Rpb25zIHRvIHVzZS4KIAotc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0
UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlKTsKLX0KLQogc3RhdGljIFN0cmluZyBwbGFpblRl
eHRGb3JDb250ZXh0KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmco
KTsKKyAgICByZXR1cm4gcmFuZ2UgPyBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFr
U3BhY2UoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKKyNpZiAwCisKIHN0YXRpYyBTdHJp
bmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0gICAgcmV0dXJu
IHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dChTaW1wbGVSYW5nZSB7ICpyYW5nZSB9KSA6IGVt
cHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHBsYWluVGV4dEZvckNvbnRleHQobWFrZVNpbXBsZVJh
bmdlKHJhbmdlKSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCisjZW5kaWYKKworc3RhdGljIFN0cmluZyBwbGFpblRleHRG
b3JEaXNwbGF5KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSwgVGV4dEl0
ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBXZWJDb3Jl
OjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IsIHRydWUpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAorI2lmIDAKKwogc3RhdGlj
IFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICBy
ZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JEaXNwbGF5KCpyYW5nZSkgOiBlbXB0eVN0cmluZygp
OworICAgIHJldHVybiBwbGFpblRleHRGb3JEaXNwbGF5KG1ha2VTaW1wbGVSYW5nZShyYW5nZSkp
OwogfQogCisjZW5kaWYKKwogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewog
ICAgIHBsYXRmb3JtSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHkoKTsKQEAgLTI5MCw3ICsyOTMsNyBA
QCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0
b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAgICAgICBwb3N0TGF5b3V0RGF0YS5jYXJldFJlY3RB
dEVuZCA9IHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQ7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB3cml0aW5nIGRp
cmVjdGlvbi4KICAgICAgICAgcG9zdExheW91dERhdGEuaXNSZXBsYWNlQWxsb3dlZCA9IHJlc3Vs
dC5pc0NvbnRlbnRFZGl0YWJsZSAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShzZWxlY3Rpb24u
c3RhcnQoKSwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVj
dGlvbjo6Rm9yd2FyZCk7Ci0gICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9
IHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFy
dCgpKS5nZXQoKSk7CisgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHBs
YWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
KSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAg
ICAgIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgcG9zdExheW91
dERhdGEuY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24sIHBvc3RMYXlvdXREYXRhLmNoYXJhY3RlckJl
Zm9yZVNlbGVjdGlvbiwgcG9zdExheW91dERhdGEudHdvQ2hhcmFjdGVyQmVmb3JlU2VsZWN0aW9u
KTsKICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKQEAgLTU1MiwxMCArNTU1
LDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4
dGVuZGVkQ29udGV4dExlbmd0aCA9IDM1MDsKLSAgICAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0
ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKLSAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRp
c3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnko
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRD
b250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKS5nZXQoKSk7Ci0gICAg
U3RyaW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpGb3J3YXJkKS5nZXQoKSk7CisKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5U
ZXh0Rm9yQ29udGV4dChzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKTsKKyAgICBTdHJpbmcgdGV4dEJl
Zm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGly
ZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbkV4dGVuZGVk
Q29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpOworICAgIFN0cmlu
ZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3Rl
cnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi5lbmQoKSwgc2VsZWN0aW9uRXh0
ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKTsKIAogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uQ29udGV4dENhbGxiYWNrKHNl
bGVjdGVkVGV4dCwgdGV4dEJlZm9yZSwgdGV4dEFmdGVyLCBjYWxsYmFja0lEKSk7CiB9CkBAIC05
ODgsOCArOTkyLDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZUVkaXREcmFnKCkKICAgICBh
dXRvIGZyYW1lID0gbWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpKTsKICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIG1fcGVuZGlu
Z0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFu
Z2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIGF1dG8gY29s
bGFwc2VkUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IHNlbGVjdGlvblJhbmdlLT5lbmQsIHNlbGVjdGlv
blJhbmdlLT5lbmQgfTsKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKGNvbGxhcHNlZFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2Uo
c2VsZWN0aW9uUmFuZ2UtPmVuZCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICAgICAgbV9yYW5nZUZvckRyb3BT
bmFwc2hvdCA9IFdURk1vdmUoc2VsZWN0aW9uUmFuZ2UpOwogICAgIH0KIApAQCAtMTExMywxNSAr
MTExNiwxNCBAQCB2b2lkIFdlYlBhZ2U6OmhhbmRsZVN0eWx1c1NpbmdsZVRhcEF0UG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50NgogICAgIGlmIChyZW5kZXJlci0+aXNS
ZXBsYWNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0LmxvY2FsUG9pbnQoKSwgbnVs
bHB0cik7CisgICAgYXV0byBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGhp
dFRlc3QubG9jYWxQb2ludCgpLCBudWxscHRyKTsKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
CiAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwot
Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UocG9zaXRpb24pOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Uu
cHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKCpyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwog
ICAgIGF1dG8gaW1hZ2UgPSBmcmFtZS5lZGl0b3IoKS5pbnNlcnRFZGl0YWJsZUltYWdlKCk7CiAg
ICAgZnJhbWUuZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQoaW1hZ2UuZ2V0KCkpOwogfQpA
QCAtMTM3MSw3ICsxMzczLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25z
dCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5
cGUsIGdlc3R1cmVTdGF0ZSwgeyB9LCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
cmFuZ2U7CiAgICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBmbGFnczsKICAgICBHZXN0dXJl
UmVjb2duaXplclN0YXRlIHdrR2VzdHVyZVN0YXRlID0gc3RhdGljX2Nhc3Q8R2VzdHVyZVJlY29n
bml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKTsKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEdlc3R1
cmVUeXBlPihnZXN0dXJlVHlwZSkpIHsKQEAgLTEzODUsNDAgKzEzODcsMzYgQEAgdm9pZCBXZWJQ
YWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBl
IGdlc3R1cmVUeXBlLAogICAgICAgICAgICAgZmxhZ3MgPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlv
bnMoc3RhcnRQb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkg
IT0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSA/IFBo
cmFzZUJvdW5kYXJ5Q2hhbmdlZCA6IE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4geyB9OwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBmbGFncyA9IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZDsKLSAg
ICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pOwotICAgIH0KKyAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRp
b24pOwogICAgICAgICBicmVhazsKKyAgICB9CiAKLSAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVG
aW5nZXJUYXA6Ci0gICAgeworICAgIGNhc2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdlclRhcDogewog
ICAgICAgICBhdXRvIFthZGp1c3RlZFBvc2l0aW9uLCB3aXRoaW5Xb3JkQm91bmRhcnldID0gd29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3Jvc3NpbmdMaW5lKHBvc2l0aW9uKTsKICAgICAg
ICAgaWYgKHdpdGhpbldvcmRCb3VuZGFyeSA9PSBXaXRoaW5Xb3JkQm91bmRhcnk6OlllcykKICAg
ICAgICAgICAgIGZsYWdzID0gV29yZElzTmVhclRhcDsKLSAgICAgICAgaWYgKGFkanVzdGVkUG9z
aXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIGFkanVzdGVkUG9zaXRpb24sIGFkanVzdGVkUG9zaXRpb24pOwotICAg
IH0KKyAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoYWRqdXN0ZWRQb3NpdGlvbik7CiAg
ICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgR2VzdHVyZVR5cGU6OkxvdXBlOgogICAg
ICAgICBpZiAocG9zaXRpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICAgICAgcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24p
OwotICAgICAgICBlbHNlCisgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3Np
dGlvbik7CisgICAgICAgIGVsc2UgewogI2lmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICAg
ICAgICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKICNlbHNlCiAg
ICAgICAgICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0YXRlKSB7Ci0gICAgICAgICAgICBjYXNlIEdl
c3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBib3Vu
ZGFyeSA9ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9z
dGFydGluZ0dlc3R1cmVSYW5nZSA9IFNpbXBsZVJhbmdlIHsgYm91bmRhcnksIGJvdW5kYXJ5IH07
CisgICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuOgorICAgICAg
ICAgICAgICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRp
b24pOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDaGFuZ2VkOgogICAgICAgICAgICAgICAgIGlm
IChtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gc3Rh
cnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+
c3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCBwb3NpdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgc3RhcnQsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhcnQgPSBt
X3N0YXJ0aW5nR2VzdHVyZVJhbmdlLT5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihzdGFydCkgPCBwb3NpdGlvbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBwb3NpdGlvbik7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBzdGFy
dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpFbmRlZDoKQEAgLTE0MzEsNiArMTQyOSw3
IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50
LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICNlbmRpZgorICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBH
ZXN0dXJlVHlwZTo6VGFwQW5kQUhhbGY6CkBAIC0xNDQ1LDExICsxNDQ0LDExIEBAIHZvaWQgV2Vi
UGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlw
ZSBnZXN0dXJlVHlwZSwKICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpDaGFu
Z2VkOgogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRXb3JkUmFuZ2UpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqbV9jdXJyZW50
V29yZFJhbmdlKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IHJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpCi0gICAgICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KHBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkpOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gcmFuZ2UtPmVuZFBvc2l0aW9u
KCkpCi0gICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChwb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpKTsKKyAgICAgICAgICAgIHJhbmdlID0gbV9jdXJyZW50V29yZFJhbmdlOworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uIDwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFy
dCkpCisgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBvaW50KHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS0+ZW5kKSkKKyAgICAgICAgICAgICAgICByYW5nZS0+ZW5kID0gKm1ha2VC
b3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkVuZGVkOgogICAgICAgICBjYXNlIEdlc3R1cmVSZWNv
Z25pemVyU3RhdGU6OkNhbmNlbGxlZDoKQEAgLTE0NjYsNyArMTQ2NSw3IEBAIHZvaWQgV2ViUGFn
ZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBn
ZXN0dXJlVHlwZSwKICAgICAgICAgICAgIC8vIERvdWJsZS10YXAgYXQgZW5kIG9mIGxpbmUgb25s
eSBwbGFjZXMgaW5zZXJ0aW9uIHBvaW50IHRoZXJlLgogICAgICAgICAgICAgLy8gVGhpcyBoZWxw
cyB0byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5kcyBvZiBsaW5lcywKICAgICAg
ICAgICAgIC8vIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCi0gICAgICAgICAgICByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7Cisg
ICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9u
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xNDc5LDkgKzE0NzgsOCBAQCB2b2lkIFdlYlBhZ2U6OnNl
bGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVy
ZVR5cGUsCiAgICAgY2FzZSBHZXN0dXJlVHlwZTo6T25lRmluZ2VyVHJpcGxlVGFwOgogICAgICAg
ICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6
TGluZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAg
ICAgICAvLyBUcmlwbGUtdGFwIGF0IGVuZCBvZiBsaW5lIG9ubHkgcGxhY2VzIGluc2VydGlvbiBw
b2ludCB0aGVyZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0
IGZvciBwYXN0aW5nIGF0IGVuZHMgb2YgbGluZXMsCi0gICAgICAgICAgICAvLyBwYXJhZ3JhcGhz
LCBhbmQgZG9jdW1lbnRzLgotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgLy8gVGhpcyBo
ZWxwcyB0byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5kcyBvZiBsaW5lcywgcGFy
YWdyYXBocywgYW5kIGRvY3VtZW50cy4KKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHBvc2l0aW9uKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IGVuY2xv
c2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpQYXJh
Z3JhcGhHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICAgICAg
YnJlYWs7CkBAIC0xNDkwLDEyICsxNDg4LDEyIEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdl
c3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmln
Z2VyZWQpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdl
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0
ZSwgZmxhZ3MsIGNhbGxiYWNrSUQpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VG
b3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUsIGNvbnN0IEludFBvaW50
JiBwb2ludEluUm9vdFZpZXdDb29yZGluYXRlcywgYm9vbCBiYXNlSXNTdGFydCkKK3N0YXRpYyBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhG
cmFtZSYgZnJhbWUsIGNvbnN0IEludFBvaW50JiBwb2ludEluUm9vdFZpZXdDb29yZGluYXRlcywg
Ym9vbCBiYXNlSXNTdGFydCkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGV4aXN0aW5nU2VsZWN0
aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHNlbGVjdGlvblN0YXJ0ID0gZXhpc3RpbmdTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CkBAIC0x
NTE0LDcgKzE1MTIsNyBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUZvclBvaW50SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UAogICAgIH0KICAgICAKICAg
ICBWaXNpYmxlUG9zaXRpb24gcmVzdWx0OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogCiAgICAgY29uc3RleHByIE9wdGlvblNldDxI
aXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGU+IGhpdFR5cGUgeyBIaXRUZXN0UmVxdWVzdDo6UmVh
ZE9ubHksIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUsIEhpdFRlc3RSZXF1ZXN0OjpBbGxvd1Zpc2li
bGVDaGlsZEZyYW1lQ29udGVudE9ubHkgfTsKICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3QgPSBm
cmFtZS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludEluRG9jdW1lbnQs
IGhpdFR5cGUpOwpAQCAtMTUyOCwyMyArMTUyNiwyMSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiBy
YW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50
UAogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uU3RhcnQubmV4dCgpOwogICAgICAgICBl
bHNlIGlmICgmc2VsZWN0aW9uU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPnRy
ZWVTY29wZSgpICE9ICZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkpCiAgICAgICAg
ICAgICByZXN1bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZvckVuZChyZXN1
bHQuZGVlcEVxdWl2YWxlbnQoKSwgc2VsZWN0aW9uU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250
YWluZXJOb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkK
LSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc2Vs
ZWN0aW9uU3RhcnQsIHJlc3VsdCk7CisKKyAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
c2VsZWN0aW9uU3RhcnQsIHJlc3VsdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNvbXBh
cmVQb3NpdGlvbnMoc2VsZWN0aW9uRW5kLCByZXN1bHQpIDw9IDApCiAgICAgICAgICAgICByZXN1
bHQgPSBzZWxlY3Rpb25FbmQucHJldmlvdXMoKTsKICAgICAgICAgZWxzZSBpZiAoJmhpdFRlc3Qu
dGFyZ2V0Tm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmc2VsZWN0aW9uRW5kLmRlZXBFcXVpdmFsZW50
KCkuYW5jaG9yTm9kZSgpLT50cmVlU2NvcGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IFZpc2li
bGVTZWxlY3Rpb246OmFkanVzdFBvc2l0aW9uRm9yU3RhcnQocmVzdWx0LmRlZXBFcXVpdmFsZW50
KCksIHNlbGVjdGlvbkVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQuZGVlcEVxdWl2YWxlbnQo
KSwgc2VsZWN0aW9uRW5kKTsKKworICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShyZXN1
bHQsIHNlbGVjdGlvbkVuZCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiByYW5nZTsKIH0KIAot
c3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1l
KiBmcmFtZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgYm9vbCBiYXNlSXNTdGFy
dCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgYm9vbCBiYXNlSXNTdGFydCwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBTZWxlY3Rpb25EaXJlY3Rpb24gc2FtZURpcmVjdGlv
biA9IGJhc2VJc1N0YXJ0ID8gU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIDogU2VsZWN0aW9u
RGlyZWN0aW9uOjpCYWNrd2FyZDsKICAgICBTZWxlY3Rpb25EaXJlY3Rpb24gb3Bwb3NpdGVEaXJl
Y3Rpb24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQgOiBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQ7CkBAIC0xNTU0LDcgKzE1NTAsNyBAQCBzdGF0aWMgUmVm
UHRyPFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBj
b25zdCBWaXNpYmxlUAogCiAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVudCwg
VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIHNhbWVEaXJlY3Rpb24pKSB7CiAgICAg
ICAgIC8vIFRoaXMgaXMgYSB3b3JkIGJvdW5kYXJ5LiBMZWF2ZSBzZWxlY3Rpb24gd2hlcmUgaXQg
aXMuCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIH0KIAogICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShleHRlbnQsIFRleHRH
cmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBvcHBvc2l0ZURpcmVjdGlvbikpIHsKQEAgLTE1
NjksNyArMTU2NSw5IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlG
b3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQCiAgICAgICAgICYmIGF0Qm91
bmRhcnlPZkdyYW51bGFyaXR5KHdvcmRCb3VuZGFyeSwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIHNhbWVEaXJlY3Rpb24pCiAgICAgICAgICYmIGluaXRpYWxFeHRlbnQgIT0gd29y
ZEJvdW5kYXJ5KSB7CiAgICAgICAgIGV4dGVudCA9IHdvcmRCb3VuZGFyeTsKLSAgICAgICAgcmV0
dXJuIChiYXNlIDwgZXh0ZW50KSA/IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBi
YXNlLCBleHRlbnQpIDogUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGV4dGVudCwg
YmFzZSk7CisgICAgICAgIGlmICghKGJhc2UgPCBleHRlbnQpKQorICAgICAgICAgICAgc3RkOjpz
d2FwKGJhc2UsIGV4dGVudCk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoYmFzZSwg
ZXh0ZW50KTsKICAgICB9CiAgICAgLy8gQ29udmVyc2VseSwgaWYgdGhlIGluaXRpYWwgZXh0ZW50
IGVxdWFscyB0aGUgY3VycmVudCB3b3JkIGJvdW5kYXJ5LCB0aGVuCiAgICAgLy8gcnVuIHRoZSBy
ZXN0IG9mIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGlmIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGV4dGVu
ZApAQCAtMTU4OSw5ICsxNTg3LDExIEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3Jk
Qm91bmRhcnlGb3JQb3NpdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQCiAgICAgaWYg
KGV4dGVudC5pc051bGwoKSB8fCBleHRlbnQgPT0gYmFzZSkKICAgICAgICAgZXh0ZW50ID0gd29y
ZEJvdW5kYXJ5OwogICAgIGlmIChleHRlbnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIChiYXNlIDwg
ZXh0ZW50KSA/IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBiYXNlLCBleHRlbnQp
IDogUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGV4dGVudCwgYmFzZSk7CisgICAg
aWYgKCEoYmFzZSA8IGV4dGVudCkpCisgICAgICAgIHN0ZDo6c3dhcChiYXNlLCBleHRlbnQpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoYmFzZSwgZXh0ZW50KTsKIH0KIAogSW50UmVjdCBX
ZWJQYWdlOjpyb290Vmlld0JvdW5kc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkK
QEAgLTE3MDYsMzEgKzE3MDYsMjggQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRo
VG91Y2hlcyhjb25zdCBJbnRQb2ludCYgcG9pbnQsIFNlbGVjdGlvblRvdWNoIHMKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHJlc3VsdDsKLSAgICBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IGZsYWdzOwotCiAg
ICAgaWYgKHNob3VsZERpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNXaGVuTW9kaWZ5aW5nU2Vs
ZWN0aW9uKCkpCiAgICAgICAgIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rp
b25HZXN0dXJlKHNlbGVjdGlvblRvdWNoLCBwb2ludCk7CiAKKyAgICBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gcmFuZ2U7CisgICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBmbGFnczsKKwogICAg
IHN3aXRjaCAoc2VsZWN0aW9uVG91Y2gpIHsKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpTdGFy
dGVkOgogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTm90TW92aW5nOgogICAgICAgICBi
cmVhazsKLSAgICAKKwogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkOgotICAgICAgICBp
ZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkgewot
ICAgICAgICAgICAgcmVzdWx0ID0gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKHBvc2l0
aW9uKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICAg
ICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQsIHJlc3Vs
dCk7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBs
ZVJhbmdlKGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihwb3NpdGlvbikpOworICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRp
bmF0ZXMoZnJhbWUsIHBvaW50LCBiYXNlSXNTdGFydCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWRNb3ZpbmdGb3J3YXJkOgogICAgICAgICByYW5nZSA9
IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbigmZnJhbWUsIHBvc2l0aW9uLCBiYXNlSXNT
dGFydCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAorCiAgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWRNb3ZpbmdCYWNrd2FyZDoKICAg
ICAgICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oJmZyYW1lLCBwb3Np
dGlvbiwgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwogICAgICAg
ICBicmVhazsKQEAgLTE3MzksOCArMTczNiw5IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0
aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3VjaCBzCiAg
ICAgICAgIHJhbmdlID0gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhmcmFtZSwg
cG9pbnQsIGJhc2VJc1N0YXJ0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgaWYgKHJh
bmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdl
dCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
IAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VG91Y2hlc0NhbGxiYWNrKHBvaW50
LCBzZWxlY3Rpb25Ub3VjaCwgZmxhZ3MsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTE3NDgsMTUgKzE3
NDYsMTIgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIFNlbGVjdGlvblRvdWNoIHMKIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0
aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGZyb20sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiB0bywgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsIEdlc3R1cmVSZWNvZ25pemVy
U3RhdGUgZ2VzdHVyZVN0YXRlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUm
IGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
LSAgICBWaXNpYmxlUG9zaXRpb24gZnJvbVBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZnJvbSkpOwotICAgIFZp
c2libGVQb3NpdGlvbiB0b1Bvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQo
ZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHModG8pKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlOwotICAgIGlmIChmcm9tUG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgdG9Qb3NpdGlvbi5p
c05vdE51bGwoKSkgewotICAgICAgICBpZiAoZnJvbVBvc2l0aW9uIDwgdG9Qb3NpdGlvbikKLSAg
ICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZnJvbVBv
c2l0aW9uLCB0b1Bvc2l0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB0b1Bvc2l0aW9uLCBmcm9tUG9zaXRpb24p
OwotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgp
LCBmcm9tUG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIGF1dG8gZnJvbVBvc2l0aW9u
ID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1Rv
Q29udGVudHMoZnJvbSkpOworICAgIGF1dG8gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3Np
dGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHRvKSk7CisgICAg
aWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9u
KSkgeworICAgICAgICBpZiAoIShmcm9tUG9zaXRpb24gPCB0b1Bvc2l0aW9uKSkKKyAgICAgICAg
ICAgIHN0ZDo6c3dhcChyYW5nZS0+c3RhcnQsIHJhbmdlLT5lbmQpOworICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBmcm9tUG9zaXRpb24uYWZmaW5pdHko
KSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwogICAgIH0KIAogICAgIC8vIFdlIGNhbiB1c2UgdGhlIHNhbWUgY2FsbGJhY2sg
Zm9yIHRoZSBnZXN0dXJlcyB3aXRoIG9uZSBwb2ludC4KQEAgLTE3ODAsMTMgKzE3NzUsMTMgQEAg
dm9pZCBXZWJQYWdlOjpleHRlbmRTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBDb21wbGV0aW9uSGEKICAgICBJbnRQb2ludCBlbmRMb2NhdGlvbkZvclN5bnRo
ZXRpY01vdXNlRXZlbnRzOwogICAgIGJvb2wgc2hvdWxkRGlzcGF0Y2hNb3VzZUV2ZW50cyA9IHNo
b3VsZERpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNXaGVuTW9kaWZ5aW5nU2VsZWN0aW9uKCk7
CiAgICAgaWYgKHNob3VsZERpc3BhdGNoTW91c2VFdmVudHMpIHsKLSAgICAgICAgYXV0byBzdGFy
dExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRz
VG9Sb290VmlldyhWaXNpYmxlUG9zaXRpb24od29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLmFi
c29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7Ci0gICAgICAgIGVuZExvY2F0aW9uRm9yU3lu
dGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhWaXNp
YmxlUG9zaXRpb24od29yZFJhbmdlLT5lbmRQb3NpdGlvbigpKS5hYnNvbHV0ZUNhcmV0Qm91bmRz
KCkpLmNlbnRlcigpOworICAgICAgICBhdXRvIHN0YXJ0TG9jYXRpb25Gb3JTeW50aGV0aWNNb3Vz
ZUV2ZW50cyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlv
bihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5zdGFydCkpLmFic29sdXRl
Q2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7CisgICAgICAgIGVuZExvY2F0aW9uRm9yU3ludGhldGlj
TW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxlUG9z
aXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kKSkuYWJzb2x1
dGVDYXJldEJvdW5kcygpKS5jZW50ZXIoKTsKICAgICAgICAgZGlzcGF0Y2hTeW50aGV0aWNNb3Vz
ZUV2ZW50c0ZvclNlbGVjdGlvbkdlc3R1cmUoU2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQsIHN0YXJ0
TG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyk7CiAgICAgICAgIGRpc3BhdGNoU3ludGhl
dGljTW91c2VFdmVudHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoOjpNb3ZlZCwg
ZW5kTG9jYXRpb25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50cyk7CiAgICAgfQogCi0gICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KHdvcmRSYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgaWYgKHNob3Vs
ZERpc3BhdGNoTW91c2VFdmVudHMpCiAgICAgICAgIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVu
dHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoOjpFbmRlZCwgZW5kTG9jYXRpb25G
b3JTeW50aGV0aWNNb3VzZUV2ZW50cyk7CkBAIC0xODExLDEwICsxODA2LDEyIEBAIHZvaWQgV2Vi
UGFnZTo6c2VsZWN0V29yZEJhY2t3YXJkKCkKICAgICBpZiAoIWZyYW1lLnNlbGVjdGlvbigpLmlz
Q2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5
KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpCYWNrd2FyZCk7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
c3RhcnRQb3NpdGlvbiAhPSBwb3NpdGlvbikKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydFBvc2l0
aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBh
dXRvIHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCk7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKKyAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc051bGwo
KSB8fCBzdGFydFBvc2l0aW9uID09IHBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShzdGFydFBv
c2l0aW9uLCBwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIH0KIAogdm9p
ZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzIsNyArMTgyOSw3
IEBAIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgc3RhcnRQb3NpdGlvbiAhPSBwb3NpdGlvbikK
LSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5h
ZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCkBAIC0xOTg0LDcgKzE5ODEs
NyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zm
c2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eQogICAgIH0KIAogICAgIFZlY3RvcjxXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKLSAgICByYW5nZS0+Y29sbGVjdFNlbGVj
dGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhzZWxlY3Rpb25SZWN0cyk7CisgICAg
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlv
bkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOwogICAgIGNvbnZlcnRDb250ZW50VG9Sb290
Vmlld1NlbGVjdGlvblJlY3RzKCpmcmFtZS52aWV3KCksIHNlbGVjdGlvblJlY3RzKTsKICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soc2VsZWN0
aW9uUmVjdHMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIwNjQsNyArMjA2MSw3IEBAIHZvaWQgV2Vi
UGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2lu
dCwgYm9vbCBpc0ludGVyCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBv
c2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dp
dGhGb2N1c2VkRWxlbWVudCk7CiAgICAgCiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQot
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUo
KmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJl
ZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtMjA3Niw3ICsyMDczLDcgQEAg
dm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2kKICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsK
ICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShw
b3NpdGlvbiwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbik7CiAgICAgICAgIGlmIChwb3NpdGlvbi5p
c05vdE51bGwoKSkKLSAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5w
dHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgVVBTVFJFQU0sIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIwOTAsNyArMjA4Nyw3
IEBAIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdl
YkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFuCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbiA9IChpc0ZvcndhcmQpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZUVuZCgpIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAg
ICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9z
aXRpb24sIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAgICAgICBpZiAocG9zaXRpb24uaXNO
b3ROdWxsKCkpCi0gICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRy
KCksIGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgICAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3Np
dGlvbiksIGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0yMDk5LDI1ICsyMDk2LDEzIEBAIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChGcmFt
ZSYgZnJhbWUsIGNvbnN0IFdlCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQpOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFRleHRH
cmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0byBib3VuZGFy
eSA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKCFib3VuZGFyeSkK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7IHsgKmJv
dW5kYXJ5LCAqYm91bmRhcnkgfSB9OwotICAgIH0KLSAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6
V29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9z
aXRpb24ocG9zaXRpb24pOwotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgKnJhbmdlIH07Ci0gICAgfQorICAgIGNh
c2UgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgcmV0dXJu
IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6Oldv
cmRHcmFudWxhcml0eToKKyAgICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3Np
dGlvbik7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNlR3JhbnVsYXJpdHk6Ci0g
ICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OiB7Ci0gICAgICAg
IGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdy
YW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBpZiAoIXJh
bmdlKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsg
KnJhbmdlIH07Ci0gICAgfQorICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFu
dWxhcml0eToKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShw
b3NpdGlvbiwgZ3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAg
Y2FzZSBUZXh0R3JhbnVsYXJpdHk6OkRvY3VtZW50R3JhbnVsYXJpdHk6CiAgICAgICAgIC8vIEZJ
WE1FOiBNYWtlcyBubyBzZW5zZSB0aGF0IHRoaXMgbXV0YXRlcyB0aGUgY3VycmVudCBzZWxlY3Rp
b24gYW5kIHJldHVybnMgbnVsbC4KICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0QWxs
KCk7CkBAIC0yMTY0LDcgKzIxNDksNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3Jh
bnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgVwogICAgIGF1
dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoZnJhbWUsIHBv
aW50LCBncmFudWxhcml0eSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAg
aWYgKHJhbmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKCpyYW5nZSwgVVBTVFJFQU0sIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKICAgICBtX2luaXRpYWxTZWxlY3Rpb24gPSByYW5nZTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQpAQCAtMjE5NiwxMCArMjE4MSw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0
aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmCiAg
ICAgZWxzZSBpZiAocG9zaXRpb24gPCBpbml0aWFsU2VsZWN0aW9uU3RhcnRQb3NpdGlvbikKICAg
ICAgICAgc2VsZWN0aW9uU3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obmV3UmFu
Z2UtPnN0YXJ0KTsKIAotICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc05vdE51bGwoKSAmJiBzZWxl
Y3Rpb25FbmQuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdl
IHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50
KHNlbGVjdGlvbkVuZCkgfTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwotICAg
IH0KKyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwg
c2VsZWN0aW9uRW5kKSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6VW5zaWduZWRDYWxsYmFjayhzZWxlY3Rpb25TdGFydCA9PSBpbml0aWFsU2VsZWN0aW9u
U3RhcnRQb3NpdGlvbiwgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjIxNCw3ICsyMTk3LDYgQEAgdm9p
ZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCBib28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2U7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0OwogICAg
IFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQ7CiAgICAgCkBAIC0yMjQ4LDExICsyMjMwLDgg
QEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50LCBib28KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBp
ZiAoc2VsZWN0aW9uU3RhcnQuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgp
KQotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVj
dGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotCi0gICAgaWYgKHJhbmdlKQotICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25FbmQpKQorICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKG1fc2VsZWN0aW9uQW5jaG9yID09IFN0YXJ0LCBjYWxs
YmFja0lEKSk7CiB9CkBAIC0yMzAyLDEyICsyMjgxLDExIEBAIHZvaWQgV2ViUGFnZTo6cmVwbGFj
ZVNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4
dCkKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwogICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXND
YXJldCgpCiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCkpCi0gICAgICAgIDogY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAgIGlmIChwbGFp
blRleHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkKKyAgICAgICAgOiBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlm
IChwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZSkgIT0gb2xkVGV4dCkKICAgICAgICAgcmV0
dXJuOwotICAgIAogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
dHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2Uu
Z2V0KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFu
Z2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBm
cmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKIH0KQEAgLTIz
MjcsMTQgKzIzMDUsMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNlRGljdGF0ZWRUZXh0KGNvbnN0
IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogICAgICAgICBwb3NpdGlv
biA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChmcmFtZS5kb2N1bWVudCgpKTsKLSAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCkpOwogCi0gICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UucHRyKCkpICE9IG9s
ZFRleHQpCisgICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpICE9IG9sZFRleHQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbm90aWZ5IHRoZSBjbGll
bnQgdGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIHVudGlsIHdlIGFyZSBkb25lIGluc2Vy
dGluZyB0aGUgbmV3IHRleHQuCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9u
Q2hhbmdlcyh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJh
bmdlLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFu
Z2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBm
cmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKIH0KQEAgLTIz
NDcsMjcgKzIzMjUsMjUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRh
KGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBDb20KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgYXV0byByYW5nZSA9IHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihwb3NpdGlvbik7CisgICAgYXV0byByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgaWYg
KCFyYW5nZSkgewogICAgICAgICByZXBseSh7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgp
KTsKKyAgICBhdXRvIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpOwog
ICAgIGNvbnN0IHVuc2lnbmVkIG1heFNlYXJjaEF0dGVtcHRzID0gNTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgIGkgPCBtYXhTZWFyY2hBdHRlbXB0cyAmJiB0ZXh0Rm9yUmFuZ2UgIT0gdGV4dEZv
ckF1dG9jb3JyZWN0aW9uOyArK2kpCi0gICAgewotICAgICAgICBwb3NpdGlvbiA9IHJhbmdlLT5z
dGFydFBvc2l0aW9uKCkucHJldmlvdXMoKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgp
IHx8IHBvc2l0aW9uID09IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1wdHMgJiYgdGV4dEZvclJhbmdlICE9IHRleHRGb3JB
dXRvY29ycmVjdGlvbjsgKytpKSB7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5wcmV2aW91cygpOworICAgICAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkgfHwgcG9zaXRpb24gPT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLT5zdGFydCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9z
aXRpb24pLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAg
dGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAg
IHJhbmdlID0geyB7IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbiktPnN0YXJ0LCByYW5n
ZS0+ZW5kIH0gfTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChy
YW5nZSk7CiAgICAgfQogCiAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3Rz
OwogICAgIGlmICh0ZXh0Rm9yUmFuZ2UgPT0gdGV4dEZvckF1dG9jb3JyZWN0aW9uKQotICAgICAg
ICByYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3RzKTsKKyAgICAgICAg
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJl
Y3RzKTsKIAogICAgIGF1dG8gcm9vdFZpZXdTZWxlY3Rpb25SZWN0cyA9IHNlbGVjdGlvblJlY3Rz
Lm1hcChbJl0oY29uc3QgYXV0byYgc2VsZWN0aW9uUmVjdCkgLT4gRmxvYXRSZWN0IHsgcmV0dXJu
IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHNlbGVjdGlvblJlY3QucmVjdCgpKTsg
fSk7CiAKQEAgLTI0MTMsMTQgKzIzODksMTQgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3Jy
ZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAg
ICBpZiAoIWZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlOwogICAgIFN0cmluZyB0ZXh0Rm9yUmFuZ2U7CiAgICAgYXV0byBvcmlnaW5h
bFRleHRXaXRoRm9sZGVkUXVvdGVNYXJrcyA9IGZvbGRRdW90ZU1hcmtzKG9yaWdpbmFsVGV4dCk7
CiAKICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCk7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24o
cG9zaXRpb24pOwotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJh
bmdlLmdldCgpKTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChy
YW5nZSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiAnb3JpZ2luYWxUZXh0JyBpcyBub3QgdGhl
IHNhbWUgYXMgJ3RleHRGb3JSYW5nZScgd2UgbmVlZCB0byBtb3ZlICdyYW5nZScKICAgICAgICAg
Ly8gZm9yd2FyZCBzdWNoIHRoYXQgaXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uIGFz
IG11Y2ggYXMgcG9zc2libGUuCkBAIC0yNDMwLDMzICsyNDA2LDMzIEBAIGJvb2wgV2ViUGFnZTo6
YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29u
c3QgU3RyaW5nCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygp
OwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHBv
c2l0aW9uID0gc3RhcnRPZkRvY3VtZW50KGZyYW1lLmRvY3VtZW50KCkpOwotICAgICAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICB0ZXh0Rm9yUmFu
Z2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpKTsKKyAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRl
eHQocmFuZ2UpOwogICAgICAgICAgICAgdW5zaWduZWQgbG9vcENvdW50ID0gMDsKICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIG1heFBvc2l0aW9uc0F0dGVtcHRzID0gMTA7CiAgICAgICAgICAg
ICB3aGlsZSAodGV4dEZvclJhbmdlLmxlbmd0aCgpICYmIHRleHRGb3JSYW5nZS5sZW5ndGgoKSA+
IG9yaWdpbmFsVGV4dC5sZW5ndGgoKSAmJiBsb29wQ291bnQgPCBtYXhQb3NpdGlvbnNBdHRlbXB0
cykgewogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgpOwogICAgICAg
ICAgICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBwb3NpdGlvbiA+PSBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQotICAgICAgICAgICAgICAgICAgICByYW5n
ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gV1RGOjpudWxsb3B0Owog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5U
ZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpKTsKKyAgICAgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250
ZXh0KHJhbmdlKTsKICAgICAgICAgICAgICAgICBsb29wQ291bnQrKzsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Rm9yUmFuZ2UuaXNFbXB0eSgpICYmIHJhbmdlICYmICFy
YW5nZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgICAgIC8vIElmICdyYW5nZScgZG9lcyBub3Qg
aW5jbHVkZSBhbnkgdGV4dCBidXQgaXQgaXMgbm90IGNvbGxhcHNlZCwgd2UgbmVlZCB0byBzZXQK
ICAgICAgICAgICAgIC8vICdyYW5nZScgdG8gbWF0Y2ggdGhlIHNlbGVjdGlvbi4gT3RoZXJ3aXNl
IG5vbi10ZXh0IG5vZGVzIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAgIHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICAgICAgICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gUmFuZ2Ugc2VsZWN0aW9uLgotICAgICAgICByYW5nZSA9IGNy
ZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKTsKKyAgICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQo
cmFuZ2UuZ2V0KCkpOworICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0
KHJhbmdlKTsKICAgICB9CiAKICAgICBpZiAoZm9sZFF1b3RlTWFya3ModGV4dEZvclJhbmdlKSAh
PSBvcmlnaW5hbFRleHRXaXRoRm9sZGVkUXVvdGVNYXJrcykKQEAgLTI0NjUsOSArMjQ0MSw5IEBA
IGJvb2wgV2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gQ29ycmVjdGx5IGRldGVybWluZSBhZmZp
bml0eSwgdXNpbmcgbG9naWMgY3VycmVudGx5IG9ubHkgcHJlc2VudCBpbiBWaXNpYmxlUG9zaXRp
b24KICAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBET1dOU1RSRUFNOwogICAgIGlmIChyYW5nZSAm
JiByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIGFmZmluaXR5ID0gVmlzaWJsZVBvc2l0aW9u
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIFVQU1RSRUFNKS5hZmZpbml0eSgpOworICAgICAgICBh
ZmZpbml0eSA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFu
Z2UtPnN0YXJ0KSwgVVBTVFJFQU0pLmFmZmluaXR5KCk7CiAgICAgCi0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgYWZmaW5pdHksIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBhZmZpbml0eSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rpb24sIDAsIG9y
aWdpbmFsVGV4dC5pc0VtcHR5KCkgPyBUZXh0RXZlbnRJbnB1dEtleWJvYXJkIDogVGV4dEV2ZW50
SW5wdXRBdXRvY29tcGxldGlvbik7CiAgICAgZWxzZSBpZiAob3JpZ2luYWxUZXh0Lmxlbmd0aCgp
KQpAQCAtMjQ5NCwxMiArMjQ3MCw4IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdl
OjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRl
eHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigp
LmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEJlZm9yZTsK
LSAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9u
KSkKLSAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KHsg
Y29tcG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9KTsKLSAgICAgICAgU3RyaW5nIG1hcmtl
ZFRleHRBZnRlcjsKLSAgICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
UG9zaXRpb24pKQotICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29u
dGV4dCh7ICplbmQsIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCB9KTsKKyAgICAgICAgYXV0byBtYXJr
ZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2ltcGxlUmFuZ2UoY29tcG9z
aXRpb25SYW5nZS0+c3RhcnQsIHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgYXV0byBtYXJrZWRU
ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShlbmRQb3NpdGlv
biwgY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAgIG1hcmtlZFRleHQgPSBtYXJrZWRU
ZXh0QmVmb3JlICsgc2VsZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAgICAgICBpZiAo
IW1hcmtlZFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0UmFuZ2UubG9j
YXRpb24gPSBtYXJrZWRUZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjY3Myw5ICsyNjQ1LDkgQEAg
c3RhdGljIHZvaWQgZGF0YURldGVjdG9yTGlua1Bvc2l0aW9uSW5mb3JtYXRpb24oRWxlbWVudCYg
ZWxlbWVudCwgSW50ZXJhY3Rpb25JbmYKICAgICBhdXRvIGxpbmtSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBsaW5rUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50
cyhlbGVtZW50KTsKICAgICBpbmZvLnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJh
bmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGxpbmtSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLAotICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0
TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKS5nZXQoKSk7CisgICAgICAgIGRh
dGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFj
a3dhcmQpKTsKICAgICBpbmZvLnRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VF
eHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5l
bmRQb3NpdGlvbigpLAotICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3Ro
LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpLmdldCgpKTsKKyAgICAgICAgZGF0YURldGVj
dGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSk7
CiB9CiAjZW5kaWYKIApAQCAtNDEwNSw3ICs0MDc3LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVT
ZWxlY3Rpb25XaXRoRGVsdGEoaW50NjRfdCBsb2NhdGlvbkRlbHRhLCBpbnQ2NF90IGxlbmd0aERl
bHQKIAogICAgIGF1dG8gbmV3U2VsZWN0aW9uUmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShuZXdTZWxl
Y3Rpb25Mb2NhdGlvbi51bnNhZmVHZXQoKSwgbmV3U2VsZWN0aW9uTGVuZ3RoLnVuc2FmZUdldCgp
KTsKICAgICBhdXRvIHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5n
ZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpLCBuZXdTZWxlY3Rpb25SYW5n
ZSk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJh
bmdlKHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSkucHRyKCksIERPV05TVFJFQU0sIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFu
Z2UsIERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCkBA
IC00MzkwLDcgKzQzNjIsNyBAQCB2b2lkIFdlYlBhZ2U6OmZvY3VzVGV4dElucHV0Q29udGV4dEFu
ZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGVsZW1lbnRDbwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGFyZ2V0
RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdn
ZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbi5tbQppbmRleCAyYjNkMTljOWRhN2JkNzdjYjdkYTc2ZTZkZmViNWQ1MWNlMzU0YmMxLi4z
YjBlYjk1NGUwOWFmZDhjNzMwNWZmYWVlMTI0MWYxN2YyMTJkMWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBv
c2l0aW9uLm1tCkBAIC0yOTIsNyArMjkyLDcgQEAgLSAoQk9PTCl3aXRoaW5UZXh0VW5pdE9mR3Jh
bnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbkkKIC8v
IGlzIGVuY2xvc2VkIGRlcGVuZHMgb24gdGhlIGdpdmVuIGRpcmVjdGlvbiwgdXNpbmcgdGhlIHNh
bWUgcnVsZSBhcyAtW1dlYlZpc2libGVQb3NpdGlvbiB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJp
dHk6aW5EaXJlY3Rpb25BdEJvdW5kYXJ5Ol0uCiAtIChET01SYW5nZSAqKWVuY2xvc2luZ1RleHRV
bml0T2ZHcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0
aW9uSWZBdEJvdW5kYXJ5OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsK
LSAgICByZXR1cm4ga2l0KGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShbc2VsZiBfdmlz
aWJsZVBvc2l0aW9uXSwgdG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVjdGlv
bkRpcmVjdGlvbihkaXJlY3Rpb24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChlbmNsb3NpbmdU
ZXh0VW5pdE9mR3JhbnVsYXJpdHkoW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51
bGFyaXR5KGdyYW51bGFyaXR5KSwgdG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkpOwog
fQogCiAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwb3NpdGlvbkF0U3RhcnRPckVuZE9mV29yZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCBlYTMwOTg5MjQ5OGYzZjY0
ZWYwZjA2NDhmMzU0NWM1NTg1MWI5Njk1Li44NTg0YzIzMWZlZjhjOGQ4YjcwNmU4Zjk2ZWQwOGQ3
Mzg4NTNkZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRN
TC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNDQs
NiArNDQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJUZXh0Q29udHJvbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xNTIsNyArMTUzLDcgQEAgLSAoRE9NRG9jdW1l
bnRGcmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0
cmluZyAqKW1hcmsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZyYWdt
ZW50V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewogICAgIC8vIEZJWE1FOiBTaW5jZSB0aGlz
IGlzIG5vdCBhIGNvbnRleHR1YWwgZnJhZ21lbnQsIGl0IHdvbid0IGhhbmRsZSB3aGl0ZXNwYWNl
IHByb3Blcmx5LgotICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3JlKHNl
bGYpLT5jcmVhdGVSYW5nZSgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVG
cmFnbWVudEZyb21UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqY29yZShzZWxm
KSksIHRleHQpLnB0cigpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggODEwMGFiZTZiYmY3ZDg2OThkYTZl
Yzc1YmQ4YmFmOGYwZWU0ZDY5MS4uNGYwNjgzNDYyMmI3MzJmZTZhNmNjNjRjN2M5NTVkYTIxNGYy
ZjY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0
ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRl
bnNpb25zLm1tCkBAIC03OCw5ICs3OCwxMCBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2UgKFVJ
S2l0RXh0ZW5zaW9ucykKIAogLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9u
OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICBSYW5nZSAqcmFu
Z2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7CisKICAgICBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKLSAgICBmcmFtZVNlbGVjdGlv
bi5tb3ZlVG8ocmFuZ2UpOworICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2lt
cGxlUmFuZ2UocmFuZ2UpKTsKICAgICAKICAgICBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5
OwogICAgIC8vIFVudGlsIFdlYktpdCBzdXBwb3J0cyB2ZXJ0aWNhbCBsYXlvdXQsICJkb3duIiBp
cyBlcXVpdmFsZW50IHRvICJmb3J3YXJkIGJ5IGEgbGluZSIgYW5kCkBAIC05MiwzMyArOTMsMzQg
QEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0
bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICAgICAgZGlyZWN0aW9uID0gV2ViVGV4dEFkanVz
dG1lbnRCYWNrd2FyZDsKICAgICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0R3JhbnVs
YXJpdHk6OkxpbmVHcmFudWxhcml0eTsKICAgICB9Ci0gICAgCisKICAgICBmb3IgKFVJbnQzMiBp
ID0gMDsgaSA8IGFtb3VudDsgaSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCAoV2ViQ29yZTo6U2VsZWN0aW9u
RGlyZWN0aW9uKWRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIAorCiAgICAgUG9zaXRpb24g
c3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlv
bigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGlmIChzdGFydC5jb250
YWluZXJOb2RlKCkpCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9k
ZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHJhbmdlLnNldFN0
YXJ0KCpzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKICAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmFuZ2UtPnNldEVuZCgq
ZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAg
ICAgcmFuZ2Uuc2V0RW5kKCplbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkpOwogfQogCiAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlv
bjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgUmFuZ2UgKnJh
bmdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOworCiAgICAg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247Ci0gICAgZnJhbWVTZWxlY3Rp
b24ubW92ZVRvKHJhbmdlKTsKLSAgICAKKyAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
bWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CisKICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFt
b3VudDsgaSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIChXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24p
ZGlyZWN0aW9uLCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5
KTsKLSAgICAKKwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9u
KCkuc3RhcnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQg
PSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKTsKICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByYW5nZS0+c2V0
U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkpOworICAgICAgICByYW5nZS5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKGVuZC5jb250YWluZXJOb2RlKCkp
Ci0gICAgICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHJhbmdlLnNldEVuZCgqZW5kLmNvbnRhaW5lck5v
ZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIH0KIAogLSAoRE9NTm9kZSAqKWZp
cnN0Tm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9w
ZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQppbmRleCA3MWMwNGRiMjI5MzdhMzMwZTFhNDczZjIxM2ZhYzgzYzk1NzMxZjBiLi5kM2Fl
N2Y2ZWY4M2QyMDhmMjY5YjZlMTYyZGJlMTQ1NDYyZGZiOTZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtNTIsNiArNTIsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5V2Vi
QXJjaGl2ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1No
YWRvd1Jvb3QuaD4KQEAgLTE4NCw3ICsxODUsNyBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2Ug
KFdlYkRPTVJhbmdlT3BlcmF0aW9ucykKIAogLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKIHsK
LSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFy
Y2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNvcmUoc2VsZikpXSBhdXRvcmVsZWFzZV07
CisgICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lXZWJB
cmNoaXZlOkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgqY29yZShzZWxmKSldIGF1dG9yZWxlYXNl
XTsKIH0KIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDM0ZTY4ZjBjM2Q1NzJiYTllNDNhZTUxOWY5
M2M0YjhhY2UwY2U4N2UuLjMzYTI2MDkyNjZhOWU5NTQ3ZWFjZDExYjQxN2Q0ZjJjYjExYmEwMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTMs
NiArOTMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29u
dGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlcldpZGdldC5oPgpAQCAtNzIyLDcgKzcyMyw3IEBAIC0gKE5TUmVjdClfZmlyc3RS
ZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShjb3JlKHJhbmdlKSkp
OworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JS
YW5nZShtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSk7CiB9CiAKIC0gKHZvaWQpX3Njcm9s
bERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCkBAIC0xNDc5LDcgKzE0ODAsNyBA
QCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6
KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaQogCiAgICAgYXV0byBjb3JlQ2xvc2VUeXBpbmcgPSBj
bG9zZVR5cGluZyA/IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzIDogRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObzsKICAgICBhdXRvIGNvcmVVc2VyVHJp
Z2dlcmVkID0gdXNlclRyaWdnZXJlZCA/IFVzZXJUcmlnZ2VyZWQgOiBOb3RVc2VyVHJpZ2dlcmVk
OwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIGNv
cmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dlcmVkKTsKKyAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShjb3JlKHJh
bmdlKSksIGNvcmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dlcmVk
KTsKICAgICBpZiAoIWNsb3NlVHlwaW5nKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5lbnN1cmVM
YXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpOwog
fQpAQCAtMTg3OSw3ICsxODgwLDcgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooRE9N
UmFuZ2UgKilyYW5nZQogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmlu
ZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRS
ZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUKIHsK
ICAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdl
KCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0
KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6
ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNl
OnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOm1hdGNoU3R5bGVdOwogfQogCkBAIC0xOTYyLDcgKzE5
NjMsNyBAQCAtIChCT09MKWhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uCiAtICh2b2lkKV9yZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDoo
Qk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7
CiAgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4
dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFj
ZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkBAIC0yMjcxLDcgKzIyNzIsOCBA
QCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3RvcjooZmxv
YXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKLSAgICByZXR1cm4ga2l0
KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgdGV4dCku
cHRyKCkpOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiByYW5nZSA/IGtp
dChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOwogfQog
CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JXZWJBcmNoaXZl
OihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCmluZGV4IDNhNWJiMDRiYzM0YjgxNmI5OWRjZTMzZGQ3MzA2NWVlYjY0ZTU0
ODYuLmExODU2OGVmNWI1ZGY4YTBhZDlhNGNlNGMyYjZjZWY2N2M0ODVlYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5NSw2ICsxOTUsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGhl
bWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJXaWRnZXQuaD4KQEAgLTc5MjksOCArNzkzMCw3IEBAIC0gKERPTVJhbmdlICopRE9NUmFu
Z2VPZlN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUbzooRE9NUmFuZ2UgKilwcmV2
aW91CiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPnJhbmdlT2ZTdHJpbmcoc3RyaW5nLCBjb3Jl
KHByZXZpb3VzUmFuZ2UpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSkuZ2V0KCkpOworICAgIHJldHVy
biBraXQoX3ByaXZhdGUtPnBhZ2UtPnJhbmdlT2ZTdHJpbmcoc3RyaW5nLCBtYWtlU2ltcGxlUmFu
Z2UoY29yZShwcmV2aW91c1JhbmdlKSksIGNvcmVPcHRpb25zKG9wdGlvbnMpKSk7CiB9CiAKIC0g
KHZvaWQpc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeTooQk9PTCltYWluRnJhbWVEb2N1bWVudFJl
YWR5CkBAIC04NDU2LDcgKzg0NTYsNyBAQCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZQogICAgICAg
ICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIGNvcmUoc2VsZWN0
aW9uQWZmaW5pdHkpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSht
YWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCmlu
ZGV4IDNkZGQwMGY3YWI3MjZlMGVlNDI5NGE5NTAyNjNjYWI1YzNmY2E0ZWYuLjYxYzAyMjdlMjhk
MjNhOTc2NmRkY2YyMDg4NDhkOTZhMjI0N2U4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L05vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGV4dENvbnRyb2wuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1Zpc2libGVTZWxlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2li
bGVVbml0cy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405536</attachid>
            <date>2020-07-29 17:57:17 -0700</date>
            <delta_ts>2020-07-30 09:17:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214793-20200729175716.patch</filename>
            <type>text/plain</type>
            <size>191021</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ4MzE3OGY5MmE2YjY0
OGFhMzZkYjkyMWVjNzc4MjM0Y2RlZjA4OS4uNWJkZWM1NWE5OTFjMTkzZWU5NmU3NDRmODM1YTQ0
OWVmZmFkYzViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNyBAQAorMjAyMC0wNy0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRnVydGhlciByZWR1Y3Rpb24g
aW4gdGhlIHVzZSBvZiBsaXZlIHJhbmdlcywgcGFydGljdWxhcmx5IGluIGhlYWRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnBlcmZvcm1UZXh0T3BlcmF0aW9uKTogRG8gbm90IGNhbGwgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZVRleHRJ
blJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuY3BwOiBNb3ZlZCBt
YWtlU2ltcGxlUmFuZ2UgZnVuY3Rpb25zIHRvIHRoZSBoZWFkZXIuCisgICAgICAgICogZG9tL1Np
bXBsZVJhbmdlLmg6IFJld29ya2VkIHRoZSBtYWtlU2ltcGxlUmFuZ2UgaW1wbGVtZW50YXRpb24g
dG8gYXZvaWQgYSBtaXN0YWtlCisgICAgICAgIHdoaWNoIG1hZGUgdGVtcGxhdGUgZXhwYW5zaW9u
IGluZmluaXRlbHkgcmVjdXJzZSB3aGlsZSBjb21waWxpbmcgYW5kIGNyYXNoIHRoZSBjb21waWxl
ci4KKyAgICAgICAgRW5kZWQgdXAgbW92aW5nIGFsbCB0aGUgY29kZSB0byB0aGUgaGVhZGVyLiBT
aG91bGQgYmUgYSBnb29kIHRoaW5nOyBJIGV4cGVjdCBpdCB3aWxsCisgICAgICAgIG9wdGltaXpl
IHdlbGwgaW5saW5lZC4KKworICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KTog
RG8gbm90IGNhbGwgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZXRDb21wb3NpdGlvbik6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6IERvIG5vdCBjYWxsIGNyZWF0ZUxp
dmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRh
dGUpOiBVc2UgYXV0byBpbnRlYWQgb2YgUmVmUHRyPFJhbmdlPi4KKworICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5KTogRG8gbm90IGNhbGwgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZXhl
Y3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVGb3JtYXRC
bG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZSk6IFVz
ZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6
OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQpOiBUYWtlIGEKKyAgICAgICAgU2ltcGxlUmFu
Z2UuCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaDogVXBkYXRlZCBmb3Ig
YWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb3ZlVG8pOiBEZWxldGVkIG92ZXJsb2FkIHRha2lu
ZyBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0ZWRSYW5nZSk6IFRha2UgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZy
YWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KTogRG8gbm90IGNhbGwKKyAgICAgICAgY3JlYXRl
TGl2ZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KTogUmV0dXJuIFNpbXBs
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6d29yZFJhbmdlRnJvbVBvc2l0aW9uKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24pOiBVc2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJz
SW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeSk6IFJldHVybgorICAgICAgICBhIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0
ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldp
dGhvdXRDcm9zc2luZ0xpbmUpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9W
aXNpYmxlVW5pdHMuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpk
ZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZS4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKTogVXNlIFNpbXBs
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRl
c3RSZXN1bHQpOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFG
b3JBdHRhY2htZW50KToKKyAgICAgICAgRG8gbm90IGNhbGwgY3JlYXRlTGl2ZVJhbmdlLgorICAg
ICAgICAqIGVkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAo
V2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6IERpdHRvLgorICAgICAg
ICAqIGVkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6IERpdHRvLgorICAgICAgICAqIGVk
aXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVG
cmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogVXNlIFNpbXBsZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGV4dFByZXNlcnZlc05ld2xpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUZyYWdtZW50RnJvbVRleHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hcmt1
cC5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xl
Z2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAgICAgICogcGFnZS9E
cmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6cGVy
Zm9ybURyYWdPcGVyYXRpb24pOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IERvIG5vdCBjYWxsIGNyZWF0ZUxpdmVS
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdEVsZW1lbnQpOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6cmVtb3ZlQWxsRHJvcHBlZEltYWdl
UGxhY2Vob2xkZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6
aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldCk6IERpdHRvLgorCisgICAgICAg
ICogcGFnZS9EcmFnQ29udHJvbGxlci5oOiBVc2UgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZmluZFRleHRNYXRjaGVzKTog
UmV0dXJuIHZlY3RvciBvZiBTaW1wbGVSYW5nZSwgaW4KKyAgICAgICAgc3RydWN0dXJlIHNvIHdl
IGhhdmUgb25lIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIHR3byBvdXQgYXJndW1lbnRzLgorICAg
ICAgICBBbHNvIHJlbmFtZWQgZnJvbSBmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMuCisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpyYW5nZU9mU3RyaW5nKTogUmV0dXJuIFNpbXBsZVJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZVJhbmdlcyk6IERvIG5vdCBjYWxsIGNyZWF0ZUxpdmVSYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dCk6IFRha2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgICogcGFnZS9QYWdlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgor
CisgICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6d29yZHNJbkN1cnJlbnRQYXJhZ3JhcGggY29uc3QpOiBVc2UgU2ltcGxlUmFuZ2UuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Ojppc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50IGNvbnN0KToK
KyAgICAgICAgVXNlIFNpbXBsZVJhbmdlLCBhbmQgYWxzbyB1c2UgaGFzQW55UGxhaW5UZXh0IGlu
c3RlYWQgb2YgY29tcHV0aW5nCisgICAgICAgIHRoZSBwbGFpbiB0ZXh0IHN0cmluZyBhbmQgY2hl
Y2tpbmcgaWYgaXQncyBlbXB0eS4KKwogMjAyMC0wNy0yOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaVBhZE9TXSBDdXN0b20gZHJvcGRvd24gbWVu
dSBkaXNtaXNzZXMgaW1tZWRpYXRlbHkgb24gYWNjb3VudC5uaGwuY29tCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI5
ZTM5YjgyZTg0NzAxNTQ3NWQxNThmNTY5Yjg5OGFhYTZlZmE0YTcuLmQ4YjBlNTNjNWJiYTJlNTY1
NmEzMjA2ZjdmNTUzMjY5NGFiZjRiMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDIw
LTA3LTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGdXJ0aGVy
IHJlZHVjdGlvbiBpbiB0aGUgdXNlIG9mIGxpdmUgcmFuZ2VzLCBwYXJ0aWN1bGFybHkgaW4gaGVh
ZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0
NzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
aGFyZWQvQVBJL2MvbWFjL1dLV2ViQXJjaGl2ZVJlZi5jcHA6CisgICAgICAgIChXS1dlYkFyY2hp
dmVDcmVhdGVGcm9tUmFuZ2UpOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogU2hh
cmVkL0FQSVdlYkFyY2hpdmUuaDogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIFNoYXJlZC9B
UElXZWJBcmNoaXZlLm1tOgorICAgICAgICAoQVBJOjpXZWJBcmNoaXZlOjpjcmVhdGUpOiBUYWtl
IFNpbXBsZVJhbmdlLgorCisgICAgICAgICogU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkVkaXRpbmdSYW5nZTo6dG9SYW5nZSk6IERvbid0IGNhbGwgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZSk6IFRha2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgICogU2hhcmVkL0VkaXRpbmdSYW5nZS5oOiBVcGRhdGVkIGZv
ciBhYm92ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIFRha2UgU2ltcGxlUmFuZ2UsIFN0
cmluZywgU3R5bGVQcm9wZXJ0aWVzIGluc3RlYWQgb2YKKyAgICAgICAgUmFuZ2UsIFN0cmluZ0lt
cGwsIENTU1N0eWxlRGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVkaXRvci5jcHA6CisgICAgICAgIFN0cmluZyBpbnN0
ZWFkIG9mIFN0cmluZ0ltcGwuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tET01Eb2N1bWVudC5tbToKKyAgICAgICAgKC1bV0tET01Eb2N1bWVudCBjcmVh
dGVEb2N1bWVudEZyYWdtZW50V2l0aFRleHQ6XSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAg
ICAgKC1bV0tET01SYW5nZSByYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3Rl
cnM6aW5EaXJlY3Rpb246XSk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZSBhbmQgY3JlYXRlTGl2
ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
V2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyIF9zZXRFZGl0aW5nRGVs
ZWdhdGU6XSk6CisgICAgICAgIFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gYnVuZGxlIGVkaXRvciBj
bGllbnQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Y3JlYXRlKTogRGVsZXRlZC4gTW92ZWQgdGhlCisgICAgICAgIGNvZGUgaW50
byBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZS4KKyAgICAgICAgKFdlYktp
dDo6Y3JlYXRlSGFuZGxlKTogQWRkZWQuIE1ha2VzIGEgaGFuZGxlIGZvciBhIFNpbXBsZVJhbmdl
LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuaDoKKyAgICAgICAgVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUhhbmRsZSk6IEFkZGVkLiBNYWtlcyBhIGhhbmRs
ZSBmb3IgYSBDU1NTdHlsZURlY2xhcmF0aW9uLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIFVwZGF0
ZWQgZm9yIGNoYW5nZXMgdG8gYnVuZGxlIGVkaXRvciBjbGllbnQuCisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGlu
Zyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQ6OmRpZEVuZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24pOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3aWxs
V3JpdGVUb1Bhc3RlYm9hcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6cGVyZm9ybVR3
b1N0ZXBEcm9wKTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgVXBkYXRlZCBmb3IgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFu
Z2UpOiBVcGRhdGVkIHRvIGNhbGwgbmV3CisgICAgICAgIHJldmlzZWQgYnVuZGxlIGVkaXRvciBj
bGllbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0
aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5k
RWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRJbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJk
RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21D
dXJyZW50U2VsZWN0aW9uKTogVXNlIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRy
b2xsZXI6OnJlcGxhY2VNYXRjaGVzKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0
OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0bworICAg
ICAgICBQYWdlOjpmaW5kVGV4dE1hdGNoZXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OkZp
bmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2gpOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpzZWxlY3RGaW5kTWF0Y2gpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaDogVXBkYXRl
ZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMpOiBEbyBub3Qg
Y2FsbCBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjaGFyYWN0
ZXJJbmRleEZvclBvaW50QXN5bmMpOiBDYWxsIG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
cGxhaW5UZXh0Rm9yQ29udGV4dCk6IENoYW5nZWQgb3ZlcmxvYWRzIGEgYml0IHRvIHdvcmsKKyAg
ICAgICAgYmV0dGVyIHdpdGggT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFuZCByZW1vdmVkIHRoZSBv
bmVzIHRoYXQgZXhwbGljaXRseQorICAgICAgICB0YWtlIGEgUmFuZ2UsIHVwZGF0aW5nIGNhbGxl
cnMgdG8gY29tcGVuc2F0ZS4KKyAgICAgICAgKFdlYktpdDo6cGxhaW5UZXh0Rm9yRGlzcGxheSk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRl
IGNvbnN0KTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRT
ZWxlY3Rpb25Db250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENv
bmNsdWRlRWRpdERyYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxl
U3R5bHVzU2luZ2xlVGFwQXRQb2ludCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpzZWxlY3RXaXRoR2VzdHVyZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpyYW5nZUZvclBv
aW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKTogUmV0dXJuIFNpbXBsZVJhbmdlLgorICAgICAgICAo
V2ViS2l0OjpyYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMpOiBVc2UgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmV4dGVuZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RXb3JkQmFja3dhcmQpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2Vs
ZWN0aW9uT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFBv
c2l0aW9uQXRQb2ludCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQ
b3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6Om1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludCk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5
QXRQb2ludCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rp
b25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVkVGV4dCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpyZXBsYWNlRGljdGF0ZWRUZXh0KTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpkYXRhRGV0ZWN0b3JMaW5rUG9zaXRpb25JbmZvcm1hdGlvbik6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRGVs
dGEpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Zm9jdXNUZXh0SW5wdXRDb250
ZXh0QW5kUGxhY2VDYXJldCk6IERpdHRvLgorCiAyMDIwLTA3LTI5ICBLYXRlIENoZW5leSAgPGth
dGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIE1pZ3JhdGUgQXBwLUJvdW5kIERv
bWFpbnMgY29kZSBmcm9tIFdlYktpdCBBZGRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxv
ZwppbmRleCBhNjllZDc4YmU0NTI2YjMwZjA5Yjg1YWJkMTVjNTY0ZGNiZGExNGRkLi5mOWRhZmEx
NmNmNGM1ZGY3ODdmZmFiM2Q2M2JiOWUxNmM3ODA0NzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDctMjkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGluIHRoZSB1c2Ugb2YgbGl2
ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVuY2xvc2luZ1RleHRVbml0
T2ZHcmFudWxhcml0eTppbkRpcmVjdGlvbklmQXRCb3VuZGFyeTpdKToKKyAgICAgICAgVXNlIFNp
bXBsZVJhbmdlLgorCiAyMDIwLTA3LTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMgZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xp
ZW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAxOWYzYmQ3ZjFiNzc3YTkzMTY0
MGIyMDAxOGFkOWQxZjM0ZTQ2NzQwLi5lYzZlNTIzYzZlYjZkOGM4NWI0ZWFiNGE2YmQwZGEyZGM2
YTE5NDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIw
MjAtMDctMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZ1cnRo
ZXIgcmVkdWN0aW9uIGluIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRpY3VsYXJseSBpbiBo
ZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTQ3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IERPTS9ET01IVE1MLm1tOgorICAgICAgICAoLVtET01IVE1MRG9jdW1lbnQgY3JlYXRlRG9jdW1l
bnRGcmFnbWVudFdpdGhUZXh0Ol0pOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogRE9NL0RP
TVVJS2l0RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NUmFuZ2UgbW92ZTppbkRpcmVjdGlv
bjpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpdKTog
RGl0dG8uCisgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06CisgICAgICAgICgtW0RP
TVJhbmdlIHdlYkFyY2hpdmVdKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5t
bToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOl0pOiBNb3ZlZCBh
ICIqIiB0byBzYXZlIGEgbGl0dGxlIHdvcmsuCisgICAgICAgICgtW1dlYkZyYW1lIHNldFNlbGVj
dGVkRE9NUmFuZ2U6YWZmaW5pdHk6Y2xvc2VUeXBpbmc6dXNlclRyaWdnZXJlZDpdKToKKyAgICAg
ICAgVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgor
ICAgICAgICBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6XSk6CisgICAgICAgIERpdHRvLgor
ICAgICAgICAoLVtXZWJGcmFtZSBfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6XSk6IERpdHRvLgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBET01SYW5n
ZU9mU3RyaW5nOnJlbGF0aXZlVG86b3B0aW9uczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZp
ZXcgc2V0U2VsZWN0ZWRET01SYW5nZTphZmZpbml0eTpdKTogRGl0dG8uCisKIDIwMjAtMDctMjkg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgcmFuZ2Ug
aWRpb21zIGFuZCBvdGhlciBjaGFuZ2VzIHRvIHByZXBhcmUgdGhlIHdheSBmb3IgbW9yZSByZWR1
Y3Rpb24gaW4gbGl2ZSByYW5nZSB1c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA3
NGNhMTFlYzE2Njk1YTdlOTI3ZjI5MWJkOTM5YzkzZTQ1NzZlYzZlLi4wMjc5NGM3Y2RmODM1NDQ0
YjkwZDMzYmI1Nzc4M2RhMjRmNGQzYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjAtMDctMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGluIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMs
IHBhcnRpY3VsYXJseSBpbiBoZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTQ3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEFjY2Vzc2libGVUZXh0SW1wbC5jcHA6IEFkZGVkIGFuIGluY2x1
ZGUgb2YgUmFuZ2UuaC4KKwogMjAyMC0wNy0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFNwbGl0IFdpbmRvd3MgcGFydHMgZnJvbSBDRk5l
dHdvcmtTUEkuaCB0byBDRk5ldHdvcmtTUElXaW4uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggMjc0MjFhMWVhMDg4
MTI5MzhjNmU5N2VlOGVlZDYxMDc5OGViNmY5Ni4uZDRhYjU5Mzc1NDU1MjlmMzM3ZWU0MDRmNzli
YzNhZTdiMzhiMzM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC03MjIsNyArNzIyLDcgQEAgVmVjdG9yPFN0cmlu
Zz4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0
eVRleHRPcGVyYXQKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGZvciAoY29uc3QgYXV0
byYgdGV4dFJhbmdlIDogb3BlcmF0aW9uLnRleHRSYW5nZXMpIHsKLSAgICAgICAgaWYgKCFmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodGV4dFJhbmdl
KS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZ
ZXMpKQorICAgICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHRl
eHRSYW5nZSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZ
ZXMpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3RyaW5nIHRleHQgPSBwbGFp
blRleHQodGV4dFJhbmdlKTsKQEAgLTIwMTIsNyArMjAxMiw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eU9iamVjdDo6cmVwbGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcsIGNvCiAgICAgLy8gQWxzbyBvbmx5IGRvIHRoaXMgd2hlbiB0aGUgZmllbGQgaXMgaW4gZWRp
dGluZyBtb2RlLgogICAgIGF1dG8mIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJhbWUoKTsKICAgICBp
ZiAoZWxlbWVudC5zaG91bGRVc2VJbnB1dE1ldGhvZCgpKSB7Ci0gICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0
UmFuZ2UocmFuZ2UpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENs
b3NlVHlwaW5nOjpZZXMpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlbWVudFN0cmluZywgRWRpdG9yOjpTZWxlY3RS
ZXBsYWNlbWVudDo6Tm8sIEVkaXRvcjo6U21hcnRSZXBsYWNlOjpObyk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IGRiYjdkMzQ0
NmE5ZDZmOTBiY2MzN2JmOWI0NmRjYWNlN2E4YWYyYTQuLjZjYTU5ZmIwNmVhMDllYjU5ZDA1ZTU1
YTFkMmQ4NjlkMDE3MmY3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtODIs
MzUgKzgyLDYgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUo
Tm9kZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9
LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OwogfQogCi1PcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFrZVNpbXBsZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkKLXsK
LSAgICBpZiAoIXBvaW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVy
biB7IHsgKnBvaW50LCAqcG9pbnQgfSB9OwotfQotCi1PcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVNpbXBsZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgcG9pbnQpCi17Ci0gICAgaWYg
KCFwb2ludCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIGVuZCA9ICpw
b2ludDsKLSAgICByZXR1cm4geyB7IFdURk1vdmUoKnBvaW50KSwgV1RGTW92ZShlbmQpIH0gfTsK
LX0KLQotT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25h
bDxCb3VuZGFyeVBvaW50PiYgc3RhcnQsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBl
bmQpCi17Ci0gICAgaWYgKCFzdGFydCB8fCAhZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKLX0KLQotT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHN0YXJ0
LCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIGVuZCkKLXsKLSAgICBpZiAoIXN0YXJ0IHx8ICFl
bmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHsgeyBXVEZNb3Zl
KCpzdGFydCksIFdURk1vdmUoKmVuZCkgfSB9OwotfQotCiBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4geyBtYWtlQm91
bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cyhub2RlKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Np
bXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCBmYTZh
ZjU0NGIzNzEzMjU3ODYxYzgyNTJiMGFlNWY4YmFjYmYxNGExLi5iYTYxNTc1ZjA0NzgxN2UzMTE2
NmIwNDAwYjcyZjdjNDY0NTk5MDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTEs
MjYgKzUxLDE4IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3Qg
UmVmPFJhbmdlPiYpOwogfTsKIAotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50
JiYpOwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBj
b25zdCBCb3VuZGFyeVBvaW50Jik7Ci1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoQm91bmRh
cnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwotT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VT
aW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwotV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFy
eVBvaW50PiYmKTsKLVdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2lt
cGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25zdCBPcHRpb25hbDxC
b3VuZGFyeVBvaW50PiYpOwotV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRpb25hbDxCb3VuZGFy
eVBvaW50PiYmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZUhlbHBlcihCb3VuZGFyeVBv
aW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBs
ZVJhbmdlSGVscGVyKE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYsIE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlSGVscGVyKEJvdW5kYXJ5UG9p
bnQmJik7CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlSGVscGVyKE9wdGlv
bmFsPEJvdW5kYXJ5UG9pbnQ+JiYpOwogCiBpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRh
cnlQb2ludEhlbHBlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkgeyByZXR1cm4gcG9pbnQ7
IH0KIGlubGluZSBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKEJvdW5kYXJ5
UG9pbnQmJiBwb2ludCkgeyByZXR1cm4gV1RGTW92ZShwb2ludCk7IH0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGF1dG8gbWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoVCYmIGFyZ3VtZW50KSAtPiBkZWNs
dHlwZShtYWtlQm91bmRhcnlQb2ludChzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnQpKSkKLXsKLSAg
ICByZXR1cm4gbWFrZUJvdW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSk7Ci19
CitpbmxpbmUgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIo
Y29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mIHBvaW50KSB7IHJldHVybiBwb2ludDsgfQor
aW5saW5lIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKE9w
dGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgcG9pbnQpIHsgcmV0dXJuIFdURk1vdmUocG9pbnQpOyB9
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBhdXRvIG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBh
cmd1bWVudCkgLT4gZGVjbHR5cGUobWFrZUJvdW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFy
Z3VtZW50KSkpIHsgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHN0ZDo6Zm9yd2FyZDxUPihhcmd1
bWVudCkpOyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLlQ+IGF1dG8gbWFrZVNpbXBsZVJhbmdl
KFQmJiAuLi5hcmd1bWVudHMpIC0+IGRlY2x0eXBlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRh
cnlQb2ludEhlbHBlcihzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnRzKSkuLi4pKQotewotICAgIHJl
dHVybiBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJk
PFQ+KGFyZ3VtZW50cykpLi4uKTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIC4uLlQ+IGF1dG8gbWFr
ZVNpbXBsZVJhbmdlKFQmJiAuLi5hcmd1bWVudHMpIC0+IGRlY2x0eXBlKG1ha2VTaW1wbGVSYW5n
ZUhlbHBlcihtYWtlQm91bmRhcnlQb2ludEhlbHBlcihzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnRz
KSkuLi4pKSB7IHJldHVybiBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIobWFrZUJvdW5kYXJ5UG9pbnRI
ZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKTsgfQogCiAvLyBGSVhNRTogV291
bGQgbGlrZSB0aGVzZSB0byBoYXZlIHNob3J0ZXIgbmFtZXM7IGFub3RoZXIgb3B0aW9uIGlzIHRv
IGNoYW5nZSBwcmVmaXggdG8gbWFrZVNpbXBsZVJhbmdlLgogV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYpOwpAQCAtMTM1LDQg
KzEyNywyOSBAQCBpbmxpbmUgU2ltcGxlUmFuZ2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5n
ZT4mIHJhbmdlKQogewogfQogCitpbmxpbmUgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlSGVs
cGVyKEJvdW5kYXJ5UG9pbnQmJiBzdGFydCwgQm91bmRhcnlQb2ludCYmIGVuZCkKK3sKKyAgICBy
ZXR1cm4geyBXVEZNb3ZlKHN0YXJ0KSwgV1RGTW92ZShlbmQpIH07Cit9CisKK2lubGluZSBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlSGVscGVyKE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+JiYgc3RhcnQsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgZW5kKQoreworICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZVJhbmdlSGVscGVyKFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSk7
Cit9CisKK2lubGluZSBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoQm91bmRhcnlQ
b2ludCYmIHBvaW50KQoreworICAgIGF1dG8gZW5kID0gcG9pbnQ7CisgICAgcmV0dXJuIG1ha2VT
aW1wbGVSYW5nZUhlbHBlcihXVEZNb3ZlKHBvaW50KSwgV1RGTW92ZShlbmQpKTsKK30KKworaW5s
aW5lIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoT3B0aW9uYWw8
Qm91bmRhcnlQb2ludD4mJiBwb2ludCkKK3sKKyAgICBpZiAoIXBvaW50KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoV1RGTW92
ZSgqcG9pbnQpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxYzdmZDE0MWVlMTNiNzE3NmM1MzM2YTdkNWE3YWY4ZDI3
OWQ4OGRmLi43NzE2MTYyM2Y3YzBlYzk2YTMxNTU3YmIwYjhmNmY0Mjk1MTUwNDFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNTUs
NyArNTUsNiBAQAogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCiAjaW5jbHVkZSAiTWVy
Z2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
Ci0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQmxvY2tGbG93LmgiCkBAIC0xNDQwLDE3ICsxNDM5LDExIEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRP
ZlBhcmFncmFwCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRl
ZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFy
YWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKICAgICAgCi0gICAgLy8g
c3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0
aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCi0gICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBs
aWFudCA9IHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVu
ZFJhbmdlQ29tcGxpYW50ID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGF1
dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQu
ZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBs
aWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLQogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGFuIGluZWZmaWNpZW50IHdheSB0byBwcmVzZXJ2ZSBzdHlsZSBvbiBub2RlcyBpbiB0aGUgcGFy
YWdyYXBoIHRvIG1vdmUuIEl0CiAgICAgLy8gc2hvdWxkbid0IG1hdHRlciB0aG91Z2gsIHNpbmNl
IG1vdmVkIHBhcmFncmFwaHMgd2lsbCB1c3VhbGx5IGJlIHF1aXRlIHNtYWxsLgogICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudDsKLSAgICAvLyBUaGlzIHVzZWQgdG8gdXNlIGEg
dGVybmFyeSBmb3IgaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGF0IGNvbmZ1c2VkIHNvbWUgdmVyc2lv
bnMgb2YgR0NDLCBzZWUgYnVnIDM3OTEyCiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUg
IT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUpCi0gICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKGRvY3VtZW50KCksIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKHJhbmdlLmdldCgpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpObywgQ29u
dmVydEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgIGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvY3VtZW50KCksIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCksIG51bGxw
dHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Ok5vLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpZ
ZXMpLCBlbXB0eVN0cmluZygpKTsKIAogICAgIC8vIEEgbm9uLWVtcHR5IHBhcmFncmFwaCdzIHN0
eWxlIGlzIG1vdmVkIHdoZW4gd2UgY29weSBhbmQgbW92ZSBpdC4gIFdlIGRvbid0IG1vdmUgCiAg
ICAgLy8gYW55dGhpbmcgaWYgd2UncmUgZ2l2ZW4gYW4gZW1wdHkgcGFyYWdyYXBoLCBidXQgYW4g
ZW1wdHkgcGFyYWdyYXBoIGNhbiBoYXZlIHN0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
aW5kZXggMWQzODlkMTU3MzVmOGFmMWE0Y2Y5Yjc0OTU2M2QwNjc4ODBhNDRiNS4uZDEyZjg0ZjE1
ZmY0ZTc1Mjk1ZWM2MzZjMzgwN2E2MTFlM2Y4YmIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFn
bWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0
KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBlZGl0
aW5nQWN0aW9uKTsKKyAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFj
ZSwgTWF0Y2hTdHlsZTo6WWVzLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCkBAIC0yMTIwLDggKzIxMjAsOCBAQCB2b2lk
IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6
bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsg
c2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFy
dCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0g
U2ltcGxlUmFuZ2UgeyB7ICpiYXNlTm9kZSwgc3RhcnQgfSwgeyAqYmFzZU5vZGUsIGVuZCB9IH07
CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFu
Z2UsIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0zODkzLDggKzM4OTMsOCBAQCBTdHJpbmcgRWRpdG9yOjpz
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24g
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gcmFuZ2UgPSBz
ZWxlY3Rpb24uaXNDYXJldCgpCi0gICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9u
LnN0YXJ0KCkpCi0gICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpOworICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQo
KSkKKyAgICAgICAgOiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4geyB9OwogICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNl
VGV4dChzZWxlY3Rpb24pKQpAQCAtNDE5Myw4ICs0MTkzLDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkK
ICAgICB9IGVsc2UKICAgICAgICAgaW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNl
bWVudCwgbnVsbHB0cik7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGluc2VydGVkQ2FuZGlkYXRlUmFu
Z2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShz
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50Lmxl
bmd0aCgpLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLSAgICBpZiAoaW5zZXJ0ZWRD
YW5kaWRhdGVSYW5nZSkKKyAgICBpZiAoYXV0byBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFu
Z2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkpCiAgICAgICAgIGFkZE1hcmtlcigqaW5zZXJ0
ZWRDYW5kaWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2Nl
cHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENh
bmRpZGF0ZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAK
aW5kZXggNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0NTIyOTEwZTY1YzZhOTEzYy4uNmZmOTQzNDZh
ZTUxNDUwNmY3MTVhNTlkZGNmY2Q5ZmFlNmE4Nzc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xODQsNyArMTg0LDggQEAgc3RhdGljIGJvb2wgZXhwYW5k
U2VsZWN0aW9uVG9HcmFudWxhcml0eShGcmFtZSYgZnJhbWUsIFRleHRHcmFudWxhcml0eSBncmFu
dWxhcmkKICAgICBhdXRvIGFmZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7CiAgICAgaWYg
KCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xk
UmFuZ2UsICpuZXdSYW5nZSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KCpuZXdSYW5nZSkucHRyKCksIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSgqbmV3
UmFuZ2UsIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHNl
dFNlbGVjdGVkUmFuZ2UgaGVyZT8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzU0LDkgKzM1
NSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0gZnJhbWUuZWRp
dG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2VsZWN0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0
ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0
ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3Io
KS5zZWxlY3RlZFJhbmdlKCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOwotICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwotICAgICAg
ICBpZiAoIXNlbGVjdGVkKQorICAgICAgICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdl
KHVuaW9uUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9X
TlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVs
ZXRlKCk7CkBAIC0xMDU2LDcgKzEwNTUsOCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9N
YXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAg
ICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlv
blJhbmdlcygqbWFyaywgKnNlbGVjdGlvbikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKnNlbGVjdGlvbiksIERPV05TVFJFQU0s
IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAvLyBGSVhNRTog
V2h5IGRvIHdlIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBo
ZXJlPwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTcxLDcgKzE1NzEsNyBAQCBzdGF0aWMg
U3RyaW5nIHZhbHVlRm9ybWF0QmxvY2soRnJhbWUmIGZyYW1lLCBFdmVudCopCiAgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmVPck9ycGhhbmVkKCkgfHwgIXNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBh
dXRvKiBmb3JtYXRCbG9ja0VsZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JG
b3JtYXRCbG9ja0NvbW1hbmQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkp
LmdldCgpKTsKKyAgICBhdXRvKiBmb3JtYXRCbG9ja0VsZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1h
bmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSk7
CiAgICAgaWYgKCFmb3JtYXRCbG9ja0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogICAgIHJldHVybiBmb3JtYXRCbG9ja0VsZW1lbnQtPmxvY2FsTmFtZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4IGU0MzZjN2Zk
ZTIxZGJiMjAzNGI1OWM1Yjk1Mjg5ZmEzY2ZlZDcwYTkuLmJmNTJlMGMwNDRiN2NhYzMxZjE0OWQ0
YTI2MzQyOTViMTJjMjRlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJs
b2NrQ29tbWFuZC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCkBAIC02OCwxNCArNjcsMTQgQEAgdm9pZCBGb3JtYXRCbG9ja0NvbW1h
bmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVu
ZCwKICAgICBSZWZQdHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFydC5kZXByZWNhdGVkTm9kZSgp
ID09IG5vZGVUb1NwbGl0VG8pID8gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA6IHNwbGl0VHJlZVRv
Tm9kZSgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgKm5vZGVUb1NwbGl0VG8pOwogICAgIFJlZlB0
cjxOb2RlPiBub2RlQWZ0ZXJJbnNlcnRpb25Qb3NpdGlvbiA9IG91dGVyQmxvY2s7CiAKLSAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydCwgZW5kT2ZTZWxlY3Rp
b24pOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZE9mU2VsZWN0
aW9uKTsKICAgICBFbGVtZW50KiByZWZOb2RlID0gZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChl
bmQpOwogICAgIEVsZW1lbnQqIHJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihzdGFydCk7
CiAgICAgLy8gUm9vdCBpcyBudWxsIGZvciBlbGVtZW50cyB3aXRoIGNvbnRlbnRlZGl0YWJsZT1m
YWxzZS4KICAgICBpZiAoIXJvb3QgfHwgIXJlZk5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2socmVmTm9kZS0+dGFnUU5hbWUoKSkgJiYgc3RhcnQg
PT0gc3RhcnRPZkJsb2NrKHN0YXJ0KQotICAgICAgICAmJiAoZW5kID09IGVuZE9mQmxvY2soZW5k
KSB8fCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKCpyZWZOb2RlLCByYW5nZS5nZXQoKSkp
CisgICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IChyYW5nZSAmJiBpc05vZGVW
aXNpYmx5Q29udGFpbmVkV2l0aGluKCpyZWZOb2RlLCAqcmFuZ2UpKSkKICAgICAgICAgJiYgcmVm
Tm9kZSAhPSByb290ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZigqcmVmTm9kZSkpIHsKICAgICAg
ICAgLy8gQWxyZWFkeSBpbiBhIGJsb2NrIGVsZW1lbnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBj
dXJyZW50IHBhcmFncmFwaAogICAgICAgICBpZiAocmVmTm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1l
KCkpKQpAQCAtOTksMjMgKzk4LDIyIEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRS
YW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsCiAgICAgICAg
IGluc2VydEJsb2NrUGxhY2Vob2xkZXIobGFzdFBhcmFncmFwaEluQmxvY2tOb2RlKTsKIH0KICAg
ICAKLUVsZW1lbnQqIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29t
bWFuZChSYW5nZSogcmFuZ2UpCitFbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRG
b3JGb3JtYXRCbG9ja0NvbW1hbmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkK
IHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUq
IGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAg
d2hpbGUgKGNvbW1vbkFuY2VzdG9yICYmICFpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb21tb25B
bmNlc3RvcikpCisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yKCpyYW5nZSk7CisgICAgd2hpbGUgKGNvbW1vbkFuY2VzdG9yICYmICFpc0VsZW1lbnRGb3JG
b3JtYXRCbG9jayhjb21tb25BbmNlc3Rvci5nZXQoKSkpCiAgICAgICAgIGNvbW1vbkFuY2VzdG9y
ID0gY29tbW9uQW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKLQotICAgIGlmICghY29tbW9uQW5jZXN0
b3IpCisgICAgaWYgKCFpczxFbGVtZW50Pihjb21tb25BbmNlc3RvcikpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHJhbmdlLT5z
dGFydENvbnRhaW5lcigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBhdXRvIHJvb3RFZGl0
YWJsZUVsZW1lbnQgPSByYW5nZS0+c3RhcnQuY29udGFpbmVyLT5yb290RWRpdGFibGVFbGVtZW50
KCk7CiAgICAgaWYgKCFyb290RWRpdGFibGVFbGVtZW50IHx8IGNvbW1vbkFuY2VzdG9yLT5jb250
YWlucyhyb290RWRpdGFibGVFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICByZXR1cm4gY29tbW9uQW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSA/IGRvd25jYXN0PEVsZW1l
bnQ+KGNvbW1vbkFuY2VzdG9yKSA6IG51bGxwdHI7CisgICAgcmV0dXJuICZkb3duY2FzdDxFbGVt
ZW50PigqY29tbW9uQW5jZXN0b3IpOwogfQogCiBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2Nr
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
b3JtYXRCbG9ja0NvbW1hbmQuaAppbmRleCA3OWJlZGFkMTdlMGU2NGM4MjU4MjAxNmQ1MmU5Yjll
OTZmMjQyMWM3Li5kYTJhZDUwNGJjMTA1Mzc5ODQ0ZTdjYWE1MDI1MDZkMTUxMTYyNzk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGF0aWMgRWxlbWVudCogZWxlbWVu
dEZvckZvcm1hdEJsb2NrQ29tbWFuZChSYW5nZSopOworICAgIHN0YXRpYyBFbGVtZW50KiBlbGVt
ZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpOwog
ICAgIGJvb2wgZGlkQXBwbHkoKSBjb25zdCB7IHJldHVybiBtX2RpZEFwcGx5OyB9CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDBkMjhj
Y2RkYTA0MWRhNWY2MDJhZmVmNDBmMTgyZjAzYzc0MWFhZGYuLjFmZmRhOGNhMjZmNzZiN2E5NDk4
ZDUyMmU5ZWU0YmI4NjE4NTljZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCkBAIC0yMDUsMTIgKzIwNSw2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVU
byhjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIEVVc2VyVHJpZ2dlCiAg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLCBhZmZpbml0eSwgbV9zZWxlY3Rp
b24uaXNEaXJlY3Rpb25hbCgpKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdn
ZXJlZCkpOwogfQogCi12b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUmFuZ2UqIHJh
bmdlKQotewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gcmFuZ2UgPyBWaXNpYmxl
U2VsZWN0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpKSA6
IFZpc2libGVTZWxlY3Rpb24oKTsKLSAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLX0KLQog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZiYXNlLCBjb25zdCBQ
b3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJU
cmlnZ2VyZWQpCiB7CiAgICAgY29uc3QgYm9vbCBzZWxlY3Rpb25IYXNEaXJlY3Rpb24gPSB0cnVl
OwpAQCAtMjAzNCwxMSArMjAyOCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogICAgIH0KIH0KIAotYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5n
ZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2hvdWxkQ2xvc2VUeXBpbmcgY2xvc2VUeXBp
bmcsIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCitib29sIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVBZmZp
bml0eSBhZmZpbml0eSwgU2hvdWxkQ2xvc2VUeXBpbmcgY2xvc2VUeXBpbmcsIEVVc2VyVHJpZ2dl
cmVkIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEFTU0VSVCgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSA9PSAm
cmFuZ2UtPmVuZENvbnRhaW5lcigpLmRvY3VtZW50KCkpOworCisgICAgaWYgKCZyYW5nZS0+c3Rh
cnQuY29udGFpbmVyLT5kb2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmNvbnRhaW5lci0+ZG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdT
ZWxlY3Rpb24oKnJhbmdlLCBhZmZpbml0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaAppbmRleCAyMTFjYThiYjM2ZDgwMjZkNGIyYTBiMGVlMWI2M2FjZmI5NjdiYWQ4
Li5lZGQ0YmFhODI4N2Q4MTFiZjNkODE0NWU5YzlmYjJlYjZhYzMwN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JvbGxBbGlnbm1lbnQuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKQEAgLTE0NCw3ICsx
NDMsNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFi
bGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBtb3ZlVG8oY29uc3QgUmFuZ2UqKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdn
ZXJlZCk7CiAgICAgdm9pZCBtb3ZlVG8oY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2Vy
VHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CkBAIC0xNTUsNyArMTUzLDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiA9IGRlZmF1bHRTZXRTZWxlY3Rp
b25PcHRpb25zKCksIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQoKSwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCwgVGV4dEdyYW51bGFyaXR5ID0gVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAKICAgICBlbnVtIGNsYXNzIFNob3VsZENsb3NlVHlwaW5nIDogYm9vbCB7IE5vLCBZZXMg
fTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZm
aW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2Vy
ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBFVXNlclRy
aWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vs
ZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgd2ls
bEJlUmVtb3ZlZEZyb21GcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBmODJmMzk1Y2E1MmJkNzYwMmVmZWNiNzZm
ZTNkMGFiMzlhMDMyNjBiLi42OWU3ZTMwZTY1YTk2MTYwMjVlZDI0OTI1OTIxYjMwY2RmN2IxN2Q2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2Vt
ZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAg
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGV2ZW50
LT50ZXh0KCkpOworICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCmluZGV4IDkyMGQ2YmRjMzI3MjNlMmQ4MjlhNGE5NTgwNDAwNmZkMjlmNzZlMWIu
LmE4MDdmNTYzZTZlZDIwZWRlMDdhNzBkNDRjYzFhZTVjMjcyMDQwYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE4MzMsMTEgKzE4MzMsMTEgQEAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdnAsIFQKICAgICB9CiB9CiAKLVJlZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4
dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFRoaXMgaXMgcGFydGljdWxhcmx5IGluZWZmaWNp
ZW50LiAgV2UgY291bGQgZWFzaWx5IG9idGFpbiB0aGUgYW5zd2VyIHdpdGggdGhlIGJvdW5kYXJp
ZXMgY29tcHV0ZWQgYmVsb3cuCiAgICAgaWYgKCF3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
dnAsIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2Qm91
bmRhcnk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeTsKQEAgLTE4ODksMTYgKzE4
ODksMTYgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KIAogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKHBy
ZXZCb3VuZGFyeS5pc051bGwoKSB8fCBuZXh0Qm91bmRhcnkuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHZw
IDwgcHJldkJvdW5kYXJ5IHx8IHZwID4gbmV4dEJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBSYW5nZTo6
Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRv
Y3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKKyAgICByZXR1cm4gbWFrZVNp
bXBsZVJhbmdlKHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKIH0KIAogc3RkOjpwdHJkaWZm
X3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBiKQpAQCAtMTk0NCwxOSArMTk0NCwxNCBAQCB2b2lkIGNoYXJh
Y3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hh
cjMyJiBvbmVBZnRlcgogICAgIHR3b0JlZm9yZSA9IGNoYXJhY3RlcnNbMl07CiB9CiAKLVJlZlB0
cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25E
aXJlY3Rpb246OkJhY2t3YXJkKTsKLQotICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgLy8gV2Ug
Y291bGQgYmUgYXQgdGhlIHN0YXJ0IG9mIGEgd29yZCwgdHJ5IGZvcndhcmQuCi0gICAgICAgIHJh
bmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAg
ICB9Ci0KLSAgICBpZiAocmFuZ2UpCisgICAgaWYgKGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFy
aXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkKKyAgICAgICAgcmV0dXJuIHJhbmdl
OworICAgIGlmIChhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKSkKICAgICAgICAgcmV0dXJuIHJhbmdlOwogCiAgICAgVmlzaWJsZVBvc2l0
aW9uIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwpAQCAtMTk2NSwxMyArMTk2MCw3IEBAIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24pCiAgICAgfSB3aGlsZSAoY3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFh
dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjdXJyZW50UG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6
V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7CiAgICAgaWYg
KGN1cnJlbnRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9z
aXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0
eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotCi0gICAg
aWYgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdl
OjpjcmVhdGUocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1
bWVudCgpLCBjdXJyZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAgICAgQVNTRVJUKHJhbmdl
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmFuZ2U7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5n
ZShjdXJyZW50UG9zaXRpb24sIHBvc2l0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGNsb3Nl
c3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
KQpAQCAtMTk4MiwxMSArMTk3MSwxMSBAQCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3Vu
ZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAg
IHJlc3VsdCA9IHBvc2l0aW9uOwogICAgIH0gZWxzZSBpZiAod2l0aGluVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkgewogICAgICAgICAvLyBUaGUgcG9zaXRpb24gbGllcyB3
aXRoaW4gYSB3b3JkLgotICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0KLSAgICAgICAgcmVzdWx0
ID0gd29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChkaXN0YW5jZUJldHdl
ZW5Qb3NpdGlvbnMocG9zaXRpb24sIHJlc3VsdCkgPiAxKQotICAgICAgICAgICAgcmVzdWx0ID0g
d29yZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBl
bmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6
V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5zdGFy
dCk7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBvc2l0aW9uLCBy
ZXN1bHQpID4gMSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24od29yZFJhbmdlLT5lbmQpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdEJv
dW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKSB7CiAgICAgICAgIC8vIFRoZSBw
b3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KICAgICAgICAgcmVzdWx0ID0gcG9zaXRp
b247CkBAIC0yMDAyLDcgKzE5OTEsNyBAQCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3Vu
ZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJz
SW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
LCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0lu
RGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwg
aW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICBQb3NpdGlvbiBlbmQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwpAQCAtMjAxOCwx
MCArMjAwNywxMCBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRp
cmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQbwogICAgIGlmIChkaXJlY3Rpb24g
PT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0
eShlbmQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQpKQogICAgICAgICBlbmQgPSBlbmRPZldvcmQoZW5kKS5kZWVwRXF1aXZhbGVu
dCgpOwogCi0gICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogfSAgICAKIAotUmVmUHRyPFJhbmdlPiByYW5nZUV4
cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBw
b3NpdGlvbiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpCiB7
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBv
c2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CkBAIC0yMDI5LDggKzIwMTgs
NyBAQCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVy
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcwogICAgICAgICBzdGFydCA9IHN0YXJ0LnByZXZp
b3VzKENoYXJhY3Rlcik7CiAgICAgICAgIGVuZCA9IGVuZC5uZXh0KENoYXJhY3Rlcik7CiAgICAg
fQotICAgIAotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKIH0KIAogc3RkOjpwYWlyPFZpc2libGVQb3NpdGlv
biwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldpdGhvdXRDcm9z
c2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTIwNDEsOSArMjAy
OSw5IEBAIHN0ZDo6cGFpcjxWaXNpYmxlUG9zaXRpb24sIFdpdGhpbldvcmRCb3VuZGFyeT4gd29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb25XaXRob3V0Q3JvCiAgICAgaWYgKHdpdGhpblRleHRVbml0T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKICAgICAgICAgYXV0byBhZGp1c3RlZFBvc2l0
aW9uID0gcG9zaXRpb247CiAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpIHsKLSAgICAgICAgICAgIGFkanVz
dGVkUG9zaXRpb24gPSB3b3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGFk
anVzdGVkUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24od29yZFJhbmdlLT5z
dGFydCk7CiAgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBvc2l0aW9u
LCBhZGp1c3RlZFBvc2l0aW9uKSA+IDEpCi0gICAgICAgICAgICAgICAgYWRqdXN0ZWRQb3NpdGlv
biA9IHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFBv
c2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4geyBhZGp1c3RlZFBvc2l0aW9uLCBXaXRoaW5Xb3JkQm91
bmRhcnk6OlllcyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVVuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmlu
ZGV4IDFhNzgzMmViMzdiODE5OTViOTFiMTAzMGU5NGIxNTRhNDNkNjMwZGIuLjQyZTYzNzg5NWVl
Yzc5YmQ4YzIyYjZkYzc4OTU0N2EyYjhhOWFlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlVW5pdHMuaApAQCAtMTAxLDEzICsxMDEsMTMgQEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Vu
ZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
IFdFQkNPUkVfRVhQT1JUIGJvb2wgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09S
RV9FWFBPUlQgYm9vbCB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9F
WFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZW5jbG9zaW5nVGV4dFVuaXRPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbmNs
b3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdy
YW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9FWFBPUlQgc3RkOjpwdHJk
aWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGNsb3Nlc3RXb3Jk
Qm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKTsKIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUsIFVDaGFyMzIm
IHR3b0JlZm9yZSk7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRB
cm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbnVt
YmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpOwotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBy
YW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIFNlbGVjdGlv
bkRpcmVjdGlvbik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VF
eHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCk7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3Jk
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IG51bWJlck9mQ2hhcmFjdGVyc1Rv
RXhwYW5kLCBTZWxlY3Rpb25EaXJlY3Rpb24pOwogZW51bSBjbGFzcyBXaXRoaW5Xb3JkQm91bmRh
cnkgOiBib29sIHsgTm8sIFllcyB9OwogV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFZpc2libGVQ
b3NpdGlvbiwgV2l0aGluV29yZEJvdW5kYXJ5PiB3b3JkQm91bmRhcnlGb3JQb3NpdGlvbldpdGhv
dXRDcm9zc2luZ0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCA2YjA4ZmQyZGYxOThhYWVm
Y2JjOTkyMjIzNTk5NWI1NjJlNmQ3MmRmLi4xNGZhNjg4MmM2NzM2YzczZmQ2MzQ0MDhmZWNkNzhh
NDJkYmFhNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCkBAIC0xMjgsNyArMTI4LDcgQEAgT3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXMKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICBSZWZQ
dHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4
dFJhbmdlOwogCiAgICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUp
KSB7CiAgICAgICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVz
dFJlc3VsdC5sb2NhbFBvaW50KCksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IDJkZDA1ZTE2NWIwYjZkZDQ4ZDZj
NmY2MDM3MmU3ZDVjZWY4Y2E3ZDIuLjNjMTIzMTlmYWIwODY3NTk1OWU1M2NkOGU3OWFiMzQzZDEx
YTdiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0ICJQYWdlLmgiCi0jaW1wb3J0ICJSYW5n
ZS5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIK
ICNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjgzLDExICsyODIsMTEgQEAgT3B0aW9u
YWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGUKICAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50ID0gY2hh
cmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5k
KSk7CiAgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKIAotICAgIFJlZlB0cjxSYW5nZT4g
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOwotICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KCpmdWxsQ2hhcmFjdGVyUmFu
Z2UpOworICAgIGF1dG8gZnVsbENoYXJhY3RlclJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShwYXJh
Z3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWlu
VGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UpOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBh
ZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2Vs
ZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pLmdldCgpLmhpZ2hsaWdodFJhbmdlOwogCi0gICAgcmV0
dXJuIHsgeyByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxp
Z2h0UmFuZ2UpLCBuaWwgfSB9OworICAgIHJldHVybiB7IHsgcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KGZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UpLCBuaWwgfSB9OwogCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCkBAIC0zNDEsMTEgKzM0MCw3IEBAIE9wdGlvbmFsPHN0
ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VBdEhpdFRlCiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0Zvckxp
bmVSdWxlcy5zdGFydCgpOwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4K
LSAgICAgICAgYXV0byBleHBhbmRlZFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9u
QnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWV4cGFuZGVkUmFuZ2Up
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGZ1bGxDaGFyYWN0
ZXJSYW5nZSA9IHsgKmV4cGFuZGVkUmFuZ2UgfTsKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTAp
OwogCiAgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
CiAgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShmdWxs
Q2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBwb3NpdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThl
NjllYTU5YjU4NmI3Yi4uOWVmMjBjNjM2YTUwYjljMmMzYzM2OTMwNzhhYTdkNWNhYzUzMTlhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC05NCwx
MCArOTQsMTIgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRh
Y2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBvdXRUeXBlcy5hcHBlbmQo
UGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKICAgICBvdXREYXRhLmFwcGVuZChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5vcmlnaW5JZGVudGlmaWVy
Rm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIoKSk7CiAKLSAgICBpZiAo
YXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShl
bGVtZW50UmFuZ2UpLmdldCgpKSkgewotICAgICAgICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9
IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpKSB7Ci0gICAgICAgICAgICBvdXRUeXBl
cy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOwotICAgICAgICAgICAgb3V0RGF0YS5hcHBl
bmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKKyAgICBpZiAo
ZWxlbWVudFJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGUoKmVsZW1lbnRSYW5nZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGRhdGEg
PSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSkgeworICAgICAgICAgICAgICAgIG91
dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CisgICAgICAgICAgICAgICAgb3V0
RGF0YS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5nZXQoKSkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCAyODczM2VlZWEzNzZjZjhm
ZTA4MTc1NDQ3MGViMzMxODU0YWRlNDMwLi4zNGFhN2FiZjMzZjc0NGRlMDdkOGU5OWU2ZDVkM2Y1
ZWM0MjBlMmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dl
YkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNjY5LDcgKzY2OSw3IEBAIGJvb2wgV2ViQ29udGVu
dFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFhbGxv
d1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIFt0ZXh0IHByZWNv
bXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKSk7CisgICAgYWRkRnJhZ21lbnQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhD
YW5vbmljYWxNYXBwaW5nXSkpOwogCiAgICAgbWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dCA9IHRy
dWU7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCmluZGV4IGQ2MDlmMjJjODRmMGNmNzk4MDBhYTkzZDRi
MjBiZjgyZDQ4MDI1MjMuLjdjYjY1OTRmYWQ3OGFmODkwMzJmZGQ1ZGU4NmY4ZGE0NTVmZTFmNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJH
dGsuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWlu
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIHRleHQpKTsKKyAgICBhZGRGcmFnbWVudChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQsIHRleHQpKTsKIAogICAgIG1hZGVGcmFnbWVudEZy
b21QbGFpblRleHQgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggMGI3YzI2MjUzYTAwODJlM2M1
NGFlZWZlYTA2MTYzMjRlNjI0OGM3YS4uOWRkNDFkNjM2NjUxMmZkMzg1OTM3YTc2MDhiZDNmYzli
NWI5MGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9y
TGliV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJX
UEUuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzCiAKICAgICBp
ZiAodHlwZXMuY29udGFpbnMoInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIpKSB7CiAgICAgICAg
IGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFzdGVib2FyZC5yZWFkU3RyaW5n
KCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcmFn
bWVudEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hh
cnNldD11dGYtOCIpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4
IDdmYTM1NmI5ZjBhYTk2YjBlYTk1NDZhZGVjZmNlNWJkYzhhMWIxM2MuLjg3NjEyMGJiMDliMTJl
MDllNGRlY2E1OGU1NTRkMzAyNzAxZWY0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAtMTMxLDcgKzEzMSw3IEBA
IE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlVG9Qb3NpdGlvbiA9
IG1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9z
aXRpb24pOworICAgIGF1dG8gcmFuZ2VUb1Bvc2l0aW9uID0gbWFrZVNpbXBsZVJhbmdlKGZ1bGxD
aGFyYWN0ZXJSYW5nZS0+c3RhcnQsIHBvc2l0aW9uKTsKICAgICBpZiAoIXJhbmdlVG9Qb3NpdGlv
bikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCmluZGV4IGJmZjEzMjBkMzY5ZjgyZWRkZTJlMTE1ZTA3YTg1NGQxZDMzMWJiMTcuLmVjMmQ5
YjQ3OGFmYzJiOTYyNTQzNzI1ZTZiMThhOGI5NWMzOGY5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKQEAgLTMzMSw5ICszMzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbk1TT0xp
c3QgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBSZXNvbHZlVVJMcyB1cmxzVG9SZXNvbHZlLCBT
ZXJpYWxpemVDb21wb3NlZFRyZWUgc2VyaWFsaXplQ29tcG9zZWRUcmVlLAotICAgIEFubm90YXRl
Rm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25N
b2RlIHN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlLCBNU09MaXN0TW9kZSBtc29M
aXN0TW9kZSwgYm9vbCBuZWVkc1Bvc2l0aW9uU3R5bGVDb252ZXJzaW9uLCBOb2RlKiBoaWdoZXN0
Tm9kZVRvQmVTZXJpYWxpemVkKQotICAgIDogTWFya3VwQWNjdW11bGF0b3Iobm9kZXMsIHVybHNU
b1Jlc29sdmUpCitpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgVmVj
dG9yPE5vZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHJlc29sdmVVUkxzLCBTZXJpYWxpemVDb21w
b3NlZFRyZWUgc2VyaWFsaXplQ29tcG9zZWRUcmVlLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFu
bm90YXRlLCBTdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZSBzdGFuZGFyZEZvbnRG
YW1pbHlTZXJpYWxpemF0aW9uTW9kZSwgTVNPTGlzdE1vZGUgbXNvTGlzdE1vZGUsIGJvb2wgbmVl
ZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwgTm9kZSogaGlnaGVzdE5vZGVUb0JlU2VyaWFsaXpl
ZCkKKyAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCByZXNvbHZlVVJMcykKICAgICAsIG1f
c3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChlbmQpCiAgICAgLCBtX2Fubm90YXRlKGFubm90YXRl
KQpAQCAtODM1LDcgKzgzNCw3IEBAIHN0YXRpYyBOb2RlKiBoaWdoZXN0QW5jZXN0b3JUb1dyYXBN
YXJrdXAoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYKICAgICByZXR1cm4g
c3BlY2lhbENvbW1vbkFuY2VzdG9yOwogfQogCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgUmVzb2x2ZVVSTHMgdXJsc1Rv
UmVzb2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNlcmlhbGl6ZUNvbXBvc2VkVHJlZSwKK3N0
YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFZlY3RvcjxOb2RlKj4q
IG5vZGVzLCBSZXNvbHZlVVJMcyByZXNvbHZlVVJMcywgU2VyaWFsaXplQ29tcG9zZWRUcmVlIHNl
cmlhbGl6ZUNvbXBvc2VkVHJlZSwKICAgICBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRl
LCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFN0YW5kYXJk
Rm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlIHN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRp
b25Nb2RlLCBNU09MaXN0TW9kZSBtc29MaXN0TW9kZSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIjxiciBjbGFzcz1cIiIgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgIlwiPiIp
KTsKQEAgLTg2Miw3ICs4NjEsNyBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdW
aXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAogCiAgICAgTm9k
ZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKHN0
YXJ0LCBlbmQsICpjb21tb25BbmNlc3RvciwgYW5ub3RhdGUpOwogCi0gICAgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3IgYWNjdW11bGF0b3Ioc3RhcnQsIGVuZCwgbm9kZXMsIHVybHNUb1Jlc29sdmUs
IHNlcmlhbGl6ZUNvbXBvc2VkVHJlZSwgYW5ub3RhdGUsIHN0YW5kYXJkRm9udEZhbWlseVNlcmlh
bGl6YXRpb25Nb2RlLCBtc29MaXN0TW9kZSwgbmVlZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwg
c3BlY2lhbENvbW1vbkFuY2VzdG9yKTsKKyAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBhY2N1
bXVsYXRvcihzdGFydCwgZW5kLCBub2RlcywgcmVzb2x2ZVVSTHMsIHNlcmlhbGl6ZUNvbXBvc2Vk
VHJlZSwgYW5ub3RhdGUsIHN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlLCBtc29M
aXN0TW9kZSwgbmVlZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbiwgc3BlY2lhbENvbW1vbkFuY2Vz
dG9yKTsKIAogICAgIFBvc2l0aW9uIHN0YXJ0QWRqdXN0ZWRGb3JJbnRlcmNoYW5nZU5ld2xpbmUg
PSBzdGFydDsKICAgICBpZiAoYW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVz
ICYmIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcih2aXNpYmxlU3RhcnQpKSB7CkBAIC05MzQs
OSArOTMzLDEwIEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVh
cmFuY2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsCiAgICAgcmV0dXJuIGFjY3VtdWxh
dG9yLnRha2VSZXN1bHRzKCk7CiB9CiAKLVN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFs
QXBwZWFyYW5jZShjb25zdCBSYW5nZSYgcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzIGNvbnZl
cnRCbG9ja3NUb0lubGluZXMsIFJlc29sdmVVUkxzIHVybHNUb1Jlc2x2ZSkKK1N0cmluZyBzZXJp
YWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBD
b252ZXJ0QmxvY2tzVG9JbmxpbmVzIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJlc29sdmVVUkxz
IHJlc29sdmVVUkxzKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZUludGVybmFsKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24o
KSwgbm9kZXMsIHVybHNUb1Jlc2x2ZSwgU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywKKyAgICBy
ZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UuZW5kKSwKKyAgICAgICAgbm9kZXMsIHJlc29sdmVVUkxzLCBTZXJpYWxpemVD
b21wb3NlZFRyZWU6Ok5vLAogICAgICAgICBhbm5vdGF0ZSwgY29udmVydEJsb2Nrc1RvSW5saW5l
cywgU3RhbmRhcmRGb250RmFtaWx5U2VyaWFsaXphdGlvbk1vZGU6OktlZXAsIE1TT0xpc3RNb2Rl
OjpEb05vdFByZXNlcnZlKTsKIH0KIApAQCAtMTA0Myw5ICsxMDQzLDkgQEAgUmVmPERvY3VtZW50
RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKLVN0cmluZyBzZXJpYWxpemVG
cmFnbWVudChjb25zdCBOb2RlJiBub2RlLCBTZXJpYWxpemVkTm9kZXMgcm9vdCwgVmVjdG9yPE5v
ZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHVybHNUb1Jlc29sdmUsIFZlY3RvcjxRdWFsaWZpZWRO
YW1lPiogdGFnTmFtZXNUb1NraXAsIFNlcmlhbGl6YXRpb25TeW50YXggc2VyaWFsaXphdGlvblN5
bnRheCkKK1N0cmluZyBzZXJpYWxpemVGcmFnbWVudChjb25zdCBOb2RlJiBub2RlLCBTZXJpYWxp
emVkTm9kZXMgcm9vdCwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIFJlc29sdmVVUkxzIHJlc29sdmVV
UkxzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBTZXJpYWxpemF0aW9u
U3ludGF4IHNlcmlhbGl6YXRpb25TeW50YXgpCiB7Ci0gICAgTWFya3VwQWNjdW11bGF0b3IgYWNj
dW11bGF0b3Iobm9kZXMsIHVybHNUb1Jlc29sdmUsIHNlcmlhbGl6YXRpb25TeW50YXgpOworICAg
IE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCByZXNvbHZlVVJMcywgc2VyaWFs
aXphdGlvblN5bnRheCk7CiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGNv
bnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpLCByb290LCB0YWdOYW1lc1RvU2tpcCk7CiB9CiAKQEAgLTEx
MTIsMjAgKzExMTIsMTYgQEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKiBub2RlKQogICAg
IHJldHVybiBpc1RhYlNwYW5UZXh0Tm9kZShmaXJzdENoaWxkLT5maXJzdENoaWxkKCkpICYmIHNl
Y29uZENoaWxkLT5pc1RleHROb2RlKCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2
ZXNOZXdsaW5lKGNvbnN0IFJhbmdlJiBjb250ZXh0KQorc3RhdGljIGJvb2wgY29udGV4dFByZXNl
cnZlc05ld2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiB7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uKGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKLSAgICBOb2RlKiBjb250
YWluZXIgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBp
ZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNl
cnZlTmV3bGluZSgpOworICAgIGF1dG8gY29udGFpbmVyID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSkuZGVlcEVxdWl2YWxlbnQoKS5j
b250YWluZXJOb2RlKCk7CisgICAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXItPnJlbmRl
cmVyKCkgJiYgY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgp
OwogfQogCi1SZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5n
ZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9j
dW1lbnQoKTsKLSAgICBSZWY8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0
YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwpAQCAtMTE2MSwxNCArMTE1NywxNCBAQCBSZWY8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiB0ZXh0KQogICAgIH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFn
cmFwaHMuIEV4dHJhIGxpbmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAg
IE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOwor
ICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250
ZXh0KS0+Zmlyc3ROb2RlKCkpOwogICAgIEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVu
dD4oYmxvY2tOb2RlKTsKICAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9j
a05vZGUKICAgICAgICAgJiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYg
IWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFt
ZShodG1sVGFnKQotICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihj
b250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgYm9vbCB1c2VMaW5lQnJlYWsgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2woY29udGV4dC5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBi
bG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29udGV4dC5zdGFydCkpOworICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4
dEZvcm1Db250cm9sKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7
CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVu
dHJpZXMoJ1xuJyk7CiAgICAgc2l6ZV90IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuaAppbmRleCA4NjU2N2Y0NTc4MGFhYmE1MWIzZWQ4MmEwOWE1MWUyMjAyNmEw
MjZiLi5mZmEzMjdlOWVlY2U1NWRlNTdmMjQ0Y2U4YjVhYTJmZWVkOGI2NGRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmgKQEAgLTQ0LDExICs0NCwxMiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhU
TUxFbGVtZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUHJlc2VudGF0aW9u
U2l6ZTsKIGNsYXNzIFF1YWxpZmllZE5hbWU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFZpc2libGVT
ZWxlY3Rpb247CiAKK3N0cnVjdCBQcmVzZW50YXRpb25TaXplOworc3RydWN0IFNpbXBsZVJhbmdl
OworCiB2b2lkIHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYs
IEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz4mJik7CiB2b2lkIHJlbW92ZVN1YnJlc291
cmNlVVJMQXR0cmlidXRlcyhSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiwgV1RGOjpGdW5jdGlvbjxi
b29sKGNvbnN0IFVSTCYpPiBzaG91bGRSZW1vdmVVUkwpOwogCkBAIC01Nyw3ICs1OCw3IEBAIGVu
dW0gY2xhc3MgTVNPTGlzdFF1aXJrcyA6IGJvb2wgeyBDaGVja0lmTmVlZGVkLCBEaXNhYmxlZCB9
OwogU3RyaW5nIHNhbml0aXplTWFya3VwKGNvbnN0IFN0cmluZyYsIE1TT0xpc3RRdWlya3MgPSBN
U09MaXN0UXVpcmtzOjpEaXNhYmxlZCwgT3B0aW9uYWw8V1RGOjpGdW5jdGlvbjx2b2lkKERvY3Vt
ZW50RnJhZ21lbnQmKT4+IGZyYWdtZW50U2FuaXRpemVyID0gV1RGOjpudWxsb3B0KTsKIFN0cmlu
ZyBzYW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21l
bnQ+JiYsIERvY3VtZW50JiwgTVNPTGlzdFF1aXJrcywgY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1h
cmt1cCk7CiAKLVdFQkNPUkVfRVhQT1JUIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOworV0VCQ09S
RV9FWFBPUlQgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29u
c3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiBXRUJDT1JFX0VY
UE9SVCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3Vt
ZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2Vy
Q29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBFeGNlcHRpb25PcjxSZWY8
RG9jdW1lbnRGcmFnbWVudD4+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoRWxlbWVu
dCYsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBQYXJzZXJDb250ZW50UG9saWN5KTsKIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQoRG9j
dW1lbnQmLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VN
SU1FVHlwZSk7CkBAIC03Miw3ICs3Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlcGxhY2VDaGls
ZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUmVmPERvY3VtZW50RnJhZ21lCiBlbnVt
IGNsYXNzIFJlc29sdmVVUkxzIDogdWludDhfdCB7IE5vLCBZZXMsIFllc0V4Y2x1ZGluZ0xvY2Fs
RmlsZVVSTHNGb3JQcml2YWN5IH07CiBlbnVtIGNsYXNzIENvbnZlcnRCbG9ja3NUb0lubGluZXMg
OiB1aW50OF90IHsgTm8sIFllcyB9OwogZW51bSBjbGFzcyBTZXJpYWxpemVDb21wb3NlZFRyZWUg
OiB1aW50OF90IHsgTm8sIFllcyB9OwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFJhbmdlJiwgVmVjdG9yPE5vZGUqPiogPSBu
dWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6
Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywg
UmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVmVj
dG9yPE5vZGUqPiogPSBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlID0gQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZTo6Tm8sIENvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBDb252ZXJ0QmxvY2tz
VG9JbmxpbmVzOjpObywgUmVzb2x2ZVVSTHMgPSBSZXNvbHZlVVJMczo6Tm8pOwogU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
LCBSZXNvbHZlVVJMcyA9IFJlc29sdmVVUkxzOjpObywgU2VyaWFsaXplQ29tcG9zZWRUcmVlID0g
U2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObywgVmVjdG9yPE5vZGUqPiogPSBudWxscHRyKTsKIAog
ZW51bSBjbGFzcyBTZXJpYWxpemVkTm9kZXMgOiB1aW50OF90IHsgU3VidHJlZUluY2x1ZGluZ05v
ZGUsIFN1YnRyZWVzT2ZDaGlsZHJlbiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAppbmRleCAwMWFiOTE3ZDBkYzk3OGMz
MWZlZmY3YTlhMDkwY2QwMmJmMWRkOGQ2Li5hNWJlMDcxZTM2ODYwNzdlZTM2ZDIxZTM1YTU4Mzk4
MDRkOTg3ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9j
Zi9MZWdhY3lXZWJBcmNoaXZlLmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTZXJpYWxpemVkQXR0YWNobWVudERhdGEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpA
QCAtNDE3LDcgKzQxNiw3IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGUoTm9kZSYgbm9kZSwgV1RGOjpGdW5jdGlvbjxib29sCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZSgpOwogCi0gICAgLy8gSWYgdGhlIHBhZ2Ugd2FzIGxv
YWRlZCB3aXRoIGphdmFzY3JpcHQgZW5hYmxlZCwgd2UgZG9uJ3Qgd2FudCB0byBhcmNoaXZlIDxu
b3NjcmlwdD4gdGFncworICAgIC8vIElmIHRoZSBwYWdlIHdhcyBsb2FkZWQgd2l0aCBKYXZhU2Ny
aXB0IGVuYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gYXJjaGl2ZSA8bm9zY3JpcHQ+IHRhZ3MKICAg
ICAvLyBJbiBwcmFjdGljZSB3ZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgc2NyaXB0aW5n
IHdhcyBlbmFibGVkIHdoZW4gdGhlIHBhZ2Ugd2FzIG9yaWdpbmFsbHkgbG9hZGVkCiAgICAgLy8g
YnV0IHdlIGNhbiBhcHByb3hpbWF0ZSB0aGF0IGJ5IGNoZWNraW5nIGlmIHNjcmlwdGluZyBpcyBl
bmFibGVkIHJpZ2h0IG5vdy4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFF1YWxpZmllZE5h
bWU+PiB0YWdOYW1lc1RvRmlsdGVyOwpAQCAtNDU0LDE5ICs0NTMsMTYgQEAgUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShGcmFtZSYgZnJhbWUpCiAgICAg
cmV0dXJuIGNyZWF0ZShtYWluUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgZG9jdW1lbnRMb2Fk
ZXItPnN1YnJlc291cmNlcygpLCBXVEZNb3ZlKHN1YmZyYW1lQXJjaGl2ZXMpKTsKIH0KIAotUmVm
UHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShSYW5nZSogcmFu
Z2UpCitSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgYXV0byYgZG9jdW1lbnQgPSByYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsd2F5cyAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8KICAg
ICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1
bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVh
cmFuY2UoKnJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Olllcyk7Cisg
ICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhkb2N1bWVudCkgKyBz
ZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShyYW5nZSwgJm5vZGVMaXN0LCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlOjpZZXMpOwogICAgIHJldHVybiBjcmVhdGUobWFya3VwU3RyaW5n
LCAqZnJhbWUsIG5vZGVMaXN0LCBudWxscHRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5oCmluZGV4IGI1MWNmNjE2YmYw
ODJlMjk0MDliNDQyMWE0M2NiNzExMTQ4MGE5ODkuLjY3YWZhODNkYzdhOWJmMjJmOGU4OTY1MWVl
OWVjNDM5MzJmMDY1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKQEAgLTM1LDcgKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKKworc3RydWN0
IFNpbXBsZVJhbmdlOwogCiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlIGZpbmFsIDogcHVibGljIEFy
Y2hpdmUgewogcHVibGljOgpAQCAtNDYsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoTm9kZSYsIFdURjo6
RnVuY3Rpb248Ym9vbChGcmFtZSYpPiYmIGZyYW1lRmlsdGVyID0geyB9KTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShGcmFtZSYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRl
RnJvbVNlbGVjdGlvbihGcmFtZSopOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8
TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKFJhbmdlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2UmKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkRhdGFSZWY+IHJhd0RhdGFSZXByZXNl
bnRhdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZm
OThhYWU4ZDc1NmQyMmQ4NzA4YmQ3YTYzY2VhZGI3ZWE1YzFlN2QuLjU2NmQ1ZDQ2OTMwOWViOGM2
MzM1ZTAyYTJlYzE3MGIxYzYyMTFhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNp
bmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlByb21pc2VkQXR0YWNobWVudEluZm8uaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgi
CkBAIC0yMzksNyArMjQwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVy
YXRpb24oY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGlmICghbV9kcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlcnMuaXNFbXB0eSgpICYmIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5n
ZSAmJiB0cnlUb1VwZGF0ZURyb3BwZWRJbWFnZVBsYWNlaG9sZGVycyhkcmFnRGF0YSkpIHsKICAg
ICAgICAgbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMuY2xlYXIoKTsKLSAgICAgICAgbV9kcm9w
cGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdlID0gbnVsbHB0cjsKKyAgICAgICAgbV9kcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgICAgICBtX2RvY3VtZW50VW5k
ZXJNb3VzZSA9IG51bGxwdHI7CiAgICAgICAgIGNsZWFyRHJhZ0NhcmV0KCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNjMzLDcgKzYzNCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNs
dWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KSwgdGV4dCk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCk7CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNs
aWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTg1Niw5
ICs4NTcsMTAgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogCiBz
dGF0aWMgdm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJh
bmdlLT5zZWxlY3ROb2RlKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgp
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05T
VFJFQU0pKTsKKyAgICBpZiAoYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgp
KSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVt
ZW50KSkKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oKnJhbmdl
KTsKKyAgICB9CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhUTUxEcmFnKGNvbnN0
IEludFBvaW50JiBtb3VzZURyYWdnZWRQb2ludCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4s
IGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wgaXNMaW5rSW1hZ2UpCkBAIC0x
MzczLDcgKzEzNzUsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpkb1N5c3RlbURyYWcoRHJhZ0lt
YWdlIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0xvYywgY29ucwogCiB2b2lkIERyYWdDb250
cm9sbGVyOjpyZW1vdmVBbGxEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMoKQogewotICAgIG1fZHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9IG51bGxwdHI7CisgICAgbV9kcm9wcGVkSW1hZ2VQ
bGFjZWhvbGRlclJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xk
ZXIgOiBzdGQ6OmV4Y2hhbmdlKG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzLCB7IH0pKSB7CiAg
ICAgICAgIGlmIChwbGFjZWhvbGRlci0+aXNDb25uZWN0ZWQoKSkKICAgICAgICAgICAgIHBsYWNl
aG9sZGVyLT5yZW1vdmUoKTsKQEAgLTE0NTUsMTMgKzE0NTcsMTMgQEAgdm9pZCBEcmFnQ29udHJv
bGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8
SW50U2l6ZT4KICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3Jl
YXRlKCpkb2N1bWVudCwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlByZXZlbnROZXN0aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNl
IH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwog
Ci0gICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IGNvbW1hbmQtPmluc2VydGVkQ29udGVu
dFJhbmdlKCk7CisgICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShjb21tYW5kLT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpKTsKICAgICBpZiAoIWluc2VydGVkQ29u
dGVudFJhbmdlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBjb250YWluZXIgPSBtYWtlUmVmUHRyKGluc2VydGVkQ29u
dGVudFJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKKyAgICBhdXRvIGNvbnRhaW5l
ciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCppbnNlcnRlZENvbnRlbnRSYW5nZSk7CiAgICAg
aWYgKCFpczxDb250YWluZXJOb2RlPihjb250YWluZXIpKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNDY5LDcgKzE0NzEsNyBAQCB2b2lkIERy
YWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0
IFZlY3RvcjxJbnRTaXplPgogCiAgICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gcGxh
Y2Vob2xkZXJzOwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBkZXNjZW5kYW50c09mVHlw
ZTxIVE1MSW1hZ2VFbGVtZW50Pihkb3duY2FzdDxDb250YWluZXJOb2RlPigqY29udGFpbmVyKSkp
IHsKLSAgICAgICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGluc2VydGVkQ29udGVudFJhbmdlLT5p
bnRlcnNlY3RzTm9kZShwbGFjZWhvbGRlcik7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUg
PSBjcmVhdGVMaXZlUmFuZ2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUo
cGxhY2Vob2xkZXIpOwogICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigp
ICYmIGludGVyc2VjdHNOb2RlLnJldHVyblZhbHVlKCkpCiAgICAgICAgICAgICBwbGFjZWhvbGRl
cnMuYXBwZW5kKHBsYWNlaG9sZGVyKTsKICAgICB9CkBAIC0xNDkzLDcgKzE0OTUsNyBAQCB2b2lk
IERyYWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNv
bnN0IFZlY3RvcjxJbnRTaXplPgogICAgIG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZSA9
IFdURk1vdmUoaW5zZXJ0ZWRDb250ZW50UmFuZ2UpOwogCiAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LmNsZWFyKCk7Ci0gICAgY2FyZXRDb250cm9sbGVyLnNldENhcmV0UG9zaXRpb24obV9kcm9wcGVk
SW1hZ2VQbGFjZWhvbGRlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGNhcmV0Q29udHJv
bGxlci5zZXRDYXJldFBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2Ryb3Bw
ZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2UtPnN0YXJ0KSk7CiB9CiAKIHZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OmZpbmFsaXplRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIoSFRNTEltYWdlRWxlbWVudCYgcGxh
Y2Vob2xkZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggOTIyNGFiMjA2
Y2RmZWJiNTNmMTFjNzhhM2VhZTIwODEzY2ZkZDI2Yy4uZTMwMGQzMjhkNTc5ZWRiMTcxZjAzZTIw
MDhmMTRkOGI3ZWJmNjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIkludFBvaW50
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OSw3ICs5MCw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYWNlRHJhZ0NhcmV0KGNvbnN0IElu
dFBvaW50Jik7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiYgZHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlcnM7IH0KLSAgICBjb25zdCBSZWZQdHI8UmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
OyB9CisgICAgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBkcm9wcGVkSW1hZ2VQbGFjZWhv
bGRlclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlclJhbmdl
OyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmFsaXplRHJvcHBlZEltYWdlUGxhY2Vo
b2xkZXIoSFRNTEltYWdlRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0
RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4mIGlt
YWdlU2l6ZXMpOwpAQCAtMTYxLDcgKzE2Miw3IEBAIHByaXZhdGU6CiAgICAgVVJMIG1fZHJhZ2dp
bmdJbWFnZVVSTDsKICAgICBib29sIG1faXNQZXJmb3JtaW5nRHJvcCB7IGZhbHNlIH07CiAgICAg
VmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gbV9kcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnM7
Ci0gICAgUmVmUHRyPFJhbmdlPiBtX2Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyUmFuZ2U7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1fZHJvcHBlZEltYWdlUGxhY2Vob2xkZXJSYW5nZTsKIH07
CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEcmFnZ2FibGVMaW5rKGNvbnN0IEVsZW1lbnQmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDI5NTA5YzUzYzZiZjgyNjJiYmJiNzNlMTFiNWJiYzVmZTI5
OTllY2EuLjIwODM1ODZjMjczYmU1YmU1NDg3NzJhMWY1NDZmZjk0YjNmNzNkMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgIlBvaW50ZXJDYXB0dXJlQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlBvaW50ZXJMb2NrQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
RGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTcxMSw4MCArNzEyLDc3IEBAIGJvb2wgUGFn
ZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywg
RGlkV3JhcCogZGlkV3JhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFBhZ2U6OmZpbmRT
dHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0
aW9ucywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hdGNoUmFuZ2VzLCBpbnQm
IGluZGV4Rm9yU2VsZWN0aW9uKQorYXV0byBQYWdlOjpmaW5kVGV4dE1hdGNoZXMoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0KSAtPiBNYXRj
aGluZ1JhbmdlcwogewotICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0UmFuZ2VzOwotCi0g
ICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOworICAgIE1hdGNoaW5nUmFuZ2VzIHJlc3VsdDsKIAog
ICAgIEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogZnJhbWVXaXRoU2Vs
ZWN0aW9uID0gbnVsbHB0cjsKICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jb3Vu
dE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgeyB9LCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIHJl
c3VsdFJhbmdlcy5zaXplKCkpIDogMCwgdHJ1ZSwgJnJlc3VsdFJhbmdlcyk7CisgICAgICAgIGZy
YW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgeyB9LCBvcHRpb25zLCBs
aW1pdCA/IChsaW1pdCAtIHJlc3VsdC5yYW5nZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHQu
cmFuZ2VzKTsKICAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCiAgICAg
ICAgICAgICBmcmFtZVdpdGhTZWxlY3Rpb24gPSBmcmFtZTsKICAgICAgICAgZnJhbWUgPSBpbmNy
ZW1lbnRGcmFtZShmcmFtZSwgdHJ1ZSwgQ2FuV3JhcDo6Tm8pOwogICAgIH0gd2hpbGUgKGZyYW1l
KTsKIAotICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHJlc3VsdC5yYW5nZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owog
CiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewotICAgICAgICBpbmRleEZvclNlbGVjdGlv
biA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CisgICAgICAgIHJlc3VsdC5pbmRleEZvclNl
bGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CiAgICAgICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0t
aSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3Jl
YXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlc1tpIC0gMV0pKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NU
QVJULCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0LnJhbmdlc1tpIC0gMV0pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJl
c3VsdC5yZXR1cm5WYWx1ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5k
ZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZXN1bHRSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uo
c2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5E
LCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwg
MCkgewotICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdC5yYW5nZXNbaV0pKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFy
aXNvblJlc3VsdC5yZXR1cm5WYWx1ZSgpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKQotICAgICAgICAgICAgaW5k
ZXhGb3JTZWxlY3Rpb24gPSByZXN1bHRSYW5nZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIHJl
c3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpIC0gMTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOworICAgICAgICAgICAg
cmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHJh
bmdlIDogcmVzdWx0UmFuZ2VzKQotICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiBQ
YWdlOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNl
UmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gUGFnZTo6
cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAo
dGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBDYW5XcmFwIGNhbldyYXAgPSBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91
bmQpID8gQ2FuV3JhcDo6WWVzIDogQ2FuV3JhcDo6Tm87Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVm
ZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkgOiAm
bWFpbkZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVu
Y2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1l
KCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlm
IChhdXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0
LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gbWFrZVNpbXBsZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSA6
IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQotICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJh
bmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFy
dEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJv
dW5kKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRSYW5nZTsKICAgICAgICAgZnJhbWUgPSBp
bmNyZW1lbnRGcmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSwgY2FuV3Jh
cCk7CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAv
LyBTZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhl
IHJlZmVyZW5jZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEg
Yml0IGFuZCBqdXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24uCiAgICAgaWYgKGNhbldyYXAg
PT0gQ2FuV3JhcDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIHJl
c3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1h
a2VTaW1wbGVSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0
YXJ0SW5TZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1
bHRSYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRp
dG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsICpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucyB8IFdy
YXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRS
YW5nZTsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiB1bnNpZ25lZCBQYWdlOjpmaW5kTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQsIFNo
b3VsZEhpZ2hsaWdodE1hdGNoZXMgc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlcywgU2hvdWxkTWFya01h
dGNoZXMgc2hvdWxkTWFya01hdGNoZXMpCkBAIC04NzksMjQgKzg3NywyMiBAQCBzdGF0aWMgdm9p
ZCByZXBsYWNlUmFuZ2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxGaW5kUmVwbGFjZW1lbnRS
YW5nZT4mIHJhbmdlcwogICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgICAgICBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlbWVudFRleHQsIEVkaXRvcjo6
U2VsZWN0UmVwbGFjZW1lbnQ6OlllcywgRWRpdG9yOjpTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0
aW9uOjpJbnNlcnRSZXBsYWNlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXVpbnQzMl90
IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJh
bmdlc1RvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0
aW9uT25seSkKK3VpbnQzMl90IFBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0
b3I8U2ltcGxlUmFuZ2U+JiByYW5nZXNUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRUZXh0LCBib29sIC8qc2VsZWN0aW9uT25seSovKQogewotICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hl
Y2tpbmcgd2hldGhlciBlYWNoIHJhbmdlIGJlaW5nIHJlcGxhY2VkIGlzCi0gICAgLy8gY29udGFp
bmVkIHdpdGhpbiBpdHMgZnJhbWUncyBzZWxlY3Rpb24uCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVj
dGlvbk9ubHkpOworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgcmVzcGVj
dCB0aGUgYHNlbGVjdGlvbk9ubHlgIGZsYWcgYnkgY2hlY2tpbmcgd2hldGhlciBlYWNoIHJhbmdl
IGJlaW5nIHJlcGxhY2VkIGlzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGZyYW1lJ3Mgc2VsZWN0aW9u
LgogCiAgICAgVmVjdG9yPEZpbmRSZXBsYWNlbWVudFJhbmdlPiByZXBsYWNlbWVudFJhbmdlczsK
ICAgICByZXBsYWNlbWVudFJhbmdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJhbmdlc1RvUmVw
bGFjZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFjZSkg
ewotICAgICAgICBhdXRvIGhpZ2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVS
b290KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8
fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigp
KSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgYXV0byBoaWdo
ZXN0Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwg
aGlnaGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwogICAgICAgICByZXBsYWNlbWVudFJhbmdl
cy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHJh
bmdlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOWQ4ZjhmYjUzZjgzYTY2NzUwMTYzZTlmMDM0NDIx
NzAxM2Y2YjM3Yy4uOTE3MzZmYjhkY2JjMDIwMzRiMmMwNDNlZTMzMTFmM2QyMGM5NmYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKQEAgLTEyOSw3ICsxMjksNiBAQCBjbGFzcyBQbHVnaW5WaWV3QmFzZTsKIGNs
YXNzIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjsKIGNsYXNzIFBvaW50ZXJMb2NrQ29udHJvbGxl
cjsKIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwogY2xhc3MgUmVzb3VyY2VVc2FnZU92ZXJsYXk7CiBjbGFzcyBTY3JvbGxMYXRjaGluZ1N0
YXRlOwpAQCAtMTUyLDYgKzE1MSw4IEBAIGNsYXNzIFdlYkdMU3RhdGVUcmFja2VyOwogY2xhc3Mg
V2hlZWxFdmVudERlbHRhRmlsdGVyOwogY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOwogCitz
dHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7
CiB1c2luZyBTaGFyZWRTdHJpbmdIYXNoID0gdWludDMyX3Q7CiAKQEAgLTI4OSwxMiArMjkwLDEy
IEBAIHB1YmxpYzoKICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIERpZFdy
YXAqID0gbnVsbHB0cik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgcmVwbGFjZVJhbmdl
c1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB1aW50MzJfdCByZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVjdG9yPFNp
bXBsZVJhbmdlPiYgcmFuZ2VzVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4
dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KTsKICAgICBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwg
UmFuZ2UqLCBGaW5kT3B0aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiBzZWFyY2hSYW5nZSwgRmluZE9wdGlvbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
dW5zaWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbWFya0Fs
bE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBib29sIHNob3VsZEhp
Z2hsaWdodCwgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CkBAIC0zMDQsMTMgKzMwNSwxNyBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEJlZm9yZVByaW50RXZlbnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQWZ0ZXJQcmludEV2ZW50KCk7CiAK
LSAgICAvLyBGaW5kIGFsbCB0aGUgUmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KKyAgICAv
LyBGaW5kIGFsbCB0aGUgcmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcgdGV4dC4KICAgICAvLyBVcG9u
IHJldHVybiwgaW5kZXhGb3JTZWxlY3Rpb24gd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoK
ICAgICAvLyAwIGlmIHRoZXJlIGlzIG5vIHVzZXIgc2VsZWN0aW9uCiAgICAgLy8gdGhlIGluZGV4
IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGUgdXNlciBzZWxlY3Rpb24KICAgICAvLyBOb01h
dGNoQWZ0ZXJVc2VyU2VsZWN0aW9uIGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIg
dGhlIHVzZXIgc2VsZWN0aW9uLgotICAgIGVudW0geyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9u
ID0gLTEgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdl
cyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgaW50IG1heENvdW50LCBWZWN0b3I8UmVmUHRy
PFJhbmdlPj4mLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICBzdHJ1Y3QgTWF0Y2hpbmdS
YW5nZXMgeworICAgICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlczsKKyAgICAgICAgaW50
IGluZGV4Rm9yU2VsZWN0aW9uIHsgMCB9OyAvLyBGSVhNRTogQ29uc2lkZXIgT3B0aW9uYWw8dW5z
aWduZWQ+IG9yIHVuc2lnbmVkIGZvciB0aGlzIGluc3RlYWQuCisgICAgfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGludCBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uID0gLTE7CisgICAgV0VCQ09S
RV9FWFBPUlQgTWF0Y2hpbmdSYW5nZXMgZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCBtYXhDb3VudCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQppbmRleCAzZDdhNWU5ZDk2MmNkNzAzOTNjZmRmMzViOGRlMDlmYzgxMDNjMjk2Li41ODk4YmU3
MGIzZmEyMzVjOTA4OGI0M2E3NmQ3Mjk3YjFmZDI0NzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQpAQCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCAiUGFnZVRyYW5zaXRpb25FdmVu
dC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxh
eWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbXBvcnQgIlJlbmRl
clRleHRDb250cm9sLmgiCkBAIC0xMTYsMTkgKzExNywxOCBAQCBOU0FycmF5ICpGcmFtZTo6d29y
ZHNJbkN1cnJlbnRQYXJhZ3JhcGgoKSBjb25zdAogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uKHBhZ2UoKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgcGFnZSgpLT5zZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kKHBvc2l0aW9uKTsKKwogICAgIGlmICgh
aXNTdGFydE9mUGFyYWdyYXBoKGVuZCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzID0gZW5kLnByZXZpb3VzKCk7CiAgICAgICAgIFVDaGFyIGMocHJldmlvdXMuY2hhcmFjdGVy
QWZ0ZXIoKSk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHNvbWV0aGluZyBmcm9tIElD
VSBvciBBU0NJSUNUeXBlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gUE9TSVggY3VycmVudCBsYW5n
dWFnZSByYXRoZXIgdGhhbiBpc3dwdW5jdC4KICAgICAgICAgaWYgKCFpc3dwdW5jdChjKSAmJiAh
aXNTcGFjZU9yTmV3bGluZShjKSAmJiBjICE9IG5vQnJlYWtTcGFjZSkKICAgICAgICAgICAgIGVu
ZCA9IHN0YXJ0T2ZXb3JkKGVuZCk7CiAgICAgfQogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChz
dGFydE9mUGFyYWdyYXBoKGVuZCkpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShy
YW5nZU9mQ29udGVudHMoKmRvY3VtZW50KCkpKTsKLSAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5n
ZXQoKSwgc3RhcnQpOwotICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgZW5kKTsKLQotICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgYXV0byBzZWFyY2hSYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNlYXJj
aFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIE5TTXV0YWJs
ZUFycmF5ICp3b3JkcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNDA2ZDViZTkyOWQ1M2ExOTc0MjAwYjk0
ODNmZDQxYTY2ZDM1NmZlZS4uMTdhZmVhYzE0NDJkYmUxYTY2MzlkNzE0NGUxNWE2MGQ2ZGI3Y2Uy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNTc5
LDExICs1NzksOCBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzT3ZlclRleHRJbnNpZGVGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBlbmNsb3NpbmdU
ZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgIGlmICghd29yZFJhbmdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXdvcmRSYW5nZS0+dGV4dCgp
LmlzRW1wdHkoKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFu
dWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CisgICAgcmV0dXJuIHdvcmRSYW5nZSAmJiBoYXNBbnlQ
bGFpblRleHQoKndvcmRSYW5nZSk7CiB9CiAKIFVSTCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxp
bmtVUkwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvbWFj
L1dLV2ViQXJjaGl2ZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tX
ZWJBcmNoaXZlUmVmLmNwcAppbmRleCBiOWM1ODdjY2JlYjAyZDI2ZmZmNjcxNzY4ZjI2ZTRkNjdl
ZjQwODllLi41OTAzYzA1NzI1YzU2ZTdlZWU5ZTQxMWI0NjMzZmZhNDdjYTVkN2RmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9tYWMvV0tXZWJBcmNoaXZlUmVmLmNwcApA
QCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCIK
ICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3Qu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVS
YW5nZS5oPgogCiBXS1R5cGVJRCBXS1dlYkFyY2hpdmVHZXRUeXBlSUQoKQogewpAQCAtNTMsNyAr
NTUsNyBAQCBXS1dlYkFyY2hpdmVSZWYgV0tXZWJBcmNoaXZlQ3JlYXRlV2l0aERhdGEoV0tEYXRh
UmVmIGRhdGFSZWYpCiAKIFdLV2ViQXJjaGl2ZVJlZiBXS1dlYkFyY2hpdmVDcmVhdGVGcm9tUmFu
Z2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZUhhbmRsZVJlZikKIHsKLSAgICBhdXRvIHdl
YkFyY2hpdmUgPSBBUEk6OldlYkFyY2hpdmU6OmNyZWF0ZShXZWJLaXQ6OnRvSW1wbChyYW5nZUhh
bmRsZVJlZiktPmNvcmVSYW5nZSgpKTsKKyAgICBhdXRvIHdlYkFyY2hpdmUgPSBBUEk6OldlYkFy
Y2hpdmU6OmNyZWF0ZShtYWtlU2ltcGxlUmFuZ2UoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVS
ZWYpLT5jb3JlUmFuZ2UoKSkpOwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZ3ZWJBcmNoaXZl
LmxlYWtSZWYoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdl
YkFyY2hpdmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFyY2hpdmUuaAppbmRleCA3
MWRlMjhiZGE3NGQ3ZjAzNGZiOTJjNmYyODI0ZmVhMzllMmNmOWFmLi4xNDY0YTZiNzlhZWNkZmU4
MmU3Y2FjNDRhY2U5ZjNlOTM4MDM0YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BUElXZWJBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2
ZS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBXZWJBcmNoaXZlX2gKLSNkZWZpbmUgV2ViQXJjaGl2ZV9oCisjcHJh
Z21hIG9uY2UKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogCkBAIC0zOCw3ICszNyw3IEBAIGNsYXNz
IERhdGE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExlZ2FjeVdlYkFyY2hpdmU7Ci1j
bGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBA
IC01Miw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0
ZShXZWJBcmNoaXZlUmVzb3VyY2UqIG1haW5SZXNvdXJjZSwgUmVmUHRyPEFQSTo6QXJyYXk+JiYg
c3VicmVzb3VyY2VzLCBSZWZQdHI8QVBJOjpBcnJheT4mJiBzdWJmcmFtZUFyY2hpdmVzKTsKICAg
ICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShBUEk6OkRhdGEqKTsKICAgICBzdGF0aWMg
UmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShSZWZQdHI8V2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZT4m
Jik7Ci0gICAgc3RhdGljIFJlZjxXZWJBcmNoaXZlPiBjcmVhdGUoV2ViQ29yZTo6UmFuZ2UmKTsK
KyAgICBzdGF0aWMgUmVmPFdlYkFyY2hpdmU+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYpOwogCiAgICAgV2ViQXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UoKTsKICAgICBB
UEk6OkFycmF5KiBzdWJyZXNvdXJjZXMoKTsKQEAgLTc2LDUgKzc1LDMgQEAgcHJpdmF0ZToKIH0g
Ly8gbmFtZXNwYWNlIEFQSQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNlbmRpZiAv
LyBXZWJBcmNoaXZlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSVdlYkFy
Y2hpdmUubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUElXZWJBcmNoaXZlLm1tCmluZGV4IGZi
NTRhZjQwYmMwMGQyNDNiZjkwZTkyMjk2Y2QxYjNkMGRiYmNlZWYuLjE4ZGRjNTdhOWQ0MTIwMDlk
NmRmMzBhOThjNmU2YTUwMjNhZjI5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FQSVdlYkFyY2hpdmUubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJV2ViQXJjaGl2
ZS5tbQpAQCAtNTIsOSArNTIsOSBAQCBSZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRl
KFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiYmIGxlZ2FjeVdlYkFyY2hpdmUpCiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViQXJjaGl2ZShsZWdhY3lXZWJBcmNoaXZlLnJlbGVhc2VOb25OdWxs
KCkpKTsKIH0KIAotUmVmPFdlYkFyY2hpdmU+IFdlYkFyY2hpdmU6OmNyZWF0ZShSYW5nZSYgcmFu
Z2UpCitSZWY8V2ViQXJjaGl2ZT4gV2ViQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJBcmNoaXZlKExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZSgmcmFuZ2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
QXJjaGl2ZShMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUocmFuZ2UpKSk7CiB9CiAKIFdlYkFyY2hp
dmU6OldlYkFyY2hpdmUoV2ViQXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UsIFJlZlB0cjxB
UEk6OkFycmF5PiYmIHN1YnJlc291cmNlcywgUmVmUHRyPEFQSTo6QXJyYXk+JiYgc3ViZnJhbWVB
cmNoaXZlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCmluZGV4IDg2YWM1NTNl
NmZjYzA4MjJhZDQxOGM2YTBkM2Y4Y2Y5YzRhOTliOTguLjlmN2M3MzEwOTNjZjg3MWE3ZTRjNjNm
MWIxZjFhNmMzMDUzZjM1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRp
bmdSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApA
QCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25z
dCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGJh
c2UpCitPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1Jhbmdl
KFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2Us
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBiYXNlKQogewogICAgIEFTU0VSVChlZGl0aW5nUmFu
Z2UubG9jYXRpb24gIT0gbm90Rm91bmQpOwogICAgIFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlIHJh
bmdlIHsgZWRpdGluZ1JhbmdlLmxvY2F0aW9uLCBlZGl0aW5nUmFuZ2UubGVuZ3RoIH07CkBAIC00
NywyMSArNDcsMjEgQEAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBFZGl0aW5nUmFuZ2U6OnRvUmFu
Z2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW4KICAgICAgICAgLy8gVGhhdCBm
aXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0LgogICAgICAgICBhdXRv
KiBlbGVtZW50ID0gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1l
bnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSkpOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBy
YW5nZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKGJhc2UgPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2
ZVRvOjpQYXJhZ3JhcGgpOwogCiAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkpKTsKICAgICBpZiAoIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc2NvcGVF
bmQgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRh
aW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkuZW5kOwotICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBo
U3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSkpOworICAgIGF1dG8gc2NvcGVFbmQg
PSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250
YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOworICAgIHJldHVybiBXZWJDb3JlOjpyZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1vdmUoc2Nv
cGVFbmQpIH0sIHJhbmdlKTsKIH0KIAotRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBF
ZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQorRWRpdGlu
Z1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdGluZ1JhbmdlSXNS
ZWxhdGl2ZVRvIGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKIHsKICAgICBBU1NFUlQoZWRpdGlu
Z1JhbmdlSXNSZWxhdGl2ZVRvID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVS
b290KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaAppbmRleCBlMDQzZjk3MjQwZTQy
NWVjZDI1YTQyN2VkZDkyN2FjYjc0NWUzNjE0Li5mMTliNDQzZjBkYzcxOWE3NDgzNWM3OGM3NGIx
NjUzZDk0MTFhMTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuaApAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFJhbmdl
Oworc3RydWN0IFNpbXBsZVJhbmdlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU4LDgg
KzU4LDggQEAgc3RydWN0IEVkaXRpbmdSYW5nZSB7CiAgICAgLy8gKG5vdEZvdW5kLCAwKSBpcyBu
b3RhYmx5IHZhbGlkLgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9u
ICsgbGVuZ3RoID49IGxvY2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiB0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgRWRpdGlu
Z1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJv
b3QpOwotICAgIHN0YXRpYyBFZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiwg
Y29uc3QgV2ViQ29yZTo6UmFuZ2UqLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPSBFZGl0aW5n
UmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiB0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgRWRpdGlu
Z1JhbmdlJiwgRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2
ZVRvOjpFZGl0YWJsZVJvb3QpOworICAgIHN0YXRpYyBFZGl0aW5nUmFuZ2UgZnJvbVJhbmdlKFdl
YkNvcmU6OkZyYW1lJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgRWRp
dGluZ1JhbmdlSXNSZWxhdGl2ZVRvID0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJs
ZVJvb3QpOwogCiAjaWYgZGVmaW5lZChfX09CSkNfXykKICAgICBFZGl0aW5nUmFuZ2UoTlNSYW5n
ZSByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQuaAppbmRleCA2OTZjZmZjYmRmODBlNTEyZTFkM2ZkZGE3ZjEwOGYzMWRiMzBlNmIxLi5kODg1
MTExZDlmNzUwMDBiZTdkNjdlMDBiY2YwNzNhNDlhNjFlMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0FQSUluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9BUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oCkBAIC0zMSwxMSArMzEsMTEgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFz
cyBOb2RlOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBTdHlsZVBy
b3BlcnRpZXM7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTEsMjEgKzUxLDIxIEBAIGNsYXNzIEVkaXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RWRpdG9yQ2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIFdl
YkNvcmU6OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJ
bnNlcnROb2RlKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5n
ZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFn
ZSYsIFN0cmluZ0ltcGwqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSopIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShX
ZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5n
ZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0
aW5nKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUo
V2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6
OlJhbmdlKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRp
bmcoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgU3RyaW5nSW1w
bCogbm90aWZpY2F0aW9uTmFtZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdlYktpdDo6V2ViUGFnZSYsIFN0cmluZ0ltcGwq
IG5vdGlmaWNhdGlvbk5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSosIFZlY3RvcjxXVEY6OlN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIHsgfQorICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3VsZEVuZEVkaXRpbmcoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFu
Z2UmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUo
V2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYktpdDo6V2ViUGFnZSYs
IGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlv
bmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25z
dCBXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRp
dGluZyhXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRFbmRFZGl0aW5nKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IFdURjo6U3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2UmLCBjb25z
dCBXVEY6OlN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24o
V2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKFdlYktpdDo6V2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxXVEY6OlN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4+JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlVG9QYXN0
ZWJvYXJkKFdlYktpdDo6V2ViUGFnZSYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdv
U3RlcERyb3AoV2ViS2l0OjpXZWJQYWdlJiwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdl
YkNvcmU6OlJhbmdlJiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJh
Z21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGJvb2wpIHsgcmV0dXJuIGZhbHNl
OyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbmplY3RlZEJ1bmRsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkVk
aXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2ds
aWIvV2ViS2l0V2ViRWRpdG9yLmNwcAppbmRleCBjY2I1MWUwZDk2NDBjNjZmODU5NmU0NzQxNzE0
MDU4ZTkxMzk3Njg0Li5hODllZjM1YzA1NDkwYjUwNzVhMGIwNjlmZDA0MmY1ODlmN2M3ZmY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2ds
aWIvV2ViS2l0V2ViRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViRWRpdG9yLmNwcApAQCAtODIsNyArODIsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9u
KFdlYlBhZ2UmLCBTdHJpbmdJbXBsKikgb3ZlcnJpZGUKKyAgICB2b2lkIGRpZENoYW5nZVNlbGVj
dGlvbihXZWJQYWdlJiwgY29uc3QgU3RyaW5nJikgZmluYWwKICAgICB7CiAgICAgICAgIGdfc2ln
bmFsX2VtaXQobV9lZGl0b3IsIHNpZ25hbHNbU0VMRUNUSU9OX0NIQU5HRURdLCAwKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTURvY3VtZW50Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9tYWMvV0tET01Eb2N1bWVudC5tbQppbmRleCAxNjZlNzlkMDMyMjJlYzk4MjQx
MThhNDcwYzAyMDQ5NGE2YjU4YzBkLi45NWQxYzA3YWIyY2NiNjU1ZDZkN2IxZmUzMjVjYzU5ZTA4
M2JlZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS0RPTURvY3VtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRG9jdW1lbnQubW0KQEAgLTMwLDYgKzMwLDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnRGcmFnbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL21hcmt1cC5oPgogI2ltcG9ydCA8d3RmL05ha2VkUmVmLmg+CkBAIC03OSw3ICs4
MCw3IEBAIC0gKFdLRE9NTm9kZSAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3Ry
aW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiCiAKIC0gKFdLRE9NTm9kZSAqKWNyZWF0ZURv
Y3VtZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIFdl
YktpdDo6dG9XS0RPTU5vZGUoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChkb3duY2FzdDxXZWJDb3Jl
OjpEb2N1bWVudD4oKl9pbXBsKS5jcmVhdGVSYW5nZSgpLmdldCgpLCB0ZXh0KS5wdHIoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTU5vZGUoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG93bmNhc3Q8V2ViQ29yZTo6RG9jdW1lbnQ+KCpf
aW1wbCkpLCB0ZXh0KS5wdHIoKSk7CiB9CiAKIC0gKGlkKXBhcnNlcllpZWxkVG9rZW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDAwOTBiODk4YTJlMWUxZDYxY2FlMDQ1MDM4YTJmODVk
NzVkYmMzZTcuLjFiNmJiNzdlY2E3ZTZlYzBmMWY2MWU4NzIxMmM0YzQ1ZjY5NmI2NjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtMTM0LDkgKzEzNCw4IEBAIC0gKE5TQXJyYXkgKil0
ZXh0UmVjdHMKIAogLSAoV0tET01SYW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFy
eUJ5Q2hhcmFjdGVyczooTlNVSW50ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJh
bmdlRGlyZWN0aW9uKWRpcmVjdGlvbgogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbmV3
UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyAgX2ltcGwtPmVuZFBv
c2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBjaGFyYWN0ZXJzLCBkaXJlY3Rpb24g
PT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKLQot
ICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOm5ld1JhbmdlLmdl
dCgpXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byBuZXdSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNo
YXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdl
RGlyZWN0aW9uRm9yd2FyZCA/ICBfaW1wbC0+ZW5kUG9zaXRpb24oKSA6IF9pbXBsLT5zdGFydFBv
c2l0aW9uKCksIGNoYXJhY3RlcnMsIGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9y
d2FyZCA/IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNl
bGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOworICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFs
bG9jXSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCldIGF1dG9y
ZWxlYXNlXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCmluZGV4
IDQ3N2ZmOTQ1YTZhYjRhY2E5ZTczMzEyNTViMDQwZGQ1ZmFkNmU4ZTAuLmM3NzYyNTJlYmQ0YWU4
ODg0NWJlOGM2Nzc4YjZlZjczMGRmZjMxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXIubW0KQEAgLTU1OSwyMSArNTU5LDIxIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZToo
aWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJL
aXQ6OldlYlBhZ2UmLCBTdHJpbmdJbXBsKiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1Jl
cGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGZpbmFsCisgICAgICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXQ6OldlYlBhZ2UmLCBjb25zdCBXVEY6OlN0cmlu
ZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVw
bGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgZmluYWwKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5zaG91bGRJbnNlcnRUZXh0KQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICByZXR1cm4gW21fY29u
dHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgc2hvdWxkSW5zZXJ0VGV4dDpTdHJpbmcodGV4
dCkgcmVwbGFjaW5nUmFuZ2U6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpnZXRPckNyZWF0ZShyYW5nZVRvUmVwbGFjZSkpIGdpdmVuQWN0aW9uOnRvV0soYWN0aW9u
KV07CisgICAgICAgICAgICByZXR1cm4gW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5n
ZXQoKSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xs
ZXIgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ1JhbmdlOndyYXBwZXIoKldlYktpdDo6
Y3JlYXRlSGFuZGxlKHJhbmdlVG9SZXBsYWNlKSkgZ2l2ZW5BY3Rpb246dG9XSyhhY3Rpb24pXTsK
ICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSog
dG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBmaW5hbAorICAgICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViS2l0OjpX
ZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2Us
IGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbAogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIW1fZGVsZWdhdGVNZXRob2RzLnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIGF1dG8g
YXBpRnJvbVJhbmdlID0gZnJvbVJhbmdlID8gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9p
bml0V2l0aEltcGw6ZnJvbVJhbmdlXSkgOiBuaWw7Ci0gICAgICAgICAgICBhdXRvIGFwaVRvUmFu
Z2UgPSB0b1JhbmdlID8gYWRvcHROUyhbW1dLRE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6
dG9SYW5nZV0pIDogbmlsOworICAgICAgICAgICAgYXV0byBhcGlGcm9tUmFuZ2UgPSBhZG9wdE5T
KFtbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpjcmVhdGVMaXZlUmFuZ2UoZnJvbVJh
bmdlKS5nZXQoKV0pOworICAgICAgICAgICAgYXV0byBhcGlUb1JhbmdlID0gYWRvcHROUyhbW1dL
RE9NUmFuZ2UgYWxsb2NdIF9pbml0V2l0aEltcGw6Y3JlYXRlTGl2ZVJhbmdlKHRvUmFuZ2UpLmdl
dCgpXSk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgICAgIFVJVGV4dFN0b3Jh
Z2VEaXJlY3Rpb24gYXBpQWZmaW5pdHkgPSBhZmZpbml0eSA9PSBXZWJDb3JlOjpVUFNUUkVBTSA/
IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25CYWNrd2FyZCA6IFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb25G
b3J3YXJkOwogI2Vsc2UKQEAgLTU4Myw3ICs1ODMsNyBAQCAtICh2b2lkKV9zZXRFZGl0aW5nRGVs
ZWdhdGU6KGlkIDxXS1dlYlByb2Nlc3NQbHVnSW5FZGl0aW5nRGVsZWdhdGU+KWVkaXRpbmdEZWxl
ZwogICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0
KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVy
IHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2U6YXBpRnJvbVJhbmdlLmdldCgpIHRvUmFuZ2U6YXBp
VG9SYW5nZS5nZXQoKSBhZmZpbml0eTphcGlBZmZpbml0eSBzdGlsbFNlbGVjdGluZzpzdGlsbFNl
bGVjdGluZ107CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRpZENoYW5nZShXZWJLaXQ6Oldl
YlBhZ2UmLCBTdHJpbmdJbXBsKikgZmluYWwKKyAgICAgICAgdm9pZCBkaWRDaGFuZ2UoV2ViS2l0
OjpXZWJQYWdlJiwgY29uc3QgU3RyaW5nJikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5kaWRDaGFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNTkxLDIwICs1OTEsMjAgQEAgLSAodm9pZClfc2V0RWRpdGluZ0RlbGVnYXRlOihpZCA8
V0tXZWJQcm9jZXNzUGx1Z0luRWRpdGluZ0RlbGVnYXRlPillZGl0aW5nRGVsZWcKICAgICAgICAg
ICAgIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVn
SW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJEaWRDaGFuZ2VCeUVkaXRpbmc6bV9jb250cm9sbGVy
XTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJvYXJkKFdlYktp
dDo6V2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiByYW5nZSkgZmluYWwKKyAgICAgICAgdm9pZCB3
aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtX2RlbGVnYXRlTWV0aG9kcy53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVn
YXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29u
dHJvbGxlciB3aWxsV3JpdGVSYW5nZVRvUGFzdGVib2FyZDp3cmFwcGVyKCpXZWJLaXQ6OkluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKS5nZXQoKSldOworICAgICAg
ICAgICAgW21fY29udHJvbGxlci0+X2VkaXRpbmdEZWxlZ2F0ZS5nZXQoKSBfd2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xsZXIgd2lsbFdyaXRlUmFuZ2VU
b1Bhc3RlYm9hcmQ6d3JhcHBlcihXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpXTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJL
aXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3Rl
Ym9hcmREYXRhKSBmaW5hbAorICAgICAgICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViS2l0OjpXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBy
YW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlw
ZSA9IFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVn
SW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9y
UmFuZ2U6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNy
ZWF0ZShyYW5nZSkuZ2V0KCkpXTsKKyAgICAgICAgICAgIGF1dG8gZGF0YUJ5VHlwZSA9IFttX2Nv
bnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBhc3RlYm9hcmREYXRhRm9yUmFuZ2U6d3Jh
cHBlcihXZWJLaXQ6OmNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpXTsKICAgICAgICAgICAgIGZv
ciAoTlNTdHJpbmcgKnR5cGUgaW4gZGF0YUJ5VHlwZSkgewogICAgICAgICAgICAgICAgIHBhc3Rl
Ym9hcmRUeXBlcy5hcHBlbmQodHlwZSk7CiAgICAgICAgICAgICAgICAgcGFzdGVib2FyZERhdGEu
YXBwZW5kKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGFCeVR5cGVbdHlwZV0pKTsK
QEAgLTYxOSwxMiArNjE5LDEyIEBAIC0gKHZvaWQpX3NldEVkaXRpbmdEZWxlZ2F0ZTooaWQgPFdL
V2ViUHJvY2Vzc1BsdWdJbkVkaXRpbmdEZWxlZ2F0ZT4pZWRpdGluZ0RlbGVnCiAgICAgICAgICAg
ICBbbV9jb250cm9sbGVyLT5fZWRpdGluZ0RlbGVnYXRlLmdldCgpIF93ZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyRGlkV3JpdGVUb1Bhc3RlYm9hcmQ6bV9jb250cm9sbGVy
XTsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYktpdDo6
V2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBXZWJDb3JlOjpS
YW5nZSYgcmFuZ2UsIGJvb2wgaXNNb3ZlKSBmaW5hbAorICAgICAgICBib29sIHBlcmZvcm1Ud29T
dGVwRHJvcChXZWJLaXQ6OldlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIGlzTW92ZSkgZmlu
YWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5wZXJmb3Jt
VHdvU3RlcERyb3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBhdXRvIHJhbmdlSGFuZGxlID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpn
ZXRPckNyZWF0ZSgmcmFuZ2UpOworICAgICAgICAgICAgYXV0byByYW5nZUhhbmRsZSA9IFdlYktp
dDo6Y3JlYXRlSGFuZGxlKHJhbmdlKTsKICAgICAgICAgICAgIGF1dG8gbm9kZUhhbmRsZSA9IFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSgmZnJhZ21lbnQpOwog
ICAgICAgICAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXItPl9lZGl0aW5nRGVsZWdhdGUuZ2V0KCkg
X3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHBl
cmZvcm1Ud29TdGVwRHJvcDp3cmFwcGVyKCpub2RlSGFuZGxlKSBhdERlc3RpbmF0aW9uOndyYXBw
ZXIoKnJhbmdlSGFuZGxlKSBpc01vdmU6aXNNb3ZlXTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMjIwZWZlZDU4ZWQxNTc3
OWU3NWI5YzQ4YzE3MDcxN2ZmZTJkZjBkZi4uYTkxZjdmNzA3ODE3OGRmYmU0M2I1ODQ2YmMwMGM0
NGViZDk2ZDc0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwCkBAIC01NCw3ICs1NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi10eXBlZGVmIEhhc2hNYXA8UmFuZ2UqLCBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlKj4gRE9NUmFuZ2VIYW5kbGVDYWNoZTsKK3VzaW5nIERPTVJhbmdlSGFuZGxlQ2Fj
aGUgPSBIYXNoTWFwPFJhbmdlKiwgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSo+OwogCiBzdGF0
aWMgRE9NUmFuZ2VIYW5kbGVDYWNoZSYgZG9tUmFuZ2VIYW5kbGVDYWNoZSgpCiB7CkBAIC02NCwy
OSArNjQsMjEgQEAgc3RhdGljIERPTVJhbmdlSGFuZGxlQ2FjaGUmIGRvbVJhbmdlSGFuZGxlQ2Fj
aGUoKQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IG9iamVjdCkKIHsKLSAgICBSYW5nZSogcmFuZ2UgPSBKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhj
b250ZXh0KS0+dm0oKSwgdG9KUyhvYmplY3QpKTsKLSAgICByZXR1cm4gZ2V0T3JDcmVhdGUocmFu
Z2UpOworICAgIHJldHVybiBnZXRPckNyZWF0ZShKU1JhbmdlOjp0b1dyYXBwZWQodG9KUyhjb250
ZXh0KS0+dm0oKSwgdG9KUyhvYmplY3QpKSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShSYW5nZSog
cmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBET01SYW5nZUhhbmRsZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9tUmFuZ2VIYW5kbGVD
YWNoZSgpLmFkZChyYW5nZSwgbnVsbHB0cik7CisgICAgYXV0byByZXN1bHQgPSBkb21SYW5nZUhh
bmRsZUNhY2hlKCkuYWRkKHJhbmdlLCBudWxscHRyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8g
cmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUoKnJhbmdlKTsK
KyAgICBhdXRvIHJhbmdlSGFuZGxlID0gYWRvcHRSZWYoKm5ldyBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlKCpyYW5nZSkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRs
ZS5wdHIoKTsKICAgICByZXR1cm4gcmFuZ2VIYW5kbGU7CiB9CiAKLVJlZjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUoUmFuZ2UmIHJh
bmdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUocmFuZ2UpKTsKLX0KLQogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6SW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZShSYW5nZSYgcmFuZ2UpCiAgICAgOiBtX3JhbmdlKHJhbmdlKQogewpAQCAt
MTc4LDQgKzE3MCw5IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjp0ZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gbV9yYW5nZS0+dGV4dCgpOwogfQogCitSZWZQdHI8SW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgcmFuZ2UpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OmdldE9yQ3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlLmgKaW5kZXggZjgwZTMzYWJlODA2NTFkOTc5MThiOGRiZmExNDllNDYxZjU2YmM4NS4uNWU4
YmVlZGExMDBkMjVmMDkxZTdlMGMxZjc2YTRmMGNiMTRjMjQ5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGVfaAotI2RlZmluZSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPcHRpb25z
LmgiCkBAIC0zNSw2ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgUmFuZ2U7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtNTksMTIgKzU5LDExIEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpSYW5nZSYgY29y
ZVJhbmdlKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiBjcmVhdGUoV2ViQ29yZTo6UmFuZ2UmKTsKICAgICBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlKFdlYkNvcmU6OlJhbmdlJik7CiAKICAgICBSZWY8V2ViQ29yZTo6UmFuZ2U+
IG1fcmFuZ2U7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKK1JlZlB0cjxJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+Jik7CiAKLSNlbmRpZiAvLyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlX2gKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50LmNwcAppbmRleCBjZTAyN2I1YTdiZTY4MjdhNzhlN2I3NzI1YmRiYjMyNjRhNjI1
MjBhLi5lMzQwYWYxY2JjMzAyOWU1N2FiZGIyMmRjNGY5YTliZGMyNWYwNTEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcApAQCAtMzgsMTIzICsz
OCwxMTEgQEAKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0
eWxlUHJvcGVydGllcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgUmVmUHRy
PEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZT4gY3JlYXRlSGFuZGxlKGNv
bnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxl
Q1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZTo6Z2V0T3JDcmVhdGUoJnN0eWxlLm11dGFibGVDb3B5
KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7Cit9CisKIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50KGNvbnN0IFdLQnVu
ZGxlUGFnZUVkaXRvckNsaWVudEJhc2UmIGNsaWVudCkKIHsKICAgICBpbml0aWFsaXplKCZjbGll
bnQpOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQmVn
aW5FZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdpbkVk
aXRpbmcpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdl
SGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwot
ICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwg
dG9BUEkocmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAg
IH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKQorICAgICAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFu
ZGxlKHJhbmdlKS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRF
bmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIFJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRpdGlu
ZykgewotICAgICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5k
bGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShyYW5nZSk7Ci0gICAg
ICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
cmFuZ2VIYW5kbGUuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAg
ICBpZiAobV9jbGllbnQuc2hvdWxkRW5kRWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50
LnNob3VsZEVuZEVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShjcmVhdGVIYW5kbGUocmFuZ2Up
LmdldCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUo
V2ViUGFnZSYgcGFnZSwgTm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJ
bnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OnNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYgcGFnZSwgTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlv
bikKIHsKICAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSkgewogICAgICAgICBSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjpnZXRPckNyZWF0ZShub2RlKTsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IHJhbmdlVG9SZXBsYWNlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2VUb1JlcGxhY2UpOwotICAgICAgICByZXR1cm4gbV9j
bGllbnQuc2hvdWxkSW5zZXJ0Tm9kZSh0b0FQSSgmcGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0
KCkpLCB0b0FQSShyYW5nZVRvUmVwbGFjZUhhbmRsZS5nZXQoKSksIHRvQVBJKGFjdGlvbiksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRJ
bnNlcnROb2RlKHRvQVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKGNy
ZWF0ZUhhbmRsZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoV2ViUGFnZSYg
cGFnZSwgU3RyaW5nSW1wbCogdGV4dCwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZEluc2VydFRleHQoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24g
YWN0aW9uKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRJbnNlcnRUZXh0KSB7Ci0gICAgICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZVRvUmVwbGFjZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlVG9SZXBsYWNlKTsK
LSAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRleHQodG9BUEkoJnBhZ2UpLCB0
b0FQSSh0ZXh0KSwgdG9BUEkocmFuZ2VUb1JlcGxhY2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShhY3Rp
b24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQu
c2hvdWxkSW5zZXJ0VGV4dCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRl
eHQodG9BUEkoJnBhZ2UpLCB0b0FQSSh0ZXh0LmltcGwoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShy
YW5nZVRvUmVwbGFjZSkuZ2V0KCkpLCB0b0FQSShhY3Rpb24pLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdl
KQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdl
KFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiB7Ci0gICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdlKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LnNob3VsZERlbGV0ZVJhbmdlKHRvQVBJKCZwYWdlKSwgdG9BUEkocmFuZ2VIYW5kbGUuZ2V0
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQu
c2hvdWxkRGVsZXRlUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWxldGVS
YW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQ
YWdlJiBwYWdlLCBSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQog
ewotICAgIGlmIChtX2NsaWVudC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBmcm9tUmFuZ2VIYW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShmcm9tUmFuZ2UpOwotICAgICAgICBS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gdG9SYW5nZUhhbmRsZSA9IEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHRvUmFuZ2UpOwotICAgICAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZy
b21SYW5nZUhhbmRsZS5nZXQoKSksIHRvQVBJKHRvUmFuZ2VIYW5kbGUuZ2V0KCkpLCB0b0FQSShh
ZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAg
IH0KKyAgICBpZiAobV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSkKKyAgICAgICAg
cmV0dXJuIG1fY2xpZW50LnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UodG9BUEkoJnBhZ2UpLCB0
b0FQSShjcmVhdGVIYW5kbGUoZnJvbVJhbmdlKS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZSh0
b1JhbmdlKS5nZXQoKSksIHRvQVBJKGFmZmluaXR5KSwgc3RpbGxTZWxlY3RpbmcsIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmIHBhZ2UsIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiBwYWdlLCBjb25z
dCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewotICAgIGlmIChtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGU+IHN0eWxlSGFuZGxl
ID0gSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlOjpnZXRPckNyZWF0ZShz
dHlsZSk7Ci0gICAgICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhh
bmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlKTsKLSAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUodG9BUEkoJnBhZ2UpLCB0b0FQ
SShzdHlsZUhhbmRsZS5nZXQoKSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKLSAgICB9CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEFwcGx5U3R5
bGUpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRBcHBseVN0eWxlKHRvQVBJKCZwYWdl
KSwgdG9BUEkoY3JlYXRlSGFuZGxlKHN0eWxlKS5nZXQoKSksIHRvQVBJKGNyZWF0ZUhhbmRsZShy
YW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0
aW5nKFdlYlBhZ2UmIHBhZ2UsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpCit2b2lkIElu
amVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2UmIHBh
Z2UsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAobV9jbGllbnQu
ZGlkQmVnaW5FZGl0aW5nKQotICAgICAgICBtX2NsaWVudC5kaWRCZWdpbkVkaXRpbmcodG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgbV9jbGllbnQuZGlkQmVnaW5FZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
bm90aWZpY2F0aW9uTmFtZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogfQog
Ci12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZyhXZWJQ
YWdlJiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQordm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoV2ViUGFnZSYgcGFnZSwgY29uc3Qg
U3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2NsaWVudC5kaWRFbmRFZGl0
aW5nKQotICAgICAgICBtX2NsaWVudC5kaWRFbmRFZGl0aW5nKHRvQVBJKCZwYWdlKSwgdG9BUEko
bm90aWZpY2F0aW9uTmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1f
Y2xpZW50LmRpZEVuZEVkaXRpbmcodG9BUEkoJnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1l
LmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2UoV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1w
bCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpkaWRDaGFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1l
KQogewogICAgIGlmIChtX2NsaWVudC5kaWRDaGFuZ2UpCi0gICAgICAgIG1fY2xpZW50LmRpZENo
YW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2UodG9BUEkoJnBhZ2UpLCB0
b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxl
Y3Rpb24oV2ViUGFnZSYgcGFnZSwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSkKK3ZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFn
ZSYgcGFnZSwgY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmIChtX2Ns
aWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24pCi0gICAgICAgIG1fY2xpZW50LmRpZENoYW5nZVNlbGVj
dGlvbih0b0FQSSgmcGFnZSksIHRvQVBJKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24odG9BUEko
JnBhZ2UpLCB0b0FQSShub3RpZmljYXRpb25OYW1lLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Ojp3aWxs
V3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYgcGFnZSwgUmFuZ2UqIHJhbmdlKQordm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdl
JiBwYWdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGlmICht
X2NsaWVudC53aWxsV3JpdGVUb1Bhc3RlYm9hcmQpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICBtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQodG9BUEkoJnBhZ2UpLCB0b0FQSShyYW5nZUhhbmRsZS5nZXQoKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7Ci0gICAgfQorICAgIGlmIChtX2NsaWVudC53aWxsV3JpdGVUb1Bhc3Rl
Ym9hcmQpCisgICAgICAgIG1fY2xpZW50LndpbGxXcml0ZVRvUGFzdGVib2FyZCh0b0FQSSgmcGFn
ZSksIHRvQVBJKGNyZWF0ZUhhbmRsZShyYW5nZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFz
dGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiBwYWdlLCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYgcGFnZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJl
ZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7CiAgICAgaWYgKG1fY2xpZW50
LmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpIHsKLSAgICAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6
Z2V0T3JDcmVhdGUocmFuZ2UpOwotICAgICAgICBXS0FycmF5UmVmIHR5cGVzID0gMDsKLSAgICAg
ICAgV0tBcnJheVJlZiBkYXRhID0gMDsKLSAgICAgICAgbV9jbGllbnQuZ2V0UGFzdGVib2FyZERh
dGFGb3JSYW5nZSh0b0FQSSgmcGFnZSksIHRvQVBJKHJhbmdlSGFuZGxlLmdldCgpKSwgJnR5cGVz
LCAmZGF0YSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICAgICAgUmVmUHRyPEFQSTo6
QXJyYXk+IHR5cGVzQXJyYXkgPSBhZG9wdFJlZih0b0ltcGwodHlwZXMpKTsKLSAgICAgICAgUmVm
UHRyPEFQSTo6QXJyYXk+IGRhdGFBcnJheSA9IGFkb3B0UmVmKHRvSW1wbChkYXRhKSk7CisgICAg
ICAgIFdLQXJyYXlSZWYgdHlwZXMgPSBudWxscHRyOworICAgICAgICBXS0FycmF5UmVmIGRhdGEg
PSBudWxscHRyOworICAgICAgICBtX2NsaWVudC5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHRv
QVBJKCZwYWdlKSwgdG9BUEkoY3JlYXRlSGFuZGxlKHJhbmdlKS5nZXQoKSksICZ0eXBlcywgJmRh
dGEsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGF1dG8gdHlwZXNBcnJheSA9
IGFkb3B0UmVmKHRvSW1wbCh0eXBlcykpOworICAgICAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0
UmVmKHRvSW1wbChkYXRhKSk7CiAKICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmNsZWFyKCk7CiAg
ICAgICAgIHBhc3RlYm9hcmREYXRhLmNsZWFyKCk7CkBAIC0xNzQsMTQgKzE2MiwxMyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZShXZWJQYWdlJiBwYWdlLCBSYQogICAgIH0KIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChXZWJQYWdlJiBwYWdlLCBEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wg
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFn
ZSYgcGFnZSwgRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBk
ZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5wZXJmb3JtVHdv
U3RlcERyb3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gcmFuZ2VIYW5kbGUg
PSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZSgmZGVzdGluYXRpb24pOwog
ICAgIGF1dG8gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVh
dGUoJmZyYWdtZW50KTsKLSAgICByZXR1cm4gbV9jbGllbnQucGVyZm9ybVR3b1N0ZXBEcm9wKHRv
QVBJKCZwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRvQVBJKHJhbmdlSGFuZGxlLmdl
dCgpKSwgaXNNb3ZlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgIHJldHVybiBtX2Ns
aWVudC5wZXJmb3JtVHdvU3RlcERyb3AodG9BUEkoJnBhZ2UpLCB0b0FQSShub2RlSGFuZGxlLmdl
dCgpKSwgdG9BUEkoY3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uKS5nZXQoKSksIGlzTW92ZSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OmRpZFdyaXRlVG9QYXN0ZWJvYXJkKFdlYlBhZ2UmIHBhZ2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgKaW5kZXggNjg5OTQxYTE4ZThkOWU5
NGNhNDI2Zjk0MmIxZWI4YTBiM2NmODRiYi4uZjNhMGU3NDc2NzIwZmIxYjVkOWNiMTc3MTdlZGQ3
Mzk5NDk3ZGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NTdHls
ZURlY2xhcmF0aW9uOwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC01MiwyMSArNTIsMjEgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudChjb25zdCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnRCYXNlJik7CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSYsIFdlYkNvcmU6OlJh
bmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYlBhZ2UmLCBXZWJDb3Jl
OjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlJiwgV2Vi
Q29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRp
dG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoV2ViUGFn
ZSYsIFN0cmluZ0ltcGwqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShX
ZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6
OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJQYWdlJiwgV2ViQ29yZTo6Q1NT
U3R5bGVEZWNsYXJhdGlvbiosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgdm9pZCBkaWRC
ZWdpbkVkaXRpbmcoV2ViUGFnZSYsIFN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFs
OwotICAgIHZvaWQgZGlkRW5kRWRpdGluZyhXZWJQYWdlJiwgU3RyaW5nSW1wbCogbm90aWZpY2F0
aW9uTmFtZSkgZmluYWw7Ci0gICAgdm9pZCBkaWRDaGFuZ2UoV2ViUGFnZSYsIFN0cmluZ0ltcGwq
IG5vdGlmaWNhdGlvbk5hbWUpIGZpbmFsOwotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdl
YlBhZ2UmLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKLSAgICB2b2lkIHdp
bGxXcml0ZVRvUGFzdGVib2FyZChXZWJQYWdlJiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAg
ICB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSYsIFdlYkNvcmU6OlJhbmdl
KiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFs
OworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlJiwgY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSYsIFdl
YkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdl
VG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wg
c2hvdWxkSW5zZXJ0VGV4dChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYlBhZ2UmLCBj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViUGFnZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYlBhZ2UmLCBjb25zdCBXZWJDb3Jl
OjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
KSBmaW5hbDsKKyAgICB2b2lkIGRpZEJlZ2luRWRpdGluZyhXZWJQYWdlJiwgY29uc3QgU3RyaW5n
JiBub3RpZmljYXRpb25OYW1lKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZEVkaXRpbmcoV2ViUGFn
ZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCBkaWRD
aGFuZ2UoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSkgZmluYWw7Cisg
ICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uTmFtZSkgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFn
ZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOworICAgIHZv
aWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFs
OwogICAgIHZvaWQgZGlkV3JpdGVUb1Bhc3RlYm9hcmQoV2ViUGFnZSYpIGZpbmFsOwotICAgIGJv
b2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYlBhZ2UmLCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50
JiwgV2ViQ29yZTo6UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAg
Ym9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViUGFnZSYsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21l
bnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3Zl
KSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAppbmRleCA2Y2Y0ZjVhMzE5MWFkOTliMmQxYTczMzhkNGYzOTM1NTM4ZjZhYjMzLi45YzZiN2Jh
N2NiNTZhNDIzNWIwMDViOWZiYWJiMWFjMjkxY2M0ODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cApAQCAtNzcsNyArNzcsNyBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SUQoKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwog
fQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAg
LTExOCwzMiArMTE4LDMyIEBAIGludCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKS5wdHIoKSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwogfQogCiBib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRFbmRFZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOwor
ICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5k
RWRpdGluZygqbV9wYWdlLCByYW5nZSk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3Bh
Z2UsICZub2RlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24p
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
SW5zZXJ0Tm9kZSgqbV9wYWdlLCBub2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKIH0KIAog
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4dCgqbV9wYWdlLCB0ZXh0LmltcGwoKSwgY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKKyAgICByZXR1cm4gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFn
ZSwgdGV4dCwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZp
bml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICByZXR1cm4gbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Km1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZSh0b1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoKm1fcGFnZSwgZnJvbVJhbmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogICAgIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnNob3VsZEFwcGx5U3R5bGUoKm1fcGFnZSwgJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNT
U1N0eWxlRGVjbGFyYXRpb24oKSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0
eWxlKCptX3BhZ2UsIHN0eWxlLCByYW5nZSk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQpAQCAtMjY4LDE3ICsyNjgsMTcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3Jp
dGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7Cisg
ICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLndpbGxXcml0ZVRvUGFzdGVi
b2FyZCgqbV9wYWdlLCByYW5nZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGll
bnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+
JiBwYXN0ZWJvYXJkRGF0YSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKKyAgICBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5n
ZSgqbV9wYWdlLCByYW5nZSwgcGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CiB9CiAK
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVu
dCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUp
CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJm
b3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShkZXN0aW5h
dGlvbiksIGlzTW92ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGRlc3RpbmF0aW9u
LCBpc01vdmUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChV
bmRvU3RlcCYgc3RlcCkKQEAgLTUzNywxMSArNTM3LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6Okdy
YW0KIHN0YXRpYyB1aW50NjRfdCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgYXV0byBzZWxl
Y3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBz
ZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
OwotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Ci0gICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5
IHx8ICFwYXJhZ3JhcGhTdGFydCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNoYXJh
Y3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzdGFydE9m
UGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisgICAgcmV0dXJuIHJhbmdlID8gY2hhcmFjdGVy
Q291bnQoKnJhbmdlKSA6IDA7CiB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwCmluZGV4IDVmNWU4NjQxYWRlY2QyNmNiOWVmZDc5OGEzOTAwZjc3M2Q5NGU3M2IuLjUzMTg1
NTM4YjllMDUxOTAzYTlkNmVkZTc1YjRlMGVjODM1MjY5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTQ2LDYgKzQ2
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1w
bGVSYW5nZS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTEsMTEgKzExMiwxMSBAQCB1
aW50MzJfdCBGaW5kQ29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMoY29uc3QgVmVjdG9yPHVpbnQz
Ml90PiYgbWF0Y2hJbmRpY2VzLCBjbwogICAgIC8vIHBlcmlvZGljYWxseSB1cGRhdGUgYW4gTlNQ
cm9ncmVzcyBpbiB0aGUgVUkgcHJvY2VzcyB3aGVuIGEgYmF0Y2ggb2YgZmluZC1pbi1wYWdlIG1h
dGNoZXMgYXJlIHJlcGxhY2VkLgogICAgIGNvbnN0IHVpbnQzMl90IG1heGltdW1OdW1iZXJPZk1h
dGNoZXNUb1JlcGxhY2UgPSAxMDAwOwogCi0gICAgVmVjdG9yPFJlZjxSYW5nZT4+IHJhbmdlc1Rv
UmVwbGFjZTsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlc1RvUmVwbGFjZTsKICAgICBy
YW5nZXNUb1JlcGxhY2UucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWluPHVpbnQzMl90PihtYXhpbXVt
TnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6ZSgpKSk7CiAgICAgZm9y
IChhdXRvIGluZGV4IDogbWF0Y2hJbmRpY2VzKSB7CiAgICAgICAgIGlmIChpbmRleCA8IG1fZmlu
ZE1hdGNoZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmFuZ2VzVG9SZXBsYWNlLnVuY2hlY2tlZEFw
cGVuZCgqbV9maW5kTWF0Y2hlc1tpbmRleF0pOworICAgICAgICAgICAgcmFuZ2VzVG9SZXBsYWNl
LnVuY2hlY2tlZEFwcGVuZChtX2ZpbmRNYXRjaGVzW2luZGV4XSk7CiAgICAgICAgIGlmIChyYW5n
ZXNUb1JlcGxhY2Uuc2l6ZSgpID49IG1heGltdW1OdW1iZXJPZk1hdGNoZXNUb1JlcGxhY2UpCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNDMsMTIgKzI0NCwxMCBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8Rmlu
ZE9wdGlvbnM+IG9wdAogICAgIGJvb2wgZm91bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbiA9
IGZhbHNlOwogICAgIGlmICghcGx1Z2luVmlldykgewogICAgICAgICBpZiAoRnJhbWUqIHNlbGVj
dGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5jb3JlUGFnZSgpKSkgewot
ICAgICAgICAgICAgRnJhbWVTZWxlY3Rpb24mIGZzID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoZnMuc2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOwotICAgICAgICAgICAgICAgIGlu
dCBpbmRleEZvclNlbGVjdGlvbjsKLSAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRj
aENvdW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7Ci0gICAgICAgICAgICAg
ICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPSBpbmRleEZvclNlbGVjdGlvbjsKKyAgICAgICAg
ICAgIGlmIChzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291bnQp
OworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMp
OworICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gcmVzdWx0LmluZGV4
Rm9yU2VsZWN0aW9uOwogICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxl
Y3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODQsMTYgKzI4Mywx
NCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBPcHRpb25TZXQ8RmluZE9wdGlvbnM+IG9wdAogCiB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5k
U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpb25z
PiBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIG1fZmluZE1hdGNoZXMu
Y2xlYXIoKTsKLSAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0KLSAgICBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyks
IG1heE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmlu
ZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9maW5kTWF0Y2hlcyA9IFdU
Rk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKICAgICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRj
aFJlY3RzOwogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBt
YXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSkp
OworICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJl
Y3RzKHJhbmdlKSk7CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCBpbmRleEZvclNlbGVj
dGlvbikpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRG
aW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMsIHJlc3VsdC5pbmRleEZvclNlbGVj
dGlvbikpOwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93T3Zl
cmxheSkgJiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dGaW5kSW5kaWNhdG9y
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA4LDEyICszMDUsMTIgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBp
ZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0tPnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNo
ZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRT
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUtPnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCptX2ZpbmRNYXRjaGVzW21h
dGNoSW5kZXhdKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtX2ZpbmRN
YXRjaGVzW21hdGNoSW5kZXhdKTsKIAogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNlbGVj
dGlvblNuYXBzaG90ID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKS0+Y3JlYXRlU2Vs
ZWN0aW9uU25hcHNob3QoKTsKIApAQCAtMzM5LDEwICszMzYsMTAgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1h
dGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBG
cmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21h
dGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oKm1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pKTsKKyAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0p
OwogfQogCiB2b2lkIEZpbmRDb250cm9sbGVyOjppbmRpY2F0ZUZpbmRNYXRjaCh1aW50MzJfdCBt
YXRjaEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmgKaW5kZXggMmZkM2ZhYzFlYzZjMmMyMTE5MjVjYjVkN2FkYmMxOTI1NzI3ZDlk
OS4uZjZmNmY5ZDIxMDRkM2E3OWUzZmU4ZDk4MWYxNDQ1OTY0MjI0MzIzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0xMDYs
NyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hv
d2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgogICAg
IGJvb2wgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yIHsgZmFsc2UgfTsKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fZmluZEluZGljYXRvclJlY3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4+IG1fZmluZE1hdGNoZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBt
X2ZpbmRNYXRjaGVzOwogICAgIC8vIEluZGV4IHZhbHVlIGlzIC0xIGlmIG5vdCBmb3VuZCBvciBp
ZiBudW1iZXIgb2YgbWF0Y2hlcyBleGNlZWRzIHByb3ZpZGVkIG1heGltdW0uCiAgICAgaW50IG1f
Zm91bmRTdHJpbmdNYXRjaEluZGV4IHsgLTEgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlZDNiNjNmZGRlM2E3N2I4ZjllYjk4MzE1ZTVl
OGQ5YmI1MWMwZGI3Li4yZGM1MDVjZmRiMTNiMDAzMmZkYTU0OWUwYzlkNWQ2NzI3MmI0MWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQz
NywxMyArNTQzNywxMyBAQCB2b2lkIFdlYlBhZ2U6Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHZvaWQgV2ViUGFnZTo6Z2V0
TWFya2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5n
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7CisgICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1lLmVkaXRvcigpLmNvbXBv
c2l0aW9uUmFuZ2UoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3lu
YyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1Jh
bmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Y2hh
cmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwg
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtNTQ1Miw4ICs1NDUyLDggQEAgdm9pZCBXZWJQYWdl
OjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBv
aW50LCBDYWxsYmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwogICAgIGF1dG8m
IGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVG
cmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
ICAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50
SW5Jbm5lck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5n
ZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlZGl0aW5n
UmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CisgICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBF
ZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGVkaXRpbmdS
YW5nZS5sb2NhdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2Us
IENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNWZlYTJiMTNmNjc1ODcyYTU2N2QyYTRk
NzYzN2NkZTg4ZjZkY2I3ZC4uZTUzZTc3YTcwYmE1MGQyYzVjZmYyZjcwMzBlZTQ1YzRlMGQ5M2E1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KQEAgLTE2MSwxNyArMTYxLDEyIEBAIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9y
Q29udGV4dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogICAgIHJldHVybiBy
YW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBSYW5nZSogcmFuZ2UpCi17
Ci0gICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dChTaW1wbGVSYW5nZSB7ICpy
YW5nZSB9KSA6IGVtcHR5U3RyaW5nKCk7Ci19Ci0KIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9y
RGlzcGxheShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6
OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVs
dEJlaGF2aW9yLCB0cnVlKTsKIH0KIAotc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5
KGNvbnN0IFJhbmdlKiByYW5nZSkKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIHJldHVybiByYW5nZSA/
IHBsYWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CkBAIC0yOTAs
NyArMjg1LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBm
cmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgcG9zdExheW91dERhdGEu
Y2FyZXRSZWN0QXRFbmQgPSBwb3N0TGF5b3V0RGF0YS5jYXJldFJlY3RBdFN0YXJ0OwogICAgICAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQg
d3JpdGluZyBkaXJlY3Rpb24uCiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmlzUmVwbGFjZUFsbG93
ZWQgPSByZXN1bHQuaXNDb250ZW50RWRpdGFibGUgJiYgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHko
c2VsZWN0aW9uLnN0YXJ0KCksIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBwb3N0TGF5b3V0RGF0YS53b3JkQXRT
ZWxlY3Rpb24gPSBwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxl
Y3Rpb24uc3RhcnQoKSkuZ2V0KCkpOworICAgICAgICBwb3N0TGF5b3V0RGF0YS53b3JkQXRTZWxl
Y3Rpb24gPSBwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rp
b24uc3RhcnQoKSkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkp
CiAgICAgICAgICAgICBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCks
IHBvc3RMYXlvdXREYXRhLmNoYXJhY3RlckFmdGVyU2VsZWN0aW9uLCBwb3N0TGF5b3V0RGF0YS5j
aGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb24sIHBvc3RMYXlvdXREYXRhLnR3b0NoYXJhY3RlckJlZm9y
ZVNlbGVjdGlvbik7CiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CkBAIC01
NTIsMTAgKzU0NywxMSBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGlvbkNvbnRleHQoQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNvbnN0IGludCBz
ZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGggPSAzNTA7Ci0gICAgCi0gICAgU3RyaW5nIHNl
bGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0gICAgU3RyaW5nIHRleHRCZWZvcmUgPSBwbGFp
blRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29y
ZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlv
bkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCkuZ2V0
KCkpOwotICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhw
YW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNl
bGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkuZ2V0KCkpOworCisgICAgYXV0byYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4
dCA9IHBsYWluVGV4dEZvckNvbnRleHQoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSk7CisgICAgU3Ry
aW5nIHRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJh
Y3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rp
b25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKTsK
KyAgICBTdHJpbmcgdGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVk
QnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24uZW5kKCksIHNl
bGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KSk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvbkNvbnRleHRD
YWxsYmFjayhzZWxlY3RlZFRleHQsIHRleHRCZWZvcmUsIHRleHRBZnRlciwgY2FsbGJhY2tJRCkp
OwogfQpAQCAtOTg4LDggKzk4NCw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0RHJh
ZygpCiAgICAgYXV0byBmcmFtZSA9IG1ha2VSZWYobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKSk7CiAgICAgaWYgKGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAg
ICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90ID0gdmlzaWJsZUltYWdlRWxl
bWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcygqc2VsZWN0aW9uUmFuZ2UpOwotICAgICAg
ICBhdXRvIGNvbGxhcHNlZFJhbmdlID0gU2ltcGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5k
LCBzZWxlY3Rpb25SYW5nZS0+ZW5kIH07Ci0gICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShjb2xsYXBzZWRSYW5nZSkucHRyKCksIERPV05T
VFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dl
cmVkKTsKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNp
bXBsZVJhbmdlKHNlbGVjdGlvblJhbmdlLT5lbmQpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAgIG1fcmFu
Z2VGb3JEcm9wU25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAKQEAg
LTExMTMsMTUgKzExMDgsMTQgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTdHlsdXNTaW5nbGVUYXBB
dFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDYKICAgICBpZiAocmVu
ZGVyZXItPmlzUmVwbGFjZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdC5sb2NhbFBv
aW50KCksIG51bGxwdHIpOworICAgIGF1dG8gcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25G
b3JQb2ludChoaXRUZXN0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CiAgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKLQotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHJhbmdlLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSgqcmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCks
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJp
Z2dlcmVkKTsKICAgICBhdXRvIGltYWdlID0gZnJhbWUuZWRpdG9yKCkuaW5zZXJ0RWRpdGFibGVJ
bWFnZSgpOwogICAgIGZyYW1lLmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KGltYWdlLmdl
dCgpKTsKIH0KQEAgLTEzNzEsNyArMTM2NSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdl
c3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQs
IGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIHsgfSwgY2FsbGJhY2tJRCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IHJhbmdlOwogICAgIE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4gZmxhZ3M7CiAg
ICAgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSB3a0dlc3R1cmVTdGF0ZSA9IHN0YXRpY19jYXN0PEdl
c3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSk7CiAgICAgc3dpdGNoIChzdGF0aWNf
Y2FzdDxHZXN0dXJlVHlwZT4oZ2VzdHVyZVR5cGUpKSB7CkBAIC0xMzg1LDQwICsxMzc5LDM2IEBA
IHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBH
ZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3
ZWVuUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3Np
dGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+
IHsgfTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNo
YW5nZWQ7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHBvc2l0aW9uKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgY2FzZSBHZXN0dXJl
VHlwZTo6T25lRmluZ2VyVGFwOgotICAgIHsKKyAgICBjYXNlIEdlc3R1cmVUeXBlOjpPbmVGaW5n
ZXJUYXA6IHsKICAgICAgICAgYXV0byBbYWRqdXN0ZWRQb3NpdGlvbiwgd2l0aGluV29yZEJvdW5k
YXJ5XSA9IHdvcmRCb3VuZGFyeUZvclBvc2l0aW9uV2l0aG91dENyb3NzaW5nTGluZShwb3NpdGlv
bik7CiAgICAgICAgIGlmICh3aXRoaW5Xb3JkQm91bmRhcnkgPT0gV2l0aGluV29yZEJvdW5kYXJ5
OjpZZXMpCiAgICAgICAgICAgICBmbGFncyA9IFdvcmRJc05lYXJUYXA7Ci0gICAgICAgIGlmIChh
ZGp1c3RlZFBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBhZGp1c3RlZFBvc2l0aW9uLCBhZGp1c3RlZFBvc2l0
aW9uKTsKLSAgICB9CisgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGFkanVzdGVkUG9z
aXRpb24pOwogICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdlc3R1cmVUeXBlOjpM
b3VwZToKICAgICAgICAgaWYgKHBvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24s
IHBvc2l0aW9uKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UocG9zaXRpb24pOworICAgICAgICBlbHNlIHsKICNpZiAhUExBVEZPUk0oTUFDQ0FUQUxZ
U1QpCiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7
CiAjZWxzZQogICAgICAgICAgICAgc3dpdGNoICh3a0dlc3R1cmVTdGF0ZSkgewotICAgICAgICAg
ICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbjogewotICAgICAgICAgICAgICAg
IGF1dG8gYm91bmRhcnkgPSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgICAgICAg
ICAgICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IGJvdW5kYXJ5LCBi
b3VuZGFyeSB9OworICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdh
bjoKKyAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nR2VzdHVyZVJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAgICAgICAg
ICAgICAgICBpZiAobV9zdGFydGluZ0dlc3R1cmVSYW5nZSkgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc3RhcnRpbmdHZXN0
dXJlUmFuZ2UtPnN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgcG9zaXRp
b24pCi0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIHN0YXJ0LCBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGF1dG8m
IHN0YXJ0ID0gbV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnQ7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnQpIDwgcG9zaXRpb24pCisg
ICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgcG9z
aXRpb24pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBzdGFy
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3Np
dGlvbiwgc3RhcnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6RW5kZWQ6CkBAIC0xNDMx
LDYgKzE0MjEsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBv
aW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgR2VzdHVyZVR5cGU6OlRhcEFuZEFIYWxmOgpAQCAtMTQ0NSwxMSArMTQzNiwxMSBA
QCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwg
R2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZTo6Q2hhbmdlZDoKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50V29yZFJhbmdlKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
Km1fY3VycmVudFdvcmRSYW5nZSk7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPCByYW5nZS0+
c3RhcnRQb3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChwb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IHJhbmdlLT5l
bmRQb3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQocG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICByYW5nZSA9IG1fY3VycmVudFdvcmRSYW5nZTsK
KyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihy
YW5nZS0+c3RhcnQpKQorICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFydCA9ICptYWtlQm91bmRh
cnlQb2ludChwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPiBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPmVuZCkpCisgICAgICAgICAgICAgICAgcmFuZ2UtPmVu
ZCA9ICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpFbmRlZDoKICAgICAgICAgY2FzZSBH
ZXN0dXJlUmVjb2duaXplclN0YXRlOjpDYW5jZWxsZWQ6CkBAIC0xNDY2LDcgKzE0NTcsNyBAQCB2
b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2Vz
dHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgICAgICAgICAvLyBEb3VibGUtdGFwIGF0IGVuZCBv
ZiBsaW5lIG9ubHkgcGxhY2VzIGluc2VydGlvbiBwb2ludCB0aGVyZS4KICAgICAgICAgICAgIC8v
IFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0aW5nIGF0IGVuZHMgb2YgbGlu
ZXMsCiAgICAgICAgICAgICAvLyBwYXJhZ3JhcGhzLCBhbmQgZG9jdW1lbnRzLgotICAgICAgICAg
ICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9z
aXRpb24pOworICAgICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwog
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihwb3NpdGlvbik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ3OSw5ICsxNDcwLDggQEAgdm9pZCBX
ZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVU
eXBlIGdlc3R1cmVUeXBlLAogICAgIGNhc2UgR2VzdHVyZVR5cGU6Ok9uZUZpbmdlclRyaXBsZVRh
cDoKICAgICAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3Jh
bnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkg
ewogICAgICAgICAgICAgLy8gVHJpcGxlLXRhcCBhdCBlbmQgb2YgbGluZSBvbmx5IHBsYWNlcyBp
bnNlcnRpb24gcG9pbnQgdGhlcmUuCi0gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdldCB0
aGUgY2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVzLAotICAgICAgICAgICAgLy8g
cGFyYWdyYXBocywgYW5kIGRvY3VtZW50cy4KLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAgICAg
IC8vIFRoaXMgaGVscHMgdG8gZ2V0IHRoZSBjYWxsb3V0IGZvciBwYXN0aW5nIGF0IGVuZHMgb2Yg
bGluZXMsIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCisgICAgICAgICAgICByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmFu
Z2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxh
cml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ5MCwxMiArMTQ4MCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNl
bGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVy
ZVR5cGUsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShyYW5nZSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQsIGdlc3R1cmVUeXBlLCBn
ZXN0dXJlU3RhdGUsIGZsYWdzLCBjYWxsYmFja0lEKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFu
Z2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGJvb2wgYmFzZUlzU3RhcnQp
CitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29v
cmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3Q29v
cmRpbmF0ZXMsIGJvb2wgYmFzZUlzU3RhcnQpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBleGlz
dGluZ1NlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFZpc2li
bGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGV4aXN0aW5nU2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwpAQCAtMTUxNCw3ICsxNTA0LDcgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQ
b2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUsIGNvbnN0IEludFAKICAgICB9
CiAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKIAogICAgIGNvbnN0ZXhwciBP
cHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJl
cXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6
QWxsb3dWaXNpYmxlQ2hpbGRGcmFtZUNvbnRlbnRPbmx5IH07CiAgICAgSGl0VGVzdFJlc3VsdCBo
aXRUZXN0ID0gZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnRJ
bkRvY3VtZW50LCBoaXRUeXBlKTsKQEAgLTE1MjgsMjMgKzE1MTgsMjEgQEAgc3RhdGljIFJlZlB0
cjxSYW5nZT4gcmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUs
IGNvbnN0IEludFAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVjdGlvblN0YXJ0Lm5leHQoKTsK
ICAgICAgICAgZWxzZSBpZiAoJnNlbGVjdGlvblN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuYW5jaG9y
Tm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmaGl0VGVzdC50YXJnZXROb2RlKCktPnRyZWVTY29wZSgp
KQogICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0UG9zaXRpb25G
b3JFbmQocmVzdWx0LmRlZXBFcXVpdmFsZW50KCksIHNlbGVjdGlvblN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkuY29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuaXNO
b3ROdWxsKCkpCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3Vt
ZW50KCksIHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOworCisgICAgICAgIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCByZXN1bHQpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmIChjb21wYXJlUG9zaXRpb25zKHNlbGVjdGlvbkVuZCwgcmVzdWx0KSA8PSAwKQogICAgICAg
ICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uRW5kLnByZXZpb3VzKCk7CiAgICAgICAgIGVsc2UgaWYg
KCZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJnNlbGVjdGlvbkVuZC5kZWVw
RXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkpCiAgICAgICAgICAgICByZXN1
bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZvclN0YXJ0KHJlc3VsdC5kZWVw
RXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2Rl
KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkKLSAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcmVzdWx0LmRlZXBF
cXVpdmFsZW50KCksIHNlbGVjdGlvbkVuZCk7CisKKyAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UocmVzdWx0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmFu
Z2U7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3Np
dGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wg
YmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitzdGF0aWMgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihGcmFtZSogZnJh
bWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wgYmFzZUlzU3RhcnQsIFNl
bGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9uIHNh
bWVEaXJlY3Rpb24gPSBiYXNlSXNTdGFydCA/IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCA6
IFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9uIG9w
cG9zaXRlRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwpAQCAtMTU1NCw3ICsxNTQyLDcgQEAg
c3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKEZyYW1l
KiBmcmFtZSwgY29uc3QgVmlzaWJsZVAKIAogICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFudWxhcml0
eShleHRlbnQsIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9u
KSkgewogICAgICAgICAvLyBUaGlzIGlzIGEgd29yZCBib3VuZGFyeS4gTGVhdmUgc2VsZWN0aW9u
IHdoZXJlIGl0IGlzLgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZXh0
ZW50LCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgb3Bwb3NpdGVEaXJlY3Rpb24p
KSB7CkBAIC0xNTY5LDcgKzE1NTcsOSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0V29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUAogICAgICAg
ICAmJiBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eSh3b3JkQm91bmRhcnksIFRleHRHcmFudWxhcml0
eTo6V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9uKQogICAgICAgICAmJiBpbml0aWFsRXh0
ZW50ICE9IHdvcmRCb3VuZGFyeSkgewogICAgICAgICBleHRlbnQgPSB3b3JkQm91bmRhcnk7Ci0g
ICAgICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9j
dW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgp
LCBleHRlbnQsIGJhc2UpOworICAgICAgICBpZiAoIShiYXNlIDwgZXh0ZW50KSkKKyAgICAgICAg
ICAgIHN0ZDo6c3dhcChiYXNlLCBleHRlbnQpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJh
bmdlKGJhc2UsIGV4dGVudCk7CiAgICAgfQogICAgIC8vIENvbnZlcnNlbHksIGlmIHRoZSBpbml0
aWFsIGV4dGVudCBlcXVhbHMgdGhlIGN1cnJlbnQgd29yZCBib3VuZGFyeSwgdGhlbgogICAgIC8v
IHJ1biB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgc2VsZWN0aW9uIHNo
b3VsZCBleHRlbmQKQEAgLTE1ODksOSArMTU3OSwxMSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiBy
YW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxl
UAogICAgIGlmIChleHRlbnQuaXNOdWxsKCkgfHwgZXh0ZW50ID09IGJhc2UpCiAgICAgICAgIGV4
dGVudCA9IHdvcmRCb3VuZGFyeTsKICAgICBpZiAoZXh0ZW50LmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgYmFz
ZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBleHRlbnQsIGJh
c2UpOworICAgIGlmICghKGJhc2UgPCBleHRlbnQpKQorICAgICAgICBzdGQ6OnN3YXAoYmFzZSwg
ZXh0ZW50KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKGJhc2UsIGV4dGVudCk7CiB9CiAK
IEludFJlY3QgV2ViUGFnZTo6cm9vdFZpZXdCb3VuZHNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCkBAIC0xNzA2LDMxICsxNjk4LDI4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2Vs
ZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3VjaCBz
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAg
IFZpc2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBm
bGFnczsKLQogICAgIGlmIChzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzV2hlbk1v
ZGlmeWluZ1NlbGVjdGlvbigpKQogICAgICAgICBkaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRz
Rm9yU2VsZWN0aW9uR2VzdHVyZShzZWxlY3Rpb25Ub3VjaCwgcG9pbnQpOwogCisgICAgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlOworICAgIE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4gZmxh
Z3M7CisKICAgICBzd2l0Y2ggKHNlbGVjdGlvblRvdWNoKSB7CiAgICAgY2FzZSBTZWxlY3Rpb25U
b3VjaDo6U3RhcnRlZDoKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZE5vdE1vdmluZzoK
ICAgICAgICAgYnJlYWs7Ci0gICAgCisKICAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZDoK
LSAgICAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3Np
dGlvbihwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcmVz
dWx0LCByZXN1bHQpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICByYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZShjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24ocG9zaXRpb24p
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUZvclBvaW50SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKGZyYW1lLCBwb2ludCwgYmFzZUlzU3RhcnQpOwogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTW92aW5nRm9yd2FyZDoKICAgICAg
ICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oJmZyYW1lLCBwb3NpdGlv
biwgYmFzZUlzU3RhcnQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAgICAgIGJy
ZWFrOwotICAgICAgICAKKwogICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkTW92aW5nQmFj
a3dhcmQ6CiAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKCZm
cmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJk
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xNzM5LDggKzE3MjgsOSBAQCB2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9u
VG91Y2ggcwogICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoZnJhbWUsIHBvaW50LCBiYXNlSXNTdGFydCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwog
ICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBwb3NpdGlvbi5hZmZpbml0eSgp
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXNDYWxs
YmFjayhwb2ludCwgc2VsZWN0aW9uVG91Y2gsIGZsYWdzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0x
NzQ4LDE1ICsxNzM4LDEyIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNo
ZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25Ub3VjaCBzCiB2b2lkIFdlYlBhZ2U6
OnNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9tLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLCBHZXN0dXJl
UmVjb2duaXplclN0YXRlIGdlc3R1cmVTdGF0ZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewog
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGZyb21Qb3NpdGlvbiA9IGZyYW1lLnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyb20p
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHRvKSk7Ci0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKLSAgICBpZiAoZnJvbVBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHRv
UG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGZyb21Qb3NpdGlvbiA8IHRvUG9z
aXRpb24pCi0gICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50
KCksIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdG9Qb3NpdGlvbiwgZnJv
bVBvc2l0aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBhdXRvIGZy
b21Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+
cm9vdFZpZXdUb0NvbnRlbnRzKGZyb20pKTsKKyAgICBhdXRvIHRvUG9zaXRpb24gPSBmcmFtZS52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyh0
bykpOworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGZyb21Qb3NpdGlvbiwg
dG9Qb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKCEoZnJvbVBvc2l0aW9uIDwgdG9Qb3NpdGlvbikp
CisgICAgICAgICAgICBzdGQ6OnN3YXAocmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kKTsKKyAgICAg
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgZnJvbVBvc2l0aW9u
LmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9CiAKICAgICAvLyBXZSBjYW4gdXNlIHRoZSBzYW1l
IGNhbGxiYWNrIGZvciB0aGUgZ2VzdHVyZXMgd2l0aCBvbmUgcG9pbnQuCkBAIC0xNzgwLDEzICsx
NzY3LDEzIEBAIHZvaWQgV2ViUGFnZTo6ZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgQ29tcGxldGlvbkhhCiAgICAgSW50UG9pbnQgZW5kTG9jYXRp
b25Gb3JTeW50aGV0aWNNb3VzZUV2ZW50czsKICAgICBib29sIHNob3VsZERpc3BhdGNoTW91c2VF
dmVudHMgPSBzaG91bGREaXNwYXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzV2hlbk1vZGlmeWluZ1Nl
bGVjdGlvbigpOwogICAgIGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKSB7Ci0gICAgICAg
IGF1dG8gc3RhcnRMb2NhdGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygp
LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOwotICAgICAgICBlbmRMb2Nh
dGlvbkZvclN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9v
dFZpZXcoVmlzaWJsZVBvc2l0aW9uKHdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKSkuYWJzb2x1dGVD
YXJldEJvdW5kcygpKS5jZW50ZXIoKTsKKyAgICAgICAgYXV0byBzdGFydExvY2F0aW9uRm9yU3lu
dGhldGljTW91c2VFdmVudHMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhWaXNp
YmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHdvcmRSYW5nZS0+c3RhcnQp
KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLmNlbnRlcigpOworICAgICAgICBlbmRMb2NhdGlvbkZv
clN5bnRoZXRpY01vdXNlRXZlbnRzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXco
VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih3b3JkUmFuZ2UtPmVu
ZCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSkuY2VudGVyKCk7CiAgICAgICAgIGRpc3BhdGNoU3lu
dGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoOjpTdGFy
dGVkLCBzdGFydExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwogICAgICAgICBkaXNw
YXRjaFN5bnRoZXRpY01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rpb25Ub3Vj
aDo6TW92ZWQsIGVuZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwogICAgIH0KIAot
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBw
b3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZSh3b3JkUmFuZ2UsIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAg
IGlmIChzaG91bGREaXNwYXRjaE1vdXNlRXZlbnRzKQogICAgICAgICBkaXNwYXRjaFN5bnRoZXRp
Y01vdXNlRXZlbnRzRm9yU2VsZWN0aW9uR2VzdHVyZShTZWxlY3Rpb25Ub3VjaDo6RW5kZWQsIGVu
ZExvY2F0aW9uRm9yU3ludGhldGljTW91c2VFdmVudHMpOwpAQCAtMTgxMSwxMCArMTc5OCwxMiBA
QCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdvcmRCYWNrd2FyZCgpCiAgICAgaWYgKCFmcmFtZS5zZWxl
Y3Rpb24oKS5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNl
bGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90
TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
c3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJl
ZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91
bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxh
cml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CisgICAgaWYgKHN0YXJ0UG9zaXRp
b24uaXNOdWxsKCkgfHwgc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFu
Z2Uoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODMy
LDcgKzE4MjEsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90
IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24gIT0g
cG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFu
Z2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwg
cG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogICAgIApAQCAtMTk4
NCw3ICsxOTczLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNl
bGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkKICAgICB9CiAKICAgICBWZWN0
b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAgcmFuZ2UtPmNv
bGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVj
dHMpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNX
aXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3RzKTsKICAgICBjb252ZXJ0Q29u
dGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxlY3Rpb25SZWN0
cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0NhbGxi
YWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMDMzLDcgKzIwMjIsNyBA
QCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90
IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2UucHRyKCkpICE9IHRleHQpIHsKKyAgICBpZiAo
cGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZSkgIT0gdGV4dCkgewogICAgICAgICAvLyBUcnkgdG8g
c2VhcmNoIGZvciBhIHJhbmdlIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHRvIHRoZSBwb3NpdGlvbiB3
aXRoaW4gdGhlIHNlbGVjdGlvbiByYW5nZSB0aGF0IG1hdGNoZXMgdGhlIHBhc3NlZCBpbiB0ZXh0
LgogICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNU
ZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGlmICgh
d29yZFJhbmdlLT5jb2xsYXBzZWQoKSkKQEAgLTIwNjQsNyArMjA1Myw3IEBAIHZvaWQgV2ViUGFn
ZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwg
Ym9vbCBpc0ludGVyCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0
aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhG
b2N1c2VkRWxlbWVudCk7CiAgICAgCiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQotICAg
ICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBV
c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtMjA3Niw3ICsyMDY1LDcgQEAgdm9p
ZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb2kKICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKICAg
ICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbik7CiAgICAgICAgIGlmIChwb3NpdGlvbi5pc05v
dE51bGwoKSkKLSAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIo
KSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKSwgVVBTVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIwOTAsNyArMjA3OSw3IEBA
IHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNv
cmU6OlRleHRHcmFudWxhcml0eSBncmFuCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
biA9IChpc0ZvcndhcmQpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVu
ZCgpIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAg
ICAgIHBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRp
b24sIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAgICAgICBpZiAocG9zaXRpb24uaXNOb3RO
dWxsKCkpCi0gICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJh
bmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCks
IGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
biksIGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0yMDk5LDI1ICsyMDg4LDEzIEBAIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbklu
Rm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQpOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFRleHRHcmFu
dWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYXV0byBib3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKCFib3VuZGFyeSkKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7IHsgKmJvdW5k
YXJ5LCAqYm91bmRhcnkgfSB9OwotICAgIH0KLSAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29y
ZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRp
b24ocG9zaXRpb24pOwotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgKnJhbmdlIH07Ci0gICAgfQorICAgIGNhc2Ug
VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgcmV0dXJuIG1h
a2VTaW1wbGVSYW5nZShwb3NpdGlvbik7CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRH
cmFudWxhcml0eToKKyAgICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlv
bik7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNlR3JhbnVsYXJpdHk6Ci0gICAg
Y2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGF1
dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBpZiAoIXJhbmdl
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgKnJh
bmdlIH07Ci0gICAgfQorICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFudWxh
cml0eToKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgZ3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OkRvY3VtZW50R3JhbnVsYXJpdHk6CiAgICAgICAgIC8vIEZJWE1F
OiBNYWtlcyBubyBzZW5zZSB0aGF0IHRoaXMgbXV0YXRlcyB0aGUgY3VycmVudCBzZWxlY3Rpb24g
YW5kIHJldHVybnMgbnVsbC4KICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7
CkBAIC0yMTY0LDcgKzIxNDEsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3JhbnVs
YXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgVwogICAgIGF1dG8m
IGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
ICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoZnJhbWUsIHBvaW50
LCBncmFudWxhcml0eSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAgaWYg
KHJhbmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0
ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKCpyYW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICBtX2luaXRpYWxTZWxlY3Rpb24gPSByYW5nZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogfQpAQCAtMjE5NiwxMCArMjE3Myw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9u
V2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmCiAgICAg
ZWxzZSBpZiAocG9zaXRpb24gPCBpbml0aWFsU2VsZWN0aW9uU3RhcnRQb3NpdGlvbikKICAgICAg
ICAgc2VsZWN0aW9uU3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obmV3UmFuZ2Ut
PnN0YXJ0KTsKIAotICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc05vdE51bGwoKSAmJiBzZWxlY3Rp
b25FbmQuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsg
Km1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvbkVuZCkgfTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwotICAgIH0K
KyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6VW5zaWduZWRDYWxsYmFjayhzZWxlY3Rpb25TdGFydCA9PSBpbml0aWFsU2VsZWN0aW9uU3Rh
cnRQb3NpdGlvbiwgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjIxNCw3ICsyMTg5LDYgQEAgdm9pZCBX
ZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50LCBib28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2U7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0OwogICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQ7CiAgICAgCkBAIC0yMjQ4LDExICsyMjIyLDggQEAg
dm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvaW50LCBib28KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAo
c2VsZWN0aW9uU3RhcnQuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgpKQot
ICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotCi0gICAgaWYgKHJhbmdlKQotICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQp
OworICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25FbmQpKQorICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KHJhbmdlLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpVbnNpZ25lZENhbGxiYWNrKG1fc2VsZWN0aW9uQW5jaG9yID09IFN0YXJ0LCBjYWxsYmFj
a0lEKSk7CiB9CkBAIC0yMjc3LDcgKzIyNDgsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0
YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICAgICAgICAgIGxhc3RQb3Np
dGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgfQogICAgICAgICBpZiAobGFzdFBvc2l0
aW9uLmlzTm90TnVsbCgpICYmIGxhc3RQb3NpdGlvbiAhPSBzdGFydFBvc2l0aW9uKQotICAgICAg
ICAgICAgY29udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQoUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgbGFzdFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKS5wdHIoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBsYXN0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKICAg
ICB9CiAKICAgICBTdHJpbmcgY29udGV4dEFmdGVyOwpAQCAtMjI5MSw3ICsyMjYyLDcgQEAgdm9p
ZCBXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiAgICAgICAgICAgICBsYXN0UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGxhc3RQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBsYXN0UG9zaXRpb24gIT0g
ZW5kUG9zaXRpb24pCi0gICAgICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250
ZXh0KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBsYXN0UG9z
aXRpb24pLnB0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHRBZnRlciA9IHBsYWluVGV4dEZvckNv
bnRleHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24sIGxhc3RQ
b3NpdGlvbikpOwogICAgIH0KIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2Vs
ZWN0aW9uQ29udGV4dENhbGxiYWNrKHNlbGVjdGVkVGV4dCwgY29udGV4dEJlZm9yZSwgY29udGV4
dEFmdGVyLCBjYWxsYmFja0lEKSk7CkBAIC0yMzAyLDEyICsyMjczLDExIEBAIHZvaWQgV2ViUGFn
ZTo6cmVwbGFjZVNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmlu
ZyYgbmV3VGV4dCkKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0
aW9uKCkuaXNDYXJldCgpCiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpCi0gICAgICAgIDogY3JlYXRlTGl2ZVJhbmdl
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAg
IGlmIChwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkKKyAg
ICAgICAgOiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZSkgIT0gb2xkVGV4dCkKICAg
ICAgICAgcmV0dXJuOwotICAgIAogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXModHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3
b3JkUmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZSh3b3JkUmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAw
KTsKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsK
IH0KQEAgLTIzMjcsMTQgKzIyOTcsMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNlRGljdGF0ZWRU
ZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogICAgICAg
ICBwb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChmcmFtZS5kb2N1bWVudCgp
KTsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9z
aXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8g
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkpOwogCi0gICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UucHRy
KCkpICE9IG9sZFRleHQpCisgICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UpICE9IG9s
ZFRleHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbm90aWZ5
IHRoZSBjbGllbnQgdGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIHVudGlsIHdlIGFyZSBk
b25lIGluc2VydGluZyB0aGUgbmV3IHRleHQuCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3Jl
U2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHJhbmdlLnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UocmFuZ2UsIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAw
KTsKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsK
IH0KQEAgLTIzNDcsMjcgKzIzMTcsMjUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJl
Y3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBDb20KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgYXV0byByYW5nZSA9IHdvcmRS
YW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7CisgICAgYXV0byByYW5nZSA9IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7
CiAgICAgaWYgKCFyYW5nZSkgewogICAgICAgICByZXBseSh7IH0pOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZvckNvbnRleHQo
cmFuZ2UpOwogICAgIGNvbnN0IHVuc2lnbmVkIG1heFNlYXJjaEF0dGVtcHRzID0gNTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgIGkgPCBtYXhTZWFyY2hBdHRlbXB0cyAmJiB0ZXh0Rm9yUmFuZ2Ug
IT0gdGV4dEZvckF1dG9jb3JyZWN0aW9uOyArK2kpCi0gICAgewotICAgICAgICBwb3NpdGlvbiA9
IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkucHJldmlvdXMoKTsKLSAgICAgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpIHx8IHBvc2l0aW9uID09IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCisgICAgZm9y
IChzaXplX3QgaSA9IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1wdHMgJiYgdGV4dEZvclJhbmdlICE9
IHRleHRGb3JBdXRvY29ycmVjdGlvbjsgKytpKSB7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5wcmV2aW91cygpOworICAg
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkgfHwgcG9zaXRpb24gPT0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB3b3JkUmFuZ2VGcm9tUG9z
aXRpb24ocG9zaXRpb24pLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpKTsK
LSAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7
CisgICAgICAgIHJhbmdlID0geyB7IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbiktPnN0
YXJ0LCByYW5nZS0+ZW5kIH0gfTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChyYW5nZSk7CiAgICAgfQogCiAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVj
dGlvblJlY3RzOwogICAgIGlmICh0ZXh0Rm9yUmFuZ2UgPT0gdGV4dEZvckF1dG9jb3JyZWN0aW9u
KQotICAgICAgICByYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3RzKTsK
KyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNl
bGVjdGlvblJlY3RzKTsKIAogICAgIGF1dG8gcm9vdFZpZXdTZWxlY3Rpb25SZWN0cyA9IHNlbGVj
dGlvblJlY3RzLm1hcChbJl0oY29uc3QgYXV0byYgc2VsZWN0aW9uUmVjdCkgLT4gRmxvYXRSZWN0
IHsgcmV0dXJuIGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHNlbGVjdGlvblJlY3Qu
cmVjdCgpKTsgfSk7CiAKQEAgLTI0MTMsMTQgKzIzODEsMTQgQEAgYm9vbCBXZWJQYWdlOjphcHBs
eUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBT
dHJpbmcKICAgICBpZiAoIWZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXRPclJhbmdlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgIFN0cmluZyB0ZXh0Rm9yUmFuZ2U7CiAgICAgYXV0
byBvcmlnaW5hbFRleHRXaXRoRm9sZGVkUXVvdGVNYXJrcyA9IGZvbGRRdW90ZU1hcmtzKG9yaWdp
bmFsVGV4dCk7CiAKICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCk7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9t
UG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JD
b250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChyYW5nZSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiAnb3JpZ2luYWxUZXh0JyBp
cyBub3QgdGhlIHNhbWUgYXMgJ3RleHRGb3JSYW5nZScgd2UgbmVlZCB0byBtb3ZlICdyYW5nZScK
ICAgICAgICAgLy8gZm9yd2FyZCBzdWNoIHRoYXQgaXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgc2Vs
ZWN0aW9uIGFzIG11Y2ggYXMgcG9zc2libGUuCkBAIC0yNDMwLDMzICsyMzk4LDMzIEBAIGJvb2wg
V2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbiwgY29uc3QgU3RyaW5nCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5w
cmV2aW91cygpOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAg
ICAgICAgIHBvc2l0aW9uID0gc3RhcnRPZkRvY3VtZW50KGZyYW1lLmRvY3VtZW50KCkpOwotICAg
ICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlv
biwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICB0
ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAg
ICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4
dEZvckNvbnRleHQocmFuZ2UpOwogICAgICAgICAgICAgdW5zaWduZWQgbG9vcENvdW50ID0gMDsK
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heFBvc2l0aW9uc0F0dGVtcHRzID0gMTA7CiAg
ICAgICAgICAgICB3aGlsZSAodGV4dEZvclJhbmdlLmxlbmd0aCgpICYmIHRleHRGb3JSYW5nZS5s
ZW5ndGgoKSA+IG9yaWdpbmFsVGV4dC5sZW5ndGgoKSAmJiBsb29wQ291bnQgPCBtYXhQb3NpdGlv
bnNBdHRlbXB0cykgewogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgp
OwogICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBwb3NpdGlvbiA+
PSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQotICAgICAgICAgICAgICAg
ICAgICByYW5nZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gV1RGOjpu
dWxsb3B0OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgdGV4dEZvclJhbmdl
ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKTsKKyAgICAgICAgICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRl
eHRGb3JDb250ZXh0KHJhbmdlKTsKICAgICAgICAgICAgICAgICBsb29wQ291bnQrKzsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Rm9yUmFuZ2UuaXNFbXB0eSgpICYmIHJh
bmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgICAgIC8vIElmICdyYW5nZScg
ZG9lcyBub3QgaW5jbHVkZSBhbnkgdGV4dCBidXQgaXQgaXMgbm90IGNvbGxhcHNlZCwgd2UgbmVl
ZCB0byBzZXQKICAgICAgICAgICAgIC8vICdyYW5nZScgdG8gbWF0Y2ggdGhlIHNlbGVjdGlvbi4g
T3RoZXJ3aXNlIG5vbi10ZXh0IG5vZGVzIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAgIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9u
KTsKKyAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICAg
ICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmFuZ2Ugc2VsZWN0aW9uLgotICAgICAgICBy
YW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRleHRGb3JSYW5nZSA9IHBsYWluVGV4dEZv
ckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICB0ZXh0Rm9yUmFuZ2UgPSBwbGFpblRleHRG
b3JDb250ZXh0KHJhbmdlKTsKICAgICB9CiAKICAgICBpZiAoZm9sZFF1b3RlTWFya3ModGV4dEZv
clJhbmdlKSAhPSBvcmlnaW5hbFRleHRXaXRoRm9sZGVkUXVvdGVNYXJrcykKQEAgLTI0NjUsOSAr
MjQzMyw5IEBAIGJvb2wgV2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0
IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gQ29ycmVjdGx5IGRldGVy
bWluZSBhZmZpbml0eSwgdXNpbmcgbG9naWMgY3VycmVudGx5IG9ubHkgcHJlc2VudCBpbiBWaXNp
YmxlUG9zaXRpb24KICAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBET1dOU1RSRUFNOwogICAgIGlm
IChyYW5nZSAmJiByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIGFmZmluaXR5ID0gVmlzaWJs
ZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIFVQU1RSRUFNKS5hZmZpbml0eSgpOwor
ICAgICAgICBhZmZpbml0eSA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UtPnN0YXJ0KSwgVVBTVFJFQU0pLmFmZmluaXR5KCk7CiAgICAgCi0gICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgYWZmaW5pdHksIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBhZmZpbml0eSwgV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIGlmIChjb3JyZWN0
aW9uLmxlbmd0aCgpKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rp
b24sIDAsIG9yaWdpbmFsVGV4dC5pc0VtcHR5KCkgPyBUZXh0RXZlbnRJbnB1dEtleWJvYXJkIDog
VGV4dEV2ZW50SW5wdXRBdXRvY29tcGxldGlvbik7CiAgICAgZWxzZSBpZiAob3JpZ2luYWxUZXh0
Lmxlbmd0aCgpKQpAQCAtMjQ5NCwxMiArMjQ2Miw4IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4
dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICBzZWxlY3RlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1l
LmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICBTdHJpbmcgbWFya2VkVGV4
dEJlZm9yZTsKLSAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFy
dFBvc2l0aW9uKSkKLSAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JD
b250ZXh0KHsgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9KTsKLSAgICAgICAgU3Ry
aW5nIG1hcmtlZFRleHRBZnRlcjsKLSAgICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5
UG9pbnQoZW5kUG9zaXRpb24pKQotICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5U
ZXh0Rm9yQ29udGV4dCh7ICplbmQsIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCB9KTsKKyAgICAgICAg
YXV0byBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2ltcGxlUmFu
Z2UoY29tcG9zaXRpb25SYW5nZS0+c3RhcnQsIHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgYXV0
byBtYXJrZWRUZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShl
bmRQb3NpdGlvbiwgY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAgIG1hcmtlZFRleHQg
PSBtYXJrZWRUZXh0QmVmb3JlICsgc2VsZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAg
ICAgICBpZiAoIW1hcmtlZFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0
UmFuZ2UubG9jYXRpb24gPSBtYXJrZWRUZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjUxNiwxNCAr
MjQ4MCwxNCBAQCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rp
b25Db250ZXh0KCkKICAgICAgICAgICAgICAgICBwcmV2aW91c1Bvc2l0aW9uID0gc3RhcnRPZldv
cmQocG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBU
ZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNr
d2FyZCkpOwogICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1Bvc2l0aW9uLmlzTnVsbCgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVu
dFdvcmQgPSBwbGFpblRleHRGb3JDb250ZXh0KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50
KCksIHByZXZpb3VzUG9zaXRpb24sIGN1cnJlbnRQb3NpdGlvbikucHRyKCkpOworICAgICAgICAg
ICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dEZvckNvbnRleHQoUmFuZ2U6OmNy
ZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcHJldmlvdXNQb3NpdGlvbiwgY3VycmVudFBvc2l0aW9u
KSk7CiAgICAgICAgICAgICAgICAgdG90YWxDb250ZXh0TGVuZ3RoICs9IGN1cnJlbnRXb3JkLmxl
bmd0aCgpOwogICAgICAgICAgICAgICAgIGlmICh0b3RhbENvbnRleHRMZW5ndGggPj0gbWF4Q29u
dGV4dExlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y3VycmVudFBvc2l0aW9uID0gcHJldmlvdXNQb3NpdGlvbjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgY3VycmVudFBvc2l0aW9u
ICE9IHN0YXJ0UG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0QmVmb3JlID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjdXJyZW50
UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pLnB0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpLCBjdXJyZW50UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKICAgICAgICAgICAgICAgICBp
ZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJp
dHk6OlBhcmFncmFwaEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoIlxuICJfcywg
Y29udGV4dEJlZm9yZSk7CiAgICAgICAgICAgICB9CkBAIC0yNTM0LDcgKzI0OTgsNyBAQCBXZWJB
dXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAg
ICAgICAgICAgIGlmICghYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZW5kUG9zaXRpb24sIFRleHRH
cmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQp
ICYmIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShlbmRQb3NpdGlvbiwgVGV4dEdyYW51bGFy
aXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpCiAgICAg
ICAgICAgICAgICAgbmV4dFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVs
YXJpdHkoZW5kUG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwogICAgICAgICAgICAgaWYgKG5leHRQb3NpdGlvbi5p
c05vdE51bGwoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JD
b250ZXh0KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBuZXh0
UG9zaXRpb24pLnB0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRl
eHRGb3JDb250ZXh0KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGVuZFBvc2l0aW9u
LCBuZXh0UG9zaXRpb24pKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjY3Myw5ICsyNjM3LDkg
QEAgc3RhdGljIHZvaWQgZGF0YURldGVjdG9yTGlua1Bvc2l0aW9uSW5mb3JtYXRpb24oRWxlbWVu
dCYgZWxlbWVudCwgSW50ZXJhY3Rpb25JbmYKICAgICBhdXRvIGxpbmtSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZWxlbWVudC5kb2N1bWVudCgpKTsKICAgICBsaW5rUmFuZ2UtPnNlbGVjdE5vZGVDb250
ZW50cyhlbGVtZW50KTsKICAgICBpbmZvLnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5
KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGxpbmtS
YW5nZS0+c3RhcnRQb3NpdGlvbigpLAotICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250
ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKS5nZXQoKSk7CisgICAgICAg
IGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6
QmFja3dhcmQpKTsKICAgICBpbmZvLnRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFu
Z2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1Jhbmdl
LT5lbmRQb3NpdGlvbigpLAotICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVu
Z3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpLmdldCgpKTsKKyAgICAgICAgZGF0YURl
dGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KSk7CiB9CiAjZW5kaWYKIApAQCAtNDEwNSw3ICs0MDY5LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRh
dGVTZWxlY3Rpb25XaXRoRGVsdGEoaW50NjRfdCBsb2NhdGlvbkRlbHRhLCBpbnQ2NF90IGxlbmd0
aERlbHQKIAogICAgIGF1dG8gbmV3U2VsZWN0aW9uUmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShuZXdT
ZWxlY3Rpb25Mb2NhdGlvbi51bnNhZmVHZXQoKSwgbmV3U2VsZWN0aW9uTGVuZ3RoLnVuc2FmZUdl
dCgpKTsKICAgICBhdXRvIHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpLCBuZXdTZWxlY3Rpb25S
YW5nZSk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSkucHRyKCksIERPV05TVFJFQU0sIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
KyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1cGRhdGVkU2VsZWN0aW9u
UmFuZ2UsIERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQog
CkBAIC00MzkwLDcgKzQzNTQsNyBAQCB2b2lkIFdlYlBhZ2U6OmZvY3VzVGV4dElucHV0Q29udGV4
dEFuZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGVsZW1lbnRDbwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGFy
Z2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqdGFy
Z2V0RnJhbWUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9u
LmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pLCBwb3NpdGlvbi5hZmZpbml0eSgp
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlv
bi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQ
b3NpdGlvbi5tbQppbmRleCAyYjNkMTljOWRhN2JkNzdjYjdkYTc2ZTZkZmViNWQ1MWNlMzU0YmMx
Li4zYjBlYjk1NGUwOWFmZDhjNzMwNWZmYWVlMTI0MWYxN2YyMTJkMWZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24u
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJs
ZVBvc2l0aW9uLm1tCkBAIC0yOTIsNyArMjkyLDcgQEAgLSAoQk9PTCl3aXRoaW5UZXh0VW5pdE9m
R3JhbnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbkkK
IC8vIGlzIGVuY2xvc2VkIGRlcGVuZHMgb24gdGhlIGdpdmVuIGRpcmVjdGlvbiwgdXNpbmcgdGhl
IHNhbWUgcnVsZSBhcyAtW1dlYlZpc2libGVQb3NpdGlvbiB3aXRoaW5UZXh0VW5pdE9mR3JhbnVs
YXJpdHk6aW5EaXJlY3Rpb25BdEJvdW5kYXJ5Ol0uCiAtIChET01SYW5nZSAqKWVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGly
ZWN0aW9uSWZBdEJvdW5kYXJ5OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24K
IHsKLSAgICByZXR1cm4ga2l0KGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShbc2VsZiBf
dmlzaWJsZVBvc2l0aW9uXSwgdG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVj
dGlvbkRpcmVjdGlvbihkaXJlY3Rpb24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChlbmNsb3Np
bmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdy
YW51bGFyaXR5KGdyYW51bGFyaXR5KSwgdG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkp
OwogfQogCiAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwb3NpdGlvbkF0U3RhcnRPckVuZE9mV29y
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCBlYTMwOTg5MjQ5OGYz
ZjY0ZWYwZjA2NDhmMzU0NWM1NTg1MWI5Njk1Li44NTg0YzIzMWZlZjhjOGQ4YjcwNmU4Zjk2ZWQw
OGQ3Mzg4NTNkZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
SFRNTC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAt
NDQsNiArNDQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJUZXh0Q29udHJvbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4K
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xNTIsNyArMTUzLDcgQEAgLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihO
U1N0cmluZyAqKW1hcmsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZy
YWdtZW50V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewogICAgIC8vIEZJWE1FOiBTaW5jZSB0
aGlzIGlzIG5vdCBhIGNvbnRleHR1YWwgZnJhZ21lbnQsIGl0IHdvbid0IGhhbmRsZSB3aGl0ZXNw
YWNlIHByb3Blcmx5LgotICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3Jl
KHNlbGYpLT5jcmVhdGVSYW5nZSgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqY29yZShz
ZWxmKSksIHRleHQpLnB0cigpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggODEwMGFiZTZiYmY3ZDg2OThk
YTZlYzc1YmQ4YmFmOGYwZWU0ZDY5MS4uNGYwNjgzNDYyMmI3MzJmZTZhNmNjNjRjN2M5NTVkYTIx
NGYyZjY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0
RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRF
eHRlbnNpb25zLm1tCkBAIC03OCw5ICs3OCwxMCBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2Ug
KFVJS2l0RXh0ZW5zaW9ucykKIAogLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0
aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsKLSAgICBSYW5nZSAq
cmFuZ2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7CisKICAg
ICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKLSAgICBmcmFtZVNlbGVj
dGlvbi5tb3ZlVG8ocmFuZ2UpOworICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtl
U2ltcGxlUmFuZ2UocmFuZ2UpKTsKICAgICAKICAgICBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFy
aXR5OwogICAgIC8vIFVudGlsIFdlYktpdCBzdXBwb3J0cyB2ZXJ0aWNhbCBsYXlvdXQsICJkb3du
IiBpcyBlcXVpdmFsZW50IHRvICJmb3J3YXJkIGJ5IGEgbGluZSIgYW5kCkBAIC05MiwzMyArOTMs
MzQgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRq
dXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICAgICAgZGlyZWN0aW9uID0gV2ViVGV4dEFk
anVzdG1lbnRCYWNrd2FyZDsKICAgICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpUZXh0R3Jh
bnVsYXJpdHk6OkxpbmVHcmFudWxhcml0eTsKICAgICB9Ci0gICAgCisKICAgICBmb3IgKFVJbnQz
MiBpID0gMDsgaSA8IGFtb3VudDsgaSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnko
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCAoV2ViQ29yZTo6U2VsZWN0
aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIAorCiAgICAgUG9zaXRp
b24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVj
dGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGlmIChzdGFydC5j
b250YWluZXJOb2RlKCkpCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVy
Tm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHJhbmdlLnNl
dFN0YXJ0KCpzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKTsKICAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmFuZ2UtPnNldEVu
ZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAg
ICAgICAgcmFuZ2Uuc2V0RW5kKCplbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwogfQogCiAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVj
dGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgUmFuZ2Ug
KnJhbmdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOworCiAg
ICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247Ci0gICAgZnJhbWVTZWxl
Y3Rpb24ubW92ZVRvKHJhbmdlKTsKLSAgICAKKyAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rp
b24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CisKICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8
IGFtb3VudDsgaSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIChXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rp
b24pZGlyZWN0aW9uLCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFy
aXR5KTsKLSAgICAKKwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0
aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBl
bmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByYW5nZS0+
c2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpOworICAgICAgICByYW5nZS5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKGVuZC5jb250YWluZXJOb2Rl
KCkpCi0gICAgICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHJhbmdlLnNldEVuZCgqZW5kLmNvbnRhaW5l
ck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIH0KIAogLSAoRE9NTm9kZSAq
KWZpcnN0Tm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRP
TU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0
aW9ucy5tbQppbmRleCA3MWMwNGRiMjI5MzdhMzMwZTFhNDczZjIxM2ZhYzgzYzk1NzMxZjBiLi5k
M2FlN2Y2ZWY4M2QyMDhmMjY5YjZlMTYyZGJlMTQ1NDYyZGZiOTZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtNTIsNiArNTIsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5
V2ViQXJjaGl2ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1NoYWRvd1Jvb3QuaD4KQEAgLTE4NCw3ICsxODUsNyBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFu
Z2UgKFdlYkRPTVJhbmdlT3BlcmF0aW9ucykKIAogLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUK
IHsKLSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdl
YkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNvcmUoc2VsZikpXSBhdXRvcmVsZWFz
ZV07CisgICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lX
ZWJBcmNoaXZlOkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgqY29yZShzZWxmKSldIGF1dG9yZWxl
YXNlXTsKIH0KIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDM0ZTY4ZjBjM2Q1NzJiYTllNDNhZTUx
OWY5M2M0YjhhY2UwY2U4N2UuLjMzYTI2MDkyNjZhOWU5NTQ3ZWFjZDExYjQxN2Q0ZjJjYjExYmEw
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAt
OTMsNiArOTMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50
Q29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlcldpZGdldC5oPgpAQCAtNzIyLDcgKzcyMyw3IEBAIC0gKE5TUmVjdClfZmly
c3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShjb3JlKHJhbmdl
KSkpOworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RG
b3JSYW5nZShtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSk7CiB9CiAKIC0gKHZvaWQpX3Nj
cm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCkBAIC0xNDc5LDcgKzE0ODAs
NyBAQCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5p
dHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaQogCiAgICAgYXV0byBjb3JlQ2xvc2VUeXBpbmcg
PSBjbG9zZVR5cGluZyA/IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzIDog
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObzsKICAgICBhdXRvIGNvcmVVc2Vy
VHJpZ2dlcmVkID0gdXNlclRyaWdnZXJlZCA/IFVzZXJUcmlnZ2VyZWQgOiBOb3RVc2VyVHJpZ2dl
cmVkOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSks
IGNvcmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dlcmVkKTsKKyAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShjb3Jl
KHJhbmdlKSksIGNvcmUoYWZmaW5pdHkpLCBjb3JlQ2xvc2VUeXBpbmcsIGNvcmVVc2VyVHJpZ2dl
cmVkKTsKICAgICBpZiAoIWNsb3NlVHlwaW5nKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5lbnN1
cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygp
OwogfQpAQCAtMTg3OSw3ICsxODgwLDcgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0
cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21h
cnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUK
IHsKICAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJh
bmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50
KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBs
YWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOm1hdGNoU3R5bGVdOwogfQogCkBAIC0xOTYyLDcg
KzE5NjMsNyBAQCAtIChCT09MKWhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uCiAtICh2b2lkKV9y
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVu
dDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNl
CiB7CiAgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVS
YW5nZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVu
dCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
dGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVw
bGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkBAIC0yMjcxLDcgKzIyNzIs
OCBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3Rvcjoo
ZmxvYXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICop
X2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKLSAgICByZXR1cm4g
a2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgdGV4
dCkucHRyKCkpOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiByYW5nZSA/
IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOwog
fQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JXZWJBcmNo
aXZlOihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCmluZGV4IDNhNWJiMDRiYzM0YjgxNmI5OWRjZTMzZGQ3MzA2NWVlYjY0
ZTU0ODYuLmExODU2OGVmNWI1ZGY4YTBhZDlhNGNlNGMyYjZjZWY2N2M0ODVlYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5NSw2ICsxOTUsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNr
ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
VGhlbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJXaWRnZXQuaD4KQEAgLTc5MjksOCArNzkzMCw3IEBAIC0gKERPTVJhbmdlICopRE9N
UmFuZ2VPZlN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUbzooRE9NUmFuZ2UgKilw
cmV2aW91CiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPnJhbmdlT2ZTdHJpbmcoc3RyaW5nLCBj
b3JlKHByZXZpb3VzUmFuZ2UpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSkuZ2V0KCkpOworICAgIHJl
dHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPnJhbmdlT2ZTdHJpbmcoc3RyaW5nLCBtYWtlU2ltcGxl
UmFuZ2UoY29yZShwcmV2aW91c1JhbmdlKSksIGNvcmVPcHRpb25zKG9wdGlvbnMpKSk7CiB9CiAK
IC0gKHZvaWQpc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeTooQk9PTCltYWluRnJhbWVEb2N1bWVu
dFJlYWR5CkBAIC04NDU2LDcgKzg0NTYsNyBAQCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZQogICAg
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIGNvcmUoc2Vs
ZWN0aW9uQWZmaW5pdHkpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6Olllcyk7CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSks
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3Bw
CmluZGV4IDNkZGQwMGY3YWI3MjZlMGVlNDI5NGE5NTAyNjNjYWI1YzNmY2E0ZWYuLjYxYzAyMjdl
MjhkMjNhOTc2NmRkY2YyMDg4NDhkOTZhMjI0N2U4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGV4dENvbnRyb2wuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Zpc2libGVTZWxlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zp
c2libGVVbml0cy5oPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>