<?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>78598</bug_id>
          
          <creation_ts>2012-02-14 04:33:25 -0800</creation_ts>
          <short_desc>[Qt] Get rid of GraphicsLayerQt</short_desc>
          <delta_ts>2012-07-02 15:44:56 -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>Layout and Rendering</component>
          <version>528+ (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>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>hausmann</cc>
    
    <cc>larsgk</cc>
    
    <cc>luiz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556213</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 04:33:25 -0800</bug_when>
    <thetext>GraphicsLayerQt is currently used as a GraphicsLayer backend for Symbian/Windows. That code is no longer maintained and should be moved over to use TextureMapperImageBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661694</commentid>
    <comment_count>1</comment_count>
      <attachid>150467</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-02 13:48:50 -0700</bug_when>
    <thetext>Created attachment 150467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661774</commentid>
    <comment_count>2</comment_count>
      <attachid>150467</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 15:44:51 -0700</bug_when>
    <thetext>Comment on attachment 150467
Patch

Clearing flags on attachment: 150467

Committed r121710: &lt;http://trac.webkit.org/changeset/121710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661775</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 15:44:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150467</attachid>
            <date>2012-07-02 13:48:50 -0700</date>
            <delta_ts>2012-07-02 15:44:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78598-20120702134839.patch</filename>
            <type>text/plain</type>
            <size>96614</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTIzMmMxMTNkYTA1Y2Jj
MmVhZTIzNWM4NDA1YzUzNTc1OTU0NjlhOC4uMWRlYTg3YzA5NjhhMjA3MWU3YmNmYTEwNWQyZTdl
NzQxZTkxOWQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTAyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBH
ZXQgcmlkIG9mIEdyYXBoaWNzTGF5ZXJRdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgR3JhcGhpY3NMYXllclF0LmgvY3BwLCBhcyB3ZWxsIGFz
IHJlZmVyZW5jZXMgdG8gdGhlIG5vbi1UZXh0dXJlTWFwcGVyIGNvZGUgcGF0aHMKKyAgICAgICAg
aW4gR3JhcGhpY3NDb250ZXh0M0RRdCBhbmQgTWVkaWFQbGF5ZXJQcml2YXRlUXQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCByZW1vdmluZyB1bnVzZWQgY29kZSBwYXRocy4KKworICAgICAgICAq
IFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
OgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzTGF5ZXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NMYXllclF0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDoKKyAgICAgICAg
KE1lZGlhUGxheWVyUHJpdmF0ZVF0KToKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpblZpZXdR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKwogMjAxMi0wNy0w
MiAgVGFpanUgVHN1aWtpICA8dHppa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQWRkIHJlZnJlc2ggYnV0dG9uIHRvIEZpbGVTeXN0ZW1WaWV3IHN0YXR1cyBiYXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKaW5kZXggMjRhYzkwZTc4ZTA4N2Q0MThmZmQzZDA0NmEyM2E3OTlkMjUzYzAxYi4u
ZmExZjEzMmJmYmIzMDFjM2MyZDNiYzg1OWZkNjkxZWI2ZjNlZmI3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNSBAQAorMjAxMi0wNy0wMiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3Nl
bnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF0gR2V0IHJpZCBvZiBHcmFwaGljc0xheWVy
UXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTk4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
ZCBhbGwgcmVmZXJlbmNlcyB0byBHcmFwaGljc0xheWVyUXQsIGluY2x1ZGluZyAjaWZkZWYgY29k
ZSBwYXRocyB0aGF0IG9ubHkgYXBwbHkKKyAgICAgICAgd2hlbiBURVhUVVJFX01BUFBFUiBpcyBk
aXNhYmxlZC4KKworICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAg
KFFHcmFwaGljc1dlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoK
KyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3Jkcyk6CisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZV9wLmg6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpRV2Vi
RnJhbWVQcml2YXRlKToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGUpOgorICAgICAgICAqIEFw
aS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkp
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5Q
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OlBhZ2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAgKFBh
Z2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAgKFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQpOgor
CiAyMDEyLTA2LTI5ICBLb25yYWQgUGlhc2NpayAgPGtwaWFzY2lrQHJpbS5jb20+CiAKICAgICAg
ICAgRG9uJ3QgaGFyZGNvZGUgdGFyZ2V0IGRwaSBvZiAxNjAgKGl0IHNob3VsZCBiZSA5NiBvbiBk
ZXNrdG9wKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTU0MTQzNTY3ODhmMGJiNzA0ZWU3OWRmMWFiMjMwOTk2
YTdiMjYwNS4uNTlkNTgxMzJiMDU1ZTMzNTJkYzhjNDUyZmE0MjExZWY3MjBkYWQ2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0yMzEzLDYgKzIzMTMsMTQgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2Uu
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmggXAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCBcCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1RpbGUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRC
YWNraW5nU3RvcmUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQuaCBcCkBAIC0yOTIzLDYgKzI5MzEsMTMgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0
dGVyblF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5j
cHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
IFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL01JTUVTbmlmZmluZy5jcHAgXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvcXQvQ3JlZGVudGlhbFN0b3JhZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdv
cmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXApAQCAtNDEzMiw0MCArNDE0NywxNiBAQCB3aW4z
Mjohd2luMzItZysrKjpjb250YWlucyhRTUFLRV9IT1NULmFyY2gsIHg4Nl82NCk6ewogICAgfQog
fQogCi1jb250YWlucyhDT05GSUcsIHRleG1hcCkgeworY29udGFpbnMoREVGSU5FUywgV1RGX1VT
RV9URVhUVVJFX01BUFBFUl9HTD0xKSB7CiAgICAgSEVBREVSUyArPSBcCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggXAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgg
XAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgg
XAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAogCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCBcCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5jcHAKIAotICAgIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfVEVYVFVSRV9NQVBQRVJf
R0w9MSkgewotICAgICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAotCi0gICAgICAgIFNPVVJD
RVMgKz0gXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHAgXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAotCi0gICAgICAgIENPTkZJRyArPSBvcGVuZ2wtc2hpbXMK
LSAgICB9Ci19IGVsc2UgewotICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NMYXllclF0LmgKLSAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzTGF5ZXJRdC5jcHAKKyAgICBDT05GSUcgKz0gb3BlbmdsLXNoaW1zCiB9CiAKIGNvbnRhaW5z
KENPTkZJRywgb3BlbmdsLXNoaW1zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKaW5kZXggZGJmMzI1ZDRiMzg1YThhNDE2ZDU3Y2M1MGMz
YjJkM2QyYjRkMTIzNC4uNmRjMGZlNWMzMDY3NjNjZWQ4YjNlOGJkYTgxZTc5ZjQyZWUwNWM3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXll
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIu
aApAQCAtMzQsMTkgKzM0LDEwIEBAIHR5cGVkZWYgQ0FMYXllciBQbGF0Zm9ybUxheWVyOwogI2Vs
aWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgX0NBQ0ZMYXllciBQbGF0Zm9ybUxheWVy
OwogI2VsaWYgUExBVEZPUk0oUVQpCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7CiB0eXBlZGVmIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIFBsYXRmb3JtTGF5ZXI7CiB9OwotI2Vsc2UKLVFUX0JF
R0lOX05BTUVTUEFDRQotY2xhc3MgUUdyYXBoaWNzT2JqZWN0OwotUVRfRU5EX05BTUVTUEFDRQot
bmFtZXNwYWNlIFdlYkNvcmUgewotdHlwZWRlZiBRR3JhcGhpY3NPYmplY3QgUGxhdGZvcm1MYXll
cjsKLX0KLSNlbmRpZgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBMYXllckNocm9taXVtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA1ZjMx
MDE5ODUxMTY5OTViMDdhMDFlZTQyYmEzYjMzZjU3Y2NiODFhLi43MGQzZjI0YWZhNTU0MmE2OGEx
MjQxZDM4MWMzY2U5MzQ4NzgxODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNDAsNyAr
NDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaW5jbHVkZSA8dGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oPgogI2VuZGlmCiAKQEAgLTU3LDcgKzU3LDcgQEAgdHlwZWRl
ZiBjaGFyIEdMY2hhcjsKICNlbmRpZgogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIDogcHVibGljIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyCiAjZW5kaWYKIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RX
aW5kb3cqKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKTsKICNl
bmRpZgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRp
YyBpbmxpbmUgcXVpbnQzMiBzd2FwQmdyVG9SZ2IocXVpbnQzMiBwaXhlbCkKICAgICByZXR1cm4g
KChwaXhlbCA8PCAxNikgJiAweGZmMDAwMCkgfCAoKHBpeGVsID4+IDE2KSAmIDB4ZmYpIHwgKHBp
eGVsICYgMHhmZjAwZmYwMCk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBU
ZXh0dXJlKiBtYXNrKQogewogICAgIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9y
ZUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA0NjU4OTBlMzQ4N2ZhYjIwNzFmOTM2
ZmU0NDczOGQ2ODk1OTllM2YwLi5jMDM0ZjY0YjNmZmE3YjVkMDEwYzUxZTE5NmJmMTEwYzI1NWQy
NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAg
IG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogfQogCi0jaWYgRU5B
QkxFKDNEX1JFTkRFUklORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIEVOQUJMRSgzRF9S
RU5ERVJJTkcpCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJh
bnNmb3JtKCkgY29uc3QKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZmFhZjA5NjI0NTgzMGY1ZTI5OWI5
Y2I3YmU2OWU3NDFhNmYyMmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXll
clF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ODYgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJRdC5oIgot
Ci0jaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJVbml0QmV6
aWVyLmgiCi0jaW5jbHVkZSA8cWdyYXBoaWNzZWZmZWN0Lmg+Ci0jaW5jbHVkZSA8cWdyYXBoaWNz
aXRlbS5oPgotI2luY2x1ZGUgPHFncmFwaGljc3NjZW5lLmg+Ci0jaW5jbHVkZSA8cWdyYXBoaWNz
dmlldy5oPgotI2luY2x1ZGUgPHFncmFwaGljc3dpZGdldC5oPgotI2luY2x1ZGUgPHFzdHlsZW9w
dGlvbi5oPgotI2luY2x1ZGUgPFF0Q29yZS9xYWJzdHJhY3RhbmltYXRpb24uaD4KLSNpbmNsdWRl
IDxRdENvcmUvcWRhdGV0aW1lLmg+Ci0jaW5jbHVkZSA8UXRDb3JlL3FkZWJ1Zy5oPgotI2luY2x1
ZGUgPFF0Q29yZS9xbWV0YW9iamVjdC5oPgotI2luY2x1ZGUgPFF0Q29yZS9xc2V0Lmg+Ci0jaW5j
bHVkZSA8UXRDb3JlL3F0aW1lci5oPgotI2luY2x1ZGUgPFF0R3VpL3Fjb2xvci5oPgotI2luY2x1
ZGUgPFF0R3VpL3FwYWludGVyLmg+Ci0jaW5jbHVkZSA8UXRHdWkvcXBpeG1hcC5oPgotI2luY2x1
ZGUgPFF0R3VpL3FwaXhtYXBjYWNoZS5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2lu
Z1N0b3JlQ2xpZW50LmgiCi0KLS8vIFRoZSBtaW5pbXVtIHdpZHRoL2hlaWdodCBmb3IgdGlsaW5n
LiBXZSB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCi0j
ZGVmaW5lIEdSQVBISUNTX0xBWUVSX1RJTElOR19USFJFU0hPTEQgMjAwMAotI2VuZGlmCi0KLSNk
ZWZpbmUgUVRfREVCVUdfUkVDQUNIRSAwCi0jZGVmaW5lIFFUX0RFQlVHX0NBQ0hFRFVNUCAwCi0K
LSNkZWZpbmUgUVRfREVCVUdfRlBTIDAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
Y29uc3QgaW50IGdNaW5pbXVtUGl4bWFwQ2FjaGVMaW1pdCA9IDIwNDg7Ci0KLSNpZm5kZWYgUVRf
Tk9fR1JBUEhJQ1NFRkZFQ1QKLWNsYXNzIE1hc2tFZmZlY3RRdCA6IHB1YmxpYyBRR3JhcGhpY3NF
ZmZlY3QgewotcHVibGljOgotICAgIE1hc2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFw
aGljc0l0ZW0qIG1hc2tMYXllcikKLSAgICAgICAgOiBRR3JhcGhpY3NFZmZlY3QocGFyZW50KQot
ICAgICAgICAsIG1fbWFza0xheWVyKG1hc2tMYXllcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBkcmF3KFFQYWludGVyKiBwYWludGVyKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIG1v
ZGlmaWVkIGNsb25lIG9mIFFHcmFwaGljc09wYWNpdHlFZmZlY3QuCi0gICAgICAgIC8vIEl0J3Mg
bW9yZSBlZmZpY2llbnQgdG8gZG8gaXQgdGhpcyB3YXkgYmVjYXVzZToKLSAgICAgICAgLy8gKGEp
IFdlIGRvbid0IG5lZWQgdGhlIFFCcnVzaCBhYnN0cmFjdGlvbiAtIHdlIGFsd2F5cyBlbmQgdXAg
dXNpbmcgUUdyYXBoaWNzSXRlbTo6cGFpbnQKLSAgICAgICAgLy8gICAgIGZyb20gdGhlIG1hc2sg
bGF5ZXIuCi0gICAgICAgIC8vIChiKSBRR3JhcGhpY3NPcGFjaXR5RWZmZWN0IGRldGFjaGVzIHRo
ZSBwaXhtYXAsIHdoaWNoIGlzIGluZWZmaWNpZW50IG9uIE9wZW5HTC4KLSAgICAgICAgY29uc3Qg
UVNpemUgbWFza1NpemUgPSBzb3VyY2VCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCkuc2l6
ZSgpOwotICAgICAgICBpZiAoIW1hc2tTaXplLmlzVmFsaWQoKSB8fCBtYXNrU2l6ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGRyYXdTb3VyY2UocGFpbnRlcik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgUVBpeG1hcCBtYXNrUGl4bWFwKG1hc2tTaXplKTsKLQot
ICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgc28gdGhlIHBpeG1hcCB3b3VsZCBoYXZlIGhh
c0FscGhhKCkuCi0gICAgICAgIG1hc2tQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAg
ICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFza1BpeG1hcCk7Ci0gICAgICAgIFFTdHlsZU9w
dGlvbkdyYXBoaWNzSXRlbSBvcHRpb247Ci0gICAgICAgIG9wdGlvbi5leHBvc2VkUmVjdCA9IG9w
dGlvbi5yZWN0ID0gbWFza1BpeG1hcC5yZWN0KCk7Ci0gICAgICAgIG1hc2tQYWludGVyLnNldFJl
bmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCksIHRydWUpOwotICAgICAgICBtX21hc2tM
YXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uLCAwKTsKLSAgICAgICAgbWFza1BhaW50
ZXIuZW5kKCk7Ci0KLSAgICAgICAgUVBvaW50IG9mZnNldDsKLSAgICAgICAgUVBpeG1hcCBzcmNQ
aXhtYXAgPSBzb3VyY2VQaXhtYXAoUXQ6OkxvZ2ljYWxDb29yZGluYXRlcywgJm9mZnNldCwgUUdy
YXBoaWNzRWZmZWN0OjpOb1BhZCk7Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSB0byB1c2UgYW5vdGhl
ciBpbnRlcm1lZGlhdGUgcGl4bWFwLCB0byBtYWtlIHN1cmUgdGhlIG1hc2sgYXBwbGllcyBvbmx5
IHRvIHRoaXMgaXRlbQotICAgICAgICAvLyBhbmQgZG9lc24ndCBtb2RpZnkgcGl4ZWxzIGFscmVh
ZHkgcGFpbnRlZCBpbnRvIHRoaXMgcGFpbnQtZGV2aWNlLgotICAgICAgICBRUGl4bWFwIHBpeG1h
cChzcmNQaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgcGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50
KTsKLQotICAgICAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIFFQYWludGVyIHBpeG1hcFBhaW50ZXIoJnBpeG1hcCk7Ci0KLSAgICAgICAgcGl4
bWFwUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVyLT5yZW5kZXJIaW50cygpKTsKLSAgICAg
ICAgcGl4bWFwUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2UpOwotCi0gICAgICAgIC8vIFdlIHVzZSBkcmF3UGl4bWFwIHJhdGhlciB0aGFu
IGRldGFjaGluZywgYmVjYXVzZSBpdCdzIG1vcmUgZWZmaWNpZW50IG9uIE9wZW5HTC4KLSAgICAg
ICAgcGl4bWFwUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIHNyY1BpeG1hcCk7Ci0gICAgICAgIHBp
eG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
RGVzdGluYXRpb25Jbik7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBt
YXNrUGl4bWFwKTsKLQotICAgICAgICBwaXhtYXBQYWludGVyLmVuZCgpOwotICAgICAgICBwYWlu
dGVyLT5kcmF3UGl4bWFwKG9mZnNldCwgcGl4bWFwKTsKLSAgICB9Ci0KLSAgICBRR3JhcGhpY3NJ
dGVtKiBtX21hc2tMYXllcjsKLX07Ci0jZW5kaWYgLy8gUVRfTk9fR1JBUEhJQ1NFRkZFQ1QKLQot
Y2xhc3MgR3JhcGhpY3NMYXllclF0SW1wbCA6IHB1YmxpYyBRR3JhcGhpY3NPYmplY3QKLSNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgdmlydHVhbCBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotI2VuZGlmCi17Ci0gICAgUV9PQkpF
Q1QKLQotcHVibGljOgotICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hp
Y2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCi0gICAgLy8gbW9kaWZpZWQgYnkg
dGhlIGNvbXBvc2l0b3IsIHNvIHdlIGNhbiBrbm93IHdoYXQgdG8gbG9vayBmb3IgaW4gdGhlIG5l
eHQgZmx1c2guCi0gICAgZW51bSBDaGFuZ2VNYXNrIHsKLSAgICAgICAgTm9DaGFuZ2VzID0gICAg
ICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgUGFyZW50Q2hhbmdlID0gICAgICAgICAgICAgICgx
TCA8PCAwKSwKLSAgICAgICAgQ2hpbGRyZW5DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAxKSwK
LSAgICAgICAgTWFza0xheWVyQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCAyKSwKLSAgICAgICAg
UG9zaXRpb25DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAzKSwKLQotICAgICAgICBBbmNob3JQ
b2ludENoYW5nZSA9ICAgICAgICAgKDFMIDw8IDQpLAotICAgICAgICBTaXplQ2hhbmdlICA9ICAg
ICAgICAgICAgICAgKDFMIDw8IDUpLAotICAgICAgICBUcmFuc2Zvcm1DaGFuZ2UgPSAgICAgICAg
ICAgKDFMIDw8IDYpLAotICAgICAgICBDb250ZW50Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8
IDcpLAotCi0gICAgICAgIENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UgPSAoMUwgPDwgOCksCi0g
ICAgICAgIE9wYWNpdHlDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgOSksCi0gICAgICAgIENv
bnRlbnRzUmVjdENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTApLAotCi0gICAgICAgIFByZXNlcnZl
czNEQ2hhbmdlID0gICAgICAgICAoMUwgPDwgMTEpLAotICAgICAgICBNYXNrc1RvQm91bmRzQ2hh
bmdlID0gICAgICAgKDFMIDw8IDEyKSwKLSAgICAgICAgRHJhd3NDb250ZW50Q2hhbmdlID0gICAg
ICAgICgxTCA8PCAxMyksCi0gICAgICAgIENvbnRlbnRzT3BhcXVlQ2hhbmdlID0gICAgICAoMUwg
PDwgMTQpLAotCi0gICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSA9ICAoMUwgPDwgMTUp
LAotICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFMIDw8IDE2KSwKLSAgICAg
ICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxNyksCi0gICAgICAgIEJhY2tn
cm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTgpLAotCi0gICAgICAgIERpc3RyaWJ1dGVz
T3BhY2l0eUNoYW5nZSA9ICAoMUwgPDwgMTkpCi0gICAgfTsKLQotICAgIC8vIFRoZSBjb21wb3Np
dG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8g
ZG8gc28uCi0gICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgUGl4
bWFwQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZh
czNEQ29udGVudFR5cGV9OwotCi0gICAgY29uc3QgR3JhcGhpY3NMYXllclF0SW1wbCogcm9vdExh
eWVyKCkgY29uc3Q7Ci0KLSAgICBHcmFwaGljc0xheWVyUXRJbXBsKEdyYXBoaWNzTGF5ZXJRdCog
bmV3TGF5ZXIpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJRdEltcGwoKTsKLQotICAgIC8v
IHJlaW1wcyBmcm9tIFFHcmFwaGljc0l0ZW0KLSAgICB2aXJ0dWFsIFFQYWludGVyUGF0aCBvcGFx
dWVBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBRUmVjdEYgYm91bmRpbmdSZWN0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFFQYWludGVyKiwgY29uc3QgUVN0eWxlT3B0aW9uR3Jh
cGhpY3NJdGVtKiwgUVdpZGdldCopOwotCi0gICAgLy8gV2UgbWFuYWdlIHRyYW5zZm9ybXMgb3Vy
c2VsdmVzIGJlY2F1c2UgdHJhbnNmb3JtLW9yaWdpbiBhY3RzIGRpZmZlcmVudGx5IGluIHdlYmtp
dCBhbmQgaW4gUXQsCi0gICAgLy8gYW5kIHdlIG5lZWQgaXQgYXMgYSBmYWxsYmFjayBpbiBjYXNl
IHdlIGVuY291bnRlciBhbiB1bi1pbnZlcnRpYmxlIG1hdHJpeC4KLSAgICB2b2lkIHNldEJhc2VU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHVwZGF0ZVRy
YW5zZm9ybSgpOwotCi0gICAgLy8gbGV0IHRoZSBjb21wb3NpdG9yLUFQSSB0ZWxsIHVzIHdoaWNo
IHByb3BlcnRpZXMgd2VyZSBjaGFuZ2VkCi0gICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFz
ayk7Ci0KLSAgICAvLyBBY3R1YWwgcmVuZGVyaW5nIG9mIHRoZSB3ZWItY29udGVudCBpbnRvIGEg
UVBpeG1hcDoKLSAgICAvLyBXZSBwcmVmZXIgdG8gdXNlIG91ciBvd24gY2FjaGluZyBiZWNhdXNl
IGl0IGdpdmVzIHVzIGEgaGlnaGVyIGxldmVsIG9mIGdyYW51bGFyaXR5IHRoYW4KLSAgICAvLyBR
R3JhcGhpY3NJdGVtIGNhY2hlIG1vZGVzIC0gU29tZXRpbWVzIHdlIG5lZWQgdG8gY2FjaGUgdGhl
IGNvbnRlbnRzIGV2ZW4gdGhvdWdoIHRoZSBpdGVtCi0gICAgLy8gbmVlZHMgdG8gYmUgdXBkYXRl
ZCwgZS5nLiB3aGVuIHRoZSBiYWNrZ3JvdW5kLWNvbG9yIGlzIGNoYW5nZWQuCi0gICAgLy8gVE9E
TzogaW52ZXN0aWdhdGUgaWYgUUdyYXBoaWNzSXRlbSBjYWNoaW5nIGNhbiBiZSBpbXByb3ZlZCB0
byBzdXBwb3J0IHRoYXQgb3V0IG9mIHRoZSBib3guCi0gICAgUVBpeG1hcCByZWNhY2hlKGNvbnN0
IFFSZWdpb24mKTsKLQotICAgIC8vIENhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIGlzIHJlYWR5
IGZvciB1cyB0byBzaG93IHRoZSBjaGFuZ2VzIG9uIHNjcmVlbi4KLSAgICAvLyBUaGlzIGlzIGNh
bGxlZCBpbmRpcmVjdGx5IGZyb20gQ2hyb21lQ2xpZW50UXQ6OnNldE5lZWRzT25lU2hvdERyYXdp
bmdTeW5jaHJvbml6YXRpb24KLSAgICAvLyAobWVhbmluZyB0aGUgc3luYyB3b3VsZCBoYXBwZW4g
dG9nZXRoZXIgd2l0aCB0aGUgbmV4dCBkcmF3KSBvcgotICAgIC8vIENocm9tZUNsaWVudFF0Ojpz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jIChtZWFuaW5nIHRoZSBzeW5jIHdpbGwgaGFwcGVu
IEFTQVApCi0gICAgdm9pZCBmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUgPSB0cnVlLCBib29s
IGZvcmNlVHJhbnNmb3JtVXBkYXRlID0gZmFsc2UpOwotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCi0gICAgLy8gcmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBUaWxlZEJhY2tpbmdTdG9yZUNs
aWVudAotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRF
bmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBJbnRS
ZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCk7Ci0gICAgdmlydHVhbCBJbnRSZWN0
IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKTsKLSAgICB2aXJ0dWFsIENvbG9yIHRpbGVk
QmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHN0YXRp
YyBib29sIGFsbG93QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NhY2hlKCkgeyByZXR1cm4gUVBpeG1h
cENhY2hlOjpjYWNoZUxpbWl0KCkgPiBnTWluaW11bVBpeG1hcENhY2hlTGltaXQ7IH0KLQotICAg
IHZvaWQgZHJhd0xheWVyQ29udGVudChRUGFpbnRlciosIGNvbnN0IFFSZWN0Jik7Ci0KLXB1Ymxp
YyBzbG90czoKLSAgICAvLyBXZSBuZWVkIHRvIG5vdGlmeSB0aGUgY2xpZW50IChpZS4gdGhlIGxh
eWVyIGNvbXBvc2l0b3IpIHdoZW4gdGhlIGFuaW1hdGlvbiBhY3R1YWxseSBzdGFydHMuCi0gICAg
dm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKCk7Ci0KLSAgICAvLyBXZSBub3RpZnkgV2ViQ29y
ZSBvZiBhIGxheWVyIGNoYW5nZWQgYXN5bmNocm9ub3VzbHk7IG90aGVyd2lzZSB3ZSBlbmQgdXAg
Y2FsbGluZyBmbHVzaENoYW5nZXMgdG9vIG9mdGVuLgotICAgIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKCk7Ci0KLXNpZ25hbHM6Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBBdm9pZCB1c2luZyBRVGlt
ZXI6OnNpbmdsZVNob3QoKS4KLSAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYygp
OwotCi1wdWJsaWM6Ci0gICAgR3JhcGhpY3NMYXllclF0KiBtX2xheWVyOwotCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9iYXNlVHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jvb3RMYXllcjsKLSAgICBib29sIG1fdHJhbnNmb3JtQW5p
bWF0aW9uUnVubmluZzsKLSAgICBib29sIG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7Ci0gICAg
Ym9vbCBtX2Jsb2NrTm90aWZ5U3luY1JlcXVpcmVkOwotI2lmbmRlZiBRVF9OT19HUkFQSElDU0VG
RkVDVAotICAgIFFXZWFrUG9pbnRlcjxNYXNrRWZmZWN0UXQ+IG1fbWFza0VmZmVjdDsKLSNlbmRp
ZgotCi0gICAgc3RydWN0IENvbnRlbnREYXRhIHsKLSAgICAgICAgUVBpeG1hcCBwaXhtYXA7Ci0g
ICAgICAgIFFSZWdpb24gcmVnaW9uVG9VcGRhdGU7Ci0gICAgICAgIGJvb2wgdXBkYXRlQWxsOwot
Ci0gICAgICAgIFFDb2xvciBjb250ZW50c0JhY2tncm91bmRDb2xvcjsKLSAgICAgICAgUUNvbG9y
IGJhY2tncm91bmRDb2xvcjsKLQotICAgICAgICBRV2Vha1BvaW50ZXI8UUdyYXBoaWNzT2JqZWN0
PiBtZWRpYUxheWVyOwotICAgICAgICBTdGF0aWNDb250ZW50VHlwZSBjb250ZW50VHlwZTsKLQot
ICAgICAgICBmbG9hdCBvcGFjaXR5OwotCi0gICAgICAgIENvbnRlbnREYXRhKCkKLSAgICAgICAg
ICAgIDogdXBkYXRlQWxsKGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50VHlwZShIVE1MQ29u
dGVudFR5cGUpCi0gICAgICAgICAgICAsIG9wYWNpdHkoMS5mKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgIH07Ci0KLSAgICBDb250ZW50RGF0YSBtX3BlbmRpbmdDb250ZW50OwotICAgIENv
bnRlbnREYXRhIG1fY3VycmVudENvbnRlbnQ7Ci0KLSAgICBpbnQgbV9jaGFuZ2VNYXNrOwotCi0j
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgVGlsZWRCYWNraW5nU3RvcmUqIG1fdGls
ZWRCYWNraW5nU3RvcmU7Ci0jZW5kaWYKLQotICAgIFFTaXplRiBtX3NpemU7Ci0gICAgc3RydWN0
IHsKLSAgICAgICAgUVBpeG1hcENhY2hlOjpLZXkga2V5OwotICAgICAgICBRU2l6ZUYgc2l6ZTsK
LSAgICB9IG1fYmFja2luZ1N0b3JlOwotI2lmbmRlZiBRVF9OT19BTklNQVRJT04KLSAgICBRTGlz
dDxRV2Vha1BvaW50ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKLSNlbmRp
ZgotICAgIFFUaW1lciBtX3N1c3BlbmRUaW1lcjsKLQotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAg
ICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tMYXllcjsKLSAgICAgICAgRmxvYXRQb2ludCBwb3M7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKLSAgICAgICAgRmxvYXRTaXplIHNpemU7
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07Ci0gICAgICAgIENvbG9yIGJhY2tncm91
bmRDb2xvcjsKLSAgICAgICAgQ29sb3IgY3VycmVudENvbG9yOwotICAgICAgICBHcmFwaGljc0xh
eWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gY29udGVudHNPcmllbnRhdGlv
bjsKLSAgICAgICAgZmxvYXQgb3BhY2l0eTsKLSAgICAgICAgUVJlY3QgY29udGVudHNSZWN0Owot
Ci0gICAgICAgIGJvb2wgcHJlc2VydmVzM0Q6IDE7Ci0gICAgICAgIGJvb2wgbWFza3NUb0JvdW5k
czogMTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQ6IDE7Ci0gICAgICAgIGJvb2wgY29udGVu
dHNPcGFxdWU6IDE7Ci0gICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OiAxOwotICAgICAg
ICBib29sIGRpc3RyaWJ1dGVPcGFjaXR5OiAxOwotICAgICAgICBib29sIGFsaWduOiAyOwotCi0g
ICAgICAgIFN0YXRlKCkKLSAgICAgICAgICAgIDogbWFza0xheWVyKDApCi0gICAgICAgICAgICAs
IGNvbnRlbnRzT3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRl
c1RvcERvd24pCi0gICAgICAgICAgICAsIG9wYWNpdHkoMS5mKQotICAgICAgICAgICAgLCBwcmVz
ZXJ2ZXMzRChmYWxzZSkKLSAgICAgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKLSAgICAg
ICAgICAgICwgZHJhd3NDb250ZW50KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50c09wYXF1
ZShmYWxzZSkKLSAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KHRydWUpCi0gICAgICAg
ICAgICAsIGRpc3RyaWJ1dGVPcGFjaXR5KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAg
ICB9IG1fc3RhdGU7Ci0KLSNpZm5kZWYgUVRfTk9fQU5JTUFUSU9OCi0gICAgZnJpZW5kIGNsYXNz
IEFuaW1hdGlvblF0QmFzZTsKLSNlbmRpZgotfTsKLQotaW5saW5lIEdyYXBoaWNzTGF5ZXJRdElt
cGwqIHRvR3JhcGhpY3NMYXllclF0SW1wbChRR3JhcGhpY3NJdGVtKiBpdGVtKQotewotICAgIEFT
U0VSVChpdGVtKTsKLSAgICByZXR1cm4gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwq
PihpdGVtLT50b0dyYXBoaWNzT2JqZWN0KCkpOwotfQotCi1pbmxpbmUgR3JhcGhpY3NMYXllclF0
SW1wbCogdG9HcmFwaGljc0xheWVyUXRJbXBsKFFHcmFwaGljc09iamVjdCogaXRlbSkKLXsKLSAg
ICByZXR1cm4gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihpdGVtKTsKLX0KLQot
R3JhcGhpY3NMYXllclF0SW1wbDo6R3JhcGhpY3NMYXllclF0SW1wbChHcmFwaGljc0xheWVyUXQq
IG5ld0xheWVyKQotICAgIDogUUdyYXBoaWNzT2JqZWN0KDApCi0gICAgLCBtX2xheWVyKG5ld0xh
eWVyKQotICAgICwgbV90cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nKGZhbHNlKQotICAgICwgbV9v
cGFjaXR5QW5pbWF0aW9uUnVubmluZyhmYWxzZSkKLSAgICAsIG1fYmxvY2tOb3RpZnlTeW5jUmVx
dWlyZWQoZmFsc2UpCi0gICAgLCBtX2NoYW5nZU1hc2soTm9DaGFuZ2VzKQotI2lmIFVTRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQotICAgICwgbV90aWxlZEJhY2tpbmdTdG9yZSgwKQotI2VuZGlmCi17
Ci0gICAgLy8gV2UgdXNlIGdyYXBoaWNzLXZpZXcgZm9yIGNvbXBvc2l0aW5nLW9ubHksIG5vdCBm
b3IgaW50ZXJhY3Rpdml0eS4KLSAgICBzZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6Tm9CdXR0
b24pOwotCi0gICAgLy8gV2UgbmVlZCB0byBoYXZlIHRoZSBpdGVtIGVuYWJsZWQsIG9yIGVsc2Ug
d2hlZWwgZXZlbnRzIGFyZSBub3QgcGFzc2VkIHRvIHRoZSBwYXJlbnQgY2xhc3MKLSAgICAvLyBp
bXBsZW1lbnRhdGlvbiBvZiB3aGVlbEV2ZW50LCB3aGVyZSB0aGV5IGFyZSBpZ25vcmVkIGFuZCBw
YXNzZWQgdG8gdGhlIGl0ZW0gYmVsb3cuCi0gICAgc2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGNv
bm5lY3QodGhpcywgU0lHTkFMKG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYygpKSwgdGhpcywg
U0xPVChub3RpZnlBbmltYXRpb25TdGFydGVkKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19
Ci0KLUdyYXBoaWNzTGF5ZXJRdEltcGw6On5HcmFwaGljc0xheWVyUXRJbXBsKCkKLXsKLSAgICAv
LyBUaGUgY29tcG9zaXRvciBtYW5hZ2VzIGxpZmVjeWNsZSBvZiBpdGVtLCBzbyB3ZSBkbyBub3Qg
d2FudCB0aGUgZ3JhcGhpY3N2aWV3IHN5c3RlbSB0byBkZWxldGUKLSAgICAvLyBvdXIgaXRlbXMg
YXV0b21hdGljYWxseS4KLSAgICBjb25zdCBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4g
PSBjaGlsZEl0ZW1zKCk7Ci0gICAgUUxpc3Q8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRv
ciBjaXQ7Ci0gICAgZm9yIChjaXQgPSBjaGlsZHJlbi5jb25zdEJlZ2luKCk7IGNpdCAhPSBjaGls
ZHJlbi5jb25zdEVuZCgpOyArK2NpdCkgewotICAgICAgICBpZiAoUUdyYXBoaWNzSXRlbSogaXRl
bSA9ICpjaXQpIHsKLSAgICAgICAgICAgIGlmIChzY2VuZSgpKQotICAgICAgICAgICAgICAgIHNj
ZW5lKCktPnJlbW92ZUl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICBpdGVtLT5zZXRQYXJlbnRJdGVt
KDApOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAg
IGRlbGV0ZSBtX3RpbGVkQmFja2luZ1N0b3JlOwotI2VuZGlmCi0jaWZuZGVmIFFUX05PX0FOSU1B
VElPTgotICAgIC8vIFdlIGRvLCBob3dldmVyLCBvd24gdGhlIGFuaW1hdGlvbnMuCi0gICAgUUxp
c3Q8UVdlYWtQb2ludGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQ7Ci0gICAg
Zm9yIChpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBtX2FuaW1hdGlvbnMuZW5kKCk7
ICsraXQpCi0gICAgICAgIGlmIChRQWJzdHJhY3RBbmltYXRpb24qIGFuaW0gPSBpdC0+ZGF0YSgp
KQotICAgICAgICAgICAgZGVsZXRlIGFuaW07Ci0jZW5kaWYKLX0KLQotY29uc3QgR3JhcGhpY3NM
YXllclF0SW1wbCogR3JhcGhpY3NMYXllclF0SW1wbDo6cm9vdExheWVyKCkgY29uc3QKLXsKLSAg
ICBpZiAoY29uc3QgR3JhcGhpY3NMYXllclF0SW1wbCogcGFyZW50ID0gdG9HcmFwaGljc0xheWVy
UXRJbXBsKHBhcmVudE9iamVjdCgpKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+cm9vdExheWVy
KCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpk
cmF3TGF5ZXJDb250ZW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgY2xpcFJlY3Qp
Ci17Ci0gICAgcGFpbnRlci0+c2V0Q2xpcFJlY3QoY2xpcFJlY3QsIFF0OjpJbnRlcnNlY3RDbGlw
KTsKLSAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2VPdmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MocGFpbnRlcik7Ci0gICAg
bV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ2MsIGNsaXBSZWN0KTsKLX0KLQot
UVBpeG1hcCBHcmFwaGljc0xheWVyUXRJbXBsOjpyZWNhY2hlKGNvbnN0IFFSZWdpb24mIHJlZ2lv
blRvVXBkYXRlKQotewotICAgIGlmICghbV9sYXllci0+ZHJhd3NDb250ZW50KCkgfHwgbV9zaXpl
LmlzRW1wdHkoKSB8fCAhbV9zaXplLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIFFQaXhtYXAo
KTsKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIGNvbnN0IGJvb2wgcmVxdWly
ZXNUaWxpbmcgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpICYmIChtX3NpemUud2lkdGgoKSA+IEdSQVBISUNT
X0xBWUVSX1RJTElOR19USFJFU0hPTEQgfHwgbV9zaXplLmhlaWdodCgpID4gR1JBUEhJQ1NfTEFZ
RVJfVElMSU5HX1RIUkVTSE9MRCk7Ci0gICAgaWYgKHJlcXVpcmVzVGlsaW5nICYmICFtX3RpbGVk
QmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIG1fdGlsZWRCYWNraW5nU3RvcmUgPSBuZXcgVGlsZWRC
YWNraW5nU3RvcmUodGhpcyk7Ci0gICAgICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPnNldFRpbGVD
cmVhdGlvbkRlbGF5KDApOwotICAgICAgICBzZXRGbGFnKEl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9w
dGlvbiwgdHJ1ZSk7Ci0gICAgfSBlbHNlIGlmICghcmVxdWlyZXNUaWxpbmcgJiYgbV90aWxlZEJh
Y2tpbmdTdG9yZSkgewotICAgICAgICBkZWxldGUgbV90aWxlZEJhY2tpbmdTdG9yZTsKLSAgICAg
ICAgbV90aWxlZEJhY2tpbmdTdG9yZSA9IDA7Ci0gICAgICAgIHNldEZsYWcoSXRlbVVzZXNFeHRl
bmRlZFN0eWxlT3B0aW9uLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKG1fdGlsZWRCYWNraW5n
U3RvcmUpIHsKLSAgICAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+YWRqdXN0VmlzaWJsZVJlY3Qo
KTsKLSAgICAgICAgY29uc3QgUVZlY3RvcjxRUmVjdD4gcmVjdHMgPSByZWdpb25Ub1VwZGF0ZS5y
ZWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKHJlY3RzW2ldKTsKLSAg
ICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFFQaXhtYXAgcGl4
bWFwOwotICAgIFFSZWdpb24gcmVnaW9uID0gcmVnaW9uVG9VcGRhdGU7Ci0gICAgaWYgKFFQaXht
YXBDYWNoZTo6ZmluZChtX2JhY2tpbmdTdG9yZS5rZXksICZwaXhtYXApKSB7Ci0gICAgICAgIGlm
IChyZWdpb24uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHBpeG1hcDsKLSAgICAgICAg
UVBpeG1hcENhY2hlOjpyZW1vdmUobV9iYWNraW5nU3RvcmUua2V5KTsgLy8gUmVtb3ZlIHRoZSBy
ZWZlcmVuY2UgdG8gdGhlIHBpeG1hcCBpbiB0aGUgY2FjaGUgdG8gYXZvaWQgYSBkZXRhY2guCi0g
ICAgfQotCi0gICAgewotICAgICAgICBib29sIGVyYXNlZCA9IGZhbHNlOwotCi0gICAgICAgIC8v
IElmIHRoZSBwaXhtYXAgaXMgbm90IGluIHRoZSBjYWNoZSBvciB0aGUgdmlldyBoYXMgZ3Jvd24g
c2luY2UgbGFzdCBjYWNoZWQuCi0gICAgICAgIGlmIChwaXhtYXAuaXNOdWxsKCkgfHwgbV9zaXpl
ICE9IG1fYmFja2luZ1N0b3JlLnNpemUpIHsKLSNpZiBRVF9ERUJVR19SRUNBQ0hFCi0gICAgICAg
ICAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICJD
YWNoZU1pc3MiIDw8IHRoaXMgPDwgbV9zaXplOwotI2VuZGlmCi0gICAgICAgICAgICBib29sIGZp
bGwgPSB0cnVlOwotICAgICAgICAgICAgUVJlZ2lvbiBuZXdSZWdpb247Ci0gICAgICAgICAgICBR
UGl4bWFwIG9sZFBpeG1hcCA9IHBpeG1hcDsKLQotICAgICAgICAgICAgLy8gSWYgdGhlIHBpeG1h
cCBpcyB0d28gc21hbGwgdG8gaG9sZCB0aGUgdmlldyBjb250ZW50cyB3ZSBlbmxhcmdlLCBvdGhl
cndpc2UganVzdCB1c2UgdGhlIG9sZCAobGFyZ2UpIHBpeG1hcC4KLSAgICAgICAgICAgIGlmIChw
aXhtYXAud2lkdGgoKSA8IG1fc2l6ZS53aWR0aCgpIHx8IHBpeG1hcC5oZWlnaHQoKSA8IG1fc2l6
ZS5oZWlnaHQoKSkgewotI2lmIFFUX0RFQlVHX1JFQ0FDSEUKLSAgICAgICAgICAgICAgICBxRGVi
dWcoKSA8PCAiQ2FjaGVHcm93IiA8PCB0aGlzIDw8IG1fc2l6ZTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgIHBpeG1hcCA9IFFQaXhtYXAobV9zaXplLnRvU2l6ZSgpKTsKLSAgICAgICAgICAgICAg
ICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICAgICAgICAgIG5ld1JlZ2lv
biA9IFFSZWdpb24oMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSNpZiAxCi0gICAgICAgICAgICAvLyBCbGl0IHRoZSBjb250ZW50cyBvZiBv
bGRQaXhtYXAgYmFjayBpbnRvIHRoZSBjYWNoZWQgcGl4bWFwIGFzIHdlIGFyZSBqdXN0IGFkZGlu
ZyBuZXcgcGl4ZWxzLgotICAgICAgICAgICAgaWYgKCFvbGRQaXhtYXAuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBRUmVnaW9uIGNsZWFuUmVnaW9uID0gKFFSZWdpb24oMCwgMCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYgUVJlZ2lvbigwLCAwLCBtX2JhY2tpbmdTdG9yZS5zaXpl
LndpZHRoKCksIG1fYmFja2luZ1N0b3JlLnNpemUuaGVpZ2h0KCkpKSAtIHJlZ2lvblRvVXBkYXRl
OwotICAgICAgICAgICAgICAgIGlmICghY2xlYW5SZWdpb24uaXNFbXB0eSgpKSB7Ci0jaWYgUVRf
REVCVUdfUkVDQUNIRQotICAgICAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAiQ2FjaGVCbGl0
IiA8PCB0aGlzIDw8IGNsZWFuUmVnaW9uOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFSZWN0IGNsZWFuQm91bmRzKGNsZWFuUmVnaW9uLmJvdW5kaW5nUmVjdCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcGl4bWFwKTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9k
ZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICBwYWludGVyLmRyYXdQaXhtYXAoY2xlYW5C
b3VuZHMudG9wTGVmdCgpLCBvbGRQaXhtYXAsIGNsZWFuQm91bmRzKTsKLSAgICAgICAgICAgICAg
ICAgICAgbmV3UmVnaW9uIC09IGNsZWFuUmVnaW9uOwotICAgICAgICAgICAgICAgICAgICBmaWxs
ID0gZmFsc2U7IC8vIFdlIGNhbm5vdCBqdXN0IGZpbGwgdGhlIHBpeG1hcC4KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgb2xkUGl4bWFwID0gUVBpeG1hcCgpOwotICAgICAgICAg
ICAgfQotI2VuZGlmCi0gICAgICAgICAgICByZWdpb24gKz0gbmV3UmVnaW9uOwotICAgICAgICAg
ICAgaWYgKGZpbGwgJiYgIXJlZ2lvbi5pc0VtcHR5KCkpIHsgLy8gQ2xlYXIgdGhlIGVudGlyZSBw
aXhtYXAgd2l0aCB0aGUgYmFja2dyb3VuZC4KLSNpZiBRVF9ERUJVR19SRUNBQ0hFCi0gICAgICAg
ICAgICAgICAgcURlYnVnKCkgPDwgIkNhY2hlRXJhc2UiIDw8IHRoaXMgPDwgbV9zaXplIDw8IGJh
Y2tncm91bmQ7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlcmFzZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcmVnaW9uICY9IFFSZWdpb24oMCwgMCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8g
ZHJhdyBpdHMgdGltZSB0byBlcmFzZSBpdCBhbmQgcmVuZGVyIHRoZSBjb250ZW50cy4KLSAgICAg
ICAgaWYgKCFyZWdpb24uaXNFbXB0eSgpKSB7Ci0jaWYgUVRfREVCVUdfQ0FDSEVEVU1QCi0gICAg
ICAgICAgICBzdGF0aWMgaW50IHJlY2FjaGVDb3VudCA9IDA7Ci0gICAgICAgICAgICArK3JlY2Fj
aGVDb3VudDsKLSAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICIqKioqIENBQ0hFRFVNUCIgPDwgcmVj
YWNoZUNvdW50IDw8IHRoaXMgPDwgbV9sYXllciA8PCByZWdpb24gPDwgbV9zaXplOwotICAgICAg
ICAgICAgcGl4bWFwLnNhdmUoUVN0cmluZygpLnNwcmludGYoIi90bXAvJTA1ZF9BLnBuZyIsIHJl
Y2FjaGVDb3VudCksICJQTkciKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBRUGFpbnRlciBwYWlu
dGVyKCZwaXhtYXApOwotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKCZwYWludGVyKTsK
LQotICAgICAgICAgICAgcGFpbnRlci5zZXRDbGlwUmVnaW9uKHJlZ2lvbik7Ci0KLSAgICAgICAg
ICAgIGlmICghZXJhc2VkKSB7IC8vIEVyYXNlIHRoZSBhcmVhIGluIGNhY2hlIHRoYXQgd2UncmUg
ZHJhd2luZyBpbnRvLgotICAgICAgICAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwotICAgICAgICAgICAgICAgIHBhaW50
ZXIuZmlsbFJlY3QocmVnaW9uLmJvdW5kaW5nUmVjdCgpLCBRdDo6dHJhbnNwYXJlbnQpOwotCi0j
aWYgUVRfREVCVUdfQ0FDSEVEVU1QCi0gICAgICAgICAgICAgICAgcURlYnVnKCkgPDwgIioqKiog
Q0FDSEVEVU1QIiA8PCByZWNhY2hlQ291bnQgPDwgdGhpcyA8PCBtX2xheWVyIDw8IHJlZ2lvbiA8
PCBtX3NpemU7Ci0gICAgICAgICAgICAgICAgcGl4bWFwLnNhdmUoUVN0cmluZygpLnNwcmludGYo
Ii90bXAvJTA1ZF9CLnBuZyIsIHJlY2FjaGVDb3VudCksICJQTkciKTsKLSNlbmRpZgotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGFjdHVhbCBjb250ZW50cyBpbnRv
IHRoZSBjYWNoZS4KLSAgICAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7Ci0gICAgICAgICAgICBtX2xheWVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhnYywgcmVnaW9uLmJvdW5kaW5nUmVjdCgpKTsKLSAg
ICAgICAgICAgIHBhaW50ZXIuZW5kKCk7Ci0KLSNpZiBRVF9ERUJVR19DQUNIRURVTVAKLSAgICAg
ICAgICAgIHFEZWJ1ZygpIDw8ICIqKioqIENBQ0hFRFVNUCIgPDwgcmVjYWNoZUNvdW50IDw8IHRo
aXMgPDwgbV9sYXllciA8PCByZWdpb24gPDwgbV9zaXplOwotICAgICAgICAgICAgcGl4bWFwLnNh
dmUoUVN0cmluZygpLnNwcmludGYoIi90bXAvJTA1ZF9DLnBuZyIsIHJlY2FjaGVDb3VudCksICJQ
TkciKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlLnNpemUgPSBt
X3NpemU7IC8vIFN0b3JlIHRoZSB1c2VkIHNpemUgb2YgdGhlIHBpeG1hcC4KLSAgICB9Ci0KLSAg
ICAvLyBGaW5hbGx5IGluc2VydCBpbnRvIHRoZSBjYWNoZSBhbmQgYWxsb3cgYSByZWZlcmVuY2Ug
dGhlcmUuCi0gICAgbV9iYWNraW5nU3RvcmUua2V5ID0gUVBpeG1hcENhY2hlOjppbnNlcnQocGl4
bWFwKTsKLSAgICByZXR1cm4gcGl4bWFwOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OnVwZGF0ZVRyYW5zZm9ybSgpCi17Ci0gICAgaWYgKCFtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5p
bmcpCi0gICAgICAgIG1fYmFzZVRyYW5zZm9ybSA9IG1fbGF5ZXItPnRyYW5zZm9ybSgpOwotCi0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUcmFuc2Zvcm07Ci0KLSAgICBHcmFwaGljc0xh
eWVyUXRJbXBsKiBwYXJlbnQgPSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwocGFyZW50T2JqZWN0KCkp
OwotCi0gICAgLy8gV2ViQ29yZSBoYXMgcmVsYXRpdmUtdG8tc2l6ZSBvcmlnaW5Qb2ludCwgd2hl
cmUgYXMgdGhlIFFHcmFwaGljc1ZpZXcgaGFzIGEgcGl4ZWwgb3JpZ2luUG9pbnQuCi0gICAgLy8g
VGh1cywgd2UgbmVlZCB0byBjb252ZXJ0IGhlcmUgYXMgd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBv
dXRzZWx2ZXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlCi0gICAgLy8gdHJhbnNmb3JtT3JpZ2lu
IG9mIHRoZSBncmFwaGljc3ZpZXcgaXMgaW1jb21wYXRpYmxlLgotICAgIGNvbnN0IHFyZWFsIG9y
aWdpblggPSBtX3N0YXRlLmFuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpOwotICAgIGNv
bnN0IHFyZWFsIG9yaWdpblkgPSBtX3N0YXRlLmFuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWln
aHQoKTsKLQotICAgIC8vIFdlIGlnbm9yZSBRR3JhcGhpY3NJdGVtOjpwb3MgY29tcGxldGVseSwg
YW5kIHVzZSB0cmFuc2Zvcm1zIG9ubHksIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlCi0gICAgLy8g
aGF2ZSB0byBtYWludGFpbiB0aGF0IG91cnNlbHZlcyBmb3IgM0QuCi0gICAgbG9jYWxUcmFuc2Zv
cm0KLSAgICAgICAgICAgIC50cmFuc2xhdGUzZChvcmlnaW5YICsgbV9zdGF0ZS5wb3MueCgpLCBv
cmlnaW5ZICsgbV9zdGF0ZS5wb3MueSgpLCBtX3N0YXRlLmFuY2hvclBvaW50LnooKSkKLSAgICAg
ICAgICAgIC5tdWx0aXBseShtX2Jhc2VUcmFuc2Zvcm0pCi0gICAgICAgICAgICAudHJhbnNsYXRl
M2QoLW9yaWdpblgsIC1vcmlnaW5ZLCAtbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpOwotCi0gICAg
Ly8gVGhpcyBpcyB0aGUgYWN0dWFsIDNEIHRyYW5zZm9ybSBvZiB0aGlzIGl0ZW0sIHdpdGggdGhl
IGFuY2VzdG9ycycgdHJhbnNmb3JtIGJha2VkIGluLgotICAgIG1fdHJhbnNmb3JtUmVsYXRpdmVU
b1Jvb3RMYXllciA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KHBhcmVudCA/IHBhcmVudC0+bV90cmFu
c2Zvcm1SZWxhdGl2ZVRvUm9vdExheWVyIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5KGxvY2FsVHJhbnNm
b3JtKTsKLQotICAgIC8vIE5vdyB3ZSBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkZXRlcm1p
bmUgaWYgdGhlIGxheWVyIGlzIGZhY2luZyBiYWNrd2FyZHMuCi0gICAgaWYgKCFtX3N0YXRlLmJh
Y2tmYWNlVmlzaWJpbGl0eSAmJiBtX3RyYW5zZm9ybVJlbGF0aXZlVG9Sb290TGF5ZXIuaW52ZXJz
ZSgpLm0zMygpIDwgMCkgewotICAgICAgICBzZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgLy8g
Tm8gcG9pbnQgaW4gbWFraW5nIGV4dHJhIGNhbGN1bGF0aW9ucyBmb3IgaW52aXNpYmxlIGVsZW1l
bnRzLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhlIGl0ZW0gaXMgZnJvbnQt
ZmFjaW5nIG9yIGJhY2tmYWNlLXZpc2liaWxpdHkgaXMgb24uCi0gICAgc2V0VmlzaWJsZSh0cnVl
KTsKLQotICAgIC8vIEZsYXR0ZW4gdG8gMkQtc3BhY2Ugb2YgdGhpcyBpdGVtIGlmIGl0IGRvZXNu
J3QgcHJlc2VydmUgM0QuCi0gICAgaWYgKCFtX3N0YXRlLnByZXNlcnZlczNEKSB7Ci0gICAgICAg
IG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jvb3RMYXllci5zZXRNMTMoMCk7Ci0gICAgICAgIG1fdHJh
bnNmb3JtUmVsYXRpdmVUb1Jvb3RMYXllci5zZXRNMjMoMCk7Ci0gICAgICAgIG1fdHJhbnNmb3Jt
UmVsYXRpdmVUb1Jvb3RMYXllci5zZXRNMzEoMCk7Ci0gICAgICAgIG1fdHJhbnNmb3JtUmVsYXRp
dmVUb1Jvb3RMYXllci5zZXRNMzIoMCk7Ci0gICAgICAgIG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jv
b3RMYXllci5zZXRNMzMoMSk7Ci0gICAgICAgIG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jvb3RMYXll
ci5zZXRNMzQoMCk7Ci0gICAgICAgIG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jvb3RMYXllci5zZXRN
NDMoMCk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgcGVyc3BlY3RpdmUgZm9yIHRoZSB1c2Ugb2Yg
dGhpcyBpdGVtJ3MgY2hpbGRyZW4uIFBlcnNwZWN0aXZlIGlzIGFsd2F5cyBhcHBsaWVkIGZyb20g
dGhlIGl0ZW0ncwotICAgIC8vIGNlbnRlci4KLSAgICBpZiAoIW1fc3RhdGUuY2hpbGRyZW5UcmFu
c2Zvcm0uaXNJZGVudGl0eSgpKSB7Ci0gICAgICAgIG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jvb3RM
YXllcgotICAgICAgICAgICAgLnRyYW5zbGF0ZShtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5o
ZWlnaHQoKSAvMikKLSAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLmNoaWxkcmVuVHJhbnNm
b3JtKQotICAgICAgICAgICAgLnRyYW5zbGF0ZSgtbV9zaXplLndpZHRoKCkgLyAyLCAtbV9zaXpl
LmhlaWdodCgpIC8yKTsKLSAgICB9Ci0KLSAgICBib29sIGludmVyc2VPayA9IHRydWU7Ci0gICAg
Ly8gVXNlIFFUcmFuc2Zvcm06OmludmVyc2UgdG8gZXh0cmFwb2xhdGUgdGhlIHJlbGF0aXZlIHRy
YW5zZm9ybSBvZiB0aGlzIGl0ZW0sIGJhc2VkIG9uIHRoZSBwYXJlbnQncwotICAgIC8vIHRyYW5z
Zm9ybSByZWxhdGl2ZSB0byB0aGUgcm9vdCBsYXllciBhbmQgdGhlIGRlc2lyZWQgdHJhbnNmb3Jt
IGZvciB0aGlzIGl0ZW0gcmVsYXRpdmUgdG8gdGhlIHJvb3QgbGF5ZXIuCi0gICAgY29uc3QgUVRy
YW5zZm9ybSBwYXJlbnRUcmFuc2Zvcm0gPSBwYXJlbnQgPyBwYXJlbnQtPml0ZW1UcmFuc2Zvcm0o
cm9vdExheWVyKCkpIDogUVRyYW5zZm9ybSgpOwotICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNm
b3JtMkQgPSBRVHJhbnNmb3JtKG1fdHJhbnNmb3JtUmVsYXRpdmVUb1Jvb3RMYXllcikgKiBwYXJl
bnRUcmFuc2Zvcm0uaW52ZXJ0ZWQoJmludmVyc2VPayk7Ci0KLSAgICAvLyBJbiByYXJlIGNhc2Vz
IHRoZSB0cmFuc2Zvcm1hdGlvbiBjYW5ub3QgYmUgaW52ZXJzZWQgLSBpbiB0aGF0IGNhc2Ugd2Ug
ZG9uJ3QgYXBwbHkgdGhlIHRyYW5zZm9ybWF0aW9uIGF0Ci0gICAgLy8gYWxsLCBvdGhlcndpc2Ug
d2UnZCBmbGlja2VyLiBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW1lbmRlZCB3aGVuIFF0IG1vdmVz
IHRvIGEgcmVhbCAzRCBzY2VuZS1ncmFwaC4KLSAgICBpZiAoIWludmVyc2VPaykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2V0VHJhbnNmb3JtKHRyYW5zZm9ybTJEKTsKLQotICAgIGNvbnN0IFFM
aXN0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlbiA9IGNoaWxkSXRlbXMoKTsKLSAgICBRTGlzdDxR
R3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBjaGlsZHJl
bi5jb25zdEJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmNvbnN0RW5kKCk7ICsraXQpCi0gICAgICAg
IGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBsYXllcj0gdG9HcmFwaGljc0xheWVyUXRJbXBsKCpp
dCkpCi0gICAgICAgICAgICBsYXllci0+dXBkYXRlVHJhbnNmb3JtKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgYmFzZVRyYW5zZm9ybSkKLXsKLSAgICBtX2Jhc2VUcmFuc2Zvcm0gPSBiYXNlVHJhbnNm
b3JtOwotICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwotfQotCi1RUGFpbnRlclBhdGggR3JhcGhpY3NM
YXllclF0SW1wbDo6b3BhcXVlQXJlYSgpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXJQYXRoIHBhaW50
ZXJQYXRoOwotCi0gICAgLy8gV2UgdHJ5IG91dCBiZXN0IHRvIHJldHVybiB0aGUgb3BhcXVlIGFy
ZWEsIG1heWJlIGl0IHdpbGwgaGVscCBncmFwaGljcy12aWV3IHJlbmRlciBsZXNzIGl0ZW1zLgot
ICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgbV9j
dXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSA9PSAweGZmKQotICAgICAgICBw
YWludGVyUGF0aC5hZGRSZWN0KGJvdW5kaW5nUmVjdCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUuY29udGVudHNPcGFxdWUKLSAgICAgICAgICAgIHx8IChtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IENvbG9yQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5j
b250ZW50c0JhY2tncm91bmRDb2xvci5hbHBoYSgpID09IDB4ZmYpCi0gICAgICAgICAgICB8fCAo
bV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKQotICAgICAg
ICAgICAgfHwgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gUGl4bWFwQ29udGVudFR5
cGUgJiYgIW1fY3VycmVudENvbnRlbnQucGl4bWFwLmhhc0FscGhhKCkpKSB7Ci0gICAgICAgICAg
ICBwYWludGVyUGF0aC5hZGRSZWN0KG1fc3RhdGUuY29udGVudHNSZWN0KTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gcGFpbnRlclBhdGg7Ci19Ci0KLVFSZWN0RiBHcmFwaGljc0xheWVy
UXRJbXBsOjpib3VuZGluZ1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBRUmVjdEYoUVBvaW50
RigwLCAwKSwgUVNpemVGKG1fc2l6ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0q
IG9wdGlvbiwgUVdpZGdldCogd2lkZ2V0KQotewotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQotICAgIC8vIEZJWE1FOiBUaGVyZSdzIGN1cnJlbnRseSBubyBRdCBBUEkgdG8ga25vdyBpZiBh
IG5ldyByZWdpb24gb2YgYW4gaXRlbSBpcyBleHBvc2VkIG91dHNpZGUgb2YgdGhlIHBhaW50IGV2
ZW50LgotICAgIC8vIFN1Z2dlc3RlZCBmb3IgUXQ6IGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lh
LmNvbS9icm93c2UvUVRCVUctMTQ4NzcuCi0gICAgaWYgKG1fdGlsZWRCYWNraW5nU3RvcmUpCi0g
ICAgICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmFkanVzdFZpc2libGVSZWN0KCk7Ci0jZW5kaWYK
LQotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KG9wdGlvbi0+ZXhwb3NlZFJlY3QsIFFDb2xvcihtX2N1
cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpOwotCi0gICAgc3dpdGNoIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlKSB7Ci0gICAgY2FzZSBIVE1MQ29udGVudFR5cGU6Ci0gICAgICAg
IGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCkgewotICAgICAgICAgICAgaWYgKCFhbGxvd0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDYWNoZSgpKQotICAgICAgICAgICAgICAgIGRyYXdMYXllckNvbnRl
bnQocGFpbnRlciwgb3B0aW9uLT5leHBvc2VkUmVjdC50b1JlY3QoKSk7Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICBRUGl4bWFwIGJhY2tpbmdTdG9yZTsKLSAgICAgICAgICAg
ICAgICAvLyBXZSBtaWdodCBuZWVkIHRvIHJlY2FjaGUsIGluIGNhc2Ugd2UgdHJ5IHRvIHBhaW50
IGFuZCB0aGUgY2FjaGUgd2FzIHB1cmdlZCAoZS5nLiBpZiBpdCB3YXMgZnVsbCkuCi0gICAgICAg
ICAgICAgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQobV9iYWNraW5nU3RvcmUua2V5LCAmYmFj
a2luZ1N0b3JlKSB8fCBiYWNraW5nU3RvcmUuc2l6ZSgpICE9IG1fc2l6ZS50b1NpemUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlID0gcmVjYWNoZShRUmVnaW9uKG1fc3RhdGUu
Y29udGVudHNSZWN0KSk7Ci0gICAgICAgICAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCgwLCAw
LCBiYWNraW5nU3RvcmUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUGl4bWFwQ29udGVudFR5cGU6Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXht
YXAobV9zdGF0ZS5jb250ZW50c1JlY3QsIG1fY3VycmVudENvbnRlbnQucGl4bWFwKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOgotICAgICAgICBwYWludGVyLT5m
aWxsUmVjdChtX3N0YXRlLmNvbnRlbnRzUmVjdCwgbV9jdXJyZW50Q29udGVudC5jb250ZW50c0Jh
Y2tncm91bmRDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFDb250ZW50VHlw
ZToKLSAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBwYWludCBhbnl0aGluZzogd2UgaGF2ZSBh
IFFHcmFwaGljc0l0ZW0gZnJvbSB0aGUgbWVkaWEgZWxlbWVudAotICAgICAgICBicmVhazsKLSAg
ICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6bm90aWZ5U3luY1JlcXVpcmVkKCkK
LXsKLSAgICBtX2Jsb2NrTm90aWZ5U3luY1JlcXVpcmVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9s
YXllci0+Y2xpZW50KCkpCi0gICAgICAgIG1fbGF5ZXItPmNsaWVudCgpLT5ub3RpZnlTeW5jUmVx
dWlyZWQobV9sYXllcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6bm90aWZ5Q2hh
bmdlKENoYW5nZU1hc2sgY2hhbmdlTWFzaykKLXsKLSAgICBtX2NoYW5nZU1hc2sgfD0gY2hhbmdl
TWFzazsKLQotICAgIGlmIChtX2Jsb2NrTm90aWZ5U3luY1JlcXVpcmVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzdGF0aWMgUU1ldGFNZXRob2Qgc3luY01ldGhvZCA9IHN0YXRpY01ldGFPYmpl
Y3QubWV0aG9kKHN0YXRpY01ldGFPYmplY3QuaW5kZXhPZk1ldGhvZCgibm90aWZ5U3luY1JlcXVp
cmVkKCkiKSk7Ci0gICAgc3luY01ldGhvZC5pbnZva2UodGhpcywgUXQ6OlF1ZXVlZENvbm5lY3Rp
b24pOwotCi0gICAgbV9ibG9ja05vdGlmeVN5bmNSZXF1aXJlZCA9IHRydWU7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZv
cmNlVXBkYXRlVHJhbnNmb3JtKQotewotICAgIC8vIFRoaXMgaXMgdGhlIGJ1bGsgb2YgdGhlIHdv
cmsuIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGUgY29tcG9zaXRvciBpcyB0cnlpbmcgdG8gYWNoaWV2
ZSwgd2hhdAotICAgIC8vIGdyYXBoaWNzdmlldyBjYW4gZG8sIGFuZCB0cnlpbmcgdG8gZmluZCBh
IHNhbmUgY29tbW9uLWdyb3VuZC4KLSAgICBpZiAoIW1fbGF5ZXIgfHwgbV9jaGFuZ2VNYXNrID09
IE5vQ2hhbmdlcykKLSAgICAgICAgZ290byBhZnRlckxheWVyQ2hhbmdlczsKLQotICAgIGlmICht
X2NoYW5nZU1hc2sgJiBQYXJlbnRDaGFuZ2UpIHsKLSAgICAgICAgLy8gVGhlIFdlYkNvcmUgY29t
cG9zaXRvciBtYW5hZ2VzIGl0ZW0gb3duZXJzaGlwLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBncmFw
aGljc3ZpZXcgZG9lc24ndAotICAgICAgICAvLyB0cnkgdG8gc25hdGNoIHRoYXQgb3duZXJzaGlw
LgotICAgICAgICBpZiAoIW1fbGF5ZXItPnBhcmVudCgpICYmICFwYXJlbnRJdGVtKCkpCi0gICAg
ICAgICAgICBzZXRQYXJlbnRJdGVtKDApOwotICAgICAgICBlbHNlIGlmIChtX2xheWVyICYmIG1f
bGF5ZXItPnBhcmVudCgpICYmIG1fbGF5ZXItPnBhcmVudCgpLT5wbGF0Zm9ybUxheWVyKCkgIT0g
cGFyZW50SXRlbSgpKQotICAgICAgICAgICAgc2V0UGFyZW50SXRlbShtX2xheWVyLT5wYXJlbnQo
KS0+cGxhdGZvcm1MYXllcigpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jaGFuZ2VNYXNrICYgQ2hp
bGRyZW5DaGFuZ2UpIHsKLSAgICAgICAgLy8gV2UgYmFzaWNhbGx5IGRvIGFuIFhPUiBvcGVyYXRp
b24gb24gdGhlIGxpc3Qgb2YgY3VycmVudCBjaGlsZHJlbiBhbmQgdGhlIGxpc3Qgb2Ygd2FudGVk
Ci0gICAgICAgIC8vIGNoaWxkcmVuLCBhbmQgcmVtb3ZlL2FkZC4KLSAgICAgICAgUVNldDxRR3Jh
cGhpY3NJdGVtKj4gbmV3Q2hpbGRyZW47Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xh
eWVyKj4gbmV3Q2hpbGRyZW5WZWN0b3IgPSAobV9sYXllci0+Y2hpbGRyZW4oKSk7Ci0gICAgICAg
IG5ld0NoaWxkcmVuLnJlc2VydmUobmV3Q2hpbGRyZW5WZWN0b3Iuc2l6ZSgpKTsKLQotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0NoaWxkcmVuVmVjdG9yLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbmV3Q2hpbGRyZW4uaW5zZXJ0KG5ld0NoaWxkcmVuVmVjdG9yW2ldLT5wbGF0
Zm9ybUxheWVyKCkpOwotCi0gICAgICAgIGNvbnN0IFFTZXQ8UUdyYXBoaWNzSXRlbSo+IGN1cnJl
bnRDaGlsZHJlbiA9IGNoaWxkSXRlbXMoKS50b1NldCgpOwotICAgICAgICBjb25zdCBRU2V0PFFH
cmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvQWRkID0gbmV3Q2hpbGRyZW4gLSBjdXJyZW50Q2hpbGRy
ZW47Ci0gICAgICAgIGNvbnN0IFFTZXQ8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuVG9SZW1vdmUg
PSBjdXJyZW50Q2hpbGRyZW4gLSBuZXdDaGlsZHJlbjsKLQotICAgICAgICBRU2V0PFFHcmFwaGlj
c0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0gICAgICAgIGZvciAoaXQgPSBjaGlsZHJlblRv
QWRkLmNvbnN0QmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub0FkZC5jb25zdEVuZCgpOyArK2l0KSB7
Ci0gICAgICAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIHcgPSAqaXQpCi0gICAgICAgICAgICAg
ICAgdy0+c2V0UGFyZW50SXRlbSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFFTZXQ8UUdy
YXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciByaXQ7Ci0gICAgICAgIGZvciAocml0ID0gY2hp
bGRyZW5Ub1JlbW92ZS5jb25zdEJlZ2luKCk7IHJpdCAhPSBjaGlsZHJlblRvUmVtb3ZlLmNvbnN0
RW5kKCk7ICsrcml0KSB7Ci0gICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHcg
PSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwoKnJpdCkpCi0gICAgICAgICAgICAgICAgdy0+c2V0UGFy
ZW50SXRlbSgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoaWxkcmVuIGFyZSBvcmRlcmVk
IGJ5IHotdmFsdWUsIGxldCBncmFwaGljc3ZpZXcga25vdy4KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuZXdDaGlsZHJlblZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKG5ld0NoaWxkcmVuVmVjdG9yW2ldLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgICAgICAg
ICAgbmV3Q2hpbGRyZW5WZWN0b3JbaV0tPnBsYXRmb3JtTGF5ZXIoKS0+c2V0WlZhbHVlKGkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fY2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5n
ZSkgewotICAgICAgICAvLyBXZSBjYW4ndCBwYWludCBoZXJlLCBiZWNhdXNlIHdlIGRvbid0IGtu
b3cgaWYgdGhlIG1hc2sgbGF5ZXIgaXRzZWxmIGlzIHJlYWR5Li4uIHdlJ2xsIGhhdmUKLSAgICAg
ICAgLy8gdG8gd2FpdCB0aWxsIHRoaXMgbGF5ZXIgdHJpZXMgdG8gcGFpbnQuCi0gICAgICAgIHNl
dEZsYWcoSXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlLCBtX2xheWVyLT5tYXNrTGF5ZXIoKSB8fCBt
X2xheWVyLT5tYXNrc1RvQm91bmRzKCkpOwotI2lmbmRlZiBRVF9OT19HUkFQSElDU0VGRkVDVAot
ICAgICAgICBzZXRHcmFwaGljc0VmZmVjdCgwKTsKLSAgICAgICAgaWYgKG1fbGF5ZXItPm1hc2tM
YXllcigpKSB7Ci0gICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbWFzayA9IHRv
R3JhcGhpY3NMYXllclF0SW1wbChtX2xheWVyLT5tYXNrTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigp
KSkgewotICAgICAgICAgICAgICAgIG1hc2stPm1fbWFza0VmZmVjdCA9IG5ldyBNYXNrRWZmZWN0
UXQodGhpcywgbWFzayk7Ci0gICAgICAgICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QobWFzay0+
bV9tYXNrRWZmZWN0LmRhdGEoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgot
ICAgIH0KLQotICAgIGlmIChtX2NoYW5nZU1hc2sgJiBTaXplQ2hhbmdlKSB7Ci0gICAgICAgIGlm
IChtX2xheWVyLT5zaXplKCkgIT0gbV9zdGF0ZS5zaXplKSB7Ci0gICAgICAgICAgICBwcmVwYXJl
R2VvbWV0cnlDaGFuZ2UoKTsKLSAgICAgICAgICAgIG1fc2l6ZSA9IFFTaXplRihtX2xheWVyLT5z
aXplKCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjaywgZHVlIHRvIGEgcHJvYmFibGUgUUdy
YXBoaWNzU2NlbmUgYnVnIHdoZW4gcmFwaWRseSBtb2RpZnlpbmcgdGhlIHBlcnNwZWN0aXZlCi0g
ICAgLy8gYnV0IHdpdGhvdXQgdGhpcyBsaW5lIHdlIGdldCBncmFwaGljIGFydGlmYWN0cy4KLSAg
ICBpZiAoKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlKSAmJiBtX3N0YXRl
LmNoaWxkcmVuVHJhbnNmb3JtICE9IG1fbGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCkpCi0gICAg
ICAgIGlmIChzY2VuZSgpKQotICAgICAgICAgICAgc2NlbmUoKS0+dXBkYXRlKCk7Ci0KLSAgICBp
ZiAobV9jaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJlc2VydmVzM0RD
aGFuZ2UgfCBUcmFuc2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNpemVDaGFuZ2Ug
fCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSB8IFBhcmVudENoYW5n
ZSkpIHsKLSAgICAgICAgLy8gRHVlIHRvIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB3YXkg
V2ViQ29yZSBoYW5kbGVzIHRyYW5zZm9ybXMgYW5kIHRoZSB3YXkgUXQgaGFuZGxlcyB0cmFuc2Zv
cm1zLAotICAgICAgICAvLyBhbGwgdGhlc2UgZWxlbWVudHMgYWZmZWN0IHRoZSB0cmFuc2Zvcm1z
IG9mIGFsbCB0aGUgZGVzY2VuZGFudHMuCi0gICAgICAgIGZvcmNlVXBkYXRlVHJhbnNmb3JtID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9jaGFuZ2VNYXNrICYgKENvbnRlbnRDaGFuZ2UgfCBE
cmF3c0NvbnRlbnRDaGFuZ2UgfCBNYXNrTGF5ZXJDaGFuZ2UpKSB7Ci0gICAgICAgIHN3aXRjaCAo
bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSkgewotICAgICAgICBjYXNlIFBpeG1hcENvbnRl
bnRUeXBlOgotICAgICAgICAgICAgdXBkYXRlKCk7Ci0gICAgICAgICAgICBzZXRGbGFnKEl0ZW1I
YXNOb0NvbnRlbnRzLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IE1lZGlhQ29udGVudFR5cGU6Ci0gICAgICAgICAgICBzZXRGbGFnKEl0ZW1IYXNOb0NvbnRlbnRz
LCB0cnVlKTsKLSAgICAgICAgICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWFMYXllci5kYXRhKCkt
PnNldFBhcmVudEl0ZW0odGhpcyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENvbG9yQ29udGVudFR5cGU6Ci0gICAgICAgICAgICBpZiAobV9wZW5kaW5nQ29udGVudC5jb250
ZW50VHlwZSAhPSBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlCi0gICAgICAgICAgICAgICAg
fHwgbV9wZW5kaW5nQ29udGVudC5jb250ZW50c0JhY2tncm91bmRDb2xvciAhPSBtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRzQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgICAgIHVwZGF0ZSgp
OwotICAgICAgICAgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNldEZsYWcoSXRlbUhhc05vQ29udGVudHMsIGZhbHNlKTsKLQotICAgICAgICAgICAgLy8gT25s
eSB1c2UgSXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRlbnQgYXMgY29s
b3JzIGRvbid0IGdhaW4gbXVjaCBmcm9tIHRoYXQuCi0gICAgICAgICAgICBzZXRGbGFnKFFHcmFw
aGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgZmFsc2UpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBIVE1MQ29udGVudFR5cGU6Ci0gICAgICAgICAgICBp
ZiAobV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSAhPSBtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlKQotICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
IW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAg
ICAgICAgICAgIHVwZGF0ZSgpOwotCi0gICAgICAgICAgICBzZXRGbGFnKEl0ZW1IYXNOb0NvbnRl
bnRzLCAhbV9sYXllci0+ZHJhd3NDb250ZW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKG1fY2hhbmdlTWFzayAmIE9wYWNpdHlDaGFuZ2UpICYm
IG1fc3RhdGUub3BhY2l0eSAhPSBtX2xheWVyLT5vcGFjaXR5KCkgJiYgIW1fb3BhY2l0eUFuaW1h
dGlvblJ1bm5pbmcpCi0gICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0eSgpKTsKLQot
ICAgIGlmIChtX2NoYW5nZU1hc2sgJiBDb250ZW50c1JlY3RDaGFuZ2UpIHsKLSAgICAgICAgY29u
c3QgUVJlY3QgcmVjdChtX2xheWVyLT5jb250ZW50c1JlY3QoKSk7Ci0gICAgICAgIGlmIChtX3N0
YXRlLmNvbnRlbnRzUmVjdCAhPSByZWN0KSB7Ci0gICAgICAgICAgICBtX3N0YXRlLmNvbnRlbnRz
UmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBpZiAobV9wZW5kaW5nQ29udGVudC5tZWRpYUxheWVy
KSB7Ci0gICAgICAgICAgICAgICAgUUdyYXBoaWNzV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nh
c3Q8UUdyYXBoaWNzV2lkZ2V0Kj4obV9wZW5kaW5nQ29udGVudC5tZWRpYUxheWVyLmRhdGEoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHdpZGdldCkKLSAgICAgICAgICAgICAgICAgICAgd2lkZ2V0
LT5zZXRHZW9tZXRyeShyZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVwZGF0ZSgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChtX2NoYW5nZU1hc2sgJiBNYXNrc1RvQm91
bmRzQ2hhbmdlKSAmJiBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgIT0gbV9sYXllci0+bWFza3NUb0Jv
dW5kcygpKSB7Ci0gICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzVG9TaGFw
ZSwgbV9sYXllci0+bWFza3NUb0JvdW5kcygpKTsKLSAgICAgICAgc2V0RmxhZyhRR3JhcGhpY3NJ
dGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSk7
Ci0gICAgfQotCi0gICAgaWYgKChtX2NoYW5nZU1hc2sgJiBDb250ZW50c09wYXF1ZUNoYW5nZSkg
JiYgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSAhPSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgpKQot
ICAgICAgICBwcmVwYXJlR2VvbWV0cnlDaGFuZ2UoKTsKLQotI2lmbmRlZiBRVF9OT19HUkFQSElD
U0VGRkVDVAotICAgIGlmIChtX21hc2tFZmZlY3QpCi0gICAgICAgIG1fbWFza0VmZmVjdC5kYXRh
KCktPnVwZGF0ZSgpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIGlmIChtX2NoYW5nZU1hc2sgJiBE
aXNwbGF5Q2hhbmdlKSB7Ci0jaWZuZGVmIFFUX0dSQVBISUNTX0xBWUVSX05PX1JFQ0FDSEVfT05f
RElTUExBWV9DSEFOR0UKLSAgICAgICAgLy8gUmVjYWNoZSBub3c6IGFsbCB0aGUgY29udGVudCBp
cyByZWFkeSBhbmQgd2UgZG9uJ3Qgd2FudCB0byB3YWl0IHVudGlsIHRoZSBwYWludCBldmVudC4K
LSAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgZm9yIEhUTUwgY29udGVudCwgdGhl
cmUncyBubyBwb2ludCBpbiBjYWNoaW5nIGRpcmVjdGx5IGNvbXBvc2l0ZWQKLSAgICAgICAgLy8g
Y29udGVudCBsaWtlIGltYWdlcyBvciBzb2xpZCByZWN0YW5nbGVzLgotICAgICAgICBpZiAobV9w
ZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgYWxsb3dBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ2FjaGUoKSkKLSAgICAgICAgICAgIHJlY2FjaGUobV9wZW5kaW5n
Q29udGVudC5yZWdpb25Ub1VwZGF0ZSk7Ci0jZW5kaWYKLSAgICAgICAgdXBkYXRlKG1fcGVuZGlu
Z0NvbnRlbnQucmVnaW9uVG9VcGRhdGUuYm91bmRpbmdSZWN0KCkpOwotICAgICAgICBtX3BlbmRp
bmdDb250ZW50LnJlZ2lvblRvVXBkYXRlID0gUVJlZ2lvbigpOwotICAgIH0KLQotICAgIGlmICgo
bV9jaGFuZ2VNYXNrICYgQmFja2dyb3VuZENvbG9yQ2hhbmdlKQotICAgICAgICAmJiAobV9wZW5k
aW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgIT0gbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5k
Q29sb3IpKQotICAgICAgICB1cGRhdGUoKTsKLQotICAgIG1fc3RhdGUubWFza0xheWVyID0gbV9s
YXllci0+bWFza0xheWVyKCk7Ci0gICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVyLT5wb3NpdGlvbigp
OwotICAgIG1fc3RhdGUuYW5jaG9yUG9pbnQgPSBtX2xheWVyLT5hbmNob3JQb2ludCgpOwotICAg
IG1fc3RhdGUuc2l6ZSA9IG1fbGF5ZXItPnNpemUoKTsKLSAgICBtX3N0YXRlLnRyYW5zZm9ybSA9
IG1fbGF5ZXItPnRyYW5zZm9ybSgpOwotICAgIG1fc3RhdGUuY29udGVudHNPcmllbnRhdGlvbiA9
bV9sYXllci0+Y29udGVudHNPcmllbnRhdGlvbigpOwotICAgIG1fc3RhdGUub3BhY2l0eSA9IG1f
bGF5ZXItPm9wYWNpdHkoKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNv
bnRlbnRzUmVjdCgpOwotICAgIG1fc3RhdGUucHJlc2VydmVzM0QgPSBtX2xheWVyLT5wcmVzZXJ2
ZXMzRCgpOwotICAgIG1fc3RhdGUubWFza3NUb0JvdW5kcyA9IG1fbGF5ZXItPm1hc2tzVG9Cb3Vu
ZHMoKTsKLSAgICBtX3N0YXRlLmRyYXdzQ29udGVudCA9IG1fbGF5ZXItPmRyYXdzQ29udGVudCgp
OwotICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUgPSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgp
OwotICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gbV9sYXllci0+YmFja2ZhY2VWaXNp
YmlsaXR5KCk7Ci0gICAgbV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IG1fbGF5ZXItPmNoaWxk
cmVuVHJhbnNmb3JtKCk7Ci0gICAgbV9jdXJyZW50Q29udGVudC5waXhtYXAgPSBtX3BlbmRpbmdD
b250ZW50LnBpeG1hcDsKLSAgICBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID0gbV9wZW5k
aW5nQ29udGVudC5jb250ZW50VHlwZTsKLSAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhTGF5ZXIg
PSBtX3BlbmRpbmdDb250ZW50Lm1lZGlhTGF5ZXI7Ci0gICAgbV9jdXJyZW50Q29udGVudC5iYWNr
Z3JvdW5kQ29sb3IgPSBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvcjsKLSAgICBtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRzQmFja2dyb3VuZENvbG9yID0gbV9wZW5kaW5nQ29udGVudC5j
b250ZW50c0JhY2tncm91bmRDb2xvcjsKLSAgICBtX3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBk
YXRlID0gUVJlZ2lvbigpOwotICAgIG1fY2hhbmdlTWFzayA9IE5vQ2hhbmdlczsKLQotYWZ0ZXJM
YXllckNoYW5nZXM6Ci0gICAgaWYgKGZvcmNlVXBkYXRlVHJhbnNmb3JtKQotICAgICAgICB1cGRh
dGVUcmFuc2Zvcm0oKTsKLQotICAgIGlmICghcmVjdXJzaXZlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7Ci0gICAg
aWYgKG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV9zdGF0ZS5t
YXNrTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0KLSAgICBRTGlzdDxRR3JhcGhpY3NJdGVtKj46
OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBjaGlsZHJlbi5jb25zdEJlZ2luKCk7
IGl0ICE9IGNoaWxkcmVuLmNvbnN0RW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKFFHcmFwaGlj
c0l0ZW0qIGl0ZW0gPSAqaXQpIHsKLSAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBs
KiBsYXllciA9IHRvR3JhcGhpY3NMYXllclF0SW1wbChpdGVtKSkKLSAgICAgICAgICAgICAgICBs
YXllci0+Zmx1c2hDaGFuZ2VzKHRydWUsIGZvcmNlVXBkYXRlVHJhbnNmb3JtKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotLyogXHJlaW1wIChU
aWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6
dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotLyogXHJlaW1wIChUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudC5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6dGlsZWRC
YWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGdjLCAgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqZ2MsIHJlY3Qp
OwotfQotCi0vKiBccmVpbXAgKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgpCi0qLwotdm9pZCBH
cmFwaGljc0xheWVyUXRJbXBsOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3Rv
cjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWlu
dGVkQXJlYS5zaXplKCk7ICsraSkKLSAgICAgICAgdXBkYXRlKFFSZWN0RihwYWludGVkQXJlYVtp
XSkpOwotfQotCi0vKiBccmVpbXAgKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgpCi0qLwotSW50
UmVjdCBHcmFwaGljc0xheWVyUXRJbXBsOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgp
Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotfQotCi0vKiBccmVpbXAg
KFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgpCi0qLwotQ29sb3IgR3JhcGhpY3NMYXllclF0SW1w
bDo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIGlmICht
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IFBpeG1hcENvbnRlbnRUeXBlICYmICFtX2N1
cnJlbnRDb250ZW50LnBpeG1hcC5oYXNBbHBoYUNoYW5uZWwoKSkKLSAgICAgICAgcmV0dXJuIENv
bG9yKDAsIDAsIDApOwotICAgIC8vIFdlIHJldHVybiBhIHRyYW5zcGFyZW50IGNvbG9yIHNvIHRo
YXQgdGhlIHRpbGVzIGluaXRpYWxpemUgd2l0aCBhbHBoYS4KLSAgICByZXR1cm4gQ29sb3IoMCwg
MCwgMCwgMCk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NMYXllclF0SW1wbDo6dGlsZWRCYWNraW5n
U3RvcmVWaXNpYmxlUmVjdCgpCi17Ci0gICAgY29uc3QgUUdyYXBoaWNzVmlldyogdmlldyA9IHNj
ZW5lKCktPnZpZXdzKCkuaXNFbXB0eSgpID8gMCA6IHNjZW5lKCktPnZpZXdzKCkuZmlyc3QoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBtYXBGcm9tU2NlbmUoc2NlbmUoKS0+c2Nl
bmVSZWN0KCkpLmJvdW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKTsKLQotICAgIC8vIEFsbCB3
ZSBnZXQgaXMgdGhlIHZpZXdwb3J0J3MgdmlzaWJsZSByZWdpb24uIFdlIGhhdmUgdG8gbWFwIGl0
IHRvIHRoZSBzY2VuZSBhbmQgdGhlbiB0byBpdGVtIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBt
YXBGcm9tU2NlbmUodmlldy0+bWFwVG9TY2VuZSh2aWV3LT52aWV3cG9ydCgpLT52aXNpYmxlUmVn
aW9uKCkuYm91bmRpbmdSZWN0KCkpLmJvdW5kaW5nUmVjdCgpKS5ib3VuZGluZ1JlY3QoKS50b0Fs
aWduZWRSZWN0KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKCkKLXsKLSAgICAvLyBXZWJDb3JlIG5vdGlmaWVzIGphdmFzY3Jp
cHQgd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0cy4gSGVyZSB3ZSdyZSBsZXR0aW5nIGl0IGtub3cu
Ci0gICAgbV9sYXllci0+Y2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQobV9sYXllciwg
LyogRE9NIHRpbWUgKi8gV1RGOjpjdXJyZW50VGltZSgpKTsKLX0KLQotR3JhcGhpY3NMYXllclF0
OjpHcmFwaGljc0xheWVyUXQoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotICAgIDogR3Jh
cGhpY3NMYXllcihjbGllbnQpCi0gICAgLCBtX2ltcGwoYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5
ZXJRdEltcGwodGhpcykpKQotewotfQotCi1HcmFwaGljc0xheWVyUXQ6On5HcmFwaGljc0xheWVy
UXQoKQotewotICAgIC8vIERvIGNsZWFudXAgd2hpbGUgd2UgY2FuIHN0aWxsIHNhZmVseSBjYWxs
IG1ldGhvZHMgb24gdGhlIGRlcml2ZWQgY2xhc3MuCi0gICAgd2lsbEJlRGVzdHJveWVkKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NMYXllclF0Ojp3aWxsQmVEZXN0cm95ZWQoKQotewotICAgIG1faW1w
bCA9IG51bGxwdHI7Ci0gICAgR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0K
LS8vIFRoaXMgaXMgdGhlIGhvb2sgZm9yIFdlYkNvcmUgY29tcG9zaXRvciB0byBrbm93IHRoYXQg
UXQgaW1wbGVtZW50cyBjb21wb3NpdGluZyB3aXRoIEdyYXBoaWNzTGF5ZXJRdC4KLVBhc3NPd25Q
dHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJRdChj
bGllbnQpKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpOiBUaGUgY3VycmVudCBz
aXplIG1pZ2h0IGNoYW5nZSwgdGh1cyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgd2hvbGUgZGlzcGxh
eS4KLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBt
X2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9VcGRhdGUgPSBRUmVnaW9uKFFSZWN0KFFQ
b2ludCgwLCAwKSwgUVNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKLSAg
ICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpEaXNwbGF5Q2hhbmdl
KTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xh
eWVyUXQ6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBkYXRlIHw9IFFSZWN0RihyZWN0
KS50b0FsaWduZWRSZWN0KCk7Ci0gICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXll
clF0SW1wbDo6RGlzcGxheUNoYW5nZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRD
b250ZW50c05lZWRzRGlzcGxheSgpCi17Ci0gICAgc3dpdGNoIChtX2ltcGwtPm1fcGVuZGluZ0Nv
bnRlbnQuY29udGVudFR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzTGF5ZXJRdEltcGw6Ok1lZGlh
Q29udGVudFR5cGU6Ci0gICAgICAgIGlmICghbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50Lm1lZGlh
TGF5ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faW1wbC0+bV9wZW5kaW5nQ29u
dGVudC5tZWRpYUxheWVyLmRhdGEoKS0+dXBkYXRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXll
clF0OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBtX2ltcGwtPnNldE9iamVj
dE5hbWUobmFtZSk7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0TmFtZShuYW1lKTsKLX0KLQotLyog
XHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldFBh
cmVudChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShH
cmFwaGljc0xheWVyUXRJbXBsOjpQYXJlbnRDaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFBhcmVudChsYXllcik7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLWJv
b2wgR3JhcGhpY3NMYXllclF0OjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXll
cio+JiBjaGlsZHJlbikKLXsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVy
UXRJbXBsOjpDaGlsZHJlbkNoYW5nZSk7Ci0gICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldENo
aWxkcmVuKGNoaWxkcmVuKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwot
dm9pZCBHcmFwaGljc0xheWVyUXQ6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewot
ICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkNoaWxkcmVuQ2hh
bmdlKTsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Ci19Ci0KLS8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjphZGRDaGlsZEF0
SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICBtX2ltcGwtPm5vdGlmeUNo
YW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpDaGlsZHJlbkNoYW5nZSk7Ci19Ci0KLS8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjphZGRDaGlsZEFi
b3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQotewotICAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICAgbV9p
bXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6Q2hpbGRyZW5DaGFuZ2UpOwot
fQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJR
dDo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2li
bGluZykKLXsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxp
bmcpOwotICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkNoaWxk
cmVuQ2hhbmdlKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotYm9vbCBH
cmFwaGljc0xheWVyUXQ6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3Jh
cGhpY3NMYXllciogbmV3Q2hpbGQpCi17Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VD
aGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7Ci0gICAgICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdl
KEdyYXBoaWNzTGF5ZXJRdEltcGw6OkNoaWxkcmVuQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVtb3ZlRnJvbVBhcmVudCgpCi17
Ci0gICAgaWYgKHBhcmVudCgpKQotICAgICAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGlj
c0xheWVyUXRJbXBsOjpQYXJlbnRDaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBH
cmFwaGljc0xheWVyUXQ6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGlj
c0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUpOwotICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdy
YXBoaWNzTGF5ZXJRdEltcGw6Ok1hc2tMYXllckNoYW5nZSk7Ci19Ci0KLS8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gcG9zaXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHZhbHVlKTsKLSAg
ICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpQb3NpdGlvbkNoYW5n
ZSk7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NM
YXllclF0OjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSBhbmNob3JQb2ludCgpKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhp
Y3NMYXllcjo6c2V0QW5jaG9yUG9pbnQodmFsdWUpOwotICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdl
KEdyYXBoaWNzTGF5ZXJRdEltcGw6OkFuY2hvclBvaW50Q2hhbmdlKTsKLX0KLQotLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldFNpemUoY29u
c3QgRmxvYXRTaXplJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gc2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZSh2YWx1ZSk7Ci0gICAgbV9pbXBs
LT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6U2l6ZUNoYW5nZSk7Ci19Ci0KLS8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSB0cmFuc2Zvcm0oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFRyYW5zZm9ybSh2YWx1ZSk7Ci0gICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NM
YXllclF0SW1wbDo6VHJhbnNmb3JtQ2hhbmdlKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gY2hp
bGRyZW5UcmFuc2Zvcm0oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENoaWxkcmVuVHJhbnNmb3JtKHZhbHVlKTsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFw
aGljc0xheWVyUXRJbXBsOjpDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSk7Ci19Ci0KLS8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRQcmVzZXJ2
ZXMzRChib29sIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QodmFsdWUpOwot
ICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OlByZXNlcnZlczNE
Q2hhbmdlKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFw
aGljc0xheWVyUXQ6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gbWFza3NUb0JvdW5kcygpKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXll
cjo6c2V0TWFza3NUb0JvdW5kcyh2YWx1ZSk7Ci0gICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3Jh
cGhpY3NMYXllclF0SW1wbDo6TWFza3NUb0JvdW5kc0NoYW5nZSk7Ci19Ci0KLS8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXREcmF3c0NvbnRl
bnQoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gZHJhd3NDb250ZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBs
OjpEcmF3c0NvbnRlbnRDaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVu
dCh2YWx1ZSk7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3Jh
cGhpY3NMYXllclF0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9y
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91
bmRDb2xvciA9IHZhbHVlOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2
YWx1ZSk7Ci0gICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6QmFj
a2dyb3VuZENvbG9yQ2hhbmdlKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0q
Lwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OmNsZWFyQmFja2dyb3VuZENvbG9yKCkKLXsKLSAgICBp
ZiAoIW1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRD
b2xvciA9IFFDb2xvcigpOwotICAgIEdyYXBoaWNzTGF5ZXI6OmNsZWFyQmFja2dyb3VuZENvbG9y
KCk7Ci0gICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6QmFja2dy
b3VuZENvbG9yQ2hhbmdlKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwot
dm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlID09IGNvbnRlbnRzT3BhcXVlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpDb250ZW50c09wYXF1ZUNo
YW5nZSk7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUodmFsdWUpOwotfQot
Ci0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09IGJh
Y2tmYWNlVmlzaWJpbGl0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZhbHVlKTsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShH
cmFwaGljc0xheWVyUXRJbXBsOjpCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UpOwotfQotCi0vKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0T3Bh
Y2l0eShmbG9hdCB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7Ci0gICAgbV9p
bXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6T3BhY2l0eUNoYW5nZSk7Ci19
Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0
OjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09IGNvbnRlbnRzUmVjdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNSZWN0KHZhbHVlKTsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGlj
c0xheWVyUXRJbXBsOjpDb250ZW50c1JlY3RDaGFuZ2UpOwotfQotCi0vKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKLXsKLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVy
UXRJbXBsOjpDb250ZW50Q2hhbmdlKTsKLSAgICBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQuY29u
dGVudFR5cGUgPSBHcmFwaGljc0xheWVyUXRJbXBsOjpIVE1MQ29udGVudFR5cGU7Ci0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLSAgICBpZiAoaW1hZ2UpIHsK
LSAgICAgICAgUVBpeG1hcCogcHhtID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgICAgIGlmIChweG0pIHsKLSAgICAgICAgICAgIG1faW1wbC0+bV9wZW5kaW5nQ29u
dGVudC5waXhtYXAgPSAqcHhtOwotICAgICAgICAgICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50
LmNvbnRlbnRUeXBlID0gR3JhcGhpY3NMYXllclF0SW1wbDo6UGl4bWFwQ29udGVudFR5cGU7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9pbXBsLT5tX3BlbmRp
bmdDb250ZW50LnBpeG1hcCA9IFFQaXhtYXAoKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldENvbnRlbnRzVG9CYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdy
YXBoaWNzTGF5ZXJRdEltcGw6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1faW1wbC0+bV9wZW5kaW5n
Q29udGVudC5jb250ZW50VHlwZSA9IEdyYXBoaWNzTGF5ZXJRdEltcGw6OkNvbG9yQ29udGVudFR5
cGU7Ci0gICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRzQmFja2dyb3VuZENvbG9y
ID0gUUNvbG9yKGNvbG9yKTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQmFja2dy
b3VuZENvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldENvbnRlbnRz
VG9NZWRpYShQbGF0Zm9ybUxheWVyKiBtZWRpYSkKLXsKLSAgICBpZiAobWVkaWEpIHsKLSAgICAg
ICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gR3JhcGhpY3NMYXllclF0
SW1wbDo6TWVkaWFDb250ZW50VHlwZTsKLSAgICAgICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50
Lm1lZGlhTGF5ZXIgPSBtZWRpYS0+dG9HcmFwaGljc09iamVjdCgpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBHcmFwaGljc0xheWVy
UXRJbXBsOjpIVE1MQ29udGVudFR5cGU7Ci0KLSAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFw
aGljc0xheWVyUXRJbXBsOjpDb250ZW50Q2hhbmdlKTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c1RvTWVkaWEobWVkaWEpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBjYW52YXMpCi17Ci0gICAgc2V0Q29udGVudHNU
b01lZGlhKGNhbnZhcyk7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLXZv
aWQgR3JhcGhpY3NMYXllclF0OjpzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBtX2ltcGwtPm5vdGlmeUNo
YW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpDb250ZW50c09yaWVudGF0aW9uQ2hhbmdlKTsKLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKLX0K
LQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6
OmRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0IG8pCi17Ci0gICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2Uo
R3JhcGhpY3NMYXllclF0SW1wbDo6T3BhY2l0eUNoYW5nZSk7Ci0gICAgbV9pbXBsLT5tX3N0YXRl
LmRpc3RyaWJ1dGVPcGFjaXR5ID0gdHJ1ZTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVy
LmgpCi0qLwotZmxvYXQgR3JhcGhpY3NMYXllclF0OjphY2N1bXVsYXRlZE9wYWNpdHkoKSBjb25z
dAotewotICAgIHJldHVybiBtX2ltcGwtPmVmZmVjdGl2ZU9wYWNpdHkoKTsKLX0KLQotLyogXHJl
aW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbV9pbXBsLT5mbHVzaENoYW5n
ZXMoKTsKLSAgICBHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOwotfQotCi0v
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsKLSAgICAvLyBXZSBjYW4ndCBj
YWxsIGZsdXNoQ2hhbmdlcyByZWN1cnNpdmVseSBoZXJlCi0gICAgbV9pbXBsLT5mbHVzaENoYW5n
ZXMoZmFsc2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi1QbGF0
Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyUXQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAg
IHJldHVybiBtX2ltcGwuZ2V0KCk7Ci19Ci0KLS8vIE5vdyB3ZSBzdGFydCBkZWFsaW5nIHdpdGgg
V2ViQ29yZSBhbmltYXRpb25zIHRyYW5zbGF0ZWQgdG8gUXQgYW5pbWF0aW9ucwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBLZXlmcmFtZVZhbHVlUXQgewotICAgIGNvbnN0IFRpbWlu
Z0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbjsKLSAgICBUIHZhbHVlOwotfTsKLQotLyogQ29waWVk
IGZyb20gQW5pbWF0aW9uQmFzZS5jcHAKLSovCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVw
c2lsb24oZG91YmxlIGR1cmF0aW9uKQotewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJh
dGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlv
bihxcmVhbCBwMXgsIHFyZWFsIHAxeSwgcXJlYWwgcDJ4LCBxcmVhbCBwMnksIGRvdWJsZSB0LCBk
b3VibGUgZHVyYXRpb24pCi17Ci0gICAgVW5pdEJlemllciBiZXppZXIocDF4LCBwMXksIHAyeCwg
cDJ5KTsKLSAgICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikp
OwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0
ZXBzLCBib29sIHN0ZXBBdFN0YXJ0LCBkb3VibGUgdCkKLXsKLSAgICBpZiAoc3RlcEF0U3RhcnQp
Ci0gICAgICAgIHJldHVybiBxTWluKDEuMCwgKGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51
bVN0ZXBzKTsKLSAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOwotfQot
Ci1zdGF0aWMgaW5saW5lIHFyZWFsIGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVu
Y3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBxcmVhbCBwcm9ncmVzcywgZG91YmxlIGR1cmF0aW9uKQot
ewotICAgIC8vIFdlIHdhbnQgdGhlIHRpbWluZyBmdW5jdGlvbiB0byBiZSBhcyBjbG9zZSBhcyBw
b3NzaWJsZSB0byB3aGF0IHRoZSB3ZWItZGV2ZWxvcGVyIGludGVuZGVkLCBzbwotICAgIC8vIHdl
J3JlIHVzaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHVzZWQgYnkgV2ViQ29yZSB3aGVuIGNvbXBvc2l0
aW5nIGlzIGRpc2FibGVkLiBVc2luZyBlYXNpbmctY3VydmVzCi0gICAgLy8gd291bGQgcHJvYmFi
bHkgd29yayBmb3Igc29tZSBvZiB0aGUgY2FzZXMsIGJ1dCB3b3VsZG4ndCByZWFsbHkgYnV5IHVz
IGFueXRoaW5nIGFzIHdlJ2QgaGF2ZSB0bwotICAgIC8vIGNvbnZlcnQgdGhlIGJlemllciBmdW5j
dGlvbiBiYWNrIHRvIGFuIGVhc2luZyBjdXJ2ZS4KLQotICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNC
ZXppZXJGdW5jdGlvbihjdGYtPngxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3RmLT55MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN0Zi0+eDIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dGYtPnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
KHByb2dyZXNzKSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDApOwotICAgIH0gZWxzZSBpZiAodGlt
aW5nRnVuY3Rpb24tPmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IFN0
ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVu
Y3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZVN0ZXBzRnVuY3Rp
b24oc3RmLT5udW1iZXJPZlN0ZXBzKCksIHN0Zi0+c3RlcEF0U3RhcnQoKSwgZG91YmxlKHByb2dy
ZXNzKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBwcm9ncmVzczsKLX0KLQotLy8gSGVs
cGVyIGZ1bmN0aW9ucyB0byBzYWZlbHkgZ2V0IGEgdmFsdWUgb3V0IG9mIFdlYkNvcmUncyBBbmlt
YXRpb25WYWx1ZSouCi0KLSNpZm5kZWYgUVRfTk9fQU5JTUFUSU9OCi1zdGF0aWMgdm9pZCB3ZWJr
aXRBbmltYXRpb25Ub1F0QW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUqIGFuaW1h
dGlvblZhbHVlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1PcGVyYXRpb25zKQotewot
ICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMgPSBUcmFuc2Zvcm1PcGVyYXRpb25zKCk7Ci0gICAgaWYg
KCFhbmltYXRpb25WYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52YWx1ZSgpKQotICAgICAgICB0cmFuc2Zvcm1PcGVy
YXRpb25zID0gKm9wczsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0QW5pbWF0aW9uVG9RdEFuaW1h
dGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltYXRpb25WYWx1ZSwgcXJlYWwmIHJl
YWxWYWx1ZSkKLXsKLSAgICByZWFsVmFsdWUgPSBhbmltYXRpb25WYWx1ZSA/IHN0YXRpY19jYXN0
PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPihhbmltYXRpb25WYWx1ZSktPnZhbHVlKCkgOiAw
OwotfQotCi0vLyBXZSBwdXQgYSBiaXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gYSBiYXNlIGNs
YXNzIHRvIGFsbG93IGNhc3RpbmcgYW5kIHRvIHNhdmUgc29tZSBjb2RlIHNpemUuCi0KLWNsYXNz
IEFuaW1hdGlvblF0QmFzZSA6IHB1YmxpYyBRQWJzdHJhY3RBbmltYXRpb24gewotcHVibGljOgot
ICAgIEFuaW1hdGlvblF0QmFzZShHcmFwaGljc0xheWVyUXRJbXBsKiBsYXllciwgY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiBhbmltLCBjb25zdCBRU3RyaW5nICYgbmFtZSkKLSAgICAgICAgOiBRQWJzdHJhY3RB
bmltYXRpb24oMCkKLSAgICAgICAgLCBtX2xheWVyKGxheWVyKQotICAgICAgICAsIG1fYm94U2l6
ZShib3hTaXplKQotICAgICAgICAsIG1fZHVyYXRpb24oYW5pbS0+ZHVyYXRpb24oKSAqIDEwMDAp
Ci0gICAgICAgICwgbV9pc0FsdGVybmF0ZShhbmltLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246
OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkKLSAgICAgICAgLCBtX3dlYmtpdFByb3BlcnR5
SUQodmFsdWVzLnByb3BlcnR5KCkpCi0gICAgICAgICwgbV93ZWJraXRBbmltYXRpb24oYW5pbSkK
LSAgICAgICAgLCBtX2tleWZyYW1lc05hbWUobmFtZSkKLSAgICAgICAgLCBtX2ZpbGxzRm9yd2Fy
ZHMoZmFsc2UpCi0gICAgewotICAgIH0KLQotCi0gICAgdmlydHVhbCBBbmltYXRlZFByb3BlcnR5
SUQgYW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTdGF0ZShRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmlt
YXRpb246OlN0YXRlIG9sZFN0YXRlKQotICAgIHsKLSAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9u
Ojp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOwotCi0gICAgICAgIC8vIEZvciBzb21l
IHJlYXNvbiB3ZSBoYXZlIGRvIHRoaXMgYXN5bmNocm9ub3VzbHkgLSBvciB0aGUgYW5pbWF0aW9u
IHdvbid0IHdvcmsuCi0gICAgICAgIGlmIChuZXdTdGF0ZSA9PSBSdW5uaW5nICYmIG9sZFN0YXRl
ID09IFN0b3BwZWQgJiYgbV9sYXllci5kYXRhKCkpCi0gICAgICAgICAgICBtX2xheWVyLmRhdGEo
KS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZEFzeW5jKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBp
bnQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0KLSAgICBRV2Vha1Bv
aW50ZXI8R3JhcGhpY3NMYXllclF0SW1wbD4gbV9sYXllcjsKLSAgICBJbnRTaXplIG1fYm94U2l6
ZTsKLSAgICBpbnQgbV9kdXJhdGlvbjsKLSAgICBib29sIG1faXNBbHRlcm5hdGU7Ci0gICAgQW5p
bWF0ZWRQcm9wZXJ0eUlEIG1fd2Via2l0UHJvcGVydHlJRDsKLQotICAgIC8vIFdlIG1pZ2h0IG5l
ZWQgdGhpcyBpbiBjYXNlIHRoZSBzYW1lIGFuaW1hdGlvbiBpcyBhZGRlZCBhZ2FpbiAoaS5lLiBy
ZXN1bWVkIGJ5IFdlYkNvcmUpLgotICAgIGNvbnN0IEFuaW1hdGlvbiogbV93ZWJraXRBbmltYXRp
b247Ci0gICAgUVN0cmluZyBtX2tleWZyYW1lc05hbWU7Ci0gICAgYm9vbCBtX2ZpbGxzRm9yd2Fy
ZHM7Ci19OwotCi0vLyBXZSdkIHJhdGhlciBoYXZlIGEgdGVtcGxhdGl6ZWQgUUFic3RyYWN0QW5p
bWF0aW9uIHRoYW4gUVByb3BlcnR5QW5pbWF0aW9uIC8gUVZhcmlhbnRBbmltYXRpb247Ci0vLyBT
aW5jZSB3ZSBrbm93IHRoZSB0eXBlcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhlIFFPYmpl
Y3QvUVByb3BlcnR5L1FWYXJpYW50IGFic3RyYWN0aW9uCi0vLyBidXlzIHVzIHZlcnkgbGl0dGxl
IGluIHRoaXMgY2FzZSwgZm9yIHRvbyBtdWNoIG92ZXJoZWFkLgotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1jbGFzcyBBbmltYXRpb25RdCA6IHB1YmxpYyBBbmltYXRpb25RdEJhc2UgewotCi1wdWJs
aWM6Ci0gICAgQW5pbWF0aW9uUXQoR3JhcGhpY3NMYXllclF0SW1wbCogbGF5ZXIsIGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbSwgY29uc3QgUVN0cmluZyAmIG5hbWUpCi0gICAgICAgIDogQW5pbWF0aW9u
UXRCYXNlKGxheWVyLCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCi0gICAgewotICAgICAg
ICAvLyBDb3B5aW5nIHRob3NlIFdlYkNvcmUgc3RydWN0dXJlcyBpcyBub3QgdHJpdmlhbCwgd2Ug
aGF2ZSB0byBkbyBpdCBsaWtlIHRoaXMuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSog
YW5pbWF0aW9uVmFsdWUgPSB2YWx1ZXMuYXQoaSk7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVl
UXQ8VD4ga2V5ZnJhbWVWYWx1ZTsKLSAgICAgICAgICAgIGlmIChhbmltYXRpb25WYWx1ZS0+dGlt
aW5nRnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVZhbHVlLnRpbWluZ0Z1bmN0
aW9uID0gYW5pbWF0aW9uVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWVWYWx1ZS50aW1pbmdGdW5jdGlvbiA9IGFuaW0tPnRp
bWluZ0Z1bmN0aW9uKCkuZ2V0KCk7Ci0gICAgICAgICAgICB3ZWJraXRBbmltYXRpb25Ub1F0QW5p
bWF0aW9uVmFsdWUoYW5pbWF0aW9uVmFsdWUsIGtleWZyYW1lVmFsdWUudmFsdWUpOwotICAgICAg
ICAgICAgbV9rZXlmcmFtZVZhbHVlc1thbmltYXRpb25WYWx1ZS0+a2V5VGltZSgpXSA9IGtleWZy
YW1lVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByb3RlY3RlZDoKLQotICAgIC8vIFRoaXMg
aXMgdGhlIHBhcnQgdGhhdCBkaWZmZXJzIGJldHdlZW4gYW5pbWF0ZWQgcHJvcGVydGllcy4KLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlGcmFtZShjb25zdCBUJiBmcm9tVmFsdWUsIGNvbnN0IFQmIHRv
VmFsdWUsIHFyZWFsIHByb2dyZXNzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Rh
dGUoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9u
OjpTdGF0ZSBvbGRTdGF0ZSkKLSAgICB7Ci0jaWYgUVRfREVCVUdfRlBTCi0gICAgICAgIGlmIChu
ZXdTdGF0ZSA9PSBSdW5uaW5nICYmIG9sZFN0YXRlID09IFN0b3BwZWQpIHsKLSAgICAgICAgICAg
IHFEZWJ1ZygiQW5pbWF0aW9uIFN0YXJ0ZWQhIik7Ci0gICAgICAgICAgICBtX2Zwcy5mcmFtZXMg
PSAwOwotICAgICAgICAgICAgbV9mcHMuZHVyYXRpb24uc3RhcnQoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChuZXdTdGF0ZSA9PSBTdG9wcGVkICYmIG9sZFN0YXRlID09IFJ1bm5pbmcpIHsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBkdXJhdGlvbiA9IG1fZnBzLmR1cmF0aW9uLmVsYXBzZWQoKTsKLSAg
ICAgICAgICAgIHFEZWJ1ZygiQW5pbWF0aW9uIEVuZGVkISAlZG1zIFslZiBGUFNdIiwgZHVyYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgICgxMDAwIC8gKCgoZmxvYXQpZHVyYXRpb24pIC8gbV9m
cHMuZnJhbWVzKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgQW5pbWF0aW9uUXRCYXNl
Ojp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDdXJyZW50VGltZShpbnQgY3VycmVudFRpbWUpCi0gICAgewotICAgICAgICBp
ZiAoIW1fbGF5ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcXJlYWwgcHJvZ3Jl
c3MgPSBxcmVhbChjdXJyZW50TG9vcFRpbWUoKSkgLyBkdXJhdGlvbigpOwotCi0gICAgICAgIGlm
IChtX2lzQWx0ZXJuYXRlICYmIGN1cnJlbnRMb29wKCklMikKLSAgICAgICAgICAgIHByb2dyZXNz
ID0gMS1wcm9ncmVzczsKLQotICAgICAgICBpZiAobV9rZXlmcmFtZVZhbHVlcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gRmluZCB0aGUgY3VycmVudCBmcm9t
LXRvIGtleWZyYW1lcyBpbiBvdXIgbGl0dGxlIG1hcC4KLSAgICAgICAgdHlwZW5hbWUgUU1hcDxx
cmVhbCwgS2V5ZnJhbWVWYWx1ZVF0PFQ+ID46Oml0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZVZhbHVl
cy5maW5kKHByb2dyZXNzKTsKLQotICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhbiBleGFjdCBt
YXRjaCwgd2UgdHJ5IHRoZSBjbG9zZXN0IG1hdGNoIChsb3dlciBib3VuZCkuCi0gICAgICAgIGlm
IChpdCA9PSBtX2tleWZyYW1lVmFsdWVzLmVuZCgpKQotICAgICAgICAgICAgaXQgPSBtX2tleWZy
YW1lVmFsdWVzLmxvd2VyQm91bmQocHJvZ3Jlc3MpLTE7Ci0KLSAgICAgICAgLy8gV2UgZGlkbid0
IGZpbmQgYW55IG1hdGNoOyB1c2UgdGhlIGZpcnN0IGtleWZyYW1lLgotICAgICAgICBpZiAoaXQg
PT0gbV9rZXlmcmFtZVZhbHVlcy5lbmQoKSkKLSAgICAgICAgICAgIGl0ID0gbV9rZXlmcmFtZVZh
bHVlcy5iZWdpbigpOwotCi0gICAgICAgIHR5cGVuYW1lIFFNYXA8cXJlYWwsIEtleWZyYW1lVmFs
dWVRdDxUPiA+OjppdGVyYXRvciBpdDIgPSBpdCArIDE7Ci0gICAgICAgIGlmIChpdDIgPT0gbV9r
ZXlmcmFtZVZhbHVlcy5lbmQoKSkKLSAgICAgICAgICAgIGl0MiA9IGl0OwotICAgICAgICBjb25z
dCBLZXlmcmFtZVZhbHVlUXQ8VD4mIGZyb21LZXlmcmFtZSA9IGl0LnZhbHVlKCk7Ci0gICAgICAg
IGNvbnN0IEtleWZyYW1lVmFsdWVRdDxUPiYgdG9LZXlmcmFtZSA9IGl0Mi52YWx1ZSgpOwotCi0g
ICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jID0gZnJvbUtleWZyYW1lLnRp
bWluZ0Z1bmN0aW9uOwotICAgICAgICBjb25zdCBUJiBmcm9tVmFsdWUgPSBmcm9tS2V5ZnJhbWUu
dmFsdWU7Ci0gICAgICAgIGNvbnN0IFQmIHRvVmFsdWUgPSB0b0tleWZyYW1lLnZhbHVlOwotCi0g
ICAgICAgIC8vIE5vdyB3ZSBoYXZlIGEgc291cmNlIGtleWZyYW1lLCBvcmlnaW4ga2V5ZnJhbWUg
YW5kIGEgdGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAvLyBXZSBjYW4gbm93IHByb2Nlc3MgdGhl
IHByb2dyZXNzIGFuZCBhcHBseSB0aGUgZnJhbWUuCi0gICAgICAgIHByb2dyZXNzID0gKCFwcm9n
cmVzcyB8fCBwcm9ncmVzcyA9PSAxIHx8IGl0LmtleSgpID09IGl0Mi5rZXkoKSkgPwotICAgICAg
ICAgICAgcHJvZ3Jlc3MgOiBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmMsIChwcm9ncmVz
cyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSksIGR1cmF0aW9uKCkpOwotICAg
ICAgICBhcHBseUZyYW1lKGZyb21WYWx1ZSwgdG9WYWx1ZSwgcHJvZ3Jlc3MpOwotI2lmIFFUX0RF
QlVHX0ZQUwotICAgICAgICArK21fZnBzLmZyYW1lczsKLSNlbmRpZgotICAgIH0KLQotICAgIFFN
YXA8cXJlYWwsIEtleWZyYW1lVmFsdWVRdDxUPiA+IG1fa2V5ZnJhbWVWYWx1ZXM7Ci0jaWYgUVRf
REVCVUdfRlBTCi0gICAgc3RydWN0IHsKLSAgICAgICAgUVRpbWUgZHVyYXRpb247Ci0gICAgICAg
IGludCBmcmFtZXM7Ci0gICAgfSBtX2ZwczsKLSNlbmRpZgotfTsKLQotY2xhc3MgVHJhbnNmb3Jt
QW5pbWF0aW9uUXQgOiBwdWJsaWMgQW5pbWF0aW9uUXQ8VHJhbnNmb3JtT3BlcmF0aW9ucz4gewot
cHVibGljOgotICAgIFRyYW5zZm9ybUFuaW1hdGlvblF0KEdyYXBoaWNzTGF5ZXJRdEltcGwqIGxh
eWVyLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFFTdHJpbmcgJiBuYW1lKQotICAgICAg
ICA6IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxheWVyLCB2YWx1ZXMsIGJveFNp
emUsIGFuaW0sIG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIH5UcmFuc2Zvcm1BbmltYXRpb25R
dCgpCi0gICAgewotICAgICAgICBpZiAobV9maWxsc0ZvcndhcmRzKQotICAgICAgICAgICAgc2V0
Q3VycmVudFRpbWUoMSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBBbmltYXRlZFByb3BlcnR5SUQg
YW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm07IH0KLQotICAgIC8vIFRoZSBpZGVhIGlzIHRoYXQgd2UgbGV0IFdlYkNvcmUgbWFu
YWdlIHRoZSB0cmFuc2Zvcm0gb3BlcmF0aW9ucyBhbmQgUXQganVzdCBtYW5hZ2UgdGhlCi0gICAg
Ly8gYW5pbWF0aW9uIGhlYXJ0YmVhdCBhbmQgdGhlIGJvdHRvbS1saW5lIFFUcmFuc2Zvcm0uIFdl
IGdhaW4gcGVyZm9ybWFuY2UsIG5vdCBieSB1c2luZwotICAgIC8vIFRyYW5zZm9ybSBpbnN0ZWFk
IG9mIFRyYW5zZm9ybWF0aW9uTWF0cml4LCBidXQgYnkgcHJvcGVyIGNhY2hpbmcgb2YgaXRlbXMg
dGhhdCBhcmUKLSAgICAvLyBleHBlbnNpdmUgZm9yIFdlYkNvcmUgdG8gcmVuZGVyLiBXZSB3YW50
IHRoZSByZXN0IHRvIGJlIGFzIGNsb3NlIHRvIFdlYkNvcmUncyBpZGVhIGFzIHBvc3NpYmxlLgot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseUZyYW1lKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHNv
dXJjZU9wZXJhdGlvbnMsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRhcmdldE9wZXJhdGlv
bnMsIHFyZWFsIHByb2dyZXNzKQotICAgIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtTWF0cml4OwotCi0gICAgICAgIGJvb2wgdmFsaWRUcmFuc2Zvcm1MaXN0cyA9IHRy
dWU7Ci0gICAgICAgIGNvbnN0IGludCBzb3VyY2VPcGVyYXRpb25Db3VudCA9IHNvdXJjZU9wZXJh
dGlvbnMuc2l6ZSgpOwotICAgICAgICBpZiAoc291cmNlT3BlcmF0aW9uQ291bnQpIHsKLSAgICAg
ICAgICAgIGlmICh0YXJnZXRPcGVyYXRpb25zLnNpemUoKSAhPSBzb3VyY2VPcGVyYXRpb25Db3Vu
dCkKLSAgICAgICAgICAgICAgICB2YWxpZFRyYW5zZm9ybUxpc3RzID0gZmFsc2U7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNvdXJj
ZU9wZXJhdGlvbkNvdW50ICYmIHZhbGlkVHJhbnNmb3JtTGlzdHM7ICsraikgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNvdXJjZU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLT5pc1NhbWVU
eXBlKCp0YXJnZXRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZFRyYW5zZm9ybUxpc3RzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbGlkVHJhbnNmb3JtTGlz
dHMpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0T3BlcmF0aW9u
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICB0YXJnZXRPcGVyYXRpb25zLm9wZXJhdGlv
bnMoKVtpXS0+YmxlbmQoc291cmNlT3BlcmF0aW9ucy5hdChpKSwgcHJvZ3Jlc3MpLT5hcHBseSh0
cmFuc2Zvcm1NYXRyaXgsIG1fYm94U2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICB0YXJnZXRPcGVyYXRpb25zLmFwcGx5KG1fYm94U2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKLSAg
ICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5ibGVuZChtX3NvdXJjZU1hdHJpeCwgcHJvZ3Jlc3Mp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9sYXllci5kYXRhKCktPm1fbGF5ZXItPnNldFRyYW5z
Zm9ybSh0cmFuc2Zvcm1NYXRyaXgpOwotICAgICAgICAvLyBXZSBmb3JjZSB0aGUgYWN0dWFsIG9w
YWNpdHkgY2hhbmdlLCBvdGhlcndpc2UgaXQgd291bGQgYmUgaWdub3JlZCBiZWNhdXNlIG9mIHRo
ZSBhbmltYXRpb24uCi0gICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKHRy
YW5zZm9ybU1hdHJpeCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKFFB
YnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3Rh
dGUgb2xkU3RhdGUpCi0gICAgewotICAgICAgICBBbmltYXRpb25RdDxUcmFuc2Zvcm1PcGVyYXRp
b25zPjo6dXBkYXRlU3RhdGUobmV3U3RhdGUsIG9sZFN0YXRlKTsKLSAgICAgICAgaWYgKCFtX2xh
eWVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5mbHVz
aENoYW5nZXModHJ1ZSk7Ci0KLSAgICAgICAgLy8gVG8gaW5jcmVhc2UgRlBTLCB3ZSB1c2UgYSBs
ZXNzIGFjY3VyYXRlIGNhY2hpbmcgbWVjaGFuaXNtIHdoaWxlIGFuaW1hdGlvbiBpcyBnb2luZyBv
bgotICAgICAgICAvLyB0aGlzIGlzIGEgVVggY2hvaWNlIHRoYXQgc2hvdWxkIHByb2JhYmx5IGJl
IGN1c3RvbWl6YWJsZS4KLSAgICAgICAgaWYgKG5ld1N0YXRlID09IFFBYnN0cmFjdEFuaW1hdGlv
bjo6UnVubmluZykgewotICAgICAgICAgICAgbV9zb3VyY2VNYXRyaXggPSBtX2xheWVyLmRhdGEo
KS0+bV9sYXllci0+dHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+bV90
cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChuZXdT
dGF0ZSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQpIHsKLSAgICAgICAgICAgIC8vIFdl
IHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGJhY2sgdG8gdGhlIGRlZmF1bHQuIFRoaXMgYWxyZWFkeSB0
YWtlcyBmaWxsLW1vZGVzIGludG8gYWNjb3VudC4KLSAgICAgICAgICAgIG1fbGF5ZXIuZGF0YSgp
LT5tX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICht
X2xheWVyICYmIG1fbGF5ZXIuZGF0YSgpLT5tX2xheWVyKQotICAgICAgICAgICAgICAgIG1fbGF5
ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKG1fbGF5ZXIuZGF0YSgpLT5tX2xheWVyLT50cmFu
c2Zvcm0oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3NvdXJjZU1hdHJpeDsKLX07Ci0KLWNsYXNzIE9wYWNpdHlBbmltYXRpb25RdCA6IHB1YmxpYyBB
bmltYXRpb25RdDxxcmVhbD4gewotcHVibGljOgotICAgIE9wYWNpdHlBbmltYXRpb25RdChHcmFw
aGljc0xheWVyUXRJbXBsKiBsYXllciwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBRU3Ry
aW5nJiBuYW1lKQotICAgICAgICAgOiBBbmltYXRpb25RdDxxcmVhbD4obGF5ZXIsIHZhbHVlcywg
Ym94U2l6ZSwgYW5pbSwgbmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfk9wYWNpdHlBbmltYXRp
b25RdCgpCi0gICAgewotICAgICAgICBpZiAobV9maWxsc0ZvcndhcmRzKQotICAgICAgICAgICAg
c2V0Q3VycmVudFRpbWUoMSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBBbmltYXRlZFByb3BlcnR5
SUQgYW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlPcGFj
aXR5OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGcmFtZShjb25zdCBxcmVhbCYgZnJvbVZh
bHVlLCBjb25zdCBxcmVhbCYgdG9WYWx1ZSwgcXJlYWwgcHJvZ3Jlc3MpCi0gICAgewotICAgICAg
ICBxcmVhbCBvcGFjaXR5ID0gcUJvdW5kKHFyZWFsKDApLCBmcm9tVmFsdWUgKyAodG9WYWx1ZSAt
IGZyb21WYWx1ZSkgKiBwcm9ncmVzcywgcXJlYWwoMSkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgaGFjaywgZHVlIHRvIGEgcHJvYmFibGUgUUdyYXBoaWNzU2NlbmUgYnVnLgotICAg
ICAgICAvLyBXaXRob3V0IHRoaXMgdGhlIG9wYWNpdHkgY2hhbmdlIGRvZXNuJ3QgYWx3YXlzIGhh
dmUgaW1tZWRpYXRlIGVmZmVjdC4KLSAgICAgICAgaWYgKG1fbGF5ZXIuZGF0YSgpLT5zY2VuZSgp
ICYmICFtX2xheWVyLmRhdGEoKS0+b3BhY2l0eSgpICYmIG9wYWNpdHkpCi0gICAgICAgICAgICBt
X2xheWVyLmRhdGEoKS0+c2NlbmUoKS0+dXBkYXRlKCk7Ci0KLSAgICAgICAgbV9sYXllci5kYXRh
KCktPm1fbGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgIC8vIFdlIGZvcmNlIHRo
ZSBhY3R1YWwgb3BhY2l0eSBjaGFuZ2UsIG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpZ25vcmVkIGJl
Y2F1c2Ugb2YgdGhlIGFuaW1hdGlvbi4KLSAgICAgICAgbV9sYXllci5kYXRhKCktPnNldE9wYWNp
dHkob3BhY2l0eSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKFFBYnN0
cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUg
b2xkU3RhdGUpCi0gICAgewotICAgICAgICBBbmltYXRpb25RdDxxcmVhbD46OnVwZGF0ZVN0YXRl
KG5ld1N0YXRlLCBvbGRTdGF0ZSk7Ci0KLSAgICAgICAgaWYgKG1fbGF5ZXIpCi0gICAgICAgICAg
ICBtX2xheWVyLmRhdGEoKS0+bV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZyA9IChuZXdTdGF0ZSA9
PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcpOwotCi0gICAgICAgIC8vIElmIHN0b3BwZWQs
IHdlIHVwZGF0ZSB0aGUgb3BhY2l0eSBiYWNrIHRvIHRoZSBkZWZhdWx0LiBUaGlzIGFscmVhZHkg
dGFrZXMgZmlsbC1tb2RlcyBpbnRvIGFjY291bnQuCi0gICAgICAgIGlmIChuZXdTdGF0ZSA9PSBT
dG9wcGVkKQotICAgICAgICAgICAgaWYgKG1fbGF5ZXIgJiYgbV9sYXllci5kYXRhKCktPm1fbGF5
ZXIpCi0gICAgICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPnNldE9wYWNpdHkobV9sYXllci5k
YXRhKCktPm1fbGF5ZXItPm9wYWNpdHkoKSk7Ci0KLSAgICB9Ci19OwotCi1ib29sIEdyYXBoaWNz
TGF5ZXJRdDo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNv
bnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5n
JiBrZXlmcmFtZXNOYW1lLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoIWFuaW0tPmR1
cmF0aW9uKCkgfHwgIWFuaW0tPml0ZXJhdGlvbkNvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEFuaW1hdGlvblF0QmFzZSogbmV3QW5pbSA9IDA7Ci0KLSAgICAvLyBGaXhlZDog
d2UgbWlnaHQgYWxyZWFkeSBoYXZlIHRoZSBRdCBhbmltYXRpb24gb2JqZWN0IGFzc29jaWF0ZWQg
d2l0aCB0aGlzIFdlYkNvcmU6OkFuaW1hdGlvbiBvYmplY3QuCi0gICAgUUxpc3Q8UVdlYWtQb2lu
dGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQ7Ci0gICAgZm9yIChpdCA9IG1f
aW1wbC0+bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRpb25zLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgqaXQpIHsKLSAgICAgICAgICAgIEFuaW1hdGlvblF0
QmFzZSogY3VyQW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oaXQtPmRh
dGEoKSk7Ci0gICAgICAgICAgICBpZiAoY3VyQW5pbWF0aW9uICYmIGN1ckFuaW1hdGlvbi0+bV93
ZWJraXRBbmltYXRpb24gPT0gYW5pbQotICAgICAgICAgICAgICAgICYmIHZhbHVlcy5wcm9wZXJ0
eSgpID09IGN1ckFuaW1hdGlvbi0+YW5pbWF0ZWRQcm9wZXJ0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgbmV3QW5pbSA9IGN1ckFuaW1hdGlvbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbmV3QW5pbSkgewotICAgICAg
ICBzd2l0Y2ggKHZhbHVlcy5wcm9wZXJ0eSgpKSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6Ci0gICAgICAgICAgICBuZXdBbmltID0gbmV3IE9wYWNpdHlBbmltYXRpb25R
dChtX2ltcGwuZ2V0KCksIHZhbHVlcywgYm94U2l6ZSwgYW5pbSwga2V5ZnJhbWVzTmFtZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtOgotICAgICAgICAgICAgbmV3QW5pbSA9IG5ldyBUcmFuc2Zvcm1BbmltYXRpb25RdCht
X2ltcGwuZ2V0KCksIHZhbHVlcywgYm94U2l6ZSwgYW5pbSwga2V5ZnJhbWVzTmFtZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIG1ha2Ugc3VyZSBXZWJDb3JlOjpBbmltYXRp
b24gYW5kIFFBbmltYXRpb24gYXJlIG9uIHRoZSBzYW1lIHRlcm1zLgotICAgICAgICBuZXdBbmlt
LT5zZXRMb29wQ291bnQoYW5pbS0+aXRlcmF0aW9uQ291bnQoKSk7Ci0gICAgICAgIG5ld0FuaW0t
Pm1fZmlsbHNGb3J3YXJkcyA9IGFuaW0tPmZpbGxzRm9yd2FyZHMoKTsKLSAgICAgICAgbV9pbXBs
LT5tX2FuaW1hdGlvbnMuYXBwZW5kKFFXZWFrUG9pbnRlcjxRQWJzdHJhY3RBbmltYXRpb24+KG5l
d0FuaW0pKTsKLSAgICAgICAgUU9iamVjdDo6Y29ubmVjdCgmbV9pbXBsLT5tX3N1c3BlbmRUaW1l
ciwgU0lHTkFMKHRpbWVvdXQoKSksIG5ld0FuaW0sIFNMT1QocmVzdW1lKCkpKTsKLSAgICB9Ci0K
LSAgICAvLyBGbHVzaCBub3cgdG8gYXZvaWQgZmxpY2tlci4KLSAgICBtX2ltcGwtPmZsdXNoQ2hh
bmdlcyhmYWxzZSk7Ci0KLSAgICAvLyBRaGVuIGZpbGwtbW9kZSBpcyBiYWNrd2FyZHMvYm90aCwg
d2Ugc2V0IHRoZSB2YWx1ZSB0byAwIGJlZm9yZSB0aGUgZGVsYXkgdGFrZXMgcGxhY2UuCi0gICAg
aWYgKGFuaW0tPmZpbGxzQmFja3dhcmRzKCkpCi0gICAgICAgIG5ld0FuaW0tPnNldEN1cnJlbnRU
aW1lKDApOwotCi0gICAgbmV3QW5pbS0+c3RhcnQoKTsKLQotICAgIC8vIFdlIHN5bmNocm9uaXpl
IHRoZSBhbmltYXRpb24ncyBjbG9jayB0byBXZWJDb3JlJ3MgdGltZU9mZnNldC4KLSAgICBuZXdB
bmltLT5zZXRDdXJyZW50VGltZSh0aW1lT2Zmc2V0ICogMTAwMCk7Ci0KLSAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIG1hbmFnZSB0aGUgYW5pbWF0aW9uIG9iamVjdCdzIGxpZmVjeWNsZToKLSAgICAv
LyBXZWJDb3JlIHdvdWxkIGNhbGwgcmVtb3ZlQW5pbWF0aW9ucyB3aGVuIGl0J3MgdGltZSB0byBk
ZWxldGUuCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnJl
bW92ZUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShBbmltYXRlZFByb3BlcnR5SUQgaWQpCi17Ci0gICAg
UUxpc3Q8UVdlYWtQb2ludGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQ7Ci0g
ICAgZm9yIChpdCA9IG1faW1wbC0+bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+
bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghKCppdCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBBbmltYXRpb25RdEJhc2UqIGFuaW0gPSBzdGF0aWNf
Y2FzdDxBbmltYXRpb25RdEJhc2UqPihpdC0+ZGF0YSgpKTsKLSAgICAgICAgaWYgKGFuaW0gJiYg
YW5pbS0+bV93ZWJraXRQcm9wZXJ0eUlEID09IGlkKSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHN0b3AgdGhlIGFuaW1hdGlvbiByaWdodCBhd2F5LCBvciBpdCBtaWdodCBmbGlja2VyIGJl
Zm9yZSBpdCdzIGRlbGV0ZWQuCi0gICAgICAgICAgICBhbmltLT5zdG9wKCk7Ci0gICAgICAgICAg
ICBhbmltLT5kZWxldGVMYXRlcigpOwotICAgICAgICAgICAgaXQgPSBtX2ltcGwtPm1fYW5pbWF0
aW9ucy5lcmFzZShpdCk7Ci0gICAgICAgICAgICAtLWl0OwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVtb3ZlQW5pbWF0aW9uc0ZvcktleWZyYW1lcyhjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgUUxpc3Q8UVdlYWtQb2ludGVyPFFBYnN0cmFjdEFuaW1h
dGlvbj4gPjo6aXRlcmF0b3IgaXQ7Ci0gICAgZm9yIChpdCA9IG1faW1wbC0+bV9hbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmICghKCppdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBBbmltYXRp
b25RdEJhc2UqIGFuaW0gPSBzdGF0aWNfY2FzdDxBbmltYXRpb25RdEJhc2UqPihpdC0+ZGF0YSgp
KTsKLSAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlmcmFtZXNOYW1lID09IFFTdHJpbmco
bmFtZSkpIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RvcCB0aGUgYW5pbWF0aW9uIHJp
Z2h0IGF3YXksIG9yIGl0IG1pZ2h0IGZsaWNrZXIgYmVmb3JlIGl0J3MgZGVsZXRlZC4KLSAgICAg
ICAgICAgIGFuaW0tPnN0b3AoKTsKLSAgICAgICAgICAgIGFuaW0tPmRlbGV0ZUxhdGVyKCk7Ci0g
ICAgICAgICAgICBpdCA9IG1faW1wbC0+bV9hbmltYXRpb25zLmVyYXNlKGl0KTsKLSAgICAgICAg
ICAgIC0taXQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllclF0Ojpw
YXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQotewot
ICAgIFFMaXN0PFFXZWFrUG9pbnRlcjxRQWJzdHJhY3RBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0
OwotICAgIGZvciAoaXQgPSBtX2ltcGwtPm1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBtX2lt
cGwtPm1fYW5pbWF0aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoISgqaXQpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQW5pbWF0aW9uUXRCYXNlKiBhbmltID0gc3Rh
dGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oaXQtPmRhdGEoKSk7Ci0gICAgICAgIGlmIChhbmlt
ICYmIGFuaW0tPm1fa2V5ZnJhbWVzTmFtZSA9PSBRU3RyaW5nKG5hbWUpKSB7Ci0gICAgICAgICAg
ICAvLyB3ZSBzeW5jaHJvbml6ZSB0aGUgYW5pbWF0aW9uJ3MgY2xvY2sgdG8gV2ViQ29yZSdzIHRp
bWVPZmZzZXQKLSAgICAgICAgICAgIGFuaW0tPnNldEN1cnJlbnRUaW1lKHRpbWVPZmZzZXQgKiAx
MDAwKTsKLSAgICAgICAgICAgIGFuaW0tPnBhdXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllclF0OjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKLXsK
LSAgICBpZiAobV9pbXBsLT5tX3N1c3BlbmRUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIG1f
aW1wbC0+bV9zdXNwZW5kVGltZXIuc3RvcCgpOwotICAgICAgICBtX2ltcGwtPm1fc3VzcGVuZFRp
bWVyLnN0YXJ0KHRpbWUgKiAxMDAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBRTGlzdDxRV2Vh
a1BvaW50ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdDsKLSAgICAgICAgZm9y
IChpdCA9IG1faW1wbC0+bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmlt
YXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoUUFic3RyYWN0QW5pbWF0aW9u
KiBhbmltID0gaXQtPmRhdGEoKSkKLSAgICAgICAgICAgICAgICBhbmltLT5wYXVzZSgpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9u
cygpCi17Ci0gICAgaWYgKG1faW1wbC0+bV9zdXNwZW5kVGltZXIuaXNBY3RpdmUoKSkgewotICAg
ICAgICBtX2ltcGwtPm1fc3VzcGVuZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgUUxpc3Q8UVdlYWtQ
b2ludGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQ7Ci0gICAgICAgIGZvciAo
aXQgPSBtX2ltcGwtPm1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBtX2ltcGwtPm1fYW5pbWF0
aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKFFBYnN0cmFjdEFuaW1hdGlvbiog
YW5pbSA9IGl0LT5kYXRhKCkpCi0gICAgICAgICAgICAgICAgYW5pbS0+cmVzdW1lKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBRVF9OT19BTklNQVRJT04KLX0KLQotI2luY2x1
ZGUgPEdyYXBoaWNzTGF5ZXJRdC5tb2M+Ci0KLQotI2VuZGlmIC8vIFFUX05PX0dSQVBISUNTVklF
VwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NMYXllclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0xheWVyUXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyYmRhZTY4ZDMzMDg1
YTMxYmRhZjllYzliZWIwY2YzMjFjOWE5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSovCi0KLSNpZm5kZWYgR3JhcGhpY3NMYXllclF0X2gKLSNkZWZpbmUgR3JhcGhpY3NMYXll
clF0X2gKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xh
eWVyQ2xpZW50LmgiCi0KLSNpZiAhZGVmaW5lZChRVF9OT19HUkFQSElDU1ZJRVcpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NMYXllclF0SW1wbDsKLQotY2xhc3MgR3Jh
cGhpY3NMYXllclF0IDogcHVibGljIEdyYXBoaWNzTGF5ZXIgewotICAgIGZyaWVuZCBjbGFzcyBH
cmFwaGljc0xheWVyUXRJbXBsOwotCi1wdWJsaWM6Ci0gICAgR3JhcGhpY3NMYXllclF0KEdyYXBo
aWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyUXQoKTsKLQotICAg
IC8vIHJlaW1wcyBmcm9tIEdyYXBoaWNzTGF5ZXIuaAotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdmly
dHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCBpbmRleCk7Ci0gICAgdmlydHVh
bCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIq
IHNpYmxpbmcpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIq
IGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFj
ZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIGIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1Rv
Qm91bmRzKGJvb2wgYik7Ci0gICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sIGIp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VW
aXNpYmlsaXR5KGJvb2wgYik7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3Bh
Y2l0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiBy
KTsKLSNpZm5kZWYgUVRfTk9fQU5JTUFUSU9OCi0gICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVzTmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb25zRm9yUHJvcGVydHkoQW5pbWF0
ZWRQcm9wZXJ0eUlEKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0ZvcktleWZy
YW1lcyhjb25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBwYXVz
ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOwotICAg
IHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0jZW5kaWYgLy8gUVRfTk9fQU5JTUFU
SU9OCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBv
cmllbnRhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0KTsK
LSAgICB2aXJ0dWFsIGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLXByaXZh
dGU6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwotCi0gICAgT3duUHRyPEdy
YXBoaWNzTGF5ZXJRdEltcGw+IG1faW1wbDsKLX07Ci0KLX0KLSNlbmRpZgotI2VuZGlmIC8vIEdy
YXBoaWNzTGF5ZXJRdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKaW5kZXggNzk0YmMxMDM2M2M5
N2EzMzM5MmQ3YmU1YWM3N2U2ODNkZDgwZTdhNy4uNWFkNDE4YzIzNTA5ZmFiZjg5MTA3NjAxYjg5
OGQ5NmU2ZGFlZWZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApAQCAtNTIsNyArNTIsNyBA
QAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgInRleG1hcC9U
ZXh0dXJlTWFwcGVyLmgiCiAjZW5kaWYKIApAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUXQ6OnJlcGFpbnQoKQogCiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIEJp
dG1hcFRleHR1cmUqKSBjb25zdAogewogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQg
PSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCmlu
ZGV4IGExMjllNWRlNTE5NjYzYjA1ZWI0ZWFjZWMyMGZlNzJkMTYyOGM2ZDYuLjBlMmNmMGI5MjA4
N2JkOWUwZTEyZTFmZWVhNDE1NmU2OTU0ZWE5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaApAQCAt
MzEsMTQgKzMxLDE0IEBAIGNsYXNzIFFHcmFwaGljc1ZpZGVvSXRlbTsKIGNsYXNzIFFHcmFwaGlj
c1NjZW5lOwogUVRfRU5EX05BTUVTUEFDRQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF0IDogcHVibGljIFFPYmplY3QsIHB1
YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgICAgICwgcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCiAj
ZW5kaWYKIHsKQEAgLTEwMSw3ICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIC8vIHdoZXRoZXIgYWNj
ZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgbWVkaWEgZW5naW5lIGZvciB0
aGUgY3VycmVudCBtZWRpYS4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJl
bmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgLy8gY2FsbGVkIHdoZW4gdGhl
IHJlbmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJl
bmRlcmluZyBtb2RlLgpAQCAtMTA5LDExICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ29uc3Qt
Y2FzdGluZyBoZXJlIGlzIHNhZmUsIHNpbmNlIGFsbCBvZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllcidzIGZ1bmN0aW9ucyBhcmUgY29uc3QuZwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBU
ZXh0dXJlKiBtYXNrKSBjb25zdDsKLSNlbHNlCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNj
ZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
dm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIHsgfQotICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSNlbmRp
ZgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4IGJl
ZTdmNjJmYzRmYmMzYjJlOTk5NTcxNThjY2NiMjNlMDczOWE3YjQuLjg5MWQ0MmI5Nzg5YmJjZDhi
Yjc5ZTU5NmM3ZDJiN2VhNjE5NTFjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luVmlld1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1Bs
dWdpblZpZXdRdC5jcHAKQEAgLTE0MiwzMSArMTQyLDYgQEAgUVdlYlBhZ2VDbGllbnQqIFBsdWdp
blZpZXc6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGhvc3RXaW5kb3ct
PnBsYXRmb3JtUGFnZUNsaWVudCgpOwogfQogCi0jaWYgIUhBVkUoUVQ1KSAmJiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0vLyBRdCdzIEdyYXBoaWNzTGF5ZXIgKEdyYXBoaWNzTGF5ZXJR
dCkgcmVxdWlyZXMgbGF5ZXJzIHRvIGJlIFFHcmFwaGljc1dpZGdldHMKLWNsYXNzIFBsdWdpbkdy
YXBoaWNzTGF5ZXJRdCA6IHB1YmxpYyBRR3JhcGhpY3NXaWRnZXQgewotcHVibGljOgotICAgIFBs
dWdpbkdyYXBoaWNzTGF5ZXJRdChQbHVnaW5WaWV3KiB2aWV3KSA6IG1fdmlldyh2aWV3KSB7IH0K
LSAgICB+UGx1Z2luR3JhcGhpY3NMYXllclF0KCkgeyB9Ci0KLSAgICB2b2lkIHBhaW50KFFQYWlu
dGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdp
ZGdldCogd2lkZ2V0ID0gMCkKLSAgICB7Ci0gICAgICAgIFFfVU5VU0VEKHdpZGdldCk7Ci0gICAg
ICAgIG1fdmlldy0+cGFpbnRVc2luZ1hQaXhtYXAocGFpbnRlciwgb3B0aW9uLT5leHBvc2VkUmVj
dC50b1JlY3QoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFBsdWdpblZpZXcqIG1fdmlldzsK
LX07Ci0KLWJvb2wgUGx1Z2luVmlldzo6c2hvdWxkVXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNs
aWVudCgpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLSAgICAgICAgICAgJiYgbV9w
YXJlbnRGcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpCi0gICAgICAgICAgICYmIG1fcGFyZW50RnJh
bWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsK
LX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7CiAg
ICAgaWYgKCFwYXJlbnQoKSkKQEAgLTgwMSwxMyArNzc2LDYgQEAgYm9vbCBQbHVnaW5WaWV3Ojpw
bGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJv
ciogcmUKIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJF
X01BUFBFUikKLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1M
YXllci0+dXBkYXRlKFFSZWN0RihyZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQogI2lmICFIQVZFKFFUNSkgLy8gV2luZG93ZWQgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdp
dGggUXQ1IHlldC4KICAgICBpZiAobV9pc1dpbmRvd2VkKSB7CiAgICAgICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CkBAIC05NzMsMTQgKzk0MSw2IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCgpCiAgICAgewogICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKICAgICAgICAg
bV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOwotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiAhVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgICAgICBpZiAoc2hv
dWxkVXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Ci0gICAgICAgICAgICBtX3BsYXRmb3Jt
TGF5ZXIgPSBhZG9wdFB0cihuZXcgUGx1Z2luR3JhcGhpY3NMYXllclF0KHRoaXMpKTsKLSAgICAg
ICAgICAgIC8vIFRyaWdnZXIgbGF5ZXIgY29tcHV0YXRpb24gaW4gUmVuZGVyTGF5ZXJDb21wb3Np
dG9yCi0gICAgICAgICAgICBtX2VsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOwotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAKICAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIHRoZSBoZWlnaHQgYXJlIG5vdCB6ZXJvIHdlIHNob3cgdGhlIFBsdWdpblZpZXcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IDVmZGM5MWI3
MWY4OWQ3YTQwN2I4MGNhYTllYjViMjE0NzZhNGI1MTYuLjM0M2MyYTE2NjFmMGI2YWRjZjFjZmI4
NTYwYzNjODdlYjM4NGEwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFw
aGljc3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZp
ZXcuY3BwCkBAIC0yOTYsMTEgKzI5Niw3IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6cGFpbnQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSoKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKLSAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5k
ZXIocGFpbnRlciwgZC0+b3ZlcmxheSgpID8gUVdlYkZyYW1lOjpDb250ZW50c0xheWVyIDogUVdl
YkZyYW1lOjpBbGxMYXllcnMsIG9wdGlvbi0+ZXhwb3NlZFJlY3QudG9BbGlnbmVkUmVjdCgpKTsK
LSNlbHNlCiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIFFXZWJGcmFt
ZTo6QWxsTGF5ZXJzLCBvcHRpb24tPmV4cG9zZWRSZWN0LnRvUmVjdCgpKTsKLSNlbmRpZgogICAg
IHBhaW50ZXItPnNldFJlbmRlckhpbnRzKG9sZEhpbnRzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAKaW5kZXggMDM2MDYzODIxNTBlOTcxZWU2YzExOTQ2ZThmNGE3NmU1YjRhNDcz
My4uMjFiM2EwYjcwMjQwYTIzMWZiMzhkMDU1ZWM2MGE0NjZmMjZlYTFjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0zMjIsMTQgKzMyMiwxNCBAQCB2b2lkIFFXZWJGcmFtZVBy
aXZhdGU6OnJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbgogICAgICAgICBwYWludGVyLT5yZXN0b3JlKCk7CiAgICAgfQogCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHJlbmRlckNvbXBvc2l0ZWRMYXllcnMoY29udGV4
dCwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSk7CiAgICAgcmVuZGVyRnJhbWVFeHRyYXMo
Y29udGV4dCwgUUZsYWdzPFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXI+KFFXZWJGcmFtZTo6U2Nyb2xs
QmFyTGF5ZXIpIHwgUVdlYkZyYW1lOjpQYW5JY29uTGF5ZXIsIGNsaXApOwogI2VuZGlmCiB9CiAj
ZW5kaWYKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgUVdlYkZyYW1l
UHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNsaXApCiB7CiAgICAgaWYgKCFyb290VGV4dHVyZU1hcHBlckxheWVy
IHx8ICF0ZXh0dXJlTWFwcGVyKQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRRmxh
Z3M8UVdlCiAKICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgfQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgcmVuZGVyQ29tcG9zaXRlZExh
eWVycyhjb250ZXh0LCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpKTsKICNlbmRpZgogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDRjZmYwOGQ4YWEyZmZlMTc3YzZm
YTM4NTg2NDcxMDg4OGNkYTNjYjEuLjI3NjJjMmJlNzdlYzk0NWVmYWU2OWMwNDIzZTVlMjc0MmU0
Nzk2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysr
IGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMzksNyArMzksNyBAQCB1
c2luZyBRVE1fTkFNRVNQQUNFOjpRT3JpZW50YXRpb25TZW5zb3I7CiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCiAjZW5kaWYK
IApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRy
dWUpCiAgICAgICAgICwgbWFyZ2luV2lkdGgoLTEpCiAgICAgICAgICwgbWFyZ2luSGVpZ2h0KC0x
KQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgLCByb290VGV4dHVy
ZU1hcHBlckxheWVyKDApCiAjZW5kaWYKICAgICAgICAge30KQEAgLTEwNCw3ICsxMDQsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7CiAjZW5kaWYKIAotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHJlbmRlckNvbXBvc2l0ZWRMYXllcnMo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7
CiAjZW5kaWYKICAgICB2b2lkIHJlbmRlckZyYW1lRXh0cmFzKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCosIFFGbGFnczxRV2ViRnJhbWU6OlJlbmRlckxheWVyPiwgY29uc3QgUVJlZ2lvbiYgY2xp
cCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5n
OwogICAgIGludCBtYXJnaW5XaWR0aDsKICAgICBpbnQgbWFyZ2luSGVpZ2h0OwotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
IHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI+IHRleHR1cmVNYXBwZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3Mu
Y3BwCmluZGV4IGE1NDBkYzM1ZjE5MTM4Mzc2YTMyOWY1ODg3OGQzMTExMDA4ZWMwMWIuLjUzNThk
ZDIwNDdhMWZiNTljMDEzMzJjODhmNGIzYmVhYjc0OWExMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnNldHRpbmdzLmNwcApAQCAtMTU2LDExICsxNTYsOSBAQCB2b2lkIFFXZWJTZXR0aW5nc1By
aXZhdGU6OmFwcGx5KCkKICAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKHZhbHVlKTsKICAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3IzRFRyYW5zZm9ybXNFbmFibGVkKHZhbHVlKTsKICAgICAgICAgc2V0dGluZ3MtPnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKHZhbHVlKTsKLSNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yVmlkZW9FbmFibGVkKGZhbHNlKTsKICAgICAgICAgc2V0dGluZ3MtPnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZChmYWxzZSk7CiAjZW5kaWYKLSNlbmRp
ZgogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFX
ZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAK
aW5kZXggOTNiZTVhNWUyZWJkNGMyMDAxMDVlZGJmNzM2YzQ4YTA5ZWUzYWU3MS4uZDUwZWQxMzhj
MDQwZjJiMzk4YTlkYjI4MzQwY2RjNGFkNjc5OGUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAtNjQsNyArNjQsNyBAQCBzdGF0
aWMgdm9pZCBjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJvbVdpZGdldChRV2lkZ2V0
KiB3aWRnZXQsIFBsYXRmb3JtRwogfQogI2VuZGlmCiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgInRleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNlbmRpZgpAQCAtODUsNyArODUsNyBAQCBRV2luZG93KiBR
V2ViUGFnZUNsaWVudDo6b3duZXJXaW5kb3coKSBjb25zdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBUZXh0dXJlTWFwcGVyTGF5ZXJD
bGllbnRRdDo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQoUVdlYkZyYW1lKiBmcmFtZSwgR3Jh
cGhpY3NMYXllciogbGF5ZXIpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9yb290R3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoMCkpCkBAIC0yNDksMTMgKzI0OSw2IEBA
IHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OmNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzCiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldCgpCiB7CiAgICAgZGVsZXRlIG92ZXJsYXk7Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiAhVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlm
ICghcm9vdEdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyB3ZSBkb24ndCBu
ZWVkIHRvIGRlbGV0ZSB0aGUgcm9vdCBncmFwaGljcyBsYXllci4gVGhlIGxpZmVjeWNsZSBpcyBt
YW5hZ2VkIGluIEdyYXBoaWNzTGF5ZXJRdC5jcHAuCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0
YSgpLT5zZXRQYXJlbnRJdGVtKDApOwotICAgIHZpZXctPnNjZW5lKCktPnJlbW92ZUl0ZW0ocm9v
dEdyYXBoaWNzTGF5ZXIuZGF0YSgpKTsKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6OnNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Nj
cm9sbCkKQEAgLTI2Nyw2MiArMjYwLDI2IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgdmlldy0+dXBkYXRlKGRp
cnR5UmVjdCk7CiAKLSAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKICAgICBpZiAob3Zlcmxh
eSkKICAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsKLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmICFVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgc3lu
Y0xheWVycygpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKLXsKLSAgICAvLyBXZSBkb24ndCB1c2UgYW4gb3Zlcmxh
eSB3aXRoIFRleHR1cmVNYXBwZXIuIEluc3RlYWQsIHRoZSBvdmVybGF5IGlzIGRyYXduIGluc2lk
ZSBRV2ViRnJhbWUuCi0jaWYgIVVTRShURVhUVVJFX01BUFBFUikKLSAgICBib29sIHVzZU92ZXJs
YXkgPSBmYWxzZTsKLSAgICBpZiAoIXZpZXdSZXNpemVzVG9Db250ZW50cykgewotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgdXNlT3ZlcmxheSA9IHVzZU92ZXJsYXkg
fHwgcm9vdEdyYXBoaWNzTGF5ZXI7Ci0jZW5kaWYKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgdXNlT3ZlcmxheSA9IHVzZU92ZXJsYXkgfHwgUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnRpbGVkQmFja2luZ1N0b3JlKCk7Ci0jZW5kaWYKLSAg
ICB9Ci0gICAgaWYgKHVzZU92ZXJsYXkgPT0gISFvdmVybGF5KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAodXNlT3ZlcmxheSkgewotICAgICAgICBvdmVybGF5ID0gbmV3IFFHcmFwaGljc0l0
ZW1PdmVybGF5KHZpZXcsIHBhZ2UpOwotICAgICAgICBvdmVybGF5LT5zZXRaVmFsdWUoT3Zlcmxh
eVpWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIG92ZXJsYXkg
bWlnaHQgYmUgZG9uZSBpbnNpZGUgcGFpbnQgZXZlbnRzLgotICAgICAgICBvdmVybGF5LT5kZWxl
dGVMYXRlcigpOwotICAgICAgICBvdmVybGF5ID0gMDsKLSAgICB9Ci0jZW5kaWYgLy8gIVVTRShU
RVhUVVJFX01BUFBFUikKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZv
aWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycygpCiB7Ci0jaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQogICAgIGlmIChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQpCiAgICAgICAg
IFRleHR1cmVNYXBwZXJMYXllckNsaWVudC0+c3luY1Jvb3RMYXllcigpOwotI2VuZGlmCiAKICAg
ICBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogCi0jaWYgVVNFKFRFWFRVUkVf
TUFQUEVSKQogICAgIGlmICghVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5yb290TGF5ZXIoKS0+ZGVz
Y2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSAmJiAhc3luY1RpbWVyLmlzQWN0
aXZlKCkpCiAgICAgICAgIHN5bmNUaW1lci5zdGFydE9uZVNob3QoMS4wIC8gNjAuMCk7CiAgICAg
dXBkYXRlKHZpZXctPmJvdW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7Ci0jZW5kaWYKIH0K
IAotI2lmIFVTRShURVhUVVJFX01BUFBFUikKIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYg
KGxheWVyKSB7CkBAIC0zMzksMjQgKzI5Niw2IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgfQog
ICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudC5jbGVhcigpOwogfQotI2Vsc2UKLXZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCi17Ci0gICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7Ci0gICAgICAgIHJvb3RH
cmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsKLSAgICAgICAgdmlldy0+c2Nl
bmUoKS0+cmVtb3ZlSXRlbShyb290R3JhcGhpY3NMYXllci5kYXRhKCkpOwotICAgICAgICBRV2Vi
RnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgIH0KLQotICAgIHJvb3RHcmFwaGlj
c0xheWVyID0gbGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogMDsKLQotICAgIGlmIChy
b290R3JhcGhpY3NMYXllcikgewotICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNl
dFBhcmVudEl0ZW0odmlldyk7Ci0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0
WlZhbHVlKFJvb3RHcmFwaGljc0xheWVyWlZhbHVlKTsKLSAgICB9Ci0gICAgY3JlYXRlT3JEZWxl
dGVPdmVybGF5KCk7Ci19Ci0jZW5kaWYKIAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IGQ4YWUwMjQzZWY4MTE3MDc0Njg5
OTI3Zjc3ZTQwMzk0YzRhNjM3YTguLjk0YTA3MDM2MWQxODc1ZDg0YmMyZDI4YmRlY2E2ODY5NTY4
M2ZlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuaApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRR
dCB7CiBwdWJsaWM6CiAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQoUVdlYkZyYW1lKiwg
R3JhcGhpY3NMYXllciopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgUGFnZUNsaWVu
dFFXaWRnZXQoUVdpZGdldCogbmV3VmlldywgUVdlYlBhZ2UqIG5ld1BhZ2UpCiAgICAgICAgIDog
dmlldyhuZXdWaWV3KQogICAgICAgICAsIHBhZ2UobmV3UGFnZSkKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgICAgICwgc3luY1RpbWVyKHRoaXMsICZQYWdlQ2xpZW50UVdp
ZGdldDo6c3luY0xheWVycykKICNlbmRpZgogICAgIHsKQEAgLTEwNywxOSArMTA3LDE5IEBAIHB1
YmxpYzoKICAgICBRV2lkZ2V0KiB2aWV3OwogICAgIFFXZWJQYWdlKiBwYWdlOwogCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJv
b2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoVGltZXI8UGFnZUNsaWVudFFX
aWRnZXQ+Kik7CiAjZW5kaWYKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KICNlbHNlCiAgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+IHN5bmNU
aW1lcjsKICAgICBPd25QdHI8VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ+IFRleHR1cmVNYXBw
ZXJMYXllckNsaWVudDsKICNlbmRpZgpAQCAtMjEyLDggKzIxMiw2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUdyYXBo
aWNzU3VyZmFjZTNEKik7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlT3JEZWxldGVPdmVybGF5
KCk7Ci0KICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICB2b2lkIHVwZGF0ZVRpbGVk
QmFja2luZ1N0b3JlU2NhbGUoKTsKICAgICB2aXJ0dWFsIFFSZWN0RiBncmFwaGljc0l0ZW1WaXNp
YmxlUmVjdCgpIGNvbnN0OwpAQCAtMjM2LDExICsyMzQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB2
aWV3UmVzaXplc1RvQ29udGVudHM7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTGF5ZXJD
bGllbnRRdD4gVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50OwotI2Vsc2UKLSAgICBRUG9pbnRlcjxR
R3JhcGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xheWVyOwotI2VuZGlmCiAgICAgLy8gd2UgaGF2
ZSB0byBmbHVzaCBxdWl0ZSBvZnRlbiwgc28gd2UgdXNlIGEgbWV0YS1tZXRob2QgaW5zdGVhZCBv
ZiBRVGltZXI6OnNpbmdsZVNob3QgZm9yIHB1dHRpbmcgdGhlIGV2ZW50IGluIHRoZSBxdWV1ZQog
ICAgIFRpbWVyPFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ+IHN5bmNUaW1lcjsKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>