<?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>159803</bug_id>
          
          <creation_ts>2016-07-15 01:44:30 -0700</creation_ts>
          <short_desc>[GTK] Add basic tabs support to MiniBrowser</short_desc>
          <delta_ts>2016-07-15 02:26:14 -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>Tools / Tests</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=159512</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1211359</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-15 01:44:30 -0700</bug_when>
    <thetext>It&apos;s quite common to have issues with web views loaded in secondary tabs, and we need to use an external browser like epiphany to debug those issues. It would be a lot easier to work on those bugs if we could use the MiniBrowser. See bug #159512 for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211360</commentid>
    <comment_count>1</comment_count>
      <attachid>283750</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-15 01:47:17 -0700</bug_when>
    <thetext>Created attachment 283750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211361</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-15 01:49:52 -0700</bug_when>
    <thetext>Attachment 283750 did not pass style-queue:


ERROR: Tools/MiniBrowser/gtk/BrowserTab.c:27:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/gtk/BrowserTab.c:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/gtk/BrowserTab.c:36:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Tools/MiniBrowser/gtk/BrowserTab.c:38:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 4 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211364</commentid>
    <comment_count>3</comment_count>
      <attachid>283750</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-07-15 02:21:12 -0700</bug_when>
    <thetext>Comment on attachment 283750
Patch

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

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:768
&gt; +    browserWindowUpdateZoomActions(window);

A bit unfortunate having to trigger all these events manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211366</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-15 02:26:14 -0700</bug_when>
    <thetext>Committed r203271: &lt;http://trac.webkit.org/changeset/203271&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283750</attachid>
            <date>2016-07-15 01:47:17 -0700</date>
            <delta_ts>2016-07-15 02:21:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>mb-tabs.diff</filename>
            <type>text/plain</type>
            <size>82803</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlNjQz
