<?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>65305</bug_id>
          
          <creation_ts>2011-07-28 00:18:35 -0700</creation_ts>
          <short_desc>[EFL] Move ewk_view API documentation to the header file</short_desc>
          <delta_ts>2011-08-01 03:02:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>443377</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-07-28 00:18:35 -0700</bug_when>
    <thetext>There are three arguments for this:
1. Dev package will contain all API description so developers
   using webkit-efl-dev package don&apos;t need to check source code of cpp
   files when they want to know how to use the given API.
2. Doxygen might generate documentation just using webkit-ef-dev package
   so there will be no need to have WebKit sources.
3. It will be consistent with structures descriptions.


This patch only moves API documentation, it doesn&apos;t modify anything else.

If you agree with this idea I will prepare another patches for other ewk files soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443378</commentid>
    <comment_count>1</comment_count>
      <attachid>102232</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-07-28 00:23:08 -0700</bug_when>
    <thetext>Created attachment 102232
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443423</commentid>
    <comment_count>2</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-07-28 05:04:53 -0700</bug_when>
    <thetext>The patch itself looks OK to me, but I have a few comments:

(In reply to comment #0)
&gt; There are three arguments for this:
&gt; 1. Dev package will contain all API description so developers
&gt;    using webkit-efl-dev package don&apos;t need to check source code of cpp
&gt;    files when they want to know how to use the given API.
&gt; 2. Doxygen might generate documentation just using webkit-ef-dev package
&gt;    so there will be no need to have WebKit sources.

Mentioning a package by name like that assumes it will always have that name in all distributions and whatnot. Personally, I would be more generic and just say that it is easier to check the apidox in the header, as people using webkit-efl from packages probably won&apos;t have the C files with them and the doxygen documentation can be generated from the headers without the need for the whole source files.

&gt; If you agree with this idea I will prepare another patches for other ewk files soon.

Do you mean that there are other patches which move documentation in ewk? If so, wouldn&apos;t it be better to do that all at once?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443431</commentid>
    <comment_count>3</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-07-28 05:19:58 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; The patch itself looks OK to me, but I have a few comments:
&gt; 
&gt; (In reply to comment #0)
&gt; &gt; There are three arguments for this:
&gt; &gt; 1. Dev package will contain all API description so developers
&gt; &gt;    using webkit-efl-dev package don&apos;t need to check source code of cpp
&gt; &gt;    files when they want to know how to use the given API.
&gt; &gt; 2. Doxygen might generate documentation just using webkit-ef-dev package
&gt; &gt;    so there will be no need to have WebKit sources.
&gt; 
&gt; Mentioning a package by name like that assumes it will always have that name in all distributions and whatnot. Personally, I would be more generic and just say that it is easier to check the apidox in the header, as people using webkit-efl from packages probably won&apos;t have the C files with them and the doxygen documentation can be generated from the headers without the need for the whole source files.

Ok, I will fix a description.

&gt; 
&gt; &gt; If you agree with this idea I will prepare another patches for other ewk files soon.
&gt; 
&gt; Do you mean that there are other patches which move documentation in ewk? If so, wouldn&apos;t it be better to do that all at once?

Yes, there are, but I wanted to avoid that huge patch. Besides currently only ewk_view is adjusted to EFL&apos;s style. If other files are ready I will move documentation for them. I suggest to submit three patches for this:
1. ewk_view
2. ewk_frame
3. other ewk_files
Is it ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443446</commentid>
    <comment_count>4</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-07-28 05:43:43 -0700</bug_when>
    <thetext>If it&apos;s just moving comments around, I wouldn&apos;t mind a big patch that does it all. But if you prefer to split it, I&apos;m fine with that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443464</commentid>
    <comment_count>5</comment_count>
      <attachid>102253</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-07-28 06:34:48 -0700</bug_when>
    <thetext>Created attachment 102253
updated patch

fix description in ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443469</commentid>
    <comment_count>6</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-07-28 06:50:28 -0700</bug_when>
    <thetext>r+ from my side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443852</commentid>
    <comment_count>7</comment_count>
      <attachid>102253</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-07-29 01:58:51 -0700</bug_when>
    <thetext>Comment on attachment 102253
updated patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443854</commentid>
    <comment_count>8</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-07-29 02:00:33 -0700</bug_when>
    <thetext>Hello tkent. Could you please review this patch ? Sorry for adding CC. I think you can review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443862</commentid>
    <comment_count>9</comment_count>
      <attachid>102253</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-29 02:59:22 -0700</bug_when>
    <thetext>Comment on attachment 102253
updated patch

Clearing flags on attachment: 102253

Committed r91981: &lt;http://trac.webkit.org/changeset/91981&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443863</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-29 02:59:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444620</commentid>
    <comment_count>11</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-08-01 03:00:06 -0700</bug_when>
    <thetext>Hello tkent,

I&apos;ve added bug which moves remaining API documentaion to the header files. Could you review this patch, please? https://bugs.webkit.org/show_bug.cgi?id=65305

It may avoid merge conflicts if the patch will be commited asap. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444621</commentid>
    <comment_count>12</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-08-01 03:02:16 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Hello tkent,
&gt; 
&gt; I&apos;ve added bug which moves remaining API documentaion to the header files. Could you review this patch, please? https://bugs.webkit.org/show_bug.cgi?id=65305
&gt; 
&gt; It may avoid merge conflicts if the patch will be commited asap. Thanks.

I am sorry for mistake, correct URL of bug https://bugs.webkit.org/show_bug.cgi?id=65373</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102232</attachid>
            <date>2011-07-28 00:23:08 -0700</date>
            <delta_ts>2011-07-28 06:34:48 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>ewk_view_move_doc_to_header.patch</filename>
            <type>text/plain</type>
            <size>107980</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA3ODIzNTk1Li5kYzI2MDQ0IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTEtMDctMjcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWpr
b3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gTW92ZSBld2tfdmlldyBBUEkgZG9j
dW1lbnRhdGlvbiB0byB0aGUgaGVhZGVyIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzA1CisKKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIGFy
Z3VtZW50cyBmb3IgdGhpczoKKyAgICAgICAgMS4gRGV2IHBhY2thZ2Ugd2lsbCBjb250YWluIGFs
bCBBUEkgZGVzY3JpcHRpb24gc28gZGV2ZWxvcGVycworICAgICAgICAgICB1c2luZyB3ZWJraXQt
ZWZsLWRldiBwYWNrYWdlIGRvbid0IG5lZWQgdG8gY2hlY2sgc291cmNlIGNvZGUgb2YgY3BwCisg
ICAgICAgICAgIGZpbGVzIHdoZW4gdGhleSB3YW50IHRvIGtub3cgaG93IHRvIHVzZSB0aGUgZ2l2
ZW4gQVBJLgorICAgICAgICAyLiBEb3h5Z2VuIG1pZ2h0IGdlbmVyYXRlIGRvY3VtZW50YXRpb24g
anVzdCB1c2luZyB3ZWJraXQtZWYtZGV2IHBhY2thZ2UKKyAgICAgICAgICAgc28gdGhlcmUgd2ls
bCBiZSBubyBuZWVkIHRvIGhhdmUgV2ViS2l0IHNvdXJjZXMuCisgICAgICAgIDMuIEl0IHdpbGwg
YmUgY29uc2lzdGVudCB3aXRoIHN0cnVjdHVyZXMgZGVzY3JpcHRpb25zLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2Rl
bC5jOgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgICogZXdrL2V3a192aWV3
Lmg6CisgICAgICAgICogZXdrL2V3a192aWV3X3NpbmdsZS5jOgorICAgICAgICAqIGV3ay9ld2tf
dmlld190aWxlZC5jOgorCiAyMDExLTA3LTI2ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1A
c2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gRml4IHBvaW50ZXIgb3BlcmF0b3IgY29kaW5n
IHN0eWxlIGluIGV3a192aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5j
CmluZGV4IDRhMTQxOTcuLjdlNjFkNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbW9kZWwuYworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X21vZGVsLmMKQEAgLTY0MSw1MiArNjQxLDI0IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogICAgICAgICBfZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2ZyZWUodHVjKTsKIH0KIAotLyoqCi0gKiBDaGFuZ2UgY2FjaGUgY2FwYWNpdHks
IGluIGJ5dGVzLgotICoKLSAqIFRoaXMgd2lsbCBub3QgZmx1c2ggY2FjaGUsIHVzZSBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZmx1c2goKSBvcgotICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9f
Zmx1c2goKSB0byBkbyBzby4KLSAqLwogdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3Nl
dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IG1heCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwogICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKIH0K
IAotLyoqCi0gKiBSZXRyaWV2ZSBtYXhpbXVtIGNhY2hlIGNhcGFjaXR5LCBpbiBieXRlcy4KLSAq
Lwogc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
dWMsIDApOwogICAgIHJldHVybiB0dWMtPm1lbW9yeS5tYXg7CiB9CiAKLS8qKgotICogUmV0cmll
dmUgdGhlIHVzZWQgY2FjaGUgY2FwYWNpdHksIGluIGJ5dGVzLgotICovCiBzaXplX3QgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOwogICAgIHJl
dHVybiB0dWMtPm1lbW9yeS51c2VkOwogfQogCi0vKioKLSAqIEZsdXNoIGdpdmVuIGFtb3VudCBv
ZiBieXRlcyBmcm9tIGNhY2hlLgotICoKLSAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwg
bmVhciBAYSBieXRlcyBhcmUgZnJlZWQgZnJvbSBjYWNoZS4gSXQKLSAqIG1heSBiZSBsZXNzIGlm
IGNhY2hlIGRpZCBub3QgY29udGFpbiB0aGF0IGFtb3VudCBvZiBieXRlcyAoaWU6IGFuCi0gKiBl
bXB0eSBjYWNoZSBoYXMgbm90aGluZyB0byBmcmVlISkgb3IgbW9yZSBpZiB0aGUgY2FjaGUganVz
dAotICogY29udGFpbmVkIG9iamVjdHMgdGhhdCB3ZXJlIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0
ZWQgYW1vdW50ICh0aGlzCi0gKiBpcyB1c3VhbGx5IHRoZSBjYXNlKS4KLSAqCi0gKiBAcGFyYW0g
dHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KLSAqIEBwYXJhbSBieXRlcyBhbW91bnQgdG8gZnJl
ZS4KLSAqCi0gKiBAcmV0dXJuIGFtb3VudCByZWFsbHkgZnJlZWQuCi0gKgotICogQHNlZSBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoKQotICovCiBzaXplX3QgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpCiB7
CiAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7CkBAIC03MzIsMTcgKzcwNCw2
IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMsIHNpemVfdCBieXRlcykKICAgICByZXR1cm4gZG9uZTsKIH0KIAotLyoqCi0gKiBG
bHVzaCBlbm91Z2ggYnl0ZXMgdG8gbWFrZSBjYWNoZSB1c2FnZSBsb3dlciB0aGFuIG1heGltdW0u
Ci0gKgotICogSnVzdCBsaWtlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCgpLCBidXQgdGhp
cyB3aWxsIG1ha2UgdGhlIGNhY2hlCi0gKiBmcmVlIGVub3VnaCB0aWxlcyB0byByZXNwZWN0IG1h
eGltdW0gY2FjaGUgc2l6ZSBhcyBkZWZpbmVkIHdpdGgKLSAqIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9tYXhfc2V0KCkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCB3aGVu
IHN5c3RlbSBiZWNvbWVzIGlkbGUuIFRoaXMgd2F5Ci0gKiB3ZSBrZWVwIG1lbW9yeSBsb3cgYnV0
IGRvIG5vdCBpbXBhY3QgcGVyZm9ybWFuY2Ugd2hlbgotICogY3JlYXRpbmcvZGVsZXRpbmcgdGls
ZXMuCi0gKi8KIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVj
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDYxYTcwODMuLmQzZDc0MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMTA0OCwyNSArMTA0OCw2IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2VuYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QpCiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKLS8qKgotICogU2V0cyB0aGUg
c21hcnQgY2xhc3MgYXBpIHdpdGhvdXQgYW55IGJhY2tpbmcgc3RvcmUsIGVuYWJsaW5nIHZpZXcK
LSAqIHRvIGJlIGluaGVyaXRlZC4KLSAqCi0gKiBAcGFyYW0gYXBpIGNsYXNzIGRlZmluaXRpb24g
dG8gYmUgc2V0LCBhbGwgbWVtYmVycyB3aXRoIHRoZQotICogICAgICAgIGV4Y2VwdGlvbiBvZiBF
dmFzX1NtYXJ0X0NsYXNzLT5kYXRhIG1heSBiZSBvdmVycmlkZGVuLiBNdXN0Ci0gKiAgICAgICAg
QGIgbm90IGJlIEBjIDAuCi0gKgotICogQG5vdGUgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBpcyB1
c2VkIHRvIGltcGxlbWVudCB0eXBlIGNoZWNraW5nIGFuZAotICogICAgICAgaXMgbm90IHN1cHBv
c2VkIHRvIGJlIGNoYW5nZWQvb3ZlcnJpZGRlbi4gSWYgeW91IG5lZWQgZXh0cmEKLSAqICAgICAg
IGRhdGEgZm9yIHlvdXIgc21hcnQgY2xhc3MgdG8gd29yaywganVzdCBleHRlbmQKLSAqICAgICAg
IEV3a19WaWV3X1NtYXJ0X0NsYXNzIGluc3RlYWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlIChwcm9iYWJseQotICogICAg
ICAgICB2ZXJzaW9uIG1pc21hdGNoKS4KLSAqCi0gKiBAc2VlIGV3a192aWV3X3NpbmdsZV9zbWFy
dF9zZXQoKQotICogQHNlZSBld2tfdmlld190aWxlZF9zbWFydF9zZXQoKQotICovCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKIHsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXBpLCBFSU5BX0ZBTFNFKTsKQEAg
LTExMTgsMjEgKzEwOTksNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdr
X1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioK
LSAqIFNldCBhIGZpeGVkIGxheW91dCBzaXplIHRvIGJlIHVzZWQsIGRpc3NvY2lhdGluZyBpdCBm
cm9tIHZpZXdwb3J0IHNpemUuCi0gKgotICogU2V0dGluZyBhIHdpZHRoIGRpZmZlcmVudCB0aGFu
IHplcm8gZW5hYmxlcyBmaXhlZCBsYXlvdXQgb24gdGhhdAotICogc2l6ZS4gSXQncyBhdXRvbWF0
aWNhbGx5IHNjYWxlZCBiYXNlZCBvbiB6b29tLCBidXQgd2lsbCBub3QgY2hhbmdlCi0gKiBpZiB2
aWV3cG9ydCBjaGFuZ2VzLgotICoKLSAqIFNldHRpbmcgYm90aCBAYSB3IGFuZCBAYSBoIHRvIHpl
cm8gd2lsbCBkaXNhYmxlIGZpeGVkIGxheW91dC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBjaGFuZ2UgZml4ZWQgbGF5b3V0LgotICogQHBhcmFtIHcgZml4ZWQgd2lkdGggdG8gdXNl
LiBUaGlzIHNpemUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNjYWxlZAotICogICAgICAgIGJhc2Vk
IG9uIHpvb20gbGV2ZWwuCi0gKiBAcGFyYW0gaCBmaXhlZCBoZWlnaHQgdG8gdXNlLiBUaGlzIHNp
emUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNjYWxlZAotICogICAgICAgIGJhc2VkIG9uIHpvb20g
bGV2ZWwuCi0gKi8KIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKIHsKICAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkKTsKQEAgLTExNTcsMTUgKzExMjMsNiBAQCB2b2lkIGV3a192aWV3
X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgpCiAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKIH0KIAotLyoqCi0gKiBHZXQgZml4
ZWQgbGF5b3V0IHNpemUgaW4gdXNlLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1
ZXJ5IGZpeGVkIGxheW91dCBzaXplLgotICogQHBhcmFtIHcgd2hlcmUgdG8gcmV0dXJuIHdpZHRo
LiBSZXR1cm5zIDAgb24gZXJyb3Igb3IgaWYgbm8gZml4ZWQKLSAqICAgICAgICBsYXlvdXQgaW4g
dXNlLgotICogQHBhcmFtIGggd2hlcmUgdG8gcmV0dXJuIGhlaWdodC4gUmV0dXJucyAwIG9uIGVy
cm9yIG9yIGlmIG5vIGZpeGVkCi0gKiAgICAgICAgbGF5b3V0IGluIHVzZS4KLSAqLwogdm9pZCBl
d2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQg
KncsIEV2YXNfQ29vcmQgKmgpCiB7CiAgICAgaWYgKHcpCkBAIC0xMTg0LDE2ICsxMTQxLDYgQEAg
dm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoRXZhc19PYmplY3QgKm8sIEV2YXNf
Q29vcmQgKncsIEV2YXNfQ29vcmQgKmgKICAgICB9CiB9CiAKLS8qKgotICogU2V0IHRoZSB0aGVt
ZSBwYXRoIHRvIGJlIHVzZWQgYnkgdGhpcyB2aWV3LgotICoKLSAqIFRoaXMgYWxzbyBzZXRzIHRo
ZSB0aGVtZSBvbiB0aGUgbWFpbiBmcmFtZS4gQXMgZnJhbWVzIGluaGVyaXQgdGhlbWUKLSAqIGZy
b20gdGhlaXIgcGFyZW50LCB0aGlzIHdpbGwgaGF2ZSBhbGwgZnJhbWVzIHdpdGggdW5zZXQgdGhl
bWUgdG8KLSAqIHVzZSB0aGlzIG9uZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBj
aGFuZ2UgdGhlbWUuCi0gKiBAcGFyYW0gcGF0aCB0aGVtZSBwYXRoLCBtYXkgYmUgQGMgMCB0byBy
ZXNldCB0byBkZWZhdWx0LgotICovCiB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVj
dCAqbywgY29uc3QgY2hhciAqcGF0aCkKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkKTsKQEAgLTEyMDksMTUgKzExNTYsNiBAQCB2b2lkIGV3a192aWV3X3RoZW1lX3NldChF
dmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqcGF0aCkKIAogfQogCi0vKioKLSAqIEdldHMgdGhl
IHRoZW1lIHNldCBvbiB0aGlzIGZyYW1lLgotICoKLSAqIFRoaXMgcmV0dXJucyB0aGUgdmFsdWUg
c2V0IGJ5IGV3a192aWV3X3RoZW1lX3NldCgpLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0
IHRvIGdldCB0aGVtZSBwYXRoLgotICoKLSAqIEByZXR1cm4gdGhlbWUgcGF0aCwgbWF5IGJlIEBj
IDAgaWYgbm90IHNldC4KLSAqLwogY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KEV2YXNf
T2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwpA
QCAtMTIyNSwyNiArMTE2MywxMiBAQCBjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQoRXZh
c19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnRoZW1lOwogfQogCi0vKioK
LSAqIEdldCB0aGUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgbWFpbiBmcmFtZS4KLSAqCi0g
KiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgbWFpbiBmcmFtZS4KLSAqCi0gKiBAcmV0dXJu
IGV3a19mcmFtZSBvYmplY3Qgb3IgQGMgMCBpZiBub25lIHlldC4KLSAqLwogRXZhc19PYmplY3Qq
IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwogICAgIHJldHVybiBzZC0+bWFpbl9m
cmFtZTsKIH0KIAotLyoqCi0gKiBHZXQgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGZyYW1lIG9iamVj
dC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgZm9jdXNlZCBmcmFtZS4KLSAq
Ci0gKiBAcmV0dXJuIGV3a19mcmFtZSBvYmplY3Qgb3IgQGMgMCBpZiBub25lIHlldC4KLSAqLwog
RXZhc19PYmplY3QqIGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwpAQCAtMTI2
MCw4MCArMTE4NCwzMCBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQo
Y29uc3QgRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIGNsaWVudC0+d2ViRnJhbWUoKTsKIH0K
IAotLyoqCi0gKiBBc2sgbWFpbiBmcmFtZSB0byBsb2FkIHRoZSBnaXZlbiBVUkkuCi0gKgotICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbG9hZCB1cmkuCi0gKiBAcGFyYW0gdXJpIHVuaWZvcm0g
cmVzb3VyY2UgaWRlbnRpZmllciB0byBsb2FkLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IG9uIHN1Y2Nlc3NmdWwgcmVxdWVzdCwgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlLgotICogICAg
ICAgICBOb3RlIHRoYXQgaXQgbWVhbnMgdGhlIHJlcXVlc3Qgd2FzIGRvbmUsIG5vdCB0aGF0IGl0
IHdhcwotICogICAgICAgICBzYXRpc2ZpZWQuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld191cmlf
c2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp1cmkpCiB7CiAgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV91
cmlfc2V0KHNkLT5tYWluX2ZyYW1lLCB1cmkpOwogfQogCi0vKioKLSAqIEdldCB0aGUgY3VycmVu
dCB1cmkgbG9hZGVkIGJ5IG1haW4gZnJhbWUuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
dG8gZ2V0IGN1cnJlbnQgdXJpLgotICoKLSAqIEByZXR1cm4gY3VycmVudCB1cmkgcmVmZXJlbmNl
IG9yIEBjIDAuIEl0J3MgaW50ZXJuYWwsIGRvbid0IGNoYW5nZS4KLSAqLwogY29uc3QgY2hhciAq
ZXdrX3ZpZXdfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQo
c2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioKLSAqIEdldCB0aGUgY3VycmVudCB0aXRsZSBvZiBt
YWluIGZyYW1lLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBjdXJyZW50IHRp
dGxlLgotICoKLSAqIEByZXR1cm4gY3VycmVudCB0aXRsZSByZWZlcmVuY2Ugb3IgQGMgMC4gSXQn
cyBpbnRlcm5hbCwgZG9uJ3QgY2hhbmdlLgotICovCiBjb25zdCBjaGFyICpld2tfdmlld190aXRs
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgMCk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc2QtPm1haW5f
ZnJhbWUpOwogfQogCi0vKioKLSAqIEdldHMgaWYgbWFpbiBmcmFtZSBpcyBlZGl0YWJsZS4KLSAq
Ci0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgZWRpdGFibGUgc3RhdGUuCi0gKgotICog
QHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZWRpdGFibGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNl
LgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0K
IAotLyoqCi0gKiBTZXQgYmFja2dyb3VuZCBjb2xvciBhbmQgdHJhbnNwYXJlbmN5Ci0gKgotICog
SnVzdCBhcyBpbiBFdmFzLCBjb2xvcnMgYXJlIHByZS1tdWx0aXBsaWVkLCBzbyA1MCUgcmVkIGlz
Ci0gKiAoMTI4LCAwLCAwLCAxMjgpIGFuZCBub3QgKDI1NSwgMCwgMCwgMTI4KSEKLSAqCi0gKiBA
d2FybmluZyBXYXRjaCBvdXQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggdHJhbnNwYXJlbmN5ISBP
YmplY3QKLSAqICAgICAgICAgIHdpbGwgYmUgaGFuZGxlZCBhcyB0cmFuc3BhcmVudCBpbWFnZSBi
eSBldmFzIGV2ZW4gaWYgdGhlCi0gKiAgICAgICAgICB3ZWJwYWdlIHNwZWNpZmllcyBhIGJhY2tn
cm91bmQgY29sb3IuIFRoYXQgbWVhbiB5b3UnbGwgcGF5Ci0gKiAgICAgICAgICBhIHByaWNlIGV2
ZW4gaWYgaXQncyBub3QgcmVhbGx5IHRyYW5zcGFyZW50LCB0aHVzCi0gKiAgICAgICAgICBzY3Jv
bGxpbmcvcGFubmluZyBhbmQgem9vbWluZyB3aWxsIGJlIGxpa2VseSBzbG93ZXIgdGhhbgotICog
ICAgICAgICAgaWYgdHJhbnNwYXJlbmN5IGlzIG9mZi4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBjaGFuZ2UuCi0gKiBAcGFyYW0gciByZWQgY29tcG9uZW50LgotICogQHBhcmFtIGcg
Z3JlZW4gY29tcG9uZW50LgotICogQHBhcmFtIGIgYmx1ZSBjb21wb25lbnQuCi0gKiBAcGFyYW0g
YSB0cmFuc3BhcmVuY3kuCi0gKi8KIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKIHsKICAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkKTsKQEAgLTEzODQsMTggKzEyNTgsNiBAQCB2b2lkIGV3a192aWV3
X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCAqbywgaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
CiAgICAgfQogfQogCi0vKioKLSAqIFF1ZXJ5IGlmIHZpZXcgb2JqZWN0IGJhY2tncm91bmQgY29s
b3IuCi0gKgotICogSnVzdCBhcyBpbiBFdmFzLCBjb2xvcnMgYXJlIHByZS1tdWx0aXBsaWVkLCBz
byA1MCUgcmVkIGlzCi0gKiAoMTI4LCAwLCAwLCAxMjgpIGFuZCBub3QgKDI1NSwgMCwgMCwgMTI4
KSEKLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeS4KLSAqIEBwYXJhbSByIHdo
ZXJlIHRvIHJldHVybiByZWQgY29sb3IgY29tcG9uZW50LgotICogQHBhcmFtIGcgd2hlcmUgdG8g
cmV0dXJuIGdyZWVuIGNvbG9yIGNvbXBvbmVudC4KLSAqIEBwYXJhbSBiIHdoZXJlIHRvIHJldHVy
biBibHVlIGNvbG9yIGNvbXBvbmVudC4KLSAqIEBwYXJhbSBhIHdoZXJlIHRvIHJldHVybiBhbHBo
YSB2YWx1ZS4KLSAqLwogdm9pZCBld2tfdmlld19iZ19jb2xvcl9nZXQoY29uc3QgRXZhc19PYmpl
Y3QgKm8sIGludCAqciwgaW50ICpnLCBpbnQgKmIsIGludCAqYSkKIHsKICAgICBpZiAocikKQEAg
LTE0MTcsMTcgKzEyNzksNiBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFz
X09iamVjdCAqbywgaW50ICpyLCBpbnQgKmcsIGludCAqYiwgaW50ICphKQogICAgICAgICAqYSA9
IHNkLT5iZ19jb2xvci5hOwogfQogCi0vKioKLSAqIFNlYXJjaCB0aGUgZ2l2ZW4gdGV4dCBzdHJp
bmcgaW4gZG9jdW1lbnQuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2Vh
cmNoIHRleHQuCi0gKiBAcGFyYW0gc3RyaW5nIHJlZmVyZW5jZSBzdHJpbmcgdG8gc2VhcmNoLgot
ICogQHBhcmFtIGNhc2Vfc2Vuc2l0aXZlIGlmIHNlYXJjaCBzaG91bGQgYmUgY2FzZSBzZW5zaXRp
dmUgb3Igbm90LgotICogQHBhcmFtIGZvcndhcmQgaWYgc2VhcmNoIGlzIGZyb20gY3Vyc29yIGFu
ZCBvbiBvciBiYWNrd2FyZHMuCi0gKiBAcGFyYW0gd3JhcCBpZiBzZWFyY2ggc2hvdWxkIHdyYXAg
YXQgZW5kLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGZvdW5kLCBAYyBFSU5BX0ZB
TFNFIGlmIG5vdCBvciBmYWlsdXJlLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFy
Y2goY29uc3QgRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnN0cmluZywgRWluYV9Cb29sIGNh
c2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7CiAgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0xNDc1LDEz
ICsxMzI2LDYgQEAgdW5zaWduZWQgaW50IGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNf
T2JqZWN0ICpvLCBjb25zdCBjaGFyICpzdHJpbmcsIEVpbmEKICAgICByZXR1cm4gcHJpdi0+cGFn
ZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgc2Vuc2l0
aXZlLCBoaWdobGlnaHQsIGxpbWl0KTsKIH0KIAotLyoqCi0gKiBSZXZlcnNlcyB0aGUgZWZmZWN0
IG9mIGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKCkKLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB3aGVyZSB0byBzZWFyY2ggdGV4dC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBv
biBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIGZvciBmYWlsdXJlLgotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0xNDkwLDU0ICsx
MzM0LDI0IEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFz
X09iamVjdCAqbykKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIFNldCBpZiBz
aG91bGQgaGlnaGxpZ2h0IG1hdGNoZXMgbWFya2VkIHdpdGggZXdrX3ZpZXdfdGV4dF9tYXRjaGVz
X21hcmsoKS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB3aGVyZSB0byBzZXQgaWYgbWF0
Y2hlcyBhcmUgaGlnaGxpZ2h0ZWQgb3Igbm90LgotICogQHBhcmFtIGhpZ2hsaWdodCBpZiBAYyBF
SU5BX1RSVUUsIG1hdGNoZXMgd2lsbCBiZSBoaWdobGlnaHRlZC4KLSAqCi0gKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIGZvciBmYWlsdXJlLgotICovCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3Qg
Km8sIEVpbmFfQm9vbCBoaWdobGlnaHQpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNf
aGlnaGxpZ2h0X3NldChzZC0+bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKIH0KIAotLyoqCi0gKiBH
ZXQgaWYgc2hvdWxkIGhpZ2hsaWdodCBtYXRjaGVzIG1hcmtlZCB3aXRoIGV3a192aWV3X3RleHRf
bWF0Y2hlc19tYXJrKCkuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkgaWYg
bWF0Y2hlcyBhcmUgaGlnaGxpZ2h0ZWQgb3Igbm90LgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9U
UlVFIGlmIHRoZXkgYXJlIGhpZ2hsaWdodGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAq
LwogRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9n
ZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioKLSAqIFNldHMgaWYgbWFpbiBmcmFtZSBpcyBl
ZGl0YWJsZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgZWRpdGFibGUgc3Rh
dGUuCi0gKiBAcGFyYW0gZWRpdGFibGUgbmV3IHN0YXRlLgotICoKLSAqIEByZXR1cm4gQGMgRUlO
QV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICovCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZWRpdGFi
bGUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgcmV0dXJuIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoc2QtPm1haW5fZnJhbWUsIGVkaXRh
YmxlKTsKIH0KIAotLyoqCi0gKiBHZXQgdGhlIGNvcHkgb2YgdGhlIHNlbGVjdGlvbiB0ZXh0Lgot
ICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBzZWxlY3Rpb24gdGV4dC4KLSAqCi0g
KiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgb3IgQGMgMCBpZiBub3RoaW5nIGlzIHNl
bGVjdGVkIG9yIGZhaWx1cmUuCi0gKi8KIGNoYXIgKmV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29u
c3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CkBAIC0xNTUzLDE1ICsxMzY3LDYgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
ZWRpdG9yX2NvbW1hbmQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2LCBjb25zdCBjaGEKICAg
ICByZXR1cm4gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCkpLmV4
ZWN1dGUodmFsdWUpOwogfQogCi0vKioKLSAqIEV4ZWN1dGVzIGVkaXRvciBjb21tYW5kLgotICoK
LSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGV4ZWN1dGUgY29tbWFuZC4KLSAqIEBwYXJhbSBj
b21tYW5kIGVkaXRvciBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLgotICogQHBhcmFtIHZhbHVlIHZh
bHVlIHRvIGJlIHBhc3NlZCBpbnRvIGNvbW1hbmQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaWYgb3BlcmF0aW9uIHdhcyBleGVjdXRlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0g
Ki8KIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0
ICpvLCBjb25zdCBFd2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciAqdmFsdWUp
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBA
IC0xNTkxLDE0ICsxMzk2LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2Nv
bW1hbmQoRXZhc19PYmplY3QgKm8sIGNvbnN0IEV3a19FZGl0b3JfQ29tbWEKIAogI2lmIEVOQUJM
RShDT05URVhUX01FTlVTKQogCi0vKioKLSAqIEZvcndhcmRzIGEgcmVxdWVzdCBvZiBuZXcgQ29u
dGV4dCBNZW51IHRvIFdlYkNvcmUuCi0gKgotICogQHBhcmFtIG8gVmlldy4KLSAqIEBwYXJhbSBl
diBFdmVudCBkYXRhLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIG9wZXJhdGlvbiB3
YXMgZXhlY3V0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QgKm8sIGNvbnN0IEV2
YXNfRXZlbnRfTW91c2VfRG93biAqZXYpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0xNjMzLDEzICsxNDMwLDYgQEAgRWluYV9Cb29sIGV3
a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBF
dmFzX0V2ZW50X00KIAogI2VuZGlmCiAKLS8qKgotICogR2V0IGN1cnJlbnQgbG9hZCBwcm9ncmVz
cyBlc3RpbWF0ZSBmcm9tIDAuMCB0byAxLjAuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
dG8gZ2V0IGN1cnJlbnQgcHJvZ3Jlc3MuCi0gKgotICogQHJldHVybiBwcm9ncmVzIHZhbHVlIGZy
b20gMC4wIHRvIDEuMCBvciAtMS4wIG9uIGVycm9yLgotICovCiBkb3VibGUgZXdrX3ZpZXdfbG9h
ZF9wcm9ncmVzc19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CkBAIC0xNjQ3LDE1MCArMTQzNyw2MCBAQCBkb3Vi
bGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiAgICAg
cmV0dXJuIHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiB9CiAK
LS8qKgotICogQXNrIG1haW4gZnJhbWUgdG8gc3RvcCBsb2FkaW5nLgotICoKLSAqIEBwYXJhbSBv
IHZpZXcgb2JqZWN0IHRvIHN0b3AgbG9hZGluZy4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3a19m
cmFtZV9zdG9wKCkKLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3N0b3AoRXZhc19PYmplY3QgKm8p
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9zdG9wKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotLyoqCi0gKiBB
c2sgbWFpbiBmcmFtZSB0byByZWxvYWQgY3VycmVudCBkb2N1bWVudC4KLSAqCi0gKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byByZWxvYWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24g
c3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKgotICogQHNlZSBld2tfZnJhbWVf
cmVsb2FkKCkKLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCAqbykK
IHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLS8qKgotICog
QXNrIG1haW4gZnJhbWUgdG8gZnVsbHkgcmVsb2FkIGN1cnJlbnQgZG9jdW1lbnQsIHVzaW5nIG5v
IGNhY2hlcy4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byByZWxvYWQuCi0gKgotICog
QHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2Uu
Ci0gKgotICogQHNlZSBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoKQotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9yZWxv
YWRfZnVsbChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLS8qKgotICogQXNrIG1haW4gZnJhbWUgdG8g
bmF2aWdhdGUgYmFjayBpbiBoaXN0b3J5LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IG5hdmlnYXRlIGJhY2suCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vzcywg
QGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKgotICogQHNlZSBld2tfZnJhbWVfYmFjaygpCi0g
Ki8KIEVpbmFfQm9vbCBld2tfdmlld19iYWNrKEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tf
ZnJhbWVfYmFjayhzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLS8qKgotICogQXNrIG1haW4gZnJhbWUg
dG8gbmF2aWdhdGUgZm9yd2FyZCBpbiBoaXN0b3J5LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2Jq
ZWN0IHRvIG5hdmlnYXRlIGZvcndhcmQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24g
c3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKgotICogQHNlZSBld2tfZnJhbWVf
Zm9yd2FyZCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkKEV2YXNfT2JqZWN0ICpv
KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLS8qKgot
ICogTmF2aWdhdGUgYmFjayBvciBmb3J3YXJkIGluIGhpc3RvcnkuCi0gKgotICogQHBhcmFtIG8g
dmlldyBvYmplY3QgdG8gbmF2aWdhdGUuCi0gKiBAcGFyYW0gc3RlcHMgaWYgcG9zaXRpdmUgbmF2
aWdhdGVzIHRoYXQgYW1vdW50IGZvcndhcmRzLCBpZiBuZWdhdGl2ZQotICogICAgICAgIGRvZXMg
YmFja3dhcmRzLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX2ZyYW1lX25hdmlnYXRlKCkKLSAq
LwogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlKEV2YXNfT2JqZWN0ICpvLCBpbnQgc3RlcHMp
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQog
Ci0vKioKLSAqIENoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIG5hdmlnYXRlIGJhY2t3YXJkcyBv
bmUgaXRlbSBpbiBoaXN0b3J5LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoZWNr
IGlmIGJhY2t3YXJkIG5hdmlnYXRpb24gaXMgcG9zc2libGUuCi0gKgotICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgcG9zc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBz
ZWUgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoKQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
YmFja19wb3NzaWJsZShFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9z
c2libGUoc2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioKLSAqIENoZWNrIGlmIGl0IGlzIHBvc3Np
YmxlIHRvIG5hdmlnYXRlIGZvcndhcmRzIG9uZSBpdGVtIGluIGhpc3RvcnkuCi0gKgotICogQHBh
cmFtIG8gdmlldyBvYmplY3QgdG8gY2hlY2sgaWYgZm9yd2FyZCBuYXZpZ2F0aW9uIGlzIHBvc3Np
YmxlLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHBvc3NpYmxlLCBAYyBFSU5BX0ZB
TFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxlKCkK
LSAqLwogRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QgKm8p
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3NpYmxlKHNkLT5tYWluX2ZyYW1lKTsKIH0K
IAotLyoqCi0gKiBDaGVjayBpZiBpdCBpcyBwb3NzaWJsZSB0byBuYXZpZ2F0ZSBnaXZlbiBAYSBz
dGVwcyBpbiBoaXN0b3J5LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIG5hdmlnYXRl
LgotICogQHBhcmFtIHN0ZXBzIGlmIHBvc2l0aXZlIG5hdmlnYXRlcyB0aGF0IGFtb3VudCBmb3J3
YXJkcywgaWYgbmVnYXRpdmUKLSAqICAgICAgICBkb2VzIGJhY2t3YXJkcy4KLSAqCi0gKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBpZiBwb3NzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0g
Ki8KIEVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCAqbywg
aW50IHN0ZXBzKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoc2QtPm1haW5f
ZnJhbWUsIHN0ZXBzKTsKIH0KIAotLyoqCi0gKiBDaGVjayBpZiBuYXZpZ2F0aW9uIGhpc3Rvcnkg
KGJhY2stZm9yd2FyZCBsaXN0cykgaXMgZW5hYmxlZC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBjaGVjayBpZiBuYXZpZ2F0aW9uIGhpc3RvcnkgaXMgZW5hYmxlZC4KLSAqCi0gKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB2aWV3IGtlZXBzIGhpc3RvcnksIEBjIEVJTkFfRkFMU0Ug
b3RoZXJ3aXNlLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOwpAQCAtMTc5OCwxNSArMTQ5OCw2IEBAIEVpbmFfQm9vbCBld2tfdmll
d19oaXN0b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5iYWNr
Rm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKTsKIH0KIAotLyoqCi0gKiBTZXRzIGlmIG5hdmlnYXRp
b24gaGlzdG9yeSAoYmFjay1mb3J3YXJkIGxpc3RzKSBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJh
bSBvIHZpZXcgb2JqZWN0IHRvIHNldCBpZiBuYXZpZ2F0aW9uIGhpc3RvcnkgaXMgZW5hYmxlZC4K
LSAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIHdlIHdhbnQgdG8gZW5hYmxlIG5hdmln
YXRpb24gaGlzdG9yeTsKLSAqIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICov
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
aW5hX0Jvb2wgZW5hYmxlKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOwpAQCAtMTgxNSwyMiArMTUwNiw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19o
aXN0b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotLyoqCi0gKiBHZXRzIHRoZSBoaXN0b3J5IChiYWNrLWZv
cndhcmQgbGlzdCkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KLSAqCi0gKiBAcGFyYW0gbyB2
aWV3IG9iamVjdCB0byBnZXQgbmF2aWdhdGlvbiBoaXN0b3J5IGZyb20uCi0gKgotICogQHJldHVy
biByZXR1cm5zIHRoZSBoaXN0b3J5IGluc3RhbmNlIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggdGhp
cwotICogICAgICAgICB2aWV3IG9yIEBjIDAgb24gZXJyb3JzIChpbmNsdWRpbmcgd2hlbiBoaXN0
b3J5IGlzIG5vdAotICogICAgICAgICBlbmFibGVkIHdpdGggZXdrX3ZpZXdfaGlzdG9yeV9lbmFi
bGVfc2V0KCkpLiBUaGlzIGluc3RhbmNlCi0gKiAgICAgICAgIGlzIHVuaXF1ZSBmb3IgdGhpcyB2
aWV3IGFuZCB0aHVzIG11bHRpcGxlIGNhbGxzIHRvIHRoaXMKLSAqICAgICAgICAgZnVuY3Rpb24g
d2l0aCB0aGUgc2FtZSB2aWV3IGFzIHBhcmFtZXRlciByZXR1cm5zIHRoZSBzYW1lCi0gKiAgICAg
ICAgIGhhbmRsZS4gVGhpcyBoYW5kbGUgaXMgYWxpdmUgd2hpbGUgdmlldyBpcyBhbGl2ZSwgdGh1
cyBvbmUKLSAqICAgICAgICAgbWlnaHQgd2FudCB0byBsaXN0ZW4gZm9yIEVWQVNfQ0FMTEJBQ0tf
REVMIG9uIGdpdmVuIHZpZXcKLSAqICAgICAgICAgKEBhIG8pIHRvIGtub3cgd2hlbiB0byBzdG9w
IHVzaW5nIHJldHVybmVkIGhhbmRsZS4KLSAqCi0gKiBAc2VlIGV3a192aWV3X2hpc3RvcnlfZW5h
YmxlX3NldCgpCi0gKi8KIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBF
dmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKQEAgLTE4NDIsMjkgKzE1MTcsMTIgQEAgRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3Rvcnlf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5oaXN0b3J5OwogfQog
Ci0vKioKLSAqIEdldCB0aGUgY3VycmVudCB6b29tIGxldmVsIG9mIG1haW4gZnJhbWUuCi0gKgot
ICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkgem9vbSBsZXZlbC4KLSAqCi0gKiBAcmV0
dXJuIGN1cnJlbnQgem9vbSBsZXZlbCBpbiB1c2Ugb3IgLTEuMCBvbiBlcnJvci4KLSAqLwogZmxv
YXQgZXdrX3ZpZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96
b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLS8qKgotICogU2V0IHRoZSBjdXJyZW50IHpv
b20gbGV2ZWwgb2YgbWFpbiBmcmFtZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBz
ZXQgem9vbSBsZXZlbC4KLSAqIEBwYXJhbSB6b29tIG5ldyBsZXZlbCB0byB1c2UuCi0gKiBAcGFy
YW0gY3ggeCBvZiBjZW50ZXIgY29vcmRpbmF0ZQotICogQHBhcmFtIGN5IHkgb2YgY2VudGVyIGNv
b3JkaW5hdGUKLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNf
T2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQogewog
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMTkw
OSwzMiArMTU2Nyw2IEBAIHZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQo
RXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCiAgICAgc2QtPmFwaS0+em9v
bV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QsIHNtb290aF9zY2FsZSk7CiB9CiAKLS8qKgotICog
U2V0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWwgb2YgYmFja2luZyBzdG9yZSwgY2VudGVyZWQgYXQg
Z2l2ZW4gcG9pbnQuCi0gKgotICogVW5saWtlIGV3a192aWV3X3pvb21fc2V0KCksIHRoaXMgY2Fs
bCBkbyBub3QgYXNrIFdlYktpdCB0byByZW5kZXIKLSAqIGF0IG5ldyBzaXplLCBidXQgc2NhbGUg
d2hhdCBpcyBhbHJlYWR5IHJlbmRlcmVkLCBiZWluZyBtdWNoIGZhc3RlcgotICogYnV0IHdvcnNl
IHF1YWxpdHkuCi0gKgotICogT2Z0ZW4gb25lIHNob3VsZCB1c2UgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9zZXQoKSwgaXQgd2lsbCBjYWxsIHRoZQotICogc2FtZSBtYWNoaW5lcnkgaW50ZXJuYWxs
eS4KLSAqCi0gKiBAbm90ZSB0aGlzIHdpbGwgc2V0IHZhcmlhYmxlcyB1c2VkIGJ5IGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfc2V0KCkKLSAqICAgICAgIHNvIHN1Yi1jbGFzc2VzIHdpbGwgbm90IHJl
c2V0IGludGVybmFsIHN0YXRlIG9uIHRoZWlyCi0gKiAgICAgICAiY2FsY3VsYXRlIiBwaGFzZS4g
VG8gdW5zZXQgdGhvc2UgYW5kIGVuYWJsZSBzdWItY2xhc3NlcyB0bwotICogICAgICAgcmVzZXQg
dGhlaXIgaW50ZXJuYWwgc3RhdGUsIGNhbGwKLSAqICAgICAgIGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19zdG9wKCkuIE5hbWVseSwgdGhpcyBjYWxsIHdpbGwKLSAqICAgICAgIHNldCBld2tf
dmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoKSB0byBhY3R1YWwgd2Via2l0IHpvb20KLSAq
ICAgICAgIGxldmVsLCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKCkgYW5kCi0gKiAg
ICAgICBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgpIHRvIGdpdmVuIHpvb20g
bGV2ZWwuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IHdlYWsgem9vbSBsZXZl
bC4KLSAqIEBwYXJhbSB6b29tIGxldmVsIHRvIHNjYWxlIGJhY2tpbmcgc3RvcmUuCi0gKiBAcGFy
YW0gY3ggaG9yaXpvbnRhbCBjZW50ZXIgb2Zmc2V0LCByZWxhdGl2ZSB0byBvYmplY3QgKHcvMiBp
cyBtaWRkbGUpLgotICogQHBhcmFtIGN5IHZlcnRpY2FsIGNlbnRlciBvZmZzZXQsIHJlbGF0aXZl
IHRvIG9iamVjdCAoaC8yIGlzIG1pZGRsZSkuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUg
b24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBld2tf
dmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOwpAQCAtMTk2MywyNCArMTU5NSw2IEBAIEVpbmFfQm9vbCBld2tfdmll
d196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4
LCBFdmFzCiAgICAgcmV0dXJuIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHpvb20sIGN4LCBj
eSk7CiB9CiAKLS8qKgotICogTWFyayBpbnRlcm5hbCB6b29tIGFuaW1hdGlvbiBzdGF0ZSB0byBn
aXZlbiB6b29tLgotICoKLSAqIFRoaXMgZG9lcyBub3QgbW9kaWZ5IGFueSBhY3R1YWwgem9vbSBp
biBXZWJLaXQgb3IgYmFja2luZyBzdG9yZSwKLSAqIGp1c3Qgc2V0IHRoZSBFd2tfVmlld19TbWFy
dF9EYXRhLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgc28KLSAqIHN1Yi1jbGFzc2VzIHdpbGwg
a25vdyB0aGV5IHNob3VsZCBub3QgcmVzZXQgdGhlaXIgaW50ZXJuYWwgc3RhdGUuCi0gKgotICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlIHZhbHVlLgotICogQHBhcmFtIHpvb20gbmV3
IHN0YXJ0IHZhbHVlLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBj
IEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRl
ZF9zZXQoKQotICogQHNlZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkKLSAqIEBzZWUgZXdrX3Zp
ZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoKQotICogQHNlZSBld2tfdmlld196b29tX2FuaW1h
dGVkX21hcmtfZW5kKCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJl
bnQoKQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KEV2
YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMTk4OCwyNCArMTYwMiw2IEBAIEVpbmFfQm9vbCBl
d2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpv
b20pCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotLyoqCi0gKiBNYXJrIGludGVybmFsIHpv
b20gYW5pbWF0aW9uIHN0YXRlIHRvIGdpdmVuIHpvb20uCi0gKgotICogVGhpcyBkb2VzIG5vdCBt
b2RpZnkgYW55IGFjdHVhbCB6b29tIGluIFdlYktpdCBvciBiYWNraW5nIHN0b3JlLAotICoganVz
dCBzZXQgdGhlIEV3a19WaWV3X1NtYXJ0X0RhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgc28K
LSAqIHN1Yi1jbGFzc2VzIHdpbGwga25vdyB0aGV5IHNob3VsZCBub3QgcmVzZXQgdGhlaXIgaW50
ZXJuYWwgc3RhdGUuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlIHZhbHVl
LgotICogQHBhcmFtIHpvb20gbmV3IGVuZCB2YWx1ZS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV93ZWFrX3Nl
dCgpCi0gKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkKLSAqIEBzZWUg
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9tYXJrX2N1cnJlbnQoKQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX2VuZChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSkKIHsKICAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTIwMTMsMjQgKzE2
MDksNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChFdmFzX09i
amVjdCAqbywgZmxvYXQgem9vbSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAq
IE1hcmsgaW50ZXJuYWwgem9vbSBhbmltYXRpb24gc3RhdGUgdG8gZ2l2ZW4gem9vbS4KLSAqCi0g
KiBUaGlzIGRvZXMgbm90IG1vZGlmeSBhbnkgYWN0dWFsIHpvb20gaW4gV2ViS2l0IG9yIGJhY2tp
bmcgc3RvcmUsCi0gKiBqdXN0IHNldCB0aGUgRXdrX1ZpZXdfU21hcnRfRGF0YS0+YW5pbWF0ZWRf
em9vbS56b29tLmN1cnJlbnQgc28KLSAqIHN1Yi1jbGFzc2VzIHdpbGwga25vdyB0aGV5IHNob3Vs
ZCBub3QgcmVzZXQgdGhlaXIgaW50ZXJuYWwgc3RhdGUuCi0gKgotICogQHBhcmFtIG8gdmlldyBv
YmplY3QgdG8gY2hhbmdlIHZhbHVlLgotICogQHBhcmFtIHpvb20gbmV3IGN1cnJlbnQgdmFsdWUu
Ci0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UuCi0gKgotICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX3NldCgpCi0gKiBA
c2VlIGV3a192aWV3X3pvb21fd2Vha19zZXQoKQotICogQHNlZSBld2tfdmlld196b29tX2FuaW1h
dGVkX21hcmtfc3RvcCgpCi0gKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFy
dCgpCi0gKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoKQotICovCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQoRXZhc19PYmplY3QgKm8s
IGZsb2F0IHpvb20pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CkBAIC0yMDM4LDE4ICsxNjE2LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21f
YW5pbWF0ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKQogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogVW5tYXJrIGludGVybmFsIHpvb20gYW5pbWF0
aW9uIHN0YXRlLgotICoKLSAqIFRoaXMgemVybyBhbGwgc3RhcnQsIGVuZCBhbmQgY3VycmVudCB2
YWx1ZXMuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbWFyayBhcyBhbmltYXRlZCBp
cyBzdG9wcGVkLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0
KCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZCgpCi0gKiBAc2VlIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9v
bV93ZWFrX3NldCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtf
c3RvcChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTIwNTcsMjggKzE2MjMsNiBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotLyoqCi0gKiBTZXQgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCB3aGlsZSBh
bmltYXRpbmcuCi0gKgotICogSWYgdGhlIHZpZXcgd2FzIGFscmVhZHkgYW5pbWF0aW5nIHRvIGFu
b3RoZXIgem9vbSwgaXQgd2lsbCBzdGFydAotICogZnJvbSBjdXJyZW50IHBvaW50IHRvIHRoZSBu
ZXh0IHByb3ZpZGVkIHpvb20gKEBhIHpvb20gcGFyYW1ldGVyKQotICogYW5kIGR1cmF0aW9uIChA
YSBkdXJhdGlvbiBwYXJhbWV0ZXIpLgotICoKLSAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIHdh
eSB0byBkbyB0cmFuc2l0aW9ucyBmcm9tIG9uZSBsZXZlbCB0bwotICogYW5vdGhlci4gSG93ZXZl
ciwgb25lIG1heSB3aXNoIHRvIGRvIHRob3NlIGZyb20gb3V0c2lkZSwgaW4gdGhhdAotICogY2Fz
ZSB1c2UgZXdrX3ZpZXdfem9vbV93ZWFrX3NldCgpIGFuZCBsYXRlciBjb250cm9sIGludGVybWVk
aWF0ZQotICogc3RhdGVzIHdpdGggZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQo
KSwKLSAqIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoKSBhbmQKLSAqIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
dG8gYW5pbWF0ZS4KLSAqIEBwYXJhbSB6b29tIGZpbmFsIHpvb20gbGV2ZWwgdG8gdXNlLgotICog
QHBhcmFtIGR1cmF0aW9uIHRpbWUgaW4gc2Vjb25kcyB0aGUgYW5pbWF0aW9uIHNob3VsZCB0YWtl
LgotICogQHBhcmFtIGN4IG9mZnNldCBpbnNpZGUgb2JqZWN0IHRoYXQgZGVmaW5lcyB6b29tIGNl
bnRlci4gMCBpcyBsZWZ0IHNpZGUuCi0gKiBAcGFyYW0gY3kgb2Zmc2V0IGluc2lkZSBvYmplY3Qg
dGhhdCBkZWZpbmVzIHpvb20gY2VudGVyLiAwIGlzIHRvcCBzaWRlLgotICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgYW5pbWF0aW9uIHdpbGwgYmUgc3RhcnRlZCwgQGMgRUlOQV9GQUxTRSBpZiBu
b3QKLSAqICAgICAgICAgICAgYmVjYXVzZSB6b29tIGlzIHRvbyBzbWFsbC9iaWcuCi0gKi8KIEVp
bmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQg
em9vbSwgZmxvYXQgZHVyYXRpb24sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCiB7CiAg
ICAgZG91YmxlIG5vdzsKQEAgLTIxMjgsNjEgKzE2NzIsMTggQEAgRWluYV9Cb29sIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJh
dGlvbiwKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIFF1ZXJ5IGlmIHpvb20g
bGV2ZWwganVzdCBhcHBsaWVzIHRvIHRleHQgYW5kIG5vdCBvdGhlciBlbGVtZW50cy4KLSAqCi0g
KiBAcGFyYW0gbyB2aWV3IHRvIHF1ZXJ5IHNldHRpbmcuCi0gKgotICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaWYganVzdCB0ZXh0IGFyZSBzY2FsZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgot
ICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV90ZXh0X29ubHlfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKIH0KIAotLyoqCi0gKiBTZXQgaWYgem9vbSBsZXZlbCBqdXN0IGFwcGxpZXMgdG8gdGV4
dCBhbmQgbm90IG90aGVyIGVsZW1lbnRzLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgdG8gY2hhbmdl
IHNldHRpbmcuCi0gKiBAcGFyYW0gc2V0dGluZyBAYyBFSU5BX1RSVUUgaWYgem9vbSBzaG91bGQg
anVzdCBiZSBhcHBsaWVkIHRvIHRleHQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24g
c3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmll
d196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzZXR0aW5nKQog
ewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfc2V0KHNkLT5tYWluX2ZyYW1lLCBzZXR0
aW5nKTsKIH0KIAotLyoqCi0gKiBIaW50IGVuZ2luZSB0byBwcmUtcmVuZGVyIHJlZ2lvbi4KLSAq
Ci0gKiBFbmdpbmVzIGFuZCBiYWNraW5nIHN0b3JlIG1pZ2h0IGJlIGFibGUgdG8gcHJlLXJlbmRl
ciByZWdpb25zIGluCi0gKiBvcmRlciB0byBzcGVlZCB1cCB6b29taW5nIG9yIHNjcm9sbGluZyB0
byB0aGF0IHJlZ2lvbi4gTm90IGFsbAotICogZW5naW5lcyBtaWdodCBpbXBsZW1lbnQgdGhhdCBh
bmQgdGhleSB3aWxsIHJldHVybiBAYyBFSU5BX0ZBTFNFCi0gKiBpbiB0aGF0IGNhc2UuCi0gKgot
ICogVGhlIGdpdmVuIHJlZ2lvbiBpcyBhIGhpbnQuIEVuZ2luZXMgbWlnaHQgZG8gYmlnZ2VyIG9y
IHNtYWxsZXIgYXJlYQotICogdGhhdCBjb3ZlcnMgdGhhdCByZWdpb24uIFByZS1yZW5kZXIgbWln
aHQgbm90IGJlIGltbWVkaWF0ZSwgaXQgbWF5Ci0gKiBiZSBwb3N0cG9uZWQgdG8gYSB0aHJlYWQs
IG9wZXJhdGVkIGNvb3BlcmF0aXZlbHkgaW4gdGhlIG1haW4gbG9vcAotICogYW5kIG1heSBiZSBl
dmVuIGlnbm9yZWQgb3IgY2FuY2VsbGVkIGFmdGVyd2FyZHMuCi0gKgotICogTXVsdGlwbGUgcmVx
dWVzdHMgbWlnaHQgYmUgcXVldWVkIGJ5IGVuZ2luZXMuIE9uZSBjYW4gY2xlYXIvZm9yZ2V0Ci0g
KiBhYm91dCB0aGVtIHdpdGggZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoKS4KLSAqCi0gKiBA
cGFyYW0gbyB2aWV3IHRvIGFzayBwcmUtcmVuZGVyIG9mIGdpdmVuIHJlZ2lvbi4KLSAqIEBwYXJh
bSB4IGFic29sdXRlIGNvb3JkaW5hdGUgKDA9bGVmdCkgdG8gcHJlLXJlbmRlciBhdCB6b29tLgot
ICogQHBhcmFtIHkgYWJzb2x1dGUgY29vcmRpbmF0ZSAoMD10b3ApIHRvIHByZS1yZW5kZXIgYXQg
em9vbS4KLSAqIEBwYXJhbSB3IHdpZHRoIHRvIHByZS1yZW5kZXIgc3RhcnRpbmcgZnJvbSBAYSB4
IGF0IHpvb20uCi0gKiBAcGFyYW0gaCBoZWlnaHQgdG8gcHJlLXJlbmRlciBzdGFydGluZyBmcm9t
IEBhIHkgYXQgem9vbS4KLSAqIEBwYXJhbSB6b29tIGRlc2lyZWQgem9vbS4KLSAqCi0gKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBpZiByZXF1ZXN0IHdhcyBhY2NlcHRlZCwgQGMgRUlOQV9GQUxTRQot
ICogICAgICAgICBvdGhlcndpc2UgKGVycm9ycywgcHJlLXJlbmRlciBub3Qgc3VwcG9ydGVkLCBl
dGMpLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoKQotICovCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9v
bSkKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
QEAgLTIyMjYsMjEgKzE3MjcsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdp
b24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LAogICAgIHJldHVy
biBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwgeSwgdywgaCwgem9vbSk7CiB9CiAK
LS8qKgotICogSGludCBlbmdpbmUgdG8gcHJlLXJlbmRlciByZWdpb24sIGdpdmVuIG4gZXh0cmEg
Y29scy9yb3dzCi0gKgotICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSBtZXRob2QgdG8gZXdrX3Zp
ZXdfcHJlX3JlbmRlcl9yZWdpb24oKS4gSXQgZG9lcyBub3QKLSAqIG1ha2Ugc2Vuc2UgaW4gYWxs
IGVuZ2luZXMgYW5kIHRoZXJlZm9yZSBpdCBtaWdodCBub3QgYmUgaW1wbGVtZW50ZWQgYXQgYWxs
LgotICoKLSAqIEl0J3Mgb25seSB1c2VmdWwgaWYgZW5naW5lIGRpdmlkZSB0aGUgYXJlYSBiZWlu
ZyByZW5kZXJlZCBpbiBzbWFsbGVyIHRpbGVzLAotICogZm9ybWluZyBhIGdyaWQuIFRoZW4sIGJy
b3dzZXIgY291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHByZS1yZW5kZXIgQHBhcmFtIG4KLSAq
IHJvd3MvY29scyBpbnZvbHZpbmcgdGhlIGN1cnJlbnQgdmlld3BvcnQuCi0gKgotICogQHBhcmFt
IG8gdmlldyB0byBhc2sgcHJlLXJlbmRlciBvbi4KLSAqIEBwYXJhbSBuIG51bWJlciBvZiBjb2xz
L3Jvd3MgdGhhdCBtdXN0IGJlIHBhcnQgb2YgdGhlIHJlZ2lvbiBwcmUtcmVuZGVyZWQKLSAqCi0g
KiBAc2VlIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKCkKLSAqLwogRWluYV9Cb29sIGV3a192
aWV3X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0ICpvLCB1bnNpZ25lZCBp
bnQgbikKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKQEAgLTIyNTUsMTMgKzE3NDEsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9y
ZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QgKm8sIHVuc2lnbmVkIGludCBuKQogICAgIHJldHVy
biBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhzZCwgbiwgY3VyX3pvb20pOwog
fQogCi0vKioKLSAqIEdldCBpbnB1dCBtZXRob2QgaGludHMKLSAqCi0gKiBAcGFyYW0gbyBWaWV3
LgotICoKLSAqIEByZXR1cm4gaW5wdXQgbWV0aG9kIGhpbnRzCi0gKi8KIHVuc2lnbmVkIGludCBl
d2tfdmlld19pbWhfZ2V0KEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOwpAQCAtMjI2OSwxMSArMTc0OCw2IEBAIHVuc2lnbmVkIGludCBl
d2tfdmlld19pbWhfZ2V0KEV2YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5pbWg7CiB9
CiAKLS8qKgotICogQ2FuY2VsIChjbGVhcikgcHJldmlvdXMgcHJlLXJlbmRlciByZXF1ZXN0cy4K
LSAqCi0gKiBAcGFyYW0gbyB2aWV3IHRvIGNsZWFyIHByZS1yZW5kZXIgcmVxdWVzdHMuCi0gKi8K
IHZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCiB7CiAgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CkBAIC0yMjgxLDE0ICsxNzU1LDYgQEAg
dm9pZCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCAqbykKICAgICBzZC0+
YXBpLT5wcmVfcmVuZGVyX2NhbmNlbChzZCk7CiB9CiAKLS8qKgotICAqIEVuYWJsZSBwcm9jZXNz
aW5nIG9mIHVwZGF0ZSByZXF1ZXN0cy4KLSAgKgotICAqIEBwYXJhbSBvIHZpZXcgdG8gZW5hYmxl
IHJlbmRlcmluZy4KLSAgKgotICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHJlbmRlciB3YXMg
ZW5hYmxlZCwgQGMgRUlOQV9GQUxTRQotICAgICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIHJl
bmRlcmluZyBzdXNwZW5zaW9uIG5vdCBzdXBwb3J0ZWQpLgotICAqLwogRWluYV9Cb29sIGV3a192
aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yMjk2LDE0ICsxNzYyLDYg
QEAgRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8p
CiAgICAgcmV0dXJuIHNkLT5hcGktPmVuYWJsZV9yZW5kZXIoc2QpOwogfQogCi0vKioKLSAgKiBE
aXNhYmxlIHByb2Nlc3Npbmcgb2YgdXBkYXRlIHJlcXVlc3RzLgotICAqCi0gICogQHBhcmFtIG8g
dmlldyB0byBkaXNhYmxlIHJlbmRlcmluZy4KLSAgKgotICAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHJlbmRlciB3YXMgZGlzYWJsZWQsIEBjIEVJTkFfRkFMU0UKLSAgICAgICAgICAgIG90aGVy
d2lzZSAoZXJyb3JzLCByZW5kZXJpbmcgc3VzcGVuc2lvbiBub3Qgc3VwcG9ydGVkKS4KLSAgKi8K
IEVpbmFfQm9vbCBld2tfdmlld19kaXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCAqbykK
IHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAg
LTIzODUsMTQgKzE4NDMsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlu
a19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgYXV0bwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLS8qKgotICogR2V0cyBpZiB2aWV3IGNhbiBiZSByZXNpemVkIGF1dG9t
YXRpY2FsbHkuCi0gKgotICogQHBhcmFtIG8gdmlldyB0byBjaGVjayBzdGF0dXMKLSAqCi0gKiBA
cmV0dXJuIEVJTkFfVFJVRSBpZiB2aWV3IGNhbiBiZSByZXNpemVkLCBFSU5BX0ZBTFNFCi0gKiAg
ICAgICAgIG90aGVyd2lzZSAoZXJyb3JzLCBjYW5ub3QgYmUgcmVzaXplZCkuCi0gKi8KIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOwpAQCAtMjQwMCwxNiArMTg1MCw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpv
KQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93Owog
fQogCi0vKioKLSAqIFNldHMgaWYgdmlldyBjYW4gYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5Lgot
ICoKLSAqIEBwYXJhbSBvIFZpZXcuCi0gKiBAcGFyYW0gcmVzaXphYmxlIEBjIEVJTkFfVFJVRSBp
ZiB3ZSB3YW50IHRvIHJlc2l6ZSBhdXRvbWF0aWNhbGx5OwotICogQGMgRUlOQV9GQUxTRSBvdGhl
cndpc2UuIEl0IGRlZmF1bHRzIHRvIEBjIEVJTkFfVFJVRQotICoKLSAqIEByZXR1cm4gRUlOQV9U
UlVFIGlmIGF1dG9fcmVzaXplX3dpbmRvdyBzdGF0dXMgc2V0LCBFSU5BX0ZBTFNFCi0gKiAgICAg
ICAgIG90aGVyd2lzZSAoZXJyb3JzKS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBy
ZXNpemFibGUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CkBAIC0yNDU2LDE0ICsxODk2LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX3BsdWdpbnNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKQogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogR2V0IHN0YXR1cyBvZiBmcmFtZSBmbGF0
dGVuaW5nLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgdG8gY2hlY2sgc3RhdHVzCi0gKgotICogQHJl
dHVybiBFSU5BX1RSVUUgaWYgZmxhdHRlbmluZyBpcyBlbmFibGVkLCBFSU5BX0ZBTFNFCi0gKiAg
ICAgICAgIG90aGVyd2lzZSAoZXJyb3JzLCBmbGF0dGVuaW5nIGRpc2FibGVkKS4KLSAqLwogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOwpAQCAtMjQ3MSwxNCArMTkwMyw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCAqbykK
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmc7CiB9CiAK
LS8qKgotICogU2V0IGZyYW1lIGZsYXR0ZW5pbmcuCi0gKgotICogQHBhcmFtIG8gdmlldyB0byBz
ZXQgZmxhdHRlbmluZwotICoKLSAqIEByZXR1cm4gRUlOQV9UUlVFIGlmIGZsYXR0ZW5pbmcgc3Rh
dHVzIHNldCwgRUlOQV9GQUxTRQotICogICAgICAgICBvdGhlcndpc2UgKGVycm9ycykuCi0gKi8K
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX3NldChF
dmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI1ODcsMTQgKzIwMTEsNiBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotLyoqCi0gKiBH
ZXQgY3VycmVudCBlbmNvZGluZyBvZiB0aGlzIFZpZXcuCi0gKgotICogQHBhcmFtIG8gVmlldy4K
LSAqCi0gKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhbiBlaW5hX3N0cmluc2hhcmUgY29udGFpbmlu
ZyB0aGUgY3VycmVudCBjdXN0b20KLSAqIGVuY29kaW5nIGZvciBWaWV3IG9iamVjdCBAcGFyYW0g
bywgb3IgQGMgMCBpZiBpdCdzIG5vdCBzZXQuCi0gKi8KIGNvbnN0IGNoYXIgKmV3a192aWV3X3Nl
dHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKIHsKICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKQEAgLTI2MTEsMTQgKzIwMjcsNiBA
QCBjb25zdCBjaGFyICpld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3Qg
RXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3Rv
bTsKIH0KIAotLyoqCi0gKiBTZXQgZW5jb2Rpbmcgb2YgdGhpcyBWaWV3IGFuZCByZWxvYWQgcGFn
ZS4KLSAqCi0gKiBAcGFyYW0gbyBWaWV3LgotICogQHBhcmFtIGVuY29kaW5nIFRoZSBuZXcgZW5j
b2Rpbmcgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGVuY29kaW5nLgotICoKLSAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgot
ICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNf
T2JqZWN0ICpvLCBjb25zdCBjaGFyICplbmNvZGluZykKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI2NDgsMTIgKzIwNTYsNiBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChFdmFzX09iamVjdCAq
bywgY29uc3QgY2hhciAqZW5jbwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICog
U2V0cyB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
dG8gc2V0IGlmIGVuY29kaW5nIGRldGVjdG9yIGlzIGVuYWJsZWQuCi0gKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKLSAqLwogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0
ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjY2NiwxMiArMjA2OCw2IEBAIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX3NldChFdmFzX09iamVjdCAqbywgRWluYV9C
b29sIGVuYWJsCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotLyoqCi0gKiBHZXRzIGlmIHRo
ZSBlbmNvZGluZyBkZXRlY3RvciBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2Jq
ZWN0IHRvIGdldCBpZiBlbmNvZGluZyBkZXRlY3RvciBpcyBlbmFibGVkLgotICogQHJldHVybiBA
YyBFSU5BX1RSVUUgaWYgZW5jb2RpbmcgZGV0ZWN0b3IgaXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxT
RSBpZiBub3Qgb3Igb24gZXJyb3JzLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19l
bmNvZGluZ19kZXRlY3Rvcl9nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yNjc5LDE3ICsyMDc1LDYgQEAg
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KEV2YXNfT2Jq
ZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvcjsKIH0K
IAotLyoqCi0gKiBSZXR1cm5zIHdoZXRoZXIgZGV2ZWxvcGVyIGV4dGVuc2lvbnMgYXJlIGVuYWJs
ZWQgZm9yIHRoZSBnaXZlbiB2aWV3LgotICoKLSAqIEN1cnJlbnRseSwgdGhpcyBpcyB1c2VkIHRv
IGtub3cgd2hldGhlciB0aGUgV2ViIEluc3BlY3RvciBpcyBlbmFibGVkIGZvciBhCi0gKiBnaXZl
biB2aWV3LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoZWNrLgotICoKLSAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGRldmVsb3BlciBleHRlbnNpb25zIGFyZSBlbmFibGVkLCBA
YyBFSU5BX0ZBTFNFCi0gKiAgICAgICAgIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0KEV2YXNfT2JqZWN0ICpvKQog
ewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAt
MjY5NywxNyArMjA4Miw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZl
bG9wZXJfZXh0cmFzX2dldChFdmFzX09iamVjdCAqbykKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXM7CiB9CiAKLS8qKgotICogRW5hYmxlcy9kaXNhYmxl
cyBkZXZlbG9wZXIgZXh0ZW5zaW9ucyBmb3IgdGhlIGdpdmVuIHZpZXcuCi0gKgotICogVGhpcyBj
dXJyZW50bHkgY29udHJvbHMgd2hldGhlciB0aGUgV2ViIEluc3BlY3RvciBzaG91bGQgYmUgZW5h
YmxlZC4KLSAqCi0gKiBAcGFyYW0gbyBUaGUgdmlldyB3aG9zZSBzZXR0aW5nIHdpbGwgYmUgY2hh
bmdlZC4KLSAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBkZXZlbG9wZXIg
ZXh0cmFzLCBAYyBFSU5BX0ZBTFNFIHRvCi0gKiAgICAgICAgICAgICAgIGRpc2FibGUuCi0gKgot
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQEVJTkFfRkFMU0Ugb24gZmFpbHVy
ZS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRy
YXNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKQogewogICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjg4OCwxMiArMjI2Miw2
IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfc2Fuc19zZXJpZl9zZXQoRXZhc19P
YmplY3QgKm8sIGNvbnN0IGNoYXIgKmZhbWlsCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
LyoqCi0gKiBHZXRzIGlmIHRoZSBzcGF0aWFsIG5hdmlhZ3Rpb24gaXMgZW5hYmxlZC4KLSAqCi0g
KiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgc3BhdGlhbCBuYXZpZ2F0aW9uIHNldHRpbmcu
Ci0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzcGF0aWFsIG5hdmlnYXRpb24gaXMgZW5hYmxl
ZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3Igb24gZXJyb3JzLgotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fZ2V0KEV2YXNfT2JqZWN0ICpvKQogewog
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjkw
MSwxMiArMjI2OSw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdh
dGlvbl9nZXQoRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNwYXRp
YWxfbmF2aWdhdGlvbjsKIH0KIAotLyoqCi0gKiBTZXRzIHRoZSBzcGF0aWFsIG5hdmlnYXRpb24u
Ci0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IHNwYXRpYWwgbmF2aWdhdGlvbiBz
ZXR0aW5nLgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcyBhbmQgQGMgRUlOQV9G
QUxTRSBvbiBmYWlsdXJlCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxf
bmF2aWdhdGlvbl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpCiB7CiAgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yOTE5LDEy
ICsyMjgxLDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9u
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWIKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi0vKioKLSAqIEdldHMgaWYgdGhlIGxvY2FsIHN0b3JhZ2UgaXMgZW5hYmxlZC4KLSAq
Ci0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgaWYgbG9jYWwgc3RvcmFnZSBpcyBlbmFi
bGVkLgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgbG9jYWwgc3RvcmFnZSBpcyBlbmFibGVk
LCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBvbiBlcnJvcnMuCi0gKi8KIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjkzMiwxMiAr
MjI4OCw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KEV2
YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlOwog
fQogCi0vKioKLSAqIFNldHMgdGhlIGxvY2FsIHN0b3JhZ2Ugb2YgSFRNTDUuCi0gKgotICogQHBh
cmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IGlmIGxvY2FsIHN0b3JhZ2UgaXMgZW5hYmxlZC4KLSAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFp
bHVyZQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3NldChF
dmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI5NTAsMTIgKzIzMDAsNiBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3NldChFdmFzX09iamVjdCAqbywg
RWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIEdl
dHMgaWYgdGhlIHBhZ2UgY2FjaGUgaXMgZW5hYmxlZC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBzZXQgaWYgcGFnZSBjYWNoZSBpcyBlbmFibGVkLgotICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaWYgcGFnZSBjYWNoZSBpcyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4KLSAq
LwogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9nZXQoRXZhc19PYmplY3Qg
Km8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CkBAIC0yOTYzLDEyICsyMzA3LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9j
YWNoZV9nZXQoRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnBhZ2Vf
Y2FjaGU7CiB9CiAKLS8qKgotICogU2V0cyB0aGUgcGFnZSBjYWNoZS4KLSAqCi0gKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBzZXQgaWYgcGFnZSBjYWNoZSBpcyBlbmFibGVkLgotICogQHJldHVy
biBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcyBhbmQgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCi0g
Ki8KIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0
ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjk4MSwxMiArMjMxOSw2IEBAIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5h
YmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qCi0gKiBHZXRzIHRoZSBsb2NhbCBz
dG9yYWdlIGRhdGFiYXNlIHBhdGguCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0
IHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIHBhdGguCi0gKiBAcmV0dXJuIHRoZSBsb2NhbCBz
dG9yYWdlIGRhdGFiYXNlIHBhdGguCi0gKi8KIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdf
bG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKIHsK
ICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKQEAgLTI5OTQsMTIgKzIz
MjYsNiBAQCBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJh
c2VfcGF0aF9nZXQoY29uc3QgRXZhc19PYmplY3QgKgogICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGg7CiB9CiAKLS8qKgotICogU2V0cyB0aGUgbG9j
YWwgc3RvcmFnZSBkYXRhYmFzZSBwYXRoLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IHNldCB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBwYXRoLgotICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2VzcyBhbmQgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCi0gKi8KIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9zZXQoRXZh
c19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0zMDA5LDEyICsyMzM1LDYgQEAgRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFz
X09iamVjdCAqbywgY29uc3QKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIFNp
bWlsYXIgdG8gZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoKSwgYnV0IGRvZXMgdHlwZSBjaGVj
a2luZy4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSBpbnRlcm5hbCBkYXRh
LgotICogQHJldHVybiBpbnRlcm5hbCBkYXRhIG9yIEBjIDAgb24gZXJyb3JzIChpZTogaW5jb3Jy
ZWN0IHR5cGUgb2YgQGEgbykuCi0gKi8KIEV3a19WaWV3X1NtYXJ0X0RhdGEgKmV3a192aWV3X3Nt
YXJ0X2RhdGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOwpAQCAtMzEzMiwxOSArMjQ1Miw2IEBAIHN0cnVjdCBfRXdr
X1ZpZXdfUGFpbnRfQ29udGV4dCB7CiAgICAgY2Fpcm9fdCAqY3I7CiB9OwogCi0vKioKLSAqIENy
ZWF0ZSBhIG5ldyBwYWludCBjb250ZXh0IHVzaW5nIHRoZSB2aWV3IGFzIHNvdXJjZSBhbmQgY2Fp
cm8gYXMgb3V0cHV0LgotICoKLSAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFuZGxlIHBvaW50ZXIg
b2YgdGhlIHZpZXcgdG8gdXNlIGFzIHBhaW50IHNvdXJjZS4KLSAqIEBwYXJhbSBjciBjYWlybyBj
b250ZXh0IHRvIHVzZSBhcyBwYWludCBkZXN0aW5hdGlvbi4gQSBuZXcKLSAqICAgICAgICByZWZl
cmVuY2UgaXMgdGFrZW4sIHNvIGl0J3Mgc2FmZSB0byBjYWxsIGNhaXJvX2Rlc3Ryb3koKQotICog
ICAgICAgIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KLSAqCi0gKiBAcmV0dXJuIG5ld2x5
IGFsbG9jYXRlZCBpbnN0YW5jZSBvciBAYyAwIG9uIGVycm9ycy4KLSAqCi0gKiBAbm90ZSB0aGlz
IGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50
Ci0gKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIEV3a19W
aWV3X1BhaW50X0NvbnRleHQgKmV3a192aWV3X3BhaW50X2NvbnRleHRfbmV3KEV3a19WaWV3X1By
aXZhdGVfRGF0YSAqcHJpdiwgY2Fpcm9fdCAqY3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHByaXYsIDApOwpAQCAtMzE2NSwxNCArMjQ3Miw2IEBAIEV3a19WaWV3X1Bh
aW50X0NvbnRleHQgKmV3a192aWV3X3BhaW50X2NvbnRleHRfbmV3KEV3a19WaWV3X1ByaXZhdGVf
RGF0YSAqcHJpdiwKICAgICByZXR1cm4gY3R4dDsKIH0KIAotLyoqCi0gKiBEZXN0cm95IHByZXZp
b3VzbHkgY3JlYXRlZCBwYWludCBjb250ZXh0LgotICoKLSAqIEBwYXJhbSBjdHh0IHBhaW50IGNv
bnRleHQgdG8gZGVzdHJveS4gTXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqCi0gKiBAbm90ZSB0aGlz
IGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50
Ci0gKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIHZvaWQg
ZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9mcmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQp
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CkBAIC0zMTgxLDE2ICsy
NDgwLDYgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2ZyZWUoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCAqY3R4dCkKICAgICBmcmVlKGN0eHQpOwogfQogCi0vKioKLSAqIFNhdmUgKHB1c2gg
dG8gc3RhY2spIHBhaW50IGNvbnRleHQgc3RhdHVzLgotICoKLSAqIEBwYXJhbSBjdHh0IHBhaW50
IGNvbnRleHQgdG8gc2F2ZS4gTXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqCi0gKiBAc2VlIGV3a192
aWV3X3BhaW50X2NvbnRleHRfcmVzdG9yZSgpCi0gKgotICogQG5vdGUgdGhpcyBpcyBub3QgZm9y
IGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAotICogICAgICAg
dG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgotICovCiB2b2lkIGV3a192aWV3X3Bh
aW50X2NvbnRleHRfc2F2ZShFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0KQogewogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwpAQCAtMzE5OCwxNiArMjQ4Nyw2IEBAIHZv
aWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0
eHQpCiAgICAgY3R4dC0+Z2MtPnNhdmUoKTsKIH0KIAotLyoqCi0gKiBSZXN0b3JlIChwb3AgZnJv
bSBzdGFjaykgcGFpbnQgY29udGV4dCBzdGF0dXMuCi0gKgotICogQHBhcmFtIGN0eHQgcGFpbnQg
Y29udGV4dCB0byByZXN0b3JlLiBNdXN0IEBiIG5vdCBiZSBAYyAwLgotICoKLSAqIEBzZWUgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKCkKLSAqCi0gKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3Ig
Z2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50Ci0gKiAgICAgICB0
byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIHZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9yZXN0b3JlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CkBAIC0zMjE1LDE4ICsyNDk0LDYgQEAg
dm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCAqY3R4dCkKICAgICBjYWlyb19yZXN0b3JlKGN0eHQtPmNyKTsKIH0KIAotLyoqCi0gKiBDbGlw
IHBhaW50IGNvbnRleHQgZHJhd2luZ3MgdG8gZ2l2ZW4gYXJlYS4KLSAqCi0gKiBAcGFyYW0gY3R4
dCBwYWludCBjb250ZXh0IHRvIGNsaXAuIE11c3QgQGIgbm90IGJlIEBjIDAuCi0gKiBAcGFyYW0g
YXJlYSBjbGlwIGFyZWEgdG8gdXNlLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9zYXZlKCkKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKCkKLSAqCi0g
KiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNz
ZXMgdGhhdCB3YW50Ci0gKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUu
Ci0gKi8KIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKEV3a19WaWV3X1BhaW50X0Nv
bnRleHQgKmN0eHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQogewogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwpAQCAtMzIzNCwyMiArMjUwMSw2IEBAIHZvaWQgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGNv
bnN0IEVpbmFfUmVjdGFuCiAgICAgY3R4dC0+Z2MtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVh
LT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKSk7CiB9CiAKLS8qKgotICogUGFpbnQgdXNp
bmcgY29udGV4dCB1c2luZyBnaXZlbiBhcmVhLgotICoKLSAqIEBwYXJhbSBjdHh0IHBhaW50IGNv
bnRleHQgdG8gcGFpbnQuIE11c3QgQGIgbm90IGJlIEBjIDAuCi0gKiBAcGFyYW0gYXJlYSBwYWlu
dCBhcmVhIHRvIHVzZS4gQ29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgdmlld3Bv
cnQsCi0gKiAgICAgICAgdGh1cyAic2Nyb2xsZWQiLgotICoKLSAqIEBub3RlIG9uZSBtYXkgdXNl
IGNhaXJvIGZ1bmN0aW9ucyBvbiB0aGUgY2Fpcm8gY29udGV4dCB0bwotICogICAgICAgdHJhbnNs
YXRlLCBzY2FsZSBvciBhbnkgbW9kaWZpY2F0aW9uIHRoYXQgbWF5IGZpdCBoaXMgZGVzaXJlcy4K
LSAqCi0gKiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfY2xpcCgpCi0gKiBAc2VlIGV3a192
aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoKQotICoKLSAqIEBub3RlIHRoaXMgaXMg
bm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKLSAq
ICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KLSAqLwogdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGN0eHQpOwpAQCAtMzI2MiwyNiArMjUxMyw2IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29u
dGV4dF9wYWludChFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0LCBjb25zdCBFaW5hX1JlY3Rh
CiAgICAgY3R4dC0+dmlldy0+cGFpbnQoY3R4dC0+Z2MsIHJlY3QpOwogfQogCi0vKioKLSAqIFBh
aW50IGp1c3QgY29udGVudHMgdXNpbmcgY29udGV4dCB1c2luZyBnaXZlbiBhcmVhLgotICoKLSAq
IFVubGlrZSBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KCksIHRoaXMgZnVuY3Rpb24gcGFp
bnQganVzdAotICogYmFyZSBjb250ZW50cyBhbmQgaWdub3JlcyBhbnkgc2Nyb2xsaW5nLCBzY3Jv
bGxiYXJzIGFuZCBleHRyYXMuIEl0Ci0gKiB3aWxsIHdhbGsgdGhlIHJlbmRlcmluZyB0cmVlIGFu
ZCBwYWludCBjb250ZW50cyBpbnNpZGUgdGhlIGdpdmVuCi0gKiBhcmVhIHRvIHRoZSBjYWlybyBj
b250ZXh0IHNwZWNpZmllZCBpbiBAYSBjdHh0LgotICoKLSAqIEBwYXJhbSBjdHh0IHBhaW50IGNv
bnRleHQgdG8gcGFpbnQuIE11c3QgQGIgbm90IGJlIEBjIDAuCi0gKiBAcGFyYW0gYXJlYSBwYWlu
dCBhcmVhIHRvIHVzZS4gQ29vcmRpbmF0ZXMgYXJlIGFic29sdXRlIHRvIHBhZ2UuCi0gKgotICog
QG5vdGUgb25lIG1heSB1c2UgY2Fpcm8gZnVuY3Rpb25zIG9uIHRoZSBjYWlybyBjb250ZXh0IHRv
Ci0gKiAgICAgICB0cmFuc2xhdGUsIHNjYWxlIG9yIGFueSBtb2RpZmljYXRpb24gdGhhdCBtYXkg
Zml0IGhpcyBkZXNpcmVzLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlw
KCkKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludCgpCi0gKgotICogQG5vdGUg
dGhpcyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQg
d2FudAotICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgotICovCiB2
b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CkBAIC0zMjk1LDE1ICsyNTI2LDYgQEAgdm9pZCBl
d2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1BhaW50X0NvbnRl
eHQgKmN0eHQsIGNvbnN0IEUKICAgICBjdHh0LT52aWV3LT5wYWludENvbnRlbnRzKGN0eHQtPmdj
LCByZWN0KTsKIH0KIAotLyoqCi0gKiBTY2FsZSB0aGUgY29udGVudHMgYnkgdGhlIGdpdmVuIGZh
Y3RvcnMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIGEgc2NhbGluZyB0cmFuc2Zvcm1h
dGlvbiB1c2luZyBDYWlyby4KLSAqCi0gKiBAcGFyYW0gY3R4dCAgICBwYWludCBjb250ZXh0IHRv
IHBhaW50LiBNdXN0IEBiIG5vdCBiZSBAYyAwLgotICogQHBhcmFtIHNjYWxlX3ggc2NhbGUgZmFj
dG9yIGZvciB0aGUgWCBkaW1lbnNpb24uCi0gKiBAcGFyYW0gc2NhbGVfeSBzY2FsZSBmYWN0b3Ig
Zm9yIHRoZSBZIGRpbWVuc2lvbi4KLSAqLwogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Nj
YWxlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGZsb2F0IHNjYWxlX3gsIGZsb2F0IHNj
YWxlX3kpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CkBAIC0zMzEx
LDE1ICsyNTMzLDYgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NjYWxlKEV3a19WaWV3
X1BhaW50X0NvbnRleHQgKmN0eHQsIGZsb2F0IHNjYWxlX3gsIGYKICAgICBjdHh0LT5nYy0+c2Nh
bGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlX3gsIHNjYWxlX3kpKTsKIH0KIAotLyoqCi0gKiBQ
ZXJmb3JtcyBhIHRyYW5zbGF0aW9uIG9mIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMuCi0gKgotICog
VGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgb3JpZ2luIGNvb3JkaW5hdGVzIGJ5IEBwIHggYW5kIEBw
IHkgcGl4ZWxzLgotICoKLSAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gcGFpbnQuIE11
c3QgQGIgbm90IGJlIEBjIDAuCi0gKiBAcGFyYW0geCAgICBhbW91bnQgb2YgcGl4ZWxzIHRvIHRy
YW5zbGF0ZSBpbiB0aGUgWCBkaW1lbnNpb24uCi0gKiBAcGFyYW0geSAgICBhbW91bnQgb2YgcGl4
ZWxzIHRvIHRyYW5zbGF0ZSBpbiB0aGUgWSBkaW1lbnNpb24uCi0gKi8KIHZvaWQgZXdrX3ZpZXdf
cGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgZmxv
YXQgeCwgZmxvYXQgeSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsK
QEAgLTMzMjcsMzMgKzI1NDAsNiBAQCB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfdHJhbnNs
YXRlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGZsb2F0IHgsIGZsbwogICAgIGN0eHQt
PmdjLT50cmFuc2xhdGUoeCwgeSk7CiB9CiAKLS8qKgotICogUGFpbnQgdXNpbmcgZ2l2ZW4gZ3Jh
cGhpY3MgY29udGV4dCB0aGUgZ2l2ZW4gYXJlYS4KLSAqCi0gKiBUaGlzIHVzZXMgdmlld3BvcnQg
cmVsYXRpdmUgYXJlYSBhbmQgd2lsbCBhbHNvIGhhbmRsZSBzY3JvbGxiYXJzCi0gKiBhbmQgb3Ro
ZXIgZXh0cmEgZWxlbWVudHMuIFNlZSBld2tfdmlld19wYWludF9jb250ZW50cygpIGZvciB0aGUK
LSAqIGFsdGVybmF0aXZlIGZ1bmN0aW9uLgotICoKLSAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFu
ZGxlIHBvaW50ZXIgb2YgdmlldyB0byB1c2UgYXMgcGFpbnQgc291cmNlLgotICogQHBhcmFtIGNy
IGNhaXJvIGNvbnRleHQgdG8gdXNlIGFzIHBhaW50IGRlc3RpbmF0aW9uLiBJdHMgc3RhdGUgd2ls
bAotICogICAgICAgIGJlIHNhdmVkIGJlZm9yZSBvcGVyYXRpb24gYW5kIHJlc3RvcmVkIGFmdGVy
d2FyZHMuCi0gKiBAcGFyYW0gYXJlYSB2aWV3cG9ydCByZWxhdGl2ZSBnZW9tZXRyeSB0byBwYWlu
dC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZB
TFNFIG9uIGZhaWx1cmUsIGxpa2UKLSAqICAgICAgICAgaW5jb3JyZWN0IHBhcmFtZXRlcnMuCi0g
KgotICogQG5vdGUgdGhpcyBpcyBhbiBlYXN5IHRvIHVzZSB2ZXJzaW9uLCBidXQgaW50ZXJuYWwg
c3RydWN0dXJlcyBhcmUKLSAqICAgICAgIGFsd2F5cyBjcmVhdGVkLCB0aGVuIGdyYXBoaWNzIGNv
bnRleHQgaXMgY2xpcHBlZCwgdGhlbgotICogICAgICAgcGFpbnRlZCwgcmVzdG9yZWQgYW5kIGRl
c3Ryb3llZC4gVGhpcyBtaWdodCBub3QgYmUgb3B0aW11bSwKLSAqICAgICAgIHNvIHVzaW5nICNF
d2tfVmlld19QYWludF9Db250ZXh0IG1heSBiZSBhIGJldHRlciBzb2x1dGlvbnMKLSAqICAgICAg
IGZvciBsYXJnZSBudW1iZXIgb2Ygb3BlcmF0aW9ucy4KLSAqCi0gKiBAc2VlIGV3a192aWV3X3Bh
aW50X2NvbnRlbnRzKCkKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludCgpCi0g
KgotICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJj
bGFzc2VzIHRoYXQgd2FudAotICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0
b3JlLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
ICpwcml2LCBjYWlyb190ICpjciwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYsIEVJTkFfRkFMU0UpOwpAQCAtMzM3
OSwzMyArMjU2NSw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19wYWludChFd2tfVmlld19Qcml2YXRl
X0RhdGEgKnByaXYsIGNhaXJvX3QgKmNyLCBjb25zdCBFaW5hX1JlCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotLyoqCi0gKiBQYWludCBqdXN0IGNvbnRlbnRzIHVzaW5nIGdpdmVuIGdyYXBo
aWNzIGNvbnRleHQgdGhlIGdpdmVuIGFyZWEuCi0gKgotICogVGhpcyB1c2VzIGFic29sdXRlIGNv
b3JkaW5hdGVzIGZvciBhcmVhIGFuZCB3aWxsIGp1c3QgaGFuZGxlCi0gKiBjb250ZW50cywgbm8g
c2Nyb2xsYmFycyBvciBleHRyYXMuIFNlZSBld2tfdmlld19wYWludCgpIGZvciB0aGUKLSAqIGFs
dGVybmF0aXZlIHNvbHV0aW9uLgotICoKLSAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFuZGxlIHBv
aW50ZXIgb2YgdmlldyB0byB1c2UgYXMgcGFpbnQgc291cmNlLgotICogQHBhcmFtIGNyIGNhaXJv
IGNvbnRleHQgdG8gdXNlIGFzIHBhaW50IGRlc3RpbmF0aW9uLiBJdHMgc3RhdGUgd2lsbAotICog
ICAgICAgIGJlIHNhdmVkIGJlZm9yZSBvcGVyYXRpb24gYW5kIHJlc3RvcmVkIGFmdGVyd2FyZHMu
Ci0gKiBAcGFyYW0gYXJlYSBhYnNvbHV0ZSBnZW9tZXRyeSB0byBwYWludC4KLSAqCi0gKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUs
IGxpa2UKLSAqICAgICAgICAgaW5jb3JyZWN0IHBhcmFtZXRlcnMuCi0gKgotICogQG5vdGUgdGhp
cyBpcyBhbiBlYXN5IHRvIHVzZSB2ZXJzaW9uLCBidXQgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUK
LSAqICAgICAgIGFsd2F5cyBjcmVhdGVkLCB0aGVuIGdyYXBoaWNzIGNvbnRleHQgaXMgY2xpcHBl
ZCwgdGhlbgotICogICAgICAgcGFpbnRlZCwgcmVzdG9yZWQgYW5kIGRlc3Ryb3llZC4gVGhpcyBt
aWdodCBub3QgYmUgb3B0aW11bSwKLSAqICAgICAgIHNvIHVzaW5nICNFd2tfVmlld19QYWludF9D
b250ZXh0IG1heSBiZSBhIGJldHRlciBzb2x1dGlvbnMKLSAqICAgICAgIGZvciBsYXJnZSBudW1i
ZXIgb2Ygb3BlcmF0aW9ucy4KLSAqCi0gKiBAc2VlIGV3a192aWV3X3BhaW50KCkKLSAqIEBzZWUg
ZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cygpCi0gKgotICogQG5vdGUgdGhp
cyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2Fu
dAotICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgotICovCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2
LCBjYWlyb190ICpjciwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYsIEVJTkFfRkFMU0UpOwpAQCAtNDE2NSwxOSAr
MzMyNCw2IEBAIHZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0ICpvLCBXZWJDb3Jl
OjpQb3B1cE1lbnVDbGllbnQgKmNsaWVudCwgaW50IHNlCiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChvLCAicG9wdXAsY3JlYXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOwogfQog
Ci0vKioKLSAqIERlc3Ryb3kgYSBwcmV2aW91c2x5IGNyZWF0ZWQgbWVudS4KLSAqCi0gKiBCZWZv
cmUgZGVzdHJveWluZywgaXQgaW5mb3JtcyBjbGllbnQgdGhhdCBtZW51J3MgZGF0YSBpcyByZWFk
eSB0byBiZQotICogZGVzdHJveWVkIGJ5IHNlbmRpbmcgYSAicG9wdXAsd2lsbGRlbGV0ZSIgd2l0
aCBhIGxpc3Qgb2YgbWVudSBpdGVtcy4gVGhlbiBpdAotICogcmVtb3ZlcyBhbnkgcmVmZXJlbmNl
IHRvIG1lbnUgaW5zaWRlIHdlYmtpdC4gSXQncyBzYWZlIHRvIGNhbGwgdGhpcwotICogZnVuY3Rp
b24gZWl0aGVyIGZyb20gaW5zaWRlIHdlYmtpdCBvciBmcm9tIGJyb3dzZXIuCi0gKgotICogQHBh
cmFtIG8gVmlldy4KLSAqCi0gKiBAcmV0dXJucyBFSU5BX1RSVUUgaW4gY2FzZSBtZW51IHdhcyBz
dWNjZXNzZnVsbHkgZGVzdHJveWVkIG9yIEVJTkFfVFJVRSBpbgotICogY2FzZSB0aGVyZSB3YXNu
J3QgYW55IG1lbnUgdG8gYmUgZGVzdHJveWVkLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9w
dXBfZGVzdHJveShFdmFzX09iamVjdCAqbykKIHsKICAgICBJTkYoIm89JXAiLCBvKTsKQEAgLTQy
MDEsMTcgKzMzNDcsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09i
amVjdCAqbykKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIENoYW5nZXMgY3Vy
cmVudGx5IHNlbGVjdGVkIGl0ZW0uCi0gKgotICogQ2hhbmdlcyB0aGUgb3B0aW9uIHNlbGVjdGVk
IGluIHNlbGVjdCB3aWRnZXQuIFRoaXMgaXMgY2FsbGVkIGJ5IGJyb3dzZXIKLSAqIHdoZW5ldmVy
IHVzZXIgaGFzIGNob3NlbiBhIGRpZmZlcmVudCBpdGVtLiBNb3N0IGxpa2VseSBhZnRlciBjYWxs
aW5nIHRoaXMsIGEKLSAqIGNhbGwgdG8gZXdrX3ZpZXdfcG9wdXBfZGVzdHJveSBtaWdodCBiZSBt
YWRlIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBwb3B1cC4KLSAqCi0gKiBAcGFyYW0gbyBWaWV3Lgot
ICogQGluZGV4IEluZGV4IG9mIHNlbGVjdGVkIGl0ZW0uCi0gKgotICovCiB2b2lkIGV3a192aWV3
X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCAqbywgaW50IGluZGV4KQogewogICAgIElO
Rigibz0lcCIsIG8pOwpAQCAtNDI1NSwxOCArMzM5MCw2IEBAIHZvaWQgZXdrX3ZpZXdfdmlld3Bv
cnRfYXR0cmlidXRlc19zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXJnCiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidmlld3BvcnQsY2hh
bmdlZCIsIDApOwogfQogCi0vKioKLSAqIEdldHMgYXR0cmlidXRlcyBvZiB2aWV3cG9ydCBtZXRh
IHRhZy4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3LgotICogQHBhcmFtIHcgd2lkdGguCi0gKiBAcGFy
YW0gaCBoZWlnaHQuCi0gKiBAcGFyYW0gaW5pdF9zY2FsZSBpbml0aWFsIFNjYWxlIHZhbHVlLgot
ICogQHBhcmFtIG1heF9zY2FsZSBtYXhpbXVtIFNjYWxlIHZhbHVlLgotICogQHBhcmFtIG1pbl9z
Y2FsZSBtaW5pbXVtIFNjYWxlIHZhbHVlLgotICogQHBhcmFtIGRldmljZV9waXhlbF9yYXRpbyB2
YWx1ZS4KLSAqIEBwYXJhbSB1c2VyX3NjYWxhYmxlIHVzZXIgU2NhbGFibGUgdmFsdWUuCi0gKi8K
IHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoRXZhc19PYmplY3QgKm8sIGZs
b2F0ICp3LCBmbG9hdCAqaCwgZmxvYXQgKmluaXRfc2NhbGUsIGZsb2F0ICptYXhfc2NhbGUsIGZs
b2F0ICptaW5fc2NhbGUsIGZsb2F0ICpkZXZpY2VfcGl4ZWxfcmF0aW8sIEVpbmFfQm9vbCAqdXNl
cl9zY2FsYWJsZSkKIHsKICAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRl
cyA9IF9ld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGUobyk7CkBAIC00Mjg3LDE1
ICszNDEwLDYgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChFdmFzX09i
amVjdCAqbywgZmxvYXQgKncsIGZsb2F0ICpoLCBmbG9hdAogICAgICAgICAqdXNlcl9zY2FsYWJs
ZSA9IHN0YXRpY19jYXN0PGJvb2w+KGF0dHJpYnV0ZXMudXNlclNjYWxhYmxlKTsKIH0KIAotLyoq
Ci0gKiBTZXRzIHRoZSB6b29tIHJhbmdlLgotICoKLSAqIEBwYXJhbSBvIHZpZXcuCi0gKiBAcGFy
YW0gbWluX3NjYWxlIG1pbmltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KLSAqIEBwYXJhbSBtYXhf
c2NhbGUgbWF4aW11bSB2YWx1ZSBvZiB6b29tIHJhbmdlLgotICoKLSAqIEByZXR1cm4gQGMgRUlO
QV9UUlVFIGlmIHpvb20gcmFuZ2UgaXMgY2hhbmdlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3Ig
ZmFpbHVyZS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBmbG9hdCBtaW5fc2NhbGUsIGZsb2F0IG1heF9zY2FsZSkKIHsKICAgICBFV0tfVklF
V19TRF9HRVQobywgc2QpOwpAQCAtNDMxMiwxMyArMzQyNiw2IEBAIEVpbmFfQm9vbCBld2tfdmll
d196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgbWluX3NjYWxlLCBmbG9hdCBt
YXhfc2NhCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotLyoqCi0gKiBHZXRzIHRoZSBtaW5p
bXVtIHZhbHVlIG9mIHpvb20gcmFuZ2UuCi0gKgotICogQHBhcmFtIG8gdmlldy4KLSAqCi0gKiBA
cmV0dXJuIG1pbmltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KLSAqLwogZmxvYXQgZXdrX3ZpZXdf
em9vbV9yYW5nZV9taW5fZ2V0KEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dF
VChvLCBzZCk7CkBAIC00MzI3LDEzICszNDM0LDYgQEAgZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5n
ZV9taW5fZ2V0KEV2YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLm1pbl9zY2FsZTsKIH0KIAotLyoqCi0gKiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIG9m
IHpvb20gcmFuZ2UuCi0gKgotICogQHBhcmFtIG8gdmlldy4KLSAqCi0gKiBAcmV0dXJuIG1heGlt
dW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KLSAqLwogZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5nZV9t
YXhfZ2V0KEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CkBA
IC00MzQyLDEzICszNDQyLDYgQEAgZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5nZV9tYXhfZ2V0KEV2
YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9z
Y2FsZTsKIH0KIAotLyoqCi0gKiBTZXRzIGlmIHpvb20gaXMgZW5hYmxlZC4KLSAqCi0gKiBAcGFy
YW0gbyB2aWV3LgotICogQHBhcmFtIHVzZXJfc2NhbGFibGUgYm9vbGVhbiBwb2ludGVyIGluIHdo
aWNoIHRvIGVuYWJsZSB6b29tLiBJdCBkZWZhdWx0cwotICogdG8gQGMgRUlOQV9UUlVFLgotICov
CiB2b2lkIGV3a192aWV3X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jv
b2wgdXNlcl9zY2FsYWJsZSkKIHsKICAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOwpAQCAtNDM1
NywxNCArMzQ1MCw2IEBAIHZvaWQgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxlKQogICAgIHByaXYtPnNldHRpbmdzLnpvb21f
cmFuZ2UudXNlcl9zY2FsYWJsZSA9IHVzZXJfc2NhbGFibGU7CiB9CiAKLS8qKgotICogR2V0cyBp
ZiB6b29tIGlzIGVuYWJsZWQuCi0gKgotICogQHBhcmFtIG8gdmlldy4KLSAqIEBwYXJhbSB1c2Vy
X3NjYWxhYmxlIHdoZXJlIHRvIHJldHVybiB0aGUgY3VycmVudCB1c2VyIHNjYWxhYmxlIHZhbHVl
LgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHpvb20gaXMgZW5hYmxlZCwgQGMgRUlO
QV9GQUxTRSBpZiBub3QuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dl
dChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOwpAQCAtNDM3
MywxNCArMzQ1OCw2IEBAIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dldChFdmFz
X09iamVjdCAqbykKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3Nj
YWxhYmxlOwogfQogCi0vKioKLSAqIEdldHMgZGV2aWNlIHBpeGVsIHJhdGlvIHZhbHVlLgotICoK
LSAqIEBwYXJhbSBvIHZpZXcuCi0gKiBAcGFyYW0gdXNlcl9zY2FsYWJsZSB3aGVyZSB0byByZXR1
cm4gdGhlIGN1cnJlbnQgdXNlciBzY2FsYWJsZSB2YWx1ZS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBpZiB6b29tIGlzIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UgaWYgbm90LgotICovCiBm
bG9hdCBld2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KEV2YXNfT2JqZWN0ICpvKQogewog
ICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CkBAIC00NDk4LDE1ICszNTc1LDYgQEAgRWluYV9C
b29sIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChFdmFzX09iamVjdCAqbykKIH0KICNl
bmRpZgogCi0vKioKLSAqIFNldHMgdmlldyBtb2RlLiBUaGUgdmlldy1tb2RlIG1lZGlhIGZlYXR1
cmUgZGVzY3JpYmVzIHRoZSBtb2RlIGluIHdoaWNoIHRoZQotICogV2ViIGFwcGxpY2F0aW9uIGlz
IGJlaW5nIHNob3duIGFzIGEgcnVubmluZyBhcHBsaWNhdGlvbi4KLSAqCi0gKiBAcGFyYW0gbyB2
aWV3IG9iamVjdCB0byBjaGFuZ2UgdmlldyBtb2RlLgotICogQHBhcmFtIHZpZXdfbW9kZSBwYWdl
IHZpZXcgbW9kZSB0byBiZSBzZXQKLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB2aWV3
IG1vZGUgaXMgc2V0IGFzIHZpZXdfbW9kZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8K
IEVpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1ZpZXdfTW9k
ZSB2aWV3X21vZGUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CkBAIC00NTM1LDE0ICszNjAzLDYgQEAgRWluYV9Cb29sIGV3a192aWV3X21vZGVf
c2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSkKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi0vKioKLSAqIEdldHMgdmlldyBtb2RlLiBUaGUgdmlldy1tb2RlIG1l
ZGlhIGZlYXR1cmUgZGVzY3JpYmVzIHRoZSBtb2RlIGluIHdoaWNoIHRoZQotICogV2ViIGFwcGxp
Y2F0aW9uIGlzIGJlaW5nIHNob3duIGFzIGEgcnVubmluZyBhcHBsaWNhdGlvbi4KLSAqCi0gKiBA
cGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSB2aWV3IG1vZGUuCi0gKgotICogQHJldHVybiBl
bnVtIHZhbHVlIG9mIEV3a19WaWV3X01vZGUgdGhhdCBpbmRpY2F0ZXMgY3VycmVudCB2aWV3IG1v
ZGUuCi0gKi8KIEV3a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoRXZhc19PYmplY3QgKm8p
CiB7CiAgICAgRXdrX1ZpZXdfTW9kZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9XSU5ET1dFRDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXggZWI3MzY2Ny4uNDg3ZWFkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3LmgKQEAgLTMzLDYgKzMzLDcgQEAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAog
LyoqCisgKiBAZmlsZSAgZXdrX3ZpZXcuaAogICogQGJyaWVmIFdlYktpdCBtYWluIHNtYXJ0IG9i
amVjdC4KICAqCiAgKiBUaGlzIG9iamVjdCBpcyB0aGUgaGlnaCBsZXZlbCBhY2Nlc3MgdG8gV2Vi
S2l0LUVGTCBicm93c2VyCkBAIC0zMTcsNDYgKzMxOCwzNTEgQEAgdHlwZWRlZiBlbnVtIF9Fd2tf
Vmlld19Nb2RlIEV3a19WaWV3X01vZGU7CiAgKiBncm91cCBtYXhpbXVtIHVudXNlZCBtZW1vcnkg
cmVzaWRlbnQgaW4gdGhlIHN5c3RlbS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1Vu
dXNlZF9DYWNoZSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGU7CisKKy8qKgorICogQ2hhbmdlIGNhY2hl
IGNhcGFjaXR5LCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIHdpbGwgbm90IGZsdXNoIGNhY2hlLCB1
c2UgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKCkgb3IKKyAqIGV3a190aWxlX3VudXNlZF9j
YWNoZV9hdXRvX2ZsdXNoKCkgdG8gZG8gc28uCisgKi8KIEVBUEkgdm9pZCAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4
KTsKKworLyoqCisgKiBSZXRyaWV2ZSBtYXhpbXVtIGNhY2hlIGNhcGFjaXR5LCBpbiBieXRlcy4K
KyAqLwogRUFQSSBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworCisvKioKKyAqIFJldHJpZXZlIHRoZSB1c2VkIGNh
Y2hlIGNhcGFjaXR5LCBpbiBieXRlcy4KKyAqLwogRUFQSSBzaXplX3QgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKKworLyoq
CisgKiBGbHVzaCBnaXZlbiBhbW91bnQgb2YgYnl0ZXMgZnJvbSBjYWNoZS4KKyAqCisgKiBBZnRl
ciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIG5lYXIgQGEgYnl0ZXMgYXJlIGZyZWVkIGZyb20gY2Fj
aGUuIEl0CisgKiBtYXkgYmUgbGVzcyBpZiBjYWNoZSBkaWQgbm90IGNvbnRhaW4gdGhhdCBhbW91
bnQgb2YgYnl0ZXMgKGllOiBhbgorICogZW1wdHkgY2FjaGUgaGFzIG5vdGhpbmcgdG8gZnJlZSEp
IG9yIG1vcmUgaWYgdGhlIGNhY2hlIGp1c3QKKyAqIGNvbnRhaW5lZCBvYmplY3RzIHRoYXQgd2Vy
ZSBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIGFtb3VudCAodGhpcworICogaXMgdXN1YWxseSB0
aGUgY2FzZSkuCisgKgorICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKiBA
cGFyYW0gYnl0ZXMgYW1vdW50IHRvIGZyZWUuCisgKgorICogQHJldHVybiBhbW91bnQgcmVhbGx5
IGZyZWVkLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KCkKKyAq
LwogRUFQSSBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpOworCisvKioKKyAqIEZsdXNoIGVub3VnaCBieXRl
cyB0byBtYWtlIGNhY2hlIHVzYWdlIGxvd2VyIHRoYW4gbWF4aW11bS4KKyAqCisgKiBKdXN0IGxp
a2UgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKCksIGJ1dCB0aGlzIHdpbGwgbWFrZSB0aGUg
Y2FjaGUKKyAqIGZyZWUgZW5vdWdoIHRpbGVzIHRvIHJlc3BlY3QgbWF4aW11bSBjYWNoZSBzaXpl
IGFzIGRlZmluZWQgd2l0aAorICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoKS4KKyAq
CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIHdoZW4gc3lzdGVtIGJlY29tZXMg
aWRsZS4gVGhpcyB3YXkKKyAqIHdlIGtlZXAgbWVtb3J5IGxvdyBidXQgZG8gbm90IGltcGFjdCBw
ZXJmb3JtYW5jZSB3aGVuCisgKiBjcmVhdGluZy9kZWxldGluZyB0aWxlcy4KKyAqLwogRUFQSSB2
b2lkICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpOwogCisvKioKKyAqIFNldHMgdGhlIHNtYXJ0IGNsYXNzIGFwaSB3aXRob3V0IGFu
eSBiYWNraW5nIHN0b3JlLCBlbmFibGluZyB2aWV3CisgKiB0byBiZSBpbmhlcml0ZWQuCisgKgor
ICogQHBhcmFtIGFwaSBjbGFzcyBkZWZpbml0aW9uIHRvIGJlIHNldCwgYWxsIG1lbWJlcnMgd2l0
aCB0aGUKKyAqICAgICAgICBleGNlcHRpb24gb2YgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBtYXkg
YmUgb3ZlcnJpZGRlbi4gTXVzdAorICogICAgICAgIEBiIG5vdCBiZSBAYyAwLgorICoKKyAqIEBu
b3RlIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEgaXMgdXNlZCB0byBpbXBsZW1lbnQgdHlwZSBjaGVj
a2luZyBhbmQKKyAqICAgICAgIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBjaGFuZ2VkL292ZXJyaWRk
ZW4uIElmIHlvdSBuZWVkIGV4dHJhCisgKiAgICAgICBkYXRhIGZvciB5b3VyIHNtYXJ0IGNsYXNz
IHRvIHdvcmssIGp1c3QgZXh0ZW5kCisgKiAgICAgICBFd2tfVmlld19TbWFydF9DbGFzcyBpbnN0
ZWFkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFM
U0Ugb24gZmFpbHVyZSAocHJvYmFibHkKKyAqICAgICAgICAgdmVyc2lvbiBtaXNtYXRjaCkuCisg
KgorICogQHNlZSBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KCkKKyAqIEBzZWUgZXdrX3ZpZXdf
dGlsZWRfc21hcnRfc2V0KCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfYmFzZV9z
bWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CisKKy8qKgorICogU2V0cyB0aGUg
c21hcnQgY2xhc3MgYXBpIHVzaW5nIHNpbmdsZSBiYWNraW5nIHN0b3JlLCBlbmFibGluZyB2aWV3
CisgKiB0byBiZSBpbmhlcml0ZWQuCisgKgorICogQHBhcmFtIGFwaSBjbGFzcyBkZWZpbml0aW9u
IHRvIGJlIHNldCwgYWxsIG1lbWJlcnMgd2l0aCB0aGUKKyAqICAgICAgICBleGNlcHRpb24gb2Yg
RXZhc19TbWFydF9DbGFzcy0+ZGF0YSBtYXkgYmUgb3ZlcnJpZGRlbi4gTXVzdAorICogICAgICAg
IEBiIG5vdCBiZSBAYyBOVUxMLgorICoKKyAqIEBub3RlIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEg
aXMgdXNlZCB0byBpbXBsZW1lbnQgdHlwZSBjaGVja2luZyBhbmQKKyAqICAgICAgIGlzIG5vdCBz
dXBwb3NlZCB0byBiZSBjaGFuZ2VkL292ZXJyaWRkZW4uIElmIHlvdSBuZWVkIGV4dHJhCisgKiAg
ICAgICBkYXRhIGZvciB5b3VyIHNtYXJ0IGNsYXNzIHRvIHdvcmssIGp1c3QgZXh0ZW5kCisgKiAg
ICAgICBFd2tfVmlld19TbWFydF9DbGFzcyBpbnN0ZWFkLgorICoKKyAqIEByZXR1cm4gQGMgRUlO
QV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSAocHJvYmFibHkKKyAq
ICAgICAgICAgdmVyc2lvbiBtaXNtYXRjaCkuCisgKgorICogQHNlZSBld2tfdmlld19iYXNlX3Nt
YXJ0X3NldCgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NpbmdsZV9zbWFydF9z
ZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CisKKy8qKgorICogU2V0cyB0aGUgc21hcnQg
Y2xhc3MgYXBpIHVzaW5nIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGVuYWJsaW5nIHZpZXcKKyAqIHRv
IGJlIGluaGVyaXRlZC4KKyAqCisgKiBAcGFyYW0gYXBpIGNsYXNzIGRlZmluaXRpb24gdG8gYmUg
c2V0LCBhbGwgbWVtYmVycyB3aXRoIHRoZQorICogICAgICAgIGV4Y2VwdGlvbiBvZiBFdmFzX1Nt
YXJ0X0NsYXNzLT5kYXRhIG1heSBiZSBvdmVycmlkZGVuLiBNdXN0CisgKiAgICAgICAgQGIgbm90
IGJlIEBjIE5VTEwuCisgKgorICogQG5vdGUgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBpcyB1c2Vk
IHRvIGltcGxlbWVudCB0eXBlIGNoZWNraW5nIGFuZAorICogICAgICAgaXMgbm90IHN1cHBvc2Vk
IHRvIGJlIGNoYW5nZWQvb3ZlcnJpZGRlbi4gSWYgeW91IG5lZWQgZXh0cmEKKyAqICAgICAgIGRh
dGEgZm9yIHlvdXIgc21hcnQgY2xhc3MgdG8gd29yaywganVzdCBleHRlbmQKKyAqICAgICAgIEV3
a19WaWV3X1NtYXJ0X0NsYXNzIGluc3RlYWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
b24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlIChwcm9iYWJseQorICogICAgICAg
ICB2ZXJzaW9uIG1pc21hdGNoKS4KKyAqCisgKiBAc2VlIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0
KCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KEV3a19W
aWV3X1NtYXJ0X0NsYXNzICphcGkpOwogCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgRUZMIFdlYktp
dCBWaWV3IG9iamVjdC4KKyAqCisgKiBWaWV3IG9iamVjdHMgYXJlIHRoZSByZWNvbW1lbmRlZCB3
YXkgdG8gZGVhbCB3aXRoIEVGTCBXZWJLaXQgYXMgaXQKKyAqIGFic3RyYWN0cyB0aGUgY29tcGxl
eCBwaWVjZXMgb2YgdGhlIHByb2Nlc3MuCisgKgorICogRWFjaCB2aWV3IGlzIGNvbXBvc2VkIGJ5
IGEgc2V0IG9mIGZyYW1lcy4gVGhlIHNldCBoYXMgYXQgbGVhc3Qgb25lCisgKiBmcmFtZSwgY2Fs
bGVkICdtYWluX2ZyYW1lJy4gU2VlIGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KCkgYW5kCisgKiBl
d2tfdmlld19mcmFtZV9mb2N1c2VkX2dldCgpLgorICoKKyAqIEBwYXJhbSBlIGNhbnZhcyB3aGVy
ZSB0byBjcmVhdGUgdGhlIHZpZXcgb2JqZWN0LgorICoKKyAqIEByZXR1cm4gdmlldyBvYmplY3Qg
b3IgQGMgTlVMTCBpZiBlcnJvcnMuCisgKgorICogQHNlZSBld2tfdmlld191cmlfc2V0KCkKKyAq
LwogRUFQSSBFdmFzX09iamVjdCAqZXdrX3ZpZXdfc2luZ2xlX2FkZChFdmFzICplKTsKKworLyoq
CisgKiBDcmVhdGVzIGEgbmV3IEVGTCBXZWJLaXQgVmlldyBvYmplY3QgdXNpbmcgdGlsZWQgYmFj
a2luZyBzdG9yZS4KKyAqCisgKiBWaWV3IG9iamVjdHMgYXJlIHRoZSByZWNvbW1lbmRlZCB3YXkg
dG8gZGVhbCB3aXRoIEVGTCBXZWJLaXQgYXMgaXQKKyAqIGFic3RyYWN0cyB0aGUgY29tcGxleCBw
aWVjZXMgb2YgdGhlIHByb2Nlc3MuCisgKgorICogVGhpcyBvYmplY3QgaXMgYWxtb3N0IHRoZSBz
YW1lIGFzIHRoZSBvbmUgcmV0dXJuZWQgYnkgdGhlIGV3a192aWV3X2FkZCgpCisgKiBmdW5jdGlv
biwgYnV0IGl0IHVzZXMgdGhlIHRpbGVkIGJhY2tpbmcgc3RvcmUgaW5zdGVhZCBvZiB0aGUgZGVm
YXVsdAorICogYmFja2luZyBzdG9yZS4KKyAqCisgKiBAcGFyYW0gZSBjYW52YXMgd2hlcmUgdG8g
Y3JlYXRlIHRoZSB2aWV3IG9iamVjdC4KKyAqCisgKiBAcmV0dXJuIHZpZXcgb2JqZWN0IG9yIEBj
IE5VTEwgaWYgZXJyb3JzLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfdXJpX3NldCgpCisgKi8KIEVB
UEkgRXZhc19PYmplY3QgKmV3a192aWV3X3RpbGVkX2FkZChFdmFzICplKTsKIAorLyoqCisgKiBH
ZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcyB1c2VkIGJ5IHRoaXMgdmlldy4KKyAqCisgKiBA
cGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY2FjaGUuCisgKiBAcmV0dXJuIGluc3RhbmNlIG9m
ICJjYWNoZSBvZiB1bnVzZWQgdGlsZXMiIG9yIEBjIE5VTEwgb24gZXJyb3JzLgorICovCiBFQVBJ
IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChj
b25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogU2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMgdXNlZCBieSB0aGlzIHZpZXcuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8g
Z2V0IGNhY2hlLgorICogQHBhcmFtIGNhY2hlIGluc3RhbmNlIG9mICJjYWNoZSBvZiB1bnVzZWQg
dGlsZXMiLiBUaGlzIGNhbiBiZSB1c2VkCisgKiAgICAgICAgdG8gc2hhcmUgYSBzaW5nbGUgY2Fj
aGUgYW1vbmdzdCBkaWZmZXJlbnQgdmlld3MuIFRoZSB0aWxlcworICogICAgICAgIGZyb20gb25l
IHZpZXcgd2lsbCBub3QgYmUgdXNlZCBieSB0aGUgb3RoZXIhIFRoaXMgaXMganVzdCB0bworICog
ICAgICAgIGxpbWl0IHRoZSBncm91cCB3aXRoIGFtb3VudCBvZiB1bnVzZWQgbWVtb3J5LgorICog
ICAgICAgIElmIEBjIE5VTEwgaXMgcHJvdmlkZWQsIHRoZW4gYSBuZXcgY2FjaGUgaXMgY3JlYXRl
ZC4KKyAqLwogRUFQSSB2b2lkICAgICAgICAgICAgICAgICAgIGV3a192aWV3X3RpbGVkX3VudXNl
ZF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqY2FjaGUp
OwogCiAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcmVtb3ZlZCBsYXRlciwgd2hl
biB3ZSBmaW5kIHRoZSBiZXN0IGZsYWcgdG8gdXNlLgorLyoqCisgKiBTZXQgdGhlIGZ1bmN0aW9u
IHdpdGggdGhlIHNhbWUgbmFtZSBvZiB0aGUgdGlsZWQgYmFja2luZyBzdG9yZS4KKyAqIEBwYXJh
bSBvIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlIG9iamVjdC4KKyAqIEBwYXJhbSBmbGFnIHZhbHVl
IG9mIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlIGZsYWcgdG8gc2V0LgorICovCiBFQVBJIHZvaWQg
ICAgICAgICAgICAgICAgICAgZXdrX3ZpZXdfdGlsZWRfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0
KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZmxhZyk7CiAKKy8qKgorICogU2V0IGEgZml4ZWQg
bGF5b3V0IHNpemUgdG8gYmUgdXNlZCwgZGlzc29jaWF0aW5nIGl0IGZyb20gdmlld3BvcnQgc2l6
ZS4KKyAqCisgKiBTZXR0aW5nIGEgd2lkdGggZGlmZmVyZW50IHRoYW4gemVybyBlbmFibGVzIGZp
eGVkIGxheW91dCBvbiB0aGF0CisgKiBzaXplLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2NhbGVkIGJh
c2VkIG9uIHpvb20sIGJ1dCB3aWxsIG5vdCBjaGFuZ2UKKyAqIGlmIHZpZXdwb3J0IGNoYW5nZXMu
CisgKgorICogU2V0dGluZyBib3RoIEBhIHcgYW5kIEBhIGggdG8gemVybyB3aWxsIGRpc2FibGUg
Zml4ZWQgbGF5b3V0LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZSBmaXhl
ZCBsYXlvdXQuCisgKiBAcGFyYW0gdyBmaXhlZCB3aWR0aCB0byB1c2UuIFRoaXMgc2l6ZSB3aWxs
IGJlIGF1dG9tYXRpY2FsbHkgc2NhbGVkCisgKiAgICAgICAgYmFzZWQgb24gem9vbSBsZXZlbC4K
KyAqIEBwYXJhbSBoIGZpeGVkIGhlaWdodCB0byB1c2UuIFRoaXMgc2l6ZSB3aWxsIGJlIGF1dG9t
YXRpY2FsbHkgc2NhbGVkCisgKiAgICAgICAgYmFzZWQgb24gem9vbSBsZXZlbC4KKyAqLwogRUFQ
SSB2b2lkICAgICAgICAgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0
ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCk7CisKKy8qKgorICogR2V0IGZpeGVkIGxh
eW91dCBzaXplIGluIHVzZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSBm
aXhlZCBsYXlvdXQgc2l6ZS4KKyAqIEBwYXJhbSB3IHdoZXJlIHRvIHJldHVybiB3aWR0aC4gUmV0
dXJucyAwIG9uIGVycm9yIG9yIGlmIG5vIGZpeGVkCisgKiAgICAgICAgbGF5b3V0IGluIHVzZS4K
KyAqIEBwYXJhbSBoIHdoZXJlIHRvIHJldHVybiBoZWlnaHQuIFJldHVybnMgMCBvbiBlcnJvciBv
ciBpZiBubyBmaXhlZAorICogICAgICAgIGxheW91dCBpbiB1c2UuCisgKi8KIEVBUEkgdm9pZCAg
ICAgICAgIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChFdmFzX09iamVjdCAqbywgRXZh
c19Db29yZCAqdywgRXZhc19Db29yZCAqaCk7CiAKKy8qKgorICogU2V0IHRoZSB0aGVtZSBwYXRo
IHRvIGJlIHVzZWQgYnkgdGhpcyB2aWV3LgorICoKKyAqIFRoaXMgYWxzbyBzZXRzIHRoZSB0aGVt
ZSBvbiB0aGUgbWFpbiBmcmFtZS4gQXMgZnJhbWVzIGluaGVyaXQgdGhlbWUKKyAqIGZyb20gdGhl
aXIgcGFyZW50LCB0aGlzIHdpbGwgaGF2ZSBhbGwgZnJhbWVzIHdpdGggdW5zZXQgdGhlbWUgdG8K
KyAqIHVzZSB0aGlzIG9uZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2Ug
dGhlbWUuCisgKiBAcGFyYW0gcGF0aCB0aGVtZSBwYXRoLCBtYXkgYmUgQGMgMCB0byByZXNldCB0
byBkZWZhdWx0LgorICovCiBFQVBJIHZvaWQgICAgICAgICBld2tfdmlld190aGVtZV9zZXQoRXZh
c19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKioKKyAqIEdldHMgdGhlIHRoZW1l
IHNldCBvbiB0aGlzIGZyYW1lLgorICoKKyAqIFRoaXMgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGJ5
IGV3a192aWV3X3RoZW1lX3NldCgpLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdl
dCB0aGVtZSBwYXRoLgorICoKKyAqIEByZXR1cm4gdGhlbWUgcGF0aCwgbWF5IGJlIEBjIDAgaWYg
bm90IHNldC4KKyAqLwogRUFQSSBjb25zdCBjaGFyICAqZXdrX3ZpZXdfdGhlbWVfZ2V0KEV2YXNf
T2JqZWN0ICpvKTsKIAorLyoqCisgKiBHZXQgdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhl
IG1haW4gZnJhbWUuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IG1haW4gZnJh
bWUuCisgKgorICogQHJldHVybiBld2tfZnJhbWUgb2JqZWN0IG9yIEBjIDAgaWYgbm9uZSB5ZXQu
CisgKi8KIEVBUEkgRXZhc19PYmplY3QgKmV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGZyYW1l
IG9iamVjdC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgZm9jdXNlZCBmcmFt
ZS4KKyAqCisgKiBAcmV0dXJuIGV3a19mcmFtZSBvYmplY3Qgb3IgQGMgMCBpZiBub25lIHlldC4K
KyAqLwogRUFQSSBFdmFzX09iamVjdCAqZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3Qg
RXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIEFzayBtYWluIGZyYW1lIHRvIGxvYWQgdGhlIGdp
dmVuIFVSSS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBsb2FkIHVyaS4KKyAqIEBw
YXJhbSB1cmkgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyIHRvIGxvYWQuCisgKgorICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vzc2Z1bCByZXF1ZXN0LCBAYyBFSU5BX0ZBTFNFIG9u
IGZhaWx1cmUuCisgKiAgICAgICAgIE5vdGUgdGhhdCBpdCBtZWFucyB0aGUgcmVxdWVzdCB3YXMg
ZG9uZSwgbm90IHRoYXQgaXQgd2FzCisgKiAgICAgICAgIHNhdGlzZmllZC4KKyAqLwogRUFQSSBF
aW5hX0Jvb2wgICAgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAq
dXJpKTsKKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnQgdXJpIGxvYWRlZCBieSBtYWluIGZyYW1l
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBjdXJyZW50IHVyaS4KKyAqCisg
KiBAcmV0dXJuIGN1cnJlbnQgdXJpIHJlZmVyZW5jZSBvciBAYyAwLiBJdCdzIGludGVybmFsLCBk
b24ndCBjaGFuZ2UuCisgKi8KIEVBUEkgY29uc3QgY2hhciAgKmV3a192aWV3X3VyaV9nZXQoY29u
c3QgRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCB0aXRsZSBvZiBt
YWluIGZyYW1lLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBjdXJyZW50IHRp
dGxlLgorICoKKyAqIEByZXR1cm4gY3VycmVudCB0aXRsZSByZWZlcmVuY2Ugb3IgQGMgMC4gSXQn
cyBpbnRlcm5hbCwgZG9uJ3QgY2hhbmdlLgorICovCiBFQVBJIGNvbnN0IGNoYXIgICpld2tfdmll
d190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIEdldHMgaWYgbWFp
biBmcmFtZSBpcyBlZGl0YWJsZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQg
ZWRpdGFibGUgc3RhdGUuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZWRpdGFibGUs
IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmll
d19lZGl0YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIFNldHMgaWYg
bWFpbiBmcmFtZSBpcyBlZGl0YWJsZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBz
ZXQgZWRpdGFibGUgc3RhdGUuCisgKiBAcGFyYW0gZWRpdGFibGUgbmV3IHN0YXRlLgorICoKKyAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNl
LgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19lZGl0YWJsZV9zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCBlZGl0YWJsZSk7CiAKKy8qKgorICogU2V0IGJhY2tncm91bmQgY29s
b3IgYW5kIHRyYW5zcGFyZW5jeQorICoKKyAqIEp1c3QgYXMgaW4gRXZhcywgY29sb3JzIGFyZSBw
cmUtbXVsdGlwbGllZCwgc28gNTAlIHJlZCBpcworICogKDEyOCwgMCwgMCwgMTI4KSBhbmQgbm90
ICgyNTUsIDAsIDAsIDEyOCkhCisgKgorICogQHdhcm5pbmcgV2F0Y2ggb3V0IHBlcmZvcm1hbmNl
IGlzc3VlcyB3aXRoIHRyYW5zcGFyZW5jeSEgT2JqZWN0CisgKiAgICAgICAgICB3aWxsIGJlIGhh
bmRsZWQgYXMgdHJhbnNwYXJlbnQgaW1hZ2UgYnkgZXZhcyBldmVuIGlmIHRoZQorICogICAgICAg
ICAgd2VicGFnZSBzcGVjaWZpZXMgYSBiYWNrZ3JvdW5kIGNvbG9yLiBUaGF0IG1lYW4geW91J2xs
IHBheQorICogICAgICAgICAgYSBwcmljZSBldmVuIGlmIGl0J3Mgbm90IHJlYWxseSB0cmFuc3Bh
cmVudCwgdGh1cworICogICAgICAgICAgc2Nyb2xsaW5nL3Bhbm5pbmcgYW5kIHpvb21pbmcgd2ls
bCBiZSBsaWtlbHkgc2xvd2VyIHRoYW4KKyAqICAgICAgICAgIGlmIHRyYW5zcGFyZW5jeSBpcyBv
ZmYuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlLgorICogQHBhcmFtIHIg
cmVkIGNvbXBvbmVudC4KKyAqIEBwYXJhbSBnIGdyZWVuIGNvbXBvbmVudC4KKyAqIEBwYXJhbSBi
IGJsdWUgY29tcG9uZW50LgorICogQHBhcmFtIGEgdHJhbnNwYXJlbmN5LgorICovCiBFQVBJIHZv
aWQgICAgICAgICBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QgKm8sIGludCByLCBp
bnQgZywgaW50IGIsIGludCBhKTsKKworLyoqCisgKiBRdWVyeSBpZiB2aWV3IG9iamVjdCBiYWNr
Z3JvdW5kIGNvbG9yLgorICoKKyAqIEp1c3QgYXMgaW4gRXZhcywgY29sb3JzIGFyZSBwcmUtbXVs
dGlwbGllZCwgc28gNTAlIHJlZCBpcworICogKDEyOCwgMCwgMCwgMTI4KSBhbmQgbm90ICgyNTUs
IDAsIDAsIDEyOCkhCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkuCisgKiBA
cGFyYW0gciB3aGVyZSB0byByZXR1cm4gcmVkIGNvbG9yIGNvbXBvbmVudC4KKyAqIEBwYXJhbSBn
IHdoZXJlIHRvIHJldHVybiBncmVlbiBjb2xvciBjb21wb25lbnQuCisgKiBAcGFyYW0gYiB3aGVy
ZSB0byByZXR1cm4gYmx1ZSBjb2xvciBjb21wb25lbnQuCisgKiBAcGFyYW0gYSB3aGVyZSB0byBy
ZXR1cm4gYWxwaGEgdmFsdWUuCisgKi8KIEVBUEkgdm9pZCAgICAgICAgIGV3a192aWV3X2JnX2Nv
bG9yX2dldChjb25zdCBFdmFzX09iamVjdCAqbywgaW50ICpyLCBpbnQgKmcsIGludCAqYiwgaW50
ICphKTsKIAorLyoqCisgKiBHZXQgdGhlIGNvcHkgb2YgdGhlIHNlbGVjdGlvbiB0ZXh0LgorICoK
KyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBzZWxlY3Rpb24gdGV4dC4KKyAqCisgKiBA
cmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgb3IgQGMgMCBpZiBub3RoaW5nIGlzIHNlbGVj
dGVkIG9yIGZhaWx1cmUuCisgKi8KIEVBUEkgY2hhciAgICAgICAgKmV3a192aWV3X3NlbGVjdGlv
bl9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIEZvcndhcmRzIGEgcmVxdWVz
dCBvZiBuZXcgQ29udGV4dCBNZW51IHRvIFdlYkNvcmUuCisgKgorICogQHBhcmFtIG8gVmlldy4K
KyAqIEBwYXJhbSBldiBFdmVudCBkYXRhLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlm
IG9wZXJhdGlvbiB3YXMgZXhlY3V0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBF
QVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19jb250ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFz
X09iamVjdCAqbywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duICpldik7CiAKIGVudW0gX0V3
a19FZGl0b3JfQ29tbWFuZCB7CkBAIC0zNzEsNTggKzY3Nyw0ODYgQEAgZW51bSBfRXdrX0VkaXRv
cl9Db21tYW5kIHsKIH07CiB0eXBlZGVmIGVudW0gX0V3a19FZGl0b3JfQ29tbWFuZCBFd2tfRWRp
dG9yX0NvbW1hbmQ7CiAKKy8qKgorICogRXhlY3V0ZXMgZWRpdG9yIGNvbW1hbmQuCisgKgorICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZXhlY3V0ZSBjb21tYW5kLgorICogQHBhcmFtIGNvbW1h
bmQgZWRpdG9yIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQuCisgKiBAcGFyYW0gdmFsdWUgdmFsdWUg
dG8gYmUgcGFzc2VkIGludG8gY29tbWFuZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBp
ZiBvcGVyYXRpb24gd2FzIGV4ZWN1dGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwog
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09i
amVjdCAqbywgY29uc3QgRXdrX0VkaXRvcl9Db21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIgKnZh
bHVlKTsKIAorLyoqCisgKiBDaGFuZ2VzIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICoKKyAq
IENoYW5nZXMgdGhlIG9wdGlvbiBzZWxlY3RlZCBpbiBzZWxlY3Qgd2lkZ2V0LiBUaGlzIGlzIGNh
bGxlZCBieSBicm93c2VyCisgKiB3aGVuZXZlciB1c2VyIGhhcyBjaG9zZW4gYSBkaWZmZXJlbnQg
aXRlbS4gTW9zdCBsaWtlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzLCBhCisgKiBjYWxsIHRvIGV3a192
aWV3X3BvcHVwX2Rlc3Ryb3kgbWlnaHQgYmUgbWFkZSBpbiBvcmRlciB0byBjbG9zZSB0aGUgcG9w
dXAuCisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqIEBpbmRleCBJbmRleCBvZiBzZWxlY3RlZCBp
dGVtLgorICoKKyAqLwogRUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0ZWRf
c2V0KEV2YXNfT2JqZWN0ICpvLCBpbnQgaW5kZXgpOworCisvKioKKyAqIERlc3Ryb3kgYSBwcmV2
aW91c2x5IGNyZWF0ZWQgbWVudS4KKyAqCisgKiBCZWZvcmUgZGVzdHJveWluZywgaXQgaW5mb3Jt
cyBjbGllbnQgdGhhdCBtZW51J3MgZGF0YSBpcyByZWFkeSB0byBiZQorICogZGVzdHJveWVkIGJ5
IHNlbmRpbmcgYSAicG9wdXAsd2lsbGRlbGV0ZSIgd2l0aCBhIGxpc3Qgb2YgbWVudSBpdGVtcy4g
VGhlbiBpdAorICogcmVtb3ZlcyBhbnkgcmVmZXJlbmNlIHRvIG1lbnUgaW5zaWRlIHdlYmtpdC4g
SXQncyBzYWZlIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gZWl0aGVyIGZyb20gaW5zaWRlIHdl
YmtpdCBvciBmcm9tIGJyb3dzZXIuCisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqCisgKiBAcmV0
dXJucyBFSU5BX1RSVUUgaW4gY2FzZSBtZW51IHdhcyBzdWNjZXNzZnVsbHkgZGVzdHJveWVkIG9y
IEVJTkFfVFJVRSBpbgorICogY2FzZSB0aGVyZSB3YXNuJ3QgYW55IG1lbnUgdG8gYmUgZGVzdHJv
eWVkLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNf
T2JqZWN0ICpvKTsKIAorLyoqCisgKiBTZWFyY2ggdGhlIGdpdmVuIHRleHQgc3RyaW5nIGluIGRv
Y3VtZW50LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNlYXJjaCB0ZXh0
LgorICogQHBhcmFtIHN0cmluZyByZWZlcmVuY2Ugc3RyaW5nIHRvIHNlYXJjaC4KKyAqIEBwYXJh
bSBjYXNlX3NlbnNpdGl2ZSBpZiBzZWFyY2ggc2hvdWxkIGJlIGNhc2Ugc2Vuc2l0aXZlIG9yIG5v
dC4KKyAqIEBwYXJhbSBmb3J3YXJkIGlmIHNlYXJjaCBpcyBmcm9tIGN1cnNvciBhbmQgb24gb3Ig
YmFja3dhcmRzLgorICogQHBhcmFtIHdyYXAgaWYgc2VhcmNoIHNob3VsZCB3cmFwIGF0IGVuZC4K
KyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBmb3VuZCwgQGMgRUlOQV9GQUxTRSBpZiBu
b3Qgb3IgZmFpbHVyZS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfdGV4dF9zZWFy
Y2goY29uc3QgRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnN0cmluZywgRWluYV9Cb29sIGNh
c2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApOwogCisvKioK
KyAqIEdldCBpZiBzaG91bGQgaGlnaGxpZ2h0IG1hdGNoZXMgbWFya2VkIHdpdGggZXdrX3ZpZXdf
dGV4dF9tYXRjaGVzX21hcmsoKS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVy
eSBpZiBtYXRjaGVzIGFyZSBoaWdobGlnaHRlZCBvciBub3QuCisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgdGhleSBhcmUgaGlnaGxpZ2h0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNl
LgorICovCiBFQVBJIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFz
X09iamVjdCAqbywgY29uc3QgY2hhciAqc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUs
IEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1pdCk7CisKKy8qKgorICogUmV2
ZXJzZXMgdGhlIGVmZmVjdCBvZiBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyaygpCisgKgorICog
QHBhcmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCisgKgorICogQHJldHVy
biBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBmb3IgZmFpbHVyZS4KKyAq
LwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZh
c19PYmplY3QgKm8pOworCisvKioKKyAqIFNldCBpZiBzaG91bGQgaGlnaGxpZ2h0IG1hdGNoZXMg
bWFya2VkIHdpdGggZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoKS4KKyAqCisgKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB3aGVyZSB0byBzZXQgaWYgbWF0Y2hlcyBhcmUgaGlnaGxpZ2h0ZWQgb3Ig
bm90LgorICogQHBhcmFtIGhpZ2hsaWdodCBpZiBAYyBFSU5BX1RSVUUsIG1hdGNoZXMgd2lsbCBi
ZSBoaWdobGlnaHRlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBA
YyBFSU5BX0ZBTFNFIGZvciBmYWlsdXJlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmll
d190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGhp
Z2hsaWdodCk7CisKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdo
bGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAorLyoqCisgKiBHZXQgY3VycmVudCBs
b2FkIHByb2dyZXNzIGVzdGltYXRlIGZyb20gMC4wIHRvIDEuMC4KKyAqCisgKiBAcGFyYW0gbyB2
aWV3IG9iamVjdCB0byBnZXQgY3VycmVudCBwcm9ncmVzcy4KKyAqCisgKiBAcmV0dXJuIHByb2dy
ZXMgdmFsdWUgZnJvbSAwLjAgdG8gMS4wIG9yIC0xLjAgb24gZXJyb3IuCisgKi8KIEVBUEkgZG91
YmxlICAgICAgIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpv
KTsKIAorLyoqCisgKiBBc2sgbWFpbiBmcmFtZSB0byBzdG9wIGxvYWRpbmcuCisgKgorICogQHBh
cmFtIG8gdmlldyBvYmplY3QgdG8gc3RvcCBsb2FkaW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlO
QV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUg
ZXdrX2ZyYW1lX3N0b3AoKQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zdG9wKEV2
YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBBc2sgbWFpbiBmcmFtZSB0byByZWxvYWQgY3VycmVu
dCBkb2N1bWVudC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byByZWxvYWQuCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UuCisgKgorICogQHNlZSBld2tfZnJhbWVfcmVsb2FkKCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfcmVsb2FkKEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBBc2sgbWFpbiBm
cmFtZSB0byBmdWxseSByZWxvYWQgY3VycmVudCBkb2N1bWVudCwgdXNpbmcgbm8gY2FjaGVzLgor
ICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHJlbG9hZC4KKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBA
c2VlIGV3a19mcmFtZV9yZWxvYWRfZnVsbCgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192
aWV3X3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0ICpvKTsKIAorLyoqCisgKiBBc2sgbWFpbiBmcmFt
ZSB0byBuYXZpZ2F0ZSBiYWNrIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmpl
Y3QgdG8gbmF2aWdhdGUgYmFjay4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNj
ZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a19mcmFtZV9iYWNr
KCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCAqbyk7
CisKKy8qKgorICogQXNrIG1haW4gZnJhbWUgdG8gbmF2aWdhdGUgZm9yd2FyZCBpbiBoaXN0b3J5
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIG5hdmlnYXRlIGZvcndhcmQuCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UuCisgKgorICogQHNlZSBld2tfZnJhbWVfZm9yd2FyZCgpCisgKi8KIEVBUEkgRWluYV9Cb29s
ICAgIGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIE5hdmlnYXRl
IGJhY2sgb3IgZm9yd2FyZCBpbiBoaXN0b3J5LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0
IHRvIG5hdmlnYXRlLgorICogQHBhcmFtIHN0ZXBzIGlmIHBvc2l0aXZlIG5hdmlnYXRlcyB0aGF0
IGFtb3VudCBmb3J3YXJkcywgaWYgbmVnYXRpdmUKKyAqICAgICAgICBkb2VzIGJhY2t3YXJkcy4K
KyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90
aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a19mcmFtZV9uYXZpZ2F0ZSgpCisgKi8KIEVBUEkgRWlu
YV9Cb29sICAgIGV3a192aWV3X25hdmlnYXRlKEV2YXNfT2JqZWN0ICpvLCBpbnQgc3RlcHMpOwog
CisvKioKKyAqIENoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIG5hdmlnYXRlIGJhY2t3YXJkcyBv
bmUgaXRlbSBpbiBoaXN0b3J5LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoZWNr
IGlmIGJhY2t3YXJkIG5hdmlnYXRpb24gaXMgcG9zc2libGUuCisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgcG9zc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBz
ZWUgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoKQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBl
d2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBDaGVjayBp
ZiBpdCBpcyBwb3NzaWJsZSB0byBuYXZpZ2F0ZSBmb3J3YXJkcyBvbmUgaXRlbSBpbiBoaXN0b3J5
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoZWNrIGlmIGZvcndhcmQgbmF2aWdh
dGlvbiBpcyBwb3NzaWJsZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBwb3NzaWJs
ZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tfdmlld19uYXZpZ2F0
ZV9wb3NzaWJsZSgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2ZvcndhcmRfcG9z
c2libGUoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIENoZWNrIGlmIGl0IGlzIHBvc3NpYmxl
IHRvIG5hdmlnYXRlIGdpdmVuIEBhIHN0ZXBzIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFtIG8g
dmlldyBvYmplY3QgdG8gbmF2aWdhdGUuCisgKiBAcGFyYW0gc3RlcHMgaWYgcG9zaXRpdmUgbmF2
aWdhdGVzIHRoYXQgYW1vdW50IGZvcndhcmRzLCBpZiBuZWdhdGl2ZQorICogICAgICAgIGRvZXMg
YmFja3dhcmRzLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHBvc3NpYmxlLCBAYyBF
SU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfbmF2
aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QgKm8sIGludCBzdGVwcyk7CiAKKy8qKgorICogQ2hl
Y2sgaWYgbmF2aWdhdGlvbiBoaXN0b3J5IChiYWNrLWZvcndhcmQgbGlzdHMpIGlzIGVuYWJsZWQu
CisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hlY2sgaWYgbmF2aWdhdGlvbiBoaXN0
b3J5IGlzIGVuYWJsZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdmlldyBrZWVw
cyBoaXN0b3J5LCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKwor
LyoqCisgKiBTZXRzIGlmIG5hdmlnYXRpb24gaGlzdG9yeSAoYmFjay1mb3J3YXJkIGxpc3RzKSBp
cyBlbmFibGVkLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCBpZiBuYXZpZ2F0
aW9uIGhpc3RvcnkgaXMgZW5hYmxlZC4KKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlm
IHdlIHdhbnQgdG8gZW5hYmxlIG5hdmlnYXRpb24gaGlzdG9yeTsKKyAqIEBjIEVJTkFfRkFMU0Ug
b3RoZXJ3aXNlLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19oaXN0
b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpOworCisvKioK
KyAqIEdldHMgdGhlIGhpc3RvcnkgKGJhY2stZm9yd2FyZCBsaXN0KSBhc3NvY2lhdGVkIHdpdGgg
dGhpcyB2aWV3LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBuYXZpZ2F0aW9u
IGhpc3RvcnkgZnJvbS4KKyAqCisgKiBAcmV0dXJuIHJldHVybnMgdGhlIGhpc3RvcnkgaW5zdGFu
Y2UgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgKiAgICAgICAgIHZpZXcgb3IgQGMgMCBv
biBlcnJvcnMgKGluY2x1ZGluZyB3aGVuIGhpc3RvcnkgaXMgbm90CisgKiAgICAgICAgIGVuYWJs
ZWQgd2l0aCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoKSkuIFRoaXMgaW5zdGFuY2UKKyAq
ICAgICAgICAgaXMgdW5pcXVlIGZvciB0aGlzIHZpZXcgYW5kIHRodXMgbXVsdGlwbGUgY2FsbHMg
dG8gdGhpcworICogICAgICAgICBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHZpZXcgYXMgcGFyYW1l
dGVyIHJldHVybnMgdGhlIHNhbWUKKyAqICAgICAgICAgaGFuZGxlLiBUaGlzIGhhbmRsZSBpcyBh
bGl2ZSB3aGlsZSB2aWV3IGlzIGFsaXZlLCB0aHVzIG9uZQorICogICAgICAgICBtaWdodCB3YW50
IHRvIGxpc3RlbiBmb3IgRVZBU19DQUxMQkFDS19ERUwgb24gZ2l2ZW4gdmlldworICogICAgICAg
ICAoQGEgbykgdG8ga25vdyB3aGVuIHRvIHN0b3AgdXNpbmcgcmV0dXJuZWQgaGFuZGxlLgorICoK
KyAqIEBzZWUgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KCkKKyAqLwogRUFQSSBFd2tfSGlz
dG9yeSAqZXdrX3ZpZXdfaGlzdG9yeV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCisvKioK
KyAqIEdldCB0aGUgY3VycmVudCB6b29tIGxldmVsIG9mIG1haW4gZnJhbWUuCisgKgorICogQHBh
cmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkgem9vbSBsZXZlbC4KKyAqCisgKiBAcmV0dXJuIGN1
cnJlbnQgem9vbSBsZXZlbCBpbiB1c2Ugb3IgLTEuMCBvbiBlcnJvci4KKyAqLwogRUFQSSBmbG9h
dCAgICAgICAgZXdrX3ZpZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioK
KyAqIFNldCB0aGUgY3VycmVudCB6b29tIGxldmVsIG9mIG1haW4gZnJhbWUuCisgKgorICogQHBh
cmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IHpvb20gbGV2ZWwuCisgKiBAcGFyYW0gem9vbSBuZXcg
bGV2ZWwgdG8gdXNlLgorICogQHBhcmFtIGN4IHggb2YgY2VudGVyIGNvb3JkaW5hdGUKKyAqIEBw
YXJhbSBjeSB5IG9mIGNlbnRlciBjb29yZGluYXRlCisgKgorICogQHJldHVybiBAYyBFSU5BX1RS
VUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KIEVBUEkgRWluYV9C
b29sICAgIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKIAogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdf
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogRUFQSSB2
b2lkICAgICAgICAgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpOwogCisvKioKKyAqIFNldCB0aGUgY3VycmVu
dCB6b29tIGxldmVsIG9mIGJhY2tpbmcgc3RvcmUsIGNlbnRlcmVkIGF0IGdpdmVuIHBvaW50Lgor
ICoKKyAqIFVubGlrZSBld2tfdmlld196b29tX3NldCgpLCB0aGlzIGNhbGwgZG8gbm90IGFzayBX
ZWJLaXQgdG8gcmVuZGVyCisgKiBhdCBuZXcgc2l6ZSwgYnV0IHNjYWxlIHdoYXQgaXMgYWxyZWFk
eSByZW5kZXJlZCwgYmVpbmcgbXVjaCBmYXN0ZXIKKyAqIGJ1dCB3b3JzZSBxdWFsaXR5LgorICoK
KyAqIE9mdGVuIG9uZSBzaG91bGQgdXNlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCksIGl0
IHdpbGwgY2FsbCB0aGUKKyAqIHNhbWUgbWFjaGluZXJ5IGludGVybmFsbHkuCisgKgorICogQG5v
dGUgdGhpcyB3aWxsIHNldCB2YXJpYWJsZXMgdXNlZCBieSBld2tfdmlld196b29tX2FuaW1hdGVk
X3NldCgpCisgKiAgICAgICBzbyBzdWItY2xhc3NlcyB3aWxsIG5vdCByZXNldCBpbnRlcm5hbCBz
dGF0ZSBvbiB0aGVpcgorICogICAgICAgImNhbGN1bGF0ZSIgcGhhc2UuIFRvIHVuc2V0IHRob3Nl
IGFuZCBlbmFibGUgc3ViLWNsYXNzZXMgdG8KKyAqICAgICAgIHJlc2V0IHRoZWlyIGludGVybmFs
IHN0YXRlLCBjYWxsCisgKiAgICAgICBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcCgp
LiBOYW1lbHksIHRoaXMgY2FsbCB3aWxsCisgKiAgICAgICBzZXQgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX3N0YXJ0KCkgdG8gYWN0dWFsIHdlYmtpdCB6b29tCisgKiAgICAgICBsZXZlbCwg
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZCgpIGFuZAorICogICAgICAgZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQoKSB0byBnaXZlbiB6b29tIGxldmVsLgorICoKKyAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCB3ZWFrIHpvb20gbGV2ZWwuCisgKiBAcGFyYW0g
em9vbSBsZXZlbCB0byBzY2FsZSBiYWNraW5nIHN0b3JlLgorICogQHBhcmFtIGN4IGhvcml6b250
YWwgY2VudGVyIG9mZnNldCwgcmVsYXRpdmUgdG8gb2JqZWN0ICh3LzIgaXMgbWlkZGxlKS4KKyAq
IEBwYXJhbSBjeSB2ZXJ0aWNhbCBjZW50ZXIgb2Zmc2V0LCByZWxhdGl2ZSB0byBvYmplY3QgKGgv
MiBpcyBtaWRkbGUpLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBj
IEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196
b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBF
dmFzX0Nvb3JkIGN5KTsKKworLyoqCisgKiBNYXJrIGludGVybmFsIHpvb20gYW5pbWF0aW9uIHN0
YXRlIHRvIGdpdmVuIHpvb20uCisgKgorICogVGhpcyBkb2VzIG5vdCBtb2RpZnkgYW55IGFjdHVh
bCB6b29tIGluIFdlYktpdCBvciBiYWNraW5nIHN0b3JlLAorICoganVzdCBzZXQgdGhlIEV3a19W
aWV3X1NtYXJ0X0RhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCBzbworICogc3ViLWNsYXNz
ZXMgd2lsbCBrbm93IHRoZXkgc2hvdWxkIG5vdCByZXNldCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4K
KyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2UgdmFsdWUuCisgKiBAcGFyYW0g
em9vbSBuZXcgc3RhcnQgdmFsdWUuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3Vj
Y2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tfdmlld196b29t
X2FuaW1hdGVkX3NldCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fd2Vha19zZXQoKQorICogQHNl
ZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcCgpCisgKiBAc2VlIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19lbmQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21h
cmtfY3VycmVudCgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19zdGFydChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSk7CisKKy8qKgorICogTWFy
ayBpbnRlcm5hbCB6b29tIGFuaW1hdGlvbiBzdGF0ZSB0byBnaXZlbiB6b29tLgorICoKKyAqIFRo
aXMgZG9lcyBub3QgbW9kaWZ5IGFueSBhY3R1YWwgem9vbSBpbiBXZWJLaXQgb3IgYmFja2luZyBz
dG9yZSwKKyAqIGp1c3Qgc2V0IHRoZSBFd2tfVmlld19TbWFydF9EYXRhLT5hbmltYXRlZF96b29t
Lnpvb20uZW5kIHNvCisgKiBzdWItY2xhc3NlcyB3aWxsIGtub3cgdGhleSBzaG91bGQgbm90IHJl
c2V0IHRoZWlyIGludGVybmFsIHN0YXRlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IGNoYW5nZSB2YWx1ZS4KKyAqIEBwYXJhbSB6b29tIG5ldyBlbmQgdmFsdWUuCisgKgorICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisg
KgorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX3NldCgpCisgKiBAc2VlIGV3a192aWV3
X3pvb21fd2Vha19zZXQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3Rv
cCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydCgpCisgKiBAc2Vl
IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCkKKyAqLwogRUFQSSBFaW5hX0Jv
b2wgICAgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChFdmFzX09iamVjdCAqbywgZmxv
YXQgem9vbSk7CisKKy8qKgorICogTWFyayBpbnRlcm5hbCB6b29tIGFuaW1hdGlvbiBzdGF0ZSB0
byBnaXZlbiB6b29tLgorICoKKyAqIFRoaXMgZG9lcyBub3QgbW9kaWZ5IGFueSBhY3R1YWwgem9v
bSBpbiBXZWJLaXQgb3IgYmFja2luZyBzdG9yZSwKKyAqIGp1c3Qgc2V0IHRoZSBFd2tfVmlld19T
bWFydF9EYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCBzbworICogc3ViLWNsYXNzZXMg
d2lsbCBrbm93IHRoZXkgc2hvdWxkIG5vdCByZXNldCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4KKyAq
CisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2UgdmFsdWUuCisgKiBAcGFyYW0gem9v
bSBuZXcgY3VycmVudCB2YWx1ZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNj
ZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a192aWV3X3pvb21f
YW5pbWF0ZWRfc2V0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV93ZWFrX3NldCgpCisgKiBAc2Vl
IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9tYXJrX3N0YXJ0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9t
YXJrX2VuZCgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fYW5pbWF0ZWRf
bWFya19jdXJyZW50KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKTsKKworLyoqCisgKiBVbm1h
cmsgaW50ZXJuYWwgem9vbSBhbmltYXRpb24gc3RhdGUuCisgKgorICogVGhpcyB6ZXJvIGFsbCBz
dGFydCwgZW5kIGFuZCBjdXJyZW50IHZhbHVlcy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBtYXJrIGFzIGFuaW1hdGVkIGlzIHN0b3BwZWQuCisgKgorICogQHNlZSBld2tfdmlld196
b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVk
X21hcmtfZW5kKCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQo
KQorICogQHNlZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3QgKm8pOwogCisv
KioKKyAqIFNldCB0aGUgY3VycmVudCB6b29tIGxldmVsIHdoaWxlIGFuaW1hdGluZy4KKyAqCisg
KiBJZiB0aGUgdmlldyB3YXMgYWxyZWFkeSBhbmltYXRpbmcgdG8gYW5vdGhlciB6b29tLCBpdCB3
aWxsIHN0YXJ0CisgKiBmcm9tIGN1cnJlbnQgcG9pbnQgdG8gdGhlIG5leHQgcHJvdmlkZWQgem9v
bSAoQGEgem9vbSBwYXJhbWV0ZXIpCisgKiBhbmQgZHVyYXRpb24gKEBhIGR1cmF0aW9uIHBhcmFt
ZXRlcikuCisgKgorICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRvIHRyYW5zaXRp
b25zIGZyb20gb25lIGxldmVsIHRvCisgKiBhbm90aGVyLiBIb3dldmVyLCBvbmUgbWF5IHdpc2gg
dG8gZG8gdGhvc2UgZnJvbSBvdXRzaWRlLCBpbiB0aGF0CisgKiBjYXNlIHVzZSBld2tfdmlld196
b29tX3dlYWtfc2V0KCkgYW5kIGxhdGVyIGNvbnRyb2wgaW50ZXJtZWRpYXRlCisgKiBzdGF0ZXMg
d2l0aCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgpLAorICogZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9tYXJrX2VuZCgpIGFuZAorICogZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9t
YXJrX3N0b3AoKS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBhbmltYXRlLgorICog
QHBhcmFtIHpvb20gZmluYWwgem9vbSBsZXZlbCB0byB1c2UuCisgKiBAcGFyYW0gZHVyYXRpb24g
dGltZSBpbiBzZWNvbmRzIHRoZSBhbmltYXRpb24gc2hvdWxkIHRha2UuCisgKiBAcGFyYW0gY3gg
b2Zmc2V0IGluc2lkZSBvYmplY3QgdGhhdCBkZWZpbmVzIHpvb20gY2VudGVyLiAwIGlzIGxlZnQg
c2lkZS4KKyAqIEBwYXJhbSBjeSBvZmZzZXQgaW5zaWRlIG9iamVjdCB0aGF0IGRlZmluZXMgem9v
bSBjZW50ZXIuIDAgaXMgdG9wIHNpZGUuCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBhbmlt
YXRpb24gd2lsbCBiZSBzdGFydGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdAorICogICAgICAgICAg
ICBiZWNhdXNlIHpvb20gaXMgdG9vIHNtYWxsL2JpZy4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAg
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIGZs
b2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKKworLyoqCisgKiBR
dWVyeSBpZiB6b29tIGxldmVsIGp1c3QgYXBwbGllcyB0byB0ZXh0IGFuZCBub3Qgb3RoZXIgZWxl
bWVudHMuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBxdWVyeSBzZXR0aW5nLgorICoKKyAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGp1c3QgdGV4dCBhcmUgc2NhbGVkLCBAYyBFSU5BX0ZBTFNF
IG90aGVyd2lzZS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfem9vbV90ZXh0X29u
bHlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBTZXQgaWYgem9vbSBsZXZl
bCBqdXN0IGFwcGxpZXMgdG8gdGV4dCBhbmQgbm90IG90aGVyIGVsZW1lbnRzLgorICoKKyAqIEBw
YXJhbSBvIHZpZXcgdG8gY2hhbmdlIHNldHRpbmcuCisgKiBAcGFyYW0gc2V0dGluZyBAYyBFSU5B
X1RSVUUgaWYgem9vbSBzaG91bGQganVzdCBiZSBhcHBsaWVkIHRvIHRleHQuCisgKgorICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisg
Ki8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X3NldChFdmFzX09i
amVjdCAqbywgRWluYV9Cb29sIHNldHRpbmcpOwogCisvKioKKyAqIEhpbnQgZW5naW5lIHRvIHBy
ZS1yZW5kZXIgcmVnaW9uLgorICoKKyAqIEVuZ2luZXMgYW5kIGJhY2tpbmcgc3RvcmUgbWlnaHQg
YmUgYWJsZSB0byBwcmUtcmVuZGVyIHJlZ2lvbnMgaW4KKyAqIG9yZGVyIHRvIHNwZWVkIHVwIHpv
b21pbmcgb3Igc2Nyb2xsaW5nIHRvIHRoYXQgcmVnaW9uLiBOb3QgYWxsCisgKiBlbmdpbmVzIG1p
Z2h0IGltcGxlbWVudCB0aGF0IGFuZCB0aGV5IHdpbGwgcmV0dXJuIEBjIEVJTkFfRkFMU0UKKyAq
IGluIHRoYXQgY2FzZS4KKyAqCisgKiBUaGUgZ2l2ZW4gcmVnaW9uIGlzIGEgaGludC4gRW5naW5l
cyBtaWdodCBkbyBiaWdnZXIgb3Igc21hbGxlciBhcmVhCisgKiB0aGF0IGNvdmVycyB0aGF0IHJl
Z2lvbi4gUHJlLXJlbmRlciBtaWdodCBub3QgYmUgaW1tZWRpYXRlLCBpdCBtYXkKKyAqIGJlIHBv
c3Rwb25lZCB0byBhIHRocmVhZCwgb3BlcmF0ZWQgY29vcGVyYXRpdmVseSBpbiB0aGUgbWFpbiBs
b29wCisgKiBhbmQgbWF5IGJlIGV2ZW4gaWdub3JlZCBvciBjYW5jZWxsZWQgYWZ0ZXJ3YXJkcy4K
KyAqCisgKiBNdWx0aXBsZSByZXF1ZXN0cyBtaWdodCBiZSBxdWV1ZWQgYnkgZW5naW5lcy4gT25l
IGNhbiBjbGVhci9mb3JnZXQKKyAqIGFib3V0IHRoZW0gd2l0aCBld2tfdmlld19wcmVfcmVuZGVy
X2NhbmNlbCgpLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgdG8gYXNrIHByZS1yZW5kZXIgb2YgZ2l2
ZW4gcmVnaW9uLgorICogQHBhcmFtIHggYWJzb2x1dGUgY29vcmRpbmF0ZSAoMD1sZWZ0KSB0byBw
cmUtcmVuZGVyIGF0IHpvb20uCisgKiBAcGFyYW0geSBhYnNvbHV0ZSBjb29yZGluYXRlICgwPXRv
cCkgdG8gcHJlLXJlbmRlciBhdCB6b29tLgorICogQHBhcmFtIHcgd2lkdGggdG8gcHJlLXJlbmRl
ciBzdGFydGluZyBmcm9tIEBhIHggYXQgem9vbS4KKyAqIEBwYXJhbSBoIGhlaWdodCB0byBwcmUt
cmVuZGVyIHN0YXJ0aW5nIGZyb20gQGEgeSBhdCB6b29tLgorICogQHBhcmFtIHpvb20gZGVzaXJl
ZCB6b29tLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHJlcXVlc3Qgd2FzIGFjY2Vw
dGVkLCBAYyBFSU5BX0ZBTFNFCisgKiAgICAgICAgIG90aGVyd2lzZSAoZXJyb3JzLCBwcmUtcmVu
ZGVyIG5vdCBzdXBwb3J0ZWQsIGV0YykuCisgKgorICogQHNlZSBld2tfdmlld19wcmVfcmVuZGVy
X2NhbmNlbCgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3ByZV9yZW5kZXJfcmVn
aW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29y
ZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pOworCisvKioKKyAqIEhpbnQgZW5naW5lIHRv
IHByZS1yZW5kZXIgcmVnaW9uLCBnaXZlbiBuIGV4dHJhIGNvbHMvcm93cworICoKKyAqIFRoaXMg
aXMgYW4gYWx0ZXJuYXRpdmUgbWV0aG9kIHRvIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKCku
IEl0IGRvZXMgbm90CisgKiBtYWtlIHNlbnNlIGluIGFsbCBlbmdpbmVzIGFuZCB0aGVyZWZvcmUg
aXQgbWlnaHQgbm90IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KKyAqCisgKiBJdCdzIG9ubHkgdXNl
ZnVsIGlmIGVuZ2luZSBkaXZpZGUgdGhlIGFyZWEgYmVpbmcgcmVuZGVyZWQgaW4gc21hbGxlciB0
aWxlcywKKyAqIGZvcm1pbmcgYSBncmlkLiBUaGVuLCBicm93c2VyIGNvdWxkIGNhbGwgdGhpcyBm
dW5jdGlvbiB0byBwcmUtcmVuZGVyIEBwYXJhbSBuCisgKiByb3dzL2NvbHMgaW52b2x2aW5nIHRo
ZSBjdXJyZW50IHZpZXdwb3J0LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgdG8gYXNrIHByZS1yZW5k
ZXIgb24uCisgKiBAcGFyYW0gbiBudW1iZXIgb2YgY29scy9yb3dzIHRoYXQgbXVzdCBiZSBwYXJ0
IG9mIHRoZSByZWdpb24gcHJlLXJlbmRlcmVkCisgKgorICogQHNlZSBld2tfdmlld19wcmVfcmVu
ZGVyX3JlZ2lvbigpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3ByZV9yZW5kZXJf
cmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0ICpvLCB1bnNpZ25lZCBpbnQgbik7CisKKy8qKgor
ICogQ2FuY2VsIChjbGVhcikgcHJldmlvdXMgcHJlLXJlbmRlciByZXF1ZXN0cy4KKyAqCisgKiBA
cGFyYW0gbyB2aWV3IHRvIGNsZWFyIHByZS1yZW5kZXIgcmVxdWVzdHMuCisgKi8KIEVBUEkgdm9p
ZCAgICAgICAgIGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKTsKKwor
LyoqCisgICogRW5hYmxlIHByb2Nlc3Npbmcgb2YgdXBkYXRlIHJlcXVlc3RzLgorICAqCisgICog
QHBhcmFtIG8gdmlldyB0byBlbmFibGUgcmVuZGVyaW5nLgorICAqCisgICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgcmVuZGVyIHdhcyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFCisgICAgICAgICAg
ICBvdGhlcndpc2UgKGVycm9ycywgcmVuZGVyaW5nIHN1c3BlbnNpb24gbm90IHN1cHBvcnRlZCku
CisgICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKGNvbnN0IEV2
YXNfT2JqZWN0ICpvKTsKKworLyoqCisgICogRGlzYWJsZSBwcm9jZXNzaW5nIG9mIHVwZGF0ZSBy
ZXF1ZXN0cy4KKyAgKgorICAqIEBwYXJhbSBvIHZpZXcgdG8gZGlzYWJsZSByZW5kZXJpbmcuCisg
ICoKKyAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiByZW5kZXIgd2FzIGRpc2FibGVkLCBAYyBF
SU5BX0ZBTFNFCisgICAgICAgICAgICBvdGhlcndpc2UgKGVycm9ycywgcmVuZGVyaW5nIHN1c3Bl
bnNpb24gbm90IHN1cHBvcnRlZCkuCisgICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19k
aXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKKy8qKgorICogR2V0IGlucHV0
IG1ldGhvZCBoaW50cworICoKKyAqIEBwYXJhbSBvIFZpZXcuCisgKgorICogQHJldHVybiBpbnB1
dCBtZXRob2QgaGludHMKKyAqLwogRUFQSSB1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfaW1oX2dldChF
dmFzX09iamVjdCAqbyk7CiAKIC8qIHNldHRpbmdzICovCkBAIC00MzUsNyArMTE2OSwyNiBAQCBF
QVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2
YXNfT2JqZWN0ICpvLCBFaW5hX0JvbwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGlu
Z19hdXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWlu
YV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfYXV0b19zaHJpbmtfaW1hZ2VzX3NldChFdmFzX09i
amVjdCAqbywgRWluYV9Cb29sIGF1dG9tYXRpYyk7CiAKKy8qKgorICogR2V0cyBpZiB2aWV3IGNh
biBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHkuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBjaGVj
ayBzdGF0dXMKKyAqCisgKiBAcmV0dXJuIEVJTkFfVFJVRSBpZiB2aWV3IGNhbiBiZSByZXNpemVk
LCBFSU5BX0ZBTFNFCisgKiAgICAgICAgIG90aGVyd2lzZSAoZXJyb3JzLCBjYW5ub3QgYmUgcmVz
aXplZCkuCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1
dG9fcmVzaXplX3dpbmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIFNl
dHMgaWYgdmlldyBjYW4gYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5LgorICoKKyAqIEBwYXJhbSBv
IFZpZXcuCisgKiBAcGFyYW0gcmVzaXphYmxlIEBjIEVJTkFfVFJVRSBpZiB3ZSB3YW50IHRvIHJl
c2l6ZSBhdXRvbWF0aWNhbGx5OworICogQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuIEl0IGRlZmF1
bHRzIHRvIEBjIEVJTkFfVFJVRQorICoKKyAqIEByZXR1cm4gRUlOQV9UUlVFIGlmIGF1dG9fcmVz
aXplX3dpbmRvdyBzdGF0dXMgc2V0LCBFSU5BX0ZBTFNFCisgKiAgICAgICAgIG90aGVyd2lzZSAo
ZXJyb3JzKS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVf
YXV0b19yZXNpemVfd2luZG93X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHJlc2l6YWJs
ZSk7CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX2dl
dChjb25zdCBFdmFzX09iamVjdCAqbyk7CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7
CkBAIC00NDMsNyArMTE5NiwyNCBAQCBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sCiBFQVBJIEVpbmFf
Qm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFzX09i
amVjdCAqbyk7CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVn
aW5zX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CiAKKy8qKgorICogR2V0
IHN0YXR1cyBvZiBmcmFtZSBmbGF0dGVuaW5nLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgdG8gY2hl
Y2sgc3RhdHVzCisgKgorICogQHJldHVybiBFSU5BX1RSVUUgaWYgZmxhdHRlbmluZyBpcyBlbmFi
bGVkLCBFSU5BX0ZBTFNFCisgKiAgICAgICAgIG90aGVyd2lzZSAoZXJyb3JzLCBmbGF0dGVuaW5n
IGRpc2FibGVkKS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfZnJhbWVfZmxhdHRlbmluZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pOworCisvKioKKyAq
IFNldCBmcmFtZSBmbGF0dGVuaW5nLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgdG8gc2V0IGZsYXR0
ZW5pbmcKKyAqCisgKiBAcmV0dXJuIEVJTkFfVFJVRSBpZiBmbGF0dGVuaW5nIHN0YXR1cyBzZXQs
IEVJTkFfRkFMU0UKKyAqICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMpLgorICovCiBFQVBJIEVp
bmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX3NldChF
dmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSk7CiAKIEVBUEkgRWluYV9Cb29sICAgIGV3
a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9nZXQoY29uc3QgRXZhc19PYmplY3Qg
Km8pOwpAQCAtNDYzLDcgKzEyMzMsMjQgQEAgRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0
dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm8KIEVBUEkg
RWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfY2FyZXRf
YnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKTsKIAorLyoqCisg
KiBHZXQgY3VycmVudCBlbmNvZGluZyBvZiB0aGlzIFZpZXcuCisgKgorICogQHBhcmFtIG8gVmll
dy4KKyAqCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhbiBlaW5hX3N0cmluc2hhcmUgY29udGFp
bmluZyB0aGUgY3VycmVudCBjdXN0b20KKyAqIGVuY29kaW5nIGZvciBWaWV3IG9iamVjdCBAcGFy
YW0gbywgb3IgQGMgMCBpZiBpdCdzIG5vdCBzZXQuCisgKi8KIEVBUEkgY29uc3QgY2hhciAgKmV3
a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7
CisKKy8qKgorICogU2V0IGVuY29kaW5nIG9mIHRoaXMgVmlldyBhbmQgcmVsb2FkIHBhZ2UuCisg
KgorICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBlbmNvZGluZyBUaGUgbmV3IGVuY29kaW5n
IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBlbmNvZGluZy4KKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwog
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2
YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICplbmNvZGluZyk7CiBFQVBJIGNvbnN0IGNoYXIgICpl
d2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpv
KTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9z
ZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKQEAgLTQ5NSwyNCArMTI4
MiwxMTkgQEAgRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19mb250X3NlcmlmX3Nl
dChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqZmEKIEVBUEkgY29uc3QgY2hhciAgKmV3a192
aWV3X3NldHRpbmdfZm9udF9zYW5zX3NlcmlmX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiBF
QVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2ZvbnRfc2Fuc19zZXJpZl9zZXQoRXZh
c19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKmZhbWlseSk7CiAKKy8qKgorICogR2V0cyBpZiB0aGUg
c3BhdGlhbCBuYXZpYWd0aW9uIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmpl
Y3QgdG8gZ2V0IHNwYXRpYWwgbmF2aWdhdGlvbiBzZXR0aW5nLgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaWYgc3BhdGlhbCBuYXZpZ2F0aW9uIGlzIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UgaWYg
bm90IG9yIG9uIGVycm9ycy4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGlu
Z19zcGF0aWFsX25hdmlnYXRpb25fZ2V0KEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBTZXRz
IHRoZSBzcGF0aWFsIG5hdmlnYXRpb24uCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8g
c2V0IHNwYXRpYWwgbmF2aWdhdGlvbiBzZXR0aW5nLgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
b24gc3VjY2VzcyBhbmQgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCisgKi8KIEVBUEkgRWluYV9C
b29sICAgIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVj
dCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CiAKKy8qKgorICogR2V0cyBpZiB0aGUgbG9jYWwgc3Rv
cmFnZSBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBpZiBs
b2NhbCBzdG9yYWdlIGlzIGVuYWJsZWQuCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBsb2Nh
bCBzdG9yYWdlIGlzIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UgaWYgbm90IG9yIG9uIGVycm9ycy4K
KyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2dl
dChFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogU2V0cyB0aGUgbG9jYWwgc3RvcmFnZSBvZiBI
VE1MNS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgaWYgbG9jYWwgc3RvcmFn
ZSBpcyBlbmFibGVkLgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcyBhbmQgQGMg
RUlOQV9GQUxTRSBvbiBmYWlsdXJlCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3Nl
dHRpbmdfbG9jYWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUp
OworCisvKioKKyAqIEdldHMgdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgcGF0aC4KKyAqCisg
KiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ug
cGF0aC4KKyAqIEByZXR1cm4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgcGF0aC4KKyAqLwog
RUFQSSBjb25zdCBjaGFyICAqZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNl
X3BhdGhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBTZXRzIHRoZSBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIHBhdGguCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8g
c2V0IHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIHBhdGguCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKKyAqLwogRUFQSSBF
aW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhf
c2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICpwYXRoKTsKIAorLyoqCisgKiBHZXRzIGlm
IHRoZSBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
dG8gc2V0IGlmIHBhZ2UgY2FjaGUgaXMgZW5hYmxlZC4KKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHBhZ2UgY2FjaGUgaXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3QuCisgKi8KIEVB
UEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9nZXQoRXZhc19PYmpl
Y3QgKm8pOworCisvKioKKyAqIFNldHMgdGhlIHBhZ2UgY2FjaGUuCisgKgorICogQHBhcmFtIG8g
dmlldyBvYmplY3QgdG8gc2V0IGlmIHBhZ2UgY2FjaGUgaXMgZW5hYmxlZC4KKyAqIEByZXR1cm4g
QGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICov
CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKTsKIAorLyoqCisgKiBHZXRzIGlmIHRoZSBlbmNv
ZGluZyBkZXRlY3RvciBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IGdldCBpZiBlbmNvZGluZyBkZXRlY3RvciBpcyBlbmFibGVkLgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaWYgZW5jb2RpbmcgZGV0ZWN0b3IgaXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxTRSBpZiBu
b3Qgb3Igb24gZXJyb3JzLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5n
X2VuY29kaW5nX2RldGVjdG9yX2dldChFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogU2V0cyB0
aGUgZW5jb2RpbmcgZGV0ZWN0b3IuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc2V0
IGlmIGVuY29kaW5nIGRldGVjdG9yIGlzIGVuYWJsZWQuCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKKyAqLwogRUFQSSBFaW5h
X0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpOwogCisvKioKKyAqIFJldHVybnMgd2hldGhlciBkZXZl
bG9wZXIgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhlIGdpdmVuIHZpZXcuCisgKgorICog
Q3VycmVudGx5LCB0aGlzIGlzIHVzZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBXZWIgSW5zcGVjdG9y
IGlzIGVuYWJsZWQgZm9yIGEKKyAqIGdpdmVuIHZpZXcuCisgKgorICogQHBhcmFtIG8gdmlldyBv
YmplY3QgdG8gY2hlY2suCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZGV2ZWxvcGVy
IGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UKKyAqICAgICAgICAgb3RoZXJ3
aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZl
bG9wZXJfZXh0cmFzX2dldChFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogRW5hYmxlcy9kaXNh
YmxlcyBkZXZlbG9wZXIgZXh0ZW5zaW9ucyBmb3IgdGhlIGdpdmVuIHZpZXcuCisgKgorICogVGhp
cyBjdXJyZW50bHkgY29udHJvbHMgd2hldGhlciB0aGUgV2ViIEluc3BlY3RvciBzaG91bGQgYmUg
ZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gbyBUaGUgdmlldyB3aG9zZSBzZXR0aW5nIHdpbGwgYmUg
Y2hhbmdlZC4KKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBkZXZlbG9w
ZXIgZXh0cmFzLCBAYyBFSU5BX0ZBTFNFIHRvCisgKiAgICAgICAgICAgICAgIGRpc2FibGUuCisg
KgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQEVJTkFfRkFMU0Ugb24gZmFp
bHVyZS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpOwogCiAv
KiB0byBiZSB1c2VkIGJ5IHN1YmNsYXNzIGltcGxlbWVudGF0aW9ucyAqLworLyoqCisgKiBTaW1p
bGFyIHRvIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KCksIGJ1dCBkb2VzIHR5cGUgY2hlY2tp
bmcuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkgaW50ZXJuYWwgZGF0YS4K
KyAqIEByZXR1cm4gaW50ZXJuYWwgZGF0YSBvciBAYyAwIG9uIGVycm9ycyAoaWU6IGluY29ycmVj
dCB0eXBlIG9mIEBhIG8pLgorICovCiBFQVBJIEV3a19WaWV3X1NtYXJ0X0RhdGEgKmV3a192aWV3
X3NtYXJ0X2RhdGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogRUFQSSB2b2lkIGV3a192
aWV3X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCk7CkBAIC01MjUsMjkg
KzE0MDcsMjgwIEBAIEVBUEkgdm9pZCBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QpOwogICovCiB0eXBlZGVmIHN0cnVjdCBfRXdrX1ZpZXdfUGFpbnRfQ29u
dGV4dCBFd2tfVmlld19QYWludF9Db250ZXh0OwogCisvKioKKyAqIENyZWF0ZSBhIG5ldyBwYWlu
dCBjb250ZXh0IHVzaW5nIHRoZSB2aWV3IGFzIHNvdXJjZSBhbmQgY2Fpcm8gYXMgb3V0cHV0Lgor
ICoKKyAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFuZGxlIHBvaW50ZXIgb2YgdGhlIHZpZXcgdG8g
dXNlIGFzIHBhaW50IHNvdXJjZS4KKyAqIEBwYXJhbSBjciBjYWlybyBjb250ZXh0IHRvIHVzZSBh
cyBwYWludCBkZXN0aW5hdGlvbi4gQSBuZXcKKyAqICAgICAgICByZWZlcmVuY2UgaXMgdGFrZW4s
IHNvIGl0J3Mgc2FmZSB0byBjYWxsIGNhaXJvX2Rlc3Ryb3koKQorICogICAgICAgIGFmdGVyIHRo
aXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqCisgKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0
YW5jZSBvciBAYyAwIG9uIGVycm9ycy4KKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2Vu
ZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CisgKiAgICAgICB0byBk
ZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisgKi8KIEVBUEkgRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCAqZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
ICpwcml2LCBjYWlyb190ICpjcik7CisKKy8qKgorICogRGVzdHJveSBwcmV2aW91c2x5IGNyZWF0
ZWQgcGFpbnQgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gY3R4dCBwYWludCBjb250ZXh0IHRvIGRl
c3Ryb3kuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKgorICogQG5vdGUgdGhpcyBpcyBub3QgZm9y
IGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAorICogICAgICAg
dG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgorICovCiBFQVBJIHZvaWQgZXdrX3Zp
ZXdfcGFpbnRfY29udGV4dF9mcmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQpOwogCisv
KioKKyAqIFNhdmUgKHB1c2ggdG8gc3RhY2spIHBhaW50IGNvbnRleHQgc3RhdHVzLgorICoKKyAq
IEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gc2F2ZS4gTXVzdCBAYiBub3QgYmUgQGMgMC4K
KyAqCisgKiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfcmVzdG9yZSgpCisgKgorICogQG5v
dGUgdGhpcyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRo
YXQgd2FudAorICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgorICov
CiBFQVBJIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0Nv
bnRleHQgKmN0eHQpOworCisvKioKKyAqIFJlc3RvcmUgKHBvcCBmcm9tIHN0YWNrKSBwYWludCBj
b250ZXh0IHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY3R4dCBwYWludCBjb250ZXh0IHRvIHJlc3Rv
cmUuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250
ZXh0X3NhdmUoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQg
anVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBv
d24gYmFja2luZyBzdG9yZS4KKyAqLwogRUFQSSB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRf
cmVzdG9yZShFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0KTsKKworLyoqCisgKiBDbGlwIHBh
aW50IGNvbnRleHQgZHJhd2luZ3MgdG8gZ2l2ZW4gYXJlYS4KKyAqCisgKiBAcGFyYW0gY3R4dCBw
YWludCBjb250ZXh0IHRvIGNsaXAuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKiBAcGFyYW0gYXJl
YSBjbGlwIGFyZWEgdG8gdXNlLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9z
YXZlKCkKKyAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKCkKKyAqCisgKiBA
bm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMg
dGhhdCB3YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisg
Ki8KIEVBUEkgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOworCisvKioKKyAqIFBh
aW50IHVzaW5nIGNvbnRleHQgdXNpbmcgZ2l2ZW4gYXJlYS4KKyAqCisgKiBAcGFyYW0gY3R4dCBw
YWludCBjb250ZXh0IHRvIHBhaW50LiBNdXN0IEBiIG5vdCBiZSBAYyAwLgorICogQHBhcmFtIGFy
ZWEgcGFpbnQgYXJlYSB0byB1c2UuIENvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byBjdXJyZW50
IHZpZXdwb3J0LAorICogICAgICAgIHRodXMgInNjcm9sbGVkIi4KKyAqCisgKiBAbm90ZSBvbmUg
bWF5IHVzZSBjYWlybyBmdW5jdGlvbnMgb24gdGhlIGNhaXJvIGNvbnRleHQgdG8KKyAqICAgICAg
IHRyYW5zbGF0ZSwgc2NhbGUgb3IgYW55IG1vZGlmaWNhdGlvbiB0aGF0IG1heSBmaXQgaGlzIGRl
c2lyZXMuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoKQorICogQHNl
ZSBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKCkKKyAqCisgKiBAbm90ZSB0
aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3
YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisgKi8KIEVB
UEkgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRl
eHQgKmN0eHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKKworLyoqCisgKiBQYWludCBq
dXN0IGNvbnRlbnRzIHVzaW5nIGNvbnRleHQgdXNpbmcgZ2l2ZW4gYXJlYS4KKyAqCisgKiBVbmxp
a2UgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludCgpLCB0aGlzIGZ1bmN0aW9uIHBhaW50IGp1
c3QKKyAqIGJhcmUgY29udGVudHMgYW5kIGlnbm9yZXMgYW55IHNjcm9sbGluZywgc2Nyb2xsYmFy
cyBhbmQgZXh0cmFzLiBJdAorICogd2lsbCB3YWxrIHRoZSByZW5kZXJpbmcgdHJlZSBhbmQgcGFp
bnQgY29udGVudHMgaW5zaWRlIHRoZSBnaXZlbgorICogYXJlYSB0byB0aGUgY2Fpcm8gY29udGV4
dCBzcGVjaWZpZWQgaW4gQGEgY3R4dC4KKyAqCisgKiBAcGFyYW0gY3R4dCBwYWludCBjb250ZXh0
IHRvIHBhaW50LiBNdXN0IEBiIG5vdCBiZSBAYyAwLgorICogQHBhcmFtIGFyZWEgcGFpbnQgYXJl
YSB0byB1c2UuIENvb3JkaW5hdGVzIGFyZSBhYnNvbHV0ZSB0byBwYWdlLgorICoKKyAqIEBub3Rl
IG9uZSBtYXkgdXNlIGNhaXJvIGZ1bmN0aW9ucyBvbiB0aGUgY2Fpcm8gY29udGV4dCB0bworICog
ICAgICAgdHJhbnNsYXRlLCBzY2FsZSBvciBhbnkgbW9kaWZpY2F0aW9uIHRoYXQgbWF5IGZpdCBo
aXMgZGVzaXJlcy4KKyAqCisgKiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfY2xpcCgpCisg
KiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnQoKQorICoKKyAqIEBub3RlIHRoaXMg
aXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQK
KyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwogRUFQSSB2
b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOworCisvKioKKyAqIFNj
YWxlIHRoZSBjb250ZW50cyBieSB0aGUgZ2l2ZW4gZmFjdG9ycy4KKyAqCisgKiBUaGlzIGZ1bmN0
aW9uIGFwcGxpZXMgYSBzY2FsaW5nIHRyYW5zZm9ybWF0aW9uIHVzaW5nIENhaXJvLgorICoKKyAq
IEBwYXJhbSBjdHh0ICAgIHBhaW50IGNvbnRleHQgdG8gcGFpbnQuIE11c3QgQGIgbm90IGJlIEBj
IDAuCisgKiBAcGFyYW0gc2NhbGVfeCBzY2FsZSBmYWN0b3IgZm9yIHRoZSBYIGRpbWVuc2lvbi4K
KyAqIEBwYXJhbSBzY2FsZV95IHNjYWxlIGZhY3RvciBmb3IgdGhlIFkgZGltZW5zaW9uLgorICov
CiBFQVBJIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmlld19QYWludF9D
b250ZXh0ICpjdHh0LCBmbG9hdCBzY2FsZV94LCBmbG9hdCBzY2FsZV95KTsKKworLyoqCisgKiBQ
ZXJmb3JtcyBhIHRyYW5zbGF0aW9uIG9mIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMuCisgKgorICog
VGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgb3JpZ2luIGNvb3JkaW5hdGVzIGJ5IEBwIHggYW5kIEBw
IHkgcGl4ZWxzLgorICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gcGFpbnQuIE11
c3QgQGIgbm90IGJlIEBjIDAuCisgKiBAcGFyYW0geCAgICBhbW91bnQgb2YgcGl4ZWxzIHRvIHRy
YW5zbGF0ZSBpbiB0aGUgWCBkaW1lbnNpb24uCisgKiBAcGFyYW0geSAgICBhbW91bnQgb2YgcGl4
ZWxzIHRvIHRyYW5zbGF0ZSBpbiB0aGUgWSBkaW1lbnNpb24uCisgKi8KIEVBUEkgdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X3RyYW5zbGF0ZShFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0
LCBmbG9hdCB4LCBmbG9hdCB5KTsKIAorLyoqCisgKiBQYWludCB1c2luZyBnaXZlbiBncmFwaGlj
cyBjb250ZXh0IHRoZSBnaXZlbiBhcmVhLgorICoKKyAqIFRoaXMgdXNlcyB2aWV3cG9ydCByZWxh
dGl2ZSBhcmVhIGFuZCB3aWxsIGFsc28gaGFuZGxlIHNjcm9sbGJhcnMKKyAqIGFuZCBvdGhlciBl
eHRyYSBlbGVtZW50cy4gU2VlIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKCkgZm9yIHRoZQorICog
YWx0ZXJuYXRpdmUgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUg
cG9pbnRlciBvZiB2aWV3IHRvIHVzZSBhcyBwYWludCBzb3VyY2UuCisgKiBAcGFyYW0gY3IgY2Fp
cm8gY29udGV4dCB0byB1c2UgYXMgcGFpbnQgZGVzdGluYXRpb24uIEl0cyBzdGF0ZSB3aWxsCisg
KiAgICAgICAgYmUgc2F2ZWQgYmVmb3JlIG9wZXJhdGlvbiBhbmQgcmVzdG9yZWQgYWZ0ZXJ3YXJk
cy4KKyAqIEBwYXJhbSBhcmVhIHZpZXdwb3J0IHJlbGF0aXZlIGdlb21ldHJ5IHRvIHBhaW50Lgor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5kIEBjIEVJTkFfRkFMU0Ug
b24gZmFpbHVyZSwgbGlrZQorICogICAgICAgICBpbmNvcnJlY3QgcGFyYW1ldGVycy4KKyAqCisg
KiBAbm90ZSB0aGlzIGlzIGFuIGVhc3kgdG8gdXNlIHZlcnNpb24sIGJ1dCBpbnRlcm5hbCBzdHJ1
Y3R1cmVzIGFyZQorICogICAgICAgYWx3YXlzIGNyZWF0ZWQsIHRoZW4gZ3JhcGhpY3MgY29udGV4
dCBpcyBjbGlwcGVkLCB0aGVuCisgKiAgICAgICBwYWludGVkLCByZXN0b3JlZCBhbmQgZGVzdHJv
eWVkLiBUaGlzIG1pZ2h0IG5vdCBiZSBvcHRpbXVtLAorICogICAgICAgc28gdXNpbmcgI0V3a19W
aWV3X1BhaW50X0NvbnRleHQgbWF5IGJlIGEgYmV0dGVyIHNvbHV0aW9ucworICogICAgICAgZm9y
IGxhcmdlIG51bWJlciBvZiBvcGVyYXRpb25zLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRf
Y29udGVudHMoKQorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KCkKKyAqCisg
KiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNz
ZXMgdGhhdCB3YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUu
CisgKi8KIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0
YSAqcHJpdiwgY2Fpcm9fdCAqY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKKworLyoq
CisgKiBQYWludCBqdXN0IGNvbnRlbnRzIHVzaW5nIGdpdmVuIGdyYXBoaWNzIGNvbnRleHQgdGhl
IGdpdmVuIGFyZWEuCisgKgorICogVGhpcyB1c2VzIGFic29sdXRlIGNvb3JkaW5hdGVzIGZvciBh
cmVhIGFuZCB3aWxsIGp1c3QgaGFuZGxlCisgKiBjb250ZW50cywgbm8gc2Nyb2xsYmFycyBvciBl
eHRyYXMuIFNlZSBld2tfdmlld19wYWludCgpIGZvciB0aGUKKyAqIGFsdGVybmF0aXZlIHNvbHV0
aW9uLgorICoKKyAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFuZGxlIHBvaW50ZXIgb2YgdmlldyB0
byB1c2UgYXMgcGFpbnQgc291cmNlLgorICogQHBhcmFtIGNyIGNhaXJvIGNvbnRleHQgdG8gdXNl
IGFzIHBhaW50IGRlc3RpbmF0aW9uLiBJdHMgc3RhdGUgd2lsbAorICogICAgICAgIGJlIHNhdmVk
IGJlZm9yZSBvcGVyYXRpb24gYW5kIHJlc3RvcmVkIGFmdGVyd2FyZHMuCisgKiBAcGFyYW0gYXJl
YSBhYnNvbHV0ZSBnZW9tZXRyeSB0byBwYWludC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUsIGxpa2UKKyAqICAgICAg
ICAgaW5jb3JyZWN0IHBhcmFtZXRlcnMuCisgKgorICogQG5vdGUgdGhpcyBpcyBhbiBlYXN5IHRv
IHVzZSB2ZXJzaW9uLCBidXQgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUKKyAqICAgICAgIGFsd2F5
cyBjcmVhdGVkLCB0aGVuIGdyYXBoaWNzIGNvbnRleHQgaXMgY2xpcHBlZCwgdGhlbgorICogICAg
ICAgcGFpbnRlZCwgcmVzdG9yZWQgYW5kIGRlc3Ryb3llZC4gVGhpcyBtaWdodCBub3QgYmUgb3B0
aW11bSwKKyAqICAgICAgIHNvIHVzaW5nICNFd2tfVmlld19QYWludF9Db250ZXh0IG1heSBiZSBh
IGJldHRlciBzb2x1dGlvbnMKKyAqICAgICAgIGZvciBsYXJnZSBudW1iZXIgb2Ygb3BlcmF0aW9u
cy4KKyAqCisgKiBAc2VlIGV3a192aWV3X3BhaW50KCkKKyAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRf
Y29udGV4dF9wYWludF9jb250ZW50cygpCisgKgorICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdl
bmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAorICogICAgICAgdG8g
ZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgorICovCiBFQVBJIEVpbmFfQm9vbCBld2tf
dmlld19wYWludF9jb250ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYsIGNhaXJvX3Qg
KmNyLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSk7CiAKKy8qKgorICogR2V0cyBhdHRyaWJ1
dGVzIG9mIHZpZXdwb3J0IG1ldGEgdGFnLgorICoKKyAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFy
YW0gdyB3aWR0aC4KKyAqIEBwYXJhbSBoIGhlaWdodC4KKyAqIEBwYXJhbSBpbml0X3NjYWxlIGlu
aXRpYWwgU2NhbGUgdmFsdWUuCisgKiBAcGFyYW0gbWF4X3NjYWxlIG1heGltdW0gU2NhbGUgdmFs
dWUuCisgKiBAcGFyYW0gbWluX3NjYWxlIG1pbmltdW0gU2NhbGUgdmFsdWUuCisgKiBAcGFyYW0g
ZGV2aWNlX3BpeGVsX3JhdGlvIHZhbHVlLgorICogQHBhcmFtIHVzZXJfc2NhbGFibGUgdXNlciBT
Y2FsYWJsZSB2YWx1ZS4KKyAqLwogRUFQSSB2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCAqdywgZmxvYXQgKmgsIGZsb2F0ICppbml0X3Nj
YWxlLCBmbG9hdCAqbWF4X3NjYWxlLCBmbG9hdCAqbWluX3NjYWxlLCBmbG9hdCAqZGV2aWNlX3Bp
eGVsX3JhdGlvICwgRWluYV9Cb29sICp1c2VyX3NjYWxhYmxlKTsKKworLyoqCisgKiBTZXRzIHRo
ZSB6b29tIHJhbmdlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFyYW0gbWluX3NjYWxl
IG1pbmltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KKyAqIEBwYXJhbSBtYXhfc2NhbGUgbWF4aW11
bSB2YWx1ZSBvZiB6b29tIHJhbmdlLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHpv
b20gcmFuZ2UgaXMgY2hhbmdlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3IgZmFpbHVyZS4KKyAq
LwogRUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QgKm8s
IGZsb2F0IG1pbl9zY2FsZSwgZmxvYXQgbWF4X3NjYWxlKTsKKworLyoqCisgKiBHZXRzIHRoZSBt
aW5pbXVtIHZhbHVlIG9mIHpvb20gcmFuZ2UuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqCisg
KiBAcmV0dXJuIG1pbmltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KKyAqLwogRUFQSSBmbG9hdCBl
d2tfdmlld196b29tX3JhbmdlX21pbl9nZXQoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIEdl
dHMgdGhlIG1heGltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3
LgorICoKKyAqIEByZXR1cm4gbWF4aW11bSB2YWx1ZSBvZiB6b29tIHJhbmdlLgorICovCiBFQVBJ
IGZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWF4X2dldChFdmFzX09iamVjdCAqbyk7CisKKy8q
KgorICogU2V0cyBpZiB6b29tIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAq
IEBwYXJhbSB1c2VyX3NjYWxhYmxlIGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBlbmFibGUg
em9vbS4gSXQgZGVmYXVsdHMKKyAqIHRvIEBjIEVJTkFfVFJVRS4KKyAqLwogRUFQSSB2b2lkIGV3
a192aWV3X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdXNlcl9z
Y2FsYWJsZSk7CisKKy8qKgorICogR2V0cyBpZiB6b29tIGlzIGVuYWJsZWQuCisgKgorICogQHBh
cmFtIG8gdmlldy4KKyAqIEBwYXJhbSB1c2VyX3NjYWxhYmxlIHdoZXJlIHRvIHJldHVybiB0aGUg
Y3VycmVudCB1c2VyIHNjYWxhYmxlIHZhbHVlLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHpvb20gaXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3QuCisgKi8KIEVBUEkgRWlu
YV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfZ2V0KEV2YXNfT2JqZWN0ICpvKTsKKworLyoq
CisgKiBHZXRzIGRldmljZSBwaXhlbCByYXRpbyB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3
LgorICogQHBhcmFtIHVzZXJfc2NhbGFibGUgd2hlcmUgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHVz
ZXIgc2NhbGFibGUgdmFsdWUuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgem9vbSBp
cyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4KKyAqLwogRUFQSSBmbG9hdCBld2tfdmll
d19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KEV2YXNfT2JqZWN0ICpvKTsKIAorLyoqCisgKiBTZXRz
IHZpZXcgbW9kZS4gVGhlIHZpZXctbW9kZSBtZWRpYSBmZWF0dXJlIGRlc2NyaWJlcyB0aGUgbW9k
ZSBpbiB3aGljaCB0aGUKKyAqIFdlYiBhcHBsaWNhdGlvbiBpcyBiZWluZyBzaG93biBhcyBhIHJ1
bm5pbmcgYXBwbGljYXRpb24uCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdl
IHZpZXcgbW9kZS4KKyAqIEBwYXJhbSB2aWV3X21vZGUgcGFnZSB2aWV3IG1vZGUgdG8gYmUgc2V0
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdmlldyBtb2RlIGlzIHNldCBhcyB2aWV3
X21vZGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCBld2tf
dmlld19tb2RlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1ZpZXdfTW9kZSB2aWV3X21vZGUpOwor
CisvKioKKyAqIEdldHMgdmlldyBtb2RlLiBUaGUgdmlldy1tb2RlIG1lZGlhIGZlYXR1cmUgZGVz
Y3JpYmVzIHRoZSBtb2RlIGluIHdoaWNoIHRoZQorICogV2ViIGFwcGxpY2F0aW9uIGlzIGJlaW5n
IHNob3duIGFzIGEgcnVubmluZyBhcHBsaWNhdGlvbi4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBxdWVyeSB2aWV3IG1vZGUuCisgKgorICogQHJldHVybiBlbnVtIHZhbHVlIG9mIEV3
a19WaWV3X01vZGUgdGhhdCBpbmRpY2F0ZXMgY3VycmVudCB2aWV3IG1vZGUuCisgKi8KIEVBUEkg
RXdrX1ZpZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChFdmFzX09iamVjdCAqbyk7CiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
d19zaW5nbGUuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwppbmRl
eCAyMTk3NGJjLi5kOTZkNWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXdfc2luZ2xlLmMKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3Npbmds
ZS5jCkBAIC01MjEsMjQgKzUyMSw2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21h
cnRfYmdfY29sb3Jfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lCiAgICAgZXZh
c19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBhIDwgMjU1KTsKIH0K
IAotLyoqCi0gKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgdXNpbmcgc2luZ2xlIGJhY2tpbmcg
c3RvcmUsIGVuYWJsaW5nIHZpZXcKLSAqIHRvIGJlIGluaGVyaXRlZC4KLSAqCi0gKiBAcGFyYW0g
YXBpIGNsYXNzIGRlZmluaXRpb24gdG8gYmUgc2V0LCBhbGwgbWVtYmVycyB3aXRoIHRoZQotICog
ICAgICAgIGV4Y2VwdGlvbiBvZiBFdmFzX1NtYXJ0X0NsYXNzLT5kYXRhIG1heSBiZSBvdmVycmlk
ZGVuLiBNdXN0Ci0gKiAgICAgICAgQGIgbm90IGJlIEBjIE5VTEwuCi0gKgotICogQG5vdGUgRXZh
c19TbWFydF9DbGFzcy0+ZGF0YSBpcyB1c2VkIHRvIGltcGxlbWVudCB0eXBlIGNoZWNraW5nIGFu
ZAotICogICAgICAgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGNoYW5nZWQvb3ZlcnJpZGRlbi4gSWYg
eW91IG5lZWQgZXh0cmEKLSAqICAgICAgIGRhdGEgZm9yIHlvdXIgc21hcnQgY2xhc3MgdG8gd29y
aywganVzdCBleHRlbmQKLSAqICAgICAgIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGluc3RlYWQuCi0g
KgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBm
YWlsdXJlIChwcm9iYWJseQotICogICAgICAgICB2ZXJzaW9uIG1pc21hdGNoKS4KLSAqCi0gKiBA
c2VlIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCkKLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3Np
bmdsZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKIHsKICAgICBpZiAoIWV3
a192aWV3X2Jhc2Vfc21hcnRfc2V0KGFwaSkpCkBAIC01NzMsMjIgKzU1NSw2IEBAIHN0YXRpYyBp
bmxpbmUgRXZhc19TbWFydCAqX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcodm9pZCkK
ICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLS8qKgotICogQ3JlYXRlcyBhIG5ldyBFRkwgV2ViS2l0
IFZpZXcgb2JqZWN0LgotICoKLSAqIFZpZXcgb2JqZWN0cyBhcmUgdGhlIHJlY29tbWVuZGVkIHdh
eSB0byBkZWFsIHdpdGggRUZMIFdlYktpdCBhcyBpdAotICogYWJzdHJhY3RzIHRoZSBjb21wbGV4
IHBpZWNlcyBvZiB0aGUgcHJvY2Vzcy4KLSAqCi0gKiBFYWNoIHZpZXcgaXMgY29tcG9zZWQgYnkg
YSBzZXQgb2YgZnJhbWVzLiBUaGUgc2V0IGhhcyBhdCBsZWFzdCBvbmUKLSAqIGZyYW1lLCBjYWxs
ZWQgJ21haW5fZnJhbWUnLiBTZWUgZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoKSBhbmQKLSAqIGV3
a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KCkuCi0gKgotICogQHBhcmFtIGUgY2FudmFzIHdoZXJl
IHRvIGNyZWF0ZSB0aGUgdmlldyBvYmplY3QuCi0gKgotICogQHJldHVybiB2aWV3IG9iamVjdCBv
ciBAYyBOVUxMIGlmIGVycm9ycy4KLSAqCi0gKiBAc2VlIGV3a192aWV3X3VyaV9zZXQoKQotICov
CiBFdmFzX09iamVjdCAqZXdrX3ZpZXdfc2luZ2xlX2FkZChFdmFzICplKQogewogICAgIHJldHVy
biBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19u
ZXcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQu
YyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCmluZGV4IGQzODBlOGUu
LjdkOGFlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxl
ZC5jCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCkBAIC0yMjUs
MjQgKzIyNSw2IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJs
ZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCiAgICAgcmV0dXJuIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoc2QtPmJhY2tpbmdfc3RvcmUpOwogfQogCi0vKioK
LSAqIFNldHMgdGhlIHNtYXJ0IGNsYXNzIGFwaSB1c2luZyB0aWxlZCBiYWNraW5nIHN0b3JlLCBl
bmFibGluZyB2aWV3Ci0gKiB0byBiZSBpbmhlcml0ZWQuCi0gKgotICogQHBhcmFtIGFwaSBjbGFz
cyBkZWZpbml0aW9uIHRvIGJlIHNldCwgYWxsIG1lbWJlcnMgd2l0aCB0aGUKLSAqICAgICAgICBl
eGNlcHRpb24gb2YgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBtYXkgYmUgb3ZlcnJpZGRlbi4gTXVz
dAotICogICAgICAgIEBiIG5vdCBiZSBAYyBOVUxMLgotICoKLSAqIEBub3RlIEV2YXNfU21hcnRf
Q2xhc3MtPmRhdGEgaXMgdXNlZCB0byBpbXBsZW1lbnQgdHlwZSBjaGVja2luZyBhbmQKLSAqICAg
ICAgIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBjaGFuZ2VkL292ZXJyaWRkZW4uIElmIHlvdSBuZWVk
IGV4dHJhCi0gKiAgICAgICBkYXRhIGZvciB5b3VyIHNtYXJ0IGNsYXNzIHRvIHdvcmssIGp1c3Qg
ZXh0ZW5kCi0gKiAgICAgICBFd2tfVmlld19TbWFydF9DbGFzcyBpbnN0ZWFkLgotICoKLSAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSAo
cHJvYmFibHkKLSAqICAgICAgICAgdmVyc2lvbiBtaXNtYXRjaCkuCi0gKgotICogQHNlZSBld2tf
dmlld19iYXNlX3NtYXJ0X3NldCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld190aWxlZF9zbWFy
dF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKIHsKICAgICBpZiAoIWV3a192aWV3X2Jh
c2Vfc21hcnRfc2V0KGFwaSkpCkBAIC0yODIsMzMgKzI2NCwxMSBAQCBzdGF0aWMgaW5saW5lIEV2
YXNfU21hcnQgKl9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcodm9pZCkKICAgICByZXR1
cm4gc21hcnQ7CiB9CiAKLS8qKgotICogQ3JlYXRlcyBhIG5ldyBFRkwgV2ViS2l0IFZpZXcgb2Jq
ZWN0IHVzaW5nIHRpbGVkIGJhY2tpbmcgc3RvcmUuCi0gKgotICogVmlldyBvYmplY3RzIGFyZSB0
aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRlYWwgd2l0aCBFRkwgV2ViS2l0IGFzIGl0Ci0gKiBhYnN0
cmFjdHMgdGhlIGNvbXBsZXggcGllY2VzIG9mIHRoZSBwcm9jZXNzLgotICoKLSAqIFRoaXMgb2Jq
ZWN0IGlzIGFsbW9zdCB0aGUgc2FtZSBhcyB0aGUgb25lIHJldHVybmVkIGJ5IHRoZSBld2tfdmll
d19hZGQoKQotICogZnVuY3Rpb24sIGJ1dCBpdCB1c2VzIHRoZSB0aWxlZCBiYWNraW5nIHN0b3Jl
IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKLSAqIGJhY2tpbmcgc3RvcmUuCi0gKgotICogQHBhcmFt
IGUgY2FudmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUgdmlldyBvYmplY3QuCi0gKgotICogQHJldHVy
biB2aWV3IG9iamVjdCBvciBAYyBOVUxMIGlmIGVycm9ycy4KLSAqCi0gKiBAc2VlIGV3a192aWV3
X3VyaV9zZXQoKQotICovCiBFdmFzX09iamVjdCAqZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMgKmUp
CiB7CiAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfY2xhc3NfbmV3KCkpOwogfQogCi0vKioKLSAqIEdldCB0aGUgY2FjaGUgb2YgdW51c2Vk
IHRpbGVzIHVzZWQgYnkgdGhpcyB2aWV3LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IGdldCBjYWNoZS4KLSAqIEByZXR1cm4gaW5zdGFuY2Ugb2YgImNhY2hlIG9mIHVudXNlZCB0aWxl
cyIgb3IgQGMgTlVMTCBvbiBlcnJvcnMuCi0gKi8KIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdr
X3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKIHsKICAg
ICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOwpA
QCAtMzE2LDE2ICsyNzYsNiBAQCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a192aWV3X3RpbGVk
X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChzZC0+YmFja2luZ19zdG9y
ZSk7CiB9CiAKLS8qKgotICogU2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgdXNlZCBieSB0
aGlzIHZpZXcuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGNhY2hlLgotICog
QHBhcmFtIGNhY2hlIGluc3RhbmNlIG9mICJjYWNoZSBvZiB1bnVzZWQgdGlsZXMiLiBUaGlzIGNh
biBiZSB1c2VkCi0gKiAgICAgICAgdG8gc2hhcmUgYSBzaW5nbGUgY2FjaGUgYW1vbmdzdCBkaWZm
ZXJlbnQgdmlld3MuIFRoZSB0aWxlcwotICogICAgICAgIGZyb20gb25lIHZpZXcgd2lsbCBub3Qg
YmUgdXNlZCBieSB0aGUgb3RoZXIhIFRoaXMgaXMganVzdCB0bwotICogICAgICAgIGxpbWl0IHRo
ZSBncm91cCB3aXRoIGFtb3VudCBvZiB1bnVzZWQgbWVtb3J5LgotICogICAgICAgIElmIEBjIE5V
TEwgaXMgcHJvdmlkZWQsIHRoZW4gYSBuZXcgY2FjaGUgaXMgY3JlYXRlZC4KLSAqLwogdm9pZCBl
d2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKmNhY2hlKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkID0gZXdr
X3ZpZXdfc21hcnRfZGF0YV9nZXQobyk7CkBAIC0zMzMsMTEgKzI4Myw2IEBAIHZvaWQgZXdrX3Zp
ZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpjYWNoCiAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2Fj
aGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBjYWNoZSk7CiB9CiAKLS8qKgotICogU2V0IHRoZSBm
dW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgb2YgdGhlIHRpbGVkIGJhY2tpbmcgc3RvcmUuCi0g
KiBAcGFyYW0gbyB0aGUgdGlsZWQgYmFja2luZyBzdG9yZSBvYmplY3QuCi0gKiBAcGFyYW0gZmxh
ZyB2YWx1ZSBvZiB0aGUgdGlsZWQgYmFja2luZyBzdG9yZSBmbGFnIHRvIHNldC4KLSAqLwogdm9p
ZCBld2tfdmlld190aWxlZF9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCBmbGFnKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkID0gZXdrX3Zp
ZXdfc21hcnRfZGF0YV9nZXQobyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102253</attachid>
            <date>2011-07-28 06:34:48 -0700</date>
            <delta_ts>2011-07-29 02:59:22 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>ewk_view_move_doc_to_header.patch</filename>
            <type>text/plain</type>
            <size>107850</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA3ODIzNTk1Li5kYmIwN2Y2IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTEtMDctMjcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWpr
b3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gTW92ZSBld2tfdmlldyBBUEkgZG9j
dW1lbnRhdGlvbiB0byB0aGUgaGVhZGVyIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzA1CisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBhcmd1
bWVudHMgZm9yIHRoaXM6CisgICAgICAgIDEuIERldmVsb3BlcnMgdXNpbmcgd2Via2l0LWVmbCBm
cm9tIHBhY2thZ2VzIHByb2JhYmx5IHdvbid0IGhhdmUgdGhlIEMvQ1BQIGZpbGVzIHdpdGggdGhl
bQorICAgICAgICAgICBhbmQgdGhlIGRveHlnZW4gZG9jdW1lbnRhdGlvbiBjYW4gYmUgZ2VuZXJh
dGVkIGZyb20gdGhlIGhlYWRlcnMgd2l0aG91dCB0aGUgbmVlZAorICAgICAgICAgICBmb3IgdGhl
IHdob2xlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgMi4gSXQgd2lsbCBiZSBjb25zaXN0ZW50IHdp
dGggc3RydWN0dXJlcyBkZXNjcmlwdGlvbnMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmM6CisgICAgICAgICog
ZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBl
d2svZXdrX3ZpZXdfc2luZ2xlLmM6CisgICAgICAgICogZXdrL2V3a192aWV3X3RpbGVkLmM6CisK
IDIwMTEtMDctMjYgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXSBGaXggcG9pbnRlciBvcGVyYXRvciBjb2Rpbmcgc3R5bGUgaW4gZXdrX3Zp
ZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMKaW5kZXggNGExNDE5Ny4u
N2U2MWQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2Rl
bC5jCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuYwpAQCAtNjQx
LDUyICs2NDEsMjQgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCiAgICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0
dWMpOwogfQogCi0vKioKLSAqIENoYW5nZSBjYWNoZSBjYXBhY2l0eSwgaW4gYnl0ZXMuCi0gKgot
ICogVGhpcyB3aWxsIG5vdCBmbHVzaCBjYWNoZSwgdXNlIGV3a190aWxlX3VudXNlZF9jYWNoZV9m
bHVzaCgpIG9yCi0gKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpIHRvIGRvIHNv
LgotICovCiB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHR1Yyk7CiAgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OwogfQogCi0vKioKLSAqIFJldHJp
ZXZlIG1heGltdW0gY2FjaGUgY2FwYWNpdHksIGluIGJ5dGVzLgotICovCiBzaXplX3QgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CiAgICAgcmV0
dXJuIHR1Yy0+bWVtb3J5Lm1heDsKIH0KIAotLyoqCi0gKiBSZXRyaWV2ZSB0aGUgdXNlZCBjYWNo
ZSBjYXBhY2l0eSwgaW4gYnl0ZXMuCi0gKi8KIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CiAgICAgcmV0dXJuIHR1Yy0+bWVtb3J5
LnVzZWQ7CiB9CiAKLS8qKgotICogRmx1c2ggZ2l2ZW4gYW1vdW50IG9mIGJ5dGVzIGZyb20gY2Fj
aGUuCi0gKgotICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBuZWFyIEBhIGJ5dGVzIGFy
ZSBmcmVlZCBmcm9tIGNhY2hlLiBJdAotICogbWF5IGJlIGxlc3MgaWYgY2FjaGUgZGlkIG5vdCBj
b250YWluIHRoYXQgYW1vdW50IG9mIGJ5dGVzIChpZTogYW4KLSAqIGVtcHR5IGNhY2hlIGhhcyBu
b3RoaW5nIHRvIGZyZWUhKSBvciBtb3JlIGlmIHRoZSBjYWNoZSBqdXN0Ci0gKiBjb250YWluZWQg
b2JqZWN0cyB0aGF0IHdlcmUgbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBhbW91bnQgKHRoaXMK
LSAqIGlzIHVzdWFsbHkgdGhlIGNhc2UpLgotICoKLSAqIEBwYXJhbSB0dWMgY2FjaGUgb2YgdW51
c2VkIHRpbGVzLgotICogQHBhcmFtIGJ5dGVzIGFtb3VudCB0byBmcmVlLgotICoKLSAqIEByZXR1
cm4gYW1vdW50IHJlYWxseSBmcmVlZC4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNo
ZV91c2VkX2dldCgpCi0gKi8KIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKIHsKICAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkgKml0cjsKQEAgLTczMiwxNyArNzA0LDYgQEAgc2l6ZV90IGV3a190
aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90
IGJ5dGVzKQogICAgIHJldHVybiBkb25lOwogfQogCi0vKioKLSAqIEZsdXNoIGVub3VnaCBieXRl
cyB0byBtYWtlIGNhY2hlIHVzYWdlIGxvd2VyIHRoYW4gbWF4aW11bS4KLSAqCi0gKiBKdXN0IGxp
a2UgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKCksIGJ1dCB0aGlzIHdpbGwgbWFrZSB0aGUg
Y2FjaGUKLSAqIGZyZWUgZW5vdWdoIHRpbGVzIHRvIHJlc3BlY3QgbWF4aW11bSBjYWNoZSBzaXpl
IGFzIGRlZmluZWQgd2l0aAotICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoKS4KLSAq
Ci0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIHdoZW4gc3lzdGVtIGJlY29tZXMg
aWRsZS4gVGhpcyB3YXkKLSAqIHdlIGtlZXAgbWVtb3J5IGxvdyBidXQgZG8gbm90IGltcGFjdCBw
ZXJmb3JtYW5jZSB3aGVuCi0gKiBjcmVhdGluZy9kZWxldGluZyB0aWxlcy4KLSAqLwogdm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdmlldy5jcHAKaW5kZXggNjFhNzA4My4uZDNkNzQyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwCkBAIC0xMDQ4LDI1ICsxMDQ4LDYgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIH0KIAotLyoqCi0gKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkg
d2l0aG91dCBhbnkgYmFja2luZyBzdG9yZSwgZW5hYmxpbmcgdmlldwotICogdG8gYmUgaW5oZXJp
dGVkLgotICoKLSAqIEBwYXJhbSBhcGkgY2xhc3MgZGVmaW5pdGlvbiB0byBiZSBzZXQsIGFsbCBt
ZW1iZXJzIHdpdGggdGhlCi0gKiAgICAgICAgZXhjZXB0aW9uIG9mIEV2YXNfU21hcnRfQ2xhc3Mt
PmRhdGEgbWF5IGJlIG92ZXJyaWRkZW4uIE11c3QKLSAqICAgICAgICBAYiBub3QgYmUgQGMgMC4K
LSAqCi0gKiBAbm90ZSBFdmFzX1NtYXJ0X0NsYXNzLT5kYXRhIGlzIHVzZWQgdG8gaW1wbGVtZW50
IHR5cGUgY2hlY2tpbmcgYW5kCi0gKiAgICAgICBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdl
ZC9vdmVycmlkZGVuLiBJZiB5b3UgbmVlZCBleHRyYQotICogICAgICAgZGF0YSBmb3IgeW91ciBz
bWFydCBjbGFzcyB0byB3b3JrLCBqdXN0IGV4dGVuZAotICogICAgICAgRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgaW5zdGVhZC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBA
YyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgKHByb2JhYmx5Ci0gKiAgICAgICAgIHZlcnNpb24gbWlz
bWF0Y2gpLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCgpCi0gKiBAc2Vl
IGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19iYXNl
X3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKQogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChhcGksIEVJTkFfRkFMU0UpOwpAQCAtMTExOCwyMSArMTA5OSw2
IEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFz
cyAqYXBpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogU2V0IGEgZml4ZWQg
bGF5b3V0IHNpemUgdG8gYmUgdXNlZCwgZGlzc29jaWF0aW5nIGl0IGZyb20gdmlld3BvcnQgc2l6
ZS4KLSAqCi0gKiBTZXR0aW5nIGEgd2lkdGggZGlmZmVyZW50IHRoYW4gemVybyBlbmFibGVzIGZp
eGVkIGxheW91dCBvbiB0aGF0Ci0gKiBzaXplLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2NhbGVkIGJh
c2VkIG9uIHpvb20sIGJ1dCB3aWxsIG5vdCBjaGFuZ2UKLSAqIGlmIHZpZXdwb3J0IGNoYW5nZXMu
Ci0gKgotICogU2V0dGluZyBib3RoIEBhIHcgYW5kIEBhIGggdG8gemVybyB3aWxsIGRpc2FibGUg
Zml4ZWQgbGF5b3V0LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZSBmaXhl
ZCBsYXlvdXQuCi0gKiBAcGFyYW0gdyBmaXhlZCB3aWR0aCB0byB1c2UuIFRoaXMgc2l6ZSB3aWxs
IGJlIGF1dG9tYXRpY2FsbHkgc2NhbGVkCi0gKiAgICAgICAgYmFzZWQgb24gem9vbSBsZXZlbC4K
LSAqIEBwYXJhbSBoIGZpeGVkIGhlaWdodCB0byB1c2UuIFRoaXMgc2l6ZSB3aWxsIGJlIGF1dG9t
YXRpY2FsbHkgc2NhbGVkCi0gKiAgICAgICAgYmFzZWQgb24gem9vbSBsZXZlbC4KLSAqLwogdm9p
ZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29v
cmQgdywgRXZhc19Db29yZCBoKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOwpAQCAtMTE1NywxNSArMTEyMyw2IEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3Np
emVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKICAgICB2
aWV3LT5mb3JjZUxheW91dCgpOwogfQogCi0vKioKLSAqIEdldCBmaXhlZCBsYXlvdXQgc2l6ZSBp
biB1c2UuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcXVlcnkgZml4ZWQgbGF5b3V0
IHNpemUuCi0gKiBAcGFyYW0gdyB3aGVyZSB0byByZXR1cm4gd2lkdGguIFJldHVybnMgMCBvbiBl
cnJvciBvciBpZiBubyBmaXhlZAotICogICAgICAgIGxheW91dCBpbiB1c2UuCi0gKiBAcGFyYW0g
aCB3aGVyZSB0byByZXR1cm4gaGVpZ2h0LiBSZXR1cm5zIDAgb24gZXJyb3Igb3IgaWYgbm8gZml4
ZWQKLSAqICAgICAgICBsYXlvdXQgaW4gdXNlLgotICovCiB2b2lkIGV3a192aWV3X2ZpeGVkX2xh
eW91dF9zaXplX2dldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCAqdywgRXZhc19Db29yZCAq
aCkKIHsKICAgICBpZiAodykKQEAgLTExODQsMTYgKzExNDEsNiBAQCB2b2lkIGV3a192aWV3X2Zp
eGVkX2xheW91dF9zaXplX2dldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCAqdywgRXZhc19D
b29yZCAqaAogICAgIH0KIH0KIAotLyoqCi0gKiBTZXQgdGhlIHRoZW1lIHBhdGggdG8gYmUgdXNl
ZCBieSB0aGlzIHZpZXcuCi0gKgotICogVGhpcyBhbHNvIHNldHMgdGhlIHRoZW1lIG9uIHRoZSBt
YWluIGZyYW1lLiBBcyBmcmFtZXMgaW5oZXJpdCB0aGVtZQotICogZnJvbSB0aGVpciBwYXJlbnQs
IHRoaXMgd2lsbCBoYXZlIGFsbCBmcmFtZXMgd2l0aCB1bnNldCB0aGVtZSB0bwotICogdXNlIHRo
aXMgb25lLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZSB0aGVtZS4KLSAq
IEBwYXJhbSBwYXRoIHRoZW1lIHBhdGgsIG1heSBiZSBAYyAwIHRvIHJlc2V0IHRvIGRlZmF1bHQu
Ci0gKi8KIHZvaWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFy
ICpwYXRoKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwpAQCAtMTIw
OSwxNSArMTE1Niw2IEBAIHZvaWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0ICpvLCBj
b25zdCBjaGFyICpwYXRoKQogCiB9CiAKLS8qKgotICogR2V0cyB0aGUgdGhlbWUgc2V0IG9uIHRo
aXMgZnJhbWUuCi0gKgotICogVGhpcyByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgYnkgZXdrX3ZpZXdf
dGhlbWVfc2V0KCkuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IHRoZW1lIHBh
dGguCi0gKgotICogQHJldHVybiB0aGVtZSBwYXRoLCBtYXkgYmUgQGMgMCBpZiBub3Qgc2V0Lgot
ICovCiBjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CkBAIC0xMjI1LDI2ICsxMTYz
LDEyIEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3RoZW1lX2dldChFdmFzX09iamVjdCAqbykKICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKLS8qKgotICogR2V0IHRoZSBvYmpl
Y3QgdGhhdCByZXByZXNlbnRzIHRoZSBtYWluIGZyYW1lLgotICoKLSAqIEBwYXJhbSBvIHZpZXcg
b2JqZWN0IHRvIGdldCBtYWluIGZyYW1lLgotICoKLSAqIEByZXR1cm4gZXdrX2ZyYW1lIG9iamVj
dCBvciBAYyAwIGlmIG5vbmUgeWV0LgotICovCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVf
bWFpbl9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkLT5tYWluX2ZyYW1lOwogfQogCi0vKioK
LSAqIEdldCB0aGUgY3VycmVudGx5IGZvY3VzZWQgZnJhbWUgb2JqZWN0LgotICoKLSAqIEBwYXJh
bSBvIHZpZXcgb2JqZWN0IHRvIGdldCBmb2N1c2VkIGZyYW1lLgotICoKLSAqIEByZXR1cm4gZXdr
X2ZyYW1lIG9iamVjdCBvciBAYyAwIGlmIG5vbmUgeWV0LgotICovCiBFdmFzX09iamVjdCogZXdr
X3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CkBAIC0xMjYwLDgwICsxMTg0LDMwIEBA
IEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVj
dCAqbykKICAgICByZXR1cm4gY2xpZW50LT53ZWJGcmFtZSgpOwogfQogCi0vKioKLSAqIEFzayBt
YWluIGZyYW1lIHRvIGxvYWQgdGhlIGdpdmVuIFVSSS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBsb2FkIHVyaS4KLSAqIEBwYXJhbSB1cmkgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlm
aWVyIHRvIGxvYWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vzc2Z1bCBy
ZXF1ZXN0LCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCi0gKiAgICAgICAgIE5vdGUgdGhhdCBp
dCBtZWFucyB0aGUgcmVxdWVzdCB3YXMgZG9uZSwgbm90IHRoYXQgaXQgd2FzCi0gKiAgICAgICAg
IHNhdGlzZmllZC4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZhc19PYmplY3Qg
Km8sIGNvbnN0IGNoYXIgKnVyaSkKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9zZXQoc2QtPm1haW5f
ZnJhbWUsIHVyaSk7CiB9CiAKLS8qKgotICogR2V0IHRoZSBjdXJyZW50IHVyaSBsb2FkZWQgYnkg
bWFpbiBmcmFtZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY3VycmVudCB1
cmkuCi0gKgotICogQHJldHVybiBjdXJyZW50IHVyaSByZWZlcmVuY2Ugb3IgQGMgMC4gSXQncyBp
bnRlcm5hbCwgZG9uJ3QgY2hhbmdlLgotICovCiBjb25zdCBjaGFyICpld2tfdmlld191cmlfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIDApOwogICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7
CiB9CiAKLS8qKgotICogR2V0IHRoZSBjdXJyZW50IHRpdGxlIG9mIG1haW4gZnJhbWUuCi0gKgot
ICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGN1cnJlbnQgdGl0bGUuCi0gKgotICogQHJl
dHVybiBjdXJyZW50IHRpdGxlIHJlZmVyZW5jZSBvciBAYyAwLiBJdCdzIGludGVybmFsLCBkb24n
dCBjaGFuZ2UuCi0gKi8KIGNvbnN0IGNoYXIgKmV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFz
X09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsK
ICAgICByZXR1cm4gZXdrX2ZyYW1lX3RpdGxlX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLS8q
KgotICogR2V0cyBpZiBtYWluIGZyYW1lIGlzIGVkaXRhYmxlLgotICoKLSAqIEBwYXJhbSBvIHZp
ZXcgb2JqZWN0IHRvIGdldCBlZGl0YWJsZSBzdGF0ZS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpZiBlZGl0YWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9v
bCBld2tfdmlld19lZGl0YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3
a19mcmFtZV9lZGl0YWJsZV9nZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioKLSAqIFNldCBi
YWNrZ3JvdW5kIGNvbG9yIGFuZCB0cmFuc3BhcmVuY3kKLSAqCi0gKiBKdXN0IGFzIGluIEV2YXMs
IGNvbG9ycyBhcmUgcHJlLW11bHRpcGxpZWQsIHNvIDUwJSByZWQgaXMKLSAqICgxMjgsIDAsIDAs
IDEyOCkgYW5kIG5vdCAoMjU1LCAwLCAwLCAxMjgpIQotICoKLSAqIEB3YXJuaW5nIFdhdGNoIG91
dCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aCB0cmFuc3BhcmVuY3khIE9iamVjdAotICogICAgICAg
ICAgd2lsbCBiZSBoYW5kbGVkIGFzIHRyYW5zcGFyZW50IGltYWdlIGJ5IGV2YXMgZXZlbiBpZiB0
aGUKLSAqICAgICAgICAgIHdlYnBhZ2Ugc3BlY2lmaWVzIGEgYmFja2dyb3VuZCBjb2xvci4gVGhh
dCBtZWFuIHlvdSdsbCBwYXkKLSAqICAgICAgICAgIGEgcHJpY2UgZXZlbiBpZiBpdCdzIG5vdCBy
ZWFsbHkgdHJhbnNwYXJlbnQsIHRodXMKLSAqICAgICAgICAgIHNjcm9sbGluZy9wYW5uaW5nIGFu
ZCB6b29taW5nIHdpbGwgYmUgbGlrZWx5IHNsb3dlciB0aGFuCi0gKiAgICAgICAgICBpZiB0cmFu
c3BhcmVuY3kgaXMgb2ZmLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZS4K
LSAqIEBwYXJhbSByIHJlZCBjb21wb25lbnQuCi0gKiBAcGFyYW0gZyBncmVlbiBjb21wb25lbnQu
Ci0gKiBAcGFyYW0gYiBibHVlIGNvbXBvbmVudC4KLSAqIEBwYXJhbSBhIHRyYW5zcGFyZW5jeS4K
LSAqLwogdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QgKm8sIGludCByLCBp
bnQgZywgaW50IGIsIGludCBhKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOwpAQCAtMTM4NCwxOCArMTI1OCw2IEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2
YXNfT2JqZWN0ICpvLCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICB9CiB9CiAKLS8q
KgotICogUXVlcnkgaWYgdmlldyBvYmplY3QgYmFja2dyb3VuZCBjb2xvci4KLSAqCi0gKiBKdXN0
IGFzIGluIEV2YXMsIGNvbG9ycyBhcmUgcHJlLW11bHRpcGxpZWQsIHNvIDUwJSByZWQgaXMKLSAq
ICgxMjgsIDAsIDAsIDEyOCkgYW5kIG5vdCAoMjU1LCAwLCAwLCAxMjgpIQotICoKLSAqIEBwYXJh
bSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5LgotICogQHBhcmFtIHIgd2hlcmUgdG8gcmV0dXJuIHJl
ZCBjb2xvciBjb21wb25lbnQuCi0gKiBAcGFyYW0gZyB3aGVyZSB0byByZXR1cm4gZ3JlZW4gY29s
b3IgY29tcG9uZW50LgotICogQHBhcmFtIGIgd2hlcmUgdG8gcmV0dXJuIGJsdWUgY29sb3IgY29t
cG9uZW50LgotICogQHBhcmFtIGEgd2hlcmUgdG8gcmV0dXJuIGFscGhhIHZhbHVlLgotICovCiB2
b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCAqbywgaW50ICpyLCBp
bnQgKmcsIGludCAqYiwgaW50ICphKQogewogICAgIGlmIChyKQpAQCAtMTQxNywxNyArMTI3OSw2
IEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvLCBpbnQg
KnIsIGludCAqZywgaW50ICpiLCBpbnQgKmEpCiAgICAgICAgICphID0gc2QtPmJnX2NvbG9yLmE7
CiB9CiAKLS8qKgotICogU2VhcmNoIHRoZSBnaXZlbiB0ZXh0IHN0cmluZyBpbiBkb2N1bWVudC4K
LSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB3aGVyZSB0byBzZWFyY2ggdGV4dC4KLSAqIEBw
YXJhbSBzdHJpbmcgcmVmZXJlbmNlIHN0cmluZyB0byBzZWFyY2guCi0gKiBAcGFyYW0gY2FzZV9z
ZW5zaXRpdmUgaWYgc2VhcmNoIHNob3VsZCBiZSBjYXNlIHNlbnNpdGl2ZSBvciBub3QuCi0gKiBA
cGFyYW0gZm9yd2FyZCBpZiBzZWFyY2ggaXMgZnJvbSBjdXJzb3IgYW5kIG9uIG9yIGJhY2t3YXJk
cy4KLSAqIEBwYXJhbSB3cmFwIGlmIHNlYXJjaCBzaG91bGQgd3JhcCBhdCBlbmQuCi0gKgotICog
QHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZm91bmQsIEBjIEVJTkFfRkFMU0UgaWYgbm90IG9yIGZh
aWx1cmUuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09i
amVjdCAqbywgY29uc3QgY2hhciAqc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVp
bmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTE0NzUsMTMgKzEzMjYsNiBAQCB1bnNp
Z25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QgKm8sIGNvbnN0
IGNoYXIgKnN0cmluZywgRWluYQogICAgIHJldHVybiBwcml2LT5wYWdlLT5tYXJrQWxsTWF0Y2hl
c0ZvclRleHQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBzZW5zaXRpdmUsIGhpZ2hsaWdodCwg
bGltaXQpOwogfQogCi0vKioKLSAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgZXdrX3ZpZXdfdGV4
dF9tYXRjaGVzX21hcmsoKQotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNl
YXJjaCB0ZXh0LgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJ
TkFfRkFMU0UgZm9yIGZhaWx1cmUuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNo
ZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTE0OTAsNTQgKzEzMzQsMjQgQEAgRWluYV9C
b29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0ICpvKQogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogU2V0IGlmIHNob3VsZCBoaWdobGlnaHQg
bWF0Y2hlcyBtYXJrZWQgd2l0aCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyaygpLgotICoKLSAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNldCBpZiBtYXRjaGVzIGFyZSBoaWdobGln
aHRlZCBvciBub3QuCi0gKiBAcGFyYW0gaGlnaGxpZ2h0IGlmIEBjIEVJTkFfVFJVRSwgbWF0Y2hl
cyB3aWxsIGJlIGhpZ2hsaWdodGVkLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsIEBjIEVJTkFfRkFMU0UgZm9yIGZhaWx1cmUuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmll
d190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGhp
Z2hsaWdodCkKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KHNk
LT5tYWluX2ZyYW1lLCBoaWdobGlnaHQpOwogfQogCi0vKioKLSAqIEdldCBpZiBzaG91bGQgaGln
aGxpZ2h0IG1hdGNoZXMgbWFya2VkIHdpdGggZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoKS4K
LSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSBpZiBtYXRjaGVzIGFyZSBoaWdo
bGlnaHRlZCBvciBub3QuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhleSBhcmUg
aGlnaGxpZ2h0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7
CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzZC0+bWFpbl9mcmFt
ZSk7CiB9CiAKLS8qKgotICogU2V0cyBpZiBtYWluIGZyYW1lIGlzIGVkaXRhYmxlLgotICoKLSAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCBlZGl0YWJsZSBzdGF0ZS4KLSAqIEBwYXJhbSBl
ZGl0YWJsZSBuZXcgc3RhdGUuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vz
cywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19lZGl0
YWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKICAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdr
X2ZyYW1lX2VkaXRhYmxlX3NldChzZC0+bWFpbl9mcmFtZSwgZWRpdGFibGUpOwogfQogCi0vKioK
LSAqIEdldCB0aGUgY29weSBvZiB0aGUgc2VsZWN0aW9uIHRleHQuCi0gKgotICogQHBhcmFtIG8g
dmlldyBvYmplY3QgdG8gZ2V0IHNlbGVjdGlvbiB0ZXh0LgotICoKLSAqIEByZXR1cm4gbmV3bHkg
YWxsb2NhdGVkIHN0cmluZyBvciBAYyAwIGlmIG5vdGhpbmcgaXMgc2VsZWN0ZWQgb3IgZmFpbHVy
ZS4KLSAqLwogY2hhciAqZXdrX3ZpZXdfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCAq
bykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKQEAgLTE1NTMs
MTUgKzEzNjcsNiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChF
d2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYsIGNvbnN0IGNoYQogICAgIHJldHVybiBwcml2LT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5j
b21tYW5kKFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSkuZXhlY3V0ZSh2YWx1ZSk7CiB9
CiAKLS8qKgotICogRXhlY3V0ZXMgZWRpdG9yIGNvbW1hbmQuCi0gKgotICogQHBhcmFtIG8gdmll
dyBvYmplY3QgdG8gZXhlY3V0ZSBjb21tYW5kLgotICogQHBhcmFtIGNvbW1hbmQgZWRpdG9yIGNv
bW1hbmQgdG8gYmUgZXhlY3V0ZWQuCi0gKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gYmUgcGFzc2Vk
IGludG8gY29tbWFuZC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBvcGVyYXRpb24g
d2FzIGV4ZWN1dGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3
a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QgKm8sIGNvbnN0IEV3a19F
ZGl0b3JfQ29tbWFuZCBjb21tYW5kLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKICAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTE1OTEsMTQgKzEzOTYs
NiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVj
dCAqbywgY29uc3QgRXdrX0VkaXRvcl9Db21tYQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
CiAKLS8qKgotICogRm9yd2FyZHMgYSByZXF1ZXN0IG9mIG5ldyBDb250ZXh0IE1lbnUgdG8gV2Vi
Q29yZS4KLSAqCi0gKiBAcGFyYW0gbyBWaWV3LgotICogQHBhcmFtIGV2IEV2ZW50IGRhdGEuCi0g
KgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgb3BlcmF0aW9uIHdhcyBleGVjdXRlZCwgQGMg
RUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21l
bnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCAqbywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9E
b3duICpldikKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKQEAgLTE2MzMsMTMgKzE0MzAsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9t
ZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QgKm8sIGNvbnN0IEV2YXNfRXZlbnRfTQogCiAj
ZW5kaWYKIAotLyoqCi0gKiBHZXQgY3VycmVudCBsb2FkIHByb2dyZXNzIGVzdGltYXRlIGZyb20g
MC4wIHRvIDEuMC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY3VycmVudCBw
cm9ncmVzcy4KLSAqCi0gKiBAcmV0dXJuIHByb2dyZXMgdmFsdWUgZnJvbSAwLjAgdG8gMS4wIG9y
IC0xLjAgb24gZXJyb3IuCi0gKi8KIGRvdWJsZSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChj
b25zdCBFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAtMS4wKTsKQEAgLTE2NDcsMTUwICsxNDM3LDYwIEBAIGRvdWJsZSBld2tfdmlld19sb2Fk
X3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKICAgICByZXR1cm4gcHJpdi0+cGFn
ZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0KIAotLyoqCi0gKiBBc2sgbWFp
biBmcmFtZSB0byBzdG9wIGxvYWRpbmcuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8g
c3RvcCBsb2FkaW5nLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBj
IEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX2ZyYW1lX3N0b3AoKQotICov
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc3RvcChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2Zy
YW1lX3N0b3Aoc2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioKLSAqIEFzayBtYWluIGZyYW1lIHRv
IHJlbG9hZCBjdXJyZW50IGRvY3VtZW50LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IHJlbG9hZC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3a19mcmFtZV9yZWxvYWQoKQotICovCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkKEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJh
bWVfcmVsb2FkKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotLyoqCi0gKiBBc2sgbWFpbiBmcmFtZSB0
byBmdWxseSByZWxvYWQgY3VycmVudCBkb2N1bWVudCwgdXNpbmcgbm8gY2FjaGVzLgotICoKLSAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHJlbG9hZC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3
a19mcmFtZV9yZWxvYWRfZnVsbCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWRfZnVs
bChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNkLT5tYWlu
X2ZyYW1lKTsKIH0KIAotLyoqCi0gKiBBc2sgbWFpbiBmcmFtZSB0byBuYXZpZ2F0ZSBiYWNrIGlu
IGhpc3RvcnkuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUgYmFjay4K
LSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90
aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3a19mcmFtZV9iYWNrKCkKLSAqLwogRWluYV9Cb29sIGV3
a192aWV3X2JhY2soRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5t
YWluX2ZyYW1lKTsKIH0KIAotLyoqCi0gKiBBc2sgbWFpbiBmcmFtZSB0byBuYXZpZ2F0ZSBmb3J3
YXJkIGluIGhpc3RvcnkuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUg
Zm9yd2FyZC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3a19mcmFtZV9mb3J3YXJkKCkKLSAqLwog
RWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19m
cmFtZV9mb3J3YXJkKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotLyoqCi0gKiBOYXZpZ2F0ZSBiYWNr
IG9yIGZvcndhcmQgaW4gaGlzdG9yeS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBu
YXZpZ2F0ZS4KLSAqIEBwYXJhbSBzdGVwcyBpZiBwb3NpdGl2ZSBuYXZpZ2F0ZXMgdGhhdCBhbW91
bnQgZm9yd2FyZHMsIGlmIG5lZ2F0aXZlCi0gKiAgICAgICAgZG9lcyBiYWNrd2FyZHMuCi0gKgot
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UuCi0gKgotICogQHNlZSBld2tfZnJhbWVfbmF2aWdhdGUoKQotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfbmF2aWdhdGUoRXZhc19PYmplY3QgKm8sIGludCBzdGVwcykKIHsKICAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2Zy
YW1lX25hdmlnYXRlKHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKLS8qKgotICogQ2hlY2sg
aWYgaXQgaXMgcG9zc2libGUgdG8gbmF2aWdhdGUgYmFja3dhcmRzIG9uZSBpdGVtIGluIGhpc3Rv
cnkuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hlY2sgaWYgYmFja3dhcmQgbmF2
aWdhdGlvbiBpcyBwb3NzaWJsZS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBwb3Nz
aWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKgotICogQHNlZSBld2tfdmlld19uYXZp
Z2F0ZV9wb3NzaWJsZSgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2
YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfYmFja19wb3NzaWJsZShzZC0+bWFpbl9m
cmFtZSk7CiB9CiAKLS8qKgotICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gbmF2aWdhdGUg
Zm9yd2FyZHMgb25lIGl0ZW0gaW4gaGlzdG9yeS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBjaGVjayBpZiBmb3J3YXJkIG5hdmlnYXRpb24gaXMgcG9zc2libGUuCi0gKgotICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgaWYgcG9zc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgot
ICoKLSAqIEBzZWUgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoKQotICovCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2Zy
YW1lX2ZvcndhcmRfcG9zc2libGUoc2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioKLSAqIENoZWNr
IGlmIGl0IGlzIHBvc3NpYmxlIHRvIG5hdmlnYXRlIGdpdmVuIEBhIHN0ZXBzIGluIGhpc3Rvcnku
Ci0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUuCi0gKiBAcGFyYW0gc3Rl
cHMgaWYgcG9zaXRpdmUgbmF2aWdhdGVzIHRoYXQgYW1vdW50IGZvcndhcmRzLCBpZiBuZWdhdGl2
ZQotICogICAgICAgIGRvZXMgYmFja3dhcmRzLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHBvc3NpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3
a192aWV3X25hdmlnYXRlX3Bvc3NpYmxlKEV2YXNfT2JqZWN0ICpvLCBpbnQgc3RlcHMpCiB7CiAg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0
dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOwog
fQogCi0vKioKLSAqIENoZWNrIGlmIG5hdmlnYXRpb24gaGlzdG9yeSAoYmFjay1mb3J3YXJkIGxp
c3RzKSBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoZWNrIGlm
IG5hdmlnYXRpb24gaGlzdG9yeSBpcyBlbmFibGVkLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9U
UlVFIGlmIHZpZXcga2VlcHMgaGlzdG9yeSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8K
IEVpbmFfQm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3Qg
Km8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CkBAIC0xNzk4LDE1ICsxNDk4LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X2hpc3RvcnlfZW5hYmxl
X2dldChjb25zdCBFdmFzX09iamVjdCAqbykKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+
ZW5hYmxlZCgpOwogfQogCi0vKioKLSAqIFNldHMgaWYgbmF2aWdhdGlvbiBoaXN0b3J5IChiYWNr
LWZvcndhcmQgbGlzdHMpIGlzIGVuYWJsZWQuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
dG8gc2V0IGlmIG5hdmlnYXRpb24gaGlzdG9yeSBpcyBlbmFibGVkLgotICogQHBhcmFtIGVuYWJs
ZSBAYyBFSU5BX1RSVUUgaWYgd2Ugd2FudCB0byBlbmFibGUgbmF2aWdhdGlvbiBoaXN0b3J5Owot
ICogQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUg
b24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBld2tf
dmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUp
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBA
IC0xODE1LDIyICsxNTA2LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX3Nl
dChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi0vKioKLSAqIEdldHMgdGhlIGhpc3RvcnkgKGJhY2stZm9yd2FyZCBsaXN0KSBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyB2aWV3LgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdl
dCBuYXZpZ2F0aW9uIGhpc3RvcnkgZnJvbS4KLSAqCi0gKiBAcmV0dXJuIHJldHVybnMgdGhlIGhp
c3RvcnkgaW5zdGFuY2UgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gKiAgICAgICAgIHZp
ZXcgb3IgQGMgMCBvbiBlcnJvcnMgKGluY2x1ZGluZyB3aGVuIGhpc3RvcnkgaXMgbm90Ci0gKiAg
ICAgICAgIGVuYWJsZWQgd2l0aCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoKSkuIFRoaXMg
aW5zdGFuY2UKLSAqICAgICAgICAgaXMgdW5pcXVlIGZvciB0aGlzIHZpZXcgYW5kIHRodXMgbXVs
dGlwbGUgY2FsbHMgdG8gdGhpcwotICogICAgICAgICBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHZp
ZXcgYXMgcGFyYW1ldGVyIHJldHVybnMgdGhlIHNhbWUKLSAqICAgICAgICAgaGFuZGxlLiBUaGlz
IGhhbmRsZSBpcyBhbGl2ZSB3aGlsZSB2aWV3IGlzIGFsaXZlLCB0aHVzIG9uZQotICogICAgICAg
ICBtaWdodCB3YW50IHRvIGxpc3RlbiBmb3IgRVZBU19DQUxMQkFDS19ERUwgb24gZ2l2ZW4gdmll
dwotICogICAgICAgICAoQGEgbykgdG8ga25vdyB3aGVuIHRvIHN0b3AgdXNpbmcgcmV0dXJuZWQg
aGFuZGxlLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KCkKLSAqLwog
RXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQog
ewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwpAQCAtMTg0MiwyOSAr
MTUxNywxMiBAQCBFd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlzdG9yeV9nZXQoY29uc3QgRXZhc19P
YmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPmhpc3Rvcnk7CiB9CiAKLS8qKgotICogR2V0IHRo
ZSBjdXJyZW50IHpvb20gbGV2ZWwgb2YgbWFpbiBmcmFtZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3
IG9iamVjdCB0byBxdWVyeSB6b29tIGxldmVsLgotICoKLSAqIEByZXR1cm4gY3VycmVudCB6b29t
IGxldmVsIGluIHVzZSBvciAtMS4wIG9uIGVycm9yLgotICovCiBmbG9hdCBld2tfdmlld196b29t
X2dldChjb25zdCBFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCAtMS4wKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWlu
X2ZyYW1lKTsKIH0KIAotLyoqCi0gKiBTZXQgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiBtYWlu
IGZyYW1lLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCB6b29tIGxldmVsLgot
ICogQHBhcmFtIHpvb20gbmV3IGxldmVsIHRvIHVzZS4KLSAqIEBwYXJhbSBjeCB4IG9mIGNlbnRl
ciBjb29yZGluYXRlCi0gKiBAcGFyYW0gY3kgeSBvZiBjZW50ZXIgY29vcmRpbmF0ZQotICoKLSAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNl
LgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0
IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCiB7CiAgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0xOTA5LDMyICsxNTY3LDYgQEAg
dm9pZCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywg
RWluYV9Cb29sIHNtb290aF9zY2FsZSkKICAgICBzZC0+YXBpLT56b29tX3dlYWtfc21vb3RoX3Nj
YWxlX3NldChzZCwgc21vb3RoX3NjYWxlKTsKIH0KIAotLyoqCi0gKiBTZXQgdGhlIGN1cnJlbnQg
em9vbSBsZXZlbCBvZiBiYWNraW5nIHN0b3JlLCBjZW50ZXJlZCBhdCBnaXZlbiBwb2ludC4KLSAq
Ci0gKiBVbmxpa2UgZXdrX3ZpZXdfem9vbV9zZXQoKSwgdGhpcyBjYWxsIGRvIG5vdCBhc2sgV2Vi
S2l0IHRvIHJlbmRlcgotICogYXQgbmV3IHNpemUsIGJ1dCBzY2FsZSB3aGF0IGlzIGFscmVhZHkg
cmVuZGVyZWQsIGJlaW5nIG11Y2ggZmFzdGVyCi0gKiBidXQgd29yc2UgcXVhbGl0eS4KLSAqCi0g
KiBPZnRlbiBvbmUgc2hvdWxkIHVzZSBld2tfdmlld196b29tX2FuaW1hdGVkX3NldCgpLCBpdCB3
aWxsIGNhbGwgdGhlCi0gKiBzYW1lIG1hY2hpbmVyeSBpbnRlcm5hbGx5LgotICoKLSAqIEBub3Rl
IHRoaXMgd2lsbCBzZXQgdmFyaWFibGVzIHVzZWQgYnkgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9z
ZXQoKQotICogICAgICAgc28gc3ViLWNsYXNzZXMgd2lsbCBub3QgcmVzZXQgaW50ZXJuYWwgc3Rh
dGUgb24gdGhlaXIKLSAqICAgICAgICJjYWxjdWxhdGUiIHBoYXNlLiBUbyB1bnNldCB0aG9zZSBh
bmQgZW5hYmxlIHN1Yi1jbGFzc2VzIHRvCi0gKiAgICAgICByZXNldCB0aGVpciBpbnRlcm5hbCBz
dGF0ZSwgY2FsbAotICogICAgICAgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoKS4g
TmFtZWx5LCB0aGlzIGNhbGwgd2lsbAotICogICAgICAgc2V0IGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19zdGFydCgpIHRvIGFjdHVhbCB3ZWJraXQgem9vbQotICogICAgICAgbGV2ZWwsIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoKSBhbmQKLSAqICAgICAgIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCkgdG8gZ2l2ZW4gem9vbSBsZXZlbC4KLSAqCi0gKiBA
cGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgd2VhayB6b29tIGxldmVsLgotICogQHBhcmFtIHpv
b20gbGV2ZWwgdG8gc2NhbGUgYmFja2luZyBzdG9yZS4KLSAqIEBwYXJhbSBjeCBob3Jpem9udGFs
IGNlbnRlciBvZmZzZXQsIHJlbGF0aXZlIHRvIG9iamVjdCAody8yIGlzIG1pZGRsZSkuCi0gKiBA
cGFyYW0gY3kgdmVydGljYWwgY2VudGVyIG9mZnNldCwgcmVsYXRpdmUgdG8gb2JqZWN0IChoLzIg
aXMgbWlkZGxlKS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBF
SU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19z
ZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQg
Y3kpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CkBAIC0xOTYzLDI0ICsxNTk1LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQo
RXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXMKICAgICByZXR1
cm4gc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwgem9vbSwgY3gsIGN5KTsKIH0KIAotLyoqCi0g
KiBNYXJrIGludGVybmFsIHpvb20gYW5pbWF0aW9uIHN0YXRlIHRvIGdpdmVuIHpvb20uCi0gKgot
ICogVGhpcyBkb2VzIG5vdCBtb2RpZnkgYW55IGFjdHVhbCB6b29tIGluIFdlYktpdCBvciBiYWNr
aW5nIHN0b3JlLAotICoganVzdCBzZXQgdGhlIEV3a19WaWV3X1NtYXJ0X0RhdGEtPmFuaW1hdGVk
X3pvb20uem9vbS5zdGFydCBzbwotICogc3ViLWNsYXNzZXMgd2lsbCBrbm93IHRoZXkgc2hvdWxk
IG5vdCByZXNldCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBjaGFuZ2UgdmFsdWUuCi0gKiBAcGFyYW0gem9vbSBuZXcgc3RhcnQgdmFsdWUuCi0g
KgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhl
cndpc2UuCi0gKgotICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX3NldCgpCi0gKiBAc2Vl
IGV3a192aWV3X3pvb21fd2Vha19zZXQoKQotICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVk
X21hcmtfc3RvcCgpCi0gKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoKQot
ICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgpCi0gKi8KIEVpbmFf
Qm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoRXZhc19PYmplY3QgKm8sIGZs
b2F0IHpvb20pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CkBAIC0xOTg4LDI0ICsxNjAyLDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5p
bWF0ZWRfbWFya19zdGFydChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSkKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi0vKioKLSAqIE1hcmsgaW50ZXJuYWwgem9vbSBhbmltYXRpb24gc3Rh
dGUgdG8gZ2l2ZW4gem9vbS4KLSAqCi0gKiBUaGlzIGRvZXMgbm90IG1vZGlmeSBhbnkgYWN0dWFs
IHpvb20gaW4gV2ViS2l0IG9yIGJhY2tpbmcgc3RvcmUsCi0gKiBqdXN0IHNldCB0aGUgRXdrX1Zp
ZXdfU21hcnRfRGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCBzbwotICogc3ViLWNsYXNzZXMg
d2lsbCBrbm93IHRoZXkgc2hvdWxkIG5vdCByZXNldCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4KLSAq
Ci0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2UgdmFsdWUuCi0gKiBAcGFyYW0gem9v
bSBuZXcgZW5kIHZhbHVlLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3Ms
IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9zZXQoKQotICogQHNlZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkKLSAqIEBzZWUgZXdr
X3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoKQotICogQHNlZSBld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfc3RhcnQoKQotICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtf
Y3VycmVudCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5k
KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjAxMywyNCArMTYwOSw2IEBAIEVpbmFfQm9v
bCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6
b29tKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogTWFyayBpbnRlcm5hbCB6
b29tIGFuaW1hdGlvbiBzdGF0ZSB0byBnaXZlbiB6b29tLgotICoKLSAqIFRoaXMgZG9lcyBub3Qg
bW9kaWZ5IGFueSBhY3R1YWwgem9vbSBpbiBXZWJLaXQgb3IgYmFja2luZyBzdG9yZSwKLSAqIGp1
c3Qgc2V0IHRoZSBFd2tfVmlld19TbWFydF9EYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVu
dCBzbwotICogc3ViLWNsYXNzZXMgd2lsbCBrbm93IHRoZXkgc2hvdWxkIG5vdCByZXNldCB0aGVp
ciBpbnRlcm5hbCBzdGF0ZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2Ug
dmFsdWUuCi0gKiBAcGFyYW0gem9vbSBuZXcgY3VycmVudCB2YWx1ZS4KLSAqCi0gKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0g
KiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9v
bV93ZWFrX3NldCgpCi0gKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkK
LSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KCkKLSAqIEBzZWUgZXdr
X3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld196
b29tX2FuaW1hdGVkX21hcmtfY3VycmVudChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSkKIHsK
ICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTIw
MzgsMTggKzE2MTYsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1
cnJlbnQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20pCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAotLyoqCi0gKiBVbm1hcmsgaW50ZXJuYWwgem9vbSBhbmltYXRpb24gc3RhdGUuCi0gKgot
ICogVGhpcyB6ZXJvIGFsbCBzdGFydCwgZW5kIGFuZCBjdXJyZW50IHZhbHVlcy4KLSAqCi0gKiBA
cGFyYW0gbyB2aWV3IG9iamVjdCB0byBtYXJrIGFzIGFuaW1hdGVkIGlzIHN0b3BwZWQuCi0gKgot
ICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoKQotICogQHNlZSBld2tf
dmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKCkKLSAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX2N1cnJlbnQoKQotICogQHNlZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkKLSAq
LwogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2JqZWN0
ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OwpAQCAtMjA1NywyOCArMTYyMyw2IEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVk
X21hcmtfc3RvcChFdmFzX09iamVjdCAqbykKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0v
KioKLSAqIFNldCB0aGUgY3VycmVudCB6b29tIGxldmVsIHdoaWxlIGFuaW1hdGluZy4KLSAqCi0g
KiBJZiB0aGUgdmlldyB3YXMgYWxyZWFkeSBhbmltYXRpbmcgdG8gYW5vdGhlciB6b29tLCBpdCB3
aWxsIHN0YXJ0Ci0gKiBmcm9tIGN1cnJlbnQgcG9pbnQgdG8gdGhlIG5leHQgcHJvdmlkZWQgem9v
bSAoQGEgem9vbSBwYXJhbWV0ZXIpCi0gKiBhbmQgZHVyYXRpb24gKEBhIGR1cmF0aW9uIHBhcmFt
ZXRlcikuCi0gKgotICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRvIHRyYW5zaXRp
b25zIGZyb20gb25lIGxldmVsIHRvCi0gKiBhbm90aGVyLiBIb3dldmVyLCBvbmUgbWF5IHdpc2gg
dG8gZG8gdGhvc2UgZnJvbSBvdXRzaWRlLCBpbiB0aGF0Ci0gKiBjYXNlIHVzZSBld2tfdmlld196
b29tX3dlYWtfc2V0KCkgYW5kIGxhdGVyIGNvbnRyb2wgaW50ZXJtZWRpYXRlCi0gKiBzdGF0ZXMg
d2l0aCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgpLAotICogZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9tYXJrX2VuZCgpIGFuZAotICogZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9t
YXJrX3N0b3AoKS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBhbmltYXRlLgotICog
QHBhcmFtIHpvb20gZmluYWwgem9vbSBsZXZlbCB0byB1c2UuCi0gKiBAcGFyYW0gZHVyYXRpb24g
dGltZSBpbiBzZWNvbmRzIHRoZSBhbmltYXRpb24gc2hvdWxkIHRha2UuCi0gKiBAcGFyYW0gY3gg
b2Zmc2V0IGluc2lkZSBvYmplY3QgdGhhdCBkZWZpbmVzIHpvb20gY2VudGVyLiAwIGlzIGxlZnQg
c2lkZS4KLSAqIEBwYXJhbSBjeSBvZmZzZXQgaW5zaWRlIG9iamVjdCB0aGF0IGRlZmluZXMgem9v
bSBjZW50ZXIuIDAgaXMgdG9wIHNpZGUuCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBhbmlt
YXRpb24gd2lsbCBiZSBzdGFydGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdAotICogICAgICAgICAg
ICBiZWNhdXNlIHpvb20gaXMgdG9vIHNtYWxsL2JpZy4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJh
dGlvbiwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKIHsKICAgICBkb3VibGUgbm93OwpA
QCAtMjEyOCw2MSArMTY3MiwxOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9z
ZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLAogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogUXVlcnkgaWYgem9vbSBsZXZlbCBqdXN0IGFwcGxp
ZXMgdG8gdGV4dCBhbmQgbm90IG90aGVyIGVsZW1lbnRzLgotICoKLSAqIEBwYXJhbSBvIHZpZXcg
dG8gcXVlcnkgc2V0dGluZy4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBqdXN0IHRl
eHQgYXJlIHNjYWxlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBl
d2tfdmlld196b29tX3RleHRfb25seV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IGV3a19mcmFtZV96b29tX3RleHRfb25seV9nZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi0vKioK
LSAqIFNldCBpZiB6b29tIGxldmVsIGp1c3QgYXBwbGllcyB0byB0ZXh0IGFuZCBub3Qgb3RoZXIg
ZWxlbWVudHMuCi0gKgotICogQHBhcmFtIG8gdmlldyB0byBjaGFuZ2Ugc2V0dGluZy4KLSAqIEBw
YXJhbSBzZXR0aW5nIEBjIEVJTkFfVFJVRSBpZiB6b29tIHNob3VsZCBqdXN0IGJlIGFwcGxpZWQg
dG8gdGV4dC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNldHRpbmcpCiB7CiAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFt
ZV96b29tX3RleHRfb25seV9zZXQoc2QtPm1haW5fZnJhbWUsIHNldHRpbmcpOwogfQogCi0vKioK
LSAqIEhpbnQgZW5naW5lIHRvIHByZS1yZW5kZXIgcmVnaW9uLgotICoKLSAqIEVuZ2luZXMgYW5k
IGJhY2tpbmcgc3RvcmUgbWlnaHQgYmUgYWJsZSB0byBwcmUtcmVuZGVyIHJlZ2lvbnMgaW4KLSAq
IG9yZGVyIHRvIHNwZWVkIHVwIHpvb21pbmcgb3Igc2Nyb2xsaW5nIHRvIHRoYXQgcmVnaW9uLiBO
b3QgYWxsCi0gKiBlbmdpbmVzIG1pZ2h0IGltcGxlbWVudCB0aGF0IGFuZCB0aGV5IHdpbGwgcmV0
dXJuIEBjIEVJTkFfRkFMU0UKLSAqIGluIHRoYXQgY2FzZS4KLSAqCi0gKiBUaGUgZ2l2ZW4gcmVn
aW9uIGlzIGEgaGludC4gRW5naW5lcyBtaWdodCBkbyBiaWdnZXIgb3Igc21hbGxlciBhcmVhCi0g
KiB0aGF0IGNvdmVycyB0aGF0IHJlZ2lvbi4gUHJlLXJlbmRlciBtaWdodCBub3QgYmUgaW1tZWRp
YXRlLCBpdCBtYXkKLSAqIGJlIHBvc3Rwb25lZCB0byBhIHRocmVhZCwgb3BlcmF0ZWQgY29vcGVy
YXRpdmVseSBpbiB0aGUgbWFpbiBsb29wCi0gKiBhbmQgbWF5IGJlIGV2ZW4gaWdub3JlZCBvciBj
YW5jZWxsZWQgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiBNdWx0aXBsZSByZXF1ZXN0cyBtaWdodCBiZSBx
dWV1ZWQgYnkgZW5naW5lcy4gT25lIGNhbiBjbGVhci9mb3JnZXQKLSAqIGFib3V0IHRoZW0gd2l0
aCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbCgpLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgdG8g
YXNrIHByZS1yZW5kZXIgb2YgZ2l2ZW4gcmVnaW9uLgotICogQHBhcmFtIHggYWJzb2x1dGUgY29v
cmRpbmF0ZSAoMD1sZWZ0KSB0byBwcmUtcmVuZGVyIGF0IHpvb20uCi0gKiBAcGFyYW0geSBhYnNv
bHV0ZSBjb29yZGluYXRlICgwPXRvcCkgdG8gcHJlLXJlbmRlciBhdCB6b29tLgotICogQHBhcmFt
IHcgd2lkdGggdG8gcHJlLXJlbmRlciBzdGFydGluZyBmcm9tIEBhIHggYXQgem9vbS4KLSAqIEBw
YXJhbSBoIGhlaWdodCB0byBwcmUtcmVuZGVyIHN0YXJ0aW5nIGZyb20gQGEgeSBhdCB6b29tLgot
ICogQHBhcmFtIHpvb20gZGVzaXJlZCB6b29tLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHJlcXVlc3Qgd2FzIGFjY2VwdGVkLCBAYyBFSU5BX0ZBTFNFCi0gKiAgICAgICAgIG90aGVy
d2lzZSAoZXJyb3JzLCBwcmUtcmVuZGVyIG5vdCBzdXBwb3J0ZWQsIGV0YykuCi0gKgotICogQHNl
ZSBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbCgpCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19w
cmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQogewogICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjIyNiwyMSArMTcy
Nyw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAq
bywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksCiAgICAgcmV0dXJuIHNkLT5hcGktPnByZV9y
ZW5kZXJfcmVnaW9uKHNkLCB4LCB5LCB3LCBoLCB6b29tKTsKIH0KIAotLyoqCi0gKiBIaW50IGVu
Z2luZSB0byBwcmUtcmVuZGVyIHJlZ2lvbiwgZ2l2ZW4gbiBleHRyYSBjb2xzL3Jvd3MKLSAqCi0g
KiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIG1ldGhvZCB0byBld2tfdmlld19wcmVfcmVuZGVyX3Jl
Z2lvbigpLiBJdCBkb2VzIG5vdAotICogbWFrZSBzZW5zZSBpbiBhbGwgZW5naW5lcyBhbmQgdGhl
cmVmb3JlIGl0IG1pZ2h0IG5vdCBiZSBpbXBsZW1lbnRlZCBhdCBhbGwuCi0gKgotICogSXQncyBv
bmx5IHVzZWZ1bCBpZiBlbmdpbmUgZGl2aWRlIHRoZSBhcmVhIGJlaW5nIHJlbmRlcmVkIGluIHNt
YWxsZXIgdGlsZXMsCi0gKiBmb3JtaW5nIGEgZ3JpZC4gVGhlbiwgYnJvd3NlciBjb3VsZCBjYWxs
IHRoaXMgZnVuY3Rpb24gdG8gcHJlLXJlbmRlciBAcGFyYW0gbgotICogcm93cy9jb2xzIGludm9s
dmluZyB0aGUgY3VycmVudCB2aWV3cG9ydC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IHRvIGFzayBw
cmUtcmVuZGVyIG9uLgotICogQHBhcmFtIG4gbnVtYmVyIG9mIGNvbHMvcm93cyB0aGF0IG11c3Qg
YmUgcGFydCBvZiB0aGUgcmVnaW9uIHByZS1yZW5kZXJlZAotICoKLSAqIEBzZWUgZXdrX3ZpZXdf
cHJlX3JlbmRlcl9yZWdpb24oKQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9y
ZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QgKm8sIHVuc2lnbmVkIGludCBuKQogewogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjI1NSwxMyAr
MTc0MSw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhF
dmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4pCiAgICAgcmV0dXJuIHNkLT5hcGktPnByZV9y
ZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNkLCBuLCBjdXJfem9vbSk7CiB9CiAKLS8qKgotICogR2V0
IGlucHV0IG1ldGhvZCBoaW50cwotICoKLSAqIEBwYXJhbSBvIFZpZXcuCi0gKgotICogQHJldHVy
biBpbnB1dCBtZXRob2QgaGludHMKLSAqLwogdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQo
RXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
MCk7CkBAIC0yMjY5LDExICsxNzQ4LDYgQEAgdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQo
RXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPmltaDsKIH0KIAotLyoqCi0gKiBDYW5j
ZWwgKGNsZWFyKSBwcmV2aW91cyBwcmUtcmVuZGVyIHJlcXVlc3RzLgotICoKLSAqIEBwYXJhbSBv
IHZpZXcgdG8gY2xlYXIgcHJlLXJlbmRlciByZXF1ZXN0cy4KLSAqLwogdm9pZCBld2tfdmlld19w
cmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkKTsKQEAgLTIyODEsMTQgKzE3NTUsNiBAQCB2b2lkIGV3a192aWV3X3By
ZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKQogICAgIHNkLT5hcGktPnByZV9yZW5kZXJf
Y2FuY2VsKHNkKTsKIH0KIAotLyoqCi0gICogRW5hYmxlIHByb2Nlc3Npbmcgb2YgdXBkYXRlIHJl
cXVlc3RzLgotICAqCi0gICogQHBhcmFtIG8gdmlldyB0byBlbmFibGUgcmVuZGVyaW5nLgotICAq
Ci0gICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgcmVuZGVyIHdhcyBlbmFibGVkLCBAYyBFSU5B
X0ZBTFNFCi0gICAgICAgICAgICBvdGhlcndpc2UgKGVycm9ycywgcmVuZGVyaW5nIHN1c3BlbnNp
b24gbm90IHN1cHBvcnRlZCkuCi0gICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZW5hYmxlX3JlbmRl
cihjb25zdCBFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTIyOTYsMTQgKzE3NjIsNiBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCAqbykKICAgICByZXR1cm4gc2Qt
PmFwaS0+ZW5hYmxlX3JlbmRlcihzZCk7CiB9CiAKLS8qKgotICAqIERpc2FibGUgcHJvY2Vzc2lu
ZyBvZiB1cGRhdGUgcmVxdWVzdHMuCi0gICoKLSAgKiBAcGFyYW0gbyB2aWV3IHRvIGRpc2FibGUg
cmVuZGVyaW5nLgotICAqCi0gICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgcmVuZGVyIHdhcyBk
aXNhYmxlZCwgQGMgRUlOQV9GQUxTRQotICAgICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIHJl
bmRlcmluZyBzdXNwZW5zaW9uIG5vdCBzdXBwb3J0ZWQpLgotICAqLwogRWluYV9Cb29sIGV3a192
aWV3X2Rpc2FibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMjM4NSwxNCArMTg0Myw2
IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCBhdXRvCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
LyoqCi0gKiBHZXRzIGlmIHZpZXcgY2FuIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseS4KLSAqCi0g
KiBAcGFyYW0gbyB2aWV3IHRvIGNoZWNrIHN0YXR1cwotICoKLSAqIEByZXR1cm4gRUlOQV9UUlVF
IGlmIHZpZXcgY2FuIGJlIHJlc2l6ZWQsIEVJTkFfRkFMU0UKLSAqICAgICAgICAgb3RoZXJ3aXNl
IChlcnJvcnMsIGNhbm5vdCBiZSByZXNpemVkKS4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8p
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBA
IC0yNDAwLDE2ICsxODUwLDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1
dG9fcmVzaXplX3dpbmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiAgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3c7CiB9CiAKLS8qKgotICogU2V0
cyBpZiB2aWV3IGNhbiBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHkuCi0gKgotICogQHBhcmFtIG8g
Vmlldy4KLSAqIEBwYXJhbSByZXNpemFibGUgQGMgRUlOQV9UUlVFIGlmIHdlIHdhbnQgdG8gcmVz
aXplIGF1dG9tYXRpY2FsbHk7Ci0gKiBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSXQgZGVmYXVs
dHMgdG8gQGMgRUlOQV9UUlVFCi0gKgotICogQHJldHVybiBFSU5BX1RSVUUgaWYgYXV0b19yZXNp
emVfd2luZG93IHN0YXR1cyBzZXQsIEVJTkFfRkFMU0UKLSAqICAgICAgICAgb3RoZXJ3aXNlIChl
cnJvcnMpLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNp
emVfd2luZG93X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHJlc2l6YWJsZSkKIHsKICAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI0NTYs
MTQgKzE4OTYsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19z
ZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotLyoqCi0gKiBHZXQgc3RhdHVzIG9mIGZyYW1lIGZsYXR0ZW5pbmcuCi0gKgotICog
QHBhcmFtIG8gdmlldyB0byBjaGVjayBzdGF0dXMKLSAqCi0gKiBAcmV0dXJuIEVJTkFfVFJVRSBp
ZiBmbGF0dGVuaW5nIGlzIGVuYWJsZWQsIEVJTkFfRkFMU0UKLSAqICAgICAgICAgb3RoZXJ3aXNl
IChlcnJvcnMsIGZsYXR0ZW5pbmcgZGlzYWJsZWQpLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8p
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBA
IC0yNDcxLDE0ICsxOTAzLDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2Zy
YW1lX2ZsYXR0ZW5pbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKIH0KIAotLyoqCi0gKiBTZXQgZnJh
bWUgZmxhdHRlbmluZy4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IHRvIHNldCBmbGF0dGVuaW5nCi0g
KgotICogQHJldHVybiBFSU5BX1RSVUUgaWYgZmxhdHRlbmluZyBzdGF0dXMgc2V0LCBFSU5BX0ZB
TFNFCi0gKiAgICAgICAgIG90aGVyd2lzZSAoZXJyb3JzKS4KLSAqLwogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
aW5hX0Jvb2wgZW5hYmxlKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOwpAQCAtMjU4NywxNCArMjAxMSw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJs
ZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIEdldCBjdXJyZW50IGVuY29k
aW5nIG9mIHRoaXMgVmlldy4KLSAqCi0gKiBAcGFyYW0gbyBWaWV3LgotICoKLSAqIEByZXR1cm4g
QSBwb2ludGVyIHRvIGFuIGVpbmFfc3RyaW5zaGFyZSBjb250YWluaW5nIHRoZSBjdXJyZW50IGN1
c3RvbQotICogZW5jb2RpbmcgZm9yIFZpZXcgb2JqZWN0IEBwYXJhbSBvLCBvciBAYyAwIGlmIGl0
J3Mgbm90IHNldC4KLSAqLwogY29uc3QgY2hhciAqZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19j
dXN0b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOwpAQCAtMjYxMSwxNCArMjAyNyw2IEBAIGNvbnN0IGNoYXIgKmV3
a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCAqbykK
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tOwogfQogCi0vKioKLSAq
IFNldCBlbmNvZGluZyBvZiB0aGlzIFZpZXcgYW5kIHJlbG9hZCBwYWdlLgotICoKLSAqIEBwYXJh
bSBvIFZpZXcuCi0gKiBAcGFyYW0gZW5jb2RpbmcgVGhlIG5ldyBlbmNvZGluZyBvciBAYyAwIHRv
IHJlc3RvcmUgdGhlIGRlZmF1bHQgZW5jb2RpbmcuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KIEVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0
IGNoYXIgKmVuY29kaW5nKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOwpAQCAtMjY0OCwxMiArMjA1Niw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICpl
bmNvCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotLyoqCi0gKiBTZXRzIHRoZSBlbmNvZGlu
ZyBkZXRlY3Rvci4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgaWYgZW5jb2Rp
bmcgZGV0ZWN0b3IgaXMgZW5hYmxlZC4KLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nl
c3MgYW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBl
bmFibGUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CkBAIC0yNjY2LDEyICsyMDY4LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5j
b2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmwKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIEdldHMgaWYgdGhlIGVuY29kaW5nIGRldGVj
dG9yIGlzIGVuYWJsZWQuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGlmIGVu
Y29kaW5nIGRldGVjdG9yIGlzIGVuYWJsZWQuCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBl
bmNvZGluZyBkZXRlY3RvciBpcyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBvbiBl
cnJvcnMuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9y
X2dldChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI2NzksMTcgKzIwNzUsNiBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9nZXQoRXZhc19PYmplY3QgKm8pCiAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yOwogfQogCi0vKioKLSAqIFJldHVy
bnMgd2hldGhlciBkZXZlbG9wZXIgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhlIGdpdmVu
IHZpZXcuCi0gKgotICogQ3VycmVudGx5LCB0aGlzIGlzIHVzZWQgdG8ga25vdyB3aGV0aGVyIHRo
ZSBXZWIgSW5zcGVjdG9yIGlzIGVuYWJsZWQgZm9yIGEKLSAqIGdpdmVuIHZpZXcuCi0gKgotICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hlY2suCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaWYgZGV2ZWxvcGVyIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UKLSAq
ICAgICAgICAgb3RoZXJ3aXNlLgotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfZGV2ZWxvcGVyX2V4dHJhc19nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yNjk3LDE3ICsyMDgyLDYg
QEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0
KEV2YXNfT2JqZWN0ICpvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxv
cGVyX2V4dHJhczsKIH0KIAotLyoqCi0gKiBFbmFibGVzL2Rpc2FibGVzIGRldmVsb3BlciBleHRl
bnNpb25zIGZvciB0aGUgZ2l2ZW4gdmlldy4KLSAqCi0gKiBUaGlzIGN1cnJlbnRseSBjb250cm9s
cyB3aGV0aGVyIHRoZSBXZWIgSW5zcGVjdG9yIHNob3VsZCBiZSBlbmFibGVkLgotICoKLSAqIEBw
YXJhbSBvIFRoZSB2aWV3IHdob3NlIHNldHRpbmcgd2lsbCBiZSBjaGFuZ2VkLgotICogQHBhcmFt
IGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGRldmVsb3BlciBleHRyYXMsIEBjIEVJTkFf
RkFMU0UgdG8KLSAqICAgICAgICAgICAgICAgZGlzYWJsZS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBvbiBzdWNjZXNzLCBARUlOQV9GQUxTRSBvbiBmYWlsdXJlLgotICovCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yODg4LDEyICsyMjYyLDYgQEAgRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZm9udF9zYW5zX3NlcmlmX3NldChFdmFzX09iamVjdCAqbywgY29uc3Qg
Y2hhciAqZmFtaWwKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIEdldHMgaWYg
dGhlIHNwYXRpYWwgbmF2aWFndGlvbiBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJhbSBvIHZpZXcg
b2JqZWN0IHRvIGdldCBzcGF0aWFsIG5hdmlnYXRpb24gc2V0dGluZy4KLSAqIEByZXR1cm4gQGMg
RUlOQV9UUlVFIGlmIHNwYXRpYWwgbmF2aWdhdGlvbiBpcyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNF
IGlmIG5vdCBvciBvbiBlcnJvcnMuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Nw
YXRpYWxfbmF2aWdhdGlvbl9nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yOTAxLDEyICsyMjY5LDYgQEAg
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX2dldChFdmFzX09i
amVjdCAqbykKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uOwog
fQogCi0vKioKLSAqIFNldHMgdGhlIHNwYXRpYWwgbmF2aWdhdGlvbi4KLSAqCi0gKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBzZXQgc3BhdGlhbCBuYXZpZ2F0aW9uIHNldHRpbmcuCi0gKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUK
LSAqLwogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChF
dmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI5MTksMTIgKzIyODEsNiBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0
ICpvLCBFaW5hX0Jvb2wgZW5hYgogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICog
R2V0cyBpZiB0aGUgbG9jYWwgc3RvcmFnZSBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJhbSBvIHZp
ZXcgb2JqZWN0IHRvIGdldCBpZiBsb2NhbCBzdG9yYWdlIGlzIGVuYWJsZWQuCi0gKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBpZiBsb2NhbCBzdG9yYWdlIGlzIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0Ug
aWYgbm90IG9yIG9uIGVycm9ycy4KLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9j
YWxfc3RvcmFnZV9nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC0yOTMyLDEyICsyMjg4LDYgQEAgRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9nZXQoRXZhc19PYmplY3QgKm8pCiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CiB9CiAKLS8qKgotICogU2V0
cyB0aGUgbG9jYWwgc3RvcmFnZSBvZiBIVE1MNS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBzZXQgaWYgbG9jYWwgc3RvcmFnZSBpcyBlbmFibGVkLgotICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2VzcyBhbmQgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCi0gKi8KIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
aW5hX0Jvb2wgZW5hYmxlKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOwpAQCAtMjk1MCwxMiArMjMwMCw2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxl
KQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogR2V0cyBpZiB0aGUgcGFnZSBj
YWNoZSBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCBpZiBw
YWdlIGNhY2hlIGlzIGVuYWJsZWQuCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBwYWdlIGNh
Y2hlIGlzIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UgaWYgbm90LgotICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX2dldChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTI5NjMsMTIgKzIz
MDcsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX2dldChFdmFzX09i
amVjdCAqbykKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZTsKIH0KIAotLyoq
Ci0gKiBTZXRzIHRoZSBwYWdlIGNhY2hlLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IHNldCBpZiBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBv
biBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKLSAqLwogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBl
bmFibGUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CkBAIC0yOTgxLDEyICsyMzE5LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFn
ZV9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAotLyoKLSAqIEdldHMgdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ug
cGF0aC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgdGhlIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UgcGF0aC4KLSAqIEByZXR1cm4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ug
cGF0aC4KLSAqLwogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2Rh
dGFiYXNlX3BhdGhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwpAQCAtMjk5NCwxMiArMjMyNiw2IEBAIGNvbnN0IGNo
YXIqIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25z
dCBFdmFzX09iamVjdCAqCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2Vf
ZGF0YWJhc2VfcGF0aDsKIH0KIAotLyoqCi0gKiBTZXRzIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIHBhdGguCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IHRoZSBsb2NhbCBz
dG9yYWdlIGRhdGFiYXNlIHBhdGguCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNz
IGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFzX09iamVjdCAqbywgY29u
c3QgY2hhciAqcGF0aCkKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKQEAgLTMwMDksMTIgKzIzMzUsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25z
dAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogU2ltaWxhciB0byBldmFzX29i
amVjdF9zbWFydF9kYXRhX2dldCgpLCBidXQgZG9lcyB0eXBlIGNoZWNraW5nLgotICoKLSAqIEBw
YXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5IGludGVybmFsIGRhdGEuCi0gKiBAcmV0dXJuIGlu
dGVybmFsIGRhdGEgb3IgQGMgMCBvbiBlcnJvcnMgKGllOiBpbmNvcnJlY3QgdHlwZSBvZiBAYSBv
KS4KLSAqLwogRXdrX1ZpZXdfU21hcnRfRGF0YSAqZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQoY29u
c3QgRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CkBAIC0zMTMyLDE5ICsyNDUyLDYgQEAgc3RydWN0IF9Fd2tfVmlld19QYWludF9Db250
ZXh0IHsKICAgICBjYWlyb190ICpjcjsKIH07CiAKLS8qKgotICogQ3JlYXRlIGEgbmV3IHBhaW50
IGNvbnRleHQgdXNpbmcgdGhlIHZpZXcgYXMgc291cmNlIGFuZCBjYWlybyBhcyBvdXRwdXQuCi0g
KgotICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB0aGUgdmlldyB0byB1
c2UgYXMgcGFpbnQgc291cmNlLgotICogQHBhcmFtIGNyIGNhaXJvIGNvbnRleHQgdG8gdXNlIGFz
IHBhaW50IGRlc3RpbmF0aW9uLiBBIG5ldwotICogICAgICAgIHJlZmVyZW5jZSBpcyB0YWtlbiwg
c28gaXQncyBzYWZlIHRvIGNhbGwgY2Fpcm9fZGVzdHJveSgpCi0gKiAgICAgICAgYWZ0ZXIgdGhp
cyBmdW5jdGlvbiByZXR1cm5zLgotICoKLSAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3Rh
bmNlIG9yIEBjIDAgb24gZXJyb3JzLgotICoKLSAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5l
cmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKLSAqICAgICAgIHRvIGRl
ZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KLSAqLwogRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCAqZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2
LCBjYWlyb190ICpjcikKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJp
diwgMCk7CkBAIC0zMTY1LDE0ICsyNDcyLDYgQEAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2LAogICAg
IHJldHVybiBjdHh0OwogfQogCi0vKioKLSAqIERlc3Ryb3kgcHJldmlvdXNseSBjcmVhdGVkIHBh
aW50IGNvbnRleHQuCi0gKgotICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBkZXN0cm95
LiBNdXN0IEBiIG5vdCBiZSBAYyAwLgotICoKLSAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5l
cmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKLSAqICAgICAgIHRvIGRl
ZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KLSAqLwogdm9pZCBld2tfdmlld19wYWludF9j
b250ZXh0X2ZyZWUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKQEAgLTMxODEsMTYgKzI0ODAsNiBAQCB2b2lkIGV3
a192aWV3X3BhaW50X2NvbnRleHRfZnJlZShFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0KQog
ICAgIGZyZWUoY3R4dCk7CiB9CiAKLS8qKgotICogU2F2ZSAocHVzaCB0byBzdGFjaykgcGFpbnQg
Y29udGV4dCBzdGF0dXMuCi0gKgotICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBzYXZl
LiBNdXN0IEBiIG5vdCBiZSBAYyAwLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9yZXN0b3JlKCkKLSAqCi0gKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0
IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50Ci0gKiAgICAgICB0byBkZWZpbmUgdGhlaXIg
b3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZl
KEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oY3R4dCk7CkBAIC0zMTk4LDE2ICsyNDg3LDYgQEAgdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCkKICAgICBjdHh0LT5n
Yy0+c2F2ZSgpOwogfQogCi0vKioKLSAqIFJlc3RvcmUgKHBvcCBmcm9tIHN0YWNrKSBwYWludCBj
b250ZXh0IHN0YXR1cy4KLSAqCi0gKiBAcGFyYW0gY3R4dCBwYWludCBjb250ZXh0IHRvIHJlc3Rv
cmUuIE11c3QgQGIgbm90IGJlIEBjIDAuCi0gKgotICogQHNlZSBld2tfdmlld19wYWludF9jb250
ZXh0X3NhdmUoKQotICoKLSAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQg
anVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKLSAqICAgICAgIHRvIGRlZmluZSB0aGVpciBv
d24gYmFja2luZyBzdG9yZS4KLSAqLwogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3Rv
cmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihjdHh0KTsKQEAgLTMyMTUsMTggKzI0OTQsNiBAQCB2b2lkIGV3a192aWV3X3Bh
aW50X2NvbnRleHRfcmVzdG9yZShFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0KQogICAgIGNh
aXJvX3Jlc3RvcmUoY3R4dC0+Y3IpOwogfQogCi0vKioKLSAqIENsaXAgcGFpbnQgY29udGV4dCBk
cmF3aW5ncyB0byBnaXZlbiBhcmVhLgotICoKLSAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQg
dG8gY2xpcC4gTXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqIEBwYXJhbSBhcmVhIGNsaXAgYXJlYSB0
byB1c2UuCi0gKgotICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X3NhdmUoKQotICogQHNl
ZSBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoKQotICoKLSAqIEBub3RlIHRoaXMgaXMg
bm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKLSAq
ICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KLSAqLwogdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oY3R4dCk7CkBAIC0zMjM0LDIyICsyNTAxLDYgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250
ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW4K
ICAgICBjdHh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFy
ZWEtPncsIGFyZWEtPmgpKTsKIH0KIAotLyoqCi0gKiBQYWludCB1c2luZyBjb250ZXh0IHVzaW5n
IGdpdmVuIGFyZWEuCi0gKgotICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBwYWludC4g
TXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqIEBwYXJhbSBhcmVhIHBhaW50IGFyZWEgdG8gdXNlLiBD
b29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3cG9ydCwKLSAqICAgICAgICB0
aHVzICJzY3JvbGxlZCIuCi0gKgotICogQG5vdGUgb25lIG1heSB1c2UgY2Fpcm8gZnVuY3Rpb25z
IG9uIHRoZSBjYWlybyBjb250ZXh0IHRvCi0gKiAgICAgICB0cmFuc2xhdGUsIHNjYWxlIG9yIGFu
eSBtb2RpZmljYXRpb24gdGhhdCBtYXkgZml0IGhpcyBkZXNpcmVzLgotICoKLSAqIEBzZWUgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKCkKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9wYWludF9jb250ZW50cygpCi0gKgotICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdlbmVyYWwg
dXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAotICogICAgICAgdG8gZGVmaW5l
IHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgotICovCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRl
eHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgY29uc3QgRWluYV9SZWN0YW5n
bGUgKmFyZWEpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CkBAIC0z
MjYyLDI2ICsyNTEzLDYgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19W
aWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGNvbnN0IEVpbmFfUmVjdGEKICAgICBjdHh0LT52aWV3
LT5wYWludChjdHh0LT5nYywgcmVjdCk7CiB9CiAKLS8qKgotICogUGFpbnQganVzdCBjb250ZW50
cyB1c2luZyBjb250ZXh0IHVzaW5nIGdpdmVuIGFyZWEuCi0gKgotICogVW5saWtlIGV3a192aWV3
X3BhaW50X2NvbnRleHRfcGFpbnQoKSwgdGhpcyBmdW5jdGlvbiBwYWludCBqdXN0Ci0gKiBiYXJl
IGNvbnRlbnRzIGFuZCBpZ25vcmVzIGFueSBzY3JvbGxpbmcsIHNjcm9sbGJhcnMgYW5kIGV4dHJh
cy4gSXQKLSAqIHdpbGwgd2FsayB0aGUgcmVuZGVyaW5nIHRyZWUgYW5kIHBhaW50IGNvbnRlbnRz
IGluc2lkZSB0aGUgZ2l2ZW4KLSAqIGFyZWEgdG8gdGhlIGNhaXJvIGNvbnRleHQgc3BlY2lmaWVk
IGluIEBhIGN0eHQuCi0gKgotICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBwYWludC4g
TXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqIEBwYXJhbSBhcmVhIHBhaW50IGFyZWEgdG8gdXNlLiBD
b29yZGluYXRlcyBhcmUgYWJzb2x1dGUgdG8gcGFnZS4KLSAqCi0gKiBAbm90ZSBvbmUgbWF5IHVz
ZSBjYWlybyBmdW5jdGlvbnMgb24gdGhlIGNhaXJvIGNvbnRleHQgdG8KLSAqICAgICAgIHRyYW5z
bGF0ZSwgc2NhbGUgb3IgYW55IG1vZGlmaWNhdGlvbiB0aGF0IG1heSBmaXQgaGlzIGRlc2lyZXMu
Ci0gKgotICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoKQotICogQHNlZSBld2tf
dmlld19wYWludF9jb250ZXh0X3BhaW50KCkKLSAqCi0gKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3Ig
Z2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50Ci0gKiAgICAgICB0
byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIHZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihjdHh0KTsKQEAgLTMyOTUsMTUgKzI1MjYsNiBAQCB2b2lkIGV3a192aWV3X3BhaW50X2Nv
bnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgY29uc3Qg
RQogICAgIGN0eHQtPnZpZXctPnBhaW50Q29udGVudHMoY3R4dC0+Z2MsIHJlY3QpOwogfQogCi0v
KioKLSAqIFNjYWxlIHRoZSBjb250ZW50cyBieSB0aGUgZ2l2ZW4gZmFjdG9ycy4KLSAqCi0gKiBU
aGlzIGZ1bmN0aW9uIGFwcGxpZXMgYSBzY2FsaW5nIHRyYW5zZm9ybWF0aW9uIHVzaW5nIENhaXJv
LgotICoKLSAqIEBwYXJhbSBjdHh0ICAgIHBhaW50IGNvbnRleHQgdG8gcGFpbnQuIE11c3QgQGIg
bm90IGJlIEBjIDAuCi0gKiBAcGFyYW0gc2NhbGVfeCBzY2FsZSBmYWN0b3IgZm9yIHRoZSBYIGRp
bWVuc2lvbi4KLSAqIEBwYXJhbSBzY2FsZV95IHNjYWxlIGZhY3RvciBmb3IgdGhlIFkgZGltZW5z
aW9uLgotICovCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2NhbGUoRXdrX1ZpZXdfUGFp
bnRfQ29udGV4dCAqY3R4dCwgZmxvYXQgc2NhbGVfeCwgZmxvYXQgc2NhbGVfeSkKIHsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKQEAgLTMzMTEsMTUgKzI1MzMsNiBAQCB2
b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2NhbGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAq
Y3R4dCwgZmxvYXQgc2NhbGVfeCwgZgogICAgIGN0eHQtPmdjLT5zY2FsZShXZWJDb3JlOjpGbG9h
dFNpemUoc2NhbGVfeCwgc2NhbGVfeSkpOwogfQogCi0vKioKLSAqIFBlcmZvcm1zIGEgdHJhbnNs
YXRpb24gb2YgdGhlIG9yaWdpbiBjb29yZGluYXRlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1v
dmVzIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMgYnkgQHAgeCBhbmQgQHAgeSBwaXhlbHMuCi0gKgot
ICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBwYWludC4gTXVzdCBAYiBub3QgYmUgQGMg
MC4KLSAqIEBwYXJhbSB4ICAgIGFtb3VudCBvZiBwaXhlbHMgdG8gdHJhbnNsYXRlIGluIHRoZSBY
IGRpbWVuc2lvbi4KLSAqIEBwYXJhbSB5ICAgIGFtb3VudCBvZiBwaXhlbHMgdG8gdHJhbnNsYXRl
IGluIHRoZSBZIGRpbWVuc2lvbi4KLSAqLwogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Ry
YW5zbGF0ZShFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0LCBmbG9hdCB4LCBmbG9hdCB5KQog
ewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwpAQCAtMzMyNywzMyArMjU0
MCw2IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFp
bnRfQ29udGV4dCAqY3R4dCwgZmxvYXQgeCwgZmxvCiAgICAgY3R4dC0+Z2MtPnRyYW5zbGF0ZSh4
LCB5KTsKIH0KIAotLyoqCi0gKiBQYWludCB1c2luZyBnaXZlbiBncmFwaGljcyBjb250ZXh0IHRo
ZSBnaXZlbiBhcmVhLgotICoKLSAqIFRoaXMgdXNlcyB2aWV3cG9ydCByZWxhdGl2ZSBhcmVhIGFu
ZCB3aWxsIGFsc28gaGFuZGxlIHNjcm9sbGJhcnMKLSAqIGFuZCBvdGhlciBleHRyYSBlbGVtZW50
cy4gU2VlIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKCkgZm9yIHRoZQotICogYWx0ZXJuYXRpdmUg
ZnVuY3Rpb24uCi0gKgotICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB2
aWV3IHRvIHVzZSBhcyBwYWludCBzb3VyY2UuCi0gKiBAcGFyYW0gY3IgY2Fpcm8gY29udGV4dCB0
byB1c2UgYXMgcGFpbnQgZGVzdGluYXRpb24uIEl0cyBzdGF0ZSB3aWxsCi0gKiAgICAgICAgYmUg
c2F2ZWQgYmVmb3JlIG9wZXJhdGlvbiBhbmQgcmVzdG9yZWQgYWZ0ZXJ3YXJkcy4KLSAqIEBwYXJh
bSBhcmVhIHZpZXdwb3J0IHJlbGF0aXZlIGdlb21ldHJ5IHRvIHBhaW50LgotICoKLSAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSwg
bGlrZQotICogICAgICAgICBpbmNvcnJlY3QgcGFyYW1ldGVycy4KLSAqCi0gKiBAbm90ZSB0aGlz
IGlzIGFuIGVhc3kgdG8gdXNlIHZlcnNpb24sIGJ1dCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZQot
ICogICAgICAgYWx3YXlzIGNyZWF0ZWQsIHRoZW4gZ3JhcGhpY3MgY29udGV4dCBpcyBjbGlwcGVk
LCB0aGVuCi0gKiAgICAgICBwYWludGVkLCByZXN0b3JlZCBhbmQgZGVzdHJveWVkLiBUaGlzIG1p
Z2h0IG5vdCBiZSBvcHRpbXVtLAotICogICAgICAgc28gdXNpbmcgI0V3a19WaWV3X1BhaW50X0Nv
bnRleHQgbWF5IGJlIGEgYmV0dGVyIHNvbHV0aW9ucwotICogICAgICAgZm9yIGxhcmdlIG51bWJl
ciBvZiBvcGVyYXRpb25zLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoKQot
ICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KCkKLSAqCi0gKiBAbm90ZSB0aGlz
IGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50
Ci0gKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIEVpbmFf
Qm9vbCBld2tfdmlld19wYWludChFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYsIGNhaXJvX3Qg
KmNyLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CkBAIC0zMzc5LDMzICsyNTY1LDYgQEAg
RWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHJpdiwgY2Fp
cm9fdCAqY3IsIGNvbnN0IEVpbmFfUmUKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi0vKioK
LSAqIFBhaW50IGp1c3QgY29udGVudHMgdXNpbmcgZ2l2ZW4gZ3JhcGhpY3MgY29udGV4dCB0aGUg
Z2l2ZW4gYXJlYS4KLSAqCi0gKiBUaGlzIHVzZXMgYWJzb2x1dGUgY29vcmRpbmF0ZXMgZm9yIGFy
ZWEgYW5kIHdpbGwganVzdCBoYW5kbGUKLSAqIGNvbnRlbnRzLCBubyBzY3JvbGxiYXJzIG9yIGV4
dHJhcy4gU2VlIGV3a192aWV3X3BhaW50KCkgZm9yIHRoZQotICogYWx0ZXJuYXRpdmUgc29sdXRp
b24uCi0gKgotICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB2aWV3IHRv
IHVzZSBhcyBwYWludCBzb3VyY2UuCi0gKiBAcGFyYW0gY3IgY2Fpcm8gY29udGV4dCB0byB1c2Ug
YXMgcGFpbnQgZGVzdGluYXRpb24uIEl0cyBzdGF0ZSB3aWxsCi0gKiAgICAgICAgYmUgc2F2ZWQg
YmVmb3JlIG9wZXJhdGlvbiBhbmQgcmVzdG9yZWQgYWZ0ZXJ3YXJkcy4KLSAqIEBwYXJhbSBhcmVh
IGFic29sdXRlIGdlb21ldHJ5IHRvIHBhaW50LgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IG9uIHN1Y2Nlc3MgYW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSwgbGlrZQotICogICAgICAg
ICBpbmNvcnJlY3QgcGFyYW1ldGVycy4KLSAqCi0gKiBAbm90ZSB0aGlzIGlzIGFuIGVhc3kgdG8g
dXNlIHZlcnNpb24sIGJ1dCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZQotICogICAgICAgYWx3YXlz
IGNyZWF0ZWQsIHRoZW4gZ3JhcGhpY3MgY29udGV4dCBpcyBjbGlwcGVkLCB0aGVuCi0gKiAgICAg
ICBwYWludGVkLCByZXN0b3JlZCBhbmQgZGVzdHJveWVkLiBUaGlzIG1pZ2h0IG5vdCBiZSBvcHRp
bXVtLAotICogICAgICAgc28gdXNpbmcgI0V3a19WaWV3X1BhaW50X0NvbnRleHQgbWF5IGJlIGEg
YmV0dGVyIHNvbHV0aW9ucwotICogICAgICAgZm9yIGxhcmdlIG51bWJlciBvZiBvcGVyYXRpb25z
LgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfcGFpbnQoKQotICogQHNlZSBld2tfdmlld19wYWludF9j
b250ZXh0X3BhaW50X2NvbnRlbnRzKCkKLSAqCi0gKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2Vu
ZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50Ci0gKiAgICAgICB0byBk
ZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19w
YWludF9jb250ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYsIGNhaXJvX3QgKmNyLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CkBAIC00MTY1LDE5ICszMzI0LDYgQEAgdm9pZCBl
d2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QgKm8sIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVu
dCAqY2xpZW50LCBpbnQgc2UKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJwb3B1cCxjcmVhdGUiLCAmcHJpdi0+cG9wdXAubWVudSk7CiB9CiAKLS8qKgotICogRGVzdHJv
eSBhIHByZXZpb3VzbHkgY3JlYXRlZCBtZW51LgotICoKLSAqIEJlZm9yZSBkZXN0cm95aW5nLCBp
dCBpbmZvcm1zIGNsaWVudCB0aGF0IG1lbnUncyBkYXRhIGlzIHJlYWR5IHRvIGJlCi0gKiBkZXN0
cm95ZWQgYnkgc2VuZGluZyBhICJwb3B1cCx3aWxsZGVsZXRlIiB3aXRoIGEgbGlzdCBvZiBtZW51
IGl0ZW1zLiBUaGVuIGl0Ci0gKiByZW1vdmVzIGFueSByZWZlcmVuY2UgdG8gbWVudSBpbnNpZGUg
d2Via2l0LiBJdCdzIHNhZmUgdG8gY2FsbCB0aGlzCi0gKiBmdW5jdGlvbiBlaXRoZXIgZnJvbSBp
bnNpZGUgd2Via2l0IG9yIGZyb20gYnJvd3Nlci4KLSAqCi0gKiBAcGFyYW0gbyBWaWV3LgotICoK
LSAqIEByZXR1cm5zIEVJTkFfVFJVRSBpbiBjYXNlIG1lbnUgd2FzIHN1Y2Nlc3NmdWxseSBkZXN0
cm95ZWQgb3IgRUlOQV9UUlVFIGluCi0gKiBjYXNlIHRoZXJlIHdhc24ndCBhbnkgbWVudSB0byBi
ZSBkZXN0cm95ZWQuCi0gKi8KIEVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNf
T2JqZWN0ICpvKQogewogICAgIElORigibz0lcCIsIG8pOwpAQCAtNDIwMSwxNyArMzM0Nyw2IEBA
IEVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0ICpvKQogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLS8qKgotICogQ2hhbmdlcyBjdXJyZW50bHkgc2VsZWN0ZWQg
aXRlbS4KLSAqCi0gKiBDaGFuZ2VzIHRoZSBvcHRpb24gc2VsZWN0ZWQgaW4gc2VsZWN0IHdpZGdl
dC4gVGhpcyBpcyBjYWxsZWQgYnkgYnJvd3NlcgotICogd2hlbmV2ZXIgdXNlciBoYXMgY2hvc2Vu
IGEgZGlmZmVyZW50IGl0ZW0uIE1vc3QgbGlrZWx5IGFmdGVyIGNhbGxpbmcgdGhpcywgYQotICog
Y2FsbCB0byBld2tfdmlld19wb3B1cF9kZXN0cm95IG1pZ2h0IGJlIG1hZGUgaW4gb3JkZXIgdG8g
Y2xvc2UgdGhlIHBvcHVwLgotICoKLSAqIEBwYXJhbSBvIFZpZXcuCi0gKiBAaW5kZXggSW5kZXgg
b2Ygc2VsZWN0ZWQgaXRlbS4KLSAqCi0gKi8KIHZvaWQgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0ZWRf
c2V0KEV2YXNfT2JqZWN0ICpvLCBpbnQgaW5kZXgpCiB7CiAgICAgSU5GKCJvPSVwIiwgbyk7CkBA
IC00MjU1LDE4ICszMzkwLDYgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3Nl
dChFdmFzX09iamVjdCAqbywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmcKICAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAK
LS8qKgotICogR2V0cyBhdHRyaWJ1dGVzIG9mIHZpZXdwb3J0IG1ldGEgdGFnLgotICoKLSAqIEBw
YXJhbSBvIHZpZXcuCi0gKiBAcGFyYW0gdyB3aWR0aC4KLSAqIEBwYXJhbSBoIGhlaWdodC4KLSAq
IEBwYXJhbSBpbml0X3NjYWxlIGluaXRpYWwgU2NhbGUgdmFsdWUuCi0gKiBAcGFyYW0gbWF4X3Nj
YWxlIG1heGltdW0gU2NhbGUgdmFsdWUuCi0gKiBAcGFyYW0gbWluX3NjYWxlIG1pbmltdW0gU2Nh
bGUgdmFsdWUuCi0gKiBAcGFyYW0gZGV2aWNlX3BpeGVsX3JhdGlvIHZhbHVlLgotICogQHBhcmFt
IHVzZXJfc2NhbGFibGUgdXNlciBTY2FsYWJsZSB2YWx1ZS4KLSAqLwogdm9pZCBld2tfdmlld192
aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChFdmFzX09iamVjdCAqbywgZmxvYXQgKncsIGZsb2F0ICpo
LCBmbG9hdCAqaW5pdF9zY2FsZSwgZmxvYXQgKm1heF9zY2FsZSwgZmxvYXQgKm1pbl9zY2FsZSwg
ZmxvYXQgKmRldmljZV9waXhlbF9yYXRpbywgRWluYV9Cb29sICp1c2VyX3NjYWxhYmxlKQogewog
ICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gX2V3a192aWV3X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShvKTsKQEAgLTQyODcsMTUgKzM0MTAsNiBAQCB2b2lk
IGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCAq
dywgZmxvYXQgKmgsIGZsb2F0CiAgICAgICAgICp1c2VyX3NjYWxhYmxlID0gc3RhdGljX2Nhc3Q8
Ym9vbD4oYXR0cmlidXRlcy51c2VyU2NhbGFibGUpOwogfQogCi0vKioKLSAqIFNldHMgdGhlIHpv
b20gcmFuZ2UuCi0gKgotICogQHBhcmFtIG8gdmlldy4KLSAqIEBwYXJhbSBtaW5fc2NhbGUgbWlu
aW11bSB2YWx1ZSBvZiB6b29tIHJhbmdlLgotICogQHBhcmFtIG1heF9zY2FsZSBtYXhpbXVtIHZh
bHVlIG9mIHpvb20gcmFuZ2UuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgem9vbSBy
YW5nZSBpcyBjaGFuZ2VkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBmYWlsdXJlLgotICovCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IG1p
bl9zY2FsZSwgZmxvYXQgbWF4X3NjYWxlKQogewogICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7
CkBAIC00MzEyLDEzICszNDI2LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0
KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCBtaW5fc2NhbGUsIGZsb2F0IG1heF9zY2EKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi0vKioKLSAqIEdldHMgdGhlIG1pbmltdW0gdmFsdWUgb2Ygem9v
bSByYW5nZS4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3LgotICoKLSAqIEByZXR1cm4gbWluaW11bSB2
YWx1ZSBvZiB6b29tIHJhbmdlLgotICovCiBmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21pbl9n
ZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKQEAgLTQz
MjcsMTMgKzM0MzQsNiBAQCBmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21pbl9nZXQoRXZhc19P
YmplY3QgKm8pCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxl
OwogfQogCi0vKioKLSAqIEdldHMgdGhlIG1heGltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KLSAq
Ci0gKiBAcGFyYW0gbyB2aWV3LgotICoKLSAqIEByZXR1cm4gbWF4aW11bSB2YWx1ZSBvZiB6b29t
IHJhbmdlLgotICovCiBmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21heF9nZXQoRXZhc19PYmpl
Y3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKQEAgLTQzNDIsMTMgKzM0NDIs
NiBAQCBmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21heF9nZXQoRXZhc19PYmplY3QgKm8pCiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlOwogfQogCi0vKioK
LSAqIFNldHMgaWYgem9vbSBpcyBlbmFibGVkLgotICoKLSAqIEBwYXJhbSBvIHZpZXcuCi0gKiBA
cGFyYW0gdXNlcl9zY2FsYWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gZW5hYmxlIHpv
b20uIEl0IGRlZmF1bHRzCi0gKiB0byBAYyBFSU5BX1RSVUUuCi0gKi8KIHZvaWQgZXdrX3ZpZXdf
dXNlcl9zY2FsYWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxl
KQogewogICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CkBAIC00MzU3LDE0ICszNDUwLDYgQEAg
dm9pZCBld2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29s
IHVzZXJfc2NhbGFibGUpCiAgICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxh
YmxlID0gdXNlcl9zY2FsYWJsZTsKIH0KIAotLyoqCi0gKiBHZXRzIGlmIHpvb20gaXMgZW5hYmxl
ZC4KLSAqCi0gKiBAcGFyYW0gbyB2aWV3LgotICogQHBhcmFtIHVzZXJfc2NhbGFibGUgd2hlcmUg
dG8gcmV0dXJuIHRoZSBjdXJyZW50IHVzZXIgc2NhbGFibGUgdmFsdWUuCi0gKgotICogQHJldHVy
biBAYyBFSU5BX1RSVUUgaWYgem9vbSBpcyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4K
LSAqLwogRWluYV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfZ2V0KEV2YXNfT2JqZWN0ICpv
KQogewogICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CkBAIC00MzczLDE0ICszNDU4LDYgQEAg
RWluYV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfZ2V0KEV2YXNfT2JqZWN0ICpvKQogICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGU7CiB9CiAKLS8q
KgotICogR2V0cyBkZXZpY2UgcGl4ZWwgcmF0aW8gdmFsdWUuCi0gKgotICogQHBhcmFtIG8gdmll
dy4KLSAqIEBwYXJhbSB1c2VyX3NjYWxhYmxlIHdoZXJlIHRvIHJldHVybiB0aGUgY3VycmVudCB1
c2VyIHNjYWxhYmxlIHZhbHVlLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHpvb20g
aXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3QuCi0gKi8KIGZsb2F0IGV3a192aWV3X2Rl
dmljZV9waXhlbF9yYXRpb19nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0Rf
R0VUKG8sIHNkKTsKQEAgLTQ0OTgsMTUgKzM1NzUsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmVl
ZF90b3VjaF9ldmVudHNfZ2V0KEV2YXNfT2JqZWN0ICpvKQogfQogI2VuZGlmCiAKLS8qKgotICog
U2V0cyB2aWV3IG1vZGUuIFRoZSB2aWV3LW1vZGUgbWVkaWEgZmVhdHVyZSBkZXNjcmliZXMgdGhl
IG1vZGUgaW4gd2hpY2ggdGhlCi0gKiBXZWIgYXBwbGljYXRpb24gaXMgYmVpbmcgc2hvd24gYXMg
YSBydW5uaW5nIGFwcGxpY2F0aW9uLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNo
YW5nZSB2aWV3IG1vZGUuCi0gKiBAcGFyYW0gdmlld19tb2RlIHBhZ2UgdmlldyBtb2RlIHRvIGJl
IHNldAotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHZpZXcgbW9kZSBpcyBzZXQgYXMg
dmlld19tb2RlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqLwogRWluYV9Cb29sIGV3a192
aWV3X21vZGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSkKIHsK
ICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKQEAgLTQ1
MzUsMTQgKzM2MDMsNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmplY3Qg
Km8sIEV3a19WaWV3X01vZGUgdmlld19tb2RlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
LS8qKgotICogR2V0cyB2aWV3IG1vZGUuIFRoZSB2aWV3LW1vZGUgbWVkaWEgZmVhdHVyZSBkZXNj
cmliZXMgdGhlIG1vZGUgaW4gd2hpY2ggdGhlCi0gKiBXZWIgYXBwbGljYXRpb24gaXMgYmVpbmcg
c2hvd24gYXMgYSBydW5uaW5nIGFwcGxpY2F0aW9uLgotICoKLSAqIEBwYXJhbSBvIHZpZXcgb2Jq
ZWN0IHRvIHF1ZXJ5IHZpZXcgbW9kZS4KLSAqCi0gKiBAcmV0dXJuIGVudW0gdmFsdWUgb2YgRXdr
X1ZpZXdfTW9kZSB0aGF0IGluZGljYXRlcyBjdXJyZW50IHZpZXcgbW9kZS4KLSAqLwogRXdrX1Zp
ZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChFdmFzX09iamVjdCAqbykKIHsKICAgICBFd2tfVmll
d19Nb2RlIG1vZGUgPSBFV0tfVklFV19NT0RFX1dJTkRPV0VEOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuaAppbmRleCBlYjczNjY3Li40ODdlYWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaApA
QCAtMzMsNiArMzMsNyBAQCBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKioKKyAqIEBmaWxlICBl
d2tfdmlldy5oCiAgKiBAYnJpZWYgV2ViS2l0IG1haW4gc21hcnQgb2JqZWN0LgogICoKICAqIFRo
aXMgb2JqZWN0IGlzIHRoZSBoaWdoIGxldmVsIGFjY2VzcyB0byBXZWJLaXQtRUZMIGJyb3dzZXIK
QEAgLTMxNyw0NiArMzE4LDM1MSBAQCB0eXBlZGVmIGVudW0gX0V3a19WaWV3X01vZGUgRXdrX1Zp
ZXdfTW9kZTsKICAqIGdyb3VwIG1heGltdW0gdW51c2VkIG1lbW9yeSByZXNpZGVudCBpbiB0aGUg
c3lzdGVtLgogICovCiB0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIEV3a19U
aWxlX1VudXNlZF9DYWNoZTsKKworLyoqCisgKiBDaGFuZ2UgY2FjaGUgY2FwYWNpdHksIGluIGJ5
dGVzLgorICoKKyAqIFRoaXMgd2lsbCBub3QgZmx1c2ggY2FjaGUsIHVzZSBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZmx1c2goKSBvcgorICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2go
KSB0byBkbyBzby4KKyAqLwogRUFQSSB2b2lkICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9z
ZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBtYXgpOworCisvKioKKyAqIFJl
dHJpZXZlIG1heGltdW0gY2FjaGUgY2FwYWNpdHksIGluIGJ5dGVzLgorICovCiBFQVBJIHNpemVf
dCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1Yyk7CisKKy8qKgorICogUmV0cmlldmUgdGhlIHVzZWQgY2FjaGUgY2FwYWNpdHksIGlu
IGJ5dGVzLgorICovCiBFQVBJIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQo
Y29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworCisvKioKKyAqIEZsdXNoIGdpdmVu
IGFtb3VudCBvZiBieXRlcyBmcm9tIGNhY2hlLgorICoKKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBm
dW5jdGlvbiwgbmVhciBAYSBieXRlcyBhcmUgZnJlZWQgZnJvbSBjYWNoZS4gSXQKKyAqIG1heSBi
ZSBsZXNzIGlmIGNhY2hlIGRpZCBub3QgY29udGFpbiB0aGF0IGFtb3VudCBvZiBieXRlcyAoaWU6
IGFuCisgKiBlbXB0eSBjYWNoZSBoYXMgbm90aGluZyB0byBmcmVlISkgb3IgbW9yZSBpZiB0aGUg
Y2FjaGUganVzdAorICogY29udGFpbmVkIG9iamVjdHMgdGhhdCB3ZXJlIGxhcmdlciB0aGFuIHRo
ZSByZXF1ZXN0ZWQgYW1vdW50ICh0aGlzCisgKiBpcyB1c3VhbGx5IHRoZSBjYXNlKS4KKyAqCisg
KiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KKyAqIEBwYXJhbSBieXRlcyBhbW91
bnQgdG8gZnJlZS4KKyAqCisgKiBAcmV0dXJuIGFtb3VudCByZWFsbHkgZnJlZWQuCisgKgorICog
QHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoKQorICovCiBFQVBJIHNpemVfdCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNp
emVfdCBieXRlcyk7CisKKy8qKgorICogRmx1c2ggZW5vdWdoIGJ5dGVzIHRvIG1ha2UgY2FjaGUg
dXNhZ2UgbG93ZXIgdGhhbiBtYXhpbXVtLgorICoKKyAqIEp1c3QgbGlrZSBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZmx1c2goKSwgYnV0IHRoaXMgd2lsbCBtYWtlIHRoZSBjYWNoZQorICogZnJlZSBl
bm91Z2ggdGlsZXMgdG8gcmVzcGVjdCBtYXhpbXVtIGNhY2hlIHNpemUgYXMgZGVmaW5lZCB3aXRo
CisgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldCgpLgorICoKKyAqIFRoaXMgZnVuY3Rp
b24gaXMgdXN1YWxseSBjYWxsZWQgd2hlbiBzeXN0ZW0gYmVjb21lcyBpZGxlLiBUaGlzIHdheQor
ICogd2Uga2VlcCBtZW1vcnkgbG93IGJ1dCBkbyBub3QgaW1wYWN0IHBlcmZvcm1hbmNlIHdoZW4K
KyAqIGNyZWF0aW5nL2RlbGV0aW5nIHRpbGVzLgorICovCiBFQVBJIHZvaWQgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CiAKKy8q
KgorICogU2V0cyB0aGUgc21hcnQgY2xhc3MgYXBpIHdpdGhvdXQgYW55IGJhY2tpbmcgc3RvcmUs
IGVuYWJsaW5nIHZpZXcKKyAqIHRvIGJlIGluaGVyaXRlZC4KKyAqCisgKiBAcGFyYW0gYXBpIGNs
YXNzIGRlZmluaXRpb24gdG8gYmUgc2V0LCBhbGwgbWVtYmVycyB3aXRoIHRoZQorICogICAgICAg
IGV4Y2VwdGlvbiBvZiBFdmFzX1NtYXJ0X0NsYXNzLT5kYXRhIG1heSBiZSBvdmVycmlkZGVuLiBN
dXN0CisgKiAgICAgICAgQGIgbm90IGJlIEBjIDAuCisgKgorICogQG5vdGUgRXZhc19TbWFydF9D
bGFzcy0+ZGF0YSBpcyB1c2VkIHRvIGltcGxlbWVudCB0eXBlIGNoZWNraW5nIGFuZAorICogICAg
ICAgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGNoYW5nZWQvb3ZlcnJpZGRlbi4gSWYgeW91IG5lZWQg
ZXh0cmEKKyAqICAgICAgIGRhdGEgZm9yIHlvdXIgc21hcnQgY2xhc3MgdG8gd29yaywganVzdCBl
eHRlbmQKKyAqICAgICAgIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGluc3RlYWQuCisgKgorICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlIChw
cm9iYWJseQorICogICAgICAgICB2ZXJzaW9uIG1pc21hdGNoKS4KKyAqCisgKiBAc2VlIGV3a192
aWV3X3NpbmdsZV9zbWFydF9zZXQoKQorICogQHNlZSBld2tfdmlld190aWxlZF9zbWFydF9zZXQo
KQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmll
d19TbWFydF9DbGFzcyAqYXBpKTsKKworLyoqCisgKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkg
dXNpbmcgc2luZ2xlIGJhY2tpbmcgc3RvcmUsIGVuYWJsaW5nIHZpZXcKKyAqIHRvIGJlIGluaGVy
aXRlZC4KKyAqCisgKiBAcGFyYW0gYXBpIGNsYXNzIGRlZmluaXRpb24gdG8gYmUgc2V0LCBhbGwg
bWVtYmVycyB3aXRoIHRoZQorICogICAgICAgIGV4Y2VwdGlvbiBvZiBFdmFzX1NtYXJ0X0NsYXNz
LT5kYXRhIG1heSBiZSBvdmVycmlkZGVuLiBNdXN0CisgKiAgICAgICAgQGIgbm90IGJlIEBjIE5V
TEwuCisgKgorICogQG5vdGUgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBpcyB1c2VkIHRvIGltcGxl
bWVudCB0eXBlIGNoZWNraW5nIGFuZAorICogICAgICAgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGNo
YW5nZWQvb3ZlcnJpZGRlbi4gSWYgeW91IG5lZWQgZXh0cmEKKyAqICAgICAgIGRhdGEgZm9yIHlv
dXIgc21hcnQgY2xhc3MgdG8gd29yaywganVzdCBleHRlbmQKKyAqICAgICAgIEV3a19WaWV3X1Nt
YXJ0X0NsYXNzIGluc3RlYWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vz
cywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlIChwcm9iYWJseQorICogICAgICAgICB2ZXJzaW9u
IG1pc21hdGNoKS4KKyAqCisgKiBAc2VlIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCkKKyAqLwog
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldChFd2tfVmlld19TbWFy
dF9DbGFzcyAqYXBpKTsKKworLyoqCisgKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgdXNpbmcg
dGlsZWQgYmFja2luZyBzdG9yZSwgZW5hYmxpbmcgdmlldworICogdG8gYmUgaW5oZXJpdGVkLgor
ICoKKyAqIEBwYXJhbSBhcGkgY2xhc3MgZGVmaW5pdGlvbiB0byBiZSBzZXQsIGFsbCBtZW1iZXJz
IHdpdGggdGhlCisgKiAgICAgICAgZXhjZXB0aW9uIG9mIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEg
bWF5IGJlIG92ZXJyaWRkZW4uIE11c3QKKyAqICAgICAgICBAYiBub3QgYmUgQGMgTlVMTC4KKyAq
CisgKiBAbm90ZSBFdmFzX1NtYXJ0X0NsYXNzLT5kYXRhIGlzIHVzZWQgdG8gaW1wbGVtZW50IHR5
cGUgY2hlY2tpbmcgYW5kCisgKiAgICAgICBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZC9v
dmVycmlkZGVuLiBJZiB5b3UgbmVlZCBleHRyYQorICogICAgICAgZGF0YSBmb3IgeW91ciBzbWFy
dCBjbGFzcyB0byB3b3JrLCBqdXN0IGV4dGVuZAorICogICAgICAgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MgaW5zdGVhZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBF
SU5BX0ZBTFNFIG9uIGZhaWx1cmUgKHByb2JhYmx5CisgKiAgICAgICAgIHZlcnNpb24gbWlzbWF0
Y2gpLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoKQorICovCiBFQVBJIEVp
bmFfQm9vbCAgICBld2tfdmlld190aWxlZF9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
KmFwaSk7CiAKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBFRkwgV2ViS2l0IFZpZXcgb2JqZWN0Lgor
ICoKKyAqIFZpZXcgb2JqZWN0cyBhcmUgdGhlIHJlY29tbWVuZGVkIHdheSB0byBkZWFsIHdpdGgg
RUZMIFdlYktpdCBhcyBpdAorICogYWJzdHJhY3RzIHRoZSBjb21wbGV4IHBpZWNlcyBvZiB0aGUg
cHJvY2Vzcy4KKyAqCisgKiBFYWNoIHZpZXcgaXMgY29tcG9zZWQgYnkgYSBzZXQgb2YgZnJhbWVz
LiBUaGUgc2V0IGhhcyBhdCBsZWFzdCBvbmUKKyAqIGZyYW1lLCBjYWxsZWQgJ21haW5fZnJhbWUn
LiBTZWUgZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoKSBhbmQKKyAqIGV3a192aWV3X2ZyYW1lX2Zv
Y3VzZWRfZ2V0KCkuCisgKgorICogQHBhcmFtIGUgY2FudmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUg
dmlldyBvYmplY3QuCisgKgorICogQHJldHVybiB2aWV3IG9iamVjdCBvciBAYyBOVUxMIGlmIGVy
cm9ycy4KKyAqCisgKiBAc2VlIGV3a192aWV3X3VyaV9zZXQoKQorICovCiBFQVBJIEV2YXNfT2Jq
ZWN0ICpld2tfdmlld19zaW5nbGVfYWRkKEV2YXMgKmUpOworCisvKioKKyAqIENyZWF0ZXMgYSBu
ZXcgRUZMIFdlYktpdCBWaWV3IG9iamVjdCB1c2luZyB0aWxlZCBiYWNraW5nIHN0b3JlLgorICoK
KyAqIFZpZXcgb2JqZWN0cyBhcmUgdGhlIHJlY29tbWVuZGVkIHdheSB0byBkZWFsIHdpdGggRUZM
IFdlYktpdCBhcyBpdAorICogYWJzdHJhY3RzIHRoZSBjb21wbGV4IHBpZWNlcyBvZiB0aGUgcHJv
Y2Vzcy4KKyAqCisgKiBUaGlzIG9iamVjdCBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBy
ZXR1cm5lZCBieSB0aGUgZXdrX3ZpZXdfYWRkKCkKKyAqIGZ1bmN0aW9uLCBidXQgaXQgdXNlcyB0
aGUgdGlsZWQgYmFja2luZyBzdG9yZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisgKiBiYWNraW5n
IHN0b3JlLgorICoKKyAqIEBwYXJhbSBlIGNhbnZhcyB3aGVyZSB0byBjcmVhdGUgdGhlIHZpZXcg
b2JqZWN0LgorICoKKyAqIEByZXR1cm4gdmlldyBvYmplY3Qgb3IgQGMgTlVMTCBpZiBlcnJvcnMu
CisgKgorICogQHNlZSBld2tfdmlld191cmlfc2V0KCkKKyAqLwogRUFQSSBFdmFzX09iamVjdCAq
ZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMgKmUpOwogCisvKioKKyAqIEdldCB0aGUgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzIHVzZWQgYnkgdGhpcyB2aWV3LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2Jq
ZWN0IHRvIGdldCBjYWNoZS4KKyAqIEByZXR1cm4gaW5zdGFuY2Ugb2YgImNhY2hlIG9mIHVudXNl
ZCB0aWxlcyIgb3IgQGMgTlVMTCBvbiBlcnJvcnMuCisgKi8KIEVBUEkgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
ICpvKTsKKworLyoqCisgKiBTZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcyB1c2VkIGJ5IHRo
aXMgdmlldy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY2FjaGUuCisgKiBA
cGFyYW0gY2FjaGUgaW5zdGFuY2Ugb2YgImNhY2hlIG9mIHVudXNlZCB0aWxlcyIuIFRoaXMgY2Fu
IGJlIHVzZWQKKyAqICAgICAgICB0byBzaGFyZSBhIHNpbmdsZSBjYWNoZSBhbW9uZ3N0IGRpZmZl
cmVudCB2aWV3cy4gVGhlIHRpbGVzCisgKiAgICAgICAgZnJvbSBvbmUgdmlldyB3aWxsIG5vdCBi
ZSB1c2VkIGJ5IHRoZSBvdGhlciEgVGhpcyBpcyBqdXN0IHRvCisgKiAgICAgICAgbGltaXQgdGhl
IGdyb3VwIHdpdGggYW1vdW50IG9mIHVudXNlZCBtZW1vcnkuCisgKiAgICAgICAgSWYgQGMgTlVM
TCBpcyBwcm92aWRlZCwgdGhlbiBhIG5ldyBjYWNoZSBpcyBjcmVhdGVkLgorICovCiBFQVBJIHZv
aWQgICAgICAgICAgICAgICAgICAgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFz
X09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpjYWNoZSk7CiAKIC8vIEZJWE1FOiB0
aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZW1vdmVkIGxhdGVyLCB3aGVuIHdlIGZpbmQgdGhlIGJl
c3QgZmxhZyB0byB1c2UuCisvKioKKyAqIFNldCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBu
YW1lIG9mIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlLgorICogQHBhcmFtIG8gdGhlIHRpbGVkIGJh
Y2tpbmcgc3RvcmUgb2JqZWN0LgorICogQHBhcmFtIGZsYWcgdmFsdWUgb2YgdGhlIHRpbGVkIGJh
Y2tpbmcgc3RvcmUgZmxhZyB0byBzZXQuCisgKi8KIEVBUEkgdm9pZCAgICAgICAgICAgICAgICAg
ICBld2tfdmlld190aWxlZF9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCBmbGFnKTsKIAorLyoqCisgKiBTZXQgYSBmaXhlZCBsYXlvdXQgc2l6ZSB0byBi
ZSB1c2VkLCBkaXNzb2NpYXRpbmcgaXQgZnJvbSB2aWV3cG9ydCBzaXplLgorICoKKyAqIFNldHRp
bmcgYSB3aWR0aCBkaWZmZXJlbnQgdGhhbiB6ZXJvIGVuYWJsZXMgZml4ZWQgbGF5b3V0IG9uIHRo
YXQKKyAqIHNpemUuIEl0J3MgYXV0b21hdGljYWxseSBzY2FsZWQgYmFzZWQgb24gem9vbSwgYnV0
IHdpbGwgbm90IGNoYW5nZQorICogaWYgdmlld3BvcnQgY2hhbmdlcy4KKyAqCisgKiBTZXR0aW5n
IGJvdGggQGEgdyBhbmQgQGEgaCB0byB6ZXJvIHdpbGwgZGlzYWJsZSBmaXhlZCBsYXlvdXQuCisg
KgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlIGZpeGVkIGxheW91dC4KKyAqIEBw
YXJhbSB3IGZpeGVkIHdpZHRoIHRvIHVzZS4gVGhpcyBzaXplIHdpbGwgYmUgYXV0b21hdGljYWxs
eSBzY2FsZWQKKyAqICAgICAgICBiYXNlZCBvbiB6b29tIGxldmVsLgorICogQHBhcmFtIGggZml4
ZWQgaGVpZ2h0IHRvIHVzZS4gVGhpcyBzaXplIHdpbGwgYmUgYXV0b21hdGljYWxseSBzY2FsZWQK
KyAqICAgICAgICBiYXNlZCBvbiB6b29tIGxldmVsLgorICovCiBFQVBJIHZvaWQgICAgICAgICBl
d2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKTsKKworLyoqCisgKiBHZXQgZml4ZWQgbGF5b3V0IHNpemUgaW4gdXNl
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5IGZpeGVkIGxheW91dCBzaXpl
LgorICogQHBhcmFtIHcgd2hlcmUgdG8gcmV0dXJuIHdpZHRoLiBSZXR1cm5zIDAgb24gZXJyb3Ig
b3IgaWYgbm8gZml4ZWQKKyAqICAgICAgICBsYXlvdXQgaW4gdXNlLgorICogQHBhcmFtIGggd2hl
cmUgdG8gcmV0dXJuIGhlaWdodC4gUmV0dXJucyAwIG9uIGVycm9yIG9yIGlmIG5vIGZpeGVkCisg
KiAgICAgICAgbGF5b3V0IGluIHVzZS4KKyAqLwogRUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdf
Zml4ZWRfbGF5b3V0X3NpemVfZ2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkICp3LCBFdmFz
X0Nvb3JkICpoKTsKIAorLyoqCisgKiBTZXQgdGhlIHRoZW1lIHBhdGggdG8gYmUgdXNlZCBieSB0
aGlzIHZpZXcuCisgKgorICogVGhpcyBhbHNvIHNldHMgdGhlIHRoZW1lIG9uIHRoZSBtYWluIGZy
YW1lLiBBcyBmcmFtZXMgaW5oZXJpdCB0aGVtZQorICogZnJvbSB0aGVpciBwYXJlbnQsIHRoaXMg
d2lsbCBoYXZlIGFsbCBmcmFtZXMgd2l0aCB1bnNldCB0aGVtZSB0bworICogdXNlIHRoaXMgb25l
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGNoYW5nZSB0aGVtZS4KKyAqIEBwYXJh
bSBwYXRoIHRoZW1lIHBhdGgsIG1heSBiZSBAYyAwIHRvIHJlc2V0IHRvIGRlZmF1bHQuCisgKi8K
IEVBUEkgdm9pZCAgICAgICAgIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCAqbywgY29u
c3QgY2hhciAqcGF0aCk7CisKKy8qKgorICogR2V0cyB0aGUgdGhlbWUgc2V0IG9uIHRoaXMgZnJh
bWUuCisgKgorICogVGhpcyByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgYnkgZXdrX3ZpZXdfdGhlbWVf
c2V0KCkuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IHRoZW1lIHBhdGguCisg
KgorICogQHJldHVybiB0aGVtZSBwYXRoLCBtYXkgYmUgQGMgMCBpZiBub3Qgc2V0LgorICovCiBF
QVBJIGNvbnN0IGNoYXIgICpld2tfdmlld190aGVtZV9nZXQoRXZhc19PYmplY3QgKm8pOwogCisv
KioKKyAqIEdldCB0aGUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgbWFpbiBmcmFtZS4KKyAq
CisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgbWFpbiBmcmFtZS4KKyAqCisgKiBAcmV0
dXJuIGV3a19mcmFtZSBvYmplY3Qgb3IgQGMgMCBpZiBub25lIHlldC4KKyAqLwogRUFQSSBFdmFz
X09iamVjdCAqZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwor
CisvKioKKyAqIEdldCB0aGUgY3VycmVudGx5IGZvY3VzZWQgZnJhbWUgb2JqZWN0LgorICoKKyAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBmb2N1c2VkIGZyYW1lLgorICoKKyAqIEByZXR1
cm4gZXdrX2ZyYW1lIG9iamVjdCBvciBAYyAwIGlmIG5vbmUgeWV0LgorICovCiBFQVBJIEV2YXNf
T2JqZWN0ICpld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7
CiAKKy8qKgorICogQXNrIG1haW4gZnJhbWUgdG8gbG9hZCB0aGUgZ2l2ZW4gVVJJLgorICoKKyAq
IEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGxvYWQgdXJpLgorICogQHBhcmFtIHVyaSB1bmlmb3Jt
IHJlc291cmNlIGlkZW50aWZpZXIgdG8gbG9hZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBvbiBzdWNjZXNzZnVsIHJlcXVlc3QsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZS4KKyAqICAg
ICAgICAgTm90ZSB0aGF0IGl0IG1lYW5zIHRoZSByZXF1ZXN0IHdhcyBkb25lLCBub3QgdGhhdCBp
dCB3YXMKKyAqICAgICAgICAgc2F0aXNmaWVkLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tf
dmlld191cmlfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp1cmkpOworCisvKioKKyAq
IEdldCB0aGUgY3VycmVudCB1cmkgbG9hZGVkIGJ5IG1haW4gZnJhbWUuCisgKgorICogQHBhcmFt
IG8gdmlldyBvYmplY3QgdG8gZ2V0IGN1cnJlbnQgdXJpLgorICoKKyAqIEByZXR1cm4gY3VycmVu
dCB1cmkgcmVmZXJlbmNlIG9yIEBjIDAuIEl0J3MgaW50ZXJuYWwsIGRvbid0IGNoYW5nZS4KKyAq
LwogRUFQSSBjb25zdCBjaGFyICAqZXdrX3ZpZXdfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCAq
byk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IHRpdGxlIG9mIG1haW4gZnJhbWUuCisgKgor
ICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGN1cnJlbnQgdGl0bGUuCisgKgorICogQHJl
dHVybiBjdXJyZW50IHRpdGxlIHJlZmVyZW5jZSBvciBAYyAwLiBJdCdzIGludGVybmFsLCBkb24n
dCBjaGFuZ2UuCisgKi8KIEVBUEkgY29uc3QgY2hhciAgKmV3a192aWV3X3RpdGxlX2dldChjb25z
dCBFdmFzX09iamVjdCAqbyk7CiAKKy8qKgorICogR2V0cyBpZiBtYWluIGZyYW1lIGlzIGVkaXRh
YmxlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBlZGl0YWJsZSBzdGF0ZS4K
KyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBlZGl0YWJsZSwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UuCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2VkaXRhYmxlX2dldChj
b25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogU2V0cyBpZiBtYWluIGZyYW1lIGlzIGVk
aXRhYmxlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCBlZGl0YWJsZSBzdGF0
ZS4KKyAqIEBwYXJhbSBlZGl0YWJsZSBuZXcgc3RhdGUuCisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KIEVBUEkgRWlu
YV9Cb29sICAgIGV3a192aWV3X2VkaXRhYmxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29s
IGVkaXRhYmxlKTsKIAorLyoqCisgKiBTZXQgYmFja2dyb3VuZCBjb2xvciBhbmQgdHJhbnNwYXJl
bmN5CisgKgorICogSnVzdCBhcyBpbiBFdmFzLCBjb2xvcnMgYXJlIHByZS1tdWx0aXBsaWVkLCBz
byA1MCUgcmVkIGlzCisgKiAoMTI4LCAwLCAwLCAxMjgpIGFuZCBub3QgKDI1NSwgMCwgMCwgMTI4
KSEKKyAqCisgKiBAd2FybmluZyBXYXRjaCBvdXQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggdHJh
bnNwYXJlbmN5ISBPYmplY3QKKyAqICAgICAgICAgIHdpbGwgYmUgaGFuZGxlZCBhcyB0cmFuc3Bh
cmVudCBpbWFnZSBieSBldmFzIGV2ZW4gaWYgdGhlCisgKiAgICAgICAgICB3ZWJwYWdlIHNwZWNp
ZmllcyBhIGJhY2tncm91bmQgY29sb3IuIFRoYXQgbWVhbiB5b3UnbGwgcGF5CisgKiAgICAgICAg
ICBhIHByaWNlIGV2ZW4gaWYgaXQncyBub3QgcmVhbGx5IHRyYW5zcGFyZW50LCB0aHVzCisgKiAg
ICAgICAgICBzY3JvbGxpbmcvcGFubmluZyBhbmQgem9vbWluZyB3aWxsIGJlIGxpa2VseSBzbG93
ZXIgdGhhbgorICogICAgICAgICAgaWYgdHJhbnNwYXJlbmN5IGlzIG9mZi4KKyAqCisgKiBAcGFy
YW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2UuCisgKiBAcGFyYW0gciByZWQgY29tcG9uZW50Lgor
ICogQHBhcmFtIGcgZ3JlZW4gY29tcG9uZW50LgorICogQHBhcmFtIGIgYmx1ZSBjb21wb25lbnQu
CisgKiBAcGFyYW0gYSB0cmFuc3BhcmVuY3kuCisgKi8KIEVBUEkgdm9pZCAgICAgICAgIGV3a192
aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCAqbywgaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpOworCisvKioKKyAqIFF1ZXJ5IGlmIHZpZXcgb2JqZWN0IGJhY2tncm91bmQgY29sb3IuCisg
KgorICogSnVzdCBhcyBpbiBFdmFzLCBjb2xvcnMgYXJlIHByZS1tdWx0aXBsaWVkLCBzbyA1MCUg
cmVkIGlzCisgKiAoMTI4LCAwLCAwLCAxMjgpIGFuZCBub3QgKDI1NSwgMCwgMCwgMTI4KSEKKyAq
CisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeS4KKyAqIEBwYXJhbSByIHdoZXJlIHRv
IHJldHVybiByZWQgY29sb3IgY29tcG9uZW50LgorICogQHBhcmFtIGcgd2hlcmUgdG8gcmV0dXJu
IGdyZWVuIGNvbG9yIGNvbXBvbmVudC4KKyAqIEBwYXJhbSBiIHdoZXJlIHRvIHJldHVybiBibHVl
IGNvbG9yIGNvbXBvbmVudC4KKyAqIEBwYXJhbSBhIHdoZXJlIHRvIHJldHVybiBhbHBoYSB2YWx1
ZS4KKyAqLwogRUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvLCBpbnQgKnIsIGludCAqZywgaW50ICpiLCBpbnQgKmEpOwogCisvKioKKyAq
IEdldCB0aGUgY29weSBvZiB0aGUgc2VsZWN0aW9uIHRleHQuCisgKgorICogQHBhcmFtIG8gdmll
dyBvYmplY3QgdG8gZ2V0IHNlbGVjdGlvbiB0ZXh0LgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIHN0cmluZyBvciBAYyAwIGlmIG5vdGhpbmcgaXMgc2VsZWN0ZWQgb3IgZmFpbHVyZS4K
KyAqLwogRUFQSSBjaGFyICAgICAgICAqZXdrX3ZpZXdfc2VsZWN0aW9uX2dldChjb25zdCBFdmFz
X09iamVjdCAqbyk7CiAKKy8qKgorICogRm9yd2FyZHMgYSByZXF1ZXN0IG9mIG5ldyBDb250ZXh0
IE1lbnUgdG8gV2ViQ29yZS4KKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV2IEV2
ZW50IGRhdGEuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgb3BlcmF0aW9uIHdhcyBl
eGVjdXRlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KIEVBUEkgRWluYV9Cb29sICAg
IGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNfT2JqZWN0ICpvLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX0Rvd24gKmV2KTsKIAogZW51bSBfRXdrX0VkaXRvcl9Db21tYW5k
IHsKQEAgLTM3MSw1OCArNjc3LDQ4NiBAQCBlbnVtIF9Fd2tfRWRpdG9yX0NvbW1hbmQgewogfTsK
IHR5cGVkZWYgZW51bSBfRXdrX0VkaXRvcl9Db21tYW5kIEV3a19FZGl0b3JfQ29tbWFuZDsKIAor
LyoqCisgKiBFeGVjdXRlcyBlZGl0b3IgY29tbWFuZC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBleGVjdXRlIGNvbW1hbmQuCisgKiBAcGFyYW0gY29tbWFuZCBlZGl0b3IgY29tbWFu
ZCB0byBiZSBleGVjdXRlZC4KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBiZSBwYXNzZWQgaW50
byBjb21tYW5kLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIG9wZXJhdGlvbiB3YXMg
ZXhlY3V0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBF
d2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciAqdmFsdWUpOwogCisvKioKKyAq
IENoYW5nZXMgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uCisgKgorICogQ2hhbmdlcyB0aGUgb3B0
aW9uIHNlbGVjdGVkIGluIHNlbGVjdCB3aWRnZXQuIFRoaXMgaXMgY2FsbGVkIGJ5IGJyb3dzZXIK
KyAqIHdoZW5ldmVyIHVzZXIgaGFzIGNob3NlbiBhIGRpZmZlcmVudCBpdGVtLiBNb3N0IGxpa2Vs
eSBhZnRlciBjYWxsaW5nIHRoaXMsIGEKKyAqIGNhbGwgdG8gZXdrX3ZpZXdfcG9wdXBfZGVzdHJv
eSBtaWdodCBiZSBtYWRlIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBwb3B1cC4KKyAqCisgKiBAcGFy
YW0gbyBWaWV3LgorICogQGluZGV4IEluZGV4IG9mIHNlbGVjdGVkIGl0ZW0uCisgKgorICovCiBF
QVBJIHZvaWQgICAgICAgICBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3Qg
Km8sIGludCBpbmRleCk7CisKKy8qKgorICogRGVzdHJveSBhIHByZXZpb3VzbHkgY3JlYXRlZCBt
ZW51LgorICoKKyAqIEJlZm9yZSBkZXN0cm95aW5nLCBpdCBpbmZvcm1zIGNsaWVudCB0aGF0IG1l
bnUncyBkYXRhIGlzIHJlYWR5IHRvIGJlCisgKiBkZXN0cm95ZWQgYnkgc2VuZGluZyBhICJwb3B1
cCx3aWxsZGVsZXRlIiB3aXRoIGEgbGlzdCBvZiBtZW51IGl0ZW1zLiBUaGVuIGl0CisgKiByZW1v
dmVzIGFueSByZWZlcmVuY2UgdG8gbWVudSBpbnNpZGUgd2Via2l0LiBJdCdzIHNhZmUgdG8gY2Fs
bCB0aGlzCisgKiBmdW5jdGlvbiBlaXRoZXIgZnJvbSBpbnNpZGUgd2Via2l0IG9yIGZyb20gYnJv
d3Nlci4KKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICoKKyAqIEByZXR1cm5zIEVJTkFfVFJVRSBp
biBjYXNlIG1lbnUgd2FzIHN1Y2Nlc3NmdWxseSBkZXN0cm95ZWQgb3IgRUlOQV9UUlVFIGluCisg
KiBjYXNlIHRoZXJlIHdhc24ndCBhbnkgbWVudSB0byBiZSBkZXN0cm95ZWQuCisgKi8KIEVBUEkg
RWluYV9Cb29sICAgIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QgKm8pOwogCisv
KioKKyAqIFNlYXJjaCB0aGUgZ2l2ZW4gdGV4dCBzdHJpbmcgaW4gZG9jdW1lbnQuCisgKgorICog
QHBhcmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCisgKiBAcGFyYW0gc3Ry
aW5nIHJlZmVyZW5jZSBzdHJpbmcgdG8gc2VhcmNoLgorICogQHBhcmFtIGNhc2Vfc2Vuc2l0aXZl
IGlmIHNlYXJjaCBzaG91bGQgYmUgY2FzZSBzZW5zaXRpdmUgb3Igbm90LgorICogQHBhcmFtIGZv
cndhcmQgaWYgc2VhcmNoIGlzIGZyb20gY3Vyc29yIGFuZCBvbiBvciBiYWNrd2FyZHMuCisgKiBA
cGFyYW0gd3JhcCBpZiBzZWFyY2ggc2hvdWxkIHdyYXAgYXQgZW5kLgorICoKKyAqIEByZXR1cm4g
QGMgRUlOQV9UUlVFIGlmIGZvdW5kLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBmYWlsdXJlLgor
ICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09i
amVjdCAqbywgY29uc3QgY2hhciAqc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVp
bmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCk7CiAKKy8qKgorICogR2V0IGlmIHNob3Vs
ZCBoaWdobGlnaHQgbWF0Y2hlcyBtYXJrZWQgd2l0aCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFy
aygpLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5IGlmIG1hdGNoZXMgYXJl
IGhpZ2hsaWdodGVkIG9yIG5vdC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB0aGV5
IGFyZSBoaWdobGlnaHRlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KIEVBUEkgdW5z
aWduZWQgaW50IGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0ICpvLCBjb25z
dCBjaGFyICpzdHJpbmcsIEVpbmFfQm9vbCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hs
aWdodCwgdW5zaWduZWQgaW50IGxpbWl0KTsKKworLyoqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0
IG9mIGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKCkKKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB3aGVyZSB0byBzZWFyY2ggdGV4dC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBv
biBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIGZvciBmYWlsdXJlLgorICovCiBFQVBJIEVpbmFfQm9v
bCAgICBld2tfdmlld190ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCAqbyk7CisK
Ky8qKgorICogU2V0IGlmIHNob3VsZCBoaWdobGlnaHQgbWF0Y2hlcyBtYXJrZWQgd2l0aCBld2tf
dmlld190ZXh0X21hdGNoZXNfbWFyaygpLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdo
ZXJlIHRvIHNldCBpZiBtYXRjaGVzIGFyZSBoaWdobGlnaHRlZCBvciBub3QuCisgKiBAcGFyYW0g
aGlnaGxpZ2h0IGlmIEBjIEVJTkFfVFJVRSwgbWF0Y2hlcyB3aWxsIGJlIGhpZ2hsaWdodGVkLgor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0UgZm9y
IGZhaWx1cmUuCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3RleHRfbWF0Y2hlc19o
aWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KTsKKwogRUFQ
SSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3Qg
RXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIEdldCBjdXJyZW50IGxvYWQgcHJvZ3Jlc3MgZXN0
aW1hdGUgZnJvbSAwLjAgdG8gMS4wLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdl
dCBjdXJyZW50IHByb2dyZXNzLgorICoKKyAqIEByZXR1cm4gcHJvZ3JlcyB2YWx1ZSBmcm9tIDAu
MCB0byAxLjAgb3IgLTEuMCBvbiBlcnJvci4KKyAqLwogRUFQSSBkb3VibGUgICAgICAgZXdrX3Zp
ZXdfbG9hZF9wcm9ncmVzc19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIEFz
ayBtYWluIGZyYW1lIHRvIHN0b3AgbG9hZGluZy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBzdG9wIGxvYWRpbmcuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vz
cywgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tfZnJhbWVfc3RvcCgp
CisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3N0b3AoRXZhc19PYmplY3QgKm8pOwor
CisvKioKKyAqIEFzayBtYWluIGZyYW1lIHRvIHJlbG9hZCBjdXJyZW50IGRvY3VtZW50LgorICoK
KyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHJlbG9hZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2Vl
IGV3a19mcmFtZV9yZWxvYWQoKQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19yZWxv
YWQoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIEFzayBtYWluIGZyYW1lIHRvIGZ1bGx5IHJl
bG9hZCBjdXJyZW50IGRvY3VtZW50LCB1c2luZyBubyBjYWNoZXMuCisgKgorICogQHBhcmFtIG8g
dmlldyBvYmplY3QgdG8gcmVsb2FkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX2ZyYW1lX3Jl
bG9hZF9mdWxsKCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfcmVsb2FkX2Z1bGwo
RXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIEFzayBtYWluIGZyYW1lIHRvIG5hdmlnYXRlIGJh
Y2sgaW4gaGlzdG9yeS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBuYXZpZ2F0ZSBi
YWNrLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFM
U0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX2ZyYW1lX2JhY2soKQorICovCiBFQVBJIEVp
bmFfQm9vbCAgICBld2tfdmlld19iYWNrKEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBBc2sg
bWFpbiBmcmFtZSB0byBuYXZpZ2F0ZSBmb3J3YXJkIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFt
IG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUgZm9yd2FyZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2Vl
IGV3a19mcmFtZV9mb3J3YXJkKCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZm9y
d2FyZChFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogTmF2aWdhdGUgYmFjayBvciBmb3J3YXJk
IGluIGhpc3RvcnkuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gbmF2aWdhdGUuCisg
KiBAcGFyYW0gc3RlcHMgaWYgcG9zaXRpdmUgbmF2aWdhdGVzIHRoYXQgYW1vdW50IGZvcndhcmRz
LCBpZiBuZWdhdGl2ZQorICogICAgICAgIGRvZXMgYmFja3dhcmRzLgorICoKKyAqIEByZXR1cm4g
QGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IEBzZWUgZXdrX2ZyYW1lX25hdmlnYXRlKCkKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3Zp
ZXdfbmF2aWdhdGUoRXZhc19PYmplY3QgKm8sIGludCBzdGVwcyk7CiAKKy8qKgorICogQ2hlY2sg
aWYgaXQgaXMgcG9zc2libGUgdG8gbmF2aWdhdGUgYmFja3dhcmRzIG9uZSBpdGVtIGluIGhpc3Rv
cnkuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hlY2sgaWYgYmFja3dhcmQgbmF2
aWdhdGlvbiBpcyBwb3NzaWJsZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBwb3Nz
aWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tfdmlld19uYXZp
Z2F0ZV9wb3NzaWJsZSgpCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2JhY2tfcG9z
c2libGUoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIENoZWNrIGlmIGl0IGlzIHBvc3NpYmxl
IHRvIG5hdmlnYXRlIGZvcndhcmRzIG9uZSBpdGVtIGluIGhpc3RvcnkuCisgKgorICogQHBhcmFt
IG8gdmlldyBvYmplY3QgdG8gY2hlY2sgaWYgZm9yd2FyZCBuYXZpZ2F0aW9uIGlzIHBvc3NpYmxl
LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHBvc3NpYmxlLCBAYyBFSU5BX0ZBTFNF
IG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxlKCkKKyAq
LwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVj
dCAqbyk7CisKKy8qKgorICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gbmF2aWdhdGUgZ2l2
ZW4gQGEgc3RlcHMgaW4gaGlzdG9yeS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBu
YXZpZ2F0ZS4KKyAqIEBwYXJhbSBzdGVwcyBpZiBwb3NpdGl2ZSBuYXZpZ2F0ZXMgdGhhdCBhbW91
bnQgZm9yd2FyZHMsIGlmIG5lZ2F0aXZlCisgKiAgICAgICAgZG9lcyBiYWNrd2FyZHMuCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgcG9zc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3
aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShF
dmFzX09iamVjdCAqbywgaW50IHN0ZXBzKTsKIAorLyoqCisgKiBDaGVjayBpZiBuYXZpZ2F0aW9u
IGhpc3RvcnkgKGJhY2stZm9yd2FyZCBsaXN0cykgaXMgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBjaGVjayBpZiBuYXZpZ2F0aW9uIGhpc3RvcnkgaXMgZW5hYmxlZC4K
KyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB2aWV3IGtlZXBzIGhpc3RvcnksIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19oaXN0
b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIFNldHMgaWYg
bmF2aWdhdGlvbiBoaXN0b3J5IChiYWNrLWZvcndhcmQgbGlzdHMpIGlzIGVuYWJsZWQuCisgKgor
ICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gc2V0IGlmIG5hdmlnYXRpb24gaGlzdG9yeSBpcyBl
bmFibGVkLgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgaWYgd2Ugd2FudCB0byBlbmFi
bGUgbmF2aWdhdGlvbiBoaXN0b3J5OworICogQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UuCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX3NldChF
dmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogR2V0cyB0aGUgaGlz
dG9yeSAoYmFjay1mb3J3YXJkIGxpc3QpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCisgKgor
ICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IG5hdmlnYXRpb24gaGlzdG9yeSBmcm9tLgor
ICoKKyAqIEByZXR1cm4gcmV0dXJucyB0aGUgaGlzdG9yeSBpbnN0YW5jZSBoYW5kbGUgYXNzb2Np
YXRlZCB3aXRoIHRoaXMKKyAqICAgICAgICAgdmlldyBvciBAYyAwIG9uIGVycm9ycyAoaW5jbHVk
aW5nIHdoZW4gaGlzdG9yeSBpcyBub3QKKyAqICAgICAgICAgZW5hYmxlZCB3aXRoIGV3a192aWV3
X2hpc3RvcnlfZW5hYmxlX3NldCgpKS4gVGhpcyBpbnN0YW5jZQorICogICAgICAgICBpcyB1bmlx
dWUgZm9yIHRoaXMgdmlldyBhbmQgdGh1cyBtdWx0aXBsZSBjYWxscyB0byB0aGlzCisgKiAgICAg
ICAgIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdmlldyBhcyBwYXJhbWV0ZXIgcmV0dXJucyB0aGUg
c2FtZQorICogICAgICAgICBoYW5kbGUuIFRoaXMgaGFuZGxlIGlzIGFsaXZlIHdoaWxlIHZpZXcg
aXMgYWxpdmUsIHRodXMgb25lCisgKiAgICAgICAgIG1pZ2h0IHdhbnQgdG8gbGlzdGVuIGZvciBF
VkFTX0NBTExCQUNLX0RFTCBvbiBnaXZlbiB2aWV3CisgKiAgICAgICAgIChAYSBvKSB0byBrbm93
IHdoZW4gdG8gc3RvcCB1c2luZyByZXR1cm5lZCBoYW5kbGUuCisgKgorICogQHNlZSBld2tfdmll
d19oaXN0b3J5X2VuYWJsZV9zZXQoKQorICovCiBFQVBJIEV3a19IaXN0b3J5ICpld2tfdmlld19o
aXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKKy8qKgorICogR2V0IHRoZSBjdXJy
ZW50IHpvb20gbGV2ZWwgb2YgbWFpbiBmcmFtZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBxdWVyeSB6b29tIGxldmVsLgorICoKKyAqIEByZXR1cm4gY3VycmVudCB6b29tIGxldmVs
IGluIHVzZSBvciAtMS4wIG9uIGVycm9yLgorICovCiBFQVBJIGZsb2F0ICAgICAgICBld2tfdmll
d196b29tX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogU2V0IHRoZSBjdXJy
ZW50IHpvb20gbGV2ZWwgb2YgbWFpbiBmcmFtZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVj
dCB0byBzZXQgem9vbSBsZXZlbC4KKyAqIEBwYXJhbSB6b29tIG5ldyBsZXZlbCB0byB1c2UuCisg
KiBAcGFyYW0gY3ggeCBvZiBjZW50ZXIgY29vcmRpbmF0ZQorICogQHBhcmFtIGN5IHkgb2YgY2Vu
dGVyIGNvb3JkaW5hdGUKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBA
YyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdf
em9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNf
Q29vcmQgY3kpOwogCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX3dlYWtfc21vb3Ro
X3NjYWxlX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiBFQVBJIHZvaWQgICAgICAgICBld2tf
dmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29s
IHNtb290aF9zY2FsZSk7CiAKKy8qKgorICogU2V0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWwgb2Yg
YmFja2luZyBzdG9yZSwgY2VudGVyZWQgYXQgZ2l2ZW4gcG9pbnQuCisgKgorICogVW5saWtlIGV3
a192aWV3X3pvb21fc2V0KCksIHRoaXMgY2FsbCBkbyBub3QgYXNrIFdlYktpdCB0byByZW5kZXIK
KyAqIGF0IG5ldyBzaXplLCBidXQgc2NhbGUgd2hhdCBpcyBhbHJlYWR5IHJlbmRlcmVkLCBiZWlu
ZyBtdWNoIGZhc3RlcgorICogYnV0IHdvcnNlIHF1YWxpdHkuCisgKgorICogT2Z0ZW4gb25lIHNo
b3VsZCB1c2UgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoKSwgaXQgd2lsbCBjYWxsIHRoZQor
ICogc2FtZSBtYWNoaW5lcnkgaW50ZXJuYWxseS4KKyAqCisgKiBAbm90ZSB0aGlzIHdpbGwgc2V0
IHZhcmlhYmxlcyB1c2VkIGJ5IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCkKKyAqICAgICAg
IHNvIHN1Yi1jbGFzc2VzIHdpbGwgbm90IHJlc2V0IGludGVybmFsIHN0YXRlIG9uIHRoZWlyCisg
KiAgICAgICAiY2FsY3VsYXRlIiBwaGFzZS4gVG8gdW5zZXQgdGhvc2UgYW5kIGVuYWJsZSBzdWIt
Y2xhc3NlcyB0bworICogICAgICAgcmVzZXQgdGhlaXIgaW50ZXJuYWwgc3RhdGUsIGNhbGwKKyAq
ICAgICAgIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkuIE5hbWVseSwgdGhpcyBj
YWxsIHdpbGwKKyAqICAgICAgIHNldCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQo
KSB0byBhY3R1YWwgd2Via2l0IHpvb20KKyAqICAgICAgIGxldmVsLCBld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfZW5kKCkgYW5kCisgKiAgICAgICBld2tfdmlld196b29tX2FuaW1hdGVkX21h
cmtfY3VycmVudCgpIHRvIGdpdmVuIHpvb20gbGV2ZWwuCisgKgorICogQHBhcmFtIG8gdmlldyBv
YmplY3QgdG8gc2V0IHdlYWsgem9vbSBsZXZlbC4KKyAqIEBwYXJhbSB6b29tIGxldmVsIHRvIHNj
YWxlIGJhY2tpbmcgc3RvcmUuCisgKiBAcGFyYW0gY3ggaG9yaXpvbnRhbCBjZW50ZXIgb2Zmc2V0
LCByZWxhdGl2ZSB0byBvYmplY3QgKHcvMiBpcyBtaWRkbGUpLgorICogQHBhcmFtIGN5IHZlcnRp
Y2FsIGNlbnRlciBvZmZzZXQsIHJlbGF0aXZlIHRvIG9iamVjdCAoaC8yIGlzIG1pZGRsZSkuCisg
KgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvdGhl
cndpc2UuCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZh
c19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpOwor
CisvKioKKyAqIE1hcmsgaW50ZXJuYWwgem9vbSBhbmltYXRpb24gc3RhdGUgdG8gZ2l2ZW4gem9v
bS4KKyAqCisgKiBUaGlzIGRvZXMgbm90IG1vZGlmeSBhbnkgYWN0dWFsIHpvb20gaW4gV2ViS2l0
IG9yIGJhY2tpbmcgc3RvcmUsCisgKiBqdXN0IHNldCB0aGUgRXdrX1ZpZXdfU21hcnRfRGF0YS0+
YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0IHNvCisgKiBzdWItY2xhc3NlcyB3aWxsIGtub3cgdGhl
eSBzaG91bGQgbm90IHJlc2V0IHRoZWlyIGludGVybmFsIHN0YXRlLgorICoKKyAqIEBwYXJhbSBv
IHZpZXcgb2JqZWN0IHRvIGNoYW5nZSB2YWx1ZS4KKyAqIEBwYXJhbSB6b29tIG5ldyBzdGFydCB2
YWx1ZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZB
TFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCkK
KyAqIEBzZWUgZXdrX3ZpZXdfem9vbV93ZWFrX3NldCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21f
YW5pbWF0ZWRfbWFya19zdG9wKCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJr
X2VuZCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCkKKyAq
LwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KEV2
YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKTsKKworLyoqCisgKiBNYXJrIGludGVybmFsIHpvb20g
YW5pbWF0aW9uIHN0YXRlIHRvIGdpdmVuIHpvb20uCisgKgorICogVGhpcyBkb2VzIG5vdCBtb2Rp
ZnkgYW55IGFjdHVhbCB6b29tIGluIFdlYktpdCBvciBiYWNraW5nIHN0b3JlLAorICoganVzdCBz
ZXQgdGhlIEV3a19WaWV3X1NtYXJ0X0RhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgc28KKyAq
IHN1Yi1jbGFzc2VzIHdpbGwga25vdyB0aGV5IHNob3VsZCBub3QgcmVzZXQgdGhlaXIgaW50ZXJu
YWwgc3RhdGUuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gY2hhbmdlIHZhbHVlLgor
ICogQHBhcmFtIHpvb20gbmV3IGVuZCB2YWx1ZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a192
aWV3X3pvb21fYW5pbWF0ZWRfc2V0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV93ZWFrX3NldCgp
CisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKCkKKyAqIEBzZWUgZXdr
X3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX2N1cnJlbnQoKQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196
b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tKTsKKworLyoq
CisgKiBNYXJrIGludGVybmFsIHpvb20gYW5pbWF0aW9uIHN0YXRlIHRvIGdpdmVuIHpvb20uCisg
KgorICogVGhpcyBkb2VzIG5vdCBtb2RpZnkgYW55IGFjdHVhbCB6b29tIGluIFdlYktpdCBvciBi
YWNraW5nIHN0b3JlLAorICoganVzdCBzZXQgdGhlIEV3a19WaWV3X1NtYXJ0X0RhdGEtPmFuaW1h
dGVkX3pvb20uem9vbS5jdXJyZW50IHNvCisgKiBzdWItY2xhc3NlcyB3aWxsIGtub3cgdGhleSBz
aG91bGQgbm90IHJlc2V0IHRoZWlyIGludGVybmFsIHN0YXRlLgorICoKKyAqIEBwYXJhbSBvIHZp
ZXcgb2JqZWN0IHRvIGNoYW5nZSB2YWx1ZS4KKyAqIEBwYXJhbSB6b29tIG5ldyBjdXJyZW50IHZh
bHVlLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFM
U0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoKQor
ICogQHNlZSBld2tfdmlld196b29tX3dlYWtfc2V0KCkKKyAqIEBzZWUgZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX3N0b3AoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtf
c3RhcnQoKQorICogQHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKCkKKyAqLwog
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQoRXZh
c19PYmplY3QgKm8sIGZsb2F0IHpvb20pOworCisvKioKKyAqIFVubWFyayBpbnRlcm5hbCB6b29t
IGFuaW1hdGlvbiBzdGF0ZS4KKyAqCisgKiBUaGlzIHplcm8gYWxsIHN0YXJ0LCBlbmQgYW5kIGN1
cnJlbnQgdmFsdWVzLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIG1hcmsgYXMgYW5p
bWF0ZWQgaXMgc3RvcHBlZC4KKyAqCisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFy
a19zdGFydCgpCisgKiBAc2VlIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoKQorICog
QHNlZSBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudCgpCisgKiBAc2VlIGV3a192
aWV3X3pvb21fd2Vha19zZXQoKQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29t
X2FuaW1hdGVkX21hcmtfc3RvcChFdmFzX09iamVjdCAqbyk7CiAKKy8qKgorICogU2V0IHRoZSBj
dXJyZW50IHpvb20gbGV2ZWwgd2hpbGUgYW5pbWF0aW5nLgorICoKKyAqIElmIHRoZSB2aWV3IHdh
cyBhbHJlYWR5IGFuaW1hdGluZyB0byBhbm90aGVyIHpvb20sIGl0IHdpbGwgc3RhcnQKKyAqIGZy
b20gY3VycmVudCBwb2ludCB0byB0aGUgbmV4dCBwcm92aWRlZCB6b29tIChAYSB6b29tIHBhcmFt
ZXRlcikKKyAqIGFuZCBkdXJhdGlvbiAoQGEgZHVyYXRpb24gcGFyYW1ldGVyKS4KKyAqCisgKiBU
aGlzIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gZG8gdHJhbnNpdGlvbnMgZnJvbSBvbmUgbGV2
ZWwgdG8KKyAqIGFub3RoZXIuIEhvd2V2ZXIsIG9uZSBtYXkgd2lzaCB0byBkbyB0aG9zZSBmcm9t
IG91dHNpZGUsIGluIHRoYXQKKyAqIGNhc2UgdXNlIGV3a192aWV3X3pvb21fd2Vha19zZXQoKSBh
bmQgbGF0ZXIgY29udHJvbCBpbnRlcm1lZGlhdGUKKyAqIHN0YXRlcyB3aXRoIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19jdXJyZW50KCksCisgKiBld2tfdmlld196b29tX2FuaW1hdGVkX21h
cmtfZW5kKCkgYW5kCisgKiBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcCgpLgorICoK
KyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGFuaW1hdGUuCisgKiBAcGFyYW0gem9vbSBmaW5h
bCB6b29tIGxldmVsIHRvIHVzZS4KKyAqIEBwYXJhbSBkdXJhdGlvbiB0aW1lIGluIHNlY29uZHMg
dGhlIGFuaW1hdGlvbiBzaG91bGQgdGFrZS4KKyAqIEBwYXJhbSBjeCBvZmZzZXQgaW5zaWRlIG9i
amVjdCB0aGF0IGRlZmluZXMgem9vbSBjZW50ZXIuIDAgaXMgbGVmdCBzaWRlLgorICogQHBhcmFt
IGN5IG9mZnNldCBpbnNpZGUgb2JqZWN0IHRoYXQgZGVmaW5lcyB6b29tIGNlbnRlci4gMCBpcyB0
b3Agc2lkZS4KKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGFuaW1hdGlvbiB3aWxsIGJlIHN0
YXJ0ZWQsIEBjIEVJTkFfRkFMU0UgaWYgbm90CisgKiAgICAgICAgICAgIGJlY2F1c2Ugem9vbSBp
cyB0b28gc21hbGwvYmlnLgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX2Fu
aW1hdGVkX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sIEV2
YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpOworCisvKioKKyAqIFF1ZXJ5IGlmIHpvb20gbGV2
ZWwganVzdCBhcHBsaWVzIHRvIHRleHQgYW5kIG5vdCBvdGhlciBlbGVtZW50cy4KKyAqCisgKiBA
cGFyYW0gbyB2aWV3IHRvIHF1ZXJ5IHNldHRpbmcuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaWYganVzdCB0ZXh0IGFyZSBzY2FsZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICov
CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX3RleHRfb25seV9nZXQoY29uc3QgRXZh
c19PYmplY3QgKm8pOworCisvKioKKyAqIFNldCBpZiB6b29tIGxldmVsIGp1c3QgYXBwbGllcyB0
byB0ZXh0IGFuZCBub3Qgb3RoZXIgZWxlbWVudHMuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBj
aGFuZ2Ugc2V0dGluZy4KKyAqIEBwYXJhbSBzZXR0aW5nIEBjIEVJTkFfVFJVRSBpZiB6b29tIHNo
b3VsZCBqdXN0IGJlIGFwcGxpZWQgdG8gdGV4dC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwogRUFQSSBFaW5hX0Jv
b2wgICAgZXdrX3ZpZXdfem9vbV90ZXh0X29ubHlfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jv
b2wgc2V0dGluZyk7CiAKKy8qKgorICogSGludCBlbmdpbmUgdG8gcHJlLXJlbmRlciByZWdpb24u
CisgKgorICogRW5naW5lcyBhbmQgYmFja2luZyBzdG9yZSBtaWdodCBiZSBhYmxlIHRvIHByZS1y
ZW5kZXIgcmVnaW9ucyBpbgorICogb3JkZXIgdG8gc3BlZWQgdXAgem9vbWluZyBvciBzY3JvbGxp
bmcgdG8gdGhhdCByZWdpb24uIE5vdCBhbGwKKyAqIGVuZ2luZXMgbWlnaHQgaW1wbGVtZW50IHRo
YXQgYW5kIHRoZXkgd2lsbCByZXR1cm4gQGMgRUlOQV9GQUxTRQorICogaW4gdGhhdCBjYXNlLgor
ICoKKyAqIFRoZSBnaXZlbiByZWdpb24gaXMgYSBoaW50LiBFbmdpbmVzIG1pZ2h0IGRvIGJpZ2dl
ciBvciBzbWFsbGVyIGFyZWEKKyAqIHRoYXQgY292ZXJzIHRoYXQgcmVnaW9uLiBQcmUtcmVuZGVy
IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGUsIGl0IG1heQorICogYmUgcG9zdHBvbmVkIHRvIGEgdGhy
ZWFkLCBvcGVyYXRlZCBjb29wZXJhdGl2ZWx5IGluIHRoZSBtYWluIGxvb3AKKyAqIGFuZCBtYXkg
YmUgZXZlbiBpZ25vcmVkIG9yIGNhbmNlbGxlZCBhZnRlcndhcmRzLgorICoKKyAqIE11bHRpcGxl
IHJlcXVlc3RzIG1pZ2h0IGJlIHF1ZXVlZCBieSBlbmdpbmVzLiBPbmUgY2FuIGNsZWFyL2Zvcmdl
dAorICogYWJvdXQgdGhlbSB3aXRoIGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKCkuCisgKgor
ICogQHBhcmFtIG8gdmlldyB0byBhc2sgcHJlLXJlbmRlciBvZiBnaXZlbiByZWdpb24uCisgKiBA
cGFyYW0geCBhYnNvbHV0ZSBjb29yZGluYXRlICgwPWxlZnQpIHRvIHByZS1yZW5kZXIgYXQgem9v
bS4KKyAqIEBwYXJhbSB5IGFic29sdXRlIGNvb3JkaW5hdGUgKDA9dG9wKSB0byBwcmUtcmVuZGVy
IGF0IHpvb20uCisgKiBAcGFyYW0gdyB3aWR0aCB0byBwcmUtcmVuZGVyIHN0YXJ0aW5nIGZyb20g
QGEgeCBhdCB6b29tLgorICogQHBhcmFtIGggaGVpZ2h0IHRvIHByZS1yZW5kZXIgc3RhcnRpbmcg
ZnJvbSBAYSB5IGF0IHpvb20uCisgKiBAcGFyYW0gem9vbSBkZXNpcmVkIHpvb20uCisgKgorICog
QHJldHVybiBAYyBFSU5BX1RSVUUgaWYgcmVxdWVzdCB3YXMgYWNjZXB0ZWQsIEBjIEVJTkFfRkFM
U0UKKyAqICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIHByZS1yZW5kZXIgbm90IHN1cHBvcnRl
ZCwgZXRjKS4KKyAqCisgKiBAc2VlIGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKCkKKyAqLwog
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3Qg
Km8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQg
aCwgZmxvYXQgem9vbSk7CisKKy8qKgorICogSGludCBlbmdpbmUgdG8gcHJlLXJlbmRlciByZWdp
b24sIGdpdmVuIG4gZXh0cmEgY29scy9yb3dzCisgKgorICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2
ZSBtZXRob2QgdG8gZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oKS4gSXQgZG9lcyBub3QKKyAq
IG1ha2Ugc2Vuc2UgaW4gYWxsIGVuZ2luZXMgYW5kIHRoZXJlZm9yZSBpdCBtaWdodCBub3QgYmUg
aW1wbGVtZW50ZWQgYXQgYWxsLgorICoKKyAqIEl0J3Mgb25seSB1c2VmdWwgaWYgZW5naW5lIGRp
dmlkZSB0aGUgYXJlYSBiZWluZyByZW5kZXJlZCBpbiBzbWFsbGVyIHRpbGVzLAorICogZm9ybWlu
ZyBhIGdyaWQuIFRoZW4sIGJyb3dzZXIgY291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHByZS1y
ZW5kZXIgQHBhcmFtIG4KKyAqIHJvd3MvY29scyBpbnZvbHZpbmcgdGhlIGN1cnJlbnQgdmlld3Bv
cnQuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBhc2sgcHJlLXJlbmRlciBvbi4KKyAqIEBwYXJh
bSBuIG51bWJlciBvZiBjb2xzL3Jvd3MgdGhhdCBtdXN0IGJlIHBhcnQgb2YgdGhlIHJlZ2lvbiBw
cmUtcmVuZGVyZWQKKyAqCisgKiBAc2VlIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKCkKKyAq
LwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMo
RXZhc19PYmplY3QgKm8sIHVuc2lnbmVkIGludCBuKTsKKworLyoqCisgKiBDYW5jZWwgKGNsZWFy
KSBwcmV2aW91cyBwcmUtcmVuZGVyIHJlcXVlc3RzLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgdG8g
Y2xlYXIgcHJlLXJlbmRlciByZXF1ZXN0cy4KKyAqLwogRUFQSSB2b2lkICAgICAgICAgZXdrX3Zp
ZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAgKiBFbmFibGUg
cHJvY2Vzc2luZyBvZiB1cGRhdGUgcmVxdWVzdHMuCisgICoKKyAgKiBAcGFyYW0gbyB2aWV3IHRv
IGVuYWJsZSByZW5kZXJpbmcuCisgICoKKyAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiByZW5k
ZXIgd2FzIGVuYWJsZWQsIEBjIEVJTkFfRkFMU0UKKyAgICAgICAgICAgIG90aGVyd2lzZSAoZXJy
b3JzLCByZW5kZXJpbmcgc3VzcGVuc2lvbiBub3Qgc3VwcG9ydGVkKS4KKyAgKi8KIEVBUEkgRWlu
YV9Cb29sICAgIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8pOwor
CisvKioKKyAgKiBEaXNhYmxlIHByb2Nlc3Npbmcgb2YgdXBkYXRlIHJlcXVlc3RzLgorICAqCisg
ICogQHBhcmFtIG8gdmlldyB0byBkaXNhYmxlIHJlbmRlcmluZy4KKyAgKgorICAqIEByZXR1cm4g
QGMgRUlOQV9UUlVFIGlmIHJlbmRlciB3YXMgZGlzYWJsZWQsIEBjIEVJTkFfRkFMU0UKKyAgICAg
ICAgICAgIG90aGVyd2lzZSAoZXJyb3JzLCByZW5kZXJpbmcgc3VzcGVuc2lvbiBub3Qgc3VwcG9y
dGVkKS4KKyAgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGNv
bnN0IEV2YXNfT2JqZWN0ICpvKTsKIAorLyoqCisgKiBHZXQgaW5wdXQgbWV0aG9kIGhpbnRzCisg
KgorICogQHBhcmFtIG8gVmlldy4KKyAqCisgKiBAcmV0dXJuIGlucHV0IG1ldGhvZCBoaW50cwor
ICovCiBFQVBJIHVuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0KEV2YXNfT2JqZWN0ICpvKTsK
IAogLyogc2V0dGluZ3MgKi8KQEAgLTQzNSw3ICsxMTY5LDI2IEBAIEVBUEkgRWluYV9Cb29sICAg
IGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZhc19PYmplY3QgKm8sIEVp
bmFfQm9vCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2lt
YWdlc19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3Zp
ZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jv
b2wgYXV0b21hdGljKTsKIAorLyoqCisgKiBHZXRzIGlmIHZpZXcgY2FuIGJlIHJlc2l6ZWQgYXV0
b21hdGljYWxseS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IHRvIGNoZWNrIHN0YXR1cworICoKKyAq
IEByZXR1cm4gRUlOQV9UUlVFIGlmIHZpZXcgY2FuIGJlIHJlc2l6ZWQsIEVJTkFfRkFMU0UKKyAq
ICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIGNhbm5vdCBiZSByZXNpemVkKS4KKyAqLwogRUFQ
SSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2luZG93
X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogU2V0cyBpZiB2aWV3IGNhbiBi
ZSByZXNpemVkIGF1dG9tYXRpY2FsbHkuCisgKgorICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJh
bSByZXNpemFibGUgQGMgRUlOQV9UUlVFIGlmIHdlIHdhbnQgdG8gcmVzaXplIGF1dG9tYXRpY2Fs
bHk7CisgKiBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSXQgZGVmYXVsdHMgdG8gQGMgRUlOQV9U
UlVFCisgKgorICogQHJldHVybiBFSU5BX1RSVUUgaWYgYXV0b19yZXNpemVfd2luZG93IHN0YXR1
cyBzZXQsIEVJTkFfRkFMU0UKKyAqICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMpLgorICovCiBF
QVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5k
b3dfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgcmVzaXphYmxlKTsKIEVBUEkgRWluYV9C
b29sICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3Njcmlw
dHNfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKTsKQEAgLTQ0Myw3ICsxMTk2
LDI0IEBAIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNf
c2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3
X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkg
RWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBFaW5hX0Jvb2wgZW5hYmxlKTsKIAorLyoqCisgKiBHZXQgc3RhdHVzIG9mIGZyYW1l
IGZsYXR0ZW5pbmcuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBjaGVjayBzdGF0dXMKKyAqCisg
KiBAcmV0dXJuIEVJTkFfVFJVRSBpZiBmbGF0dGVuaW5nIGlzIGVuYWJsZWQsIEVJTkFfRkFMU0UK
KyAqICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIGZsYXR0ZW5pbmcgZGlzYWJsZWQpLgorICov
CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVu
aW5nX2dldChjb25zdCBFdmFzX09iamVjdCogbyk7CisKKy8qKgorICogU2V0IGZyYW1lIGZsYXR0
ZW5pbmcuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBzZXQgZmxhdHRlbmluZworICoKKyAqIEBy
ZXR1cm4gRUlOQV9UUlVFIGlmIGZsYXR0ZW5pbmcgc3RhdHVzIHNldCwgRUlOQV9GQUxTRQorICog
ICAgICAgICBvdGhlcndpc2UgKGVycm9ycykuCisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgZW5hYmxlKTsKIAogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19z
Y3JpcHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CkBAIC00NjMsNyAr
MTIzMywyNCBAQCBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBw
X2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9CbwogRUFQSSBFaW5hX0Jvb2wgICAgZXdr
X3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwog
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCBlbmFibGUpOwogCisvKioKKyAqIEdldCBjdXJyZW50IGVu
Y29kaW5nIG9mIHRoaXMgVmlldy4KKyAqCisgKiBAcGFyYW0gbyBWaWV3LgorICoKKyAqIEByZXR1
cm4gQSBwb2ludGVyIHRvIGFuIGVpbmFfc3RyaW5zaGFyZSBjb250YWluaW5nIHRoZSBjdXJyZW50
IGN1c3RvbQorICogZW5jb2RpbmcgZm9yIFZpZXcgb2JqZWN0IEBwYXJhbSBvLCBvciBAYyAwIGlm
IGl0J3Mgbm90IHNldC4KKyAqLwogRUFQSSBjb25zdCBjaGFyICAqZXdrX3ZpZXdfc2V0dGluZ19l
bmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBTZXQg
ZW5jb2Rpbmcgb2YgdGhpcyBWaWV3IGFuZCByZWxvYWQgcGFnZS4KKyAqCisgKiBAcGFyYW0gbyBW
aWV3LgorICogQHBhcmFtIGVuY29kaW5nIFRoZSBuZXcgZW5jb2Rpbmcgb3IgQGMgMCB0byByZXN0
b3JlIHRoZSBkZWZhdWx0IGVuY29kaW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9u
IHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCiBFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZhc19PYmplY3QgKm8sIGNv
bnN0IGNoYXIgKmVuY29kaW5nKTsKIEVBUEkgY29uc3QgY2hhciAgKmV3a192aWV3X3NldHRpbmdf
ZW5jb2RpbmdfZGVmYXVsdF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogRUFQSSBFaW5hX0Jv
b2wgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChFdmFzX09iamVjdCAq
bywgY29uc3QgY2hhciAqZW5jb2RpbmcpOwpAQCAtNDk1LDI0ICsxMjgyLDExOSBAQCBFQVBJIEVp
bmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2ZvbnRfc2VyaWZfc2V0KEV2YXNfT2JqZWN0ICpv
LCBjb25zdCBjaGFyICpmYQogRUFQSSBjb25zdCBjaGFyICAqZXdrX3ZpZXdfc2V0dGluZ19mb250
X3NhbnNfc2VyaWZfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sICAg
IGV3a192aWV3X3NldHRpbmdfZm9udF9zYW5zX3NlcmlmX3NldChFdmFzX09iamVjdCAqbywgY29u
c3QgY2hhciAqZmFtaWx5KTsKIAorLyoqCisgKiBHZXRzIGlmIHRoZSBzcGF0aWFsIG5hdmlhZ3Rp
b24gaXMgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgc3BhdGlh
bCBuYXZpZ2F0aW9uIHNldHRpbmcuCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzcGF0aWFs
IG5hdmlnYXRpb24gaXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3Igb24gZXJyb3Jz
LgorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdh
dGlvbl9nZXQoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIFNldHMgdGhlIHNwYXRpYWwgbmF2
aWdhdGlvbi4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgc3BhdGlhbCBuYXZp
Z2F0aW9uIHNldHRpbmcuCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBA
YyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdf
c2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wg
ZW5hYmxlKTsKIAorLyoqCisgKiBHZXRzIGlmIHRoZSBsb2NhbCBzdG9yYWdlIGlzIGVuYWJsZWQu
CisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGlmIGxvY2FsIHN0b3JhZ2UgaXMg
ZW5hYmxlZC4KKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGxvY2FsIHN0b3JhZ2UgaXMgZW5h
YmxlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3Igb24gZXJyb3JzLgorICovCiBFQVBJIEVpbmFf
Qm9vbCAgICBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KEV2YXNfT2JqZWN0ICpv
KTsKKworLyoqCisgKiBTZXRzIHRoZSBsb2NhbCBzdG9yYWdlIG9mIEhUTUw1LgorICoKKyAqIEBw
YXJhbSBvIHZpZXcgb2JqZWN0IHRvIHNldCBpZiBsb2NhbCBzdG9yYWdlIGlzIGVuYWJsZWQuCisg
KiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzIGFuZCBAYyBFSU5BX0ZBTFNFIG9uIGZh
aWx1cmUKKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9y
YWdlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogR2V0
cyB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBwYXRoLgorICoKKyAqIEBwYXJhbSBvIHZpZXcg
b2JqZWN0IHRvIGdldCB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBwYXRoLgorICogQHJldHVy
biB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBwYXRoLgorICovCiBFQVBJIGNvbnN0IGNoYXIg
ICpld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9nZXQoY29uc3Qg
RXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIFNldHMgdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJh
c2UgcGF0aC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgdGhlIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UgcGF0aC4KKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mg
YW5kIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tf
dmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9zZXQoRXZhc19PYmplY3Qg
Km8sIGNvbnN0IGNoYXIgKnBhdGgpOwogCisvKioKKyAqIEdldHMgaWYgdGhlIHBhZ2UgY2FjaGUg
aXMgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgaWYgcGFnZSBj
YWNoZSBpcyBlbmFibGVkLgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgcGFnZSBjYWNoZSBp
cyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgICAg
ZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX2dldChFdmFzX09iamVjdCAqbyk7CisKKy8qKgor
ICogU2V0cyB0aGUgcGFnZSBjYWNoZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBz
ZXQgaWYgcGFnZSBjYWNoZSBpcyBlbmFibGVkLgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24g
c3VjY2VzcyBhbmQgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCisgKi8KIEVBUEkgRWluYV9Cb29s
ICAgIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFf
Qm9vbCBlbmFibGUpOwogCisvKioKKyAqIEdldHMgaWYgdGhlIGVuY29kaW5nIGRldGVjdG9yIGlz
IGVuYWJsZWQuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGlmIGVuY29kaW5n
IGRldGVjdG9yIGlzIGVuYWJsZWQuCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBlbmNvZGlu
ZyBkZXRlY3RvciBpcyBlbmFibGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBvbiBlcnJvcnMu
CisgKi8KIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0
b3JfZ2V0KEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBTZXRzIHRoZSBlbmNvZGluZyBkZXRl
Y3Rvci4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBzZXQgaWYgZW5jb2RpbmcgZGV0
ZWN0b3IgaXMgZW5hYmxlZC4KKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5k
IEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICovCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmll
d19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29s
IGVuYWJsZSk7CiAKKy8qKgorICogUmV0dXJucyB3aGV0aGVyIGRldmVsb3BlciBleHRlbnNpb25z
IGFyZSBlbmFibGVkIGZvciB0aGUgZ2l2ZW4gdmlldy4KKyAqCisgKiBDdXJyZW50bHksIHRoaXMg
aXMgdXNlZCB0byBrbm93IHdoZXRoZXIgdGhlIFdlYiBJbnNwZWN0b3IgaXMgZW5hYmxlZCBmb3Ig
YQorICogZ2l2ZW4gdmlldy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGVjay4K
KyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBkZXZlbG9wZXIgZXh0ZW5zaW9ucyBhcmUg
ZW5hYmxlZCwgQGMgRUlOQV9GQUxTRQorICogICAgICAgICBvdGhlcndpc2UuCisgKi8KIEVBUEkg
RWluYV9Cb29sICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0
KEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGRldmVsb3BlciBl
eHRlbnNpb25zIGZvciB0aGUgZ2l2ZW4gdmlldy4KKyAqCisgKiBUaGlzIGN1cnJlbnRseSBjb250
cm9scyB3aGV0aGVyIHRoZSBXZWIgSW5zcGVjdG9yIHNob3VsZCBiZSBlbmFibGVkLgorICoKKyAq
IEBwYXJhbSBvIFRoZSB2aWV3IHdob3NlIHNldHRpbmcgd2lsbCBiZSBjaGFuZ2VkLgorICogQHBh
cmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGRldmVsb3BlciBleHRyYXMsIEBjIEVJ
TkFfRkFMU0UgdG8KKyAqICAgICAgICAgICAgICAgZGlzYWJsZS4KKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBARUlOQV9GQUxTRSBvbiBmYWlsdXJlLgorICovCiBFQVBJ
IEVpbmFfQm9vbCAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3Nl
dChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGVuYWJsZSk7CiAKIC8qIHRvIGJlIHVzZWQgYnkg
c3ViY2xhc3MgaW1wbGVtZW50YXRpb25zICovCisvKioKKyAqIFNpbWlsYXIgdG8gZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9nZXQoKSwgYnV0IGRvZXMgdHlwZSBjaGVja2luZy4KKyAqCisgKiBAcGFy
YW0gbyB2aWV3IG9iamVjdCB0byBxdWVyeSBpbnRlcm5hbCBkYXRhLgorICogQHJldHVybiBpbnRl
cm5hbCBkYXRhIG9yIEBjIDAgb24gZXJyb3JzIChpZTogaW5jb3JyZWN0IHR5cGUgb2YgQGEgbyku
CisgKi8KIEVBUEkgRXdrX1ZpZXdfU21hcnRfRGF0YSAqZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQo
Y29uc3QgRXZhc19PYmplY3QgKm8pOwogCiBFQVBJIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9j
ZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsKQEAgLTUyNSwyOSArMTQwNywyODAgQEAgRUFQ
SSB2b2lkIGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCk7
CiAgKi8KIHR5cGVkZWYgc3RydWN0IF9Fd2tfVmlld19QYWludF9Db250ZXh0IEV3a19WaWV3X1Bh
aW50X0NvbnRleHQ7CiAKKy8qKgorICogQ3JlYXRlIGEgbmV3IHBhaW50IGNvbnRleHQgdXNpbmcg
dGhlIHZpZXcgYXMgc291cmNlIGFuZCBjYWlybyBhcyBvdXRwdXQuCisgKgorICogQHBhcmFtIHBy
aXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB0aGUgdmlldyB0byB1c2UgYXMgcGFpbnQgc291
cmNlLgorICogQHBhcmFtIGNyIGNhaXJvIGNvbnRleHQgdG8gdXNlIGFzIHBhaW50IGRlc3RpbmF0
aW9uLiBBIG5ldworICogICAgICAgIHJlZmVyZW5jZSBpcyB0YWtlbiwgc28gaXQncyBzYWZlIHRv
IGNhbGwgY2Fpcm9fZGVzdHJveSgpCisgKiAgICAgICAgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1
cm5zLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3RhbmNlIG9yIEBjIDAgb24g
ZXJyb3JzLgorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVz
dCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24g
YmFja2luZyBzdG9yZS4KKyAqLwogRUFQSSBFd2tfVmlld19QYWludF9Db250ZXh0ICpld2tfdmll
d19wYWludF9jb250ZXh0X25ldyhFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYsIGNhaXJvX3Qg
KmNyKTsKKworLyoqCisgKiBEZXN0cm95IHByZXZpb3VzbHkgY3JlYXRlZCBwYWludCBjb250ZXh0
LgorICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gZGVzdHJveS4gTXVzdCBAYiBu
b3QgYmUgQGMgMC4KKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0
IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIg
b3duIGJhY2tpbmcgc3RvcmUuCisgKi8KIEVBUEkgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0
X2ZyZWUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCk7CiAKKy8qKgorICogU2F2ZSAocHVz
aCB0byBzdGFjaykgcGFpbnQgY29udGV4dCBzdGF0dXMuCisgKgorICogQHBhcmFtIGN0eHQgcGFp
bnQgY29udGV4dCB0byBzYXZlLiBNdXN0IEBiIG5vdCBiZSBAYyAwLgorICoKKyAqIEBzZWUgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKCkKKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5vdCBm
b3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CisgKiAgICAg
ICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCisgKi8KIEVBUEkgdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCk7CisK
Ky8qKgorICogUmVzdG9yZSAocG9wIGZyb20gc3RhY2spIHBhaW50IGNvbnRleHQgc3RhdHVzLgor
ICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gcmVzdG9yZS4gTXVzdCBAYiBub3Qg
YmUgQGMgMC4KKyAqCisgKiBAc2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZSgpCisgKgor
ICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFz
c2VzIHRoYXQgd2FudAorICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3Jl
LgorICovCiBFQVBJIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKEV3a19WaWV3
X1BhaW50X0NvbnRleHQgKmN0eHQpOworCisvKioKKyAqIENsaXAgcGFpbnQgY29udGV4dCBkcmF3
aW5ncyB0byBnaXZlbiBhcmVhLgorICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8g
Y2xpcC4gTXVzdCBAYiBub3QgYmUgQGMgMC4KKyAqIEBwYXJhbSBhcmVhIGNsaXAgYXJlYSB0byB1
c2UuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X3NhdmUoKQorICogQHNlZSBl
d2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90
IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAg
ICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwogRUFQSSB2b2lkIGV3
a192aWV3X3BhaW50X2NvbnRleHRfY2xpcChFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSk7CisKKy8qKgorICogUGFpbnQgdXNpbmcgY29udGV4
dCB1c2luZyBnaXZlbiBhcmVhLgorICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8g
cGFpbnQuIE11c3QgQGIgbm90IGJlIEBjIDAuCisgKiBAcGFyYW0gYXJlYSBwYWludCBhcmVhIHRv
IHVzZS4gQ29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgdmlld3BvcnQsCisgKiAg
ICAgICAgdGh1cyAic2Nyb2xsZWQiLgorICoKKyAqIEBub3RlIG9uZSBtYXkgdXNlIGNhaXJvIGZ1
bmN0aW9ucyBvbiB0aGUgY2Fpcm8gY29udGV4dCB0bworICogICAgICAgdHJhbnNsYXRlLCBzY2Fs
ZSBvciBhbnkgbW9kaWZpY2F0aW9uIHRoYXQgbWF5IGZpdCBoaXMgZGVzaXJlcy4KKyAqCisgKiBA
c2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfY2xpcCgpCisgKiBAc2VlIGV3a192aWV3X3BhaW50
X2NvbnRleHRfcGFpbnRfY29udGVudHMoKQorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBn
ZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAqICAgICAgIHRv
IGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwogRUFQSSB2b2lkIGV3a192aWV3
X3BhaW50X2NvbnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dCwgY29uc3Qg
RWluYV9SZWN0YW5nbGUgKmFyZWEpOworCisvKioKKyAqIFBhaW50IGp1c3QgY29udGVudHMgdXNp
bmcgY29udGV4dCB1c2luZyBnaXZlbiBhcmVhLgorICoKKyAqIFVubGlrZSBld2tfdmlld19wYWlu
dF9jb250ZXh0X3BhaW50KCksIHRoaXMgZnVuY3Rpb24gcGFpbnQganVzdAorICogYmFyZSBjb250
ZW50cyBhbmQgaWdub3JlcyBhbnkgc2Nyb2xsaW5nLCBzY3JvbGxiYXJzIGFuZCBleHRyYXMuIEl0
CisgKiB3aWxsIHdhbGsgdGhlIHJlbmRlcmluZyB0cmVlIGFuZCBwYWludCBjb250ZW50cyBpbnNp
ZGUgdGhlIGdpdmVuCisgKiBhcmVhIHRvIHRoZSBjYWlybyBjb250ZXh0IHNwZWNpZmllZCBpbiBA
YSBjdHh0LgorICoKKyAqIEBwYXJhbSBjdHh0IHBhaW50IGNvbnRleHQgdG8gcGFpbnQuIE11c3Qg
QGIgbm90IGJlIEBjIDAuCisgKiBAcGFyYW0gYXJlYSBwYWludCBhcmVhIHRvIHVzZS4gQ29vcmRp
bmF0ZXMgYXJlIGFic29sdXRlIHRvIHBhZ2UuCisgKgorICogQG5vdGUgb25lIG1heSB1c2UgY2Fp
cm8gZnVuY3Rpb25zIG9uIHRoZSBjYWlybyBjb250ZXh0IHRvCisgKiAgICAgICB0cmFuc2xhdGUs
IHNjYWxlIG9yIGFueSBtb2RpZmljYXRpb24gdGhhdCBtYXkgZml0IGhpcyBkZXNpcmVzLgorICoK
KyAqIEBzZWUgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKCkKKyAqIEBzZWUgZXdrX3ZpZXdf
cGFpbnRfY29udGV4dF9wYWludCgpCisgKgorICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdlbmVy
YWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAorICogICAgICAgdG8gZGVm
aW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgorICovCiBFQVBJIHZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSk7CisKKy8qKgorICogU2NhbGUgdGhlIGNvbnRlbnRz
IGJ5IHRoZSBnaXZlbiBmYWN0b3JzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXBwbGllcyBhIHNj
YWxpbmcgdHJhbnNmb3JtYXRpb24gdXNpbmcgQ2Fpcm8uCisgKgorICogQHBhcmFtIGN0eHQgICAg
cGFpbnQgY29udGV4dCB0byBwYWludC4gTXVzdCBAYiBub3QgYmUgQGMgMC4KKyAqIEBwYXJhbSBz
Y2FsZV94IHNjYWxlIGZhY3RvciBmb3IgdGhlIFggZGltZW5zaW9uLgorICogQHBhcmFtIHNjYWxl
X3kgc2NhbGUgZmFjdG9yIGZvciB0aGUgWSBkaW1lbnNpb24uCisgKi8KIEVBUEkgdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X3NjYWxlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGZs
b2F0IHNjYWxlX3gsIGZsb2F0IHNjYWxlX3kpOworCisvKioKKyAqIFBlcmZvcm1zIGEgdHJhbnNs
YXRpb24gb2YgdGhlIG9yaWdpbiBjb29yZGluYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1v
dmVzIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMgYnkgQHAgeCBhbmQgQHAgeSBwaXhlbHMuCisgKgor
ICogQHBhcmFtIGN0eHQgcGFpbnQgY29udGV4dCB0byBwYWludC4gTXVzdCBAYiBub3QgYmUgQGMg
MC4KKyAqIEBwYXJhbSB4ICAgIGFtb3VudCBvZiBwaXhlbHMgdG8gdHJhbnNsYXRlIGluIHRoZSBY
IGRpbWVuc2lvbi4KKyAqIEBwYXJhbSB5ICAgIGFtb3VudCBvZiBwaXhlbHMgdG8gdHJhbnNsYXRl
IGluIHRoZSBZIGRpbWVuc2lvbi4KKyAqLwogRUFQSSB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRl
eHRfdHJhbnNsYXRlKEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQsIGZsb2F0IHgsIGZsb2F0
IHkpOwogCisvKioKKyAqIFBhaW50IHVzaW5nIGdpdmVuIGdyYXBoaWNzIGNvbnRleHQgdGhlIGdp
dmVuIGFyZWEuCisgKgorICogVGhpcyB1c2VzIHZpZXdwb3J0IHJlbGF0aXZlIGFyZWEgYW5kIHdp
bGwgYWxzbyBoYW5kbGUgc2Nyb2xsYmFycworICogYW5kIG90aGVyIGV4dHJhIGVsZW1lbnRzLiBT
ZWUgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoKSBmb3IgdGhlCisgKiBhbHRlcm5hdGl2ZSBmdW5j
dGlvbi4KKyAqCisgKiBAcGFyYW0gcHJpdiBwcml2YXRlIGhhbmRsZSBwb2ludGVyIG9mIHZpZXcg
dG8gdXNlIGFzIHBhaW50IHNvdXJjZS4KKyAqIEBwYXJhbSBjciBjYWlybyBjb250ZXh0IHRvIHVz
ZSBhcyBwYWludCBkZXN0aW5hdGlvbi4gSXRzIHN0YXRlIHdpbGwKKyAqICAgICAgICBiZSBzYXZl
ZCBiZWZvcmUgb3BlcmF0aW9uIGFuZCByZXN0b3JlZCBhZnRlcndhcmRzLgorICogQHBhcmFtIGFy
ZWEgdmlld3BvcnQgcmVsYXRpdmUgZ2VvbWV0cnkgdG8gcGFpbnQuCisgKgorICogQHJldHVybiBA
YyBFSU5BX1RSVUUgb24gc3VjY2VzcyBhbmQgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlLCBsaWtl
CisgKiAgICAgICAgIGluY29ycmVjdCBwYXJhbWV0ZXJzLgorICoKKyAqIEBub3RlIHRoaXMgaXMg
YW4gZWFzeSB0byB1c2UgdmVyc2lvbiwgYnV0IGludGVybmFsIHN0cnVjdHVyZXMgYXJlCisgKiAg
ICAgICBhbHdheXMgY3JlYXRlZCwgdGhlbiBncmFwaGljcyBjb250ZXh0IGlzIGNsaXBwZWQsIHRo
ZW4KKyAqICAgICAgIHBhaW50ZWQsIHJlc3RvcmVkIGFuZCBkZXN0cm95ZWQuIFRoaXMgbWlnaHQg
bm90IGJlIG9wdGltdW0sCisgKiAgICAgICBzbyB1c2luZyAjRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCBtYXkgYmUgYSBiZXR0ZXIgc29sdXRpb25zCisgKiAgICAgICBmb3IgbGFyZ2UgbnVtYmVyIG9m
IG9wZXJhdGlvbnMuCisgKgorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZW50cygpCisgKiBA
c2VlIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnQoKQorICoKKyAqIEBub3RlIHRoaXMgaXMg
bm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKKyAq
ICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KKyAqLwogRUFQSSBFaW5h
X0Jvb2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2LCBjYWlyb190
ICpjciwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOworCisvKioKKyAqIFBhaW50IGp1c3Qg
Y29udGVudHMgdXNpbmcgZ2l2ZW4gZ3JhcGhpY3MgY29udGV4dCB0aGUgZ2l2ZW4gYXJlYS4KKyAq
CisgKiBUaGlzIHVzZXMgYWJzb2x1dGUgY29vcmRpbmF0ZXMgZm9yIGFyZWEgYW5kIHdpbGwganVz
dCBoYW5kbGUKKyAqIGNvbnRlbnRzLCBubyBzY3JvbGxiYXJzIG9yIGV4dHJhcy4gU2VlIGV3a192
aWV3X3BhaW50KCkgZm9yIHRoZQorICogYWx0ZXJuYXRpdmUgc29sdXRpb24uCisgKgorICogQHBh
cmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB2aWV3IHRvIHVzZSBhcyBwYWludCBz
b3VyY2UuCisgKiBAcGFyYW0gY3IgY2Fpcm8gY29udGV4dCB0byB1c2UgYXMgcGFpbnQgZGVzdGlu
YXRpb24uIEl0cyBzdGF0ZSB3aWxsCisgKiAgICAgICAgYmUgc2F2ZWQgYmVmb3JlIG9wZXJhdGlv
biBhbmQgcmVzdG9yZWQgYWZ0ZXJ3YXJkcy4KKyAqIEBwYXJhbSBhcmVhIGFic29sdXRlIGdlb21l
dHJ5IHRvIHBhaW50LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MgYW5k
IEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSwgbGlrZQorICogICAgICAgICBpbmNvcnJlY3QgcGFy
YW1ldGVycy4KKyAqCisgKiBAbm90ZSB0aGlzIGlzIGFuIGVhc3kgdG8gdXNlIHZlcnNpb24sIGJ1
dCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZQorICogICAgICAgYWx3YXlzIGNyZWF0ZWQsIHRoZW4g
Z3JhcGhpY3MgY29udGV4dCBpcyBjbGlwcGVkLCB0aGVuCisgKiAgICAgICBwYWludGVkLCByZXN0
b3JlZCBhbmQgZGVzdHJveWVkLiBUaGlzIG1pZ2h0IG5vdCBiZSBvcHRpbXVtLAorICogICAgICAg
c28gdXNpbmcgI0V3a19WaWV3X1BhaW50X0NvbnRleHQgbWF5IGJlIGEgYmV0dGVyIHNvbHV0aW9u
cworICogICAgICAgZm9yIGxhcmdlIG51bWJlciBvZiBvcGVyYXRpb25zLgorICoKKyAqIEBzZWUg
ZXdrX3ZpZXdfcGFpbnQoKQorICogQHNlZSBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2Nv
bnRlbnRzKCkKKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1
c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CisgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3du
IGJhY2tpbmcgc3RvcmUuCisgKi8KIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X3BhaW50X2NvbnRl
bnRzKEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHJpdiwgY2Fpcm9fdCAqY3IsIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICphcmVhKTsKIAorLyoqCisgKiBHZXRzIGF0dHJpYnV0ZXMgb2Ygdmlld3BvcnQg
bWV0YSB0YWcuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSB3IHdpZHRoLgorICog
QHBhcmFtIGggaGVpZ2h0LgorICogQHBhcmFtIGluaXRfc2NhbGUgaW5pdGlhbCBTY2FsZSB2YWx1
ZS4KKyAqIEBwYXJhbSBtYXhfc2NhbGUgbWF4aW11bSBTY2FsZSB2YWx1ZS4KKyAqIEBwYXJhbSBt
aW5fc2NhbGUgbWluaW11bSBTY2FsZSB2YWx1ZS4KKyAqIEBwYXJhbSBkZXZpY2VfcGl4ZWxfcmF0
aW8gdmFsdWUuCisgKiBAcGFyYW0gdXNlcl9zY2FsYWJsZSB1c2VyIFNjYWxhYmxlIHZhbHVlLgor
ICovCiBFQVBJIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoRXZhc19PYmpl
Y3QgKm8sIGZsb2F0ICp3LCBmbG9hdCAqaCwgZmxvYXQgKmluaXRfc2NhbGUsIGZsb2F0ICptYXhf
c2NhbGUsIGZsb2F0ICptaW5fc2NhbGUsIGZsb2F0ICpkZXZpY2VfcGl4ZWxfcmF0aW8gLCBFaW5h
X0Jvb2wgKnVzZXJfc2NhbGFibGUpOworCisvKioKKyAqIFNldHMgdGhlIHpvb20gcmFuZ2UuCisg
KgorICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBtaW5fc2NhbGUgbWluaW11bSB2YWx1ZSBv
ZiB6b29tIHJhbmdlLgorICogQHBhcmFtIG1heF9zY2FsZSBtYXhpbXVtIHZhbHVlIG9mIHpvb20g
cmFuZ2UuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgem9vbSByYW5nZSBpcyBjaGFu
Z2VkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBmYWlsdXJlLgorICovCiBFQVBJIEVpbmFfQm9v
bCBld2tfdmlld196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgbWluX3NjYWxl
LCBmbG9hdCBtYXhfc2NhbGUpOworCisvKioKKyAqIEdldHMgdGhlIG1pbmltdW0gdmFsdWUgb2Yg
em9vbSByYW5nZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICoKKyAqIEByZXR1cm4gbWluaW11
bSB2YWx1ZSBvZiB6b29tIHJhbmdlLgorICovCiBFQVBJIGZsb2F0IGV3a192aWV3X3pvb21fcmFu
Z2VfbWluX2dldChFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogR2V0cyB0aGUgbWF4aW11bSB2
YWx1ZSBvZiB6b29tIHJhbmdlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcuCisgKgorICogQHJldHVy
biBtYXhpbXVtIHZhbHVlIG9mIHpvb20gcmFuZ2UuCisgKi8KIEVBUEkgZmxvYXQgZXdrX3ZpZXdf
em9vbV9yYW5nZV9tYXhfZ2V0KEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBTZXRzIGlmIHpv
b20gaXMgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICogQHBhcmFtIHVzZXJfc2Nh
bGFibGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIGVuYWJsZSB6b29tLiBJdCBkZWZhdWx0
cworICogdG8gQGMgRUlOQV9UUlVFLgorICovCiBFQVBJIHZvaWQgZXdrX3ZpZXdfdXNlcl9zY2Fs
YWJsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxlKTsKKworLyoq
CisgKiBHZXRzIGlmIHpvb20gaXMgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICog
QHBhcmFtIHVzZXJfc2NhbGFibGUgd2hlcmUgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHVzZXIgc2Nh
bGFibGUgdmFsdWUuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgem9vbSBpcyBlbmFi
bGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4KKyAqLwogRUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdf
dXNlcl9zY2FsYWJsZV9nZXQoRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIEdldHMgZGV2aWNl
IHBpeGVsIHJhdGlvIHZhbHVlLgorICoKKyAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFyYW0gdXNl
cl9zY2FsYWJsZSB3aGVyZSB0byByZXR1cm4gdGhlIGN1cnJlbnQgdXNlciBzY2FsYWJsZSB2YWx1
ZS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB6b29tIGlzIGVuYWJsZWQsIEBjIEVJ
TkFfRkFMU0UgaWYgbm90LgorICovCiBFQVBJIGZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9y
YXRpb19nZXQoRXZhc19PYmplY3QgKm8pOwogCisvKioKKyAqIFNldHMgdmlldyBtb2RlLiBUaGUg
dmlldy1tb2RlIG1lZGlhIGZlYXR1cmUgZGVzY3JpYmVzIHRoZSBtb2RlIGluIHdoaWNoIHRoZQor
ICogV2ViIGFwcGxpY2F0aW9uIGlzIGJlaW5nIHNob3duIGFzIGEgcnVubmluZyBhcHBsaWNhdGlv
bi4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBjaGFuZ2UgdmlldyBtb2RlLgorICog
QHBhcmFtIHZpZXdfbW9kZSBwYWdlIHZpZXcgbW9kZSB0byBiZSBzZXQKKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBpZiB2aWV3IG1vZGUgaXMgc2V0IGFzIHZpZXdfbW9kZSwgQGMgRUlOQV9G
QUxTRSBvdGhlcndpc2UuCisgKi8KIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21vZGVfc2V0KEV2
YXNfT2JqZWN0ICpvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSk7CisKKy8qKgorICogR2V0cyB2
aWV3IG1vZGUuIFRoZSB2aWV3LW1vZGUgbWVkaWEgZmVhdHVyZSBkZXNjcmliZXMgdGhlIG1vZGUg
aW4gd2hpY2ggdGhlCisgKiBXZWIgYXBwbGljYXRpb24gaXMgYmVpbmcgc2hvd24gYXMgYSBydW5u
aW5nIGFwcGxpY2F0aW9uLgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIHF1ZXJ5IHZp
ZXcgbW9kZS4KKyAqCisgKiBAcmV0dXJuIGVudW0gdmFsdWUgb2YgRXdrX1ZpZXdfTW9kZSB0aGF0
IGluZGljYXRlcyBjdXJyZW50IHZpZXcgbW9kZS4KKyAqLwogRUFQSSBFd2tfVmlld19Nb2RlIGV3
a192aWV3X21vZGVfZ2V0KEV2YXNfT2JqZWN0ICpvKTsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jCmluZGV4IDIxOTc0YmMuLmQ5NmQ1
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKQEAgLTUyMSwyNCAr
NTIxLDYgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQo
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmUKICAgICBldmFzX29iamVjdF9pbWFnZV9h
bHBoYV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGEgPCAyNTUpOwogfQogCi0vKioKLSAqIFNldHMg
dGhlIHNtYXJ0IGNsYXNzIGFwaSB1c2luZyBzaW5nbGUgYmFja2luZyBzdG9yZSwgZW5hYmxpbmcg
dmlldwotICogdG8gYmUgaW5oZXJpdGVkLgotICoKLSAqIEBwYXJhbSBhcGkgY2xhc3MgZGVmaW5p
dGlvbiB0byBiZSBzZXQsIGFsbCBtZW1iZXJzIHdpdGggdGhlCi0gKiAgICAgICAgZXhjZXB0aW9u
IG9mIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEgbWF5IGJlIG92ZXJyaWRkZW4uIE11c3QKLSAqICAg
ICAgICBAYiBub3QgYmUgQGMgTlVMTC4KLSAqCi0gKiBAbm90ZSBFdmFzX1NtYXJ0X0NsYXNzLT5k
YXRhIGlzIHVzZWQgdG8gaW1wbGVtZW50IHR5cGUgY2hlY2tpbmcgYW5kCi0gKiAgICAgICBpcyBu
b3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZC9vdmVycmlkZGVuLiBJZiB5b3UgbmVlZCBleHRyYQot
ICogICAgICAgZGF0YSBmb3IgeW91ciBzbWFydCBjbGFzcyB0byB3b3JrLCBqdXN0IGV4dGVuZAot
ICogICAgICAgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgaW5zdGVhZC4KLSAqCi0gKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgKHByb2JhYmx5
Ci0gKiAgICAgICAgIHZlcnNpb24gbWlzbWF0Y2gpLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfYmFz
ZV9zbWFydF9zZXQoKQotICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldChF
d2tfVmlld19TbWFydF9DbGFzcyAqYXBpKQogewogICAgIGlmICghZXdrX3ZpZXdfYmFzZV9zbWFy
dF9zZXQoYXBpKSkKQEAgLTU3MywyMiArNTU1LDYgQEAgc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0
ICpfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFy
dDsKIH0KIAotLyoqCi0gKiBDcmVhdGVzIGEgbmV3IEVGTCBXZWJLaXQgVmlldyBvYmplY3QuCi0g
KgotICogVmlldyBvYmplY3RzIGFyZSB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRlYWwgd2l0aCBF
RkwgV2ViS2l0IGFzIGl0Ci0gKiBhYnN0cmFjdHMgdGhlIGNvbXBsZXggcGllY2VzIG9mIHRoZSBw
cm9jZXNzLgotICoKLSAqIEVhY2ggdmlldyBpcyBjb21wb3NlZCBieSBhIHNldCBvZiBmcmFtZXMu
IFRoZSBzZXQgaGFzIGF0IGxlYXN0IG9uZQotICogZnJhbWUsIGNhbGxlZCAnbWFpbl9mcmFtZScu
IFNlZSBld2tfdmlld19mcmFtZV9tYWluX2dldCgpIGFuZAotICogZXdrX3ZpZXdfZnJhbWVfZm9j
dXNlZF9nZXQoKS4KLSAqCi0gKiBAcGFyYW0gZSBjYW52YXMgd2hlcmUgdG8gY3JlYXRlIHRoZSB2
aWV3IG9iamVjdC4KLSAqCi0gKiBAcmV0dXJuIHZpZXcgb2JqZWN0IG9yIEBjIE5VTEwgaWYgZXJy
b3JzLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfdXJpX3NldCgpCi0gKi8KIEV2YXNfT2JqZWN0ICpl
d2tfdmlld19zaW5nbGVfYWRkKEV2YXMgKmUpCiB7CiAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3Nt
YXJ0X2FkZChlLCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKaW5kZXggZDM4MGU4ZS4uN2Q4YWVhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKQEAgLTIyNSwyNCArMjI1LDYgQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmll
d19TbWFydF9EYXRhICpzZCkKICAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5h
YmxlX3JlbmRlcihzZC0+YmFja2luZ19zdG9yZSk7CiB9CiAKLS8qKgotICogU2V0cyB0aGUgc21h
cnQgY2xhc3MgYXBpIHVzaW5nIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGVuYWJsaW5nIHZpZXcKLSAq
IHRvIGJlIGluaGVyaXRlZC4KLSAqCi0gKiBAcGFyYW0gYXBpIGNsYXNzIGRlZmluaXRpb24gdG8g
YmUgc2V0LCBhbGwgbWVtYmVycyB3aXRoIHRoZQotICogICAgICAgIGV4Y2VwdGlvbiBvZiBFdmFz
X1NtYXJ0X0NsYXNzLT5kYXRhIG1heSBiZSBvdmVycmlkZGVuLiBNdXN0Ci0gKiAgICAgICAgQGIg
bm90IGJlIEBjIE5VTEwuCi0gKgotICogQG5vdGUgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBpcyB1
c2VkIHRvIGltcGxlbWVudCB0eXBlIGNoZWNraW5nIGFuZAotICogICAgICAgaXMgbm90IHN1cHBv
c2VkIHRvIGJlIGNoYW5nZWQvb3ZlcnJpZGRlbi4gSWYgeW91IG5lZWQgZXh0cmEKLSAqICAgICAg
IGRhdGEgZm9yIHlvdXIgc21hcnQgY2xhc3MgdG8gd29yaywganVzdCBleHRlbmQKLSAqICAgICAg
IEV3a19WaWV3X1NtYXJ0X0NsYXNzIGluc3RlYWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlIChwcm9iYWJseQotICogICAg
ICAgICB2ZXJzaW9uIG1pc21hdGNoKS4KLSAqCi0gKiBAc2VlIGV3a192aWV3X2Jhc2Vfc21hcnRf
c2V0KCkKLSAqLwogRWluYV9Cb29sIGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldChFd2tfVmlld19T
bWFydF9DbGFzcyAqYXBpKQogewogICAgIGlmICghZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoYXBp
KSkKQEAgLTI4MiwzMyArMjY0LDExIEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCAqX2V3a192
aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAot
LyoqCi0gKiBDcmVhdGVzIGEgbmV3IEVGTCBXZWJLaXQgVmlldyBvYmplY3QgdXNpbmcgdGlsZWQg
YmFja2luZyBzdG9yZS4KLSAqCi0gKiBWaWV3IG9iamVjdHMgYXJlIHRoZSByZWNvbW1lbmRlZCB3
YXkgdG8gZGVhbCB3aXRoIEVGTCBXZWJLaXQgYXMgaXQKLSAqIGFic3RyYWN0cyB0aGUgY29tcGxl
eCBwaWVjZXMgb2YgdGhlIHByb2Nlc3MuCi0gKgotICogVGhpcyBvYmplY3QgaXMgYWxtb3N0IHRo
ZSBzYW1lIGFzIHRoZSBvbmUgcmV0dXJuZWQgYnkgdGhlIGV3a192aWV3X2FkZCgpCi0gKiBmdW5j
dGlvbiwgYnV0IGl0IHVzZXMgdGhlIHRpbGVkIGJhY2tpbmcgc3RvcmUgaW5zdGVhZCBvZiB0aGUg
ZGVmYXVsdAotICogYmFja2luZyBzdG9yZS4KLSAqCi0gKiBAcGFyYW0gZSBjYW52YXMgd2hlcmUg
dG8gY3JlYXRlIHRoZSB2aWV3IG9iamVjdC4KLSAqCi0gKiBAcmV0dXJuIHZpZXcgb2JqZWN0IG9y
IEBjIE5VTEwgaWYgZXJyb3JzLgotICoKLSAqIEBzZWUgZXdrX3ZpZXdfdXJpX3NldCgpCi0gKi8K
IEV2YXNfT2JqZWN0ICpld2tfdmlld190aWxlZF9hZGQoRXZhcyAqZSkKIHsKICAgICByZXR1cm4g
ZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIF9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXco
KSk7CiB9CiAKLS8qKgotICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgdXNlZCBieSB0
aGlzIHZpZXcuCi0gKgotICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGNhY2hlLgotICog
QHJldHVybiBpbnN0YW5jZSBvZiAiY2FjaGUgb2YgdW51c2VkIHRpbGVzIiBvciBAYyBOVUxMIG9u
IGVycm9ycy4KLSAqLwogRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdmlld190aWxlZF91bnVz
ZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQogewogICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEgKnNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQobyk7CkBAIC0zMTYsMTYgKzI3Niw2
IEBAIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dl
dChjb25zdCBFdmFzX09iamVjdCAqbykKICAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKIH0KIAotLyoqCi0g
KiBTZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcyB1c2VkIGJ5IHRoaXMgdmlldy4KLSAqCi0g
KiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY2FjaGUuCi0gKiBAcGFyYW0gY2FjaGUgaW5z
dGFuY2Ugb2YgImNhY2hlIG9mIHVudXNlZCB0aWxlcyIuIFRoaXMgY2FuIGJlIHVzZWQKLSAqICAg
ICAgICB0byBzaGFyZSBhIHNpbmdsZSBjYWNoZSBhbW9uZ3N0IGRpZmZlcmVudCB2aWV3cy4gVGhl
IHRpbGVzCi0gKiAgICAgICAgZnJvbSBvbmUgdmlldyB3aWxsIG5vdCBiZSB1c2VkIGJ5IHRoZSBv
dGhlciEgVGhpcyBpcyBqdXN0IHRvCi0gKiAgICAgICAgbGltaXQgdGhlIGdyb3VwIHdpdGggYW1v
dW50IG9mIHVudXNlZCBtZW1vcnkuCi0gKiAgICAgICAgSWYgQGMgTlVMTCBpcyBwcm92aWRlZCwg
dGhlbiBhIG5ldyBjYWNoZSBpcyBjcmVhdGVkLgotICovCiB2b2lkIGV3a192aWV3X3RpbGVkX3Vu
dXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqY2Fj
aGUpCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRh
X2dldChvKTsKQEAgLTMzMywxMSArMjgzLDYgQEAgdm9pZCBld2tfdmlld190aWxlZF91bnVzZWRf
Y2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmNhY2gKICAg
ICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tp
bmdfc3RvcmUsIGNhY2hlKTsKIH0KIAotLyoqCi0gKiBTZXQgdGhlIGZ1bmN0aW9uIHdpdGggdGhl
IHNhbWUgbmFtZSBvZiB0aGUgdGlsZWQgYmFja2luZyBzdG9yZS4KLSAqIEBwYXJhbSBvIHRoZSB0
aWxlZCBiYWNraW5nIHN0b3JlIG9iamVjdC4KLSAqIEBwYXJhbSBmbGFnIHZhbHVlIG9mIHRoZSB0
aWxlZCBiYWNraW5nIHN0b3JlIGZsYWcgdG8gc2V0LgotICovCiB2b2lkIGV3a192aWV3X3RpbGVk
X3Byb2Nlc3NfZW50aXJlX3F1ZXVlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGZsYWcp
CiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dl
dChvKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>