OTc0Li4wMTkzZjRjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTE4IEBACisyMDE2LTA3LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgYmFzaWMgdGFicyBz
dXBwb3J0IHRvIE1pbmlCcm93c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTk4MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJdCdzIHF1aXRlIGNvbW1vbiB0byBoYXZlIGlzc3VlcyB3aXRoIHdlYiB2
aWV3cyBsb2FkZWQgaW4gc2Vjb25kYXJ5IHRhYnMsIGFuZCB3ZSBuZWVkIHRvIHVzZSBhbiBleHRl
cm5hbCBicm93c2VyCisgICAgICAgIGxpa2UgZXBpcGhhbnkgdG8gZGVidWcgdGhvc2UgaXNzdWVz
LiBJdCB3b3VsZCBiZSBhIGxvdCBlYXNpZXIgdG8gd29yayBvbiB0aG9zZSBidWdzIGlmIHdlIGNv
dWxkIHVzZSB0aGUgTWluaUJyb3dzZXIuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQnJv
d3NlclRhYi5jOiBBZGRlZC4KKyAgICAgICAgKHRpdGxlQ2hhbmdlZCk6CisgICAgICAgIChpc0xv
YWRpbmdDaGFuZ2VkKToKKyAgICAgICAgKGRlY2lkZVBvbGljeSk6CisgICAgICAgIChyZW1vdmVD
aGlsZElmSW5mb0Jhcik6CisgICAgICAgIChsb2FkQ2hhbmdlZCk6CisgICAgICAgIChjcmVhdGVJ
bmZvQmFyUXVlc3Rpb25NZXNzYWdlKToKKyAgICAgICAgKHRsc0Vycm9yc0RpYWxvZ1Jlc3BvbnNl
KToKKyAgICAgICAgKGxvYWRGYWlsZWRXaXRoVExTZXJyb3JzKToKKyAgICAgICAgKHBlcm1pc3Np
b25SZXF1ZXN0RGlhbG9nUmVzcG9uc2UpOgorICAgICAgICAoZGVjaWRlUGVybWlzc2lvblJlcXVl
c3QpOgorICAgICAgICAoY29sb3JDaG9vc2VyUkdCQUNoYW5nZWQpOgorICAgICAgICAocG9wb3Zl
ckNvbG9yQ2xvc2VkKToKKyAgICAgICAgKGNvbG9yQ2hvb3NlclJlcXVlc3RGaW5pc2hlZCk6Cisg
ICAgICAgIChydW5Db2xvckNob29zZXJDYWxsYmFjayk6CisgICAgICAgIChpbnNwZWN0b3JPcGVu
ZWRJbldpbmRvdyk6CisgICAgICAgIChpbnNwZWN0b3JDbG9zZWQpOgorICAgICAgICAoYnJvd3Nl
clRhYlNldFByb3BlcnR5KToKKyAgICAgICAgKGJyb3dzZXJUYWJGaW5hbGl6ZSk6CisgICAgICAg
IChicm93c2VyX3RhYl9pbml0KToKKyAgICAgICAgKGJyb3dzZXJUYWJDb25zdHJ1Y3RlZCk6Cisg
ICAgICAgIChicm93c2VyX3RhYl9jbGFzc19pbml0KToKKyAgICAgICAgKGdldEludGVybmFsVVJJ
KToKKyAgICAgICAgKGJyb3dzZXJfdGFiX25ldyk6CisgICAgICAgIChicm93c2VyX3RhYl9nZXRf
d2ViX3ZpZXcpOgorICAgICAgICAoYnJvd3Nlcl90YWJfbG9hZF91cmkpOgorICAgICAgICAoYnJv
d3Nlcl90YWJfZ2V0X3RpdGxlX3dpZGdldCk6CisgICAgICAgIChicm93c2VyX3RhYl9zZXRfc3Rh
dHVzX3RleHQpOgorICAgICAgICAoYnJvd3Nlcl90YWJfdG9nZ2xlX2luc3BlY3Rvcik6CisgICAg
ICAgIChicm93c2VyX3RhYl9zdGFydF9zZWFyY2gpOgorICAgICAgICAoYnJvd3Nlcl90YWJfc3Rv
cF9zZWFyY2gpOgorICAgICAgICAoYnJvd3Nlcl90YWJfYWRkX2FjY2VsZXJhdG9ycyk6CisgICAg
ICAgIChmdWxsU2NyZWVuTWVzc2FnZVRpbWVvdXRDYWxsYmFjayk6CisgICAgICAgIChicm93c2Vy
X3RhYl9lbnRlcl9mdWxsc2NyZWVuKToKKyAgICAgICAgKGJyb3dzZXJfdGFiX2xlYXZlX2Z1bGxz
Y3JlZW4pOgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmg6IEFkZGVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmM6CisgICAgICAgIChnZXRF
eHRlcm5hbFVSSSk6CisgICAgICAgIChicm93c2VyV2luZG93U2V0U3RhdHVzVGV4dCk6CisgICAg
ICAgIChyZWxvYWRPclN0b3BDYWxsYmFjayk6CisgICAgICAgIChnb0JhY2tDYWxsYmFjayk6Cisg
ICAgICAgIChnb0ZvcndhcmRDYWxsYmFjayk6CisgICAgICAgIChzZXR0aW5nc0NhbGxiYWNrKToK
KyAgICAgICAgKHdlYlZpZXdVUklDaGFuZ2VkKToKKyAgICAgICAgKGJyb3dzZXJXaW5kb3dIaXN0
b3J5SXRlbUFjdGl2YXRlZCk6CisgICAgICAgIChicm93c2VyV2luZG93VXBkYXRlTmF2aWdhdGlv
bkFjdGlvbnMpOgorICAgICAgICAod2ViVmlld0NyZWF0ZSk6CisgICAgICAgICh3ZWJWaWV3RW50
ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKHdlYlZpZXdMZWF2ZUZ1bGxTY3JlZW4pOgorICAgICAg
ICAod2ViVmlld0RlY2lkZVBvbGljeSk6CisgICAgICAgIChicm93c2VyV2luZG93Q2FuWm9vbUlu
KToKKyAgICAgICAgKGJyb3dzZXJXaW5kb3dDYW5ab29tT3V0KToKKyAgICAgICAgKGJyb3dzZXJX
aW5kb3dab29tSW4pOgorICAgICAgICAoYnJvd3NlcldpbmRvd1pvb21PdXQpOgorICAgICAgICAo
c2Nyb2xsRXZlbnRDYWxsYmFjayk6CisgICAgICAgIChmYXZpY29uQ2hhbmdlZCk6CisgICAgICAg
ICh3ZWJWaWV3SXNMb2FkaW5nQ2hhbmdlZCk6CisgICAgICAgIChkZWZhdWx0Wm9vbUNhbGxiYWNr
KToKKyAgICAgICAgKHNlYXJjaENhbGxiYWNrKToKKyAgICAgICAgKG5ld1RhYkNhbGxiYWNrKToK
KyAgICAgICAgKHRvZ2dsZVdlYkluc3BlY3Rvcik6CisgICAgICAgIChyZWxvYWRQYWdlKToKKyAg
ICAgICAgKHJlbG9hZFBhZ2VJZ25vcmluZ0NhY2hlKToKKyAgICAgICAgKHN0b3BQYWdlTG9hZCk6
CisgICAgICAgIChsb2FkSG9tZVBhZ2UpOgorICAgICAgICAoZWRpdGluZ0NvbW1hbmRDYWxsYmFj
ayk6CisgICAgICAgIChpbnNlcnRJbWFnZUNvbW1hbmRDYWxsYmFjayk6CisgICAgICAgIChpbnNl
cnRMaW5rQ29tbWFuZENhbGxiYWNrKToKKyAgICAgICAgKGJyb3dzZXJXaW5kb3dTZXR1cEVkaXRv
clRvb2xiYXIpOgorICAgICAgICAoYnJvd3NlcldpbmRvd1N3aXRjaFRhYik6CisgICAgICAgIChi
cm93c2VyV2luZG93VGFiQWRkZWRPclJlbW92ZWQpOgorICAgICAgICAoYnJvd3Nlcl93aW5kb3df
aW5pdCk6CisgICAgICAgIChicm93c2VyV2luZG93Q29uc3RydWN0ZWQpOgorICAgICAgICAoYnJv
d3NlcldpbmRvd1NhdmVTZXNzaW9uKToKKyAgICAgICAgKGJyb3dzZXJXaW5kb3dEZWxldGVFdmVu
dCk6CisgICAgICAgIChicm93c2VyX3dpbmRvd19uZXcpOgorICAgICAgICAoYnJvd3Nlcl93aW5k
b3dfYXBwZW5kX3ZpZXcpOgorICAgICAgICAoYnJvd3Nlcl93aW5kb3dfbG9hZF91cmkpOgorICAg
ICAgICAoYnJvd3Nlcl93aW5kb3dfbG9hZF9zZXNzaW9uKToKKyAgICAgICAgKGJyb3dzZXJfd2lu
ZG93X3NldF9iYWNrZ3JvdW5kX2NvbG9yKToKKyAgICAgICAgKHJlc2V0U3RhdHVzVGV4dCk6IERl
bGV0ZWQuCisgICAgICAgIChhY3RpdmF0ZVVyaUVudHJ5Q2FsbGJhY2spOiBEZWxldGVkLgorICAg
ICAgICAod2ViVmlld1RpdGxlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChyZXNldEVudHJ5
UHJvZ3Jlc3MpOiBEZWxldGVkLgorICAgICAgICAoYnJvd3NlcldpbmRvd0NyZWF0ZUJhY2tGb3J3
YXJkTWVudSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJWaWV3UmVhZHlUb1Nob3cpOiBEZWxldGVk
LgorICAgICAgICAod2ViVmlld0xvYWRGYWlsZWQpOiBEZWxldGVkLgorICAgICAgICAod2ViVmll
d01vdXNlVGFyZ2V0Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChicm93c2VyV2luZG93VXBk
YXRlWm9vbUFjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAod2ViVmlld1pvb21MZXZlbENoYW5n
ZWQpOiBEZWxldGVkLgorICAgICAgICAodXBkYXRlVXJpRW50cnlJY29uKTogRGVsZXRlZC4KKyAg
ICAgICAgKHpvb21JbkNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKHpvb21PdXRDYWxsYmFj
ayk6IERlbGV0ZWQuCisgICAgICAgICh0b2dnbGVGdWxsU2NyZWVuKTogRGVsZXRlZC4KKyAgICAg
ICAgKGJyb3dzZXJXaW5kb3dFZGl0aW5nQ29tbWFuZFRvZ2dsZUJ1dHRvblNldEFjdGl2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChicm93c2VyV2luZG93RmluYWxpemUpOiBEZWxldGVkLgorICAgICAg
ICAoYnJvd3Nlcl93aW5kb3dfY2xhc3NfaW5pdCk6IERlbGV0ZWQuCisgICAgICAgICogTWluaUJy
b3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uYzoKKyAgICAgICAg
KGNyZWF0ZUJyb3dzZXJUYWIpOgorICAgICAgICAoYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJh
Y2spOgorICAgICAgICAobWFpbik6CisgICAgICAgIChwYXJzZUJhY2tncm91bmRDb2xvcik6IERl
bGV0ZWQuCisKIDIwMTYtMDctMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIFdlYiB2aWV3IGJhY2tncm91bmQgY29sb3JzIGRvbid0
IHdvcmsgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyVGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkNWM4YwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmMKQEAgLTAs
MCArMSw1NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkgJiYgSEFWRV9DT05GSUdfSCAmJiBkZWZp
bmVkKEJVSUxESU5HX1dJVEhfQ01BS0UpCisjaW5jbHVkZSAiY21ha2Vjb25maWcuaCIKKyNlbmRp
ZgorI2luY2x1ZGUgIkJyb3dzZXJUYWIuaCIKKworI2luY2x1ZGUgIkJyb3dzZXJTZWFyY2hCYXIu
aCIKKyNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2Vu
dW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfVklFVworfTsKKworc3RydWN0IF9Ccm93c2Vy
VGFiIHsKKyAgICBHdGtCb3ggcGFyZW50OworCisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsK
KyAgICBCcm93c2VyU2VhcmNoQmFyICpzZWFyY2hCYXI7CisgICAgR3RrV2lkZ2V0ICpzdGF0dXNM
YWJlbDsKKyAgICBnYm9vbGVhbiB3YXNTZWFyY2hpbmdXaGVuRW50ZXJlZEZ1bGxzY3JlZW47Cisg
ICAgZ2Jvb2xlYW4gaW5zcGVjdG9ySXNWaXNpYmxlOworICAgIEd0a1dpZGdldCAqZnVsbFNjcmVl
bk1lc3NhZ2VMYWJlbDsKKyAgICBndWludCBmdWxsU2NyZWVuTWVzc2FnZUxhYmVsSWQ7CisKKyAg
ICAvKiBUYWIgVGl0bGUgKi8KKyAgICBHdGtXaWRnZXQgKnRpdGxlQm94OworICAgIEd0a1dpZGdl
dCAqdGl0bGVMYWJlbDsKKyAgICBHdGtXaWRnZXQgKnRpdGxlU3Bpbm5lcjsKKyAgICBHdGtXaWRn
ZXQgKnRpdGxlQ2xvc2VCdXR0b247Cit9OworCitzdHJ1Y3QgX0Jyb3dzZXJUYWJDbGFzcyB7Cisg
ICAgR3RrQm94Q2xhc3MgcGFyZW50OworfTsKKworR19ERUZJTkVfVFlQRShCcm93c2VyVGFiLCBi
cm93c2VyX3RhYiwgR1RLX1RZUEVfQk9YKQorCitzdGF0aWMgdm9pZCB0aXRsZUNoYW5nZWQoV2Vi
S2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqcHNwZWMsIEJyb3dzZXJUYWIgKnRhYikK
K3sKKyAgICBjb25zdCBjaGFyICp0aXRsZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUod2Vi
Vmlldyk7CisgICAgaWYgKHRpdGxlICYmICp0aXRsZSkKKyAgICAgICAgZ3RrX2xhYmVsX3NldF90
ZXh0KEdUS19MQUJFTCh0YWItPnRpdGxlTGFiZWwpLCB0aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lk
IGlzTG9hZGluZ0NoYW5nZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqcGFy
YW1TcGVjLCBCcm93c2VyVGFiICp0YWIpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19s
b2FkaW5nKHdlYlZpZXcpKSB7CisgICAgICAgIGd0a19zcGlubmVyX3N0YXJ0KEdUS19TUElOTkVS
KHRhYi0+dGl0bGVTcGlubmVyKSk7CisgICAgICAgIGd0a193aWRnZXRfc2hvdyh0YWItPnRpdGxl
U3Bpbm5lcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ3RrX3NwaW5uZXJfc3RvcChHVEtfU1BJ
Tk5FUih0YWItPnRpdGxlU3Bpbm5lcikpOworICAgICAgICBndGtfd2lkZ2V0X2hpZGUodGFiLT50
aXRsZVNwaW5uZXIpOworICAgIH0KK30KKworc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeShX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24sIFdl
YktpdFBvbGljeURlY2lzaW9uVHlwZSBkZWNpc2lvblR5cGUsIEJyb3dzZXJUYWIgKnRhYikKK3sK
KyAgICBpZiAoZGVjaXNpb25UeXBlICE9IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQ
T05TRSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgV2ViS2l0UmVzcG9uc2VQb2xpY3lE
ZWNpc2lvbiAqcmVzcG9uc2VEZWNpc2lvbiA9IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJ
T04oZGVjaXNpb24pOworICAgIGlmICh3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9uX2lz
X21pbWVfdHlwZV9zdXBwb3J0ZWQocmVzcG9uc2VEZWNpc2lvbikpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworICAgIFdlYktpdFdlYlJlc291cmNlICptYWluUmVzb3VyY2UgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7CisgICAgV2ViS2l0VVJJUmVxdWVzdCAq
cmVxdWVzdCA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QocmVz
cG9uc2VEZWNpc2lvbik7CisgICAgY29uc3QgY2hhciAqcmVxdWVzdFVSSSA9IHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpOworICAgIGlmIChnX3N0cmNtcDAod2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdXJpKG1haW5SZXNvdXJjZSksIHJlcXVlc3RVUkkpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9u
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlQ2hpbGRJZkluZm9C
YXIoR3RrV2lkZ2V0ICpjaGlsZCwgR3RrQ29udGFpbmVyICp0YWIpCit7CisgICAgaWYgKEdUS19J
U19JTkZPX0JBUihjaGlsZCkpCisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKHRhYiwgY2hp
bGQpOworfQorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBCcm93c2VyVGFiICp0YWIpCit7CisgICAgaWYg
KGxvYWRFdmVudCAhPSBXRUJLSVRfTE9BRF9TVEFSVEVEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUih0YWIpLCAoR3RrQ2FsbGJhY2sp
cmVtb3ZlQ2hpbGRJZkluZm9CYXIsIHRhYik7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQgKmNyZWF0
ZUluZm9CYXJRdWVzdGlvbk1lc3NhZ2UoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRl
eHQpCit7CisgICAgR3RrV2lkZ2V0ICpkaWFsb2cgPSBndGtfaW5mb19iYXJfbmV3X3dpdGhfYnV0
dG9ucygiTm8iLCBHVEtfUkVTUE9OU0VfTk8sICJZZXMiLCBHVEtfUkVTUE9OU0VfWUVTLCBOVUxM
KTsKKyAgICBndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZShHVEtfSU5GT19CQVIoZGlhbG9n
KSwgR1RLX01FU1NBR0VfUVVFU1RJT04pOworCisgICAgR3RrV2lkZ2V0ICpjb250ZW50Qm94ID0g
Z3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEoR1RLX0lORk9fQkFSKGRpYWxvZykpOworICAg
IGd0a19vcmllbnRhYmxlX3NldF9vcmllbnRhdGlvbihHVEtfT1JJRU5UQUJMRShjb250ZW50Qm94
KSwgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdU
S19CT1goY29udGVudEJveCksIDApOworCisgICAgR3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJl
bF9uZXcoTlVMTCk7CisgICAgZ2NoYXIgKm1hcmt1cCA9IGdfc3RyZHVwX3ByaW50ZigiPHNwYW4g
c2l6ZT0neHgtbGFyZ2UnIHdlaWdodD0nYm9sZCc+JXM8L3NwYW4+IiwgdGl0bGUpOworICAgIGd0
a19sYWJlbF9zZXRfbWFya3VwKEdUS19MQUJFTChsYWJlbCksIG1hcmt1cCk7CisgICAgZ19mcmVl
KG1hcmt1cCk7CisgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGxhYmVsKSwg
VFJVRSk7CisgICAgZ3RrX2xhYmVsX3NldF9zZWxlY3RhYmxlKEdUS19MQUJFTChsYWJlbCksIFRS
VUUpOworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLiwgMC41
KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChjb250ZW50Qm94KSwgbGFiZWwsIEZB
TFNFLCBGQUxTRSwgMik7CisgICAgZ3RrX3dpZGdldF9zaG93KGxhYmVsKTsKKworICAgIGxhYmVs
ID0gZ3RrX2xhYmVsX25ldyh0ZXh0KTsKKyAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtf
TEFCRUwobGFiZWwpLCBUUlVFKTsKKyAgICBndGtfbGFiZWxfc2V0X3NlbGVjdGFibGUoR1RLX0xB
QkVMKGxhYmVsKSwgVFJVRSk7CisgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhs
YWJlbCksIDAuLCAwLjUpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGNvbnRlbnRC
b3gpLCBsYWJlbCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobGFiZWwp
OworCisgICAgcmV0dXJuIGRpYWxvZzsKK30KKworc3RhdGljIHZvaWQgdGxzRXJyb3JzRGlhbG9n
UmVzcG9uc2UoR3RrV2lkZ2V0ICpkaWFsb2csIGdpbnQgcmVzcG9uc2UsIEJyb3dzZXJUYWIgKnRh
YikKK3sKKyAgICBpZiAocmVzcG9uc2UgPT0gR1RLX1JFU1BPTlNFX1lFUykgeworICAgICAgICBj
b25zdCBjaGFyICpmYWlsaW5nVVJJID0gKGNvbnN0IGNoYXIgKilnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChkaWFsb2cpLCAiZmFpbGluZ1VSSSIpOworICAgICAgICBHVGxzQ2VydGlmaWNhdGUg
KmNlcnRpZmljYXRlID0gKEdUbHNDZXJ0aWZpY2F0ZSAqKWdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKGRpYWxvZyksICJjZXJ0aWZpY2F0ZSIpOworICAgICAgICBTb3VwVVJJICp1cmkgPSBzb3Vw
X3VyaV9uZXcoZmFpbGluZ1VSSSk7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9hbGxvd190
bHNfY2VydGlmaWNhdGVfZm9yX2hvc3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRhYi0+
d2ViVmlldyksIGNlcnRpZmljYXRlLCB1cmktPmhvc3QpOworICAgICAgICBzb3VwX3VyaV9mcmVl
KHVyaSk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh0YWItPndlYlZpZXcsIGZh
aWxpbmdVUkkpOworICAgIH0KKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKK30KKwor
c3RhdGljIGdib29sZWFuIGxvYWRGYWlsZWRXaXRoVExTZXJyb3JzKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIGNvbnN0IGNoYXIgKmZhaWxpbmdVUkksIEdUbHNDZXJ0aWZpY2F0ZSAqY2VydGlmaWNh
dGUsIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIGVycm9ycywgQnJvd3NlclRhYiAqdGFiKQoreworICAg
IGdjaGFyICp0ZXh0ID0gZ19zdHJkdXBfcHJpbnRmKCJGYWlsZWQgdG8gbG9hZCAlczogRG8geW91
IHdhbnQgdG8gY29udGludWUgaWdub3JpbmcgdGhlIFRMUyBlcnJvcnM/IiwgZmFpbGluZ1VSSSk7
CisgICAgR3RrV2lkZ2V0ICpkaWFsb2cgPSBjcmVhdGVJbmZvQmFyUXVlc3Rpb25NZXNzYWdlKCJJ
bnZhbGlkIFRMUyBDZXJ0aWZpY2F0ZSIsIHRleHQpOworICAgIGdfZnJlZSh0ZXh0KTsKKyAgICBn
X29iamVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKGRpYWxvZyksICJmYWlsaW5nVVJJIiwgZ19z
dHJkdXAoZmFpbGluZ1VSSSksIGdfZnJlZSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChH
X09CSkVDVChkaWFsb2cpLCAiY2VydGlmaWNhdGUiLCBnX29iamVjdF9yZWYoY2VydGlmaWNhdGUp
LCBnX29iamVjdF91bnJlZik7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgInJlc3Bv
bnNlIiwgR19DQUxMQkFDSyh0bHNFcnJvcnNEaWFsb2dSZXNwb25zZSksIHRhYik7CisKKyAgICBn
dGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh0YWIpLCBkaWFsb2csIEZBTFNFLCBGQUxTRSwgMCk7
CisgICAgZ3RrX2JveF9yZW9yZGVyX2NoaWxkKEdUS19CT1godGFiKSwgZGlhbG9nLCAwKTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZCBwZXJtaXNzaW9uUmVxdWVzdERpYWxvZ1Jlc3BvbnNlKEd0a1dpZGdldCAqZGlhbG9n
LCBnaW50IHJlc3BvbnNlLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAg
ICBzd2l0Y2ggKHJlc3BvbnNlKSB7CisgICAgY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgorICAgICAg
ICB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2FsbG93KHJlcXVlc3QpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2Rlbnko
cmVxdWVzdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGd0a193aWRnZXRfZGVzdHJv
eShkaWFsb2cpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gZGVjaWRlUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2Vi
S2l0UGVybWlzc2lvblJlcXVlc3QgKnJlcXVlc3QsIEJyb3dzZXJUYWIgKnRhYikKK3sKKyAgICBj
b25zdCBnY2hhciAqdGl0bGUgPSBOVUxMOworICAgIGdjaGFyICp0ZXh0ID0gTlVMTDsKKworICAg
IGlmIChXRUJLSVRfSVNfR0VPTE9DQVRJT05fUEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKSB7
CisgICAgICAgIHRpdGxlID0gIkdlb2xvY2F0aW9uIHJlcXVlc3QiOworICAgICAgICB0ZXh0ID0g
Z19zdHJkdXAoIkFsbG93IGdlb2xvY2F0aW9uIHJlcXVlc3Q/Iik7CisgICAgfSBlbHNlIGlmIChX
RUJLSVRfSVNfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSkgeworICAg
ICAgICB0aXRsZSA9ICJOb3RpZmljYXRpb24gcmVxdWVzdCI7CisgICAgICAgIHRleHQgPSBnX3N0
cmR1cCgiQWxsb3cgbm90aWZpY2F0aW9ucyByZXF1ZXN0PyIpOworICAgIH0gZWxzZSBpZiAoV0VC
S0lUX0lTX1VTRVJfTUVESUFfUEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKSB7CisgICAgICAg
IHRpdGxlID0gIlVzZXJNZWRpYSByZXF1ZXN0IjsKKyAgICAgICAgZ2Jvb2xlYW4gaXNfZm9yX2F1
ZGlvX2RldmljZSA9IHdlYmtpdF91c2VyX21lZGlhX3Blcm1pc3Npb25faXNfZm9yX2F1ZGlvX2Rl
dmljZShXRUJLSVRfVVNFUl9NRURJQV9QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworICAg
ICAgICBnYm9vbGVhbiBpc19mb3JfdmlkZW9fZGV2aWNlID0gd2Via2l0X3VzZXJfbWVkaWFfcGVy
bWlzc2lvbl9pc19mb3JfdmlkZW9fZGV2aWNlKFdFQktJVF9VU0VSX01FRElBX1BFUk1JU1NJT05f
UkVRVUVTVChyZXF1ZXN0KSk7CisgICAgICAgIGNvbnN0IGNoYXIgKm1lZGlhVHlwZSA9IE5VTEw7
CisgICAgICAgIGlmIChpc19mb3JfYXVkaW9fZGV2aWNlKSB7CisgICAgICAgICAgICBpZiAoaXNf
Zm9yX3ZpZGVvX2RldmljZSkKKyAgICAgICAgICAgICAgICBtZWRpYVR5cGUgPSAiYXVkaW8vdmlk
ZW8iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1lZGlhVHlwZSA9ICJhdWRp
byI7CisgICAgICAgIH0gZWxzZSBpZiAoaXNfZm9yX3ZpZGVvX2RldmljZSkKKyAgICAgICAgICAg
IG1lZGlhVHlwZSA9ICJ2aWRlbyI7CisgICAgICAgIHRleHQgPSBnX3N0cmR1cF9wcmludGYoIkFs
bG93IGFjY2VzcyB0byAlcyBkZXZpY2U/IiwgbWVkaWFUeXBlKTsKKyAgICB9IGVsc2UgaWYgKFdF
QktJVF9JU19JTlNUQUxMX01JU1NJTkdfTUVESUFfUExVR0lOU19QRVJNSVNTSU9OX1JFUVVFU1Qo
cmVxdWVzdCkpIHsKKyAgICAgICAgdGl0bGUgPSAiTWVkaWEgcGx1Z2luIG1pc3NpbmcgcmVxdWVz
dCI7CisgICAgICAgIHRleHQgPSBnX3N0cmR1cF9wcmludGYoIlRoZSBtZWRpYSBiYWNrZW5kIHdh
cyB1bmFibGUgdG8gZmluZCBhIHBsdWdpbiB0byBwbGF5IHRoZSByZXF1ZXN0ZWQgbWVkaWE6XG4l
cy5cbkFsbG93IHRvIHNlYXJjaCBhbmQgaW5zdGFsbCB0aGUgbWlzc2luZyBwbHVnaW4/IiwKKyAg
ICAgICAgICAgIHdlYmtpdF9pbnN0YWxsX21pc3NpbmdfbWVkaWFfcGx1Z2luc19wZXJtaXNzaW9u
X3JlcXVlc3RfZ2V0X2Rlc2NyaXB0aW9uKFdFQktJVF9JTlNUQUxMX01JU1NJTkdfTUVESUFfUExV
R0lOU19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworCisgICAgR3RrV2lkZ2V0ICpkaWFsb2cgPSBjcmVhdGVJbmZvQmFyUXVl
c3Rpb25NZXNzYWdlKHRpdGxlLCB0ZXh0KTsKKyAgICBnX2ZyZWUodGV4dCk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChkaWFsb2csICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0socGVybWlzc2lvblJlcXVl
c3REaWFsb2dSZXNwb25zZSksIGdfb2JqZWN0X3JlZihyZXF1ZXN0KSk7CisKKyAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWCh0YWIpLCBkaWFsb2csIEZBTFNFLCBGQUxTRSwgMCk7CisgICAg
Z3RrX2JveF9yZW9yZGVyX2NoaWxkKEdUS19CT1godGFiKSwgZGlhbG9nLCAwKTsKKyAgICBndGtf
d2lkZ2V0X3Nob3coZGlhbG9nKTsKK30KKworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDEyLCAw
KQorc3RhdGljIHZvaWQgY29sb3JDaG9vc2VyUkdCQUNoYW5nZWQoR3RrQ29sb3JDaG9vc2VyICpj
b2xvckNob29zZXIsIEdQYXJhbVNwZWMgKnBhcmFtU3BlYywgV2ViS2l0Q29sb3JDaG9vc2VyUmVx
dWVzdCAqcmVxdWVzdCkKK3sKKyAgICBHZGtSR0JBIHJnYmE7CisgICAgZ3RrX2NvbG9yX2Nob29z
ZXJfZ2V0X3JnYmEoY29sb3JDaG9vc2VyLCAmcmdiYSk7CisgICAgd2Via2l0X2NvbG9yX2Nob29z
ZXJfcmVxdWVzdF9zZXRfcmdiYShyZXF1ZXN0LCAmcmdiYSk7Cit9CisKK3N0YXRpYyB2b2lkIHBv
cG92ZXJDb2xvckNsb3NlZChHdGtXaWRnZXQgKnBvcG92ZXIsIFdlYktpdENvbG9yQ2hvb3NlclJl
cXVlc3QgKnJlcXVlc3QpCit7CisgICAgd2Via2l0X2NvbG9yX2Nob29zZXJfcmVxdWVzdF9maW5p
c2gocmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9yQ2hvb3NlclJlcXVlc3RGaW5pc2hl
ZChXZWJLaXRDb2xvckNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0LCBHdGtXaWRnZXQgKnBvcG92ZXIp
Cit7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95
KHBvcG92ZXIpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuQ29sb3JDaG9vc2VyQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVzdCAqcmVxdWVz
dCwgQnJvd3NlclRhYiAqdGFiKQoreworICAgIEd0a1dpZGdldCAqcG9wb3ZlciA9IGd0a19wb3Bv
dmVyX25ldyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKKworICAgIEdka1JlY3RhbmdsZSByZWN0YW5n
bGU7CisgICAgd2Via2l0X2NvbG9yX2Nob29zZXJfcmVxdWVzdF9nZXRfZWxlbWVudF9yZWN0YW5n
bGUocmVxdWVzdCwgJnJlY3RhbmdsZSk7CisgICAgZ3RrX3BvcG92ZXJfc2V0X3BvaW50aW5nX3Rv
KEdUS19QT1BPVkVSKHBvcG92ZXIpLCAmcmVjdGFuZ2xlKTsKKworICAgIEd0a1dpZGdldCAqY29s
b3JDaG9vc2VyID0gZ3RrX2NvbG9yX2Nob29zZXJfd2lkZ2V0X25ldygpOworICAgIEdka1JHQkEg
cmdiYTsKKyAgICB3ZWJraXRfY29sb3JfY2hvb3Nlcl9yZXF1ZXN0X2dldF9yZ2JhKHJlcXVlc3Qs
ICZyZ2JhKTsKKyAgICBndGtfY29sb3JfY2hvb3Nlcl9zZXRfcmdiYShHVEtfQ09MT1JfQ0hPT1NF
Uihjb2xvckNob29zZXIpLCAmcmdiYSk7CisgICAgZ19zaWduYWxfY29ubmVjdChjb2xvckNob29z
ZXIsICJub3RpZnk6OnJnYmEiLCBHX0NBTExCQUNLKGNvbG9yQ2hvb3NlclJHQkFDaGFuZ2VkKSwg
cmVxdWVzdCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwb3BvdmVyKSwg
Y29sb3JDaG9vc2VyKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coY29sb3JDaG9vc2VyKTsKKworICAg
IGdfb2JqZWN0X3JlZihyZXF1ZXN0KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChwb3Bv
dmVyLCAiaGlkZSIsIEdfQ0FMTEJBQ0socG9wb3ZlckNvbG9yQ2xvc2VkKSwgcmVxdWVzdCwgMCk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QocmVxdWVzdCwgImZpbmlzaGVkIiwgR19DQUxM
QkFDSyhjb2xvckNob29zZXJSZXF1ZXN0RmluaXNoZWQpLCBwb3BvdmVyLCAwKTsKKworICAgIGd0
a193aWRnZXRfc2hvdyhwb3BvdmVyKTsKKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8q
IEdUS19DSEVDS19WRVJTSU9OKDMsIDEyLCAwKSAqLworCitzdGF0aWMgZ2Jvb2xlYW4gaW5zcGVj
dG9yT3BlbmVkSW5XaW5kb3coV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIEJyb3dzZXJU
YWIgKnRhYikKK3sKKyAgICB0YWItPmluc3BlY3RvcklzVmlzaWJsZSA9IFRSVUU7CisgICAgcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaW5zcGVjdG9yQ2xvc2VkKFdlYktpdFdl
Ykluc3BlY3RvciAqaW5zcGVjdG9yLCBCcm93c2VyVGFiICp0YWIpCit7CisgICAgdGFiLT5pbnNw
ZWN0b3JJc1Zpc2libGUgPSBGQUxTRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2
b2lkIGJyb3dzZXJUYWJTZXRQcm9wZXJ0eShHT2JqZWN0ICpvYmplY3QsIGd1aW50IHByb3BJZCwg
Y29uc3QgR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCit7CisgICAgQnJvd3NlclRh
YiAqdGFiID0gQlJPV1NFUl9UQUIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7Cisg
ICAgY2FzZSBQUk9QX1ZJRVc6CisgICAgICAgIHRhYi0+d2ViVmlldyA9IGdfdmFsdWVfZ2V0X29i
amVjdCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgYnJvd3NlclRhYkZpbmFsaXplKEdPYmplY3QgKmdPYmplY3Qp
Cit7CisgICAgQnJvd3NlclRhYiAqdGFiID0gQlJPV1NFUl9UQUIoZ09iamVjdCk7CisKKyAgICBp
ZiAodGFiLT5mdWxsU2NyZWVuTWVzc2FnZUxhYmVsSWQpCisgICAgICAgIGdfc291cmNlX3JlbW92
ZSh0YWItPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWxJZCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyhi
cm93c2VyX3RhYl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShnT2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgYnJvd3Nlcl90YWJfaW5pdChCcm93c2VyVGFiICp0YWIpCit7CisgICAgZ3RrX29yaWVu
dGFibGVfc2V0X29yaWVudGF0aW9uKEdUS19PUklFTlRBQkxFKHRhYiksIEdUS19PUklFTlRBVElP
Tl9WRVJUSUNBTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb3dzZXJUYWJDb25zdHJ1Y3RlZChHT2Jq
ZWN0ICpnT2JqZWN0KQoreworICAgIEJyb3dzZXJUYWIgKnRhYiA9IEJST1dTRVJfVEFCKGdPYmpl
Y3QpOworCisgICAgR19PQkpFQ1RfQ0xBU1MoYnJvd3Nlcl90YWJfcGFyZW50X2NsYXNzKS0+Y29u
c3RydWN0ZWQoZ09iamVjdCk7CisKKyAgICB0YWItPnNlYXJjaEJhciA9IEJST1dTRVJfU0VBUkNI
X0JBUihicm93c2VyX3NlYXJjaF9iYXJfbmV3KHRhYi0+d2ViVmlldykpOworICAgIGd0a19ib3hf
cGFja19zdGFydChHVEtfQk9YKHRhYiksIEdUS19XSURHRVQodGFiLT5zZWFyY2hCYXIpLCBGQUxT
RSwgRkFMU0UsIDApOworCisgICAgR3RrV2lkZ2V0ICpvdmVybGF5ID0gZ3RrX292ZXJsYXlfbmV3
KCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godGFiKSwgb3ZlcmxheSwgVFJVRSwg
VFJVRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KG92ZXJsYXkpOworCisgICAgdGFiLT5zdGF0
dXNMYWJlbCA9IGd0a19sYWJlbF9uZXcoTlVMTCk7CisgICAgZ3RrX3dpZGdldF9zZXRfaGFsaWdu
KHRhYi0+c3RhdHVzTGFiZWwsIEdUS19BTElHTl9TVEFSVCk7CisgICAgZ3RrX3dpZGdldF9zZXRf
dmFsaWduKHRhYi0+c3RhdHVzTGFiZWwsIEdUS19BTElHTl9FTkQpOworICAgIGd0a193aWRnZXRf
c2V0X21hcmdpbl9sZWZ0KHRhYi0+c3RhdHVzTGFiZWwsIDEpOworICAgIGd0a193aWRnZXRfc2V0
X21hcmdpbl9yaWdodCh0YWItPnN0YXR1c0xhYmVsLCAxKTsKKyAgICBndGtfd2lkZ2V0X3NldF9t
YXJnaW5fdG9wKHRhYi0+c3RhdHVzTGFiZWwsIDEpOworICAgIGd0a193aWRnZXRfc2V0X21hcmdp
bl9ib3R0b20odGFiLT5zdGF0dXNMYWJlbCwgMSk7CisgICAgZ3RrX292ZXJsYXlfYWRkX292ZXJs
YXkoR1RLX09WRVJMQVkob3ZlcmxheSksIHRhYi0+c3RhdHVzTGFiZWwpOworCisgICAgdGFiLT5m
dWxsU2NyZWVuTWVzc2FnZUxhYmVsID0gZ3RrX2xhYmVsX25ldyhOVUxMKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9oYWxpZ24odGFiLT5mdWxsU2NyZWVuTWVzc2FnZUxhYmVsLCBHVEtfQUxJR05fQ0VO
VEVSKTsKKyAgICBndGtfd2lkZ2V0X3NldF92YWxpZ24odGFiLT5mdWxsU2NyZWVuTWVzc2FnZUxh
YmVsLCBHVEtfQUxJR05fQ0VOVEVSKTsKKyAgICBndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbCh0
YWItPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWwsIFRSVUUpOworICAgIGd0a19vdmVybGF5X2FkZF9v
dmVybGF5KEdUS19PVkVSTEFZKG92ZXJsYXkpLCB0YWItPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWwp
OworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihvdmVybGF5KSwgR1RLX1dJ
REdFVCh0YWItPndlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVCh0YWIt
PndlYlZpZXcpKTsKKworICAgIHRhYi0+dGl0bGVCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5U
QVRJT05fSE9SSVpPTlRBTCwgNCk7CisKKyAgICBHdGtXaWRnZXQgKmhib3ggPSBndGtfYm94X25l
dyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgNik7CisgICAgZ3RrX3dpZGdldF9zZXRfaGFs
aWduKGhib3gsIEdUS19BTElHTl9DRU5URVIpOworCisgICAgdGFiLT50aXRsZVNwaW5uZXIgPSBn
dGtfc3Bpbm5lcl9uZXcoKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwg
dGFiLT50aXRsZVNwaW5uZXIsIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICB0YWItPnRpdGxlTGFi
ZWwgPSBndGtfbGFiZWxfbmV3KE5VTEwpOworICAgIGd0a19sYWJlbF9zZXRfZWxsaXBzaXplKEdU
S19MQUJFTCh0YWItPnRpdGxlTGFiZWwpLCBQQU5HT19FTExJUFNJWkVfRU5EKTsKKyAgICBndGtf
bGFiZWxfc2V0X3NpbmdsZV9saW5lX21vZGUoR1RLX0xBQkVMKHRhYi0+dGl0bGVMYWJlbCksIFRS
VUUpOworICAgIGd0a19taXNjX3NldF9wYWRkaW5nKEdUS19NSVNDKHRhYi0+dGl0bGVMYWJlbCks
IDAsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCB0YWItPnRpdGxl
TGFiZWwsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHRhYi0+dGl0bGVM
YWJlbCk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh0YWItPnRpdGxlQm94KSwg
aGJveCwgVFJVRSwgVFJVRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGhib3gpOworCisgICAg
dGFiLT50aXRsZUNsb3NlQnV0dG9uID0gZ3RrX2J1dHRvbl9uZXcoKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQodGFiLT50aXRsZUNsb3NlQnV0dG9uLCAiY2xpY2tlZCIsIEdfQ0FMTEJB
Q0soZ3RrX3dpZGdldF9kZXN0cm95KSwgdGFiKTsKKyAgICBndGtfYnV0dG9uX3NldF9yZWxpZWYo
R1RLX0JVVFRPTih0YWItPnRpdGxlQ2xvc2VCdXR0b24pLCBHVEtfUkVMSUVGX05PTkUpOworICAg
IGd0a19idXR0b25fc2V0X2ZvY3VzX29uX2NsaWNrKEdUS19CVVRUT04odGFiLT50aXRsZUNsb3Nl
QnV0dG9uKSwgRkFMU0UpOworCisgICAgR3RrV2lkZ2V0ICppbWFnZSA9IGd0a19pbWFnZV9uZXdf
ZnJvbV9pY29uX25hbWUoIndpbmRvdy1jbG9zZS1zeW1ib2xpYyIsIEdUS19JQ09OX1NJWkVfTUVO
VSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih0YWItPnRpdGxlQ2xvc2VC
dXR0b24pLCBpbWFnZSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGltYWdlKTsKKworICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKHRhYi0+dGl0bGVCb3gpLCB0YWItPnRpdGxlQ2xvc2VCdXR0
b24sIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHRhYi0+dGl0bGVDbG9z
ZUJ1dHRvbik7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRhYi0+d2ViVmlldywgIm5vdGlmeTo6
dGl0bGUiLCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRhYik7CisgICAgZ19zaWduYWxfY29u
bmVjdCh0YWItPndlYlZpZXcsICJub3RpZnk6OmlzLWxvYWRpbmciLCBHX0NBTExCQUNLKGlzTG9h
ZGluZ0NoYW5nZWQpLCB0YWIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGFiLT53ZWJWaWV3LCAi
ZGVjaWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5KSwgdGFiKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHRhYi0+d2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9h
ZENoYW5nZWQpLCB0YWIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGFiLT53ZWJWaWV3LCAibG9h
ZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkV2l0aFRMU2Vy
cm9ycyksIHRhYik7CisgICAgZ19zaWduYWxfY29ubmVjdCh0YWItPndlYlZpZXcsICJwZXJtaXNz
aW9uLXJlcXVlc3QiLCBHX0NBTExCQUNLKGRlY2lkZVBlcm1pc3Npb25SZXF1ZXN0KSwgdGFiKTsK
KyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMiwgMCkKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRh
Yi0+d2ViVmlldywgInJ1bi1jb2xvci1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5Db2xvckNob29z
ZXJDYWxsYmFjayksIHRhYik7CisjZW5kaWYKKworICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5z
cGVjdG9yID0gd2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IodGFiLT53ZWJWaWV3KTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGluc3BlY3RvciwgIm9wZW4td2luZG93IiwgR19DQUxMQkFDSyhp
bnNwZWN0b3JPcGVuZWRJbldpbmRvdyksIHRhYik7CisgICAgZ19zaWduYWxfY29ubmVjdChpbnNw
ZWN0b3IsICJjbG9zZWQiLCBHX0NBTExCQUNLKGluc3BlY3RvckNsb3NlZCksIHRhYik7CisKKyAg
ICBpZiAod2Via2l0X3dlYl92aWV3X2lzX2VkaXRhYmxlKHRhYi0+d2ViVmlldykpCisgICAgICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwodGFiLT53ZWJWaWV3LCAiPGh0bWw+PC9odG1sPiIs
ICJmaWxlOi8vLyIpOworfQorCitzdGF0aWMgdm9pZCBicm93c2VyX3RhYl9jbGFzc19pbml0KEJy
b3dzZXJUYWJDbGFzcyAqa2xhc3MpCit7CisgICAgR09iamVjdENsYXNzICpnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9
IGJyb3dzZXJUYWJDb25zdHJ1Y3RlZDsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IGJyb3dzZXJUYWJTZXRQcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gYnJv
d3NlclRhYkZpbmFsaXplOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZJRVcsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmlldyIsCisgICAgICAgICAgICAiVmlldyIs
CisgICAgICAgICAgICAiVGhlIHdlYiB2aWV3IG9mIHRoaXMgdGFiIiwKKyAgICAgICAgICAgIFdF
QktJVF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAgICAgR19QQVJBTV9XUklUQUJMRSB8IEdfUEFS
QU1fQ09OU1RSVUNUX09OTFkpKTsKK30KKworc3RhdGljIGNoYXIgKmdldEludGVybmFsVVJJKGNv
bnN0IGNoYXIgKnVyaSkKK3sKKyAgICAvKiBJbnRlcm5hbGx5IHdlIHVzZSBtaW5pYnJvd3Nlci1h
Ym91dDogYXMgYWJvdXQ6IHByZWZpeCBpcyBpZ25vcmVkIGJ5IFdlYktpdC4gKi8KKyAgICBpZiAo
Z19zdHJfaGFzX3ByZWZpeCh1cmksICJhYm91dDoiKSAmJiAhZ19zdHJfZXF1YWwodXJpLCAiYWJv
dXQ6YmxhbmsiKSkKKyAgICAgICAgcmV0dXJuIGdfc3RyY29uY2F0KEJST1dTRVJfQUJPVVRfU0NI
RU1FLCB1cmkgKyBzdHJsZW4gKCJhYm91dCIpLCBOVUxMKTsKKworICAgIHJldHVybiBnX3N0cmR1
cCh1cmkpOworfQorCisvKiBQdWJsaWMgQVBJLiAqLworR3RrV2lkZ2V0ICpicm93c2VyX3RhYl9u
ZXcoV2ViS2l0V2ViVmlldyAqdmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcodmlldyksIE5VTEwpOworCisgICAgcmV0dXJuIEdUS19XSURHRVQoZ19v
YmplY3RfbmV3KEJST1dTRVJfVFlQRV9UQUIsICJ2aWV3IiwgdmlldywgTlVMTCkpOworfQorCitX
ZWJLaXRXZWJWaWV3ICpicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXcoQnJvd3NlclRhYiAqdGFiKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEJST1dTRVJfSVNfVEFCKHRhYiksIE5VTEwpOwor
CisgICAgcmV0dXJuIHRhYi0+d2ViVmlldzsKK30KKwordm9pZCBicm93c2VyX3RhYl9sb2FkX3Vy
aShCcm93c2VyVGFiICp0YWIsIGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKEJST1dTRVJfSVNfVEFCKHRhYikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKKwor
ICAgIGlmICghZ19zdHJfaGFzX3ByZWZpeCh1cmksICJqYXZhc2NyaXB0OiIpKSB7CisgICAgICAg
IGNoYXIgKmludGVybmFsVVJJID0gZ2V0SW50ZXJuYWxVUkkodXJpKTsKKyAgICAgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHRhYi0+d2ViVmlldywgaW50ZXJuYWxVUkkpOworICAgICAgICBn
X2ZyZWUoaW50ZXJuYWxVUkkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2Via2l0
X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0KHRhYi0+d2ViVmlldywgc3Ryc3RyKHVyaSwgImphdmFz
Y3JpcHQ6IiksIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitHdGtXaWRnZXQgKmJyb3dzZXJfdGFi
X2dldF90aXRsZV93aWRnZXQoQnJvd3NlclRhYiAqdGFiKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKEJST1dTRVJfSVNfVEFCKHRhYiksIE5VTEwpOworCisgICAgcmV0dXJuIHRhYi0+dGl0
bGVCb3g7Cit9CisKK3ZvaWQgYnJvd3Nlcl90YWJfc2V0X3N0YXR1c190ZXh0KEJyb3dzZXJUYWIg
KnRhYiwgY29uc3QgY2hhciAqdGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEJST1dTRVJf
SVNfVEFCKHRhYikpOworCisgICAgZ3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTCh0YWItPnN0
YXR1c0xhYmVsKSwgdGV4dCk7CisgICAgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZSh0YWItPnN0YXR1
c0xhYmVsLCAhIXRleHQpOworfQorCit2b2lkIGJyb3dzZXJfdGFiX3RvZ2dsZV9pbnNwZWN0b3Io
QnJvd3NlclRhYiAqdGFiKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoQlJPV1NFUl9JU19UQUIo
dGFiKSk7CisKKyAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtpdF93ZWJf
dmlld19nZXRfaW5zcGVjdG9yKHRhYi0+d2ViVmlldyk7CisgICAgaWYgKCF0YWItPmluc3BlY3Rv
cklzVmlzaWJsZSkgeworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93KGluc3BlY3Rv
cik7CisgICAgICAgIHRhYi0+aW5zcGVjdG9ySXNWaXNpYmxlID0gVFJVRTsKKyAgICB9IGVsc2UK
KyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UoaW5zcGVjdG9yKTsKK30KKwordm9p
ZCBicm93c2VyX3RhYl9zdGFydF9zZWFyY2goQnJvd3NlclRhYiAqdGFiKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoQlJPV1NFUl9JU19UQUIodGFiKSk7CisKKyAgICBpZiAoIWd0a193aWRnZXRf
Z2V0X3Zpc2libGUoR1RLX1dJREdFVCh0YWItPnNlYXJjaEJhcikpKQorICAgICAgICBicm93c2Vy
X3NlYXJjaF9iYXJfb3Blbih0YWItPnNlYXJjaEJhcik7Cit9CisKK3ZvaWQgYnJvd3Nlcl90YWJf
c3RvcF9zZWFyY2goQnJvd3NlclRhYiAqdGFiKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoQlJP
V1NFUl9JU19UQUIodGFiKSk7CisKKyAgICBpZiAoZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShHVEtf
V0lER0VUKHRhYi0+c2VhcmNoQmFyKSkpCisgICAgICAgIGJyb3dzZXJfc2VhcmNoX2Jhcl9jbG9z
ZSh0YWItPnNlYXJjaEJhcik7Cit9CisKK3ZvaWQgYnJvd3Nlcl90YWJfYWRkX2FjY2VsZXJhdG9y
cyhCcm93c2VyVGFiICp0YWIsIEd0a0FjY2VsR3JvdXAgKmFjY2VsR3JvdXApCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChCUk9XU0VSX0lTX1RBQih0YWIpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KEdUS19JU19BQ0NFTF9HUk9VUChhY2NlbEdyb3VwKSk7CisKKyAgICBicm93c2VyX3NlYXJjaF9i
YXJfYWRkX2FjY2VsZXJhdG9ycyh0YWItPnNlYXJjaEJhciwgYWNjZWxHcm91cCk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBmdWxsU2NyZWVuTWVzc2FnZVRpbWVvdXRDYWxsYmFjayhCcm93c2VyVGFi
ICp0YWIpCit7CisgICAgZ3RrX3dpZGdldF9oaWRlKHRhYi0+ZnVsbFNjcmVlbk1lc3NhZ2VMYWJl
bCk7CisgICAgdGFiLT5mdWxsU2NyZWVuTWVzc2FnZUxhYmVsSWQgPSAwOworICAgIHJldHVybiBG
QUxTRTsKK30KKwordm9pZCBicm93c2VyX3RhYl9lbnRlcl9mdWxsc2NyZWVuKEJyb3dzZXJUYWIg
KnRhYikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEJST1dTRVJfSVNfVEFCKHRhYikpOworCisg
ICAgY29uc3QgZ2NoYXIgKnRpdGxlT3JVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRh
Yi0+d2ViVmlldyk7CisgICAgaWYgKCF0aXRsZU9yVVJJIHx8ICF0aXRsZU9yVVJJWzBdKQorICAg
ICAgICB0aXRsZU9yVVJJID0gd2Via2l0X3dlYl92aWV3X2dldF91cmkodGFiLT53ZWJWaWV3KTsK
KworICAgIGdjaGFyICptZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmKCIlcyBpcyBub3cgZnVsbCBz
Y3JlZW4uIFByZXNzIEVTQyBvciBmIHRvIGV4aXQuIiwgdGl0bGVPclVSSSk7CisgICAgZ3RrX2xh
YmVsX3NldF90ZXh0KEdUS19MQUJFTCh0YWItPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWwpLCBtZXNz
YWdlKTsKKyAgICBnX2ZyZWUobWVzc2FnZSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3codGFiLT5m
dWxsU2NyZWVuTWVzc2FnZUxhYmVsKTsKKworICAgIHRhYi0+ZnVsbFNjcmVlbk1lc3NhZ2VMYWJl
bElkID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKDIsIChHU291cmNlRnVuYylmdWxsU2NyZWVuTWVz
c2FnZVRpbWVvdXRDYWxsYmFjaywgdGFiKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZCh0
YWItPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWxJZCwgIltXZWJLaXRdIGZ1bGxTY3JlZW5NZXNzYWdl
VGltZW91dENhbGxiYWNrIik7CisKKyAgICB0YWItPndhc1NlYXJjaGluZ1doZW5FbnRlcmVkRnVs
bHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoR1RLX1dJREdFVCh0YWItPnNlYXJjaEJh
cikpOworICAgIGJyb3dzZXJfdGFiX3N0b3Bfc2VhcmNoKHRhYik7Cit9CisKK3ZvaWQgYnJvd3Nl
cl90YWJfbGVhdmVfZnVsbHNjcmVlbihCcm93c2VyVGFiICp0YWIpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChCUk9XU0VSX0lTX1RBQih0YWIpKTsKKworICAgIGlmICh0YWItPmZ1bGxTY3JlZW5N
ZXNzYWdlTGFiZWxJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUodGFiLT5mdWxsU2NyZWVu
TWVzc2FnZUxhYmVsSWQpOworICAgICAgICB0YWItPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWxJZCA9
IDA7CisgICAgfQorCisgICAgZ3RrX3dpZGdldF9oaWRlKHRhYi0+ZnVsbFNjcmVlbk1lc3NhZ2VM
YWJlbCk7CisKKyAgICBpZiAodGFiLT53YXNTZWFyY2hpbmdXaGVuRW50ZXJlZEZ1bGxzY3JlZW4p
IHsKKyAgICAgICAgLyogT3BlbmluZyB0aGUgc2VhcmNoIGJhciBzdGVhbHMgdGhlIGZvY3VzLiBV
c3VhbGx5LCB3ZSB3YW50CisgICAgICAgICAqIHRoaXMgYnV0IG5vdCB3aGVuIGNvbWluZyBiYWNr
IGZyb20gZnVsbHNjcmVlbi4KKyAgICAgICAgICovCisgICAgICAgIEd0a1dpbmRvdyAqd2luZG93
ID0gR1RLX1dJTkRPVyhndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHRhYikpKTsK
KyAgICAgICAgR3RrV2lkZ2V0ICpmb2N1c1dpZGdldCA9IGd0a193aW5kb3dfZ2V0X2ZvY3VzKHdp
bmRvdyk7CisgICAgICAgIGJyb3dzZXJfdGFiX3N0YXJ0X3NlYXJjaCh0YWIpOworICAgICAgICBn
dGtfd2luZG93X3NldF9mb2N1cyh3aW5kb3csIGZvY3VzV2lkZ2V0KTsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclRhYi5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL0Jyb3dzZXJUYWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45ZDU3Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dz
ZXJUYWIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnJvd3NlclRhYl9oCisjZGVmaW5lIEJyb3dzZXJU
YWJfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgQlJPV1NFUl9UWVBFX1RBQiAgICAgICAgICAg
IChicm93c2VyX3RhYl9nZXRfdHlwZSgpKQorI2RlZmluZSBCUk9XU0VSX1RBQihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBCUk9XU0VSX1RZUEVfVEFC
LCBCcm93c2VyVGFiKSkKKyNkZWZpbmUgQlJPV1NFUl9UQUJfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgQlJPV1NFUl9UWVBFX1RBQiwgQnJvd3NlclRh
YkNsYXNzKSkKKyNkZWZpbmUgQlJPV1NFUl9JU19UQUIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgQlJPV1NFUl9UWVBFX1RBQikpCisjZGVmaW5lIEJST1dT
RVJfSVNfVEFCX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IEJST1dTRVJfVFlQRV9UQUIpKQorI2RlZmluZSBCUk9XU0VSX1RBQl9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBCUk9XU0VSX1RZUEVfVEFCLCBCcm93
c2VyVGFiQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfQnJvd3NlclRhYiAgICAgICAgQnJvd3Nl
clRhYjsKK3R5cGVkZWYgc3RydWN0IF9Ccm93c2VyVGFiQ2xhc3MgICBCcm93c2VyVGFiQ2xhc3M7
CisKK0dUeXBlIGJyb3dzZXJfdGFiX2dldF90eXBlKHZvaWQpOworCitHdGtXaWRnZXQqIGJyb3dz
ZXJfdGFiX25ldyhXZWJLaXRXZWJWaWV3Kik7CitXZWJLaXRXZWJWaWV3KiBicm93c2VyX3RhYl9n
ZXRfd2ViX3ZpZXcoQnJvd3NlclRhYiopOwordm9pZCBicm93c2VyX3RhYl9sb2FkX3VyaShCcm93
c2VyVGFiKiwgY29uc3QgY2hhciogdXJpKTsKK0d0a1dpZGdldCAqYnJvd3Nlcl90YWJfZ2V0X3Rp
dGxlX3dpZGdldChCcm93c2VyVGFiKik7Cit2b2lkIGJyb3dzZXJfdGFiX3NldF9zdGF0dXNfdGV4
dChCcm93c2VyVGFiKiwgY29uc3QgY2hhciogdGV4dCk7Cit2b2lkIGJyb3dzZXJfdGFiX3RvZ2ds
ZV9pbnNwZWN0b3IoQnJvd3NlclRhYiopOwordm9pZCBicm93c2VyX3RhYl9zdGFydF9zZWFyY2go
QnJvd3NlclRhYiopOwordm9pZCBicm93c2VyX3RhYl9zdG9wX3NlYXJjaChCcm93c2VyVGFiKik7
Cit2b2lkIGJyb3dzZXJfdGFiX2FkZF9hY2NlbGVyYXRvcnMoQnJvd3NlclRhYiosIEd0a0FjY2Vs
R3JvdXAqKTsKK3ZvaWQgYnJvd3Nlcl90YWJfZW50ZXJfZnVsbHNjcmVlbihCcm93c2VyVGFiKik7
Cit2b2lkIGJyb3dzZXJfdGFiX2xlYXZlX2Z1bGxzY3JlZW4oQnJvd3NlclRhYiopOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyV2luZG93LmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCmluZGV4
IGQ5Y2NlOGIuLmY1ZTEwNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyV2luZG93LmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwpA
QCAtMzMsMTUgKzMzLDEwIEBACiAjaW5jbHVkZSAiQnJvd3NlckRvd25sb2Fkc0Jhci5oIgogI2lu
Y2x1ZGUgIkJyb3dzZXJTZWFyY2hCYXIuaCIKICNpbmNsdWRlICJCcm93c2VyU2V0dGluZ3NEaWFs
b2cuaCIKKyNpbmNsdWRlICJCcm93c2VyVGFiLmgiCiAjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMu
aD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotZW51bSB7Ci0gICAgUFJPUF8wLAotCi0gICAgUFJP
UF9WSUVXCi19OwotCiBzdHJ1Y3QgX0Jyb3dzZXJXaW5kb3cgewogICAgIEd0a1dpbmRvdyBwYXJl
bnQ7CiAKQEAgLTU3LDE5ICs1MiwxNSBAQCBzdHJ1Y3QgX0Jyb3dzZXJXaW5kb3cgewogICAgIEd0
a1dpZGdldCAqaXRhbGljSXRlbTsKICAgICBHdGtXaWRnZXQgKnVuZGVybGluZUl0ZW07CiAgICAg
R3RrV2lkZ2V0ICpzdHJpa2V0aHJvdWdoSXRlbTsKLSAgICBHdGtXaWRnZXQgKnN0YXR1c0xhYmVs
OwogICAgIEd0a1dpZGdldCAqc2V0dGluZ3NEaWFsb2c7Ci0gICAgV2ViS2l0V2ViVmlldyAqd2Vi
VmlldzsKKyAgICBHdGtXaWRnZXQgKm5vdGVib29rOworICAgIEJyb3dzZXJUYWIgKmFjdGl2ZVRh
YjsKICAgICBHdGtXaWRnZXQgKmRvd25sb2Fkc0JhcjsKLSAgICBCcm93c2VyU2VhcmNoQmFyICpz
ZWFyY2hCYXI7CiAgICAgZ2Jvb2xlYW4gc2VhcmNoQmFyVmlzaWJsZTsKLSAgICBnYm9vbGVhbiBp
bnNwZWN0b3JXaW5kb3dJc1Zpc2libGU7CiAgICAgZ2Jvb2xlYW4gZnVsbFNjcmVlbklzRW5hYmxl
ZDsKICAgICBHZGtQaXhidWYgKmZhdmljb247CiAgICAgR3RrV2lkZ2V0ICpyZWxvYWRPclN0b3BC
dXR0b247Ci0gICAgR3RrV2lkZ2V0ICpmdWxsU2NyZWVuTWVzc2FnZUxhYmVsOwogICAgIEd0a1dp
bmRvdyAqcGFyZW50V2luZG93OwotICAgIGd1aW50IGZ1bGxTY3JlZW5NZXNzYWdlTGFiZWxJZDsK
ICAgICBndWludCByZXNldEVudHJ5UHJvZ3Jlc3NUaW1lb3V0SWQ7CiAgICAgZ2NoYXIgKnNlc3Np
b25GaWxlOwogfTsKQEAgLTc5LDcgKzcwLDYgQEAgc3RydWN0IF9Ccm93c2VyV2luZG93Q2xhc3Mg
ewogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRXaW5kb3dUaXRsZSA9ICJXZWJLaXRH
VEsrIE1pbmlCcm93c2VyIjsKLXN0YXRpYyBjb25zdCBjaGFyICptaW5pQnJvd3NlckFib3V0U2No
ZW1lID0gIm1pbmlicm93c2VyLWFib3V0IjsKIHN0YXRpYyBjb25zdCBnZG91YmxlIG1pbmltdW1a
b29tTGV2ZWwgPSAwLjU7CiBzdGF0aWMgY29uc3QgZ2RvdWJsZSBtYXhpbXVtWm9vbUxldmVsID0g
MzsKIHN0YXRpYyBjb25zdCBnZG91YmxlIGRlZmF1bHRab29tTGV2ZWwgPSAxOwpAQCAtODgsMjgg
Kzc4LDE4IEBAIHN0YXRpYyBnaW50IHdpbmRvd0NvdW50ID0gMDsKIAogR19ERUZJTkVfVFlQRShC
cm93c2VyV2luZG93LCBicm93c2VyX3dpbmRvdywgR1RLX1RZUEVfV0lORE9XKQogCi1zdGF0aWMg
Y2hhciAqZ2V0SW50ZXJuYWxVUkkoY29uc3QgY2hhciAqdXJpKQotewotICAgIC8vIEludGVybmFs
bHkgd2UgdXNlIG1pbmlicm93c2VyLWFib3V0OiBhcyBhYm91dDogcHJlZml4IGlzIGlnbm9yZWQg
YnkgV2ViS2l0LgotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHVyaSwgImFib3V0OiIpICYmICFn
X3N0cl9lcXVhbCh1cmksICJhYm91dDpibGFuayIpKQotICAgICAgICByZXR1cm4gZ19zdHJjb25j
YXQobWluaUJyb3dzZXJBYm91dFNjaGVtZSwgdXJpICsgc3RybGVuICgiYWJvdXQiKSwgTlVMTCk7
Ci0KLSAgICByZXR1cm4gZ19zdHJkdXAodXJpKTsKLX0KLQogc3RhdGljIGNoYXIgKmdldEV4dGVy
bmFsVVJJKGNvbnN0IGNoYXIgKnVyaSkKIHsKLSAgICAvLyBGcm9tIHRoZSB1c2VyIHBvaW50IG9m
IHZpZXcgd2Ugc3VwcG9ydCBhYm91dDogcHJlZml4LgotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4
KHVyaSwgbWluaUJyb3dzZXJBYm91dFNjaGVtZSkpCi0gICAgICAgIHJldHVybiBnX3N0cmNvbmNh
dCgiYWJvdXQiLCB1cmkgKyBzdHJsZW4obWluaUJyb3dzZXJBYm91dFNjaGVtZSksIE5VTEwpOwor
ICAgIC8qIEZyb20gdGhlIHVzZXIgcG9pbnQgb2YgdmlldyB3ZSBzdXBwb3J0IGFib3V0OiBwcmVm
aXguICovCisgICAgaWYgKHVyaSAmJiBnX3N0cl9oYXNfcHJlZml4KHVyaSwgQlJPV1NFUl9BQk9V
VF9TQ0hFTUUpKQorICAgICAgICByZXR1cm4gZ19zdHJjb25jYXQoImFib3V0IiwgdXJpICsgc3Ry
bGVuKEJST1dTRVJfQUJPVVRfU0NIRU1FKSwgTlVMTCk7CiAKICAgICByZXR1cm4gZ19zdHJkdXAo
dXJpKTsKIH0KIAogc3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd1NldFN0YXR1c1RleHQoQnJvd3Nl
cldpbmRvdyAqd2luZG93LCBjb25zdCBjaGFyICp0ZXh0KQogewotICAgIGd0a19sYWJlbF9zZXRf
dGV4dChHVEtfTEFCRUwod2luZG93LT5zdGF0dXNMYWJlbCksIHRleHQpOwotICAgIGd0a193aWRn
ZXRfc2V0X3Zpc2libGUod2luZG93LT5zdGF0dXNMYWJlbCwgISF0ZXh0KTsKKyAgICBicm93c2Vy
X3RhYl9zZXRfc3RhdHVzX3RleHQod2luZG93LT5hY3RpdmVUYWIsIHRleHQpOwogfQogCiBzdGF0
aWMgdm9pZCByZXNldFN0YXR1c1RleHQoR3RrV2lkZ2V0ICp3aWRnZXQsIEJyb3dzZXJXaW5kb3cg
KndpbmRvdykKQEAgLTEyNCwyMCArMTA0LDIzIEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJpRW50
cnlDYWxsYmFjayhCcm93c2VyV2luZG93ICp3aW5kb3cpCiAKIHN0YXRpYyB2b2lkIHJlbG9hZE9y
U3RvcENhbGxiYWNrKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBpZiAod2Via2l0X3dl
Yl92aWV3X2lzX2xvYWRpbmcod2luZG93LT53ZWJWaWV3KSkKLSAgICAgICAgd2Via2l0X3dlYl92
aWV3X3N0b3BfbG9hZGluZyh3aW5kb3ctPndlYlZpZXcpOworICAgIFdlYktpdFdlYlZpZXcgKndl
YlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIpOworICAg
IGlmICh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSkKKyAgICAgICAgd2Via2l0
X3dlYl92aWV3X3N0b3BfbG9hZGluZyh3ZWJWaWV3KTsKICAgICBlbHNlCi0gICAgICAgIHdlYmtp
dF93ZWJfdmlld19yZWxvYWQod2luZG93LT53ZWJWaWV3KTsKKyAgICAgICAgd2Via2l0X3dlYl92
aWV3X3JlbG9hZCh3ZWJWaWV3KTsKIH0KIAogc3RhdGljIHZvaWQgZ29CYWNrQ2FsbGJhY2soQnJv
d3NlcldpbmRvdyAqd2luZG93KQogewotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHdpbmRv
dy0+d2ViVmlldyk7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGJyb3dzZXJfdGFiX2dl
dF93ZWJfdmlldyh3aW5kb3ctPmFjdGl2ZVRhYik7CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2Jh
Y2sod2ViVmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkIGdvRm9yd2FyZENhbGxiYWNrKEJyb3dzZXJX
aW5kb3cgKndpbmRvdykKIHsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCh3aW5kb3ct
PndlYlZpZXcpOworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRf
d2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3
YXJkKHdlYlZpZXcpOwogfQogCiBzdGF0aWMgdm9pZCBzZXR0aW5nc0NhbGxiYWNrKEJyb3dzZXJX
aW5kb3cgKndpbmRvdykKQEAgLTE0Nyw3ICsxMzAsOCBAQCBzdGF0aWMgdm9pZCBzZXR0aW5nc0Nh
bGxiYWNrKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHdpbmRvdy0+c2V0dGluZ3NEaWFsb2cgPSBicm93c2VyX3NldHRpbmdzX2RpYWxvZ19uZXco
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3aW5kb3ctPndlYlZpZXcpKTsKKyAgICBXZWJL
aXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0
aXZlVGFiKTsKKyAgICB3aW5kb3ctPnNldHRpbmdzRGlhbG9nID0gYnJvd3Nlcl9zZXR0aW5nc19k
aWFsb2dfbmV3KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOwogICAgIGd0
a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh3aW5kb3ctPnNldHRpbmdzRGlh
bG9nKSwgR1RLX1dJTkRPVyh3aW5kb3cpKTsKICAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVy
KEdfT0JKRUNUKHdpbmRvdy0+c2V0dGluZ3NEaWFsb2cpLCAoZ3BvaW50ZXIgKikmd2luZG93LT5z
ZXR0aW5nc0RpYWxvZyk7CiAgICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+c2V0dGluZ3NEaWFs
b2cpOwpAQCAtMTU2LDggKzE0MCwxMSBAQCBzdGF0aWMgdm9pZCBzZXR0aW5nc0NhbGxiYWNrKEJy
b3dzZXJXaW5kb3cgKndpbmRvdykKIHN0YXRpYyB2b2lkIHdlYlZpZXdVUklDaGFuZ2VkKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVjLCBCcm93c2VyV2luZG93ICp3aW5k
b3cpCiB7CiAgICAgY2hhciAqZXh0ZXJuYWxVUkkgPSBnZXRFeHRlcm5hbFVSSSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Ci0gICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRS
WSh3aW5kb3ctPnVyaUVudHJ5KSwgZXh0ZXJuYWxVUkkpOwotICAgIGdfZnJlZShleHRlcm5hbFVS
SSk7CisgICAgaWYgKGV4dGVybmFsVVJJKSB7CisgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChH
VEtfRU5UUlkod2luZG93LT51cmlFbnRyeSksIGV4dGVybmFsVVJJKTsKKyAgICAgICAgZ19mcmVl
KGV4dGVybmFsVVJJKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdU
S19FTlRSWSh3aW5kb3ctPnVyaUVudHJ5KSwgIiIpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJWaWV3
VGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVjLCBC
cm93c2VyV2luZG93ICp3aW5kb3cpCkBAIC0yMDcsNyArMTk0LDggQEAgc3RhdGljIHZvaWQgYnJv
d3NlcldpbmRvd0hpc3RvcnlJdGVtQWN0aXZhdGVkKEJyb3dzZXJXaW5kb3cgKndpbmRvdywgR3Rr
QWN0aW9uICoKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYmtpdF93
ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtKHdpbmRvdy0+d2ViVmlldywgaXRl
bSk7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGJyb3dzZXJfdGFiX2dldF93ZWJfdmll
dyh3aW5kb3ctPmFjdGl2ZVRhYik7CisgICAgd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW0od2ViVmlldywgaXRlbSk7CiB9CiAKIHN0YXRpYyBHdGtXaWRnZXQgKmJy
b3dzZXJXaW5kb3dDcmVhdGVCYWNrRm9yd2FyZE1lbnUoQnJvd3NlcldpbmRvdyAqd2luZG93LCBH
TGlzdCAqbGlzdCkKQEAgLTI0MSw4ICsyMjksOSBAQCBzdGF0aWMgR3RrV2lkZ2V0ICpicm93c2Vy
V2luZG93Q3JlYXRlQmFja0ZvcndhcmRNZW51KEJyb3dzZXJXaW5kb3cgKndpbmRvdywgR0xpcwog
CiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93VXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoQnJvd3Nl
cldpbmRvdyAqd2luZG93LCBXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YWRsaXN0KQog
ewotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aW5kb3ctPmJhY2tJdGVtLCB3ZWJraXRf
d2ViX3ZpZXdfY2FuX2dvX2JhY2sod2luZG93LT53ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9z
ZXRfc2Vuc2l0aXZlKHdpbmRvdy0+Zm9yd2FyZEl0ZW0sIHdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZCh3aW5kb3ctPndlYlZpZXcpKTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0g
YnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9zZW5zaXRpdmUod2luZG93LT5iYWNrSXRlbSwgd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2luZG93LT5m
b3J3YXJkSXRlbSwgd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKIAog
ICAgIEdMaXN0ICpsaXN0ID0gZ19saXN0X3JldmVyc2Uod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdChiYWNrRm9yd2FkbGlzdCwgMTApKTsKICAgICBndGtf
bWVudV90b29sX2J1dHRvbl9zZXRfbWVudShHVEtfTUVOVV9UT09MX0JVVFRPTih3aW5kb3ctPmJh
Y2tJdGVtKSwKQEAgLTI2MCwyMSArMjQ5LDYgQEAgc3RhdGljIHZvaWQgYmFja0ZvcndhZGxpc3RD
aGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqYmFja0ZvcndhZGxpc3QsIFdlYktpdEIKICAg
ICBicm93c2VyV2luZG93VXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMod2luZG93LCBiYWNrRm9yd2Fk
bGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcm1pc3Npb25SZXF1ZXN0RGlhbG9nQ2FsbGJhY2so
R3RrRGlhbG9nICpkaWFsb2csIGdpbnQgcmVzcG9uc2UsIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0
ICpyZXF1ZXN0KQotewotICAgIHN3aXRjaCAocmVzcG9uc2UpIHsKLSAgICBjYXNlIEdUS19SRVNQ
T05TRV9ZRVM6Ci0gICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfYWxsb3cocmVxdWVz
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHdlYmtpdF9wZXJtaXNz
aW9uX3JlcXVlc3RfZGVueShyZXF1ZXN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
Z3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYocmVxdWVzdCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHdlYlZpZXdDbG9zZShXZWJLaXRXZWJWaWV3
ICp3ZWJWaWV3LCBCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7CiAgICAgZ3RrX3dpZGdldF9kZXN0
cm95KEdUS19XSURHRVQod2luZG93KSk7CkBAIC0zMDgsMTY5ICsyODIsNTkgQEAgc3RhdGljIHZv
aWQgd2ViVmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEJyb3dzZXJXaW5k
b3cgKndpbmRvdykKICAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVCh3aW5kb3cpKTsKIH0K
IAotc3RhdGljIGdib29sZWFuIGZ1bGxTY3JlZW5NZXNzYWdlVGltZW91dENhbGxiYWNrKEJyb3dz
ZXJXaW5kb3cgKndpbmRvdykKK3N0YXRpYyBHdGtXaWRnZXQgKndlYlZpZXdDcmVhdGUoV2ViS2l0
V2ViVmlldyAqd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAqbmF2aWdhdGlvbiwgQnJv
d3NlcldpbmRvdyAqd2luZG93KQogewotICAgIGd0a193aWRnZXRfaGlkZSh3aW5kb3ctPmZ1bGxT
Y3JlZW5NZXNzYWdlTGFiZWwpOwotICAgIHdpbmRvdy0+ZnVsbFNjcmVlbk1lc3NhZ2VMYWJlbElk
ID0gMDsKLSAgICByZXR1cm4gRkFMU0U7CisgICAgV2ViS2l0V2ViVmlldyAqbmV3V2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfcmVsYXRlZF92aWV3KHdl
YlZpZXcpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKG5ld1dlYlZpZXcsIHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOworCisgICAgR3RrV2lkZ2V0ICpu
ZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRPVyh3aW5kb3cpKTsKKyAgICBi
cm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyhCUk9XU0VSX1dJTkRPVyhuZXdXaW5kb3cpLCBuZXdX
ZWJWaWV3KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJyZWFkeS10by1zaG93
IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlUb1Nob3cpLCBuZXdXaW5kb3cpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdfQ0FMTEJBQ0sod2ViVmll
d1J1bkFzTW9kYWwpLCBuZXdXaW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmll
dywgImNsb3NlIiwgR19DQUxMQkFDSyh3ZWJWaWV3Q2xvc2UpLCBuZXdXaW5kb3cpOworICAgIHJl
dHVybiBHVEtfV0lER0VUKG5ld1dlYlZpZXcpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmll
d0VudGVyRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBCcm93c2VyV2luZG93ICp3
aW5kb3cpCiB7Ci0gICAgZ2NoYXIgKnRpdGxlT3JVUkkgPSBnX3N0cmR1cCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3RpdGxlKHdpbmRvdy0+d2ViVmlldykpOwotICAgIGlmICghdGl0bGVPclVSSSkKLSAg
ICAgICAgdGl0bGVPclVSSSA9IGdldEV4dGVybmFsVVJJKHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHdpbmRvdy0+d2ViVmlldykpOwotICAgIGdjaGFyICptZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRm
KCIlcyBpcyBub3cgZnVsbCBzY3JlZW4uIFByZXNzIEVTQyBvciBmIHRvIGV4aXQuIiwgdGl0bGVP
clVSSSk7Ci0gICAgZ3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTCh3aW5kb3ctPmZ1bGxTY3Jl
ZW5NZXNzYWdlTGFiZWwpLCBtZXNzYWdlKTsKLSAgICBnX2ZyZWUodGl0bGVPclVSSSk7Ci0gICAg
Z19mcmVlKG1lc3NhZ2UpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+ZnVsbFNjcmVl
bk1lc3NhZ2VMYWJlbCk7Ci0KLSAgICB3aW5kb3ctPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWxJZCA9
IGdfdGltZW91dF9hZGRfc2Vjb25kcygyLCAoR1NvdXJjZUZ1bmMpZnVsbFNjcmVlbk1lc3NhZ2VU
aW1lb3V0Q2FsbGJhY2ssIHdpbmRvdyk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQod2lu
ZG93LT5mdWxsU2NyZWVuTWVzc2FnZUxhYmVsSWQsICJbV2ViS2l0XSBmdWxsU2NyZWVuTWVzc2Fn
ZVRpbWVvdXRDYWxsYmFjayIpOwogICAgIGd0a193aWRnZXRfaGlkZSh3aW5kb3ctPnRvb2xiYXIp
OwotICAgIHdpbmRvdy0+c2VhcmNoQmFyVmlzaWJsZSA9IGd0a193aWRnZXRfZ2V0X3Zpc2libGUo
R1RLX1dJREdFVCh3aW5kb3ctPnNlYXJjaEJhcikpOwotICAgIGJyb3dzZXJfc2VhcmNoX2Jhcl9j
bG9zZSh3aW5kb3ctPnNlYXJjaEJhcik7Ci0KKyAgICBicm93c2VyX3RhYl9lbnRlcl9mdWxsc2Ny
ZWVuKHdpbmRvdy0+YWN0aXZlVGFiKTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3TGVhdmVGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEJy
b3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBpZiAod2luZG93LT5mdWxsU2NyZWVuTWVzc2Fn
ZUxhYmVsSWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdpbmRvdy0+ZnVsbFNjcmVlbk1l
c3NhZ2VMYWJlbElkKTsKLSAgICAgICAgd2luZG93LT5mdWxsU2NyZWVuTWVzc2FnZUxhYmVsSWQg
PSAwOwotICAgIH0KLSAgICBndGtfd2lkZ2V0X2hpZGUod2luZG93LT5mdWxsU2NyZWVuTWVzc2Fn
ZUxhYmVsKTsKKyAgICBicm93c2VyX3RhYl9sZWF2ZV9mdWxsc2NyZWVuKHdpbmRvdy0+YWN0aXZl
VGFiKTsKICAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93LT50b29sYmFyKTsKLSAgICBpZiAod2lu
ZG93LT5zZWFyY2hCYXJWaXNpYmxlKSB7Ci0gICAgICAgIC8vIE9wZW5pbmcgdGhlIHNlYXJjaCBi
YXIgc3RlYWxzIHRoZSBmb2N1cy4gVXN1YWxseSwgd2Ugd2FudAotICAgICAgICAvLyB0aGlzIGJ1
dCBub3Qgd2hlbiBjb21pbmcgYmFjayBmcm9tIGZ1bGxzY3JlZW4uCi0gICAgICAgIEd0a1dpZGdl
dCAqZm9jdXNXaWRnZXQgPSBndGtfd2luZG93X2dldF9mb2N1cyhHVEtfV0lORE9XKHdpbmRvdykp
OwotICAgICAgICBicm93c2VyX3NlYXJjaF9iYXJfb3Blbih3aW5kb3ctPnNlYXJjaEJhcik7Ci0g
ICAgICAgIGd0a193aW5kb3dfc2V0X2ZvY3VzKEdUS19XSU5ET1cod2luZG93KSwgZm9jdXNXaWRn
ZXQpOwotICAgIH0KLQogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIEd0a1dpZGdldCAq
d2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uICpuYXZpZ2F0aW9uLCBCcm93c2VyV2luZG93ICp3aW5kb3cpCi17Ci0gICAgV2ViS2l0V2Vi
VmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3X3dp
dGhfcmVsYXRlZF92aWV3KHdlYlZpZXcpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRp
bmdzKG5ld1dlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOwot
Ci0gICAgR3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcobmV3V2ViVmll
dywgR1RLX1dJTkRPVyh3aW5kb3cpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcs
ICJyZWFkeS10by1zaG93IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlUb1Nob3cpLCBuZXdXaW5k
b3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdf
Q0FMTEJBQ0sod2ViVmlld1J1bkFzTW9kYWwpLCBuZXdXaW5kb3cpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QobmV3V2ViVmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh3ZWJWaWV3Q2xvc2UpLCBuZXdX
aW5kb3cpOwotICAgIHJldHVybiBHVEtfV0lER0VUKG5ld1dlYlZpZXcpOwotfQotCiBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0xvYWRGYWlsZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0
TG9hZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJv
ciwgQnJvd3NlcldpbmRvdyAqd2luZG93KQogewogICAgIGd0a19lbnRyeV9zZXRfcHJvZ3Jlc3Nf
ZnJhY3Rpb24oR1RLX0VOVFJZKHdpbmRvdy0+dXJpRW50cnkpLCAwLik7CiAgICAgcmV0dXJuIEZB
TFNFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0xvYWRGYWlsZWRXaXRoVExTZXJyb3Jz
KFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIGNvbnN0IGNoYXIgKmZhaWxpbmdVUkksIEdUbHNDZXJ0
aWZpY2F0ZSAqY2VydGlmaWNhdGUsIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIGVycm9ycywgQnJvd3Nl
cldpbmRvdyAqd2luZG93KQotewotICAgIEd0a1dpZGdldCAqZGlhbG9nID0gZ3RrX21lc3NhZ2Vf
ZGlhbG9nX25ldyhHVEtfV0lORE9XKHdpbmRvdyksIEdUS19ESUFMT0dfTU9EQUwgfCBHVEtfRElB
TE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCi0gICAgICAgIEdUS19NRVNTQUdFX1FVRVNUSU9OLCBH
VEtfQlVUVE9OU19ZRVNfTk8sICIlcyIsICJJbnZhbGlkIFRMUyBDZXJ0aWZpY2F0ZSIpOwotICAg
IGd0a19tZXNzYWdlX2RpYWxvZ19mb3JtYXRfc2Vjb25kYXJ5X3RleHQoR1RLX01FU1NBR0VfRElB
TE9HKGRpYWxvZyksICJGYWlsZWQgdG8gbG9hZCAlczogRG8geW91IHdhbnQgdG8gY29udGludWUg
aWdub3JpbmcgdGhlIFRMUyBlcnJvcnM/IiwgZmFpbGluZ1VSSSk7Ci0gICAgaW50IHJlc3BvbnNl
ID0gZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsKLSAgICBndGtfd2lkZ2V0X2Rl
c3Ryb3koZGlhbG9nKTsKLQotICAgIGlmIChyZXNwb25zZSA9PSBHVEtfUkVTUE9OU0VfWUVTKSB7
Ci0gICAgICAgIFNvdXBVUkkgKnVyaSA9IHNvdXBfdXJpX25ldyhmYWlsaW5nVVJJKTsKLSAgICAg
ICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldyksIGNlcnRpZmljYXRlLCB1cmktPmhvc3Qp
OwotICAgICAgICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaSh3ZWJWaWV3LCBmYWlsaW5nVVJJKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsK
LX0KLQogc3RhdGljIGdib29sZWFuIHdlYlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyAq
d2ViVmlldywgV2ViS2l0UG9saWN5RGVjaXNpb24gKmRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNp
c2lvblR5cGUgZGVjaXNpb25UeXBlLCBCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7Ci0gICAgc3dp
dGNoIChkZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQ
RV9OQVZJR0FUSU9OX0FDVElPTjogewotICAgICAgICBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpu
YXZpZ2F0aW9uQWN0aW9uID0gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9u
YXZpZ2F0aW9uX2FjdGlvbihXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNp
b24pKTsKLSAgICAgICAgaWYgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdhdGlv
bl90eXBlKG5hdmlnYXRpb25BY3Rpb24pICE9IFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19D
TElDS0VECi0gICAgICAgICAgICB8fCB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNl
X2J1dHRvbihuYXZpZ2F0aW9uQWN0aW9uKSAhPSBHREtfQlVUVE9OX01JRERMRSkKLSAgICAgICAg
ICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICAvLyBPcGVuaW5nIGEgbmV3IHdpbmRvdyBpZiBs
aW5rIGNsaWNrZWQgd2l0aCB0aGUgbWlkZGxlIGJ1dHRvbi4KLSAgICAgICAgV2ViS2l0V2ViVmll
dyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhf
Y29udGV4dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldykpKTsKLSAgICAgICAg
R3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcobmV3V2ViVmlldywgR1RL
X1dJTkRPVyh3aW5kb3cpKTsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcmVxdWVzdChu
ZXdXZWJWaWV3LCB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3QobmF2aWdhdGlv
bkFjdGlvbikpOwotICAgICAgICBndGtfd2lkZ2V0X3Nob3cobmV3V2luZG93KTsKKyAgICBpZiAo
ZGVjaXNpb25UeXBlICE9IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FD
VElPTikKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgICAgIHdlYmtpdF9wb2xpY3lfZGVj
aXNpb25faWdub3JlKGRlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAg
IGNhc2UgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFOiB7Ci0gICAgICAgIFdl
YktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24gKnJlc3BvbnNlRGVjaXNpb24gPSBXRUJLSVRfUkVT
UE9OU0VfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKTsKLSAgICAgICAgaWYgKHdlYmtpdF9yZXNw
b25zZV9wb2xpY3lfZGVjaXNpb25faXNfbWltZV90eXBlX3N1cHBvcnRlZChyZXNwb25zZURlY2lz
aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICBXZWJLaXRXZWJSZXNv
dXJjZSAqbWFpblJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHdl
YlZpZXcpOwotICAgICAgICBXZWJLaXRVUklSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X3Jlc3Bv
bnNlX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChyZXNwb25zZURlY2lzaW9uKTsKLSAgICAg
ICAgY29uc3QgY2hhciAqcmVxdWVzdFVSSSA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpOwotICAgICAgICBpZiAoZ19zdHJjbXAwKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Vy
aShtYWluUmVzb3VyY2UpLCByZXF1ZXN0VVJJKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAg
ICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIGNhc2UgV0VCS0lUX1BPTElDWV9ERUNJU0lP
Tl9UWVBFX05FV19XSU5ET1dfQUNUSU9OOgotICAgIGRlZmF1bHQ6CisgICAgV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbiAqbmF2aWdhdGlvbkFjdGlvbiA9IHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl9hY3Rpb24oV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RF
Q0lTSU9OKGRlY2lzaW9uKSk7CisgICAgaWYgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRf
bmF2aWdhdGlvbl90eXBlKG5hdmlnYXRpb25BY3Rpb24pICE9IFdFQktJVF9OQVZJR0FUSU9OX1RZ
UEVfTElOS19DTElDS0VECisgICAgICAgIHx8IHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRf
bW91c2VfYnV0dG9uKG5hdmlnYXRpb25BY3Rpb24pICE9IEdES19CVVRUT05fTUlERExFKQogICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0Rl
Y2lkZVBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIFdlYktpdFBlcm1p
c3Npb25SZXF1ZXN0ICpyZXF1ZXN0LCBCcm93c2VyV2luZG93ICp3aW5kb3cpCi17Ci0gICAgY29u
c3QgZ2NoYXIgKmRpYWxvZ190aXRsZSA9IE5VTEw7Ci0gICAgY29uc3QgZ2NoYXIgKmRpYWxvZ19t
ZXNzYWdlID0gTlVMTDsKLSAgICBjb25zdCBnY2hhciAqZGlhbG9nX21lc3NhZ2VfZm9ybWF0ID0g
TlVMTDsKLQotICAgIGlmIChXRUJLSVRfSVNfR0VPTE9DQVRJT05fUEVSTUlTU0lPTl9SRVFVRVNU
KHJlcXVlc3QpKSB7Ci0gICAgICAgIGRpYWxvZ190aXRsZSA9ICJHZW9sb2NhdGlvbiByZXF1ZXN0
IjsKLSAgICAgICAgZGlhbG9nX21lc3NhZ2VfZm9ybWF0ID0gIiVzIjsKLSAgICAgICAgZGlhbG9n
X21lc3NhZ2UgPSAiQWxsb3cgZ2VvbG9jYXRpb24gcmVxdWVzdD8iOwotICAgIH0gZWxzZSBpZiAo
V0VCS0lUX0lTX05PVElGSUNBVElPTl9QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpIHsKLSAg
ICAgICAgZGlhbG9nX3RpdGxlID0gIk5vdGlmaWNhdGlvbiByZXF1ZXN0IjsKLSAgICAgICAgZGlh
bG9nX21lc3NhZ2VfZm9ybWF0ID0gIiVzIjsKLSAgICAgICAgZGlhbG9nX21lc3NhZ2UgPSAiQWxs
b3cgbm90aWZpY2F0aW9ucyByZXF1ZXN0PyI7Ci0gICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfVVNF
Ul9NRURJQV9QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpIHsKLSAgICAgICAgZGlhbG9nX21l
c3NhZ2VfZm9ybWF0ID0gIkFsbG93IGFjY2VzcyB0byAlcyBkZXZpY2U/IjsKLSAgICAgICAgZ2Jv
b2xlYW4gaXNfZm9yX2F1ZGlvX2RldmljZSA9IHdlYmtpdF91c2VyX21lZGlhX3Blcm1pc3Npb25f
aXNfZm9yX2F1ZGlvX2RldmljZShXRUJLSVRfVVNFUl9NRURJQV9QRVJNSVNTSU9OX1JFUVVFU1Qo
cmVxdWVzdCkpOwotICAgICAgICBnYm9vbGVhbiBpc19mb3JfdmlkZW9fZGV2aWNlID0gd2Via2l0
X3VzZXJfbWVkaWFfcGVybWlzc2lvbl9pc19mb3JfdmlkZW9fZGV2aWNlKFdFQktJVF9VU0VSX01F
RElBX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgICAgIGRpYWxvZ190aXRsZSA9
ICJVc2VyTWVkaWEgcmVxdWVzdCI7Ci0gICAgICAgIGlmIChpc19mb3JfYXVkaW9fZGV2aWNlKSB7
Ci0gICAgICAgICAgICBpZiAoaXNfZm9yX3ZpZGVvX2RldmljZSkKLSAgICAgICAgICAgICAgICBk
aWFsb2dfbWVzc2FnZSA9ICJhdWRpby92aWRlbyI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZGlhbG9nX21lc3NhZ2UgPSAiYXVkaW8iOwotICAgICAgICB9IGVsc2UgaWYgKGlz
X2Zvcl92aWRlb19kZXZpY2UpCi0gICAgICAgICAgICBkaWFsb2dfbWVzc2FnZSA9ICJ2aWRlbyI7
Ci0gICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfSU5TVEFMTF9NSVNTSU5HX01FRElBX1BMVUdJTlNf
UEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKSB7Ci0gICAgICAgIGRpYWxvZ190aXRsZSA9ICJN
ZWRpYSBwbHVnaW4gbWlzc2luZyByZXF1ZXN0IjsKLSAgICAgICAgZGlhbG9nX21lc3NhZ2VfZm9y
bWF0ID0gIlRoZSBtZWRpYSBiYWNrZW5kIHdhcyB1bmFibGUgdG8gZmluZCBhIHBsdWdpbiB0byBw
bGF5IHRoZSByZXF1ZXN0ZWQgbWVkaWE6XG4lcy5cbkFsbG93IHRvIHNlYXJjaCBhbmQgaW5zdGFs
bCB0aGUgbWlzc2luZyBwbHVnaW4/IjsKLSAgICAgICAgZGlhbG9nX21lc3NhZ2UgPSB3ZWJraXRf
aW5zdGFsbF9taXNzaW5nX21lZGlhX3BsdWdpbnNfcGVybWlzc2lvbl9yZXF1ZXN0X2dldF9kZXNj
cmlwdGlvbihXRUJLSVRfSU5TVEFMTF9NSVNTSU5HX01FRElBX1BMVUdJTlNfUEVSTUlTU0lPTl9S
RVFVRVNUKHJlcXVlc3QpKTsKLSAgICB9IGVsc2UKKyAgICAvKiBNdWx0aXBsZSB0YWJzIGFyZSBu
b3QgYWxsb3dlZCBpbiBlZGl0b3IgbW9kZS4gKi8KKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2lz
X2VkaXRhYmxlKHdlYlZpZXcpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBHdGtXaWRn
ZXQgKmRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyh3aW5kb3cpLAot
ICAgICAgICBHVEtfRElBTE9HX01PREFMIHwgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5U
LAotICAgICAgICBHVEtfTUVTU0FHRV9RVUVTVElPTiwKLSAgICAgICAgR1RLX0JVVFRPTlNfWUVT
X05PLAotICAgICAgICAiJXMiLCBkaWFsb2dfdGl0bGUpOworICAgIC8qIE9wZW5pbmcgYSBuZXcg
dGFiIGlmIGxpbmsgY2xpY2tlZCB3aXRoIHRoZSBtaWRkbGUgYnV0dG9uLiAqLworICAgIFdlYktp
dFdlYlZpZXcgKm5ld1dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
d193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpKSk7Cisg
ICAgYnJvd3Nlcl93aW5kb3dfYXBwZW5kX3ZpZXcod2luZG93LCBuZXdXZWJWaWV3KTsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9yZXF1ZXN0KG5ld1dlYlZpZXcsIHdlYmtpdF9uYXZpZ2F0aW9u
X2FjdGlvbl9nZXRfcmVxdWVzdChuYXZpZ2F0aW9uQWN0aW9uKSk7CiAKLSAgICBndGtfbWVzc2Fn
ZV9kaWFsb2dfZm9ybWF0X3NlY29uZGFyeV90ZXh0KEdUS19NRVNTQUdFX0RJQUxPRyhkaWFsb2cp
LCBkaWFsb2dfbWVzc2FnZV9mb3JtYXQsIGRpYWxvZ19tZXNzYWdlKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KGRpYWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdERp
YWxvZ0NhbGxiYWNrKSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKLSAgICBndGtfd2lkZ2V0X3No
b3coZGlhbG9nKTsKKyAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZShkZWNpc2lvbik7
CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTQ4NSwyMSArMzQ5LDI0IEBAIHN0YXRpYyB2b2lk
IHdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0
SGl0VGVzdFJlc3VsCiAKIHN0YXRpYyBnYm9vbGVhbiBicm93c2VyV2luZG93Q2FuWm9vbUluKEJy
b3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBnZG91YmxlIHpvb21MZXZlbCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfem9vbV9sZXZlbCh3aW5kb3ctPndlYlZpZXcpICogem9vbVN0ZXA7CisgICAg
V2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGJyb3dzZXJfdGFiX2dldF93ZWJfdmlldyh3aW5kb3ct
PmFjdGl2ZVRhYik7CisgICAgZ2RvdWJsZSB6b29tTGV2ZWwgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3pvb21fbGV2ZWwod2ViVmlldykgKiB6b29tU3RlcDsKICAgICByZXR1cm4gem9vbUxldmVsIDwg
bWF4aW11bVpvb21MZXZlbDsKIH0KIAogc3RhdGljIGdib29sZWFuIGJyb3dzZXJXaW5kb3dDYW5a
b29tT3V0KEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBnZG91YmxlIHpvb21MZXZlbCA9
IHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh3aW5kb3ctPndlYlZpZXcpIC8gem9vbVN0
ZXA7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGJyb3dzZXJfdGFiX2dldF93ZWJfdmll
dyh3aW5kb3ctPmFjdGl2ZVRhYik7CisgICAgZ2RvdWJsZSB6b29tTGV2ZWwgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3pvb21fbGV2ZWwod2ViVmlldykgLyB6b29tU3RlcDsKICAgICByZXR1cm4gem9v
bUxldmVsID4gbWluaW11bVpvb21MZXZlbDsKIH0KIAogc3RhdGljIGdib29sZWFuIGJyb3dzZXJX
aW5kb3dab29tSW4oQnJvd3NlcldpbmRvdyAqd2luZG93KQogewogICAgIGlmIChicm93c2VyV2lu
ZG93Q2FuWm9vbUluKHdpbmRvdykpIHsKLSAgICAgICAgZ2RvdWJsZSB6b29tTGV2ZWwgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwod2luZG93LT53ZWJWaWV3KSAqIHpvb21TdGVwOwot
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2luZG93LT53ZWJWaWV3LCB6
b29tTGV2ZWwpOworICAgICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJvd3Nlcl90YWJf
Z2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICAgICAgZ2RvdWJsZSB6b29tTGV2
ZWwgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwod2ViVmlldykgKiB6b29tU3RlcDsK
KyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdlYlZpZXcsIHpvb21MZXZl
bCk7CiAgICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CkBAIC01
MDgsOCArMzc1LDkgQEAgc3RhdGljIGdib29sZWFuIGJyb3dzZXJXaW5kb3dab29tSW4oQnJvd3Nl
cldpbmRvdyAqd2luZG93KQogc3RhdGljIGdib29sZWFuIGJyb3dzZXJXaW5kb3dab29tT3V0KEJy
b3dzZXJXaW5kb3cgKndpbmRvdykKIHsKICAgICBpZiAoYnJvd3NlcldpbmRvd0Nhblpvb21PdXQo
d2luZG93KSkgewotICAgICAgICBnZG91YmxlIHpvb21MZXZlbCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfem9vbV9sZXZlbCh3aW5kb3ctPndlYlZpZXcpIC8gem9vbVN0ZXA7Ci0gICAgICAgIHdlYmtp
dF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh3aW5kb3ctPndlYlZpZXcsIHpvb21MZXZlbCk7Cisg
ICAgICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXco
d2luZG93LT5hY3RpdmVUYWIpOworICAgICAgICBnZG91YmxlIHpvb21MZXZlbCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfem9vbV9sZXZlbCh3ZWJWaWV3KSAvIHpvb21TdGVwOworICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2ViVmlldywgem9vbUxldmVsKTsKICAgICAgICAg
cmV0dXJuIFRSVUU7CiAgICAgfQogICAgIHJldHVybiBGQUxTRTsKQEAgLTUyMSw1NyArMzg5LDEy
IEBAIHN0YXRpYyBnYm9vbGVhbiBzY3JvbGxFdmVudENhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIGNvbnN0IEdka0V2ZW50U2Nyb2xsCiAKICAgICBpZiAoKGV2ZW50LT5zdGF0ZSAmIG1v
ZCkgIT0gR0RLX0NPTlRST0xfTUFTSykKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIAorCiAg
ICAgaWYgKGV2ZW50LT5kZWx0YV95IDwgMCkKICAgICAgICAgcmV0dXJuIGJyb3dzZXJXaW5kb3da
b29tSW4od2luZG93KTsKLSAgICAKLSAgICByZXR1cm4gYnJvd3NlcldpbmRvd1pvb21PdXQod2lu
ZG93KTsKLX0KLQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDEyLCAwKQotc3RhdGljIHZvaWQg
Y29sb3JDaG9vc2VyUkdCQUNoYW5nZWQoR3RrQ29sb3JDaG9vc2VyICpjb2xvckNob29zZXIsIEdQ
YXJhbVNwZWMgKnBhcmFtU3BlYywgV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCkK
LXsKLSAgICBHZGtSR0JBIHJnYmE7Ci0gICAgZ3RrX2NvbG9yX2Nob29zZXJfZ2V0X3JnYmEoY29s
b3JDaG9vc2VyLCAmcmdiYSk7Ci0gICAgd2Via2l0X2NvbG9yX2Nob29zZXJfcmVxdWVzdF9zZXRf
cmdiYShyZXF1ZXN0LCAmcmdiYSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvcG92ZXJDb2xvckNsb3Nl
ZChHdGtXaWRnZXQgKnBvcG92ZXIsIFdlYktpdENvbG9yQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3Qp
Ci17Ci0gICAgd2Via2l0X2NvbG9yX2Nob29zZXJfcmVxdWVzdF9maW5pc2gocmVxdWVzdCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGNvbG9yQ2hvb3NlclJlcXVlc3RGaW5pc2hlZChXZWJLaXRDb2xvckNo
b29zZXJSZXF1ZXN0ICpyZXF1ZXN0LCBHdGtXaWRnZXQgKnBvcG92ZXIpCi17Ci0gICAgZ19vYmpl
Y3RfdW5yZWYocmVxdWVzdCk7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHBvcG92ZXIpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gcnVuQ29sb3JDaG9vc2VyQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAq
d2ViVmlldywgV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwgQnJvd3NlcldpbmRv
dyAqd2luZG93KQotewotICAgIEd0a1dpZGdldCAqcG9wb3ZlciA9IGd0a19wb3BvdmVyX25ldyhH
VEtfV0lER0VUKHdlYlZpZXcpKTsKLQotICAgIEdka1JlY3RhbmdsZSByZWN0YW5nbGU7Ci0gICAg
d2Via2l0X2NvbG9yX2Nob29zZXJfcmVxdWVzdF9nZXRfZWxlbWVudF9yZWN0YW5nbGUocmVxdWVz
dCwgJnJlY3RhbmdsZSk7Ci0gICAgZ3RrX3BvcG92ZXJfc2V0X3BvaW50aW5nX3RvKEdUS19QT1BP
VkVSKHBvcG92ZXIpLCAmcmVjdGFuZ2xlKTsKLQotICAgIEd0a1dpZGdldCAqY29sb3JDaG9vc2Vy
ID0gZ3RrX2NvbG9yX2Nob29zZXJfd2lkZ2V0X25ldygpOwotICAgIEdka1JHQkEgcmdiYTsKLSAg
ICB3ZWJraXRfY29sb3JfY2hvb3Nlcl9yZXF1ZXN0X2dldF9yZ2JhKHJlcXVlc3QsICZyZ2JhKTsK
LSAgICBndGtfY29sb3JfY2hvb3Nlcl9zZXRfcmdiYShHVEtfQ09MT1JfQ0hPT1NFUihjb2xvckNo
b29zZXIpLCAmcmdiYSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChjb2xvckNob29zZXIsICJub3Rp
Znk6OnJnYmEiLCBHX0NBTExCQUNLKGNvbG9yQ2hvb3NlclJHQkFDaGFuZ2VkKSwgcmVxdWVzdCk7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwb3BvdmVyKSwgY29sb3JDaG9v
c2VyKTsKLSAgICBndGtfd2lkZ2V0X3Nob3coY29sb3JDaG9vc2VyKTsKLQotICAgIGdfb2JqZWN0
X3JlZihyZXF1ZXN0KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChwb3BvdmVyLCAiaGlk
ZSIsIEdfQ0FMTEJBQ0socG9wb3ZlckNvbG9yQ2xvc2VkKSwgcmVxdWVzdCwgMCk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdF9vYmplY3QocmVxdWVzdCwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhjb2xv
ckNob29zZXJSZXF1ZXN0RmluaXNoZWQpLCBwb3BvdmVyLCAwKTsKLQotICAgIGd0a193aWRnZXRf
c2hvdyhwb3BvdmVyKTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiBicm93c2VyV2lu
ZG93Wm9vbU91dCh3aW5kb3cpOwogfQotI2VuZGlmIC8qIEdUS19DSEVDS19WRVJTSU9OKDMsIDEy
LCAwKSAqLwogCiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93VXBkYXRlWm9vbUFjdGlvbnMoQnJv
d3NlcldpbmRvdyAqd2luZG93KQogewpAQCAtNTkzLDEwICs0MTYsMTAgQEAgc3RhdGljIHZvaWQg
dXBkYXRlVXJpRW50cnlJY29uKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKICAgICAgICAgZ3RrX2Vu
dHJ5X3NldF9pY29uX2Zyb21fc3RvY2soZW50cnksIEdUS19FTlRSWV9JQ09OX1BSSU1BUlksIEdU
S19TVE9DS19ORVcpOwogfQogCi1zdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZChHT2JqZWN0ICpv
YmplY3QsIEdQYXJhbVNwZWMgKnBhcmFtU3BlYywgQnJvd3NlcldpbmRvdyAqd2luZG93KQorc3Rh
dGljIHZvaWQgZmF2aWNvbkNoYW5nZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3Bl
YyAqcGFyYW1TcGVjLCBCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7CiAgICAgR2RrUGl4YnVmICpm
YXZpY29uID0gTlVMTDsKLSAgICBjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2UgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2Zhdmljb24od2luZG93LT53ZWJWaWV3KTsKKyAgICBjYWlyb19zdXJmYWNlX3Qg
KnN1cmZhY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24od2ViVmlldyk7CiAKICAgICBp
ZiAoc3VyZmFjZSkgewogICAgICAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF93aWR0aChzdXJmYWNlKTsKQEAgLTYxMSwyNCArNDM0LDEyIEBAIHN0YXRpYyB2b2lkIGZhdmlj
b25DaGFuZ2VkKEdPYmplY3QgKm9iamVjdCwgR1BhcmFtU3BlYyAqcGFyYW1TcGVjLCBCcm93c2Vy
V2luZG93CiAgICAgdXBkYXRlVXJpRW50cnlJY29uKHdpbmRvdyk7CiB9CiAKLXN0YXRpYyB2b2lk
IHdlYlZpZXdJc0xvYWRpbmdDaGFuZ2VkKEdPYmplY3QgKm9iamVjdCwgR1BhcmFtU3BlYyAqcGFy
YW1TcGVjLCBCcm93c2VyV2luZG93ICp3aW5kb3cpCitzdGF0aWMgdm9pZCB3ZWJWaWV3SXNMb2Fk
aW5nQ2hhbmdlZChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMs
IEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBnYm9vbGVhbiBpc0xvYWRpbmcgPSB3ZWJr
aXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3aW5kb3ctPndlYlZpZXcpOworICAgIGdib29sZWFuIGlz
TG9hZGluZyA9IHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpOwogICAgIGd0a190
b29sX2J1dHRvbl9zZXRfc3RvY2tfaWQoR1RLX1RPT0xfQlVUVE9OKHdpbmRvdy0+cmVsb2FkT3JT
dG9wQnV0dG9uKSwgaXNMb2FkaW5nID8gR1RLX1NUT0NLX1NUT1AgOiBHVEtfU1RPQ0tfUkVGUkVT
SCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBpbnNwZWN0b3JXYXNPcGVuZWRJbkFub3RoZXJXaW5k
b3coV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3JXaW5kb3csIEJyb3dzZXJXaW5kb3cgKndp
bmRvdykKLXsKLSAgICB3aW5kb3ctPmluc3BlY3RvcldpbmRvd0lzVmlzaWJsZSA9IFRSVUU7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gaW5zcGVjdG9yV2FzQ2xvc2Vk
KFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yV2luZG93LCBCcm93c2VyV2luZG93ICp3aW5k
b3cpCi17Ci0gICAgd2luZG93LT5pbnNwZWN0b3JXaW5kb3dJc1Zpc2libGUgPSBGQUxTRTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0KIHN0YXRpYyB2b2lkIHpvb21JbkNhbGxiYWNrKEJyb3dzZXJX
aW5kb3cgKndpbmRvdykKIHsKICAgICBicm93c2VyV2luZG93Wm9vbUluKHdpbmRvdyk7CkBAIC02
NDEsNDkgKzQ1Miw1NCBAQCBzdGF0aWMgdm9pZCB6b29tT3V0Q2FsbGJhY2soQnJvd3NlcldpbmRv
dyAqd2luZG93KQogCiBzdGF0aWMgdm9pZCBkZWZhdWx0Wm9vbUNhbGxiYWNrKEJyb3dzZXJXaW5k
b3cgKndpbmRvdykKIHsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2luZG93
LT53ZWJWaWV3LCBkZWZhdWx0Wm9vbUxldmVsKTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
ID0gYnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2ViVmlldywgZGVmYXVsdFpvb21MZXZlbCk7CiB9
CiAKIHN0YXRpYyB2b2lkIHNlYXJjaENhbGxiYWNrKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsK
LSAgICBicm93c2VyX3NlYXJjaF9iYXJfb3Blbih3aW5kb3ctPnNlYXJjaEJhcik7CisgICAgYnJv
d3Nlcl90YWJfc3RhcnRfc2VhcmNoKHdpbmRvdy0+YWN0aXZlVGFiKTsKIH0KIAotc3RhdGljIGdi
b29sZWFuIHRvZ2dsZVdlYkluc3BlY3RvcihCcm93c2VyV2luZG93ICp3aW5kb3csIGdwb2ludGVy
IHVzZXJfZGF0YSkKK3N0YXRpYyB2b2lkIG5ld1RhYkNhbGxiYWNrKEJyb3dzZXJXaW5kb3cgKndp
bmRvdykKIHsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvcldpbmRvdzsKLQotICAg
IGluc3BlY3RvcldpbmRvdyA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKFdFQktJVF9X
RUJfVklFVyh3aW5kb3ctPndlYlZpZXcpKTsKLSAgICBpZiAoIXdpbmRvdy0+aW5zcGVjdG9yV2lu
ZG93SXNWaXNpYmxlKSB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3Nob3coaW5zcGVj
dG9yV2luZG93KTsKLSAgICAgICAgd2luZG93LT5pbnNwZWN0b3JXaW5kb3dJc1Zpc2libGUgPSBU
UlVFOwotICAgIH0gZWxzZQotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShpbnNw
ZWN0b3JXaW5kb3cpOworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9n
ZXRfd2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIpOworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdf
aXNfZWRpdGFibGUod2ViVmlldykpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJLaXRTZXR0aW5n
cyAqc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOworICAg
IGJyb3dzZXJfd2luZG93X2FwcGVuZF92aWV3KHdpbmRvdywgV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXdfd2l0aF9zZXR0aW5ncyhzZXR0aW5ncykpKTsKKyAgICBndGtfbm90ZWJv
b2tfc2V0X2N1cnJlbnRfcGFnZShHVEtfTk9URUJPT0sod2luZG93LT5ub3RlYm9vayksIC0xKTsK
K30KIAotICAgIHJldHVybiBUUlVFOworc3RhdGljIHZvaWQgdG9nZ2xlV2ViSW5zcGVjdG9yKEJy
b3dzZXJXaW5kb3cgKndpbmRvdykKK3sKKyAgICBicm93c2VyX3RhYl90b2dnbGVfaW5zcGVjdG9y
KHdpbmRvdy0+YWN0aXZlVGFiKTsKIH0KIAotc3RhdGljIHZvaWQgcmVsb2FkUGFnZShCcm93c2Vy
V2luZG93ICp3aW5kb3csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3N0YXRpYyB2b2lkIHJlbG9hZFBh
Z2UoQnJvd3NlcldpbmRvdyAqd2luZG93KQogewotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQo
d2luZG93LT53ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJvd3Nlcl90
YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
cmVsb2FkKHdlYlZpZXcpOwogfQogCi1zdGF0aWMgdm9pZCByZWxvYWRQYWdlSWdub3JpbmdDYWNo
ZShCcm93c2VyV2luZG93ICp3aW5kb3csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3N0YXRpYyB2b2lk
IHJlbG9hZFBhZ2VJZ25vcmluZ0NhY2hlKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfcmVsb2FkX2J5cGFzc19jYWNoZSh3aW5kb3ctPndlYlZpZXcpOworICAg
IFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXcod2luZG93
LT5hY3RpdmVUYWIpOworICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKHdl
YlZpZXcpOwogfQogCi1zdGF0aWMgdm9pZCBzdG9wUGFnZUxvYWQoQnJvd3NlcldpbmRvdyAqd2lu
ZG93LCBncG9pbnRlciB1c2VyX2RhdGEpCitzdGF0aWMgdm9pZCBzdG9wUGFnZUxvYWQoQnJvd3Nl
cldpbmRvdyAqd2luZG93KQogewotICAgIGlmIChndGtfd2lkZ2V0X2dldF92aXNpYmxlKEdUS19X
SURHRVQod2luZG93LT5zZWFyY2hCYXIpKSkgCi0gICAgICAgIGJyb3dzZXJfc2VhcmNoX2Jhcl9j
bG9zZSh3aW5kb3ctPnNlYXJjaEJhcik7Ci0gICAgZWxzZSBpZiAod2Via2l0X3dlYl92aWV3X2lz
X2xvYWRpbmcod2luZG93LT53ZWJWaWV3KSkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3N0b3Bf
bG9hZGluZyh3aW5kb3ctPndlYlZpZXcpOworICAgIGJyb3dzZXJfdGFiX3N0b3Bfc2VhcmNoKHdp
bmRvdy0+YWN0aXZlVGFiKTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJvd3Nlcl90
YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICBpZiAod2Via2l0X3dlYl92
aWV3X2lzX2xvYWRpbmcod2ViVmlldykpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xv
YWRpbmcod2ViVmlldyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvYWRIb21lUGFnZShCcm93c2VyV2lu
ZG93ICp3aW5kb3csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3N0YXRpYyB2b2lkIGxvYWRIb21lUGFn
ZShCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJp
KHdpbmRvdy0+d2ViVmlldywgQlJPV1NFUl9ERUZBVUxUX1VSTCk7CisgICAgV2ViS2l0V2ViVmll
dyAqd2ViVmlldyA9IGJyb3dzZXJfdGFiX2dldF93ZWJfdmlldyh3aW5kb3ctPmFjdGl2ZVRhYik7
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsIEJST1dTRVJfREVGQVVMVF9V
UkwpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gdG9nZ2xlRnVsbFNjcmVlbihCcm93c2VyV2luZG93
ICp3aW5kb3csIGdwb2ludGVyIHVzZXJfZGF0YSkKQEAgLTcwMiw3ICs1MTgsOCBAQCBzdGF0aWMg
Z2Jvb2xlYW4gdG9nZ2xlRnVsbFNjcmVlbihCcm93c2VyV2luZG93ICp3aW5kb3csIGdwb2ludGVy
IHVzZXJfZGF0YSkKIAogc3RhdGljIHZvaWQgZWRpdGluZ0NvbW1hbmRDYWxsYmFjayhHdGtXaWRn
ZXQqd2lkZ2V0LCBCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHdpbmRvdy0+d2ViVmlldywgZ3RrX3dpZGdldF9nZXRf
bmFtZSh3aWRnZXQpKTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJvd3Nlcl90YWJf
Z2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhl
Y3V0ZV9lZGl0aW5nX2NvbW1hbmQod2ViVmlldywgZ3RrX3dpZGdldF9nZXRfbmFtZSh3aWRnZXQp
KTsKIH0KIAogc3RhdGljIHZvaWQgaW5zZXJ0SW1hZ2VDb21tYW5kQ2FsbGJhY2soR3RrV2lkZ2V0
KndpZGdldCwgQnJvd3NlcldpbmRvdyAqd2luZG93KQpAQCAtNzE4LDcgKzUzNSw4IEBAIHN0YXRp
YyB2b2lkIGluc2VydEltYWdlQ29tbWFuZENhbGxiYWNrKEd0a1dpZGdldCp3aWRnZXQsIEJyb3dz
ZXJXaW5kb3cgKndpbmRvdykKICAgICBpZiAoZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhmaWxl
Q2hvb3NlcikpID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKICAgICAgICAgY2hhciAqdXJpID0g
Z3RrX2ZpbGVfY2hvb3Nlcl9nZXRfdXJpKEdUS19GSUxFX0NIT09TRVIoZmlsZUNob29zZXIpKTsK
ICAgICAgICAgaWYgKHVyaSkgewotICAgICAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVf
ZWRpdGluZ19jb21tYW5kX3dpdGhfYXJndW1lbnQod2luZG93LT53ZWJWaWV3LCBXRUJLSVRfRURJ
VElOR19DT01NQU5EX0lOU0VSVF9JTUFHRSwgdXJpKTsKKyAgICAgICAgICAgIFdlYktpdFdlYlZp
ZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIp
OworICAgICAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX3dp
dGhfYXJndW1lbnQod2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9JTlNFUlRfSU1BR0Us
IHVyaSk7CiAgICAgICAgICAgICBnX2ZyZWUodXJpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcz
OCw4ICs1NTYsMTAgQEAgc3RhdGljIHZvaWQgaW5zZXJ0TGlua0NvbW1hbmRDYWxsYmFjayhHdGtX
aWRnZXQqd2lkZ2V0LCBCcm93c2VyV2luZG93ICp3aW5kb3cpCiAKICAgICBpZiAoZ3RrX2RpYWxv
Z19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CiAgICAg
ICAgIGNvbnN0IGNoYXIgKnVybCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50cnkp
KTsKLSAgICAgICAgaWYgKHVybCAmJiAqdXJsKQotICAgICAgICAgICAgd2Via2l0X3dlYl92aWV3
X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX3dpdGhfYXJndW1lbnQod2luZG93LT53ZWJWaWV3LCBX
RUJLSVRfRURJVElOR19DT01NQU5EX0NSRUFURV9MSU5LLCB1cmwpOworICAgICAgICBpZiAodXJs
ICYmICp1cmwpIHsKKyAgICAgICAgICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBicm93c2Vy
X3RhYl9nZXRfd2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIpOworICAgICAgICAgICAgd2Via2l0
X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX3dpdGhfYXJndW1lbnQod2ViVmlldywg
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9DUkVBVEVfTElOSywgdXJsKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwpAQCAtNzc0LDkgKzU5NCw2IEBA
IHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dGaW5hbGl6ZShHT2JqZWN0ICpnT2JqZWN0KQogICAg
ICAgICB3aW5kb3ctPmFjY2VsR3JvdXAgPSBOVUxMOwogICAgIH0KIAotICAgIGlmICh3aW5kb3ct
PmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWxJZCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdpbmRv
dy0+ZnVsbFNjcmVlbk1lc3NhZ2VMYWJlbElkKTsKLQogICAgIGlmICh3aW5kb3ctPnJlc2V0RW50
cnlQcm9ncmVzc1RpbWVvdXRJZCkKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdpbmRvdy0+cmVz
ZXRFbnRyeVByb2dyZXNzVGltZW91dElkKTsKIApAQCAtNzg4LDMyICs2MDUsNiBAQCBzdGF0aWMg
dm9pZCBicm93c2VyV2luZG93RmluYWxpemUoR09iamVjdCAqZ09iamVjdCkKICAgICAgICAgZ3Rr
X21haW5fcXVpdCgpOwogfQogCi1zdGF0aWMgdm9pZCBicm93c2VyV2luZG93R2V0UHJvcGVydHko
R09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMg
KnBzcGVjKQotewotICAgIEJyb3dzZXJXaW5kb3cgKndpbmRvdyA9IEJST1dTRVJfV0lORE9XKG9i
amVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgUFJPUF9WSUVXOgotICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIGJyb3dzZXJfd2luZG93X2dldF92aWV3KHdp
bmRvdykpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dTZXRQcm9wZXJ0eShHT2JqZWN0ICpvYmplY3Qs
IGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCi17
Ci0gICAgQnJvd3NlcldpbmRvdyogd2luZG93ID0gQlJPV1NFUl9XSU5ET1cob2JqZWN0KTsKLQot
ICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBQUk9QX1ZJRVc6Ci0gICAgICAgIHdpbmRv
dy0+d2ViVmlldyA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BJZCwgcHNwZWMpOwotICAgIH0KLX0KLQogc3RhdGljIHZvaWQgYnJvd3Nlcldp
bmRvd1NldHVwRWRpdG9yVG9vbGJhcihCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7CiAgICAgR3Rr
V2lkZ2V0ICp0b29sYmFyID0gZ3RrX3Rvb2xiYXJfbmV3KCk7CkBAIC05NDMsOSArNzM0LDY2IEBA
IHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dTZXR1cEVkaXRvclRvb2xiYXIoQnJvd3NlcldpbmRv
dyAqd2luZG93KQogICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGl0ZW0pKTsKIAogICAg
IGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHdpbmRvdy0+bWFpbkJveCksIHRvb2xiYXIsIEZB
TFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9yZW9yZGVyX2NoaWxkKEdUS19CT1god2luZG93
LT5tYWluQm94KSwgdG9vbGJhciwgMSk7CiAgICAgZ3RrX3dpZGdldF9zaG93KHRvb2xiYXIpOwog
fQogCitzdGF0aWMgdm9pZCBicm93c2VyV2luZG93U3dpdGNoVGFiKEd0a05vdGVib29rICpub3Rl
Ym9vaywgQnJvd3NlclRhYiAqdGFiLCBndWludCB0YWJJbmRleCwgQnJvd3NlcldpbmRvdyAqd2lu
ZG93KQoreworICAgIGlmICh3aW5kb3ctPmFjdGl2ZVRhYiA9PSB0YWIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICh3aW5kb3ctPmFjdGl2ZVRhYikgeworICAgICAgICBicm93c2VyX3RhYl9z
ZXRfc3RhdHVzX3RleHQod2luZG93LT5hY3RpdmVUYWIsIE5VTEwpOworICAgICAgICBnX2NsZWFy
X29iamVjdCgmd2luZG93LT5mYXZpY29uKTsKKworICAgICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJW
aWV3ID0gYnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKHdlYlZpZXcsIHdpbmRvdyk7
CisKKyAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrRm9yd2FkbGlzdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShiYWNrRm9yd2FkbGlzdCwgd2luZG93KTsK
KyAgICB9CisKKyAgICB3aW5kb3ctPmFjdGl2ZVRhYiA9IHRhYjsKKworICAgIFdlYktpdFdlYlZp
ZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIp
OworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfaXNfZWRpdGFibGUod2ViVmlldykpIHsKKyAgICAg
ICAgYnJvd3NlcldpbmRvd1NldHVwRWRpdG9yVG9vbGJhcih3aW5kb3cpOworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYmtpdF93ZWJfdmlld19nZXRfZWRpdG9yX3N0YXRlKHdlYlZpZXcpLCAi
bm90aWZ5Ojp0eXBpbmctYXR0cmlidXRlcyIsIEdfQ0FMTEJBQ0sodHlwaW5nQXR0cmlidXRlc0No
YW5nZWQpLCB3aW5kb3cpOworICAgIH0KKyAgICB3ZWJWaWV3VVJJQ2hhbmdlZCh3ZWJWaWV3LCBO
VUxMLCB3aW5kb3cpOworICAgIHdlYlZpZXdUaXRsZUNoYW5nZWQod2ViVmlldywgTlVMTCwgd2lu
ZG93KTsKKyAgICB3ZWJWaWV3SXNMb2FkaW5nQ2hhbmdlZCh3ZWJWaWV3LCBOVUxMLCB3aW5kb3cp
OworICAgIGZhdmljb25DaGFuZ2VkKHdlYlZpZXcsIE5VTEwsIHdpbmRvdyk7CisgICAgYnJvd3Nl
cldpbmRvd1VwZGF0ZVpvb21BY3Rpb25zKHdpbmRvdyk7CisgICAgaWYgKHdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKQorICAgICAgICB3ZWJWaWV3TG9hZFByb2dyZXNzQ2hhbmdl
ZCh3ZWJWaWV3LCBOVUxMLCB3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHdlYlZpZXdVUklDaGFuZ2VkKSwgd2luZG93KTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmVzdGltYXRlZC1sb2FkLXBy
b2dyZXNzIiwgR19DQUxMQkFDSyh3ZWJWaWV3TG9hZFByb2dyZXNzQ2hhbmdlZCksIHdpbmRvdyk7
CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJB
Q0sod2ViVmlld1RpdGxlQ2hhbmdlZCksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAibm90aWZ5Ojppcy1sb2FkaW5nIiwgR19DQUxMQkFDSyh3ZWJWaWV3SXNMb2FkaW5n
Q2hhbmdlZCksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRl
IiwgR19DQUxMQkFDSyh3ZWJWaWV3Q3JlYXRlKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJjbG9zZSIsIEdfQ0FMTEJBQ0sod2ViVmlld0Nsb3NlKSwgd2luZG93KTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0so
d2ViVmlld0xvYWRGYWlsZWQpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmll
dywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKHdlYlZpZXdEZWNpZGVQb2xpY3kpLCB3aW5k
b3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyh3ZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKSwgd2luZG93KTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6Onpvb20tbGV2ZWwiLCBHX0NBTExCQUNL
KHdlYlZpZXdab29tTGV2ZWxDaGFuZ2VkKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcsICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExCQUNLKGZhdmljb25DaGFuZ2VkKSwg
d2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJlbnRlci1mdWxsc2NyZWVu
IiwgR19DQUxMQkFDSyh3ZWJWaWV3RW50ZXJGdWxsU2NyZWVuKSwgd2luZG93KTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYlZpZXcsICJsZWF2ZS1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh3ZWJW
aWV3TGVhdmVGdWxsU2NyZWVuKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJzY3JvbGwtZXZlbnQiLCBHX0NBTExCQUNLKHNjcm9sbEV2ZW50Q2FsbGJhY2spLCB3aW5k
b3cpOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrRm9yd2FkbGlzdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgYnJvd3Nlcldp
bmRvd1VwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKHdpbmRvdywgYmFja0ZvcndhZGxpc3QpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QoYmFja0ZvcndhZGxpc3QsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhi
YWNrRm9yd2FkbGlzdENoYW5nZWQpLCB3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCBicm93c2Vy
V2luZG93VGFiQWRkZWRPclJlbW92ZWQoR3RrTm90ZWJvb2sgKm5vdGVib29rLCBCcm93c2VyVGFi
ICp0YWIsIGd1aW50IHRhYkluZGV4LCBCcm93c2VyV2luZG93ICp3aW5kb3cpCit7CisgICAgZ3Rr
X25vdGVib29rX3NldF9zaG93X3RhYnMoR1RLX05PVEVCT09LKHdpbmRvdy0+bm90ZWJvb2spLCBn
dGtfbm90ZWJvb2tfZ2V0X25fcGFnZXMobm90ZWJvb2spID4gMSk7Cit9CisKIHN0YXRpYyB2b2lk
IGJyb3dzZXJfd2luZG93X2luaXQoQnJvd3NlcldpbmRvdyAqd2luZG93KQogewogICAgIGdfYXRv
bWljX2ludF9pbmMoJndpbmRvd0NvdW50KTsKQEAgLTk2OCw3ICs4MTYsNyBAQCBzdGF0aWMgdm9p
ZCBicm93c2VyX3dpbmRvd19pbml0KEJyb3dzZXJXaW5kb3cgKndpbmRvdykKICAgICBndGtfYWNj
ZWxfZ3JvdXBfY29ubmVjdCh3aW5kb3ctPmFjY2VsR3JvdXAsIEdES19LRVlfRjEyLCAwLCBHVEtf
QUNDRUxfVklTSUJMRSwKICAgICAgICAgZ19jY2xvc3VyZV9uZXdfc3dhcChHX0NBTExCQUNLKHRv
Z2dsZVdlYkluc3BlY3RvciksIHdpbmRvdywgTlVMTCkpOwogCi0gICAgLyogUmVsb2FkIHBhZ2Ug
Ki8gCisgICAgLyogUmVsb2FkIHBhZ2UgKi8KICAgICBndGtfYWNjZWxfZ3JvdXBfY29ubmVjdCh3
aW5kb3ctPmFjY2VsR3JvdXAsIEdES19LRVlfRjUsIDAsIEdUS19BQ0NFTF9WSVNJQkxFLAogICAg
ICAgICBnX2NjbG9zdXJlX25ld19zd2FwKEdfQ0FMTEJBQ0socmVsb2FkUGFnZSksIHdpbmRvdywg
TlVMTCkpOwogICAgIGd0a19hY2NlbF9ncm91cF9jb25uZWN0KHdpbmRvdy0+YWNjZWxHcm91cCwg
R0RLX0tFWV9SLCBHREtfQ09OVFJPTF9NQVNLLCBHVEtfQUNDRUxfVklTSUJMRSwKQEAgLTk4MCwx
MyArODI4LDEzIEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJfd2luZG93X2luaXQoQnJvd3NlcldpbmRv
dyAqd2luZG93KQogICAgIGd0a19hY2NlbF9ncm91cF9jb25uZWN0KHdpbmRvdy0+YWNjZWxHcm91
cCwgR0RLX0tFWV9SLCBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssIEdUS19BQ0NF
TF9WSVNJQkxFLAogICAgICAgICBnX2NjbG9zdXJlX25ld19zd2FwKEdfQ0FMTEJBQ0socmVsb2Fk
UGFnZUlnbm9yaW5nQ2FjaGUpLCB3aW5kb3csIE5VTEwpKTsKIAotICAgIC8qIFN0b3AgcGFnZSBs
b2FkICovIAorICAgIC8qIFN0b3AgcGFnZSBsb2FkICovCiAgICAgZ3RrX2FjY2VsX2dyb3VwX2Nv
bm5lY3Qod2luZG93LT5hY2NlbEdyb3VwLCBHREtfS0VZX0Y2LCAwLCBHVEtfQUNDRUxfVklTSUJM
RSwKICAgICAgICAgZ19jY2xvc3VyZV9uZXdfc3dhcChHX0NBTExCQUNLKHN0b3BQYWdlTG9hZCks
IHdpbmRvdywgTlVMTCkpOwogICAgIGd0a19hY2NlbF9ncm91cF9jb25uZWN0KHdpbmRvdy0+YWNj
ZWxHcm91cCwgR0RLX0tFWV9Fc2NhcGUsIDAsIEdUS19BQ0NFTF9WSVNJQkxFLAogICAgICAgICBn
X2NjbG9zdXJlX25ld19zd2FwKEdfQ0FMTEJBQ0soc3RvcFBhZ2VMb2FkKSwgd2luZG93LCBOVUxM
KSk7CiAKLSAgICAvKiBMb2FkIGhvbWUgcGFnZSAqLyAKKyAgICAvKiBMb2FkIGhvbWUgcGFnZSAq
LwogICAgIGd0a19hY2NlbF9ncm91cF9jb25uZWN0KHdpbmRvdy0+YWNjZWxHcm91cCwgR0RLX0tF
WV9Ib21lLCBHREtfTU9EMV9NQVNLLCBHVEtfQUNDRUxfVklTSUJMRSwKICAgICAgICAgZ19jY2xv
c3VyZV9uZXdfc3dhcChHX0NBTExCQUNLKGxvYWRIb21lUGFnZSksIHdpbmRvdywgTlVMTCkpOwog
CkBAIC0xMDA0LDcgKzg1Miw3IEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJfd2luZG93X2luaXQoQnJv
d3NlcldpbmRvdyAqd2luZG93KQogICAgIGd0a19hY2NlbF9ncm91cF9jb25uZWN0KHdpbmRvdy0+
YWNjZWxHcm91cCwgR0RLX0tFWV9LUF8wLCBHREtfQ09OVFJPTF9NQVNLLCBHVEtfQUNDRUxfVklT
SUJMRSwKICAgICAgICAgZ19jY2xvc3VyZV9uZXdfc3dhcChHX0NBTExCQUNLKGRlZmF1bHRab29t
Q2FsbGJhY2spLCB3aW5kb3csIE5VTEwpKTsKIAotICAgIC8qIFRvZ2dsZSBmdWxsc2NyZWVuICov
IAorICAgIC8qIFRvZ2dsZSBmdWxsc2NyZWVuICovCiAgICAgZ3RrX2FjY2VsX2dyb3VwX2Nvbm5l
Y3Qod2luZG93LT5hY2NlbEdyb3VwLCBHREtfS0VZX0YxMSwgMCwgR1RLX0FDQ0VMX1ZJU0lCTEUs
CiAgICAgICAgIGdfY2Nsb3N1cmVfbmV3X3N3YXAoR19DQUxMQkFDSyh0b2dnbGVGdWxsU2NyZWVu
KSwgd2luZG93LCBOVUxMKSk7CiAKQEAgLTEwMTQsNiArODYyLDggQEAgc3RhdGljIHZvaWQgYnJv
d3Nlcl93aW5kb3dfaW5pdChCcm93c2VyV2luZG93ICp3aW5kb3cpCiAgICAgZ3RrX2FjY2VsX2dy
b3VwX2Nvbm5lY3Qod2luZG93LT5hY2NlbEdyb3VwLCBHREtfS0VZX1csIEdES19DT05UUk9MX01B
U0ssIEdUS19BQ0NFTF9WSVNJQkxFLAogICAgICAgICBnX2NjbG9zdXJlX25ld19zd2FwKEdfQ0FM
TEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwgd2luZG93LCBOVUxMKSk7CiAKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCAiZG93bmxvYWQtc3Rh
cnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkKSwgd2luZG93KTsKKwogICAgIEd0a1dp
ZGdldCAqdG9vbGJhciA9IGd0a190b29sYmFyX25ldygpOwogICAgIHdpbmRvdy0+dG9vbGJhciA9
IHRvb2xiYXI7CiAgICAgZ3RrX29yaWVudGFibGVfc2V0X29yaWVudGF0aW9uKEdUS19PUklFTlRB
QkxFKHRvb2xiYXIpLCBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CkBAIC0xMDYyLDYgKzkx
MiwxMiBAQCBzdGF0aWMgdm9pZCBicm93c2VyX3dpbmRvd19pbml0KEJyb3dzZXJXaW5kb3cgKndp
bmRvdykKICAgICBndGtfd2lkZ2V0X2FkZF9hY2NlbGVyYXRvcihHVEtfV0lER0VUKGl0ZW0pLCAi
Y2xpY2tlZCIsIHdpbmRvdy0+YWNjZWxHcm91cCwgR0RLX0tFWV9Ib21lLCBHREtfTU9EMV9NQVNL
LCBHVEtfQUNDRUxfVklTSUJMRSk7CiAgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoaXRl
bSkpOwogCisgICAgaXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXcoZ3RrX2ltYWdlX25ld19mcm9t
X2ljb25fbmFtZSgidGFiLW5ldyIsIEdUS19JQ09OX1NJWkVfU01BTExfVE9PTEJBUiksIE5VTEwp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChpdGVtLCAiY2xpY2tlZCIsIEdfQ0FMTEJB
Q0sobmV3VGFiQ2FsbGJhY2spLCB3aW5kb3cpOworICAgIGd0a190b29sYmFyX2luc2VydChHVEtf
VE9PTEJBUih0b29sYmFyKSwgaXRlbSwgLTEpOworICAgIGd0a193aWRnZXRfYWRkX2FjY2VsZXJh
dG9yKEdUS19XSURHRVQoaXRlbSksICJjbGlja2VkIiwgd2luZG93LT5hY2NlbEdyb3VwLCBHREtf
S0VZX1QsIEdES19DT05UUk9MX01BU0ssIEdUS19BQ0NFTF9WSVNJQkxFKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKEdUS19XSURHRVQoaXRlbSkpOworCiAgICAgaXRlbSA9IGd0a190b29sX2l0
ZW1fbmV3KCk7CiAgICAgZ3RrX3Rvb2xfaXRlbV9zZXRfZXhwYW5kKGl0ZW0sIFRSVUUpOwogICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoaXRlbSksIHdpbmRvdy0+dXJpRW50cnkp
OwpAQCAtMTA4MSw2ICs5MzcsMTUgQEAgc3RhdGljIHZvaWQgYnJvd3Nlcl93aW5kb3dfaW5pdChC
cm93c2VyV2luZG93ICp3aW5kb3cpCiAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJv
eCksIHRvb2xiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiAgICAgZ3RrX3dpZGdldF9zaG93KHRvb2xi
YXIpOwogCisgICAgd2luZG93LT5ub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+bm90ZWJvb2ssICJzd2l0Y2gtcGFnZSIsIEdfQ0FMTEJB
Q0soYnJvd3NlcldpbmRvd1N3aXRjaFRhYiksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVj
dCh3aW5kb3ctPm5vdGVib29rLCAicGFnZS1hZGRlZCIsIEdfQ0FMTEJBQ0soYnJvd3NlcldpbmRv
d1RhYkFkZGVkT3JSZW1vdmVkKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRv
dy0+bm90ZWJvb2ssICJwYWdlLXJlbW92ZWQiLCBHX0NBTExCQUNLKGJyb3dzZXJXaW5kb3dUYWJB
ZGRlZE9yUmVtb3ZlZCksIHdpbmRvdyk7CisgICAgZ3RrX25vdGVib29rX3NldF9zaG93X3RhYnMo
R1RLX05PVEVCT09LKHdpbmRvdy0+bm90ZWJvb2spLCBGQUxTRSk7CisgICAgZ3RrX25vdGVib29r
X3NldF9zaG93X2JvcmRlcihHVEtfTk9URUJPT0sod2luZG93LT5ub3RlYm9vayksIEZBTFNFKTsK
KyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh3aW5kb3ctPm1haW5Cb3gpLCB3aW5kb3ct
Pm5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93LT5u
b3RlYm9vayk7CisKICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyks
IHZib3gpOwogICAgIGd0a193aWRnZXRfc2hvdyh2Ym94KTsKIH0KQEAgLTEwODksNjkgKzk1NCw3
IEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dDb25zdHJ1Y3RlZChHT2JqZWN0ICpnT2JqZWN0
KQogewogICAgIEJyb3dzZXJXaW5kb3cgKndpbmRvdyA9IEJST1dTRVJfV0lORE9XKGdPYmplY3Qp
OwogCi0gICAgYnJvd3NlcldpbmRvd1VwZGF0ZVpvb21BY3Rpb25zKHdpbmRvdyk7Ci0gICAgaWYg
KHdlYmtpdF93ZWJfdmlld19pc19lZGl0YWJsZSh3aW5kb3ctPndlYlZpZXcpKSB7Ci0gICAgICAg
IGJyb3dzZXJXaW5kb3dTZXR1cEVkaXRvclRvb2xiYXIod2luZG93KTsKLSAgICAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VkaXRvcl9zdGF0ZSh3aW5kb3ctPndlYlZp
ZXcpLCAibm90aWZ5Ojp0eXBpbmctYXR0cmlidXRlcyIsIEdfQ0FMTEJBQ0sodHlwaW5nQXR0cmli
dXRlc0NoYW5nZWQpLCB3aW5kb3cpOwotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lu
ZG93LT53ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHdlYlZpZXdVUklDaGFuZ2Vk
KSwgd2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmlldywgIm5vdGlm
eTo6ZXN0aW1hdGVkLWxvYWQtcHJvZ3Jlc3MiLCBHX0NBTExCQUNLKHdlYlZpZXdMb2FkUHJvZ3Jl
c3NDaGFuZ2VkKSwgd2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmll
dywgIm5vdGlmeTo6dGl0bGUiLCBHX0NBTExCQUNLKHdlYlZpZXdUaXRsZUNoYW5nZWQpLCB3aW5k
b3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAiY3JlYXRlIiwgR19D
QUxMQkFDSyh3ZWJWaWV3Q3JlYXRlKSwgd2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdp
bmRvdy0+d2ViVmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh3ZWJWaWV3Q2xvc2UpLCB3aW5kb3cp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBH
X0NBTExCQUNLKHdlYlZpZXdMb2FkRmFpbGVkKSwgd2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KHdpbmRvdy0+d2ViVmlldywgImxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FM
TEJBQ0sod2ViVmlld0xvYWRGYWlsZWRXaXRoVExTZXJyb3JzKSwgd2luZG93KTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNL
KHdlYlZpZXdEZWNpZGVQb2xpY3kpLCB3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lu
ZG93LT53ZWJWaWV3LCAicGVybWlzc2lvbi1yZXF1ZXN0IiwgR19DQUxMQkFDSyh3ZWJWaWV3RGVj
aWRlUGVybWlzc2lvblJlcXVlc3QpLCB3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lu
ZG93LT53ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKHdlYlZpZXdN
b3VzZVRhcmdldENoYW5nZWQpLCB3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93
LT53ZWJWaWV3LCAibm90aWZ5Ojp6b29tLWxldmVsIiwgR19DQUxMQkFDSyh3ZWJWaWV3Wm9vbUxl
dmVsQ2hhbmdlZCksIHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3ctPndlYlZp
ZXcsICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExCQUNLKGZhdmljb25DaGFuZ2VkKSwgd2luZG93
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmlldywgImVudGVyLWZ1bGxzY3Jl
ZW4iLCBHX0NBTExCQUNLKHdlYlZpZXdFbnRlckZ1bGxTY3JlZW4pLCB3aW5kb3cpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAibGVhdmUtZnVsbHNjcmVlbiIsIEdfQ0FM
TEJBQ0sod2ViVmlld0xlYXZlRnVsbFNjcmVlbiksIHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdCh3aW5kb3ctPndlYlZpZXcsICJub3RpZnk6OmlzLWxvYWRpbmciLCBHX0NBTExCQUNLKHdl
YlZpZXdJc0xvYWRpbmdDaGFuZ2VkKSwgd2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdp
bmRvdy0+d2ViVmlldywgInNjcm9sbC1ldmVudCIsIEdfQ0FMTEJBQ0soc2Nyb2xsRXZlbnRDYWxs
YmFjayksIHdpbmRvdyk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTIsIDApCi0gICAgZ19z
aWduYWxfY29ubmVjdCh3aW5kb3ctPndlYlZpZXcsICJydW4tY29sb3ItY2hvb3NlciIsIEdfQ0FM
TEJBQ0socnVuQ29sb3JDaG9vc2VyQ2FsbGJhY2spLCB3aW5kb3cpOwotI2VuZGlmCi0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3aW5kb3ctPndlYlZp
ZXcpLCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkKSwgd2lu
ZG93KTsKLQotICAgIHdpbmRvdy0+c2VhcmNoQmFyID0gQlJPV1NFUl9TRUFSQ0hfQkFSKGJyb3dz
ZXJfc2VhcmNoX2Jhcl9uZXcod2luZG93LT53ZWJWaWV3KSk7Ci0gICAgYnJvd3Nlcl9zZWFyY2hf
YmFyX2FkZF9hY2NlbGVyYXRvcnMod2luZG93LT5zZWFyY2hCYXIsIHdpbmRvdy0+YWNjZWxHcm91
cCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1god2luZG93LT5tYWluQm94KSwgR1RL
X1dJREdFVCh3aW5kb3ctPnNlYXJjaEJhciksIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgICBXZWJL
aXRCYWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YWRsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9i
YWNrX2ZvcndhcmRfbGlzdCh3aW5kb3ctPndlYlZpZXcpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
YmFja0ZvcndhZGxpc3QsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhiYWNrRm9yd2FkbGlzdENoYW5n
ZWQpLCB3aW5kb3cpOwotCi0gICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3JXaW5kb3cg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVcod2luZG93LT53
ZWJWaWV3KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChpbnNwZWN0b3JXaW5kb3csICJvcGVuLXdp
bmRvdyIsIEdfQ0FMTEJBQ0soaW5zcGVjdG9yV2FzT3BlbmVkSW5Bbm90aGVyV2luZG93KSwgd2lu
ZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGluc3BlY3RvcldpbmRvdywgImNsb3NlZCIsIEdf
Q0FMTEJBQ0soaW5zcGVjdG9yV2FzQ2xvc2VkKSwgd2luZG93KTsKLQotICAgIEd0a1dpZGdldCAq
b3ZlcmxheSA9IGd0a19vdmVybGF5X25ldygpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtf
Qk9YKHdpbmRvdy0+bWFpbkJveCksIG92ZXJsYXksIFRSVUUsIFRSVUUsIDApOwotICAgIGd0a193
aWRnZXRfc2hvdyhvdmVybGF5KTsKLQotICAgIHdpbmRvdy0+c3RhdHVzTGFiZWwgPSBndGtfbGFi
ZWxfbmV3KE5VTEwpOwotICAgIGd0a193aWRnZXRfc2V0X2hhbGlnbih3aW5kb3ctPnN0YXR1c0xh
YmVsLCBHVEtfQUxJR05fU1RBUlQpOwotICAgIGd0a193aWRnZXRfc2V0X3ZhbGlnbih3aW5kb3ct
PnN0YXR1c0xhYmVsLCBHVEtfQUxJR05fRU5EKTsKLSAgICBndGtfd2lkZ2V0X3NldF9tYXJnaW5f
bGVmdCh3aW5kb3ctPnN0YXR1c0xhYmVsLCAxKTsKLSAgICBndGtfd2lkZ2V0X3NldF9tYXJnaW5f
cmlnaHQod2luZG93LT5zdGF0dXNMYWJlbCwgMSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfbWFyZ2lu
X3RvcCh3aW5kb3ctPnN0YXR1c0xhYmVsLCAxKTsKLSAgICBndGtfd2lkZ2V0X3NldF9tYXJnaW5f
Ym90dG9tKHdpbmRvdy0+c3RhdHVzTGFiZWwsIDEpOwotICAgIGd0a19vdmVybGF5X2FkZF9vdmVy
bGF5KEdUS19PVkVSTEFZKG92ZXJsYXkpLCB3aW5kb3ctPnN0YXR1c0xhYmVsKTsKLQotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIob3ZlcmxheSksIEdUS19XSURHRVQod2luZG93
LT53ZWJWaWV3KSk7Ci0KLSAgICB3aW5kb3ctPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWwgPSBndGtf
bGFiZWxfbmV3KE5VTEwpOwotICAgIGd0a193aWRnZXRfc2V0X2hhbGlnbih3aW5kb3ctPmZ1bGxT
Y3JlZW5NZXNzYWdlTGFiZWwsIEdUS19BTElHTl9DRU5URVIpOwotICAgIGd0a193aWRnZXRfc2V0
X3ZhbGlnbih3aW5kb3ctPmZ1bGxTY3JlZW5NZXNzYWdlTGFiZWwsIEdUS19BTElHTl9DRU5URVIp
OwotICAgIGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKHdpbmRvdy0+ZnVsbFNjcmVlbk1lc3Nh
Z2VMYWJlbCwgVFJVRSk7Ci0gICAgZ3RrX292ZXJsYXlfYWRkX292ZXJsYXkoR1RLX09WRVJMQVko
b3ZlcmxheSksIHdpbmRvdy0+ZnVsbFNjcmVlbk1lc3NhZ2VMYWJlbCk7Ci0gICAgZ3RrX3dpZGdl
dF9zaG93KEdUS19XSURHRVQod2luZG93LT53ZWJWaWV3KSk7Ci0KLSAgICBpZiAod2Via2l0X3dl
Yl92aWV3X2lzX2VkaXRhYmxlKHdpbmRvdy0+d2ViVmlldykpCi0gICAgICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX2h0bWwod2luZG93LT53ZWJWaWV3LCAiPGh0bWw+PC9odG1sPiIsICJmaWxlOi8v
LyIpOworICAgIEdfT0JKRUNUX0NMQVNTKGJyb3dzZXJfd2luZG93X3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdGVkKGdPYmplY3QpOwogfQogCiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93U2F2ZVNl
c3Npb24oQnJvd3NlcldpbmRvdyAqd2luZG93KQpAQCAtMTE1OSw3ICs5NjIsOCBAQCBzdGF0aWMg
dm9pZCBicm93c2VyV2luZG93U2F2ZVNlc3Npb24oQnJvd3NlcldpbmRvdyAqd2luZG93KQogICAg
IGlmICghd2luZG93LT5zZXNzaW9uRmlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViS2l0
V2ViVmlld1Nlc3Npb25TdGF0ZSAqc3RhdGUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nlc3Npb25f
c3RhdGUod2luZG93LT53ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJv
d3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKyAgICBXZWJLaXRXZWJW
aWV3U2Vzc2lvblN0YXRlICpzdGF0ZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2Vzc2lvbl9zdGF0
ZSh3ZWJWaWV3KTsKICAgICBHQnl0ZXMgKmJ5dGVzID0gd2Via2l0X3dlYl92aWV3X3Nlc3Npb25f
c3RhdGVfc2VyaWFsaXplKHN0YXRlKTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfc2Vzc2lvbl9zdGF0
ZV91bnJlZihzdGF0ZSk7CiAgICAgZ19maWxlX3NldF9jb250ZW50cyh3aW5kb3ctPnNlc3Npb25G
aWxlLCBnX2J5dGVzX2dldF9kYXRhKGJ5dGVzLCBOVUxMKSwgZ19ieXRlc19nZXRfc2l6ZShieXRl
cyksIE5VTEwpOwpAQCAtMTE3MCw3ICs5NzQsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gYnJvd3Nlcldp
bmRvd0RlbGV0ZUV2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEFueSogZXZlbnQpCiB7
CiAgICAgQnJvd3NlcldpbmRvdyAqd2luZG93ID0gQlJPV1NFUl9XSU5ET1cod2lkZ2V0KTsKICAg
ICBicm93c2VyV2luZG93U2F2ZVNlc3Npb24od2luZG93KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
dHJ5X2Nsb3NlKHdpbmRvdy0+d2ViVmlldyk7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9
IGJyb3dzZXJfdGFiX2dldF93ZWJfdmlldyh3aW5kb3ctPmFjdGl2ZVRhYik7CisgICAgd2Via2l0
X3dlYl92aWV3X3RyeV9jbG9zZSh3ZWJWaWV3KTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAt
MTE3OSwyOSArOTg0LDE3IEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJfd2luZG93X2NsYXNzX2luaXQo
QnJvd3NlcldpbmRvd0NsYXNzICprbGFzcykKICAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKIAogICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
ZWQgPSBicm93c2VyV2luZG93Q29uc3RydWN0ZWQ7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSBicm93c2VyV2luZG93R2V0UHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSBicm93c2VyV2luZG93U2V0UHJvcGVydHk7CiAgICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IGJyb3dzZXJXaW5kb3dGaW5hbGl6ZTsKIAogICAgIEd0a1dpZGdldENsYXNzICp3
aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Moa2xhc3MpOwogICAgIHdpZGdldENsYXNzLT5k
ZWxldGVfZXZlbnQgPSBicm93c2VyV2luZG93RGVsZXRlRXZlbnQ7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfVklFVywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInZpZXciLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmlldyIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgd2ViIHZpZXcg
b2YgdGhpcyB3aW5kb3ciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfVklFVywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUg
fCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CiB9CiAKLS8vIFB1YmxpYyBBUEkuCi1HdGtXaWRn
ZXQgKmJyb3dzZXJfd2luZG93X25ldyhXZWJLaXRXZWJWaWV3ICp2aWV3LCBHdGtXaW5kb3cgKnBh
cmVudCkKKy8qIFB1YmxpYyBBUEkuICovCitHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25ldyhH
dGtXaW5kb3cgKnBhcmVudCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX1ZJRVcodmlldyksIDApOwotCiAgICAgQnJvd3NlcldpbmRvdyAqd2luZG93ID0gQlJPV1NF
Ul9XSU5ET1coZ19vYmplY3RfbmV3KEJST1dTRVJfVFlQRV9XSU5ET1csCi0gICAgICAgICJ0eXBl
IiwgR1RLX1dJTkRPV19UT1BMRVZFTCwgInZpZXciLCB2aWV3LCBOVUxMKSk7CisgICAgICAgICJ0
eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZFTCwgTlVMTCkpOwogCiAgICAgaWYgKHBhcmVudCkgewog
ICAgICAgICB3aW5kb3ctPnBhcmVudFdpbmRvdyA9IHBhcmVudDsKQEAgLTEyMTEsMTEgKzEwMDQs
MjEgQEAgR3RrV2lkZ2V0ICpicm93c2VyX3dpbmRvd19uZXcoV2ViS2l0V2ViVmlldyAqdmlldywg
R3RrV2luZG93ICpwYXJlbnQpCiAgICAgcmV0dXJuIEdUS19XSURHRVQod2luZG93KTsKIH0KIAot
V2ViS2l0V2ViVmlldyAqYnJvd3Nlcl93aW5kb3dfZ2V0X3ZpZXcoQnJvd3NlcldpbmRvdyAqd2lu
ZG93KQordm9pZCBicm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyhCcm93c2VyV2luZG93ICp3aW5k
b3csIFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
QlJPV1NFUl9JU19XSU5ET1cod2luZG93KSwgMCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChCUk9X
U0VSX0lTX1dJTkRPVyh3aW5kb3cpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfVklFVyh3ZWJWaWV3KSk7CiAKLSAgICByZXR1cm4gd2luZG93LT53ZWJWaWV3OworICAgIGlm
ICh3aW5kb3ctPmFjdGl2ZVRhYiAmJiB3ZWJraXRfd2ViX3ZpZXdfaXNfZWRpdGFibGUoYnJvd3Nl
cl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKSkpIHsKKyAgICAgICAgZ193YXJu
aW5nKCJPbmx5IG9uZSB0YWIgaXMgYWxsb3dlZCBpbiBlZGl0YWJsZSBtb2RlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQgKnRhYiA9IGJyb3dzZXJfdGFiX25ldyh3
ZWJWaWV3KTsKKyAgICBicm93c2VyX3RhYl9hZGRfYWNjZWxlcmF0b3JzKEJST1dTRVJfVEFCKHRh
YiksIHdpbmRvdy0+YWNjZWxHcm91cCk7CisgICAgZ3RrX25vdGVib29rX2FwcGVuZF9wYWdlKEdU
S19OT1RFQk9PSyh3aW5kb3ctPm5vdGVib29rKSwgdGFiLCBicm93c2VyX3RhYl9nZXRfdGl0bGVf
d2lkZ2V0KEJST1dTRVJfVEFCKHRhYikpKTsKKyAgICBndGtfY29udGFpbmVyX2NoaWxkX3NldChH
VEtfQ09OVEFJTkVSKHdpbmRvdy0+bm90ZWJvb2spLCB0YWIsICJ0YWItZXhwYW5kIiwgVFJVRSwg
TlVMTCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHRhYik7CiB9CiAKIHZvaWQgYnJvd3Nlcl93aW5k
b3dfbG9hZF91cmkoQnJvd3NlcldpbmRvdyAqd2luZG93LCBjb25zdCBjaGFyICp1cmkpCkBAIC0x
MjIzLDE0ICsxMDI2LDcgQEAgdm9pZCBicm93c2VyX3dpbmRvd19sb2FkX3VyaShCcm93c2VyV2lu
ZG93ICp3aW5kb3csIGNvbnN0IGNoYXIgKnVyaSkKICAgICBnX3JldHVybl9pZl9mYWlsKEJST1dT
RVJfSVNfV0lORE9XKHdpbmRvdykpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAotICAg
IGlmICghZ19zdHJfaGFzX3ByZWZpeCh1cmksICJqYXZhc2NyaXB0OiIpKSB7Ci0gICAgICAgIGNo
YXIgKmludGVybmFsVVJJID0gZ2V0SW50ZXJuYWxVUkkodXJpKTsKLSAgICAgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHdpbmRvdy0+d2ViVmlldywgaW50ZXJuYWxVUkkpOwotICAgICAgICBn
X2ZyZWUoaW50ZXJuYWxVUkkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd2Via2l0
X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0KHdpbmRvdy0+d2ViVmlldywgc3Ryc3RyKHVyaSwgImph
dmFzY3JpcHQ6IiksIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGJyb3dzZXJfdGFiX2xvYWRfdXJp
KHdpbmRvdy0+YWN0aXZlVGFiLCB1cmkpOwogfQogCiB2b2lkIGJyb3dzZXJfd2luZG93X2xvYWRf
c2Vzc2lvbihCcm93c2VyV2luZG93ICp3aW5kb3csIGNvbnN0IGNoYXIgKnNlc3Npb25GaWxlKQpA
QCAtMTIzOCw2ICsxMDM0LDcgQEAgdm9pZCBicm93c2VyX3dpbmRvd19sb2FkX3Nlc3Npb24oQnJv
d3NlcldpbmRvdyAqd2luZG93LCBjb25zdCBjaGFyICpzZXNzaW9uRmlsZSkKICAgICBnX3JldHVy
bl9pZl9mYWlsKEJST1dTRVJfSVNfV0lORE9XKHdpbmRvdykpOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2Vzc2lvbkZpbGUpOwogCisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGJyb3dzZXJf
dGFiX2dldF93ZWJfdmlldyh3aW5kb3ctPmFjdGl2ZVRhYik7CiAgICAgd2luZG93LT5zZXNzaW9u
RmlsZSA9IGdfc3RyZHVwKHNlc3Npb25GaWxlKTsKICAgICBnY2hhciAqZGF0YSA9IE5VTEw7CiAg
ICAgZ3NpemUgZGF0YUxlbmd0aDsKQEAgLTEyNDcsMTcgKzEwNDQsMTcgQEAgdm9pZCBicm93c2Vy
X3dpbmRvd19sb2FkX3Nlc3Npb24oQnJvd3NlcldpbmRvdyAqd2luZG93LCBjb25zdCBjaGFyICpz
ZXNzaW9uRmlsZSkKICAgICAgICAgZ19ieXRlc191bnJlZihieXRlcyk7CiAKICAgICAgICAgaWYg
KHN0YXRlKSB7Ci0gICAgICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfcmVzdG9yZV9zZXNzaW9uX3N0
YXRlKHdpbmRvdy0+d2ViVmlldywgc3RhdGUpOworICAgICAgICAgICAgd2Via2l0X3dlYl92aWV3
X3Jlc3RvcmVfc2Vzc2lvbl9zdGF0ZSh3ZWJWaWV3LCBzdGF0ZSk7CiAgICAgICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2Vzc2lvbl9zdGF0ZV91bnJlZihzdGF0ZSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJmTGlzdCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfYmFja19mb3J3YXJkX2xpc3Qod2luZG93LT53ZWJWaWV3KTsKKyAgICBXZWJLaXRCYWNrRm9y
d2FyZExpc3QgKmJmTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qo
d2ViVmlldyk7CiAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqaXRlbSA9IHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGJmTGlzdCk7CiAgICAgaWYgKGl0ZW0p
Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtKHdp
bmRvdy0+d2ViVmlldywgaXRlbSk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtKHdlYlZpZXcsIGl0ZW0pOwogICAgIGVsc2UKLSAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpKHdpbmRvdy0+d2ViVmlldywgQlJPV1NFUl9ERUZBVUxUX1VS
TCk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCBCUk9XU0VSX0RF
RkFVTFRfVVJMKTsKIAogfQogCkBAIC0xMjY2LDggKzEwNjMsOSBAQCB2b2lkIGJyb3dzZXJfd2lu
ZG93X3NldF9iYWNrZ3JvdW5kX2NvbG9yKEJyb3dzZXJXaW5kb3cgKndpbmRvdywgR2RrUkdCQSAq
cmdiYSkKICAgICBnX3JldHVybl9pZl9mYWlsKEJST1dTRVJfSVNfV0lORE9XKHdpbmRvdykpOwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwocmdiYSk7CiAKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
ID0gYnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKICAgICBHZGtS
R0JBIHZpZXdSR0JBOwotICAgIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja2dyb3VuZF9jb2xvcih3
aW5kb3ctPndlYlZpZXcsICZ2aWV3UkdCQSk7CisgICAgd2Via2l0X3dlYl92aWV3X2dldF9iYWNr
Z3JvdW5kX2NvbG9yKHdlYlZpZXcsICZ2aWV3UkdCQSk7CiAgICAgaWYgKGdka19yZ2JhX2VxdWFs
KHJnYmEsICZ2aWV3UkdCQSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTI3OCw1ICsxMDc2LDUg
QEAgdm9pZCBicm93c2VyX3dpbmRvd19zZXRfYmFja2dyb3VuZF9jb2xvcihCcm93c2VyV2luZG93
ICp3aW5kb3csIEdka1JHQkEgKnJnYmEpCiAgICAgZ3RrX3dpZGdldF9zZXRfdmlzdWFsKEdUS19X
SURHRVQod2luZG93KSwgcmdiYVZpc3VhbCk7CiAgICAgZ3RrX3dpZGdldF9zZXRfYXBwX3BhaW50
YWJsZShHVEtfV0lER0VUKHdpbmRvdyksIFRSVUUpOwogCi0gICAgd2Via2l0X3dlYl92aWV3X3Nl
dF9iYWNrZ3JvdW5kX2NvbG9yKHdpbmRvdy0+d2ViVmlldywgcmdiYSk7CisgICAgd2Via2l0X3dl
Yl92aWV3X3NldF9iYWNrZ3JvdW5kX2NvbG9yKHdlYlZpZXcsIHJnYmEpOwogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93
c2VyL2d0ay9Ccm93c2VyV2luZG93LmgKaW5kZXggOTdhZTdiOS4uZWZlMjMyNyAxMDA2NDQKLS0t
IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaAorKysgYi9Ub29scy9NaW5p
QnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oCkBAIC0zOCwxNSArMzgsMTYgQEAgR19CRUdJTl9E
RUNMUwogI2RlZmluZSBCUk9XU0VSX0lTX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBCUk9XU0VSX1RZUEVfV0lORE9XKSkKICNkZWZpbmUgQlJP
V1NFUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgQlJPV1NFUl9UWVBFX1dJTkRPVywgQnJvd3NlcldpbmRvd0NsYXNzKSkKICNkZWZpbmUg
QlJPV1NFUl9ERUZBVUxUX1VSTCAgICAgICAgICAgICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcv
IgorI2RlZmluZSBCUk9XU0VSX0FCT1VUX1NDSEVNRSAgICAgICAgICAgIm1pbmlicm93c2VyLWFi
b3V0IgogCiB0eXBlZGVmIHN0cnVjdCBfQnJvd3NlcldpbmRvdyAgICAgICAgQnJvd3NlcldpbmRv
dzsKIHR5cGVkZWYgc3RydWN0IF9Ccm93c2VyV2luZG93Q2xhc3MgICBCcm93c2VyV2luZG93Q2xh
c3M7CiAKIEdUeXBlIGJyb3dzZXJfd2luZG93X2dldF90eXBlKHZvaWQpOwogCi1HdGtXaWRnZXQq
IGJyb3dzZXJfd2luZG93X25ldyhXZWJLaXRXZWJWaWV3KiwgR3RrV2luZG93Kik7Ci1XZWJLaXRX
ZWJWaWV3KiBicm93c2VyX3dpbmRvd19nZXRfdmlldyhCcm93c2VyV2luZG93Kik7Ci12b2lkIGJy
b3dzZXJfd2luZG93X2xvYWRfdXJpKEJyb3dzZXJXaW5kb3cgKiwgY29uc3QgY2hhciAqdXJpKTsK
K0d0a1dpZGdldCogYnJvd3Nlcl93aW5kb3dfbmV3KEd0a1dpbmRvdyopOwordm9pZCBicm93c2Vy
X3dpbmRvd19hcHBlbmRfdmlldyhCcm93c2VyV2luZG93KiwgV2ViS2l0V2ViVmlldyopOwordm9p
ZCBicm93c2VyX3dpbmRvd19sb2FkX3VyaShCcm93c2VyV2luZG93KiwgY29uc3QgY2hhciAqdXJp
KTsKIHZvaWQgYnJvd3Nlcl93aW5kb3dfbG9hZF9zZXNzaW9uKEJyb3dzZXJXaW5kb3cgKiwgY29u
c3QgY2hhciAqc2Vzc2lvbkZpbGUpOwogdm9pZCBicm93c2VyX3dpbmRvd19zZXRfYmFja2dyb3Vu
ZF9jb2xvcihCcm93c2VyV2luZG93KiwgR2RrUkdCQSopOwogCmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci9ndGsvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQ01h
a2VMaXN0cy50eHQKaW5kZXggNTgwMzhjYi4uMjZkMmJmOSAxMDA2NDQKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9D
TWFrZUxpc3RzLnR4dApAQCAtMTMsNiArMTMsOCBAQCBzZXQoTWluaUJyb3dzZXJfU09VUkNFUwog
ICAgICR7TUlOSUJST1dTRVJfRElSfS9Ccm93c2VyU2VhcmNoQmFyLmgKICAgICAke01JTklCUk9X
U0VSX0RJUn0vQnJvd3NlclNldHRpbmdzRGlhbG9nLmMKICAgICAke01JTklCUk9XU0VSX0RJUn0v
QnJvd3NlclNldHRpbmdzRGlhbG9nLmgKKyAgICAke01JTklCUk9XU0VSX0RJUn0vQnJvd3NlclRh
Yi5jCisgICAgJHtNSU5JQlJPV1NFUl9ESVJ9L0Jyb3dzZXJUYWIuaAogICAgICR7TUlOSUJST1dT
RVJfRElSfS9Ccm93c2VyV2luZG93LmMKICAgICAke01JTklCUk9XU0VSX0RJUn0vQnJvd3Nlcldp
bmRvdy5oCiAgICAgJHtNSU5JQlJPV1NFUl9ESVJ9L21haW4uYwpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKaW5k
ZXggODVlMjFhMS4uOWFmMzI4NiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21h
aW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC0zNiw3ICszNiw2IEBA
CiAjZGVmaW5lIE1JTklfQlJPV1NFUl9FUlJPUiAobWluaUJyb3dzZXJFcnJvclF1YXJrKCkpCiAK
IHN0YXRpYyBjb25zdCBnY2hhciAqKnVyaUFyZ3VtZW50cyA9IE5VTEw7Ci1zdGF0aWMgY29uc3Qg
Y2hhciAqbWluaUJyb3dzZXJBYm91dFNjaGVtZSA9ICJtaW5pYnJvd3Nlci1hYm91dCI7CiBzdGF0
aWMgR2RrUkdCQSAqYmFja2dyb3VuZENvbG9yOwogc3RhdGljIGdib29sZWFuIGVkaXRvck1vZGU7
CiBzdGF0aWMgY29uc3QgY2hhciAqc2Vzc2lvbkZpbGU7CkBAIC02MCwzMiArNTksMTYgQEAgc3Rh
dGljIGdjaGFyICphcmd1bWVudFRvVVJMKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogICAgIHJldHVy
biBmaWxlVVJMOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVCcm93c2VyV2luZG93KGNvbnN0IGdj
aGFyICp1cmksIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5ncywgZ2Jvb2xlYW4gc2hvdWxk
TG9hZFNlc3Npb24pCitzdGF0aWMgV2ViS2l0V2ViVmlldyAqY3JlYXRlQnJvd3NlclRhYihCcm93
c2VyV2luZG93ICp3aW5kb3csIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5ncykKIHsKLSAg
ICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgaWYgKGVk
aXRvck1vZGUpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUoV0VCS0lUX1dF
Ql9WSUVXKHdlYlZpZXcpLCBUUlVFKTsKLSAgICBHdGtXaWRnZXQgKm1haW5XaW5kb3cgPSBicm93
c2VyX3dpbmRvd19uZXcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKLSAgICBpZiAo
YmFja2dyb3VuZENvbG9yKQotICAgICAgICBicm93c2VyX3dpbmRvd19zZXRfYmFja2dyb3VuZF9j
b2xvcihCUk9XU0VSX1dJTkRPVyhtYWluV2luZG93KSwgYmFja2dyb3VuZENvbG9yKTsKLSAgICBp
ZiAoZ2VvbWV0cnkpCi0gICAgICAgIGd0a193aW5kb3dfcGFyc2VfZ2VvbWV0cnkoR1RLX1dJTkRP
VyhtYWluV2luZG93KSwgZ2VvbWV0cnkpOwotCisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwogICAgIGlmICh3ZWJraXRT
ZXR0aW5ncykKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldyksIHdlYmtpdFNldHRpbmdzKTsKLQotICAgIGlmICghZWRpdG9yTW9kZSkg
ewotICAgICAgICBpZiAoc2hvdWxkTG9hZFNlc3Npb24gJiYgc2Vzc2lvbkZpbGUpCi0gICAgICAg
ICAgICBicm93c2VyX3dpbmRvd19sb2FkX3Nlc3Npb24oQlJPV1NFUl9XSU5ET1cobWFpbldpbmRv
dyksIHNlc3Npb25GaWxlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnY2hhciAqdXJs
ID0gYXJndW1lbnRUb1VSTCh1cmkpOwotICAgICAgICAgICAgYnJvd3Nlcl93aW5kb3dfbG9hZF91
cmkoQlJPV1NFUl9XSU5ET1cobWFpbldpbmRvdyksIHVybCk7Ci0gICAgICAgICAgICBnX2ZyZWUo
dXJsKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0
aW5ncyh3ZWJWaWV3LCB3ZWJraXRTZXR0aW5ncyk7CisgICAgaWYgKGVkaXRvck1vZGUpCisgICAg
ICAgIHdlYmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUod2ViVmlldywgVFJVRSk7CiAKLSAgICBn
dGtfd2lkZ2V0X2dyYWJfZm9jdXMod2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1haW5X
aW5kb3cpOworICAgIGJyb3dzZXJfd2luZG93X2FwcGVuZF92aWV3KHdpbmRvdywgd2ViVmlldyk7
CisgICAgcmV0dXJuIHdlYlZpZXc7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiBwYXJzZUJhY2tncm91
bmRDb2xvcihjb25zdCBjaGFyICpvcHRpb25OYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgZ3BvaW50
ZXIgZGF0YSwgR0Vycm9yICoqZXJyb3IpCkBAIC0yNDIsOCArMjI1LDcgQEAgc3RhdGljIGdib29s
ZWFuIGFkZFNldHRpbmdzR3JvdXBUb0NvbnRleHQoR09wdGlvbkNvbnRleHQgKmNvbnRleHQsIFdl
YktpdFNldHRpbmcKICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIHZvaWQKLWFib3V0VVJJ
U2NoZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsIGdw
b2ludGVyIHVzZXJEYXRhKQorc3RhdGljIHZvaWQgYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJh
Y2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7
CiAgICAgR0lucHV0U3RyZWFtICpzdHJlYW07CiAgICAgZ3NpemUgc3RyZWFtTGVuZ3RoOwpAQCAt
MzAzLDE1ICsyODUsNDEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICAv
LyBFbmFibGUgdGhlIGZhdmljb24gZGF0YWJhc2UsIGJ5IHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQg
ZGlyZWN0b3J5LgogICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9k
aXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIE5VTEwpOwogCi0gICAg
d2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksIG1pbmlCcm93c2VyQWJvdXRTY2hlbWUsIGFib3V0VVJJU2NoZW1lUmVx
dWVzdENhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0
ZXJfdXJpX3NjaGVtZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgQlJPV1NFUl9B
Qk9VVF9TQ0hFTUUsIGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrLCBOVUxMLCBOVUxMKTsK
IAorICAgIEJyb3dzZXJXaW5kb3cgKm1haW5XaW5kb3cgPSBCUk9XU0VSX1dJTkRPVyhicm93c2Vy
X3dpbmRvd19uZXcoTlVMTCkpOworICAgIGlmIChnZW9tZXRyeSkKKyAgICAgICAgZ3RrX3dpbmRv
d19wYXJzZV9nZW9tZXRyeShHVEtfV0lORE9XKG1haW5XaW5kb3cpLCBnZW9tZXRyeSk7CisKKyAg
ICBHdGtXaWRnZXQgKmZpcnN0VGFiID0gTlVMTDsKICAgICBpZiAodXJpQXJndW1lbnRzKSB7CiAg
ICAgICAgIGludCBpOwogCi0gICAgICAgIGZvciAoaSA9IDA7IHVyaUFyZ3VtZW50c1tpXTsgaSsr
KQotICAgICAgICAgICAgY3JlYXRlQnJvd3NlcldpbmRvdyh1cmlBcmd1bWVudHNbaV0sIHdlYmtp
dFNldHRpbmdzLCBGQUxTRSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNyZWF0ZUJyb3dzZXJXaW5k
b3coQlJPV1NFUl9ERUZBVUxUX1VSTCwgd2Via2l0U2V0dGluZ3MsIFRSVUUpOworICAgICAgICBm
b3IgKGkgPSAwOyB1cmlBcmd1bWVudHNbaV07IGkrKykgeworICAgICAgICAgICAgV2ViS2l0V2Vi
VmlldyAqd2ViVmlldyA9IGNyZWF0ZUJyb3dzZXJUYWIobWFpbldpbmRvdywgd2Via2l0U2V0dGlu
Z3MpOworICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGZpcnN0VGFiID0gR1RL
X1dJREdFVCh3ZWJWaWV3KTsKKyAgICAgICAgICAgIGdjaGFyICp1cmwgPSBhcmd1bWVudFRvVVJM
KHVyaUFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
d2ViVmlldywgdXJsKTsKKyAgICAgICAgICAgIGdfZnJlZSh1cmwpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGNyZWF0ZUJyb3dzZXJU
YWIobWFpbldpbmRvdywgd2Via2l0U2V0dGluZ3MpOworICAgICAgICBmaXJzdFRhYiA9IEdUS19X
SURHRVQod2ViVmlldyk7CisKKyAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikKKyAgICAgICAg
ICAgIGJyb3dzZXJfd2luZG93X3NldF9iYWNrZ3JvdW5kX2NvbG9yKG1haW5XaW5kb3csIGJhY2tn
cm91bmRDb2xvcik7CisKKyAgICAgICAgaWYgKCFlZGl0b3JNb2RlKSB7CisgICAgICAgICAgICBp
ZiAoc2Vzc2lvbkZpbGUpCisgICAgICAgICAgICAgICAgYnJvd3Nlcl93aW5kb3dfbG9hZF9zZXNz
aW9uKG1haW5XaW5kb3csIHNlc3Npb25GaWxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgQlJPV1NFUl9ERUZBVUxU
X1VSTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZmly
c3RUYWIpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1haW5XaW5kb3cpKTsKIAog
ICAgIGdfY2xlYXJfb2JqZWN0KCZ3ZWJraXRTZXR0aW5ncyk7CiAK
</data>
<flag name="review"
          id="307404"
          type_id="1"
          status="+"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>