<?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>111702</bug_id>
          
          <creation_ts>2013-03-07 02:12:03 -0800</creation_ts>
          <short_desc>[Meta][EFL] Touch support for WebKit EFL</short_desc>
          <delta_ts>2017-03-11 10:47:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>102643</dependson>
    
    <dependson>106864</dependson>
    
    <dependson>107101</dependson>
    
    <dependson>107631</dependson>
    
    <dependson>108915</dependson>
    
    <dependson>110085</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominik Röttsches (drott)">d-r</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enmi.lee</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>naginenis</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>849896</commentid>
    <comment_count>0</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-03-07 02:12:03 -0800</bug_when>
    <thetext>Tracking bug for enabling and improving touch support on EFL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907949</commentid>
    <comment_count>1</comment_count>
      <attachid>206542</attachid>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2013-07-12 07:03:44 -0700</bug_when>
    <thetext>Created attachment 206542
patch for testing gesture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912454</commentid>
    <comment_count>2</comment_count>
      <attachid>207644</attachid>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2013-07-29 06:02:10 -0700</bug_when>
    <thetext>Created attachment 207644
patch for testing gestures - 20130729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915728</commentid>
    <comment_count>3</comment_count>
      <attachid>208406</attachid>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2013-08-09 01:48:36 -0700</bug_when>
    <thetext>Created attachment 208406
patch for testing gestures - 20130809</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286652</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-11 10:47:29 -0800</bug_when>
    <thetext>Closing this bug because the EFL port has been removed from trunk.

If you feel this bug applies to a different upstream WebKit port and was closed in error, please either update the title and reopen the bug, or leave a comment to request this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206542</attachid>
            <date>2013-07-12 07:03:44 -0700</date>
            <delta_ts>2013-07-29 06:00:46 -0700</delta_ts>
            <desc>patch for testing gesture.</desc>
            <filename>all_gestures_for_test.patch</filename>
            <type>text/plain</type>
            <size>94591</size>
            <attacher name="Eunmi Lee">enmi.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggYTVlMmIwMy4uNzZkYzdkYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTM2Niw2ICszNjYsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9j
ZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5jcHAKIAogICAgIFVJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAor
ICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VQcm94eUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCiAKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3Bw
CiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNTE5LDYg
KzUyMCw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
VW5kb1N0ZXAuY3BwCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViUGFnZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiApCiAKIHNl
dChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IDg4ZjljZmIuLjk1ZjY0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC02MSw5ICs2
MSwxMiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL0Mv
c291cC9XS0Nvb2tpZU1hbmFnZXJTb3VwLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9zb3VwL1dL
U291cFJlcXVlc3RNYW5hZ2VyLmNwcAogCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvRWFzaW5nQ3Vy
dmVzLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvRXZhc0dMQ29udGV4dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9FdmFzR0xT
dXJmYWNlLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25pemVyLmNwcAor
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL1NuYXBzaG90SW1hZ2VHTC5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYXV0aF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdC5jcHAKQEAgLTEwNSw2ICsxMDgsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNz
L2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJl
RXZlbnQuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9Fd2tUb3VjaEV2ZW50LmNwcAogICAgIFVJUHJv
Y2Vzcy9lZmwvRXdrVG91Y2hQb2ludC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL0ZpbmRDbGllbnRF
ZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZWZsL1dLQmFz
ZUVmbC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2VmbC9XS0Jhc2VFZmwuaAppbmRl
eCA5YzA3ZjhlMC4uZTdkYzU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL2VmbC9XS0Jhc2VFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZWZs
L1dLQmFzZUVmbC5oCkBAIC0yOSw1ICsyOSw2IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1
ZVdLUG9wdXBJdGVtKiBXS1BvcHVwSXRlbVJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1
ZVdLUG9wdXBNZW51TGlzdGVuZXIqIFdLUG9wdXBNZW51TGlzdGVuZXJSZWY7CiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVXS1RvdWNoUG9pbnQqIFdLVG91Y2hQb2ludFJlZjsKIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZVdLVG91Y2hFdmVudCogV0tUb3VjaEV2ZW50UmVmOwordHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tHZXN0dXJlRXZlbnQqIFdLR2VzdHVyZUV2ZW50UmVmOwog
CiAjZW5kaWYgLyogV0tCYXNlRWZsX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUElPYmplY3QuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3QuaAppbmRl
eCA0NDFlMDVlLi40MjU5YmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCkBAIC0xNDEs
NiArMTQxLDkgQEAgcHVibGljOgogICAgICAgICBUeXBlVG91Y2hQb2ludCwKICAgICAgICAgVHlw
ZVRvdWNoRXZlbnQsCiAjZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgICAg
IFR5cGVHZXN0dXJlRXZlbnQsCisjZW5kaWYKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAppbmRleCA3ZjViM2VlLi4wOTdl
ZWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9y
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9XZWJFdmVudEZhY3RvcnkuY3Bw
CkBAIC0yMjksMzkgKzIyOSw2IEBAIHN0YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFBvaW50U3RhdGUgdG9XZWJQbGF0Zm9ybVRvdWNoUG9pbnRTdGF0CiAgICAgfQogfQog
Ci1zdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpUeXBlIHRvV2ViRXZlbnRUeXBlKFdLRXZlbnRUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBrV0tFdmVudFR5cGVUb3Vj
aFN0YXJ0OgotICAgICAgICByZXR1cm4gV2ViRXZlbnQ6OlRvdWNoU3RhcnQ7Ci0gICAgY2FzZSBr
V0tFdmVudFR5cGVUb3VjaE1vdmU6Ci0gICAgICAgIHJldHVybiBXZWJFdmVudDo6VG91Y2hNb3Zl
OwotICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hFbmQ6Ci0gICAgICAgIHJldHVybiBXZWJFdmVu
dDo6VG91Y2hFbmQ7Ci0gICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaENhbmNlbDoKLSAgICAgICAg
cmV0dXJuIFdlYkV2ZW50OjpUb3VjaENhbmNlbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gV2ViRXZlbnQ6Ok5vVHlwZTsKLSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBXZWJFdmVu
dDo6TW9kaWZpZXJzIHRvV2ViRXZlbnRNb2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJzKQotewot
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0KLSAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRN
b2RpZmllcnNTaGlmdEtleSkKLSAgICAgICAgcmVzdWx0IHw9IFdlYkV2ZW50OjpTaGlmdEtleTsK
LSAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5KQotICAgICAg
ICByZXN1bHQgfD0gV2ViRXZlbnQ6OkNvbnRyb2xLZXk7Ci0gICAgaWYgKG1vZGlmaWVycyAmIGtX
S0V2ZW50TW9kaWZpZXJzQWx0S2V5KQotICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6OkFsdEtl
eTsKLSAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5KQotICAgICAg
ICByZXN1bHQgfD0gV2ViRXZlbnQ6Ok1ldGFLZXk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViRXZlbnQ6Ok1vZGlmaWVycz4ocmVzdWx0KTsKLX0KLQogV2ViVG91Y2hFdmVudCBXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYlRvdWNoRXZlbnQoY29uc3QgRXdrVG91Y2hFdmVudCogZXZlbnQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdG9XZWJDb250ZW50KQogewogICAgIEltbXV0YWJsZUFy
cmF5KiB0b3VjaFBvaW50c0FycmF5ID0gdG9JbXBsKGV2ZW50LT50b3VjaFBvaW50cygpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCmluZGV4IGZlNjMzNmEuLjk4NzRiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtNTY1LDYgKzU2
NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvQmFja2luZ1N0b3JlUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgXAorICAgIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VQcm94eUNvb3JkaW5hdGVkR3JhcGhp
Y3MuY3BwIFwKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmNwcCBcCiAgICAg
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBcCkBAIC03NDgsNiArNzQ5LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
XAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VDb29y
ZGluYXRlZEdyYXBoaWNzLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdo
dENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlQmFubmVyLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1Zp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV0tWaWV3LmNwcAppbmRleCA0NjczNjVmLi4yZWQ3NGQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dL
Vmlldy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNs
dWRlICJXZWJWaWV3LmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQpAQCAtMTg4LDQgKzE4OSwxMCBAQCBk
b3VibGUgV0tWaWV3T3BhY2l0eShXS1ZpZXdSZWYgdmlldykKICAgICByZXR1cm4gdG9JbXBsKHZp
ZXcpLT5vcGFjaXR5KCk7CiB9CiAKK3ZvaWQgV0tWaWV3RmluZFpvb21hYmxlQXJlYUZvclJlY3Qo
V0tWaWV3UmVmIHZpZXdSZWYsIFdLUmVjdCB3a1JlY3QpCit7CisgICAgSW50UmVjdCByZWN0ID0g
dG9JbnRSZWN0KHdrUmVjdCk7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5maW5kWm9vbWFibGVBcmVh
Rm9yUG9pbnQocmVjdC5jZW50ZXIoKSwgcmVjdC5zaXplKCkpOworfQorCiAjZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXcuaAppbmRleCBjZDMwZTQ4
Li4xZWU1NWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXcuaApAQCAtMjQsNiArMjQsMTAgQEAKICNp
bmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5o
PgogCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisK
ICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTM2LDYgKzQwLDgg
QEAgdHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzUG9zaXRpb25DYWxs
YmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLUG8KIHR5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRS
ZW5kZXJGcmFtZUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTaXplIGNvbnRlbnRzU2l6ZSwg
V0tSZWN0IGNvdmVyZWRSZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9p
ZCAoKldLVmlld1BhZ2VEaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXNDYWxsYmFjaykoV0tWaWV3
UmVmIHZpZXcsIFdLVmlld3BvcnRBdHRyaWJ1dGVzUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKIHR5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRDaGFuZ2VUb29sdGlwQ2FsbGJhY2spKFdL
Vmlld1JlZiB2aWV3LCBXS1N0cmluZ1JlZiBuZXdUb29sdGlwLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVmlld0RpZEZpbmRab29tYWJsZUFyZWFDYWxsYmFjayko
V0tWaWV3UmVmIHZpZXcsIFdLUG9pbnQgcG9pbnQsIFdLUmVjdCBhcmVhLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVmlld0RvbmVXaXRoVG91Y2hFdmVudENhbGxi
YWNrKShXS1ZpZXdSZWYgdmlldywgV0tUb3VjaEV2ZW50UmVmIHRvdWNoRXZlbnQsIGJvb2wgd2Fz
RXZlbnRIYW5kbGVkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIAogc3RydWN0IFdLVmlld0Ns
aWVudCB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb247CkBAIC01MSw2ICs1Nyw4IEBAIHN0cnVjdCBXS1ZpZXdDbGllbnQgewogICAg
IFdLVmlld0NhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRDb21w
bGV0ZVBhZ2VUcmFuc2l0aW9uOwogICAgIFdLVmlld1BhZ2VEaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXNDYWxsYmFjayAgICBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXM7CiAgICAgV0tWaWV3
UGFnZURpZENoYW5nZVRvb2x0aXBDYWxsYmFjayAgICAgICAgICAgICAgIGRpZENoYW5nZVRvb2x0
aXA7CisgICAgV0tWaWV3RGlkRmluZFpvb21hYmxlQXJlYUNhbGxiYWNrICAgICAgICAgICAgICAg
IGRpZEZpbmRab29tYWJsZUFyZWE7CisgICAgV0tWaWV3RG9uZVdpdGhUb3VjaEV2ZW50Q2FsbGJh
Y2sgICAgICAgICAgICAgICAgIGRvbmVXaXRoVG91Y2hFdmVudDsKIH07CiB0eXBlZGVmIHN0cnVj
dCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwogCkBAIC0xMDMsNiArMTExLDggQEAgV0tfRVhQ
T1JUIGJvb2wgV0tWaWV3RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lk
IFdLVmlld1NldE9wYWNpdHkoV0tWaWV3UmVmIHZpZXcsIGRvdWJsZSBvcGFjaXR5KTsKIFdLX0VY
UE9SVCBkb3VibGUgV0tWaWV3T3BhY2l0eShXS1ZpZXdSZWYgdmlldyk7CiAKK1dLX0VYUE9SVCB2
b2lkIFdLVmlld0ZpbmRab29tYWJsZUFyZWFGb3JSZWN0KFdLVmlld1JlZiwgV0tSZWN0KTsKKwog
I2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCmluZGV4IDM1MWExOWYuLmFiZWRkNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZs
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aApAQCAtMjcsNiArMjcsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RleHREaXJlY3Rpb24uaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLUG9wdXBJdGVtLmg+CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQorI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0V2ZW50RWZs
Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlZpZXc7CkBAIC00
NSw2ICs1MCwxMiBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tUb3VjaEV2ZW50UmVmLCBFd2tUb3Vj
aEV2ZW50KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVG91Y2hQb2ludFJlZiwgRXdrVG91Y2hQb2lu
dCkKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgRXdrR2VzdHVy
ZUV2ZW50OworCitXS19BRERfQVBJX01BUFBJTkcoV0tHZXN0dXJlRXZlbnRSZWYsIEV3a0dlc3R1
cmVFdmVudCkKKyNlbmRpZgorCiAvLyBFbnVtIGNvbnZlcnNpb25zLgogaW5saW5lIFdLUG9wdXBJ
dGVtVGV4dERpcmVjdGlvbiB0b0FQSShXZWJDb3JlOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKQEAgLTYyLDYgKzczLDgzIEBAIGlubGluZSBXS1BvcHVwSXRlbVRleHREaXJlY3Rpb24gdG9B
UEkoV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgcmV0dXJuIHdrRGlyZWN0
aW9uOwogfQogCitpbmxpbmUgV0tFdmVudFR5cGUgdG9BUEkoV2ViRXZlbnQ6OlR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNh
c2UgV2ViRXZlbnQ6OlRvdWNoU3RhcnQ6CisgICAgICAgIHJldHVybiBrV0tFdmVudFR5cGVUb3Vj
aFN0YXJ0OworICAgIGNhc2UgV2ViRXZlbnQ6OlRvdWNoTW92ZToKKyAgICAgICAgcmV0dXJuIGtX
S0V2ZW50VHlwZVRvdWNoTW92ZTsKKyAgICBjYXNlIFdlYkV2ZW50OjpUb3VjaEVuZDoKKyAgICAg
ICAgcmV0dXJuIGtXS0V2ZW50VHlwZVRvdWNoRW5kOworICAgIGNhc2UgV2ViRXZlbnQ6OlRvdWNo
Q2FuY2VsOgorICAgICAgICByZXR1cm4ga1dLRXZlbnRUeXBlVG91Y2hDYW5jZWw7CisjZW5kaWYK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4ga1dLRXZlbnRUeXBlTm9UeXBlOworICAgIH0K
K30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitpbmxpbmUgV0tUb3VjaFBvaW50U3RhdGUg
dG9BUEkoV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgc3RhdGUpCit7Cisg
ICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFJlbGVhc2VkOgorICAgICAgICByZXR1cm4ga1dLVG91Y2hQb2ludFN0YXRlVG91Y2hSZWxlYXNl
ZDsKKyAgICBjYXNlIFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOgorICAgICAg
ICByZXR1cm4ga1dLVG91Y2hQb2ludFN0YXRlVG91Y2hQcmVzc2VkOworICAgIGNhc2UgV2ViUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOgorICAgICAgICByZXR1cm4ga1dLVG91Y2hQb2lu
dFN0YXRlVG91Y2hNb3ZlZDsKKyAgICBjYXNlIFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hT
dGF0aW9uYXJ5OgorICAgICAgICByZXR1cm4ga1dLVG91Y2hQb2ludFN0YXRlVG91Y2hTdGF0aW9u
YXJ5OworICAgIGNhc2UgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDoKKyAg
ICAgICAgcmV0dXJuIGtXS1RvdWNoUG9pbnRTdGF0ZVRvdWNoQ2FuY2VsbGVkOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrV0tUb3VjaFBvaW50U3RhdGVU
b3VjaENhbmNlbGxlZDsKK30KKyNlbmRpZgorCitpbmxpbmUgV2ViRXZlbnQ6OlR5cGUgdG9XZWJF
dmVudFR5cGUoV0tFdmVudFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hTdGFydDoKKyAg
ICAgICAgcmV0dXJuIFdlYkV2ZW50OjpUb3VjaFN0YXJ0OworICAgIGNhc2Uga1dLRXZlbnRUeXBl
VG91Y2hNb3ZlOgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6OlRvdWNoTW92ZTsKKyAgICBjYXNl
IGtXS0V2ZW50VHlwZVRvdWNoRW5kOgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6OlRvdWNoRW5k
OworICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hDYW5jZWw6CisgICAgICAgIHJldHVybiBXZWJF
dmVudDo6VG91Y2hDYW5jZWw7CisjZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisg
ICAgY2FzZSBrV0tFdmVudFR5cGVHZXN0dXJlU2luZ2xlVGFwOgorICAgICAgICByZXR1cm4gV2Vi
RXZlbnQ6Okdlc3R1cmVTaW5nbGVUYXA7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gV2ViRXZlbnQ6Ok5vVHlwZTsKKyAgICB9Cit9CisKK2lubGluZSBXZWJFdmVudDo6TW9k
aWZpZXJzIHRvV2ViRXZlbnRNb2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJzKQoreworICAgIHVu
c2lnbmVkIHJlc3VsdCA9IDA7CisKKyAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmll
cnNTaGlmdEtleSkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkV2ZW50OjpTaGlmdEtleTsKKyAgICBp
ZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5KQorICAgICAgICByZXN1
bHQgfD0gV2ViRXZlbnQ6OkNvbnRyb2xLZXk7CisgICAgaWYgKG1vZGlmaWVycyAmIGtXS0V2ZW50
TW9kaWZpZXJzQWx0S2V5KQorICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6OkFsdEtleTsKKyAg
ICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5KQorICAgICAgICByZXN1
bHQgfD0gV2ViRXZlbnQ6Ok1ldGFLZXk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRXZl
bnQ6Ok1vZGlmaWVycz4ocmVzdWx0KTsKK30KKwogfQogCiAjZW5kaWYgLy8gV0tBUElDYXN0RWZs
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVu
dEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLRXZlbnRFZmwu
Y3BwCmluZGV4IDZkNTA3MWYuLmU5NzAyOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS0V2ZW50RWZsLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogCisjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIkV3a0dlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVG91Y2hQb2ludFJlZiBXS1RvdWNoUG9pbnRDcmVh
dGUoaW50IGlkLCBXS1BvaW50IHBvc2l0aW9uLCBXS1BvaW50IHNjcmVlblBvc2l0aW9uLCBXS1Rv
dWNoUG9pbnRTdGF0ZSBzdGF0ZSwgV0tTaXplIHJhZGl1cywgZmxvYXQgcm90YXRpb25BbmdsZSwg
ZmxvYXQgZm9yY2VGYWN0b3IpCkBAIC02MiwzICs2NiwxMzAgQEAgV0tUb3VjaEV2ZW50UmVmIFdL
VG91Y2hFdmVudENyZWF0ZShXS0V2ZW50VHlwZSB0eXBlLCBXS0FycmF5UmVmIHdrVG91Y2hQb2lu
dHMsIFcKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQorCitXS0V2ZW50VHlwZSBXS1RvdWNoRXZl
bnRHZXRUeXBlKFdLVG91Y2hFdmVudFJlZiBldmVudCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQorICAgIHJldHVybiB0b0ltcGwoZXZlbnQpLT5ldmVudFR5cGUoKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICByZXR1cm4ga1dLRXZlbnRUeXBlTm9UeXBlOworI2Vu
ZGlmCit9CisKK1dLQXJyYXlSZWYgV0tUb3VjaEV2ZW50R2V0VG91Y2hQb2ludHMoV0tUb3VjaEV2
ZW50UmVmIGV2ZW50KQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgcmV0dXJuIHRv
SW1wbChldmVudCktPnRvdWNoUG9pbnRzKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShldmVu
dCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworV0tFdmVudE1vZGlmaWVycyBXS1RvdWNo
RXZlbnRHZXRNb2RpZmllcnMoV0tUb3VjaEV2ZW50UmVmIGV2ZW50KQoreworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgcmV0dXJuIHRvSW1wbChldmVudCktPm1vZGlmaWVycygpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisK
K2RvdWJsZSBXS1RvdWNoRXZlbnRHZXRUaW1lc3RhbXAoV0tUb3VjaEV2ZW50UmVmIGV2ZW50KQor
eworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgcmV0dXJuIHRvSW1wbChldmVudCktPnRp
bWVzdGFtcCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIHJldHVybiAw
OworI2VuZGlmCit9CisKK3VpbnQzMl90IFdLVG91Y2hQb2ludEdldElEKFdLVG91Y2hQb2ludFJl
ZiBwb2ludCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHJldHVybiB0b0ltcGwo
cG9pbnQpLT5pZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocG9pbnQpOworICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKK1dLVG91Y2hQb2ludFN0YXRlIFdLVG91Y2hQb2ludEdldFN0YXRl
KFdLVG91Y2hQb2ludFJlZiBwb2ludCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IHJldHVybiB0b0ltcGwocG9pbnQpLT5zdGF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cG9pbnQpOworICAgIHJldHVybiBrV0tUb3VjaFBvaW50U3RhdGVUb3VjaENhbmNlbGxlZDsKKyNl
bmRpZgorfQorCitXS1BvaW50IFdLVG91Y2hQb2ludEdldFNjcmVlblBvc2l0aW9uKFdLVG91Y2hQ
b2ludFJlZiBwb2ludCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHJldHVybiB0
b0ltcGwocG9pbnQpLT5zY3JlZW5Qb3NpdGlvbigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cG9pbnQpOworICAgIHJldHVybiBXS1BvaW50TWFrZSgwLCAwKTsKKyNlbmRpZgorfQorCitXS1Bv
aW50IFdLVG91Y2hQb2ludEdldFBvc2l0aW9uKFdLVG91Y2hQb2ludFJlZiBwb2ludCkKK3sKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHJldHVybiB0b0ltcGwocG9pbnQpLT5wb3NpdGlv
bigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocG9pbnQpOworICAgIHJldHVybiBXS1BvaW50
TWFrZSgwLCAwKTsKKyNlbmRpZgorfQorCitXS1NpemUgV0tUb3VjaFBvaW50R2V0UmFkaXVzKFdL
VG91Y2hQb2ludFJlZiBwb2ludCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHJl
dHVybiB0b0ltcGwocG9pbnQpLT5yYWRpdXMoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBv
aW50KTsKKyAgICByZXR1cm4gV0tTaXplTWFrZSgwLCAwKTsKKyNlbmRpZgorfQorCitmbG9hdCBX
S1RvdWNoUG9pbnRHZXRSb3RhdGlvbkFuZ2xlKFdLVG91Y2hQb2ludFJlZiBwb2ludCkKK3sKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHJldHVybiB0b0ltcGwocG9pbnQpLT5yb3RhdGlv
bkFuZ2xlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwb2ludCk7CisgICAgcmV0dXJuIDA7
CisjZW5kaWYKK30KKworZmxvYXQgV0tUb3VjaFBvaW50R2V0Rm9yY2VGYWN0b3IoV0tUb3VjaFBv
aW50UmVmIHBvaW50KQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgcmV0dXJuIHRv
SW1wbChwb2ludCktPmZvcmNlRmFjdG9yKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwb2lu
dCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworV0tHZXN0dXJlRXZlbnRSZWYgV0tHZXN0
dXJlRXZlbnRDcmVhdGUoV0tFdmVudFR5cGUgdHlwZSwgV0tQb2ludCBwb3NpdGlvbiwgV0tQb2lu
dCBzY3JlZW5Qb3NpdGlvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1l
c3RhbXAsIFdLU2l6ZSBhcmVhLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKK3sKKyNpZiBF
TkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgcmV0dXJuIHRvQVBJKEV3a0dlc3R1cmVFdmVudDo6
Y3JlYXRlKHR5cGUsIHBvc2l0aW9uLCBzY3JlZW5Qb3NpdGlvbiwgbW9kaWZpZXJzLCB0aW1lc3Rh
bXAsIGFyZWEsIGRlbHRhWCwgZGVsdGFZKS5sZWFrUmVmKCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHBvc2l0aW9uKTsKKyAgICBVTlVTRURfUEFS
QU0oc2NyZWVuUG9zaXRpb24pOworICAgIFVOVVNFRF9QQVJBTShtb2RpZmllcnMpOworICAgIFVO
VVNFRF9QQVJBTSh0aW1lc3RhbXApOworICAgIFVOVVNFRF9QQVJBTShhcmVhKTsKKyAgICBVTlVT
RURfUEFSQU0oZGVsdGFYKTsKKyAgICBVTlVTRURfUEFSQU0oZGVsdGFZKTsKKyAgICByZXR1cm4g
MDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS0V2ZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dL
RXZlbnRFZmwuaAppbmRleCBjZGEyNjM2Li45ZTc1MzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLRXZlbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLRXZlbnRFZmwuaApAQCAtMzksNyArMzksOCBAQCBlbnVt
IFdLRXZlbnRUeXBlIHsKICAgICBrV0tFdmVudFR5cGVUb3VjaFN0YXJ0LAogICAgIGtXS0V2ZW50
VHlwZVRvdWNoTW92ZSwKICAgICBrV0tFdmVudFR5cGVUb3VjaEVuZCwKLSAgICBrV0tFdmVudFR5
cGVUb3VjaENhbmNlbAorICAgIGtXS0V2ZW50VHlwZVRvdWNoQ2FuY2VsLAorICAgIGtXS0V2ZW50
VHlwZUdlc3R1cmVTaW5nbGVUYXAKIH07CiB0eXBlZGVmIGVudW0gV0tFdmVudFR5cGUgV0tFdmVu
dFR5cGU7CiAKQEAgLTU1LDYgKzU2LDIxIEBAIHR5cGVkZWYgZW51bSBXS1RvdWNoUG9pbnRTdGF0
ZSBXS1RvdWNoUG9pbnRTdGF0ZTsKIFdLX0VYUE9SVCBXS1RvdWNoUG9pbnRSZWYgV0tUb3VjaFBv
aW50Q3JlYXRlKGludCBpZCwgV0tQb2ludCBwb3NpdGlvbiwgV0tQb2ludCBzY3JlZW5Qb3NpdGlv
biwgV0tUb3VjaFBvaW50U3RhdGUsIFdLU2l6ZSByYWRpdXMsIGZsb2F0IHJvdGF0aW9uQW5nbGUs
IGZsb2F0IGZvcmNlRmFjdG9yKTsKIFdLX0VYUE9SVCBXS1RvdWNoRXZlbnRSZWYgV0tUb3VjaEV2
ZW50Q3JlYXRlKFdLRXZlbnRUeXBlLCBXS0FycmF5UmVmLCBXS0V2ZW50TW9kaWZpZXJzLCBkb3Vi
bGUgdGltZXN0YW1wKTsKIAorV0tfRVhQT1JUIFdLRXZlbnRUeXBlIFdLVG91Y2hFdmVudEdldFR5
cGUoV0tUb3VjaEV2ZW50UmVmKTsKK1dLX0VYUE9SVCBXS0FycmF5UmVmIFdLVG91Y2hFdmVudEdl
dFRvdWNoUG9pbnRzKFdLVG91Y2hFdmVudFJlZik7CitXS19FWFBPUlQgV0tFdmVudE1vZGlmaWVy
cyBXS1RvdWNoRXZlbnRHZXRNb2RpZmllcnMoV0tUb3VjaEV2ZW50UmVmKTsKK1dLX0VYUE9SVCBk
b3VibGUgV0tUb3VjaEV2ZW50R2V0VGltZXN0YW1wKFdLVG91Y2hFdmVudFJlZik7CisKK1dLX0VY
UE9SVCB1aW50MzJfdCBXS1RvdWNoUG9pbnRHZXRJRChXS1RvdWNoUG9pbnRSZWYpOworV0tfRVhQ
T1JUIFdLVG91Y2hQb2ludFN0YXRlIFdLVG91Y2hQb2ludEdldFN0YXRlKFdLVG91Y2hQb2ludFJl
Zik7CitXS19FWFBPUlQgV0tQb2ludCBXS1RvdWNoUG9pbnRHZXRTY3JlZW5Qb3NpdGlvbihXS1Rv
dWNoUG9pbnRSZWYpOworV0tfRVhQT1JUIFdLUG9pbnQgV0tUb3VjaFBvaW50R2V0UG9zaXRpb24o
V0tUb3VjaFBvaW50UmVmKTsKK1dLX0VYUE9SVCBXS1NpemUgV0tUb3VjaFBvaW50R2V0UmFkaXVz
KFdLVG91Y2hQb2ludFJlZik7CitXS19FWFBPUlQgZmxvYXQgV0tUb3VjaFBvaW50R2V0Um90YXRp
b25BbmdsZShXS1RvdWNoUG9pbnRSZWYpOworV0tfRVhQT1JUIGZsb2F0IFdLVG91Y2hQb2ludEdl
dEZvcmNlRmFjdG9yKFdLVG91Y2hQb2ludFJlZik7CisKK1dLX0VYUE9SVCBXS0dlc3R1cmVFdmVu
dFJlZiBXS0dlc3R1cmVFdmVudENyZWF0ZShXS0V2ZW50VHlwZSwgV0tQb2ludCBwb3NpdGlvbiwg
V0tQb2ludCBzY3JlZW5Qb3NpdGlvbiwgV0tFdmVudE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFt
cCwgV0tTaXplIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKKwogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3RWZsLmNwcAppbmRleCBjZWZhMmQzLi5jZTg2ZGMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXdFZmwuY3BwCkBAIC01OCwzICs1
OCwxMyBAQCB2b2lkIFdLVmlld1NlbmRUb3VjaEV2ZW50KFdLVmlld1JlZiB2aWV3UmVmLCBXS1Rv
dWNoRXZlbnRSZWYgdG91Y2hFdmVudFJlZikKICAgICBVTlVTRURfUEFSQU0odG91Y2hFdmVudFJl
Zik7CiAjZW5kaWYKIH0KKwordm9pZCBXS1ZpZXdTZW5kR2VzdHVyZUV2ZW50KFdLVmlld1JlZiB2
aWV3UmVmLCBXS0dlc3R1cmVFdmVudFJlZiBnZXN0dXJlRXZlbnRSZWYpCit7CisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorICAgIHN0YXRpY19jYXN0PFdlYlZpZXdFZmwqPih0b0ltcGwodmll
d1JlZikpLT5zZW5kR2VzdHVyZUV2ZW50KHRvSW1wbChnZXN0dXJlRXZlbnRSZWYpKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHZpZXdSZWYpOworICAgIFVOVVNFRF9QQVJBTShnZXN0dXJlRXZl
bnRSZWYpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlld0VmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXdFZmwuaAppbmRleCBkOGFmZGM0Li42ZjcyODJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmgKQEAgLTQyLDYgKzQyLDggQEAgV0tf
RVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOwog
CiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZW5kVG91Y2hFdmVudChXS1ZpZXdSZWYsIFdLVG91Y2hF
dmVudFJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NlbmRHZXN0dXJlRXZlbnQoV0tWaWV3
UmVmLCBXS0dlc3R1cmVFdmVudFJlZik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FYXNpbmdDdXJ2
ZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRWFzaW5nQ3VydmVzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmNjZjQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRWFzaW5nQ3VydmVzLmNw
cApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJvYmVydCBQZW5u
ZXIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBi
ZQorICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvKgorICogUm9iZXJ0IFBlbm5lcidzIGVhc2luZyBlcXVhdGlv
bnMuIGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvCisgKiBzdGF0aWMgZnVuY3Rp
b24gZWFzZUluT3V0UXVhZCAodDpOdW1iZXIsIGI6TnVtYmVyLCBjOk51bWJlciwgZDpOdW1iZXIp
Ok51bWJlciB7CisgKiAgICAgaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQgKyBiOwor
ICogICAgIHJldHVybiAtYy8yICogKCgtLXQpKih0LTIpIC0gMSkgKyBiOworICogfQorICovCitm
bG9hdCBlYXNlSW5PdXRRdWFkKGZsb2F0IHRpbWUsIGNvbnN0IGZsb2F0IGJhc2UsIGNvbnN0IGZs
b2F0IGNvbnN0YW50LCBjb25zdCB1bnNpZ25lZCBkdXJhdGlvbikKK3sKKyAgICBpZiAodGltZSA+
IGR1cmF0aW9uIHx8IHRpbWUgPCAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgodGlt
ZSAvPSAoZHVyYXRpb24gLyAyKSkgPCAxKQorICAgICAgICByZXR1cm4gKGNvbnN0YW50IC8gMikg
KiB0aW1lICogdGltZSArIGJhc2U7CisKKyAgICB0aW1lIC09IDE7CisgICAgcmV0dXJuIC0xICog
KGNvbnN0YW50IC8gMikgKiAodGltZSAqICh0aW1lIC0gMikgLSAxKSArIGJhc2U7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FYXNpbmdDdXJ2ZXMuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0Vhc2luZ0N1cnZlcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjZjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FYXNpbmdDdXJ2ZXMuaApAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJvYmVydCBQZW5uZXIgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBiZQorICogICAgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEVhc2luZ0N1cnZlc19oCisjZGVmaW5lIEVhc2luZ0N1cnZlc19oCisK
K2Zsb2F0IGVhc2VJbk91dFF1YWQoZmxvYXQgdGltZSwgY29uc3QgZmxvYXQgYmFzZSwgY29uc3Qg
ZmxvYXQgY29uc3RhbnQsIGNvbnN0IHVuc2lnbmVkIGR1cmF0aW9uKTsKKworI2VuZGlmIC8vIEVh
c2luZ0N1cnZlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcu
Y3BwCmluZGV4IGIzMzYxMTAuLmY5ZjViNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC03Myw2ICs3Myw3IEBACiAjZW5kaWYKICNpbmNsdWRl
IDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3Iu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNhaXJv
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTg1LDYgKzg2LDExIEBACiAjaW5j
bHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorI2luY2x1ZGUgIkdlc3R1cmVSZWNvZ25pemVyLmgiCisjaW5jbHVkZSAi
R2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmwuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ug
RXdrVmlld0NhbGxiYWNrczsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKQEAgLTI3NCw2ICsyODAsOCBAQCBFd2tWaWV3OjpFd2tWaWV3KFdLVmlld1Jl
ZiB2aWV3LCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKICAgICAsIG1fbW91c2VFdmVudHNFbmFi
bGVkKGZhbHNlKQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgLCBtX3RvdWNoRXZlbnRz
RW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZ2VzdHVyZVJlY29nbml6ZXJDbGllbnQoR2VzdHVyZVJl
Y29nbml6ZXJDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fZ2VzdHVyZVJlY29nbml6
ZXIoR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZShtX2dlc3R1cmVSZWNvZ25pemVyQ2xpZW50Lmdl
dCgpKSkKICNlbmRpZgogICAgICwgbV9kaXNwbGF5VGltZXIodGhpcywgJkV3a1ZpZXc6OmRpc3Bs
YXlUaW1lckZpcmVkKQogICAgICwgbV9pbnB1dE1ldGhvZENvbnRleHQoSW5wdXRNZXRob2RDb250
ZXh0RWZsOjpjcmVhdGUodGhpcywgc21hcnREYXRhKCktPmJhc2UuZXZhcykpCkBAIC03OTAsNiAr
Nzk4LDE2IEBAIHZvaWQgRXdrVmlldzo6c2V0VG91Y2hFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKICAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwg
RVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBoYW5kbGVUb3VjaE1vdmUpOwogICAgIH0KIH0KKwor
dm9pZCBFd2tWaWV3Ojpkb25lV2l0aFRvdWNoRXZlbnQoV0tUb3VjaEV2ZW50UmVmIGV2ZW50LCBi
b29sIHdhc0V2ZW50SGFuZGxlZCkKK3sKKyAgICBpZiAod2FzRXZlbnRIYW5kbGVkKSB7CisgICAg
ICAgIG1fZ2VzdHVyZVJlY29nbml6ZXItPnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2dlc3R1cmVSZWNvZ25pemVyLT5wcm9jZXNzVG91Y2hFdmVudChldmVudCk7Cit9
CiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTg5Nyw3ICs5
MTUsNyBAQCB2b2lkIEV3a1ZpZXc6OnNob3dDb250ZXh0TWVudShXS1BvaW50IHBvc2l0aW9uLCBX
S0FycmF5UmVmIGl0ZW1zKQogCiAgICAgbV9jb250ZXh0TWVudSA9IEV3a0NvbnRleHRNZW51Ojpj
cmVhdGUodGhpcywgaXRlbXMpOwogCi0gICAgcG9zaXRpb24gPSBXS1ZpZXdDb250ZW50c1RvVXNl
clZpZXdwb3J0KHdrVmlldygpLCBwb3NpdGlvbik7CisgICAgcG9zaXRpb24gPSBXS1ZpZXdVc2Vy
Vmlld3BvcnRUb1NjZW5lKHdrVmlldygpLCBXS1ZpZXdDb250ZW50c1RvVXNlclZpZXdwb3J0KHdr
VmlldygpLCBwb3NpdGlvbikpOwogCiAgICAgc2QtPmFwaS0+Y29udGV4dF9tZW51X3Nob3coc2Qs
IHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIG1fY29udGV4dE1lbnUuZ2V0KCkpOwogfQpAQCAtOTM0
LDcgKzk1Miw3IEBAIHZvaWQgRXdrVmlldzo6cmVxdWVzdFBvcHVwTWVudShXS1BvcHVwTWVudUxp
c3RlbmVyUmVmIHBvcHVwTWVudUxpc3RlbmVyLCBjb25zdCBXCiAKICAgICBtX3BvcHVwTWVudSA9
IEV3a1BvcHVwTWVudTo6Y3JlYXRlKHRoaXMsIHBvcHVwTWVudUxpc3RlbmVyLCBpdGVtcywgc2Vs
ZWN0ZWRJbmRleCk7CiAKLSAgICBXS1BvaW50IHBvcHVwTWVudVBvc2l0aW9uID0gV0tWaWV3Q29u
dGVudHNUb1VzZXJWaWV3cG9ydCh3a1ZpZXcoKSwgcmVjdC5vcmlnaW4pOworICAgIFdLUG9pbnQg
cG9wdXBNZW51UG9zaXRpb24gPSBXS1ZpZXdVc2VyVmlld3BvcnRUb1NjZW5lKHdrVmlldygpLCBX
S1ZpZXdDb250ZW50c1RvVXNlclZpZXdwb3J0KHdrVmlldygpLCByZWN0Lm9yaWdpbikpOwogCiAg
ICAgRWluYV9SZWN0YW5nbGUgZWluYVJlY3Q7CiAgICAgRUlOQV9SRUNUQU5HTEVfU0VUKCZlaW5h
UmVjdCwgcG9wdXBNZW51UG9zaXRpb24ueCwgcG9wdXBNZW51UG9zaXRpb24ueSwgcmVjdC5zaXpl
LndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KTsKQEAgLTEzNzQsNiArMTM5MiwyOCBAQCBQYXNzUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICAgICByZXR1cm4g
c25hcHNob3QucmVsZWFzZSgpOwogfQogCit2b2lkIEV3a1ZpZXc6OmRpZEZpbmRab29tYWJsZUFy
ZWEoY29uc3QgV0tQb2ludCYgcG9pbnQsIGNvbnN0IFdLUmVjdCYgYXJlYSkKK3sKKyAgICBtX3Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQtPnNjYWxlVG9BcmVhV2l0aEFuaW1hdGlvbih0b0lu
dFBvaW50KHBvaW50KSwgdG9JbnRSZWN0KGFyZWEpLCA1KTsKK30KKworYm9vbCBFd2tWaWV3Ojpz
Y3JvbGxCeShjb25zdCBJbnRTaXplJiBvZmZzZXQpCit7CisgICAgV0tQb2ludCBvbGRQb3NpdGlv
biA9IFdLVmlld0dldENvbnRlbnRQb3NpdGlvbih3a1ZpZXcoKSk7CisgICAgRmxvYXRQb2ludCBu
ZXdQb3NpdGlvbiA9IEZsb2F0UG9pbnQob2xkUG9zaXRpb24ueCArIG9mZnNldC53aWR0aCgpLCBv
bGRQb3NpdGlvbi55ICsgb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBXS1ZpZXdTZXRDb250ZW50UG9z
aXRpb24od2tWaWV3KCksIFdLUG9pbnRNYWtlKG5ld1Bvc2l0aW9uLngoKSwgbmV3UG9zaXRpb24u
eSgpKSk7CisKKyAgICBXS1BvaW50IHBvc2l0aW9uID0gV0tWaWV3R2V0Q29udGVudFBvc2l0aW9u
KHdrVmlldygpKTsKKyAgICBmbG9hdCBjb250ZW50U2NhbGUgPSBXS1ZpZXdHZXRDb250ZW50U2Nh
bGVGYWN0b3Iod2tWaWV3KCkpOworICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlkQ2hh
bmdlQ29udGVudHNWaXNpYmlsaXR5KEZsb2F0UG9pbnQocG9zaXRpb24ueCAvIGNvbnRlbnRTY2Fs
ZSwgcG9zaXRpb24ueSAvIGNvbnRlbnRTY2FsZSksIGNvbnRlbnRTY2FsZSk7CisKKyAgICAvLyBJ
ZiB0aGUgcGFnZSBwb3NpdGlvbiBpcyBub3QgY2hhbmdlZCwgbm90aWZ5IHRoYXQgdXNpbmcgcmV0
dXJuaW5nIHZhbHVlLgorICAgIGlmIChvbGRQb3NpdGlvbiA9PSBwb3NpdGlvbikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIEV2YXNfU21hcnRfQ2xhc3Mg
RXdrVmlldzo6cGFyZW50U21hcnRDbGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwog
CiAvLyBGcmVlIEV3ayBWaWV3IGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaAppbmRleCAwNDMxN2E2Li44ODM1NmFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC03MSw2ICs3MSwxMSBAQCBjbGFzcyBX
ZWJQYWdlUHJveHk7CiAjaWYgRU5BQkxFKFZJQlJBVElPTikKIGNsYXNzIFZpYnJhdGlvbkNsaWVu
dEVmbDsKICNlbmRpZgorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2NsYXNzIEdlc3R1cmVS
ZWNvZ25pemVyOworY2xhc3MgR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmw7CisjZW5kaWYKIH0K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQ2LDYgKzE1MSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZlZWRUb3VjaEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIHR5cGUsIGNvbnN0IEVpbmFf
TGlzdCogcG9pbnRzLCBjb25zdCBFdmFzX01vZGlmaWVyKiBtb2RpZmllcnMpOwogICAgIGJvb2wg
dG91Y2hFdmVudHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50c0VuYWJsZWQ7
IH0KICAgICB2b2lkIHNldFRvdWNoRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpOworICAgIHZv
aWQgZG9uZVdpdGhUb3VjaEV2ZW50KFdLVG91Y2hFdmVudFJlZiwgYm9vbCk7CiAjZW5kaWYKIAog
ICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKTsKQEAgLTIw
MCw2ICsyMDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmZvcm1VUkxDaGFuZ2UoKTsKIAogICAg
IFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsKKyAgICBib29sIHNj
cm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworICAgIHZvaWQgZGlkRmluZFpvb21h
YmxlQXJlYShjb25zdCBXS1BvaW50JiwgY29uc3QgV0tSZWN0Jik7CiAKIHByaXZhdGU6CiAgICAg
RXdrVmlldyhXS1ZpZXdSZWYsIEV2YXNfT2JqZWN0Kik7CkBAIC0yNzYsNiArMjg1LDggQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbW91c2VFdmVudHNFbmFibGVkOwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiAgICAgYm9vbCBtX3RvdWNoRXZlbnRzRW5hYmxlZDsKKyAgICBPd25QdHI8V2ViS2l0
OjpHZXN0dXJlUmVjb2duaXplckNsaWVudEVmbD4gbV9nZXN0dXJlUmVjb2duaXplckNsaWVudDsK
KyAgICBPd25QdHI8V2ViS2l0OjpHZXN0dXJlUmVjb2duaXplcj4gbV9nZXN0dXJlUmVjb2duaXpl
cjsKICNlbmRpZgogICAgIFdlYkNvcmU6OlRpbWVyPEV3a1ZpZXc+IG1fZGlzcGxheVRpbWVyOwog
ICAgIFJlZlB0cjxFd2tDb250ZXh0TWVudT4gbV9jb250ZXh0TWVudTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25pemVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTg5NGJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3Bw
CkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplci5oIgorCisjaW5j
bHVkZSAiRXdrVmlldy5oIgorI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgorCisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjb25zdCBkb3VibGUgR2VzdHVyZVJlY29nbml6ZXI6OnNfZG91YmxlVGFw
VGltZW91dEluU2Vjb25kcyA9IDAuNDsKK2NvbnN0IGRvdWJsZSBHZXN0dXJlUmVjb2duaXplcjo6
c190YXBBbmRIb2xkVGltZW91dEluU2Vjb25kcyA9IDEuMDsKK2NvbnN0IGludCBHZXN0dXJlUmVj
b2duaXplcjo6c19zcXVhcmVkRG91YmxlVGFwVGhyZXNob2xkID0gMTAwMDA7Citjb25zdCBpbnQg
R2VzdHVyZVJlY29nbml6ZXI6OnNfc3F1YXJlZFBhblRocmVzaG9sZCA9IDEwMDsKK2NvbnN0IGlu
dCBHZXN0dXJlUmVjb2duaXplcjo6c19oaXN0b3J5Q2FwYWNpdHkgPSA1OworCitHZXN0dXJlUmVj
b2duaXplcjo6R2VzdHVyZVJlY29nbml6ZXIoR2VzdHVyZVJlY29nbml6ZXJDbGllbnQqIGNsaWVu
dCkKKyAgICA6IG1fcmVjb2duaXplckZ1bmN0aW9uKCZHZXN0dXJlUmVjb2duaXplcjo6bm9HZXN0
dXJlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV90YXBBbmRIb2xkVGltZXIoMCkK
KyAgICAsIG1fZG91YmxlVGFwVGltZXIoMCkKKyAgICAsIG1fcGFuQW5pbWF0b3IoMCkKKyAgICAs
IG1faXNDdXJyZW50UG9pbnRVcGRhdGVkKGZhbHNlKQorICAgICwgbV9maXJzdEhpc3RvcnlJdGVt
SW5kZXgoMCkKK3sKKyAgICBtX2hpc3RvcnkucmVzZXJ2ZUNhcGFjaXR5KHNfaGlzdG9yeUNhcGFj
aXR5KTsKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplcjo6cHJvY2Vzc1RvdWNoRXZlbnQoV0tU
b3VjaEV2ZW50UmVmIGV2ZW50UmVmKQoreworICAgIFdLRXZlbnRUeXBlIHR5cGUgPSBXS1RvdWNo
RXZlbnRHZXRUeXBlKGV2ZW50UmVmKTsKKyAgICBpZiAodHlwZSA9PSBrV0tFdmVudFR5cGVUb3Vj
aENhbmNlbCkgeworICAgICAgICByZXNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgKHRoaXMtPiptX3JlY29nbml6ZXJGdW5jdGlvbikodHlwZSwgV0tUb3VjaEV2ZW50R2V0VG91
Y2hQb2ludHMoZXZlbnRSZWYpKTsKK30KKworRWluYV9Cb29sIEdlc3R1cmVSZWNvZ25pemVyOjpk
b3VibGVUYXBUaW1lckNhbGxiYWNrKHZvaWQqIGRhdGEpCit7CisgICAgR2VzdHVyZVJlY29nbml6
ZXIqIGdlc3R1cmVSZWNvZ25pemVyID0gc3RhdGljX2Nhc3Q8R2VzdHVyZVJlY29nbml6ZXIqPihk
YXRhKTsKKyAgICBnZXN0dXJlUmVjb2duaXplci0+bV9kb3VibGVUYXBUaW1lciA9IDA7CisKKyAg
ICAvLyBJZiBkb3VibGVUYXBUaW1lciBpcyBmaXJlZCB3ZSBzaG91bGQgbm90IHByb2Nlc3MgZG91
YmxlIHRhcCwKKyAgICAvLyBzbyBwcm9jZXNzIHNpbmdsZSB0YXAgaGVyZSBpZiB0b3VjaGVkIHBv
aW50IGlzIGFscmVhZHkgcmVsZWFzZWQKKyAgICAvLyBvciBkbyBub3RoaW5nIGZvciBwcm9jZXNz
aW5nIHNpbmdsZSB0YXAgd2hlbiB0b3VjaCBpcyByZWxlYXNlZC4KKyAgICBpZiAoZ2VzdHVyZVJl
Y29nbml6ZXItPm1fcmVjb2duaXplckZ1bmN0aW9uID09ICZHZXN0dXJlUmVjb2duaXplcjo6ZG91
YmxlVGFwR2VzdHVyZSkgeworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+bV9jbGllbnQtPmhh
bmRsZVNpbmdsZVRhcChnZXN0dXJlUmVjb2duaXplci0+bV9maXJzdFByZXNzZWRQb2ludCk7Cisg
ICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5tX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZHZXN0dXJl
UmVjb2duaXplcjo6bm9HZXN0dXJlOworICAgIH0KKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFD
S19DQU5DRUw7Cit9CisKK0VpbmFfQm9vbCBHZXN0dXJlUmVjb2duaXplcjo6dGFwQW5kSG9sZFRp
bWVyQ2FsbGJhY2sodm9pZCogZGF0YSkKK3sKKyAgICBHZXN0dXJlUmVjb2duaXplciogZ2VzdHVy
ZVJlY29nbml6ZXIgPSBzdGF0aWNfY2FzdDxHZXN0dXJlUmVjb2duaXplcio+KGRhdGEpOworICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5tX3RhcEFuZEhvbGRUaW1lciA9IDA7CisgICAgZ2VzdHVyZVJl
Y29nbml6ZXItPm1fY2xpZW50LT5oYW5kbGVUYXBBbmRIb2xkKGdlc3R1cmVSZWNvZ25pemVyLT5t
X2ZpcnN0UHJlc3NlZFBvaW50KTsKKyAgICBnZXN0dXJlUmVjb2duaXplci0+bV9yZWNvZ25pemVy
RnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6Om5vR2VzdHVyZTsKKworICAgIHJldHVybiBF
Q09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgV0tQb2ludCBnZXRQb2lu
dEF0SW5kZXgoV0tBcnJheVJlZiBhcnJheSwgc2l6ZV90IGluZGV4KQoreworICAgIFdLVG91Y2hQ
b2ludFJlZiBwb2ludFJlZiA9IHN0YXRpY19jYXN0PFdLVG91Y2hQb2ludFJlZj4oV0tBcnJheUdl
dEl0ZW1BdEluZGV4KGFycmF5LCBpbmRleCkpOworICAgIEFTU0VSVChwb2ludFJlZik7CisKKyAg
ICByZXR1cm4gV0tUb3VjaFBvaW50R2V0UG9zaXRpb24ocG9pbnRSZWYpOworfQorCitzdGF0aWMg
aW5saW5lIFZlY3RvcjxJbnRQb2ludD4qIGNyZWF0ZVZlY3RvcldpdGhXS0FycmF5KFdLQXJyYXlS
ZWYgYXJyYXksIHNpemVfdCBzaXplKQoreworICAgIFZlY3RvcjxJbnRQb2ludD4qIHBvaW50cyA9
IG5ldyBWZWN0b3I8SW50UG9pbnQ+KHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICBwb2ludHMtPnVuY2hlY2tlZEFwcGVuZCh0b0ludFBvaW50KGdl
dFBvaW50QXRJbmRleChhcnJheSwgaSkpKTsKKworICAgIHJldHVybiBwb2ludHM7Cit9CisKK3Zv
aWQgR2VzdHVyZVJlY29nbml6ZXI6Om5vR2VzdHVyZShXS0V2ZW50VHlwZSB0eXBlLCBXS0FycmF5
UmVmIHRvdWNoUG9pbnRzKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Uga1dLRXZl
bnRUeXBlVG91Y2hTdGFydDoKKyAgICAgICAgbV9jbGllbnQtPmhhbmRsZUZsaWNrQ2FuY2VsZWQo
KTsKKworICAgICAgICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZHZXN0dXJlUmVjb2duaXplcjo6
c2luZ2xlVGFwR2VzdHVyZTsKKyAgICAgICAgbV9maXJzdFByZXNzZWRQb2ludCA9IHRvSW50UG9p
bnQoZ2V0UG9pbnRBdEluZGV4KHRvdWNoUG9pbnRzLCAwKSk7CisgICAgICAgIEFTU0VSVChtX3Rh
cEFuZEhvbGRUaW1lcik7CisgICAgICAgIG1fdGFwQW5kSG9sZFRpbWVyID0gZWNvcmVfdGltZXJf
YWRkKHNfdGFwQW5kSG9sZFRpbWVvdXRJblNlY29uZHMsIHRhcEFuZEhvbGRUaW1lckNhbGxiYWNr
LCB0aGlzKTsKKyAgICAgICAgbV9kb3VibGVUYXBUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChzX2Rv
dWJsZVRhcFRpbWVvdXRJblNlY29uZHMsIGRvdWJsZVRhcFRpbWVyQ2FsbGJhY2ssIHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3ZvaWQgR2VzdHVyZVJlY29nbml6ZXI6OnNpbmdsZVRhcEdlc3R1cmUoV0tFdmVudFR5cGUgdHlw
ZSwgV0tBcnJheVJlZiB0b3VjaFBvaW50cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIGtXS0V2ZW50VHlwZVRvdWNoU3RhcnQ6CisgICAgICAgIHN0b3BUYXBUaW1lcnMoKTsKKyAg
ICAgICAgbV9yZWNvZ25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6OnBpbmNoR2Vz
dHVyZTsKKyAgICAgICAgbV9jbGllbnQtPmhhbmRsZVBpbmNoU3RhcnRlZCgqYWRvcHRQdHIoY3Jl
YXRlVmVjdG9yV2l0aFdLQXJyYXkodG91Y2hQb2ludHMsIDIpKS5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hNb3ZlOiB7CisgICAgICAgIEludFBvaW50
IGN1cnJlbnRQb2ludCA9IHRvSW50UG9pbnQoZ2V0UG9pbnRBdEluZGV4KHRvdWNoUG9pbnRzLCAw
KSk7CisgICAgICAgIGlmIChtX2ZpcnN0UHJlc3NlZFBvaW50LmRpc3RhbmNlU3F1YXJlZFRvUG9p
bnQoY3VycmVudFBvaW50KSA+IHNfc3F1YXJlZFBhblRocmVzaG9sZCkgeworICAgICAgICAgICAg
c3RvcFRhcFRpbWVycygpOworICAgICAgICAgICAgbV9yZWNvZ25pemVyRnVuY3Rpb24gPSAmR2Vz
dHVyZVJlY29nbml6ZXI6OnBhbkdlc3R1cmU7CisgICAgICAgICAgICBoYW5kbGVQYW5TdGFydGVk
KGN1cnJlbnRQb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2Uga1dLRXZlbnRUeXBlVG91Y2hFbmQ6CisgICAgICAgIGlmIChtX3RhcEFuZEhvbGRUaW1lcikg
eworICAgICAgICAgICAgZWNvcmVfdGltZXJfZGVsKG1fdGFwQW5kSG9sZFRpbWVyKTsKKyAgICAg
ICAgICAgIG1fdGFwQW5kSG9sZFRpbWVyID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X2RvdWJsZVRhcFRpbWVyKQorICAgICAgICAgICAgbV9yZWNvZ25pemVyRnVuY3Rpb24gPSAmR2Vz
dHVyZVJlY29nbml6ZXI6OmRvdWJsZVRhcEdlc3R1cmU7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgbV9jbGllbnQtPmhhbmRsZVNpbmdsZVRhcChtX2ZpcnN0UHJlc3NlZFBvaW50KTsKKyAg
ICAgICAgICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1cmVSZWNvZ25pemVyOjpub0dl
c3R1cmU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyOjpkb3VibGVUYXBHZXN0
dXJlKFdLRXZlbnRUeXBlIHR5cGUsIFdLQXJyYXlSZWYgdG91Y2hQb2ludHMpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaFN0YXJ0OiB7CisgICAgICAg
IGlmIChtX2RvdWJsZVRhcFRpbWVyKSB7CisgICAgICAgICAgICBlY29yZV90aW1lcl9kZWwobV9k
b3VibGVUYXBUaW1lcik7CisgICAgICAgICAgICBtX2RvdWJsZVRhcFRpbWVyID0gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHNpemVfdCBudW1iZXJPZlRvdWNoUG9pbnRzID0gV0tBcnJheUdldFNp
emUodG91Y2hQb2ludHMpOworICAgICAgICBpZiAobnVtYmVyT2ZUb3VjaFBvaW50cyA9PSAxKSB7
CisgICAgICAgICAgICBpZiAobV9maXJzdFByZXNzZWRQb2ludC5kaXN0YW5jZVNxdWFyZWRUb1Bv
aW50KHRvSW50UG9pbnQoZ2V0UG9pbnRBdEluZGV4KHRvdWNoUG9pbnRzLCAwKSkpID4gc19zcXVh
cmVkRG91YmxlVGFwVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fcmVjb2duaXplckZ1bmN0
aW9uID0gJkdlc3R1cmVSZWNvZ25pemVyOjpzaW5nbGVUYXBHZXN0dXJlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9yZWNvZ25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6
ZXI6OnBpbmNoR2VzdHVyZTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5oYW5kbGVQaW5jaFN0YXJ0
ZWQoKmFkb3B0UHRyKGNyZWF0ZVZlY3RvcldpdGhXS0FycmF5KHRvdWNoUG9pbnRzLCAyKSkuZ2V0
KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIGtXS0V2ZW50
VHlwZVRvdWNoTW92ZTogeworICAgICAgICBJbnRQb2ludCBjdXJyZW50UG9pbnQgPSB0b0ludFBv
aW50KGdldFBvaW50QXRJbmRleCh0b3VjaFBvaW50cywgMCkpOworICAgICAgICBpZiAobV9maXJz
dFByZXNzZWRQb2ludC5kaXN0YW5jZVNxdWFyZWRUb1BvaW50KGN1cnJlbnRQb2ludCkgPiBzX3Nx
dWFyZWRQYW5UaHJlc2hvbGQpIHsKKyAgICAgICAgICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0g
Jkdlc3R1cmVSZWNvZ25pemVyOjpwYW5HZXN0dXJlOworICAgICAgICAgICAgaGFuZGxlUGFuU3Rh
cnRlZChjdXJyZW50UG9pbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoRW5kOgorICAgICAgICBtX2NsaWVudC0+aGFuZGxlRG91
YmxlVGFwKG1fZmlyc3RQcmVzc2VkUG9pbnQpOworICAgICAgICBtX3JlY29nbml6ZXJGdW5jdGlv
biA9ICZHZXN0dXJlUmVjb2duaXplcjo6bm9HZXN0dXJlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6
ZXI6OnBhbkdlc3R1cmUoV0tFdmVudFR5cGUgdHlwZSwgV0tBcnJheVJlZiB0b3VjaFBvaW50cykK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoU3RhcnQ6
CisgICAgICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1cmVSZWNvZ25pemVyOjpwaW5j
aEdlc3R1cmU7CisgICAgICAgIG1fY2xpZW50LT5oYW5kbGVQaW5jaFN0YXJ0ZWQoKmFkb3B0UHRy
KGNyZWF0ZVZlY3RvcldpdGhXS0FycmF5KHRvdWNoUG9pbnRzLCAyKSkuZ2V0KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoTW92ZToKKyAgICAgICAgdXBkYXRl
Q3VycmVudFBvaW50KHRvSW50UG9pbnQoZ2V0UG9pbnRBdEluZGV4KHRvdWNoUG9pbnRzLCAwKSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoRW5kOgorICAgICAg
ICBoYW5kbGVQYW5GaW5pc2hlZCgpOworICAgICAgICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZH
ZXN0dXJlUmVjb2duaXplcjo6bm9HZXN0dXJlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXI6OnBp
bmNoR2VzdHVyZShXS0V2ZW50VHlwZSB0eXBlLCBXS0FycmF5UmVmIHRvdWNoUG9pbnRzKQorewor
ICAgIHNpemVfdCBudW1iZXJPZlRvdWNoUG9pbnRzID0gV0tBcnJheUdldFNpemUodG91Y2hQb2lu
dHMpOworICAgIEFTU0VSVChudW1iZXJPZlRvdWNoUG9pbnRzID49IDIpOworCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaE1vdmU6IHsKKyAgICAgICAgbV9j
bGllbnQtPmhhbmRsZVBpbmNoKCphZG9wdFB0cihjcmVhdGVWZWN0b3JXaXRoV0tBcnJheSh0b3Vj
aFBvaW50cywgMikpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Uga1dL
RXZlbnRUeXBlVG91Y2hFbmQ6CisgICAgICAgIGlmIChudW1iZXJPZlRvdWNoUG9pbnRzID09IDIp
IHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5oYW5kbGVQaW5jaEZpbmlzaGVkKCk7CisgICAgICAg
ICAgICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZHZXN0dXJlUmVjb2duaXplcjo6cGFuR2VzdHVy
ZTsKKyAgICAgICAgICAgIFdLVG91Y2hQb2ludFJlZiBwb2ludFJlZjsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUb3VjaFBvaW50czsgKytpKSB7CisgICAgICAg
ICAgICAgICAgcG9pbnRSZWYgPSBzdGF0aWNfY2FzdDxXS1RvdWNoUG9pbnRSZWY+KFdLQXJyYXlH
ZXRJdGVtQXRJbmRleCh0b3VjaFBvaW50cywgaSkpOworICAgICAgICAgICAgICAgIFdLVG91Y2hQ
b2ludFN0YXRlIHN0YXRlID0gV0tUb3VjaFBvaW50R2V0U3RhdGUocG9pbnRSZWYpOworICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZSAhPSBrV0tUb3VjaFBvaW50U3RhdGVUb3VjaFJlbGVhc2VkICYm
IHN0YXRlICE9IGtXS1RvdWNoUG9pbnRTdGF0ZVRvdWNoQ2FuY2VsbGVkKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChwb2ludFJl
Zik7CisgICAgICAgICAgICBoYW5kbGVQYW5TdGFydGVkKHRvSW50UG9pbnQoV0tUb3VjaFBvaW50
R2V0UG9zaXRpb24ocG9pbnRSZWYpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEdlc3R1cmVSZWNvZ25p
emVyOjpyZXNldCgpCit7CisgICAgc3RvcFRhcFRpbWVycygpOworCisgICAgaWYgKG1fcGFuQW5p
bWF0b3IpIHsKKyAgICAgICAgZWNvcmVfYW5pbWF0b3JfZGVsKG1fcGFuQW5pbWF0b3IpOworICAg
ICAgICBtX3BhbkFuaW1hdG9yID0gMDsKKyAgICB9CisKKyAgICBtX3JlY29nbml6ZXJGdW5jdGlv
biA9ICZHZXN0dXJlUmVjb2duaXplcjo6bm9HZXN0dXJlOworfQorCit2b2lkIEdlc3R1cmVSZWNv
Z25pemVyOjpzdG9wVGFwVGltZXJzKCkKK3sKKyAgICBpZiAobV9kb3VibGVUYXBUaW1lcikgewor
ICAgICAgICBlY29yZV90aW1lcl9kZWwobV9kb3VibGVUYXBUaW1lcik7CisgICAgICAgIG1fZG91
YmxlVGFwVGltZXIgPSAwOworICAgIH0KKworICAgIGlmIChtX3RhcEFuZEhvbGRUaW1lcikgewor
ICAgICAgICBlY29yZV90aW1lcl9kZWwobV90YXBBbmRIb2xkVGltZXIpOworICAgICAgICBtX3Rh
cEFuZEhvbGRUaW1lciA9IDA7CisgICAgfQorfQorCitFaW5hX0Jvb2wgR2VzdHVyZVJlY29nbml6
ZXI6OnBhbkFuaW1hdG9yQ2FsbGJhY2sodm9pZCogZGF0YSkKK3sKKyAgICBHZXN0dXJlUmVjb2du
aXplciogZ2VzdHVyZVJlY29nbml6ZXIgPSBzdGF0aWNfY2FzdDxHZXN0dXJlUmVjb2duaXplcio+
KGRhdGEpOworICAgIGlmICghZ2VzdHVyZVJlY29nbml6ZXItPm1faXNDdXJyZW50UG9pbnRVcGRh
dGVkKQorICAgICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfUkVORVc7CisKKyAgICBnZXN0dXJl
UmVjb2duaXplci0+bV9jbGllbnQtPmhhbmRsZVBhbihnZXN0dXJlUmVjb2duaXplci0+bV9jdXJy
ZW50UG9pbnQpOworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5tX2lzQ3VycmVudFBvaW50VXBkYXRl
ZCA9IGZhbHNlOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVXOworfQorCit2b2lk
IEdlc3R1cmVSZWNvZ25pemVyOjpoYW5kbGVQYW5TdGFydGVkKGNvbnN0IEludFBvaW50JiBwb2lu
dCkKK3sKKyAgICBBU1NFUlQoIW1fcGFuQW5pbWF0b3IpOworICAgIG1fcGFuQW5pbWF0b3IgPSBl
Y29yZV9hbmltYXRvcl9hZGQocGFuQW5pbWF0b3JDYWxsYmFjaywgdGhpcyk7CisgICAgbV9jdXJy
ZW50UG9pbnQgPSBwb2ludDsKKyAgICBtX2ZpcnN0SGlzdG9yeUl0ZW1JbmRleCA9IDA7CisgICAg
bV9oaXN0b3J5LnJlc2l6ZSgwKTsKKworICAgIG1fY2xpZW50LT5oYW5kbGVQYW5TdGFydGVkKHBv
aW50KTsKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlQ3VycmVudFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50OworICAg
IG1faXNDdXJyZW50UG9pbnRVcGRhdGVkID0gdHJ1ZTsKKworICAgIC8vIFNhdmUgY3VycmVudCBw
b2ludCB0byB1c2UgdG8gY2FsY3VsYXRlIG9mZnNldCBvZiBmbGljay4KKyAgICBIaXN0b3J5SXRl
bSBpdGVtID0ge21fY3VycmVudFBvaW50LCBlY29yZV90aW1lX2dldCgpfTsKKyAgICBpZiAobV9o
aXN0b3J5LnNpemUoKSA8IG1faGlzdG9yeS5jYXBhY2l0eSgpKQorICAgICAgICBtX2hpc3Rvcnku
dW5jaGVja2VkQXBwZW5kKGl0ZW0pOworICAgIGVsc2UgeworICAgICAgICBtX2hpc3RvcnlbbV9m
aXJzdEhpc3RvcnlJdGVtSW5kZXgrK10gPSBpdGVtOworICAgICAgICBpZiAobV9maXJzdEhpc3Rv
cnlJdGVtSW5kZXggPj0gbV9oaXN0b3J5LmNhcGFjaXR5KCkpCisgICAgICAgICAgICBtX2ZpcnN0
SGlzdG9yeUl0ZW1JbmRleCAlPSBtX2hpc3RvcnkuY2FwYWNpdHkoKTsKKyAgICB9Cit9CisKK3Zv
aWQgR2VzdHVyZVJlY29nbml6ZXI6OmhhbmRsZVBhbkZpbmlzaGVkKCkKK3sKKyAgICBBU1NFUlQo
bV9wYW5BbmltYXRvcik7CisgICAgZWNvcmVfYW5pbWF0b3JfZGVsKG1fcGFuQW5pbWF0b3IpOwor
ICAgIG1fcGFuQW5pbWF0b3IgPSAwOworCisgICAgaWYgKCFtX2hpc3RvcnkuaXNFbXB0eSgpKSB7
CisgICAgICAgIC8vIENhbGN1bGF0ZSBvZmZzZXQgdG8gbW92ZSBkdXJpbmcgb25lIGZyYW1lLgor
ICAgICAgICBjb25zdCBIaXN0b3J5SXRlbSYgZmlyc3RIaXN0b3J5SXRlbSA9IG1faGlzdG9yeVtt
X2ZpcnN0SGlzdG9yeUl0ZW1JbmRleF07CisgICAgICAgIGRvdWJsZSBmcmFtZSA9IChlY29yZV90
aW1lX2dldCgpIC0gZmlyc3RIaXN0b3J5SXRlbS50aW1lc3RhbXApIC8gZWNvcmVfYW5pbWF0b3Jf
ZnJhbWV0aW1lX2dldCgpOworICAgICAgICBJbnRTaXplIG9mZnNldCA9IGZpcnN0SGlzdG9yeUl0
ZW0ucG9pbnQgLSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgb2Zmc2V0LnNjYWxlKDEgLyBmcmFt
ZSk7CisgICAgICAgIG1fY2xpZW50LT5oYW5kbGVGbGljayhvZmZzZXQpOworICAgIH0KKworICAg
IG1fY2xpZW50LT5oYW5kbGVQYW5GaW5pc2hlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9HZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmE0ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMCwwICsx
LDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlc3R1
cmVSZWNvZ25pemVyX2gKKyNkZWZpbmUgR2VzdHVyZVJlY29nbml6ZXJfaAorCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tFdmVudEVmbC5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgR2VzdHVyZVJlY29nbml6ZXJDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkdlc3R1cmVSZWNvZ25pemVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlU2luZ2xlVGFwKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZURvdWJsZVRhcChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVUYXBBbmRIb2xkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGFuU3RhcnRlZChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYW4oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGFuRmluaXNoZWQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRmxpY2soY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVGbGlja0NhbmNlbGVkKCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlUGluY2hTdGFydGVkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRQb2lu
dD4mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGluY2goY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkludFBvaW50PiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQaW5jaEZpbmlzaGVk
KCkgeyB9Cit9OworCitjbGFzcyBHZXN0dXJlUmVjb2duaXplciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8R2VzdHVyZVJlY29nbml6ZXI+IGNyZWF0ZShHZXN0dXJlUmVjb2duaXpl
ckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXN0
dXJlUmVjb2duaXplcihjbGllbnQpKTsKKyAgICB9CisKKyAgICB2b2lkIHByb2Nlc3NUb3VjaEV2
ZW50KFdLVG91Y2hFdmVudFJlZik7CisgICAgdm9pZCByZXNldCgpOworCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IEdlc3R1cmVSZWNvZ25pemVyKEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50Kik7CisK
KyAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfZG91YmxlVGFwVGltZW91dEluU2Vjb25kczsKKyAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIHNfdGFwQW5kSG9sZFRpbWVvdXRJblNlY29uZHM7CisgICAg
c3RhdGljIGNvbnN0IGludCBzX3NxdWFyZWREb3VibGVUYXBUaHJlc2hvbGQ7CisgICAgc3RhdGlj
IGNvbnN0IGludCBzX3NxdWFyZWRQYW5UaHJlc2hvbGQ7CisgICAgc3RhdGljIGNvbnN0IGludCBz
X2hpc3RvcnlDYXBhY2l0eTsKKworICAgIHN0YXRpYyBFaW5hX0Jvb2wgZG91YmxlVGFwVGltZXJD
YWxsYmFjayh2b2lkKik7CisgICAgc3RhdGljIEVpbmFfQm9vbCB0YXBBbmRIb2xkVGltZXJDYWxs
YmFjayh2b2lkKik7CisgICAgc3RhdGljIEVpbmFfQm9vbCBwYW5BbmltYXRvckNhbGxiYWNrKHZv
aWQqKTsKKworICAgIC8vIFN0YXRlIGZ1bmN0aW9ucy4KKyAgICB2b2lkIG5vR2VzdHVyZShXS0V2
ZW50VHlwZSwgV0tBcnJheVJlZik7CisgICAgdm9pZCBzaW5nbGVUYXBHZXN0dXJlKFdLRXZlbnRU
eXBlLCBXS0FycmF5UmVmKTsKKyAgICB2b2lkIGRvdWJsZVRhcEdlc3R1cmUoV0tFdmVudFR5cGUs
IFdLQXJyYXlSZWYpOworICAgIHZvaWQgcGFuR2VzdHVyZShXS0V2ZW50VHlwZSwgV0tBcnJheVJl
Zik7CisgICAgdm9pZCBwaW5jaEdlc3R1cmUoV0tFdmVudFR5cGUsIFdLQXJyYXlSZWYpOworCisg
ICAgdm9pZCBzdG9wVGFwVGltZXJzKCk7CisgICAgdm9pZCBoYW5kbGVQYW5TdGFydGVkKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCB1cGRhdGVDdXJyZW50UG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZVBhbkZpbmlzaGVkKCk7CisKKyAg
ICB0eXBlZGVmIHZvaWQgKEdlc3R1cmVSZWNvZ25pemVyOjoqUmVjb2duaXplckZ1bmN0aW9uKShX
S0V2ZW50VHlwZSwgV0tBcnJheVJlZik7CisgICAgUmVjb2duaXplckZ1bmN0aW9uIG1fcmVjb2du
aXplckZ1bmN0aW9uOworCisgICAgR2VzdHVyZVJlY29nbml6ZXJDbGllbnQqIG1fY2xpZW50Owor
ICAgIEVjb3JlX1RpbWVyKiBtX3RhcEFuZEhvbGRUaW1lcjsKKyAgICBFY29yZV9UaW1lciogbV9k
b3VibGVUYXBUaW1lcjsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2ZpcnN0UHJlc3NlZFBvaW50
OworCisgICAgRWNvcmVfQW5pbWF0b3IqIG1fcGFuQW5pbWF0b3I7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgbV9jdXJyZW50UG9pbnQ7CisgICAgYm9vbCBtX2lzQ3VycmVudFBvaW50VXBkYXRlZDsK
KworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQ7
CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgfSBIaXN0b3J5SXRlbTsKKyAgICBWZWN0
b3I8SGlzdG9yeUl0ZW0+IG1faGlzdG9yeTsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0SGlzdG9yeUl0
ZW1JbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFRPVUNIX0VWRU5UUykKKworI2VuZGlmIC8vIEdlc3R1cmVSZWNvZ25pemVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25pemVyQ2xp
ZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNv
Z25pemVyQ2xpZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
NmNiNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmwuY3BwCkBAIC0wLDAgKzEsMTM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHZXN0dXJlUmVjb2duaXplckNsaWVudEVmbC5oIgorCisjaW5jbHVkZSAiRWFzaW5nQ3Vy
dmVzLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgorI2luY2x1ZGUgIldLVmlld0VmbC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0dlc3R1cmVSZWNvZ25pemVyQ2xpZW50RWZs
OjpHZXN0dXJlUmVjb2duaXplckNsaWVudEVmbChFd2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3
KHZpZXcpCisgICAgLCBtX2ZsaWNrQW5pbWF0b3IoMCkKKyAgICAsIG1fZmxpY2tEdXJhdGlvbigw
KQorICAgICwgbV9mbGlja0luZGV4KDApCit7Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJD
bGllbnRFZmw6OmhhbmRsZVNpbmdsZVRhcChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7Cisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIFdLVmlld1NlbmRHZXN0dXJlRXZlbnQobV92
aWV3LT53a1ZpZXcoKSwgYWRvcHRXSyhXS0dlc3R1cmVFdmVudENyZWF0ZShrV0tFdmVudFR5cGVH
ZXN0dXJlU2luZ2xlVGFwLCB0b0FQSShwb3NpdGlvbiksIHRvQVBJKG1fdmlldy0+dHJhbnNmb3Jt
VG9TY3JlZW4oKS5tYXBQb2ludChwb3NpdGlvbikpLCAwLCBlY29yZV90aW1lX2dldCgpLCBXS1Np
emVNYWtlKDAsIDApLCAwLCAwKSkuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocG9z
aXRpb24pOworI2VuZGlmCit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmw6Omhh
bmRsZURvdWJsZVRhcChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgV0tWaWV3Rmlu
ZFpvb21hYmxlQXJlYUZvclJlY3QobV92aWV3LT53a1ZpZXcoKSwgV0tSZWN0TWFrZShwb3NpdGlv
bi54KCksIHBvc2l0aW9uLnkoKSwgMSwgMSkpOworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVy
Q2xpZW50RWZsOjpoYW5kbGVUYXBBbmRIb2xkKGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsOjpoYW5k
bGVQYW5TdGFydGVkKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX2xhc3RQb2ludCA9
IHBvaW50OworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsOjpoYW5kbGVQYW4o
Y29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGlmIChtX2xhc3RQb2ludCA9PSBwb2ludCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWV3LT5zY3JvbGxCeShtX2xhc3RQb2ludCAtIHBv
aW50KTsKKyAgICBtX2xhc3RQb2ludCA9IHBvaW50OworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25p
emVyQ2xpZW50RWZsOjpoYW5kbGVQYW5GaW5pc2hlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworRWluYV9Cb29sIEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsOjpmbGlja0FuaW1h
dG9yQ2FsbGJhY2sodm9pZCogZGF0YSkKK3sKKyAgICBHZXN0dXJlUmVjb2duaXplckNsaWVudEVm
bCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8R2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmwqPihkYXRh
KTsKKyAgICBmbG9hdCBtdWx0aXBsaWVyID0gZWFzZUluT3V0UXVhZChjbGllbnQtPm1fZmxpY2tJ
bmRleCwgMCwgMS4wLCBjbGllbnQtPm1fZmxpY2tEdXJhdGlvbik7CisgICAgZmxvYXQgb2Zmc2V0
V2lkdGggPSBjbGllbnQtPm1fZmxpY2tPZmZzZXQud2lkdGgoKSAqIG11bHRpcGxpZXI7CisgICAg
ZmxvYXQgb2Zmc2V0SGVpZ2h0ID0gY2xpZW50LT5tX2ZsaWNrT2Zmc2V0LmhlaWdodCgpICogbXVs
dGlwbGllcjsKKyAgICBvZmZzZXRXaWR0aCA9IChvZmZzZXRXaWR0aCA+IDApID8gY2VpbGYob2Zm
c2V0V2lkdGgpIDogZmxvb3JmKG9mZnNldFdpZHRoKTsKKyAgICBvZmZzZXRIZWlnaHQgPSAob2Zm
c2V0SGVpZ2h0ID4gMCkgPyBjZWlsZihvZmZzZXRIZWlnaHQpIDogZmxvb3JmKG9mZnNldEhlaWdo
dCk7CisgICAgSW50U2l6ZSBvZmZzZXQob2Zmc2V0V2lkdGgsIG9mZnNldEhlaWdodCk7CisgICAg
Y2xpZW50LT5tX2ZsaWNrSW5kZXgtLTsKKworICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgfHwgIWNs
aWVudC0+bV92aWV3LT5zY3JvbGxCeShvZmZzZXQpIHx8ICFjbGllbnQtPm1fZmxpY2tJbmRleCkg
eworICAgICAgICBjbGllbnQtPm1fZmxpY2tBbmltYXRvciA9IDA7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHZXN0dXJlUmVjb2du
aXplckNsaWVudEVmbDo6aGFuZGxlRmxpY2soY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQoreworICAg
IG1fZmxpY2tPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9mbGlja0luZGV4ID0gbV9mbGlja0R1cmF0
aW9uID0gMSAvIGVjb3JlX2FuaW1hdG9yX2ZyYW1ldGltZV9nZXQoKTsKKyAgICBtX2ZsaWNrQW5p
bWF0b3IgPSBlY29yZV9hbmltYXRvcl9hZGQoZmxpY2tBbmltYXRvckNhbGxiYWNrLCB0aGlzKTsK
K30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplckNsaWVudEVmbDo6aGFuZGxlRmxpY2tDYW5jZWxl
ZCgpCit7CisgICAgaWYgKG1fZmxpY2tBbmltYXRvcikgeworICAgICAgICBlY29yZV9hbmltYXRv
cl9kZWwobV9mbGlja0FuaW1hdG9yKTsKKyAgICAgICAgbV9mbGlja0FuaW1hdG9yID0gMDsKKyAg
ICB9Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmw6OmhhbmRsZVBpbmNoU3Rh
cnRlZChjb25zdCBWZWN0b3I8SW50UG9pbnQ+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsOjpoYW5kbGVQaW5jaChjb25zdCBW
ZWN0b3I8SW50UG9pbnQ+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdl
c3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsOjpoYW5kbGVQaW5jaEZpbmlzaGVkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9HZXN0dXJlUmVjb2duaXplckNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Y3NWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmwu
aApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgR2VzdHVyZVJlY29nbml6ZXJDbGllbnRFZmxfaAorI2RlZmluZSBHZXN0dXJlUmVjb2du
aXplckNsaWVudEVmbF9oCisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCisjaW5jbHVkZSAi
R2VzdHVyZVJlY29nbml6ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgRXdrVmlldzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSW50UG9pbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHZXN0
dXJlUmVjb2duaXplckNsaWVudEVmbCA6IHB1YmxpYyBHZXN0dXJlUmVjb2duaXplckNsaWVudCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R2VzdHVyZVJlY29nbml6ZXJDbGllbnRF
Zmw+IGNyZWF0ZShFd2tWaWV3KiB2aWV3KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBHZXN0dXJlUmVjb2duaXplckNsaWVudEVmbCh2aWV3KSk7CisgICAgfQorCisgICAgfkdl
c3R1cmVSZWNvZ25pemVyQ2xpZW50RWZsKCkgeyB9CisKKyAgICAvLyBHZXN0dXJlUmVjb2duaXpl
ckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlU2luZ2xlVGFwKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURvdWJsZVRhcChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVUYXBBbmRIb2xkKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhblN0YXJ0ZWQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGFuKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhbkZpbmlz
aGVkKCk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZsaWNrKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRmxpY2tDYW5jZWxlZCgpOworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVQaW5jaFN0YXJ0ZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFBvaW50
PiYpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQaW5jaChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
SW50UG9pbnQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBpbmNoRmluaXNoZWQoKTsKKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBHZXN0dXJlUmVjb2duaXplckNsaWVudEVmbChFd2tWaWV3
Kik7CisKKyAgICBzdGF0aWMgRWluYV9Cb29sIGZsaWNrQW5pbWF0b3JDYWxsYmFjayh2b2lkKiBk
YXRhKTsKKworICAgIEV3a1ZpZXcqIG1fdmlldzsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xh
c3RQb2ludDsKKyAgICBFY29yZV9BbmltYXRvciogbV9mbGlja0FuaW1hdG9yOworICAgIFdlYkNv
cmU6OkludFNpemUgbV9mbGlja09mZnNldDsKKyAgICB1bnNpZ25lZCBtX2ZsaWNrRHVyYXRpb247
CisgICAgdW5zaWduZWQgbV9mbGlja0luZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCisjZW5kaWYgLy8gR2VzdHVyZVJl
Y29nbml6ZXJDbGllbnRFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViUGFnZVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJQYWdlUHJv
eHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lMzRhOWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViUGFnZVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisKKyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViUGFnZU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJQYWdl
UHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNv
bnN0IEludFNpemUmIGFyZWEpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFpvb21hYmxl
QXJlYUZvclBvaW50KHBvaW50LCBhcmVhKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBJbnRQb2ludCYgdGFyZ2V0LCBjb25zdCBJ
bnRSZWN0JiBhcmVhKQoreworICAgIG1fcGFnZUNsaWVudC0+ZGlkRmluZFpvb21hYmxlQXJlYSh0
YXJnZXQsIGFyZWEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHAKaW5kZXggZTFiNDRlMC4uNWYy
ZmRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViVmlldy5jcHAKQEAgLTEwNSw2ICsxMDUsMTYgQEAgdm9pZCBXZWJWaWV3
OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5n
ZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwogfQogCit2b2lkIFdlYlZpZXc6OnNldENv
bnRlbnRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAg
ICBGbG9hdFJlY3QgYm91bmRzOworICAgIGJvdW5kcy5zZXRXaWR0aChzdGQ6Om1heCgwLmYsIGNl
aWxmKG1fY29udGVudHNTaXplLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZUZhY3RvcikpIC0gc2l6
ZSgpLndpZHRoKCkpOworICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptYXgoMC5mLCBjZWlsZiht
X2NvbnRlbnRzU2l6ZS5oZWlnaHQoKSAqIG1fY29udGVudFNjYWxlRmFjdG9yKSkgLSBzaXplKCku
aGVpZ2h0KCkpOworCisgICAgbV9jb250ZW50UG9zaXRpb24uc2V0WChjbGFtcFRvKHBvc2l0aW9u
LngoKSwgYm91bmRzLngoKSwgYm91bmRzLndpZHRoKCkpKTsKKyAgICBtX2NvbnRlbnRQb3NpdGlv
bi5zZXRZKGNsYW1wVG8ocG9zaXRpb24ueSgpLCBib3VuZHMueSgpLCBib3VuZHMuaGVpZ2h0KCkp
KTsKK30KKwogdm9pZCBXZWJWaWV3OjpzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUg
dHgsIGRvdWJsZSB0eSkKIHsKICAgICBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybSA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKHR4LCB0eSk7CkBAIC0xMTIsNyArMTIyLDcgQEAgdm9p
ZCBXZWJWaWV3OjpzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0
eSkKIAogSW50UG9pbnQgV2ViVmlldzo6dXNlclZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybUZyb21TY2VuZSgpLm1h
cFBvaW50KHBvaW50KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtRnJvbVVzZXJWaWV3cG9ydCgpLm1h
cFBvaW50KHBvaW50KTsKIH0KIAogSW50UG9pbnQgV2ViVmlldzo6dXNlclZpZXdwb3J0VG9TY2Vu
ZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0xMjIsNyArMTMyLDcg
QEAgSW50UG9pbnQgV2ViVmlldzo6dXNlclZpZXdwb3J0VG9TY2VuZShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0CiAKIEludFBvaW50IFdlYlZpZXc6OmNvbnRlbnRzVG9Vc2Vy
Vmlld3BvcnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIHJldHVybiB0cmFu
c2Zvcm1Ub1NjZW5lKCkubWFwUG9pbnQocG9pbnQpOworICAgIHJldHVybiB0cmFuc2Zvcm1Ub1Vz
ZXJWaWV3cG9ydCgpLm1hcFBvaW50KHBvaW50KTsKIH0KIAogdm9pZCBXZWJWaWV3OjpwYWludFRv
Q3VycmVudEdMQ29udGV4dCgpCkBAIC0yMDcsMjQgKzIxNywzOSBAQCB2b2lkIFdlYlZpZXc6OmRp
ZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogICAgIHVw
ZGF0ZVZpZXdwb3J0U2l6ZSgpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gV2ViVmlldzo6dHJhbnNm
b3JtRnJvbVNjZW5lKCkgY29uc3QKK3ZvaWQgV2ViVmlldzo6ZGlkRmluZFpvb21hYmxlQXJlYShj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBh
cmVhKQogewotICAgIHJldHVybiB0cmFuc2Zvcm1Ub1NjZW5lKCkuaW52ZXJzZSgpOworICAgIG1f
Y2xpZW50LmRpZEZpbmRab29tYWJsZUFyZWEodGhpcywgdGFyZ2V0LCBhcmVhKTsKIH0KIAotQWZm
aW5lVHJhbnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdAorQWZmaW5lVHJh
bnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9ybUZyb21Vc2VyVmlld3BvcnQoKSBjb25zdAoreworICAg
IHJldHVybiB0cmFuc2Zvcm1Ub1VzZXJWaWV3cG9ydCgpLmludmVyc2UoKTsKK30KKworQWZmaW5l
VHJhbnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9ybVRvVXNlclZpZXdwb3J0KCkgY29uc3QKIHsKICAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uID0gLW1fY29udGVudFBvc2l0aW9uOwogICAgIGZsb2F0IGVm
ZmVjdGl2ZVNjYWxlID0gbV9jb250ZW50U2NhbGVGYWN0b3IgKiBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCk7Ci0gICAgcG9zaXRpb24uc2NhbGUoZWZmZWN0aXZlU2NhbGUsIGVmZmVjdGl2ZVNj
YWxlKTsKKyAgICBwb3NpdGlvbi5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIG1f
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm07CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBv
c2l0aW9uLnkoKSk7CiAgICAgdHJhbnNmb3JtLnNjYWxlKGVmZmVjdGl2ZVNjYWxlKTsKIAogICAg
IHJldHVybiB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKIH0KIAorQWZmaW5lVHJhbnNm
b3JtIFdlYlZpZXc6OnRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
YW5zZm9ybVRvU2NlbmUoKS5pbnZlcnNlKCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBXZWJWaWV3
Ojp0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91c2VyVmlld3BvcnRU
cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKS5tdWx0aXBseSh0cmFuc2Zvcm1Ub1VzZXJWaWV3
cG9ydCgpKTsKK30KKwogQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBXZWJWaWV3Ojpjb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUoKQogewogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVh
ID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpOwpAQCAtMjQzLDcgKzI2OCw5IEBAIHZvaWQgV2ViVmll
dzo6dXBkYXRlVmlld3BvcnRTaXplKCkKICAgICBpZiAoRHJhd2luZ0FyZWFQcm94eSogZHJhd2lu
Z0FyZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCkpIHsKICAgICAgICAgLy8gV2ViIFByb2Nlc3Mg
ZXhwZWN0cyBzaXplcyBpbiBVSSB1bml0cywgYW5kIG5vdCByYXcgZGV2aWNlIHVuaXRzLgogICAg
ICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpLCBJbnRT
aXplKCksIEludFNpemUoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0
KGNvbnRlbnRQb3NpdGlvbigpLCB2aXNpYmxlQ29udGVudHNTaXplKCkpOworICAgICAgICBGbG9h
dFBvaW50IHBvc2l0aW9uID0gY29udGVudFBvc2l0aW9uKCk7CisgICAgICAgIHBvc2l0aW9uLnNj
YWxlKDEgLyBtX2NvbnRlbnRTY2FsZUZhY3RvciwgMSAvIG1fY29udGVudFNjYWxlRmFjdG9yKTsK
KyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QocG9zaXRpb24sIHZpc2libGVD
b250ZW50c1NpemUoKSk7CiAgICAgICAgIHZpc2libGVDb250ZW50c1JlY3QuaW50ZXJzZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGNvbnRlbnRzU2l6ZSgpKSk7CiAgICAgICAgIGRyYXdpbmdB
cmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIEZsb2F0UG9p
bnQoKSk7CiAgICAgfQpAQCAtMzg3LDEzICs0MTQsMjAgQEAgdm9pZCBXZWJWaWV3Ojpkb25lV2l0
aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9pZCBXZWJWaWV3
Ojpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgLyp3
YXNFdmVudEhhbmRsZWQqLykKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCit2b2lkIFdlYlZp
ZXc6OmRvbmVXaXRoR2VzdHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYsIGJvb2wpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKK3ZvaWQgV2ViVmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRv
dWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKK3sKKyAgICBtX2NsaWVudC5k
b25lV2l0aFRvdWNoRXZlbnQodGhpcywgZXZlbnQsIHdhc0V2ZW50SGFuZGxlZCk7Cit9CisjZW5k
aWYKKwogUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlUG9wdXBN
ZW51UHJveHkoV2ViUGFnZVByb3h5KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNTMw
LDYgKzU2NCwxMSBAQCB2b2lkIFdlYlZpZXc6OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgp
CiAgICAgbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbih0aGlzKTsKIH0KIAordm9p
ZCBXZWJWaWV3OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fcGFnZS0+ZmluZFpvb21hYmxlQXJlYUZv
clBvaW50KHRyYW5zZm9ybUZyb21TY2VuZSgpLm1hcFBvaW50KHBvaW50KSwgdHJhbnNmb3JtRnJv
bVNjZW5lKCkubWFwU2l6ZShzaXplKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAj
ZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oCmluZGV4IDdjYTNj
NjIuLjA3Nzc4OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmgKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Q29udGVudFNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fY29udGVu
dFNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KICAgICBmbG9hdCBjb250ZW50U2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTY2FsZUZhY3RvcjsgfQogCi0gICAgdm9pZCBz
ZXRDb250ZW50UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsg
bV9jb250ZW50UG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0Q29udGVudFBvc2l0
aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKICAgICBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBjb250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRQb3NpdGlv
bjsgfQogCiAgICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRv
dWJsZSB0eSk7CkBAIC05Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICBib29sIGV4aXRGdWxsU2Ny
ZWVuKCk7CiAjZW5kaWYKIAorICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCiAgICAgLy8g
VmlldyBjbGllbnQuCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVu
dCopOwogCkBAIC0xMDEsOCArMTAzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENoYW5nZUNv
bnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGVudHNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1NpemU7IH0K
ICAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlzaWJsZUNvbnRlbnRzU2l6ZSgpIGNvbnN0OworICAg
IHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgYmVjb21lIHByaXZh
dGUgd2hlbiBXZWIgRXZlbnRzIGNyZWF0aW9uIGlzIG1vdmVkIHRvIFdlYlZpZXcuCisgICAgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUZyb21Vc2VyVmlld3BvcnQoKSBjb25zdDsK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9Vc2VyVmlld3BvcnQoKSBj
b25zdDsKICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtRnJvbVNjZW5lKCkg
Y29uc3Q7CiAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybVRvU2NlbmUoKSBj
b25zdDsKIApAQCAtMTY3LDYgKzE3Miw5IEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZl
V2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBPVkVSUklERTsKICNlbmRpZgor
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGRvbmVXaXRoR2VzdHVyZUV2ZW50
KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYsIGJvb2wpIE9WRVJSSURFOworI2VuZGlmCiAKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250
ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIE9WRVJS
SURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViVmlld0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmNwcAppbmRleCBjY2M0MzVmLi5iZWE5MjgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9X
ZWJWaWV3Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmNwcApAQCAtMjksMTEgKzI5LDE2IEBACiAKICNpbmNs
dWRlICJXZWJWaWV3Q2xpZW50LmgiCiAKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgIldLUmV0
YWluUHRyLmgiCiAjaW5jbHVkZSAiV2ViVmlld3BvcnRBdHRyaWJ1dGVzLmgiCiAKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorI2luY2x1ZGUgIk5hdGl2ZVdlYlRvdWNoRXZlbnQuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0x
MTEsNiArMTE2LDMxIEBAIHZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlVG9vbHRpcChXZWJW
aWV3KiB2aWV3LCBjb25zdCBTdHJpbmcmIHRvb2x0aXApCiAgICAgbV9jbGllbnQuZGlkQ2hhbmdl
VG9vbHRpcCh0b0FQSSh2aWV3KSwgYWRvcHRXSyh0b0NvcGllZEFQSSh0b29sdGlwKSkuZ2V0KCks
IG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCit2b2lkIFdlYlZpZXdDbGllbnQ6OmRpZEZpbmRa
b29tYWJsZUFyZWEoV2ViVmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHRhcmdldCwgY29uc3Qg
SW50UmVjdCYgYXJlYSkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmRab29tYWJsZUFyZWEp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZEZpbmRab29tYWJsZUFyZWEodG9B
UEkodmlldyksIHRvQVBJKHRhcmdldCksIHRvQVBJKGFyZWEpLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIFdlYlZpZXdDbGllbnQ6OmRv
bmVXaXRoVG91Y2hFdmVudChXZWJWaWV3KiB2aWV3LCBjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50
JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCit7CisgICAgaWYgKCFtX2NsaWVudC5kb25l
V2l0aFRvdWNoRXZlbnQpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKEVGTCkKKyAg
ICBtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZlbnQodG9BUEkodmlldyksIHRvQVBJKGNvbnN0X2Nh
c3Q8RXdrVG91Y2hFdmVudCo+KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKSwgd2FzRXZlbnRIYW5kbGVk
LCBtX2NsaWVudC5jbGllbnRJbmZvKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBVTlVTRURfUEFSQU0odmlldyk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVT
RURfUEFSQU0od2FzRXZlbnRIYW5kbGVkKTsKKyNlbmRpZgorfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Vmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViVmlld0NsaWVudC5oCmluZGV4IDQ0YmY0ZGQuLjUxOTc5ZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJW
aWV3Q2xpZW50LmgKQEAgLTQzLDYgKzQzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFz
cyBXZWJWaWV3OwogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2NsYXNzIE5hdGl2ZVdlYlRv
dWNoRXZlbnQ7CisjZW5kaWYKKwogY2xhc3MgV2ViVmlld0NsaWVudDogcHVibGljIEFQSUNsaWVu
dDxXS1ZpZXdDbGllbnQsIGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lvbj4gewogcHVibGljOgog
ICAgIHZvaWQgdmlld05lZWRzRGlzcGxheShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwpAQCAtNTQsNiArNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ29tcGxldGVQYWdl
VHJhbnNpdGlvbihXZWJWaWV3Kik7CiAgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0
ZXMoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwogICAgIHZv
aWQgZGlkQ2hhbmdlVG9vbHRpcChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB0b29sdGlwKTsKKyAg
ICB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoV2ViVmlldyosIGNvbnN0IE5hdGl2ZVdlYlRv
dWNoRXZlbnQmLCBib29sKTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCA5NWY2Njk2Li45NWVmYTMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTEyMSw4ICsxMjEsMTAgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpID0g
MDsKICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisjZW5kaWYKKyNpZiBQTEFU
Rk9STShRVCkKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXV0aGVudGljYXRpb25SZXF1aXJlZFJl
cXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgY29uc3QgU3RyaW5nJiByZWFsbSwgY29uc3Qg
U3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNz
d29yZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDZXJ0aWZpY2F0ZVZlcmlmaWNhdGlv
blJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYgaWdub3JlRXJyb3JzKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVl
c3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDE2X3QgcG9ydCwgY29uc3QgU3RyaW5nJiBw
cmVmaWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIuY3BwCmluZGV4IDYyNTRjZjcuLjNmY2UyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKQEAgLTI1Nyw4ICsyNTcsNyBA
QCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmRpZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0
eShjb25zdCBGbG9hdFBvaW50JiBwb3NpdAogewogICAgIGlmICghbV9wZW5kaW5nUG9zaXRpb25D
aGFuZ2UpCiAgICAgICAgIG1fY29udGVudHNQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICgh
bV9wZW5kaW5nU2NhbGVDaGFuZ2UpCi0gICAgICAgIGFwcGx5U2NhbGVBZnRlclJlbmRlcmluZ0Nv
bnRlbnRzKHNjYWxlKTsKKyAgICBhcHBseVNjYWxlQWZ0ZXJSZW5kZXJpbmdDb250ZW50cyhzY2Fs
ZSk7CiAKICAgICBzeW5jVmlzaWJsZUNvbnRlbnRzKHRyYWplY3RvcnlWZWN0b3IpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGY1N2I2NTMuLjRjMjMzMWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTY2Miw3ICs2NjIs
NyBAQCBwdWJsaWM6CiAKICAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uUGFy
YW1ldGVycygpIGNvbnN0OwogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogI2VuZGlmCiAKQEAgLTg4
NywxMCArODg3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdm9pZCBwYWdlVHJhbnNpdGlvblZpZXdwb3J0
UmVhZHkoKTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKICAgICB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAjZW5kaWYKLQogI2lmIFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmYzJmYzNlLi44MTk2NmQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KQEAgLTc3LDggKzc3LDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgUGFn
ZURpZFJlcXVlc3RTY3JvbGwoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCiAgICAgUGFnZVRyYW5z
aXRpb25WaWV3cG9ydFJlYWR5KCkKICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICAgICBEaWRGaW5kWm9vbWFibGVBcmVhKFdlYkNvcmU6Oklu
dFBvaW50IHRhcmdldCwgV2ViQ29yZTo6SW50UmVjdCBhcmVhKQorI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCiAgICAgQXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVlc3QoV1RGOjpTdHJpbmcgaG9z
dG5hbWUsIFdURjo6U3RyaW5nIHJlYWxtLCBXVEY6OlN0cmluZyBwcmVmaWxsZWRVc2VybmFtZSkg
LT4gKFdURjo6U3RyaW5nIHVzZXJuYW1lLCBXVEY6OlN0cmluZyBwYXNzd29yZCkKICAgICBDZXJ0
aWZpY2F0ZVZlcmlmaWNhdGlvblJlcXVlc3QoV1RGOjpTdHJpbmcgaG9zdG5hbWUpIC0+IChib29s
IGlnbm9yZUVycm9ycykKICAgICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWRSZXF1ZXN0KFdU
Rjo6U3RyaW5nIGhvc3RuYW1lLCB1aW50MTZfdCBwb3J0LCBXVEY6OlN0cmluZyBwcmVmaWxsZWRV
c2VybmFtZSkgLT4gKFdURjo6U3RyaW5nIHVzZXJuYW1lLCBXVEY6OlN0cmluZyBwYXNzd29yZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRXdrR2VzdHVyZUV2ZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRXdrR2VzdHVyZUV2ZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGUyYjk2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuY3BwCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJv
bmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkV3a0dlc3R1cmVFdmVudC5oIgorCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworRXdrR2VzdHVyZUV2ZW50OjpFd2tHZXN0dXJl
RXZlbnQoV0tFdmVudFR5cGUgdHlwZSwgV0tQb2ludCBwb3NpdGlvbiwgV0tQb2ludCBzY3JlZW5Q
b3NpdGlvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXAsIFdL
U2l6ZSBhcmVhLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKKyAgICA6IG1fZXZlbnRUeXBl
KHR5cGUpCisgICAgLCBtX21vZGlmaWVycyhtb2RpZmllcnMpCisgICAgLCBtX3RpbWVzdGFtcCh0
aW1lc3RhbXApCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9zY3JlZW5Qb3Np
dGlvbihzY3JlZW5Qb3NpdGlvbikKKyAgICAsIG1fYXJlYShhcmVhKQorICAgICwgbV9kZWx0YVgo
ZGVsdGFYKQorICAgICwgbV9kZWx0YVkoZGVsdGFZKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRXdrR2VzdHVyZUV2ZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL0V3a0dlc3R1cmVFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQwYmQ4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL0V3a0dlc3R1cmVFdmVudC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFd2tHZXN0dXJlRXZlbnRfaAorI2RlZmluZSBFd2tH
ZXN0dXJlRXZlbnRfaAorCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorCisjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiV0tFdmVudEVmbC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBFd2tHZXN0dXJlRXZlbnQg
OiBwdWJsaWMgQVBJT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQVBJT2JqZWN0
OjpUeXBlIEFQSVR5cGUgPSBUeXBlR2VzdHVyZUV2ZW50OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RXdrR2VzdHVyZUV2ZW50PiBjcmVhdGUoV0tFdmVudFR5cGUgdHlwZSwgV0tQb2ludCBwb3Np
dGlvbiwgV0tQb2ludCBzY3JlZW5Qb3NpdGlvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMs
IGRvdWJsZSB0aW1lc3RhbXAsIFdLU2l6ZSBhcmVhLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRh
WSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXdrR2VzdHVyZUV2ZW50KHR5
cGUsIHBvc2l0aW9uLCBzY3JlZW5Qb3NpdGlvbiwgbW9kaWZpZXJzLCB0aW1lc3RhbXAsIGFyZWEs
IGRlbHRhWCwgZGVsdGFZKSk7CisgICAgfQorCisgICAgV0tFdmVudFR5cGUgZXZlbnRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9ldmVudFR5cGU7IH0KKyAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbW9kaWZpZXJzOyB9CisgICAgZG91YmxlIHRpbWVzdGFt
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CisgICAgV0tQb2ludCBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBXS1BvaW50IHNjcmVlblBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5Qb3NpdGlvbjsgfQorICAgIFdLU2l6ZSBhcmVhKCkg
Y29uc3QgeyByZXR1cm4gbV9hcmVhOyB9CisgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1
cm4gbV9kZWx0YVg7IH0KKyAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJldHVybiBtX2RlbHRh
WTsgfQorCitwcml2YXRlOgorICAgIEV3a0dlc3R1cmVFdmVudChXS0V2ZW50VHlwZSwgV0tQb2lu
dCBwb3NpdGlvbiwgV0tQb2ludCBzY3JlZW5Qb3NpdGlvbiwgV0tFdmVudE1vZGlmaWVycywgZG91
YmxlIHRpbWVzdGFtcCwgV0tTaXplIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsK
KworICAgIHZpcnR1YWwgQVBJT2JqZWN0OjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElU
eXBlOyB9CisKKyAgICBXS0V2ZW50VHlwZSBtX2V2ZW50VHlwZTsKKyAgICBXS0V2ZW50TW9kaWZp
ZXJzIG1fbW9kaWZpZXJzOworICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKKyAgICBXS1BvaW50IG1f
cG9zaXRpb247CisgICAgV0tQb2ludCBtX3NjcmVlblBvc2l0aW9uOworICAgIFdLU2l6ZSBtX2Fy
ZWE7CisgICAgZmxvYXQgbV9kZWx0YVg7CisgICAgZmxvYXQgbV9kZWx0YVk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKwor
I2VuZGlmIC8qIEV3a0dlc3R1cmVFdmVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZs
LmNwcAppbmRleCAyMmE0NWI1Li5jMTZmNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bC5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsOCArMzEsMTAg
QEAKIAogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaCIKIAorI2lu
Y2x1ZGUgIkVhc2luZ0N1cnZlcy5oIgogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJQ
YWdlVmlld3BvcnRDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zv
cm0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQwLDEwICs0MywxMiBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoRXdrVmlldyogdmlldykKICAgICA6IG1fdmlldyh2
aWV3KQogICAgICwgbV9jb250cm9sbGVyKDApCisgICAgLCBtX3RyYW5zaXRpb24obmV3IFRyYW5z
aXRpb24odGhpcykpCiB7CiAgICAgQVNTRVJUKG1fdmlldyk7CiB9CiAKKwogdm9pZCBQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpCiB7CiAgICAgbV92aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsK
QEAgLTgwLDUgKzg1LDgyIEBAIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6
c2V0Q29udHJvbGxlcihQYWdlVmlld3BvcnRDb250cm9sbGVyKiBjb250CiAgICAgbV9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKIH0KIAordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjpUcmFuc2l0aW9uOjpzZXRSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGJhc2VSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9iYXNlUmVjdCA9IGJhc2VSZWN0Owor
ICAgIG1fdGFyZ2V0UmVjdCA9IHRhcmdldFJlY3Q7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudEVmbDo6VHJhbnNpdGlvbjo6c3RhcnQoKQoreworICAgIG1fYW5pbWF0b3Ig
PSBlY29yZV9hbmltYXRvcl9hZGQoYW5pbWF0b3JDYWxsYmFjaywgdGhpcyk7CisgICAgbV9zY2Fs
ZUR1cmF0aW9uID0gMSAvIGVjb3JlX2FuaW1hdG9yX2ZyYW1ldGltZV9nZXQoKSAvIDM7CisgICAg
bV9zY2FsZUluZGV4ID0gMTsKK30KKworRWluYV9Cb29sIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmw6OlRyYW5zaXRpb246OmFuaW1hdG9yQ2FsbGJhY2sodm9pZCogZGF0YSkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VHJhbnNpdGlvbio+KGRhdGEpLT5wcm9jZXNzKCk7Cit9CisK
K2Jvb2wgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6VHJhbnNpdGlvbjo6cHJvY2Vz
cygpCit7CisgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgZmxvYXQgbXVsdGlwbGllciA9IGVhc2VJ
bk91dFF1YWQobV9zY2FsZUluZGV4KyssIDAsIDEuMCwgbV9zY2FsZUR1cmF0aW9uKTsKKyAgICBy
ZWN0LnNldFgobV9iYXNlUmVjdC54KCkgKyAobV90YXJnZXRSZWN0LngoKSAtIG1fYmFzZVJlY3Qu
eCgpKSAqIG11bHRpcGxpZXIpOworICAgIHJlY3Quc2V0WShtX2Jhc2VSZWN0LnkoKSArIChtX3Rh
cmdldFJlY3QueSgpIC0gbV9iYXNlUmVjdC55KCkpICogbXVsdGlwbGllcik7CisgICAgcmVjdC5z
ZXRXaWR0aChtX2Jhc2VSZWN0LndpZHRoKCkgKyAobV90YXJnZXRSZWN0LndpZHRoKCkgLSBtX2Jh
c2VSZWN0LndpZHRoKCkpICogbXVsdGlwbGllcik7CisgICAgcmVjdC5zZXRIZWlnaHQobV9iYXNl
UmVjdC5oZWlnaHQoKSArIChtX3RhcmdldFJlY3QuaGVpZ2h0KCkgLSBtX2Jhc2VSZWN0LmhlaWdo
dCgpKSAqIG11bHRpcGxpZXIpOworCisgICAgbV9jb250cm9sbGVyQ2xpZW50LT5zZXRDb250ZW50
c1JlY3QocmVjdCk7CisKKyAgICBpZiAobV9zY2FsZUluZGV4ID4gbV9zY2FsZUR1cmF0aW9uKSB7
CisgICAgICAgIG1fYW5pbWF0b3IgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6c2NhbGVUb0FyZWFXaXRoQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiB0YXJnZXQsIGNv
bnN0IEZsb2F0UmVjdCYgYXJlYSwgY29uc3QgZmxvYXQgbWFyZ2luKQoreworICAgIEFTU0VSVCht
X2NvbnRyb2xsZXIpOworICAgIGlmICghbV9jb250cm9sbGVyLT5hbGxvd3NVc2VyU2NhbGluZygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXJlYS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gYXJlYTsKKyAgICB0YXJnZXRSZWN0
LmluZmxhdGVYKG1hcmdpbik7CisgICAgV0tTaXplIHZpZXdwb3J0U2l6ZSA9IFdLVmlld0dldFNp
emUobV92aWV3LT53a1ZpZXcoKSk7CisKKyAgICBmbG9hdCB0YXJnZXRTY2FsZTsKKyAgICBpZiAo
c3RkOjphYnMobV9jb250cm9sbGVyLT5taW5pbXVtU2NhbGUoKSAtIG1fY29udHJvbGxlci0+Y3Vy
cmVudFNjYWxlKCkpIDwgMC4wMDAxKQorICAgICAgICB0YXJnZXRTY2FsZSA9IG1fY29udHJvbGxl
ci0+aW5uZXJCb3VuZGVkVmlld3BvcnRTY2FsZSh2aWV3cG9ydFNpemUud2lkdGggLyB0YXJnZXRS
ZWN0LndpZHRoKCkpOworICAgIGVsc2UKKyAgICAgICAgdGFyZ2V0U2NhbGUgPSBtX2NvbnRyb2xs
ZXItPm1pbmltdW1TY2FsZSgpOworCisgICAgRmxvYXRSZWN0IG5ld0NvbnRlbnRzUmVjdCh0YXJn
ZXRSZWN0LmNlbnRlcigpLCBGbG9hdFNpemUodmlld3BvcnRTaXplLndpZHRoIC8gdGFyZ2V0U2Nh
bGUsIHZpZXdwb3J0U2l6ZS5oZWlnaHQgLyB0YXJnZXRTY2FsZSkpOworICAgIGlmICh0YXJnZXRS
ZWN0LmhlaWdodCgpID4gbmV3Q29udGVudHNSZWN0LmhlaWdodCgpKQorICAgICAgICBuZXdDb250
ZW50c1JlY3Quc2V0WSh0YXJnZXQueSgpKTsKKyAgICBuZXdDb250ZW50c1JlY3QubW92ZSgtbmV3
Q29udGVudHNSZWN0LndpZHRoKCkgLyAyLCAtbmV3Q29udGVudHNSZWN0LmhlaWdodCgpIC8gMik7
CisgICAgbmV3Q29udGVudHNSZWN0LnNldExvY2F0aW9uKG1fY29udHJvbGxlci0+Ym91bmRDb250
ZW50c1Bvc2l0aW9uQXRTY2FsZShuZXdDb250ZW50c1JlY3QubG9jYXRpb24oKSwgdGFyZ2V0U2Nh
bGUpKTsKKworICAgIFdLUG9pbnQgY29udGVudHNQb3NpdGlvbiA9IFdLVmlld0dldENvbnRlbnRQ
b3NpdGlvbihtX3ZpZXctPndrVmlldygpKTsKKyAgICBmbG9hdCBjb250ZW50U2NhbGUgPSBXS1Zp
ZXdHZXRDb250ZW50U2NhbGVGYWN0b3IobV92aWV3LT53a1ZpZXcoKSk7CisgICAgRmxvYXRSZWN0
IGN1cnJlbnRDb250ZW50c1JlY3QgPSBGbG9hdFJlY3QoY29udGVudHNQb3NpdGlvbi54LCBjb250
ZW50c1Bvc2l0aW9uLnksIHZpZXdwb3J0U2l6ZS53aWR0aCwgdmlld3BvcnRTaXplLmhlaWdodCk7
CisgICAgY3VycmVudENvbnRlbnRzUmVjdC5zY2FsZSgxIC8gY29udGVudFNjYWxlKTsKKyAgICBt
X3RyYW5zaXRpb24tPnNldFJlY3RzKGN1cnJlbnRDb250ZW50c1JlY3QsIG5ld0NvbnRlbnRzUmVj
dCk7CisgICAgbV90cmFuc2l0aW9uLT5zdGFydCgpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmw6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIGNvbnRl
bnRzUmVjdCkKK3sKKyAgICBXS1NpemUgc2l6ZSA9IFdLVmlld0dldFNpemUobV92aWV3LT53a1Zp
ZXcoKSk7CisgICAgc2V0UGFnZVNjYWxlRmFjdG9yKHNpemUud2lkdGggLyBjb250ZW50c1JlY3Qu
d2lkdGgoKSk7CisgICAgc2V0Vmlld3BvcnRQb3NpdGlvbihjb250ZW50c1JlY3QubG9jYXRpb24o
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKaW5kZXggZTQwNDViNi4u
NWIwNzQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKQEAgLTEsNiArMSw3IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmlj
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjksOSBAQAogI2RlZmluZSBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsX2gKIAogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnQuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2lu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAogY2xhc3MgRXdrVmlldzsKQEAgLTUyLDEyICs1NSw0MSBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihQYWdlVmlld3BvcnRDb250cm9sbGVyKikg
T1ZFUlJJREU7CiAKKyAgICB2b2lkIHNjYWxlVG9BcmVhV2l0aEFuaW1hdGlvbihjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IGZsb2F0IG1h
cmdpbiA9IDApOworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOworCitwcml2YXRlOgorICAgIGNsYXNzIFRyYW5zaXRpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNpdGlvbihQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKiBwYXJl
bnQpCisgICAgICAgICAgICA6IG1fY29udHJvbGxlckNsaWVudChwYXJlbnQpCisgICAgICAgICAg
ICAsIG1fYW5pbWF0b3IoMCkKKyAgICAgICAgICAgICwgbV9zY2FsZUR1cmF0aW9uKDApCisgICAg
ICAgICAgICAsIG1fc2NhbGVJbmRleCgwKQorICAgICAgICB7IH0KKworICAgICAgICB2b2lkIHNl
dFJlY3RzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYmFzZVJlY3QsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgdGFyZ2V0UmVjdCk7CisgICAgICAgIHZvaWQgc3RhcnQoKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHN0YXRpYyBFaW5hX0Jvb2wgYW5pbWF0b3JDYWxsYmFjayh2b2lkKik7
CisgICAgICAgIGJvb2wgcHJvY2VzcygpOworCisgICAgICAgIFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmwqIG1fY29udHJvbGxlckNsaWVudDsKKyAgICAgICAgRWNvcmVfQW5pbWF0b3Iq
IG1fYW5pbWF0b3I7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3RhcmdldFJlY3Q7Cisg
ICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2Jhc2VSZWN0OworICAgICAgICB1bnNpZ25lZCBt
X3NjYWxlRHVyYXRpb247CisgICAgICAgIHVuc2lnbmVkIG1fc2NhbGVJbmRleDsKKyAgICB9Owor
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwo
RXdrVmlldyopOwogCiAgICAgRXdrVmlldyogbV92aWV3OwogICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgbV9jb250ZW50UG9zaXRpb247CiAgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlciogbV9jb250
cm9sbGVyOworICAgIFRyYW5zaXRpb24qIG1fdHJhbnNpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9WaWV3
Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlld0NsaWVudEVm
bC5jcHAKaW5kZXggMGU2NmVhYi4uMTFkZmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9WaWV3Q2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1ZpZXdDbGllbnRFZmwuY3BwCkBAIC0xNTQsNiArMTU0LDIyIEBAIHZvaWQgVmll
d0NsaWVudEVmbDo6ZGlkQ2hhbmdlVG9vbHRpcChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmIHRvb2x0
aXAsIGNvbnN0IHZvaWQqCiAgICAgICAgIHRvRXdrVmlldyhjbGllbnRJbmZvKS0+c21hcnRDYWxs
YmFjazxUb29sdGlwVGV4dFNldD4oKS5jYWxsKFdLRWluYVNoYXJlZFN0cmluZyh0b29sdGlwKSk7
CiB9CiAKK3ZvaWQgVmlld0NsaWVudEVmbDo6ZGlkRmluZFpvb21hYmxlQXJlYShXS1ZpZXdSZWYs
IFdLUG9pbnQgcG9pbnQsIFdLUmVjdCBhcmVhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIHRvRXdrVmlldyhjbGllbnRJbmZvKS0+ZGlkRmluZFpvb21hYmxlQXJlYShwb2ludCwgYXJl
YSk7Cit9CisKK3ZvaWQgVmlld0NsaWVudEVmbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KFdLVmlld1Jl
ZiwgV0tUb3VjaEV2ZW50UmVmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHRvRXdrVmll
dyhjbGllbnRJbmZvKS0+ZG9uZVdpdGhUb3VjaEV2ZW50KGV2ZW50LCB3YXNFdmVudEhhbmRsZWQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTSh3YXNF
dmVudEhhbmRsZWQpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnRJbmZvKTsKKyNlbmRpZgorfQor
CiBWaWV3Q2xpZW50RWZsOjpWaWV3Q2xpZW50RWZsKEV3a1ZpZXcqIHZpZXcpCiAgICAgOiBtX3Zp
ZXcodmlldykKIHsKQEAgLTE2NCw2ICsxODAsNyBAQCBWaWV3Q2xpZW50RWZsOjpWaWV3Q2xpZW50
RWZsKEV3a1ZpZXcqIHZpZXcpCiAgICAgdmlld0NsaWVudC52ZXJzaW9uID0ga1dLVmlld0NsaWVu
dEN1cnJlbnRWZXJzaW9uOwogICAgIHZpZXdDbGllbnQuY2xpZW50SW5mbyA9IHRoaXM7CiAgICAg
dmlld0NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUgPSBkaWRDaGFuZ2VDb250ZW50c1NpemU7
CisgICAgdmlld0NsaWVudC5kaWRGaW5kWm9vbWFibGVBcmVhID0gZGlkRmluZFpvb21hYmxlQXJl
YTsKICAgICB2aWV3Q2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkgPSB2aWV3TmVlZHNEaXNwbGF5Owog
ICAgIHZpZXdDbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQgPSB3ZWJQcm9jZXNzQ3Jhc2hlZDsKICAg
ICB2aWV3Q2xpZW50LndlYlByb2Nlc3NEaWRSZWxhdW5jaCA9IHdlYlByb2Nlc3NEaWRSZWxhdW5j
aDsKQEAgLTE3Miw2ICsxODksNyBAQCBWaWV3Q2xpZW50RWZsOjpWaWV3Q2xpZW50RWZsKEV3a1Zp
ZXcqIHZpZXcpCiAgICAgdmlld0NsaWVudC5kaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uID0gZGlk
Q29tcGxldGVQYWdlVHJhbnNpdGlvbjsKICAgICB2aWV3Q2xpZW50LmRpZENoYW5nZVZpZXdwb3J0
QXR0cmlidXRlcyA9IGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlczsKICAgICB2aWV3Q2xpZW50
LmRpZENoYW5nZVRvb2x0aXAgPSBkaWRDaGFuZ2VUb29sdGlwOworICAgIHZpZXdDbGllbnQuZG9u
ZVdpdGhUb3VjaEV2ZW50ID0gZG9uZVdpdGhUb3VjaEV2ZW50OwogCiAgICAgV0tWaWV3U2V0Vmll
d0NsaWVudChtX3ZpZXctPndrVmlldygpLCAmdmlld0NsaWVudCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpZXdDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5oCmluZGV4IDNmMThiZWEuLjAzZTFiNTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5oCkBAIC01
Niw2ICs1Niw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlkQ29tcGxldGVQYWdlVHJh
bnNpdGlvbihXS1ZpZXdSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogICAgIHN0YXRpYyB2
b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXS1ZpZXdSZWYsIFdLVmlld3BvcnRBdHRy
aWJ1dGVzUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBkaWRD
aGFuZ2VUb29sdGlwKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoV0tWaWV3UmVmLCBXS1Bv
aW50LCBXS1JlY3QsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGRv
bmVXaXRoVG91Y2hFdmVudChXS1ZpZXdSZWYsIFdLVG91Y2hFdmVudFJlZiwgYm9vbCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CiAKICAgICBFd2tWaWV3KiBtX3ZpZXc7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAKaW5kZXggNTY2MGJlMS4uZTM1MDkx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwCkBAIC00
Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkV3a1RvdWNoRXZlbnQuaCIKICNlbmRpZgogCisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIkV3a0dlc3R1cmVFdmVudC5oIgorI2Vu
ZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTEyNCw0ICsxMjgsMTMgQEAgdm9pZCBXZWJWaWV3RWZsOjpzZW5kVG91
Y2hFdmVudChFd2tUb3VjaEV2ZW50KiB0b3VjaEV2ZW50KQogfQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoR0VTVFVSRV9FVkVOVFMpCit2b2lkIFdlYlZpZXdFZmw6OnNlbmRHZXN0dXJlRXZlbnQoY29u
c3QgRXdrR2VzdHVyZUV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIFdl
Ykdlc3R1cmVFdmVudCBnZXN0dXJlKHRvV2ViRXZlbnRUeXBlKGV2ZW50LT5ldmVudFR5cGUoKSks
IHRyYW5zZm9ybUZyb21TY2VuZSgpLm1hcFBvaW50KHRvSW50UG9pbnQoZXZlbnQtPnBvc2l0aW9u
KCkpKSwgdG9JbnRQb2ludChldmVudC0+c2NyZWVuUG9zaXRpb24oKSksIHRvV2ViRXZlbnRNb2Rp
ZmllcnMoZXZlbnQtPm1vZGlmaWVycygpKSwgZXZlbnQtPnRpbWVzdGFtcCgpLCB0b0ludFNpemUo
ZXZlbnQtPmFyZWEoKSksIEZsb2F0UG9pbnQoZXZlbnQtPmRlbHRhWCgpLCBldmVudC0+ZGVsdGFZ
KCkpKTsKKyAgICBtX3BhZ2UtPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3RWZsLmgKaW5kZXggZDcxNzIzNC4uZTYzYjM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3RWZsLmgKQEAgLTQ4LDYgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNlbmRUb3VjaEV2ZW50KEV3a1RvdWNoRXZlbnQqKTsKICNlbmRpZgogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorICAgIHZvaWQgc2VuZEdlc3R1cmVFdmVudChjb25zdCBFd2tHZXN0
dXJlRXZlbnQqKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlZpZXdFZmwoV2ViQ29udGV4
dCosIFdlYlBhZ2VHcm91cCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dl
YlBhZ2VQcm94eVF0LmNwcAppbmRleCA0ZjI2ZDY1Li5hODk3ODI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKQEAgLTg2LDE5ICs4Niw2IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShjb25zdCBRUXVp
Y2tOZXR3b3JrUmVwbHkqIHJlcGx5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IEludFBvaW50JiB0YXJnZXQsIGNvbnN0IEludFJlY3Qm
IGFyZWEpCi17Ci0gICAgbV9wYWdlQ2xpZW50LT5kaWRGaW5kWm9vbWFibGVBcmVhKHRhcmdldCwg
YXJlYSk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBJbnRTaXplJiBhcmVhKQotewotICAgIGlmICgh
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkZpbmRab29tYWJsZUFyZWFGb3JQb2ludChwb2ludCwgYXJlYSksIG1fcGFn
ZUlEKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmF1dGhlbnRpY2F0aW9uUmVxdWlyZWRSZXF1
ZXN0KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGNvbnN0IFN0
cmluZyYgcHJlZmlsbGVkVXNlcm5hbWUsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dv
cmQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LT5oYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVx
dWVzdChob3N0bmFtZSwgcmVhbG0sIHByZWZpbGxlZFVzZXJuYW1lLCB1c2VybmFtZSwgcGFzc3dv
cmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvV2ViUGFnZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViUGFnZUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJj
NTAwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJQYWdlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ft
c3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKworI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1F
TlQpCit2b2lkIFdlYlBhZ2U6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIGNvbnN0IEludFNpemUmIGFyZWEpCit7CisgICAgTm9kZSogbm9kZSA9IDA7Cisg
ICAgSW50UmVjdCB6b29tYWJsZUFyZWE7CisgICAgYm9vbCBmb3VuZEFyZWFGb3JUb3VjaFBvaW50
ID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YmVzdFpvb21hYmxl
QXJlYUZvclRvdWNoUG9pbnQocG9pbnQsIEludFNpemUoYXJlYS53aWR0aCgpIC8gMiwgYXJlYS5o
ZWlnaHQoKSAvIDIpLCB6b29tYWJsZUFyZWEsIG5vZGUpOworCisgICAgaWYgKCFmb3VuZEFyZWFG
b3JUb3VjaFBvaW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobm9kZSk7CisKKyAg
ICBpZiAobm9kZS0+ZG9jdW1lbnQoKSAmJiBub2RlLT5kb2N1bWVudCgpLT52aWV3KCkpCisgICAg
ICAgIHpvb21hYmxlQXJlYSA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyh6b29tYWJsZUFyZWEpOworCisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRGaW5kWm9vbWFibGVBcmVhKHBvaW50LCB6b29tYWJsZUFyZWEpKTsKK30KKworI2Vsc2UKK3Zv
aWQgV2ViUGFnZTo6ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJlYSk7CisgICAg
RnJhbWUqIG1haW5mcmFtZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKKyAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRB
dFBvaW50KG1haW5mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KSwgSGl0VGVz
dFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1
ZXN0OjpJZ25vcmVDbGlwcGluZyB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRl
bnQpOworCisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCB6b29tYWJsZUFyZWEgPSBub2Rl
LT5waXhlbFNuYXBwZWRCb3VuZGluZ0JveCgpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgYm9vbCBmb3VuZCA9ICFub2RlLT5pc1RleHROb2RlKCkgJiYgIW5vZGUtPmlzU2hhZG93Um9v
dCgpOworCisgICAgICAgIC8vIE5vIGNhbmRpZGF0ZSBmb3VuZCwgYmFpbCBvdXQuCisgICAgICAg
IGlmICghZm91bmQgJiYgIW5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAvLyBDYW5kaWRhdGUgZm91bmQsIGFuZCBpdCBpcyBhIGJldHRlciBjYW5kaWRh
dGUgdGhhbiBpdHMgcGFyZW50LgorICAgICAgICAvLyBOQjogQSBwYXJlbnQgaXMgY29uc2lkZXJl
ZCBhIGJldHRlciBjYW5kaWRhdGUgaWZmIHRoZSBub2RlIGlzCisgICAgICAgIC8vIGNvbnRhaW5l
ZCBieSBpdCBhbmQgaXQgaXMgdGhlIG9ubHkgY2hpbGQuCisgICAgICAgIGlmIChmb3VuZCAmJiAo
IW5vZGUtPnBhcmVudE5vZGUoKSB8fCBub2RlLT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZUNvdW50
KCkgIT0gMSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOworICAgICAgICB6b29tYWJsZUFyZWEudW5pdGUobm9kZS0+cGl4ZWxTbmFwcGVk
Qm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmRvY3VtZW50KCkgJiYgbm9k
ZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT52aWV3
KCkpIHsKKyAgICAgICAgY29uc3QgU2Nyb2xsVmlldyogdmlldyA9IG5vZGUtPmRvY3VtZW50KCkt
PmZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgem9vbWFibGVBcmVhID0gdmlldy0+Y29udGVudHNU
b1dpbmRvdyh6b29tYWJsZUFyZWEpOworICAgIH0KKworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkRmluZFpvb21hYmxlQXJlYShwb2ludCwgem9vbWFibGVBcmVhKSk7Cit9Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKaW5kZXggYTkwNDE1Yy4uYWY1OTE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzE4Nyw2NiArMzE4Nyw2IEBAIEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0KiBXZWJQYWdlOjpiYWNrRm9yd2FyZExpc3QoKQogICAgIHJl
dHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsKIH0KIAotI2lmIFBMQVRGT1JNKFFUKQotI2lm
IEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQotdm9pZCBXZWJQYWdlOjpmaW5kWm9vbWFibGVBcmVh
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBhcmVhKQotewotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIEludFJlY3Qgem9vbWFi
bGVBcmVhOwotICAgIGJvb2wgZm91bmRBcmVhRm9yVG91Y2hQb2ludCA9IG1fbWFpbkZyYW1lLT5j
b3JlRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50
KHBvaW50LCBJbnRTaXplKGFyZWEud2lkdGgoKSAvIDIsIGFyZWEuaGVpZ2h0KCkgLyAyKSwgem9v
bWFibGVBcmVhLCBub2RlKTsKLQotICAgIGlmICghZm91bmRBcmVhRm9yVG91Y2hQb2ludCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKG5vZGUtPmRvY3Vt
ZW50KCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpKQotICAgICAgICB6b29tYWJsZUFyZWEg
PSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coem9vbWFibGVBcmVh
KTsKLQotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFpvb21hYmxlQXJl
YShwb2ludCwgem9vbWFibGVBcmVhKSk7Ci19Ci0KLSNlbHNlCi12b2lkIFdlYlBhZ2U6OmZpbmRa
b29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGFyZWEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGFyZWEpOwotICAg
IEZyYW1lKiBtYWluZnJhbWUgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCk7Ci0gICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0
QXRQb2ludChtYWluZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCksIEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVx
dWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250
ZW50KTsKLQotICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0KLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3Qgem9vbWFibGVBcmVhID0gbm9k
ZS0+Z2V0UmVjdCgpOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9
ICFub2RlLT5pc1RleHROb2RlKCkgJiYgIW5vZGUtPmlzU2hhZG93Um9vdCgpOwotCi0gICAgICAg
IC8vIE5vIGNhbmRpZGF0ZSBmb3VuZCwgYmFpbCBvdXQuCi0gICAgICAgIGlmICghZm91bmQgJiYg
IW5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBD
YW5kaWRhdGUgZm91bmQsIGFuZCBpdCBpcyBhIGJldHRlciBjYW5kaWRhdGUgdGhhbiBpdHMgcGFy
ZW50LgotICAgICAgICAvLyBOQjogQSBwYXJlbnQgaXMgY29uc2lkZXJlZCBhIGJldHRlciBjYW5k
aWRhdGUgaWZmIHRoZSBub2RlIGlzCi0gICAgICAgIC8vIGNvbnRhaW5lZCBieSBpdCBhbmQgaXQg
aXMgdGhlIG9ubHkgY2hpbGQuCi0gICAgICAgIGlmIChmb3VuZCAmJiAoIW5vZGUtPnBhcmVudE5v
ZGUoKSB8fCBub2RlLT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZUNvdW50KCkgIT0gMSkpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAg
ICAgICB6b29tYWJsZUFyZWEudW5pdGUobm9kZS0+Z2V0UmVjdCgpKTsKLSAgICB9Ci0KLSAgICBp
ZiAobm9kZS0+ZG9jdW1lbnQoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpICYmIG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKSkgewotICAgICAgICBjb25zdCBTY3JvbGxWaWV3
KiB2aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dmlldygpOwotICAgICAgICB6b29t
YWJsZUFyZWEgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KHpvb21hYmxlQXJlYSk7Ci0gICAgfQot
Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kWm9vbWFibGVBcmVhKHBv
aW50LCB6b29tYWJsZUFyZWEpKTsKLX0KLSNlbmRpZgotI2VuZGlmCi0KIFdlYlBhZ2U6OlNhbmRi
b3hFeHRlbnNpb25UcmFja2VyOjp+U2FuZGJveEV4dGVuc2lvblRyYWNrZXIoKQogewogICAgIGlu
dmFsaWRhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CmluZGV4IGVmNTlmZjkuLmFiZWVkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzk3LDcgKzc5Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBo
aWRlRmluZFVJKCk7CiAgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwg
dWludDMyX3QgZmluZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpOwogCi0jaWYgUExB
VEZPUk0oUVQpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZvaWQgZmluZFpv
b21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgYXJlYSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA0OWQzYzQwLi44YTZi
NTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgpAQCAtMjk3LDcgKzI5Nyw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ug
TGVnYWN5UmVjZWl2ZXIgewogICAgIFNldENvbXBvc2l0aW9uKFdURjo6U3RyaW5nIGNvbXBvc2l0
aW9uU3RyaW5nLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcywgdWludDY0X3QgY3Vyc29yUG9zaXRpb24pCiAgICAgQ2FuY2VsQ29tcG9zaXRpb24o
KQogI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQogICAgIEZpbmRab29tYWJsZUFyZWFGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
V2ViQ29yZTo6SW50U2l6ZSBhcmVhKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXgg
NWFkYjU0OS4uMGFhNzBhOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTI4MCwzICsyODAsNyBA
QCBpZiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAgc2V0KFdURl9VU0VfTEVWRUxEQiAx
KQogICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfTEVWRUxEQj0xKQogZW5kaWYgKCkKKwor
aWYgKEVOQUJMRV9XRUJLSVQyIEFORCBXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAg
YWRkX2RlZmluaXRpb25zKC1ERU5BQkxFX0dFU1RVUkVfRVZFTlRTPTEpCitlbmRpZiAoKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2VmbC9tYWluLmMKaW5kZXggMDNmOWNmOC4uNzZlOGZlODMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwpA
QCAtMTgyNiw2ICsxODI2LDEwIEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0
ZShFdmFzX09iamVjdCAqb3BlbmVyLCBjb25zdCBjaGFyICp1cmwsIGludCB3CiAgICAgZXdrX3Zp
ZXdfc291cmNlX21vZGVfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIHZpZXdfbW9kZSk7CiAgICAgZXdr
X3ZpZXdfdXNlcl9hZ2VudF9zZXQod2luZG93LT5ld2tfdmlldywgdXNlcl9hZ2VudF9zdHJpbmcp
OwogCisgICAgLy8gZXVubWkKKyAgICBld2tfdmlld190b3VjaF9ldmVudHNfZW5hYmxlZF9zZXQo
d2luZG93LT5ld2tfdmlldywgRUlOQV9UUlVFKTsKKyAgICBld2tfdmlld19tb3VzZV9ldmVudHNf
ZW5hYmxlZF9zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7CisKICAgICAvKiBTZXQg
dGhlIHpvb20gbGV2ZWwgdG8gZGVmYXVsdCAqLwogICAgIHdpbmRvdy0+Y3VycmVudF96b29tX2xl
dmVsID0gREVGQVVMVF9aT09NX0xFVkVMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207644</attachid>
            <date>2013-07-29 06:02:10 -0700</date>
            <delta_ts>2013-08-09 01:48:36 -0700</delta_ts>
            <desc>patch for testing gestures - 20130729</desc>
            <filename>all_gestures_for_test_20130729.patch</filename>
            <type>text/plain</type>
            <size>57503</size>
            <attacher name="Eunmi Lee">enmi.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZGJiNzY2Yi4uMDQzYjNmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTYxLDkgKzYxLDExIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLQ29va2llTWFuYWdlclNvdXAuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIuY3BwCiAKKyAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9FYXNpbmdDdXJ2ZXMuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9FdmFzR0xDb250ZXh0LmNwcAog
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V2YXNHTFN1cmZhY2UuY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvU25hcHNo
b3RJbWFnZUdMLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19hdXRoX3JlcXVlc3QuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApAQCAtMTA1
LDYgKzEwNyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9l
ZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9Db250ZXh0
TWVudUNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5j
cHAKKyAgICBVSVByb2Nlc3MvZWZsL0V3a0dlc3R1cmVFdmVudC5jcHAKICAgICBVSVByb2Nlc3Mv
ZWZsL0V3a1RvdWNoRXZlbnQuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9Fd2tUb3VjaFBvaW50LmNw
cAogICAgIFVJUHJvY2Vzcy9lZmwvRmluZENsaWVudEVmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9lZmwvV0tCYXNlRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvZWZsL1dLQmFzZUVmbC5oCmluZGV4IDljMDdmOGUwLi5lN2RjNTZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZWZsL1dLQmFzZUVmbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9lZmwvV0tCYXNlRWZsLmgKQEAgLTI5LDUgKzI5
LDYgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQb3B1cEl0ZW0qIFdLUG9wdXBJdGVt
UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQb3B1cE1lbnVMaXN0ZW5lciogV0tQ
b3B1cE1lbnVMaXN0ZW5lclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLVG91Y2hQ
b2ludCogV0tUb3VjaFBvaW50UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tUb3Vj
aEV2ZW50KiBXS1RvdWNoRXZlbnRSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0dl
c3R1cmVFdmVudCogV0tHZXN0dXJlRXZlbnRSZWY7CiAKICNlbmRpZiAvKiBXS0Jhc2VFZmxfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCmluZGV4IDQ0MWUwNWUuLjQyNTliY2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgKQEAgLTE0MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIFR5cGVUb3VjaFBvaW50LAogICAgICAgICBUeXBlVG91Y2hFdmVudCwKICNlbmRpZgorI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICAgICAgVHlwZUdlc3R1cmVFdmVudCwKKyNlbmRp
ZgogI2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2Vm
bC9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9XZWJFdmVu
dEZhY3RvcnkuY3BwCmluZGV4IDdmNWIzZWUuLjA5N2VlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTIyOSwzOSArMjI5LDYgQEAgc3Rh
dGljIGlubGluZSBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUG9pbnRTdGF0ZSB0b1dlYlBs
YXRmb3JtVG91Y2hQb2ludFN0YXQKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6
OlR5cGUgdG9XZWJFdmVudFR5cGUoV0tFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoU3RhcnQ6Ci0gICAgICAgIHJldHVybiBX
ZWJFdmVudDo6VG91Y2hTdGFydDsKLSAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoTW92ZToKLSAg
ICAgICAgcmV0dXJuIFdlYkV2ZW50OjpUb3VjaE1vdmU7Ci0gICAgY2FzZSBrV0tFdmVudFR5cGVU
b3VjaEVuZDoKLSAgICAgICAgcmV0dXJuIFdlYkV2ZW50OjpUb3VjaEVuZDsKLSAgICBjYXNlIGtX
S0V2ZW50VHlwZVRvdWNoQ2FuY2VsOgotICAgICAgICByZXR1cm4gV2ViRXZlbnQ6OlRvdWNoQ2Fu
Y2VsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBXZWJFdmVudDo6Tm9UeXBlOwotICAg
IH0KLQotfQotCi1zdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpNb2RpZmllcnMgdG9XZWJFdmVudE1v
ZGlmaWVycyh1bnNpZ25lZCBtb2RpZmllcnMpCi17Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gMDsK
LQotICAgIGlmIChtb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5KQotICAgICAg
ICByZXN1bHQgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OwotICAgIGlmIChtb2RpZmllcnMgJiBrV0tF
dmVudE1vZGlmaWVyc0NvbnRyb2xLZXkpCi0gICAgICAgIHJlc3VsdCB8PSBXZWJFdmVudDo6Q29u
dHJvbEtleTsKLSAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNBbHRLZXkpCi0g
ICAgICAgIHJlc3VsdCB8PSBXZWJFdmVudDo6QWx0S2V5OwotICAgIGlmIChtb2RpZmllcnMgJiBr
V0tFdmVudE1vZGlmaWVyc01ldGFLZXkpCi0gICAgICAgIHJlc3VsdCB8PSBXZWJFdmVudDo6TWV0
YUtleTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihyZXN1
bHQpOwotfQotCiBXZWJUb3VjaEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViVG91Y2hF
dmVudChjb25zdCBFd2tUb3VjaEV2ZW50KiBldmVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
b1dlYkNvbnRlbnQpCiB7CiAgICAgSW1tdXRhYmxlQXJyYXkqIHRvdWNoUG9pbnRzQXJyYXkgPSB0
b0ltcGwoZXZlbnQtPnRvdWNoUG9pbnRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKaW5kZXggODdjNWY1ZS4uNjg1MWNmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5o
CkBAIC01MCw2ICs1MCwxMiBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tUb3VjaEV2ZW50UmVmLCBF
d2tUb3VjaEV2ZW50KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVG91Y2hQb2ludFJlZiwgRXdrVG91
Y2hQb2ludCkKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgRXdr
R2VzdHVyZUV2ZW50OworCitXS19BRERfQVBJX01BUFBJTkcoV0tHZXN0dXJlRXZlbnRSZWYsIEV3
a0dlc3R1cmVFdmVudCkKKyNlbmRpZgorCiAvLyBFbnVtIGNvbnZlcnNpb25zLgogaW5saW5lIFdL
UG9wdXBJdGVtVGV4dERpcmVjdGlvbiB0b0FQSShXZWJDb3JlOjpUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbikKIHsKQEAgLTEwNCw2ICsxMTAsNDQgQEAgaW5saW5lIFdLVG91Y2hQb2ludFN0YXRlIHRv
QVBJKFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQb2ludFN0YXRlIHN0YXRlKQogfQogI2Vu
ZGlmCiAKK2lubGluZSBXZWJFdmVudDo6VHlwZSB0b1dlYkV2ZW50VHlwZShXS0V2ZW50VHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisg
ICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaFN0YXJ0OgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6
OlRvdWNoU3RhcnQ7CisgICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaE1vdmU6CisgICAgICAgIHJl
dHVybiBXZWJFdmVudDo6VG91Y2hNb3ZlOworICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hFbmQ6
CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6VG91Y2hFbmQ7CisgICAgY2FzZSBrV0tFdmVudFR5
cGVUb3VjaENhbmNlbDoKKyAgICAgICAgcmV0dXJuIFdlYkV2ZW50OjpUb3VjaENhbmNlbDsKKyNl
bmRpZgorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBjYXNlIGtXS0V2ZW50VHlwZUdl
c3R1cmVTaW5nbGVUYXA6CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6R2VzdHVyZVNpbmdsZVRh
cDsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6Tm9UeXBl
OworICAgIH0KK30KKworaW5saW5lIFdlYkV2ZW50OjpNb2RpZmllcnMgdG9XZWJFdmVudE1vZGlm
aWVycyh1bnNpZ25lZCBtb2RpZmllcnMpCit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKwor
ICAgIGlmIChtb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5KQorICAgICAgICBy
ZXN1bHQgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChtb2RpZmllcnMgJiBrV0tFdmVu
dE1vZGlmaWVyc0NvbnRyb2xLZXkpCisgICAgICAgIHJlc3VsdCB8PSBXZWJFdmVudDo6Q29udHJv
bEtleTsKKyAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNBbHRLZXkpCisgICAg
ICAgIHJlc3VsdCB8PSBXZWJFdmVudDo6QWx0S2V5OworICAgIGlmIChtb2RpZmllcnMgJiBrV0tF
dmVudE1vZGlmaWVyc01ldGFLZXkpCisgICAgICAgIHJlc3VsdCB8PSBXZWJFdmVudDo6TWV0YUtl
eTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihyZXN1bHQp
OworfQorCiB9CiAKICNlbmRpZiAvLyBXS0FQSUNhc3RFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0V2ZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5jcHAKaW5kZXggODQzYWViMC4uZTk3
MDI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0V2
ZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLRXZl
bnRFZmwuY3BwCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2lu
Y2x1ZGUgIldlYkV2ZW50LmgiCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisjaW5jbHVk
ZSAiRXdrR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAogV0tUb3VjaFBvaW50UmVmIFdLVG91Y2hQb2ludENyZWF0ZShpbnQgaWQsIFdLUG9pbnQgcG9z
aXRpb24sIFdLUG9pbnQgc2NyZWVuUG9zaXRpb24sIFdLVG91Y2hQb2ludFN0YXRlIHN0YXRlLCBX
S1NpemUgcmFkaXVzLCBmbG9hdCByb3RhdGlvbkFuZ2xlLCBmbG9hdCBmb3JjZUZhY3RvcikKQEAg
LTE3MiwzICsxNzYsMjAgQEAgZmxvYXQgV0tUb3VjaFBvaW50R2V0Rm9yY2VGYWN0b3IoV0tUb3Vj
aFBvaW50UmVmIHBvaW50KQogICAgIHJldHVybiAwOwogI2VuZGlmCiB9CisKK1dLR2VzdHVyZUV2
ZW50UmVmIFdLR2VzdHVyZUV2ZW50Q3JlYXRlKFdLRXZlbnRUeXBlIHR5cGUsIFdLUG9pbnQgcG9z
aXRpb24sIFdLUG9pbnQgc2NyZWVuUG9zaXRpb24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJz
LCBkb3VibGUgdGltZXN0YW1wLCBXS1NpemUgYXJlYSwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0
YVkpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHJldHVybiB0b0FQSShFd2tH
ZXN0dXJlRXZlbnQ6OmNyZWF0ZSh0eXBlLCBwb3NpdGlvbiwgc2NyZWVuUG9zaXRpb24sIG1vZGlm
aWVycywgdGltZXN0YW1wLCBhcmVhLCBkZWx0YVgsIGRlbHRhWSkubGVha1JlZigpKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShwb3NpdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKHNjcmVlblBvc2l0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0obW9kaWZp
ZXJzKTsKKyAgICBVTlVTRURfUEFSQU0odGltZXN0YW1wKTsKKyAgICBVTlVTRURfUEFSQU0oYXJl
YSk7CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWCk7CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWSk7
CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS0V2ZW50RWZsLmgKaW5kZXggYjU0MzkyMS4uOWU3NTMxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0V2ZW50RWZsLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0V2ZW50RWZsLmgKQEAgLTM5LDcg
KzM5LDggQEAgZW51bSBXS0V2ZW50VHlwZSB7CiAgICAga1dLRXZlbnRUeXBlVG91Y2hTdGFydCwK
ICAgICBrV0tFdmVudFR5cGVUb3VjaE1vdmUsCiAgICAga1dLRXZlbnRUeXBlVG91Y2hFbmQsCi0g
ICAga1dLRXZlbnRUeXBlVG91Y2hDYW5jZWwKKyAgICBrV0tFdmVudFR5cGVUb3VjaENhbmNlbCwK
KyAgICBrV0tFdmVudFR5cGVHZXN0dXJlU2luZ2xlVGFwCiB9OwogdHlwZWRlZiBlbnVtIFdLRXZl
bnRUeXBlIFdLRXZlbnRUeXBlOwogCkBAIC02OCw2ICs2OSw4IEBAIFdLX0VYUE9SVCBXS1NpemUg
V0tUb3VjaFBvaW50R2V0UmFkaXVzKFdLVG91Y2hQb2ludFJlZik7CiBXS19FWFBPUlQgZmxvYXQg
V0tUb3VjaFBvaW50R2V0Um90YXRpb25BbmdsZShXS1RvdWNoUG9pbnRSZWYpOwogV0tfRVhQT1JU
IGZsb2F0IFdLVG91Y2hQb2ludEdldEZvcmNlRmFjdG9yKFdLVG91Y2hQb2ludFJlZik7CiAKK1dL
X0VYUE9SVCBXS0dlc3R1cmVFdmVudFJlZiBXS0dlc3R1cmVFdmVudENyZWF0ZShXS0V2ZW50VHlw
ZSwgV0tQb2ludCBwb3NpdGlvbiwgV0tQb2ludCBzY3JlZW5Qb3NpdGlvbiwgV0tFdmVudE1vZGlm
aWVycywgZG91YmxlIHRpbWVzdGFtcCwgV0tTaXplIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQg
ZGVsdGFZKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcAppbmRleCBjZWZhMmQzLi5j
ZTg2ZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dL
Vmlld0VmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXdFZmwuY3BwCkBAIC01OCwzICs1OCwxMyBAQCB2b2lkIFdLVmlld1NlbmRUb3VjaEV2ZW50KFdL
Vmlld1JlZiB2aWV3UmVmLCBXS1RvdWNoRXZlbnRSZWYgdG91Y2hFdmVudFJlZikKICAgICBVTlVT
RURfUEFSQU0odG91Y2hFdmVudFJlZik7CiAjZW5kaWYKIH0KKwordm9pZCBXS1ZpZXdTZW5kR2Vz
dHVyZUV2ZW50KFdLVmlld1JlZiB2aWV3UmVmLCBXS0dlc3R1cmVFdmVudFJlZiBnZXN0dXJlRXZl
bnRSZWYpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHN0YXRpY19jYXN0PFdl
YlZpZXdFZmwqPih0b0ltcGwodmlld1JlZikpLT5zZW5kR2VzdHVyZUV2ZW50KHRvSW1wbChnZXN0
dXJlRXZlbnRSZWYpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZpZXdSZWYpOworICAgIFVO
VVNFRF9QQVJBTShnZXN0dXJlRXZlbnRSZWYpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXdFZmwuaAppbmRleCBkOGFmZGM0Li42ZjcyODJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0Vm
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmgK
QEAgLTQyLDYgKzQyLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmll
d1JlZiwgV0tTdHJpbmdSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZW5kVG91Y2hFdmVu
dChXS1ZpZXdSZWYsIFdLVG91Y2hFdmVudFJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Nl
bmRHZXN0dXJlRXZlbnQoV0tWaWV3UmVmLCBXS0dlc3R1cmVFdmVudFJlZik7CisKICNpZmRlZiBf
X2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9FYXNpbmdDdXJ2ZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRWFzaW5nQ3VydmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mNmNjZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRWFzaW5nQ3VydmVzLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAxIFJvYmVydCBQZW5uZXIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMg
b2YgY29udHJpYnV0b3JzIG1heSBiZQorICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMiQVMgSVMiCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
CisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUm9iZXJ0IFBl
bm5lcidzIGVhc2luZyBlcXVhdGlvbnMuIGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNp
bmcvCisgKiBzdGF0aWMgZnVuY3Rpb24gZWFzZUluT3V0UXVhZCAodDpOdW1iZXIsIGI6TnVtYmVy
LCBjOk51bWJlciwgZDpOdW1iZXIpOk51bWJlciB7CisgKiAgICAgaWYgKCh0Lz1kLzIpIDwgMSkg
cmV0dXJuIGMvMip0KnQgKyBiOworICogICAgIHJldHVybiAtYy8yICogKCgtLXQpKih0LTIpIC0g
MSkgKyBiOworICogfQorICovCitmbG9hdCBlYXNlSW5PdXRRdWFkKGZsb2F0IHRpbWUsIGNvbnN0
IGZsb2F0IGJhc2UsIGNvbnN0IGZsb2F0IGNvbnN0YW50LCBjb25zdCB1bnNpZ25lZCBkdXJhdGlv
bikKK3sKKyAgICBpZiAodGltZSA+IGR1cmF0aW9uIHx8IHRpbWUgPCAwKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmICgodGltZSAvPSAoZHVyYXRpb24gLyAyKSkgPCAxKQorICAgICAgICBy
ZXR1cm4gKGNvbnN0YW50IC8gMikgKiB0aW1lICogdGltZSArIGJhc2U7CisKKyAgICB0aW1lIC09
IDE7CisgICAgcmV0dXJuIC0xICogKGNvbnN0YW50IC8gMikgKiAodGltZSAqICh0aW1lIC0gMikg
LSAxKSArIGJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FYXNpbmdDdXJ2ZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0Vh
c2luZ0N1cnZlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjZjNmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FYXNp
bmdDdXJ2ZXMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJv
YmVydCBQZW5uZXIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0
b3JzIG1heSBiZQorICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMiQVMgSVMiCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVhc2luZ0N1cnZlc19oCisjZGVm
aW5lIEVhc2luZ0N1cnZlc19oCisKK2Zsb2F0IGVhc2VJbk91dFF1YWQoZmxvYXQgdGltZSwgY29u
c3QgZmxvYXQgYmFzZSwgY29uc3QgZmxvYXQgY29uc3RhbnQsIGNvbnN0IHVuc2lnbmVkIGR1cmF0
aW9uKTsKKworI2VuZGlmIC8vIEVhc2luZ0N1cnZlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDQ1N2M4NjEuLmZmYTY5MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC04Nyw2ICs4Nywx
MCBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyNpbmNsdWRlICJFYXNpbmdDdXJ2ZXMuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKQEAgLTI3Niw2ICsyODAsMTAgQEAgRXdr
Vmlldzo6RXdrVmlldyhXS1ZpZXdSZWYgdmlldywgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCiAg
ICAgLCBtX21vdXNlRXZlbnRzRW5hYmxlZChmYWxzZSkKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgICwgbV90b3VjaEV2ZW50c0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2dlc3R1cmVSZWNv
Z25pemVyKEdlc3R1cmVSZWNvZ25pemVyOjpjcmVhdGUodGhpcykpCisgICAgLCBtX2ZsaWNrQW5p
bWF0b3IoMCkKKyAgICAsIG1fZmxpY2tEdXJhdGlvbigwKQorICAgICwgbV9mbGlja0luZGV4KDAp
CiAjZW5kaWYKICAgICAsIG1fZGlzcGxheVRpbWVyKHRoaXMsICZFd2tWaWV3OjpkaXNwbGF5VGlt
ZXJGaXJlZCkKICAgICAsIG1faW5wdXRNZXRob2RDb250ZXh0KElucHV0TWV0aG9kQ29udGV4dEVm
bDo6Y3JlYXRlKHRoaXMsIHNtYXJ0RGF0YSgpLT5iYXNlLmV2YXMpKQpAQCAtNzkzLDkgKzgwMSwx
NCBAQCB2b2lkIEV3a1ZpZXc6OnNldFRvdWNoRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiAg
ICAgfQogfQogCi12b2lkIEV3a1ZpZXc6OmRvbmVXaXRoVG91Y2hFdmVudChXS1RvdWNoRXZlbnRS
ZWYsIGJvb2wgLyogd2FzRXZlbnRIYW5kbGVkICovKQordm9pZCBFd2tWaWV3Ojpkb25lV2l0aFRv
dWNoRXZlbnQoV0tUb3VjaEV2ZW50UmVmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICh3YXNFdmVudEhhbmRsZWQpIHsKKyAgICAg
ICAgbV9nZXN0dXJlUmVjb2duaXplci0+cmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2ZW50KGV2ZW50KTsKIH0K
ICNlbmRpZgogCkBAIC0xMzgzLDkgKzEzOTYsMTE3IEBAIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogCiB2b2lkIEV3a1ZpZXc6OmRpZEZpbmRab29t
YWJsZUFyZWEoY29uc3QgV0tQb2ludCYgcG9pbnQsIGNvbnN0IFdLUmVjdCYgYXJlYSkKIHsKKyAg
ICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQtPnNjYWxlVG9BcmVhV2l0aEFuaW1hdGlv
bih0b0ludFBvaW50KHBvaW50KSwgdG9JbnRSZWN0KGFyZWEpKTsKK30KKworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisvLyBHZXN0dXJlUmVjb2duaXplckNsaWVudCBmdW5jdGlvbnMuCit2b2lk
IEV3a1ZpZXc6OmhhbmRsZVNpbmdsZVRhcChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7Cisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIFdLVmlld1NlbmRHZXN0dXJlRXZlbnQod2tW
aWV3KCksIGFkb3B0V0soV0tHZXN0dXJlRXZlbnRDcmVhdGUoa1dLRXZlbnRUeXBlR2VzdHVyZVNp
bmdsZVRhcCwgdG9BUEkocG9zaXRpb24pLCB0b0FQSSh0cmFuc2Zvcm1Ub1NjcmVlbigpLm1hcFBv
aW50KHBvc2l0aW9uKSksIDAsIGVjb3JlX3RpbWVfZ2V0KCksIFdLU2l6ZU1ha2UoMCwgMCksIDAs
IDApKS5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwb3NpdGlvbik7CisjZW5kaWYK
K30KKwordm9pZCBFd2tWaWV3OjpoYW5kbGVEb3VibGVUYXAoY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQoreworICAgIC8vIEZJWE1FOiBXZSBoYXZlIHRvIHNldCBtZWFuaW5nZnVsIHNpemUgb2Yg
dG91Y2ggaW5zdGVhZCBvZiAiMSwgMSIuCisgICAgV0tWaWV3RmluZFpvb21hYmxlQXJlYUZvclJl
Y3Qod2tWaWV3KCksIFdLUmVjdE1ha2UocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIDEsIDEp
KTsKK30KKwordm9pZCBFd2tWaWV3OjpoYW5kbGVUYXBBbmRIb2xkKGNvbnN0IEludFBvaW50JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV3a1ZpZXc6OmhhbmRsZVBhblN0
YXJ0ZWQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIG1fbGFzdFBvaW50ID0gcG9pbnQ7
Cit9CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxlUGFuKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sK
KyAgICBpZiAobV9sYXN0UG9pbnQgPT0gcG9pbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHNj
cm9sbEJ5KG1fbGFzdFBvaW50IC0gcG9pbnQpOworICAgIG1fbGFzdFBvaW50ID0gcG9pbnQ7Cit9
CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxlUGFuRmluaXNoZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpmbGlja0FuaW1hdG9yQ2FsbGJhY2sodm9p
ZCogZGF0YSkKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gc3RhdGljX2Nhc3Q8RXdrVmlldyo+
KGRhdGEpOworICAgIGZsb2F0IG11bHRpcGxpZXIgPSBlYXNlSW5PdXRRdWFkKGV3a1ZpZXctPm1f
ZmxpY2tJbmRleCwgMCwgMS4wLCBld2tWaWV3LT5tX2ZsaWNrRHVyYXRpb24pOworICAgIGZsb2F0
IG9mZnNldFdpZHRoID0gZXdrVmlldy0+bV9mbGlja09mZnNldC53aWR0aCgpICogbXVsdGlwbGll
cjsKKyAgICBmbG9hdCBvZmZzZXRIZWlnaHQgPSBld2tWaWV3LT5tX2ZsaWNrT2Zmc2V0LmhlaWdo
dCgpICogbXVsdGlwbGllcjsKKyAgICBvZmZzZXRXaWR0aCA9IChvZmZzZXRXaWR0aCA+IDApID8g
Y2VpbGYob2Zmc2V0V2lkdGgpIDogZmxvb3JmKG9mZnNldFdpZHRoKTsKKyAgICBvZmZzZXRIZWln
aHQgPSAob2Zmc2V0SGVpZ2h0ID4gMCkgPyBjZWlsZihvZmZzZXRIZWlnaHQpIDogZmxvb3JmKG9m
ZnNldEhlaWdodCk7CisgICAgSW50U2l6ZSBvZmZzZXQob2Zmc2V0V2lkdGgsIG9mZnNldEhlaWdo
dCk7CisgICAgZXdrVmlldy0+bV9mbGlja0luZGV4LS07CisKKyAgICBpZiAob2Zmc2V0LmlzWmVy
bygpIHx8ICFld2tWaWV3LT5zY3JvbGxCeShvZmZzZXQpIHx8ICFld2tWaWV3LT5tX2ZsaWNrSW5k
ZXgpIHsKKyAgICAgICAgZXdrVmlldy0+bV9mbGlja0FuaW1hdG9yID0gMDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEV3a1ZpZXc6
OmhhbmRsZUZsaWNrKGNvbnN0IEludFNpemUmIG9mZnNldCkKK3sKKyAgICBtX2ZsaWNrT2Zmc2V0
ID0gb2Zmc2V0OworICAgIG1fZmxpY2tJbmRleCA9IG1fZmxpY2tEdXJhdGlvbiA9IDEgLyBlY29y
ZV9hbmltYXRvcl9mcmFtZXRpbWVfZ2V0KCk7CisgICAgbV9mbGlja0FuaW1hdG9yID0gZWNvcmVf
YW5pbWF0b3JfYWRkKGZsaWNrQW5pbWF0b3JDYWxsYmFjaywgdGhpcyk7Cit9CisKK3ZvaWQgRXdr
Vmlldzo6aGFuZGxlRmxpY2tDYW5jZWxlZCgpCit7CisgICAgaWYgKG1fZmxpY2tBbmltYXRvcikg
eworICAgICAgICBlY29yZV9hbmltYXRvcl9kZWwobV9mbGlja0FuaW1hdG9yKTsKKyAgICAgICAg
bV9mbGlja0FuaW1hdG9yID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxlUGlu
Y2hTdGFydGVkKGNvbnN0IFZlY3RvcjxJbnRQb2ludD4mKQorewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKK3ZvaWQgRXdrVmlldzo6aGFuZGxlUGluY2goY29uc3QgVmVjdG9yPEludFBvaW50
PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFd2tWaWV3OjpoYW5kbGVQ
aW5jaEZpbmlzaGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKK2Jv
b2wgRXdrVmlldzo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQoreworICAgIFdLUG9p
bnQgb2xkUG9zaXRpb24gPSBXS1ZpZXdHZXRDb250ZW50UG9zaXRpb24od2tWaWV3KCkpOworICAg
IEZsb2F0UG9pbnQgbmV3UG9zaXRpb24gPSBGbG9hdFBvaW50KG9sZFBvc2l0aW9uLnggKyBvZmZz
ZXQud2lkdGgoKSwgb2xkUG9zaXRpb24ueSArIG9mZnNldC5oZWlnaHQoKSk7CisgICAgV0tWaWV3
U2V0Q29udGVudFBvc2l0aW9uKHdrVmlldygpLCBXS1BvaW50TWFrZShuZXdQb3NpdGlvbi54KCks
IG5ld1Bvc2l0aW9uLnkoKSkpOworCisgICAgV0tQb2ludCBwb3NpdGlvbiA9IFdLVmlld0dldENv
bnRlbnRQb3NpdGlvbih3a1ZpZXcoKSk7CisgICAgZmxvYXQgY29udGVudFNjYWxlID0gV0tWaWV3
R2V0Q29udGVudFNjYWxlRmFjdG9yKHdrVmlldygpKTsKKyAgICBtX3BhZ2VWaWV3cG9ydENvbnRy
b2xsZXItPmRpZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0eShGbG9hdFBvaW50KHBvc2l0aW9uLngg
LyBjb250ZW50U2NhbGUsIHBvc2l0aW9uLnkgLyBjb250ZW50U2NhbGUpLCBjb250ZW50U2NhbGUp
OworCisgICAgLy8gSWYgdGhlIHBhZ2UgcG9zaXRpb24gaXMgbm90IGNoYW5nZWQsIG5vdGlmeSB0
aGF0IHVzaW5nIHJldHVybmluZyB2YWx1ZS4KKyAgICBpZiAob2xkUG9zaXRpb24gPT0gcG9zaXRp
b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBFdmFz
X1NtYXJ0X0NsYXNzIEV3a1ZpZXc6OnBhcmVudFNtYXJ0Q2xhc3MgPSBFVkFTX1NNQVJUX0NMQVNT
X0lOSVRfTlVMTDsKIAogLy8gRnJlZSBFd2sgVmlldyBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYTlmMDExNy4uNDQyNGU2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplci5oIgogI2luY2x1ZGUgImV3a190
b3VjaC5oIgogI2VuZGlmCiAKQEAgLTk5LDcgKzEwMCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBfRXZh
c19HTF9TdXJmYWNlIEV2YXNfR0xfU3VyZmFjZTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1Nt
YXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1Nt
YXJ0X0NsYXNzIEV3a19WaWV3X1NtYXJ0X0NsYXNzOwogCi1jbGFzcyBFd2tWaWV3IHsKK2NsYXNz
IEV3a1ZpZXcKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIDogcHVibGljIEdlc3R1cmVS
ZWNvZ25pemVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKICAgICBzdGF0aWMgRXdrVmlldyog
Y3JlYXRlKFdLVmlld1JlZiwgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCA9IDApOwog
CkBAIC0yMDEsOSArMjA2LDI1IEBAIHB1YmxpYzoKICAgICB2b2lkIGluZm9ybVVSTENoYW5nZSgp
OwogCiAgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgpOworICAg
IGJvb2wgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAgICAgdm9pZCBkaWRG
aW5kWm9vbWFibGVBcmVhKGNvbnN0IFdLUG9pbnQmLCBjb25zdCBXS1JlY3QmKTsKIAorI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCisgICAgLy8gR2VzdHVyZVJlY29nbml6ZXJDbGllbnQuCisgICAg
dm9pZCBoYW5kbGVTaW5nbGVUYXAoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lk
IGhhbmRsZURvdWJsZVRhcChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGFu
ZGxlVGFwQW5kSG9sZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGFuZGxl
UGFuU3RhcnRlZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGFuZGxlUGFu
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoYW5kbGVQYW5GaW5pc2hlZCgp
OworICAgIHZvaWQgaGFuZGxlRmxpY2soY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZv
aWQgaGFuZGxlRmxpY2tDYW5jZWxlZCgpOworICAgIHZvaWQgaGFuZGxlUGluY2hTdGFydGVkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRQb2ludD4mKTsKKyAgICB2b2lkIGhhbmRsZVBpbmNoKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRQb2ludD4mKTsKKyAgICB2b2lkIGhhbmRsZVBpbmNoRmlu
aXNoZWQoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV3a1ZpZXcoV0tWaWV3UmVmLCBFdmFz
X09iamVjdCopOwogICAgIH5Fd2tWaWV3KCk7CkBAIC0yNDEsNiArMjYyLDggQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCBoYW5kbGVUb3VjaERvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNf
T2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBoYW5kbGVUb3VjaFVw
KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CiAgICAg
c3RhdGljIHZvaWQgaGFuZGxlVG91Y2hNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbyk7CisKKyAgICBzdGF0aWMgRWluYV9Cb29sIGZsaWNrQW5pbWF0
b3JDYWxsYmFjayh2b2lkKiBkYXRhKTsKICNlbmRpZgogICAgIHN0YXRpYyB2b2lkIGhhbmRsZUZh
dmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbyk7CiAKQEAg
LTI3OSw2ICszMDIsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbW91c2VFdmVudHNFbmFibGVk
OwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBtX3RvdWNoRXZlbnRzRW5hYmxl
ZDsKKyAgICBPd25QdHI8V2ViS2l0OjpHZXN0dXJlUmVjb2duaXplcj4gbV9nZXN0dXJlUmVjb2du
aXplcjsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RQb2ludDsKKyAgICBFY29yZV9Bbmlt
YXRvciogbV9mbGlja0FuaW1hdG9yOworICAgIFdlYkNvcmU6OkludFNpemUgbV9mbGlja09mZnNl
dDsKKyAgICB1bnNpZ25lZCBtX2ZsaWNrRHVyYXRpb247CisgICAgdW5zaWduZWQgbV9mbGlja0lu
ZGV4OwogI2VuZGlmCiAgICAgV2ViQ29yZTo6VGltZXI8RXdrVmlldz4gbV9kaXNwbGF5VGltZXI7
CiAgICAgUmVmUHRyPEV3a0NvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjdlY2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9HZXN0dXJlUmVjb2duaXplci5j
cHAKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlc3R1cmVSZWNvZ25pemVyLmgiCisKKyNp
bmNsdWRlICJFd2tWaWV3LmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NvbnN0IGRvdWJsZSBHZXN0dXJlUmVjb2duaXplcjo6c19kb3VibGVU
YXBUaW1lb3V0SW5TZWNvbmRzID0gMC40OworY29uc3QgZG91YmxlIEdlc3R1cmVSZWNvZ25pemVy
OjpzX3RhcEFuZEhvbGRUaW1lb3V0SW5TZWNvbmRzID0gMS4wOworY29uc3QgaW50IEdlc3R1cmVS
ZWNvZ25pemVyOjpzX3NxdWFyZWREb3VibGVUYXBUaHJlc2hvbGQgPSAxMDAwMDsKK2NvbnN0IGlu
dCBHZXN0dXJlUmVjb2duaXplcjo6c19zcXVhcmVkUGFuVGhyZXNob2xkID0gMTAwOworY29uc3Qg
aW50IEdlc3R1cmVSZWNvZ25pemVyOjpzX2hpc3RvcnlDYXBhY2l0eSA9IDU7CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBleGNlZWRzUGFuVGhyZXNob2xkKGNvbnN0IEludFBvaW50JiBmaXJzdCwgY29u
c3QgSW50UG9pbnQmIGxhc3QpCit7CisgICAgcmV0dXJuIGZpcnN0LmRpc3RhbmNlU3F1YXJlZFRv
UG9pbnQobGFzdCkgPiBHZXN0dXJlUmVjb2duaXplcjo6c19zcXVhcmVkUGFuVGhyZXNob2xkOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgZXhjZWVkc0RvdWJsZVRhcFRocmVzaG9sZChjb25zdCBJ
bnRQb2ludCYgZmlyc3QsIGNvbnN0IEludFBvaW50JiBsYXN0KQoreworICAgIHJldHVybiBmaXJz
dC5kaXN0YW5jZVNxdWFyZWRUb1BvaW50KGxhc3QpID4gR2VzdHVyZVJlY29nbml6ZXI6OnNfc3F1
YXJlZERvdWJsZVRhcFRocmVzaG9sZDsKK30KKworR2VzdHVyZVJlY29nbml6ZXI6Okdlc3R1cmVS
ZWNvZ25pemVyKEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3JlY29n
bml6ZXJGdW5jdGlvbigmR2VzdHVyZVJlY29nbml6ZXI6Om5vR2VzdHVyZSkKKyAgICAsIG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fdGFwQW5kSG9sZFRpbWVyKDApCisgICAgLCBtX2RvdWJsZVRh
cFRpbWVyKDApCisgICAgLCBtX3BhbkFuaW1hdG9yKDApCisgICAgLCBtX2lzQ3VycmVudFBvaW50
VXBkYXRlZChmYWxzZSkKKyAgICAsIG1fZmlyc3RIaXN0b3J5SXRlbUluZGV4KDApCit7CisgICAg
bV9oaXN0b3J5LnJlc2VydmVDYXBhY2l0eShzX2hpc3RvcnlDYXBhY2l0eSk7Cit9CisKK3ZvaWQg
R2VzdHVyZVJlY29nbml6ZXI6OnByb2Nlc3NUb3VjaEV2ZW50KFdLVG91Y2hFdmVudFJlZiBldmVu
dFJlZikKK3sKKyAgICBXS0V2ZW50VHlwZSB0eXBlID0gV0tUb3VjaEV2ZW50R2V0VHlwZShldmVu
dFJlZik7CisgICAgaWYgKHR5cGUgPT0ga1dLRXZlbnRUeXBlVG91Y2hDYW5jZWwpIHsKKyAgICAg
ICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICh0aGlzLT4qbV9yZWNv
Z25pemVyRnVuY3Rpb24pKHR5cGUsIFdLVG91Y2hFdmVudEdldFRvdWNoUG9pbnRzKGV2ZW50UmVm
KSk7Cit9CisKK0VpbmFfQm9vbCBHZXN0dXJlUmVjb2duaXplcjo6ZG91YmxlVGFwVGltZXJDYWxs
YmFjayh2b2lkKiBkYXRhKQoreworICAgIEdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2du
aXplciA9IHN0YXRpY19jYXN0PEdlc3R1cmVSZWNvZ25pemVyKj4oZGF0YSk7CisgICAgZ2VzdHVy
ZVJlY29nbml6ZXItPm1fZG91YmxlVGFwVGltZXIgPSAwOworCisgICAgLy8gSWYgZG91YmxlVGFw
VGltZXIgaXMgZmlyZWQgd2Ugc2hvdWxkIG5vdCBwcm9jZXNzIGRvdWJsZSB0YXAsCisgICAgLy8g
c28gcHJvY2VzcyBzaW5nbGUgdGFwIGhlcmUgaWYgdG91Y2hlZCBwb2ludCBpcyBhbHJlYWR5IHJl
bGVhc2VkCisgICAgLy8gb3IgZG8gbm90aGluZyBmb3IgcHJvY2Vzc2luZyBzaW5nbGUgdGFwIHdo
ZW4gdG91Y2ggaXMgcmVsZWFzZWQuCisgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyLT5tX3JlY29n
bml6ZXJGdW5jdGlvbiA9PSAmR2VzdHVyZVJlY29nbml6ZXI6OmRvdWJsZVRhcEdlc3R1cmUpIHsK
KyAgICAgICAgZ2VzdHVyZVJlY29nbml6ZXItPm1fY2xpZW50LT5oYW5kbGVTaW5nbGVUYXAoZ2Vz
dHVyZVJlY29nbml6ZXItPm1fZmlyc3RQcmVzc2VkUG9pbnQpOworICAgICAgICBnZXN0dXJlUmVj
b2duaXplci0+bV9yZWNvZ25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6Om5vR2Vz
dHVyZTsKKyAgICB9CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitF
aW5hX0Jvb2wgR2VzdHVyZVJlY29nbml6ZXI6OnRhcEFuZEhvbGRUaW1lckNhbGxiYWNrKHZvaWQq
IGRhdGEpCit7CisgICAgR2VzdHVyZVJlY29nbml6ZXIqIGdlc3R1cmVSZWNvZ25pemVyID0gc3Rh
dGljX2Nhc3Q8R2VzdHVyZVJlY29nbml6ZXIqPihkYXRhKTsKKyAgICBnZXN0dXJlUmVjb2duaXpl
ci0+bV90YXBBbmRIb2xkVGltZXIgPSAwOworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5tX2NsaWVu
dC0+aGFuZGxlVGFwQW5kSG9sZChnZXN0dXJlUmVjb2duaXplci0+bV9maXJzdFByZXNzZWRQb2lu
dCk7CisgICAgZ2VzdHVyZVJlY29nbml6ZXItPm1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1
cmVSZWNvZ25pemVyOjpub0dlc3R1cmU7CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FO
Q0VMOworfQorCitzdGF0aWMgaW5saW5lIFdLUG9pbnQgZ2V0UG9pbnRBdEluZGV4KFdLQXJyYXlS
ZWYgYXJyYXksIHNpemVfdCBpbmRleCkKK3sKKyAgICBXS1RvdWNoUG9pbnRSZWYgcG9pbnRSZWYg
PSBzdGF0aWNfY2FzdDxXS1RvdWNoUG9pbnRSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChhcnJh
eSwgaW5kZXgpKTsKKyAgICBBU1NFUlQocG9pbnRSZWYpOworCisgICAgcmV0dXJuIFdLVG91Y2hQ
b2ludEdldFBvc2l0aW9uKHBvaW50UmVmKTsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8SW50
UG9pbnQ+IGNyZWF0ZVZlY3RvcldpdGhXS0FycmF5KFdLQXJyYXlSZWYgYXJyYXksIHNpemVfdCBz
aXplKQoreworICAgIFZlY3RvcjxJbnRQb2ludD4gcG9pbnRzKHNpemUpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBwb2ludHMudW5jaGVja2VkQXBwZW5k
KHRvSW50UG9pbnQoZ2V0UG9pbnRBdEluZGV4KGFycmF5LCBpKSkpOworCisgICAgcmV0dXJuIHBv
aW50czsKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplcjo6bm9HZXN0dXJlKFdLRXZlbnRUeXBl
IHR5cGUsIFdLQXJyYXlSZWYgdG91Y2hQb2ludHMpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaFN0YXJ0OgorICAgICAgICBtX2NsaWVudC0+aGFuZGxl
RmxpY2tDYW5jZWxlZCgpOworCisgICAgICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1
cmVSZWNvZ25pemVyOjpzaW5nbGVUYXBHZXN0dXJlOworICAgICAgICBtX2ZpcnN0UHJlc3NlZFBv
aW50ID0gdG9JbnRQb2ludChnZXRQb2ludEF0SW5kZXgodG91Y2hQb2ludHMsIDApKTsKKyAgICAg
ICAgQVNTRVJUKG1fdGFwQW5kSG9sZFRpbWVyKTsKKyAgICAgICAgbV90YXBBbmRIb2xkVGltZXIg
PSBlY29yZV90aW1lcl9hZGQoc190YXBBbmRIb2xkVGltZW91dEluU2Vjb25kcywgdGFwQW5kSG9s
ZFRpbWVyQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBtX2RvdWJsZVRhcFRpbWVyID0gZWNvcmVf
dGltZXJfYWRkKHNfZG91YmxlVGFwVGltZW91dEluU2Vjb25kcywgZG91YmxlVGFwVGltZXJDYWxs
YmFjaywgdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR2VzdHVy
ZVJlY29nbml6ZXI6OnNpbmdsZVRhcEdlc3R1cmUoV0tFdmVudFR5cGUgdHlwZSwgV0tBcnJheVJl
ZiB0b3VjaFBvaW50cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtXS0V2ZW50
VHlwZVRvdWNoU3RhcnQ6CisgICAgICAgIHN0b3BUYXBUaW1lcnMoKTsKKyAgICAgICAgbV9yZWNv
Z25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6OnBpbmNoR2VzdHVyZTsKKyAgICAg
ICAgbV9jbGllbnQtPmhhbmRsZVBpbmNoU3RhcnRlZChjcmVhdGVWZWN0b3JXaXRoV0tBcnJheSh0
b3VjaFBvaW50cywgMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtXS0V2ZW50VHlwZVRv
dWNoTW92ZTogeworICAgICAgICBJbnRQb2ludCBjdXJyZW50UG9pbnQgPSB0b0ludFBvaW50KGdl
dFBvaW50QXRJbmRleCh0b3VjaFBvaW50cywgMCkpOworICAgICAgICBpZiAoZXhjZWVkc1BhblRo
cmVzaG9sZChtX2ZpcnN0UHJlc3NlZFBvaW50LCBjdXJyZW50UG9pbnQpKSB7CisgICAgICAgICAg
ICBzdG9wVGFwVGltZXJzKCk7CisgICAgICAgICAgICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZH
ZXN0dXJlUmVjb2duaXplcjo6cGFuR2VzdHVyZTsKKyAgICAgICAgICAgIGhhbmRsZVBhblN0YXJ0
ZWQoY3VycmVudFBvaW50KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBrV0tFdmVudFR5cGVUb3VjaEVuZDoKKyAgICAgICAgaWYgKG1fdGFwQW5kSG9sZFRpbWVy
KSB7CisgICAgICAgICAgICBlY29yZV90aW1lcl9kZWwobV90YXBBbmRIb2xkVGltZXIpOworICAg
ICAgICAgICAgbV90YXBBbmRIb2xkVGltZXIgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fZG91YmxlVGFwVGltZXIpCisgICAgICAgICAgICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZH
ZXN0dXJlUmVjb2duaXplcjo6ZG91YmxlVGFwR2VzdHVyZTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBtX2NsaWVudC0+aGFuZGxlU2luZ2xlVGFwKG1fZmlyc3RQcmVzc2VkUG9pbnQpOwor
ICAgICAgICAgICAgbV9yZWNvZ25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6Om5v
R2VzdHVyZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IEdlc3R1cmVSZWNvZ25pemVyOjpkb3VibGVUYXBHZXN0dXJlKFdLRXZlbnRUeXBlIHR5cGUsIFdL
QXJyYXlSZWYgdG91Y2hQb2ludHMpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBr
V0tFdmVudFR5cGVUb3VjaFN0YXJ0OiB7CisgICAgICAgIGlmIChtX2RvdWJsZVRhcFRpbWVyKSB7
CisgICAgICAgICAgICBlY29yZV90aW1lcl9kZWwobV9kb3VibGVUYXBUaW1lcik7CisgICAgICAg
ICAgICBtX2RvdWJsZVRhcFRpbWVyID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBu
dW1iZXJPZlRvdWNoUG9pbnRzID0gV0tBcnJheUdldFNpemUodG91Y2hQb2ludHMpOworICAgICAg
ICBpZiAobnVtYmVyT2ZUb3VjaFBvaW50cyA9PSAxKSB7CisgICAgICAgICAgICBpZiAoZXhjZWVk
c0RvdWJsZVRhcFRocmVzaG9sZChtX2ZpcnN0UHJlc3NlZFBvaW50LCB0b0ludFBvaW50KGdldFBv
aW50QXRJbmRleCh0b3VjaFBvaW50cywgMCkpKSkKKyAgICAgICAgICAgICAgICBtX3JlY29nbml6
ZXJGdW5jdGlvbiA9ICZHZXN0dXJlUmVjb2duaXplcjo6c2luZ2xlVGFwR2VzdHVyZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1cmVS
ZWNvZ25pemVyOjpwaW5jaEdlc3R1cmU7CisgICAgICAgICAgICBtX2NsaWVudC0+aGFuZGxlUGlu
Y2hTdGFydGVkKGNyZWF0ZVZlY3RvcldpdGhXS0FycmF5KHRvdWNoUG9pbnRzLCAyKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hN
b3ZlOiB7CisgICAgICAgIEludFBvaW50IGN1cnJlbnRQb2ludCA9IHRvSW50UG9pbnQoZ2V0UG9p
bnRBdEluZGV4KHRvdWNoUG9pbnRzLCAwKSk7CisgICAgICAgIGlmIChleGNlZWRzUGFuVGhyZXNo
b2xkKG1fZmlyc3RQcmVzc2VkUG9pbnQsIGN1cnJlbnRQb2ludCkpIHsKKyAgICAgICAgICAgIG1f
cmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1cmVSZWNvZ25pemVyOjpwYW5HZXN0dXJlOworICAg
ICAgICAgICAgaGFuZGxlUGFuU3RhcnRlZChjdXJyZW50UG9pbnQpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoRW5kOgorICAgICAg
ICBtX2NsaWVudC0+aGFuZGxlRG91YmxlVGFwKG1fZmlyc3RQcmVzc2VkUG9pbnQpOworICAgICAg
ICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZHZXN0dXJlUmVjb2duaXplcjo6bm9HZXN0dXJlOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyOjpw
YW5HZXN0dXJlKFdLRXZlbnRUeXBlIHR5cGUsIFdLQXJyYXlSZWYgdG91Y2hQb2ludHMpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaFN0YXJ0OgorICAg
ICAgICBtX3JlY29nbml6ZXJGdW5jdGlvbiA9ICZHZXN0dXJlUmVjb2duaXplcjo6cGluY2hHZXN0
dXJlOworICAgICAgICBtX2NsaWVudC0+aGFuZGxlUGluY2hTdGFydGVkKGNyZWF0ZVZlY3Rvcldp
dGhXS0FycmF5KHRvdWNoUG9pbnRzLCAyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1dL
RXZlbnRUeXBlVG91Y2hNb3ZlOgorICAgICAgICB1cGRhdGVDdXJyZW50UG9pbnQodG9JbnRQb2lu
dChnZXRQb2ludEF0SW5kZXgodG91Y2hQb2ludHMsIDApKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hFbmQ6CisgICAgICAgIGhhbmRsZVBhbkZpbmlzaGVkKCk7
CisgICAgICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1cmVSZWNvZ25pemVyOjpub0dl
c3R1cmU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29n
bml6ZXI6OnBpbmNoR2VzdHVyZShXS0V2ZW50VHlwZSB0eXBlLCBXS0FycmF5UmVmIHRvdWNoUG9p
bnRzKQoreworICAgIHNpemVfdCBudW1iZXJPZlRvdWNoUG9pbnRzID0gV0tBcnJheUdldFNpemUo
dG91Y2hQb2ludHMpOworICAgIEFTU0VSVChudW1iZXJPZlRvdWNoUG9pbnRzID49IDIpOworCisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaE1vdmU6IHsKKyAg
ICAgICAgbV9jbGllbnQtPmhhbmRsZVBpbmNoKGNyZWF0ZVZlY3RvcldpdGhXS0FycmF5KHRvdWNo
UG9pbnRzLCAyKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIGtXS0V2ZW50VHlw
ZVRvdWNoRW5kOgorICAgICAgICBpZiAobnVtYmVyT2ZUb3VjaFBvaW50cyA9PSAyKSB7CisgICAg
ICAgICAgICBtX2NsaWVudC0+aGFuZGxlUGluY2hGaW5pc2hlZCgpOworICAgICAgICAgICAgbV9y
ZWNvZ25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6OnBhbkdlc3R1cmU7CisgICAg
ICAgICAgICBXS1RvdWNoUG9pbnRSZWYgcG9pbnRSZWY7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mVG91Y2hQb2ludHM7ICsraSkgeworICAgICAgICAgICAgICAg
IHBvaW50UmVmID0gc3RhdGljX2Nhc3Q8V0tUb3VjaFBvaW50UmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgodG91Y2hQb2ludHMsIGkpKTsKKyAgICAgICAgICAgICAgICBXS1RvdWNoUG9pbnRTdGF0
ZSBzdGF0ZSA9IFdLVG91Y2hQb2ludEdldFN0YXRlKHBvaW50UmVmKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc3RhdGUgIT0ga1dLVG91Y2hQb2ludFN0YXRlVG91Y2hSZWxlYXNlZCAmJiBzdGF0ZSAh
PSBrV0tUb3VjaFBvaW50U3RhdGVUb3VjaENhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQocG9pbnRSZWYpOworICAg
ICAgICAgICAgaGFuZGxlUGFuU3RhcnRlZCh0b0ludFBvaW50KFdLVG91Y2hQb2ludEdldFBvc2l0
aW9uKHBvaW50UmVmKSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1dL
RXZlbnRUeXBlVG91Y2hTdGFydDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9p
ZCBHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQoreworICAgIHN0b3BUYXBUaW1lcnMoKTsKKwor
ICAgIGlmIChtX3BhbkFuaW1hdG9yKSB7CisgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChtX3Bh
bkFuaW1hdG9yKTsKKyAgICAgICAgbV9wYW5BbmltYXRvciA9IDA7CisgICAgfQorCisgICAgbV9y
ZWNvZ25pemVyRnVuY3Rpb24gPSAmR2VzdHVyZVJlY29nbml6ZXI6Om5vR2VzdHVyZTsKK30KKwor
dm9pZCBHZXN0dXJlUmVjb2duaXplcjo6c3RvcFRhcFRpbWVycygpCit7CisgICAgaWYgKG1fZG91
YmxlVGFwVGltZXIpIHsKKyAgICAgICAgZWNvcmVfdGltZXJfZGVsKG1fZG91YmxlVGFwVGltZXIp
OworICAgICAgICBtX2RvdWJsZVRhcFRpbWVyID0gMDsKKyAgICB9CisKKyAgICBpZiAobV90YXBB
bmRIb2xkVGltZXIpIHsKKyAgICAgICAgZWNvcmVfdGltZXJfZGVsKG1fdGFwQW5kSG9sZFRpbWVy
KTsKKyAgICAgICAgbV90YXBBbmRIb2xkVGltZXIgPSAwOworICAgIH0KK30KKworRWluYV9Cb29s
IEdlc3R1cmVSZWNvZ25pemVyOjpwYW5BbmltYXRvckNhbGxiYWNrKHZvaWQqIGRhdGEpCit7Cisg
ICAgR2VzdHVyZVJlY29nbml6ZXIqIGdlc3R1cmVSZWNvZ25pemVyID0gc3RhdGljX2Nhc3Q8R2Vz
dHVyZVJlY29nbml6ZXIqPihkYXRhKTsKKyAgICBpZiAoIWdlc3R1cmVSZWNvZ25pemVyLT5tX2lz
Q3VycmVudFBvaW50VXBkYXRlZCkKKyAgICAgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVX
OworCisgICAgZ2VzdHVyZVJlY29nbml6ZXItPm1fY2xpZW50LT5oYW5kbGVQYW4oZ2VzdHVyZVJl
Y29nbml6ZXItPm1fY3VycmVudFBvaW50KTsKKyAgICBnZXN0dXJlUmVjb2duaXplci0+bV9pc0N1
cnJlbnRQb2ludFVwZGF0ZWQgPSBmYWxzZTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19S
RU5FVzsKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplcjo6aGFuZGxlUGFuU3RhcnRlZChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgQVNTRVJUKCFtX3BhbkFuaW1hdG9yKTsKKyAgICBt
X3BhbkFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkKHBhbkFuaW1hdG9yQ2FsbGJhY2ssIHRo
aXMpOworICAgIG1fY3VycmVudFBvaW50ID0gcG9pbnQ7CisgICAgbV9maXJzdEhpc3RvcnlJdGVt
SW5kZXggPSAwOworICAgIG1faGlzdG9yeS5yZXNpemUoMCk7CisKKyAgICBtX2NsaWVudC0+aGFu
ZGxlUGFuU3RhcnRlZChwb2ludCk7Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0
ZUN1cnJlbnRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgbV9jdXJyZW50UG9p
bnQgPSBwb2ludDsKKyAgICBtX2lzQ3VycmVudFBvaW50VXBkYXRlZCA9IHRydWU7CisKKyAgICAv
LyBTYXZlIGN1cnJlbnQgcG9pbnQgdG8gdXNlIHRvIGNhbGN1bGF0ZSBvZmZzZXQgb2YgZmxpY2su
CisgICAgSGlzdG9yeUl0ZW0gaXRlbSA9IHttX2N1cnJlbnRQb2ludCwgZWNvcmVfdGltZV9nZXQo
KX07CisgICAgaWYgKG1faGlzdG9yeS5zaXplKCkgPCBtX2hpc3RvcnkuY2FwYWNpdHkoKSkKKyAg
ICAgICAgbV9oaXN0b3J5LnVuY2hlY2tlZEFwcGVuZChpdGVtKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9oaXN0b3J5W21fZmlyc3RIaXN0b3J5SXRlbUluZGV4KytdID0gaXRlbTsKKyAgICAgICAg
aWYgKG1fZmlyc3RIaXN0b3J5SXRlbUluZGV4ID49IG1faGlzdG9yeS5jYXBhY2l0eSgpKQorICAg
ICAgICAgICAgbV9maXJzdEhpc3RvcnlJdGVtSW5kZXggJT0gbV9oaXN0b3J5LmNhcGFjaXR5KCk7
CisgICAgfQorfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyOjpoYW5kbGVQYW5GaW5pc2hlZCgp
Cit7CisgICAgQVNTRVJUKG1fcGFuQW5pbWF0b3IpOworICAgIGVjb3JlX2FuaW1hdG9yX2RlbCht
X3BhbkFuaW1hdG9yKTsKKyAgICBtX3BhbkFuaW1hdG9yID0gMDsKKworICAgIGlmICghbV9oaXN0
b3J5LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBDYWxjdWxhdGUgb2Zmc2V0IHRvIG1vdmUgZHVy
aW5nIG9uZSBmcmFtZS4KKyAgICAgICAgY29uc3QgSGlzdG9yeUl0ZW0mIGZpcnN0SGlzdG9yeUl0
ZW0gPSBtX2hpc3RvcnlbbV9maXJzdEhpc3RvcnlJdGVtSW5kZXhdOworICAgICAgICBkb3VibGUg
ZnJhbWUgPSAoZWNvcmVfdGltZV9nZXQoKSAtIGZpcnN0SGlzdG9yeUl0ZW0udGltZXN0YW1wKSAv
IGVjb3JlX2FuaW1hdG9yX2ZyYW1ldGltZV9nZXQoKTsKKyAgICAgICAgSW50U2l6ZSBvZmZzZXQg
PSBmaXJzdEhpc3RvcnlJdGVtLnBvaW50IC0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG9mZnNl
dC5zY2FsZSgxIC8gZnJhbWUpOworICAgICAgICBtX2NsaWVudC0+aGFuZGxlRmxpY2sob2Zmc2V0
KTsKKyAgICB9CisKKyAgICBtX2NsaWVudC0+aGFuZGxlUGFuRmluaXNoZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25pemVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlZTZhNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25p
emVyLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3Vu
ZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBHZXN0dXJlUmVjb2duaXplcl9oCisjZGVmaW5lIEdlc3R1cmVSZWNvZ25pemVy
X2gKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLRXZlbnRFZmwu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworY2xhc3MgR2VzdHVyZVJlY29nbml6ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkdlc3R1cmVSZWNvZ25pemVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
U2luZ2xlVGFwKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZURvdWJsZVRhcChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVUYXBBbmRIb2xkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGFuU3RhcnRlZChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYW4oY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGFuRmluaXNoZWQoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlRmxpY2soY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVGbGlja0NhbmNlbGVkKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlUGluY2hTdGFydGVkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRQb2ludD4mKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGluY2goY29uc3QgVmVjdG9yPFdlYkNvcmU6Oklu
dFBvaW50PiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQaW5jaEZpbmlzaGVkKCkgeyB9
Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR2VzdHVyZVJlY29nbml6ZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdlc3R1cmVSZWNvZ25pemVyPiBjcmVhdGUo
R2VzdHVyZVJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgR2VzdHVyZVJlY29nbml6ZXIoY2xpZW50KSk7CisgICAgfQorCisgICAgdm9p
ZCBwcm9jZXNzVG91Y2hFdmVudChXS1RvdWNoRXZlbnRSZWYpOworICAgIHZvaWQgcmVzZXQoKTsK
KworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc19kb3VibGVUYXBUaW1lb3V0SW5TZWNvbmRzOwor
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc190YXBBbmRIb2xkVGltZW91dEluU2Vjb25kczsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IHNfc3F1YXJlZERvdWJsZVRhcFRocmVzaG9sZDsKKyAgICBzdGF0
aWMgY29uc3QgaW50IHNfc3F1YXJlZFBhblRocmVzaG9sZDsKKyAgICBzdGF0aWMgY29uc3QgaW50
IHNfaGlzdG9yeUNhcGFjaXR5OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdlc3R1cmVSZWNv
Z25pemVyKEdlc3R1cmVSZWNvZ25pemVyQ2xpZW50Kik7CisKKyAgICBzdGF0aWMgRWluYV9Cb29s
IGRvdWJsZVRhcFRpbWVyQ2FsbGJhY2sodm9pZCopOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgdGFw
QW5kSG9sZFRpbWVyQ2FsbGJhY2sodm9pZCopOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgcGFuQW5p
bWF0b3JDYWxsYmFjayh2b2lkKik7CisKKyAgICAvLyBTdGF0ZSBmdW5jdGlvbnMuCisgICAgdm9p
ZCBub0dlc3R1cmUoV0tFdmVudFR5cGUsIFdLQXJyYXlSZWYpOworICAgIHZvaWQgc2luZ2xlVGFw
R2VzdHVyZShXS0V2ZW50VHlwZSwgV0tBcnJheVJlZik7CisgICAgdm9pZCBkb3VibGVUYXBHZXN0
dXJlKFdLRXZlbnRUeXBlLCBXS0FycmF5UmVmKTsKKyAgICB2b2lkIHBhbkdlc3R1cmUoV0tFdmVu
dFR5cGUsIFdLQXJyYXlSZWYpOworICAgIHZvaWQgcGluY2hHZXN0dXJlKFdLRXZlbnRUeXBlLCBX
S0FycmF5UmVmKTsKKworICAgIHZvaWQgc3RvcFRhcFRpbWVycygpOworICAgIHZvaWQgaGFuZGxl
UGFuU3RhcnRlZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgdXBkYXRlQ3Vy
cmVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoYW5kbGVQYW5G
aW5pc2hlZCgpOworCisgICAgdHlwZWRlZiB2b2lkIChHZXN0dXJlUmVjb2duaXplcjo6KlJlY29n
bml6ZXJGdW5jdGlvbikoV0tFdmVudFR5cGUsIFdLQXJyYXlSZWYpOworICAgIFJlY29nbml6ZXJG
dW5jdGlvbiBtX3JlY29nbml6ZXJGdW5jdGlvbjsKKworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBFY29yZV9UaW1lciogbV90YXBBbmRIb2xkVGltZXI7CisgICAg
RWNvcmVfVGltZXIqIG1fZG91YmxlVGFwVGltZXI7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9m
aXJzdFByZXNzZWRQb2ludDsKKworICAgIEVjb3JlX0FuaW1hdG9yKiBtX3BhbkFuaW1hdG9yOwor
ICAgIFdlYkNvcmU6OkludFBvaW50IG1fY3VycmVudFBvaW50OworICAgIGJvb2wgbV9pc0N1cnJl
bnRQb2ludFVwZGF0ZWQ7CisKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFdlYkNvcmU6
OkludFBvaW50IHBvaW50OworICAgICAgICBkb3VibGUgdGltZXN0YW1wOworICAgIH0gSGlzdG9y
eUl0ZW07CisgICAgVmVjdG9yPEhpc3RvcnlJdGVtPiBtX2hpc3Rvcnk7CisgICAgdW5zaWduZWQg
bV9maXJzdEhpc3RvcnlJdGVtSW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKKyNlbmRpZiAvLyBHZXN0dXJlUmVjb2du
aXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYlZpZXcuY3BwCmluZGV4IDI5Mzc0NWUuLmIxYjEwZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZp
ZXcuY3BwCkBAIC0xMDUsNiArMTA1LDE2IEBAIHZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShib29s
IHZpc2libGUpCiAgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3SXNWaXNpYmxlKTsKIH0KIAordm9pZCBXZWJWaWV3OjpzZXRDb250ZW50UG9zaXRpb24oY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgRmxvYXRSZWN0IGJvdW5k
czsKKyAgICBib3VuZHMuc2V0V2lkdGgoc3RkOjptYXgoMC5mLCBjZWlsZihtX2NvbnRlbnRzU2l6
ZS53aWR0aCgpICogbV9jb250ZW50U2NhbGVGYWN0b3IpKSAtIHNpemUoKS53aWR0aCgpKTsKKyAg
ICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWF4KDAuZiwgY2VpbGYobV9jb250ZW50c1NpemUuaGVp
Z2h0KCkgKiBtX2NvbnRlbnRTY2FsZUZhY3RvcikpIC0gc2l6ZSgpLmhlaWdodCgpKTsKKworICAg
IG1fY29udGVudFBvc2l0aW9uLnNldFgoY2xhbXBUbyhwb3NpdGlvbi54KCksIGJvdW5kcy54KCks
IGJvdW5kcy53aWR0aCgpKSk7CisgICAgbV9jb250ZW50UG9zaXRpb24uc2V0WShjbGFtcFRvKHBv
c2l0aW9uLnkoKSwgYm91bmRzLnkoKSwgYm91bmRzLmhlaWdodCgpKSk7Cit9CisKIHZvaWQgV2Vi
Vmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpCiB7
CiAgICAgbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRy
YW5zbGF0ZSh0eCwgdHkpOwpAQCAtMjIxLDcgKzIzMSw3IEBAIEFmZmluZVRyYW5zZm9ybSBXZWJW
aWV3Ojp0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKIHsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gLW1fY29udGVudFBvc2l0aW9uOwogICAgIGZsb2F0IGVmZmVjdGl2ZVNjYWxlID0gbV9jb250
ZW50U2NhbGVGYWN0b3IgKiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgcG9zaXRp
b24uc2NhbGUoZWZmZWN0aXZlU2NhbGUsIGVmZmVjdGl2ZVNjYWxlKTsKKyAgICBwb3NpdGlvbi5z
Y2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX3VzZXJWaWV3
cG9ydFRyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9z
aXRpb24ueSgpKTsKQEAgLTI0OCw3ICsyNTgsOSBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZVZpZXdw
b3J0U2l6ZSgpCiAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFnZSgp
LT5kcmF3aW5nQXJlYSgpKSB7CiAgICAgICAgIC8vIFdlYiBQcm9jZXNzIGV4cGVjdHMgc2l6ZXMg
aW4gVUkgdW5pdHMsIGFuZCBub3QgcmF3IGRldmljZSB1bml0cy4KICAgICAgICAgZHJhd2luZ0Fy
ZWEtPnNldFNpemUocm91bmRlZEludFNpemUoZGlwU2l6ZSgpKSwgSW50U2l6ZSgpLCBJbnRTaXpl
KCkpOwotICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdChjb250ZW50UG9zaXRp
b24oKSwgdmlzaWJsZUNvbnRlbnRzU2l6ZSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlv
biA9IGNvbnRlbnRQb3NpdGlvbigpOworICAgICAgICBwb3NpdGlvbi5zY2FsZSgxIC8gbV9jb250
ZW50U2NhbGVGYWN0b3IsIDEgLyBtX2NvbnRlbnRTY2FsZUZhY3Rvcik7CisgICAgICAgIEZsb2F0
UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KHBvc2l0aW9uLCB2aXNpYmxlQ29udGVudHNTaXplKCkp
OwogICAgICAgICB2aXNpYmxlQ29udGVudHNSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBjb250ZW50c1NpemUoKSkpOwogICAgICAgICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCBGbG9hdFBvaW50KCkpOwogICAgIH0K
QEAgLTM5Miw2ICs0MDQsMTMgQEAgdm9pZCBXZWJWaWV3Ojpkb25lV2l0aEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCit2b2lkIFdlYlZpZXc6OmRvbmVXaXRoR2Vz
dHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYsIGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIHZvaWQgV2Vi
Vmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50
LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaAppbmRleCBlNzlhMjM4Li44YjUw
MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViVmlldy5oCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dENvbnRlbnRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikgeyBtX2NvbnRlbnRTY2FsZUZh
Y3RvciA9IHNjYWxlRmFjdG9yOyB9CiAgICAgZmxvYXQgY29udGVudFNjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50U2NhbGVGYWN0b3I7IH0KIAotICAgIHZvaWQgc2V0Q29udGVu
dFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fY29udGVu
dFBvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldENvbnRlbnRQb3NpdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
Y29udGVudFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UG9zaXRpb247IH0KIAog
ICAgIHZvaWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkp
OwpAQCAtMTcwLDYgKzE3MCw5IEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91
Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBPVkVSUklERTsKICNlbmRpZgorI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGRvbmVXaXRoR2VzdHVyZUV2ZW50KGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYsIGJvb2wpIE9WRVJSSURFOworI2VuZGlmCiAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBh
Z2VQcm94eSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVu
dVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIu
Y3BwCmluZGV4IDYyNTRjZjcuLjNmY2UyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKQEAgLTI1Nyw4ICsyNTcsNyBAQCB2
b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmRpZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0eShj
b25zdCBGbG9hdFBvaW50JiBwb3NpdAogewogICAgIGlmICghbV9wZW5kaW5nUG9zaXRpb25DaGFu
Z2UpCiAgICAgICAgIG1fY29udGVudHNQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICghbV9w
ZW5kaW5nU2NhbGVDaGFuZ2UpCi0gICAgICAgIGFwcGx5U2NhbGVBZnRlclJlbmRlcmluZ0NvbnRl
bnRzKHNjYWxlKTsKKyAgICBhcHBseVNjYWxlQWZ0ZXJSZW5kZXJpbmdDb250ZW50cyhzY2FsZSk7
CiAKICAgICBzeW5jVmlzaWJsZUNvbnRlbnRzKHRyYWplY3RvcnlWZWN0b3IpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTJiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0V3a0dlc3R1cmVFdmVudC5jcHAKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRXdrR2VzdHVyZUV2ZW50LmgiCisKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitFd2tHZXN0dXJlRXZlbnQ6OkV3a0dlc3R1cmVFdmVudChX
S0V2ZW50VHlwZSB0eXBlLCBXS1BvaW50IHBvc2l0aW9uLCBXS1BvaW50IHNjcmVlblBvc2l0aW9u
LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCwgV0tTaXplIGFy
ZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQorICAgIDogbV9ldmVudFR5cGUodHlwZSkK
KyAgICAsIG1fbW9kaWZpZXJzKG1vZGlmaWVycykKKyAgICAsIG1fdGltZXN0YW1wKHRpbWVzdGFt
cCkKKyAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgLCBtX3NjcmVlblBvc2l0aW9uKHNj
cmVlblBvc2l0aW9uKQorICAgICwgbV9hcmVhKGFyZWEpCisgICAgLCBtX2RlbHRhWChkZWx0YVgp
CisgICAgLCBtX2RlbHRhWShkZWx0YVkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvRXdrR2VzdHVyZUV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDBiZDhjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvRXdrR2VzdHVyZUV2ZW50LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEV3a0dlc3R1cmVFdmVudF9oCisjZGVmaW5lIEV3a0dlc3R1cmVF
dmVudF9oCisKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisKKyNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKKyNpbmNsdWRlICJXS0V2ZW50RWZsLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEV3a0dlc3R1cmVFdmVudCA6IHB1Ymxp
YyBBUElPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBBUElPYmplY3Q6OlR5cGUg
QVBJVHlwZSA9IFR5cGVHZXN0dXJlRXZlbnQ7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tH
ZXN0dXJlRXZlbnQ+IGNyZWF0ZShXS0V2ZW50VHlwZSB0eXBlLCBXS1BvaW50IHBvc2l0aW9uLCBX
S1BvaW50IHNjcmVlblBvc2l0aW9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91Ymxl
IHRpbWVzdGFtcCwgV0tTaXplIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tHZXN0dXJlRXZlbnQodHlwZSwgcG9z
aXRpb24sIHNjcmVlblBvc2l0aW9uLCBtb2RpZmllcnMsIHRpbWVzdGFtcCwgYXJlYSwgZGVsdGFY
LCBkZWx0YVkpKTsKKyAgICB9CisKKyAgICBXS0V2ZW50VHlwZSBldmVudFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2V2ZW50VHlwZTsgfQorICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RpZmllcnM7IH0KKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29u
c3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKyAgICBXS1BvaW50IHBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIFdLUG9pbnQgc2NyZWVuUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3NjcmVlblBvc2l0aW9uOyB9CisgICAgV0tTaXplIGFyZWEoKSBjb25zdCB7
IHJldHVybiBtX2FyZWE7IH0KKyAgICBmbG9hdCBkZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2Rl
bHRhWDsgfQorICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsdGFZOyB9CisK
K3ByaXZhdGU6CisgICAgRXdrR2VzdHVyZUV2ZW50KFdLRXZlbnRUeXBlLCBXS1BvaW50IHBvc2l0
aW9uLCBXS1BvaW50IHNjcmVlblBvc2l0aW9uLCBXS0V2ZW50TW9kaWZpZXJzLCBkb3VibGUgdGlt
ZXN0YW1wLCBXS1NpemUgYXJlYSwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpOworCisgICAg
dmlydHVhbCBBUElPYmplY3Q6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0K
KworICAgIFdLRXZlbnRUeXBlIG1fZXZlbnRUeXBlOworICAgIFdLRXZlbnRNb2RpZmllcnMgbV9t
b2RpZmllcnM7CisgICAgZG91YmxlIG1fdGltZXN0YW1wOworICAgIFdLUG9pbnQgbV9wb3NpdGlv
bjsKKyAgICBXS1BvaW50IG1fc2NyZWVuUG9zaXRpb247CisgICAgV0tTaXplIG1fYXJlYTsKKyAg
ICBmbG9hdCBtX2RlbHRhWDsKKyAgICBmbG9hdCBtX2RlbHRhWTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorCisjZW5kaWYg
LyogRXdrR2VzdHVyZUV2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCmlu
ZGV4IDIyYTQ1YjUuLmE4MjI5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcApA
QCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMSw3IEBACiAKICNp
bmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgiCiAKKyNpbmNsdWRlICJF
YXNpbmdDdXJ2ZXMuaCIKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZVZpZXdw
b3J0Q29udHJvbGxlci5oIgogCkBAIC0zNywxMyArMzksNjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitUcmFuc2l0aW9uOjpUcmFuc2l0aW9uKFRy
YW5zaXRpb25DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1f
YW5pbWF0b3IoMCkKKyAgICAsIG1fc2NhbGVEdXJhdGlvbigwKQorICAgICwgbV9zY2FsZUluZGV4
KDApCit7Cit9CisKK1RyYW5zaXRpb246On5UcmFuc2l0aW9uKCkKK3sKKyAgICBpZiAobV9hbmlt
YXRvcikKKyAgICAgICAgZWNvcmVfYW5pbWF0b3JfZGVsKG1fYW5pbWF0b3IpOworfQorCit2b2lk
IFRyYW5zaXRpb246OnNldFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgYmFzZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX2Jhc2VSZWN0ID0gYmFzZVJlY3Q7CisgICAg
bV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKK30KKwordm9pZCBUcmFuc2l0aW9uOjpzdGFydCh1
bnNpZ25lZCBkdXJhdGlvbikKK3sKKyAgICBtX2FuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRk
KGFuaW1hdG9yQ2FsbGJhY2ssIHRoaXMpOworICAgIG1fc2NhbGVEdXJhdGlvbiA9IGR1cmF0aW9u
OworICAgIG1fc2NhbGVJbmRleCA9IDE7Cit9CisKK0VpbmFfQm9vbCBUcmFuc2l0aW9uOjphbmlt
YXRvckNhbGxiYWNrKHZvaWQqIGRhdGEpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRyYW5z
aXRpb24qPihkYXRhKS0+cHJvY2VzcygpOworfQorCitib29sIFRyYW5zaXRpb246OnByb2Nlc3Mo
KQoreworICAgIEZsb2F0UmVjdCByZWN0OworICAgIGZsb2F0IG11bHRpcGxpZXIgPSBlYXNlSW5P
dXRRdWFkKG1fc2NhbGVJbmRleCsrLCAwLCAxLjAsIG1fc2NhbGVEdXJhdGlvbik7CisgICAgcmVj
dC5zZXRYKG1fYmFzZVJlY3QueCgpICsgKG1fdGFyZ2V0UmVjdC54KCkgLSBtX2Jhc2VSZWN0Lngo
KSkgKiBtdWx0aXBsaWVyKTsKKyAgICByZWN0LnNldFkobV9iYXNlUmVjdC55KCkgKyAobV90YXJn
ZXRSZWN0LnkoKSAtIG1fYmFzZVJlY3QueSgpKSAqIG11bHRpcGxpZXIpOworICAgIHJlY3Quc2V0
V2lkdGgobV9iYXNlUmVjdC53aWR0aCgpICsgKG1fdGFyZ2V0UmVjdC53aWR0aCgpIC0gbV9iYXNl
UmVjdC53aWR0aCgpKSAqIG11bHRpcGxpZXIpOworICAgIHJlY3Quc2V0SGVpZ2h0KG1fYmFzZVJl
Y3QuaGVpZ2h0KCkgKyAobV90YXJnZXRSZWN0LmhlaWdodCgpIC0gbV9iYXNlUmVjdC5oZWlnaHQo
KSkgKiBtdWx0aXBsaWVyKTsKKworICAgIG1fY2xpZW50LT5zZXRUcmFuc2l0aW9uUmVjdChyZWN0
KTsKKworICAgIGlmIChtX3NjYWxlSW5kZXggPiBtX3NjYWxlRHVyYXRpb24pIHsKKyAgICAgICAg
bV9hbmltYXRvciA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbChFd2tWaWV3KiB2aWV3KQogICAgIDogbV92aWV3KHZpZXcp
CiAgICAgLCBtX2NvbnRyb2xsZXIoMCkKKyAgICAsIG1fdHJhbnNpdGlvbihUcmFuc2l0aW9uOjpj
cmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKG1fdmlldyk7CiB9CiAKKwogdm9pZCBQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpCiB7CiAgICAgbV92aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsK
QEAgLTgwLDUgKzEzNSw0NSBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6
OnNldENvbnRyb2xsZXIoUGFnZVZpZXdwb3J0Q29udHJvbGxlciogY29udAogICAgIG1fY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7CiB9CiAKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6c2NhbGVUb0FyZWFXaXRoQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiB0YXJnZXQsIGNv
bnN0IEZsb2F0UmVjdCYgYXJlYSkKK3sKKyAgICBBU1NFUlQobV9jb250cm9sbGVyKTsKKyAgICBp
ZiAoIW1fY29udHJvbGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGFyZWEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJl
Y3QgdGFyZ2V0UmVjdCA9IGFyZWE7CisgICAgdGFyZ2V0UmVjdC5pbmZsYXRlWChzX3NjYWxlTWFy
Z2luKTsKKyAgICBXS1NpemUgdmlld3BvcnRTaXplID0gV0tWaWV3R2V0U2l6ZShtX3ZpZXctPndr
VmlldygpKTsKKworICAgIGZsb2F0IHRhcmdldFNjYWxlOworICAgIGlmIChzdGQ6OmFicyhtX2Nv
bnRyb2xsZXItPm1pbmltdW1TY2FsZSgpIC0gbV9jb250cm9sbGVyLT5jdXJyZW50U2NhbGUoKSkg
PCAwLjAwMDEpCisgICAgICAgIHRhcmdldFNjYWxlID0gbV9jb250cm9sbGVyLT5pbm5lckJvdW5k
ZWRWaWV3cG9ydFNjYWxlKHZpZXdwb3J0U2l6ZS53aWR0aCAvIHRhcmdldFJlY3Qud2lkdGgoKSk7
CisgICAgZWxzZQorICAgICAgICB0YXJnZXRTY2FsZSA9IG1fY29udHJvbGxlci0+bWluaW11bVNj
YWxlKCk7CisKKyAgICBGbG9hdFJlY3QgbmV3Q29udGVudHNSZWN0KHRhcmdldFJlY3QuY2VudGVy
KCksIEZsb2F0U2l6ZSh2aWV3cG9ydFNpemUud2lkdGggLyB0YXJnZXRTY2FsZSwgdmlld3BvcnRT
aXplLmhlaWdodCAvIHRhcmdldFNjYWxlKSk7CisgICAgaWYgKHRhcmdldFJlY3QuaGVpZ2h0KCkg
PiBuZXdDb250ZW50c1JlY3QuaGVpZ2h0KCkpCisgICAgICAgIG5ld0NvbnRlbnRzUmVjdC5zZXRZ
KHRhcmdldC55KCkpOworICAgIG5ld0NvbnRlbnRzUmVjdC5tb3ZlKC1uZXdDb250ZW50c1JlY3Qu
d2lkdGgoKSAvIDIsIC1uZXdDb250ZW50c1JlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICBuZXdDb250
ZW50c1JlY3Quc2V0TG9jYXRpb24obV9jb250cm9sbGVyLT5ib3VuZENvbnRlbnRzUG9zaXRpb25B
dFNjYWxlKG5ld0NvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCB0YXJnZXRTY2FsZSkpOworCisgICAg
V0tQb2ludCBjb250ZW50c1Bvc2l0aW9uID0gV0tWaWV3R2V0Q29udGVudFBvc2l0aW9uKG1fdmll
dy0+d2tWaWV3KCkpOworICAgIGZsb2F0IGNvbnRlbnRTY2FsZSA9IFdLVmlld0dldENvbnRlbnRT
Y2FsZUZhY3RvcihtX3ZpZXctPndrVmlldygpKTsKKyAgICBGbG9hdFJlY3QgY3VycmVudENvbnRl
bnRzUmVjdCA9IEZsb2F0UmVjdChjb250ZW50c1Bvc2l0aW9uLngsIGNvbnRlbnRzUG9zaXRpb24u
eSwgdmlld3BvcnRTaXplLndpZHRoLCB2aWV3cG9ydFNpemUuaGVpZ2h0KTsKKyAgICBjdXJyZW50
Q29udGVudHNSZWN0LnNjYWxlKDEgLyBjb250ZW50U2NhbGUpOworICAgIG1fdHJhbnNpdGlvbi0+
c2V0UmVjdHMoY3VycmVudENvbnRlbnRzUmVjdCwgbmV3Q29udGVudHNSZWN0KTsKKyAgICBtX3Ry
YW5zaXRpb24tPnN0YXJ0KHNfc2NhbGVEdXJhdGlvbik7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbDo6c2V0VHJhbnNpdGlvblJlY3QoY29uc3QgRmxvYXRSZWN0JiBj
b250ZW50c1JlY3QpCit7CisgICAgV0tTaXplIHNpemUgPSBXS1ZpZXdHZXRTaXplKG1fdmlldy0+
d2tWaWV3KCkpOworICAgIHNldFBhZ2VTY2FsZUZhY3RvcihzaXplLndpZHRoIC8gY29udGVudHNS
ZWN0LndpZHRoKCkpOworICAgIHNldFZpZXdwb3J0UG9zaXRpb24oY29udGVudHNSZWN0LmxvY2F0
aW9uKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKICNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oCmluZGV4IGU0MDQ1
YjYuLjI3NTI1NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDE0ICsyOSw0OSBAQAogI2RlZmluZSBQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsX2gKIAogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnQuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KIAogY2xhc3MgRXdrVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwgOiBwdWJsaWMgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudCB7CitjbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOworCitjbGFzcyBUcmFuc2l0aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5U
cmFuc2l0aW9uQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zaXRpb25SZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQorfTsKKworY2xhc3MgVHJhbnNpdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VHJhbnNpdGlvbj4gY3JlYXRlKFRyYW5z
aXRpb25DbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VHJhbnNpdGlvbihjbGllbnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VHJhbnNpdGlvbigpOwor
CisgICAgdm9pZCBzZXRSZWN0cyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJhc2VSZWN0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRhcmdldFJlY3QpOworICAgIHZvaWQgc3RhcnQodW5z
aWduZWQgZHVyYXRpb24pOworCitwcml2YXRlOgorICAgIFRyYW5zaXRpb24oVHJhbnNpdGlvbkNs
aWVudCopOworCisgICAgc3RhdGljIEVpbmFfQm9vbCBhbmltYXRvckNhbGxiYWNrKHZvaWQqKTsK
KyAgICBib29sIHByb2Nlc3MoKTsKKworICAgIFRyYW5zaXRpb25DbGllbnQqIG1fY2xpZW50Owor
ICAgIEVjb3JlX0FuaW1hdG9yKiBtX2FuaW1hdG9yOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBt
X3RhcmdldFJlY3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fYmFzZVJlY3Q7CisgICAgdW5z
aWduZWQgbV9zY2FsZUR1cmF0aW9uOworICAgIHVuc2lnbmVkIG1fc2NhbGVJbmRleDsKK307CisK
K2NsYXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwgOiBwdWJsaWMgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudCwgcHVibGljIFRyYW5zaXRpb25DbGllbnQgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw+IGNy
ZWF0ZShFd2tWaWV3KiB2aWV3SW1wbCkKICAgICB7CkBAIC01MiwxMiArODgsMjEgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoUGFnZVZpZXdwb3J0Q29udHJvbGxl
ciopIE9WRVJSSURFOwogCisgICAgdm9pZCBzY2FsZVRvQXJlYVdpdGhBbmltYXRpb24oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworICAgIC8v
IFRyYW5zaXRpb25DbGllbnQuCisgICAgdm9pZCBzZXRUcmFuc2l0aW9uUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsKEV3a1ZpZXcqKTsKIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzX3NjYWxlRHVyYXRpb24gPSAyMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19zY2Fs
ZU1hcmdpbiA9IDU7CisKICAgICBFd2tWaWV3KiBtX3ZpZXc7CiAgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBtX2NvbnRlbnRQb3NpdGlvbjsKICAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyKiBtX2Nv
bnRyb2xsZXI7CisgICAgT3duUHRyPFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
d0VmbC5jcHAKaW5kZXggNTY2MGJlMS4uZTM1MDkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkV3
a1RvdWNoRXZlbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2lu
Y2x1ZGUgIkV3a0dlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBFd2tW
aWV3Q2FsbGJhY2tzOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTEyNCw0ICsxMjgs
MTMgQEAgdm9pZCBXZWJWaWV3RWZsOjpzZW5kVG91Y2hFdmVudChFd2tUb3VjaEV2ZW50KiB0b3Vj
aEV2ZW50KQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCit2b2lkIFdl
YlZpZXdFZmw6OnNlbmRHZXN0dXJlRXZlbnQoY29uc3QgRXdrR2VzdHVyZUV2ZW50KiBldmVudCkK
K3sKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIFdlYkdlc3R1cmVFdmVudCBnZXN0dXJlKHRvV2Vi
RXZlbnRUeXBlKGV2ZW50LT5ldmVudFR5cGUoKSksIHRyYW5zZm9ybUZyb21TY2VuZSgpLm1hcFBv
aW50KHRvSW50UG9pbnQoZXZlbnQtPnBvc2l0aW9uKCkpKSwgdG9JbnRQb2ludChldmVudC0+c2Ny
ZWVuUG9zaXRpb24oKSksIHRvV2ViRXZlbnRNb2RpZmllcnMoZXZlbnQtPm1vZGlmaWVycygpKSwg
ZXZlbnQtPnRpbWVzdGFtcCgpLCB0b0ludFNpemUoZXZlbnQtPmFyZWEoKSksIEZsb2F0UG9pbnQo
ZXZlbnQtPmRlbHRhWCgpLCBldmVudC0+ZGVsdGFZKCkpKTsKKyAgICBtX3BhZ2UtPmhhbmRsZUdl
c3R1cmVFdmVudChnZXN0dXJlKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmgKaW5kZXggZDcxNzIzNC4u
ZTYzYjM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3
RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmgKQEAg
LTQ4LDYgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmRUb3VjaEV2ZW50KEV3a1RvdWNo
RXZlbnQqKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHZvaWQg
c2VuZEdlc3R1cmVFdmVudChjb25zdCBFd2tHZXN0dXJlRXZlbnQqKTsKKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIFdlYlZpZXdFZmwoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlCmluZGV4IDdmOWNhYjEuLjFlZjJiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9j
bWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtl
CkBAIC0yNzMsMyArMjczLDcgQEAgaWYgKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQogICAgIHNl
dChXVEZfVVNFX0xFVkVMREIgMSkKICAgICBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0xFVkVM
REI9MSkKIGVuZGlmICgpCisKK2lmIChFTkFCTEVfV0VCS0lUMiBBTkQgV1RGX1VTRV9USUxFRF9C
QUNLSU5HX1NUT1JFKQorICAgIGFkZF9kZWZpbml0aW9ucygtREVOQUJMRV9HRVNUVVJFX0VWRU5U
Uz0xKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMg
Yi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4IDAzZjljZjguLjc2ZThmZTgzIDEw
MDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlC
cm93c2VyL2VmbC9tYWluLmMKQEAgLTE4MjYsNiArMTgyNiwxMCBAQCBzdGF0aWMgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvd19jcmVhdGUoRXZhc19PYmplY3QgKm9wZW5lciwgY29uc3QgY2hhciAqdXJs
LCBpbnQgdwogICAgIGV3a192aWV3X3NvdXJjZV9tb2RlX3NldCh3aW5kb3ctPmV3a192aWV3LCB2
aWV3X21vZGUpOwogICAgIGV3a192aWV3X3VzZXJfYWdlbnRfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcs
IHVzZXJfYWdlbnRfc3RyaW5nKTsKIAorICAgIC8vIGV1bm1pCisgICAgZXdrX3ZpZXdfdG91Y2hf
ZXZlbnRzX2VuYWJsZWRfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfVFJVRSk7CisgICAgZXdr
X3ZpZXdfbW91c2VfZXZlbnRzX2VuYWJsZWRfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfRkFM
U0UpOworCiAgICAgLyogU2V0IHRoZSB6b29tIGxldmVsIHRvIGRlZmF1bHQgKi8KICAgICB3aW5k
b3ctPmN1cnJlbnRfem9vbV9sZXZlbCA9IERFRkFVTFRfWk9PTV9MRVZFTDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208406</attachid>
            <date>2013-08-09 01:48:36 -0700</date>
            <delta_ts>2013-08-09 01:48:36 -0700</delta_ts>
            <desc>patch for testing gestures - 20130809</desc>
            <filename>all_gesture_patches.patch</filename>
            <type>text/plain</type>
            <size>42072</size>
            <attacher name="Eunmi Lee">enmi.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNDg5NWU5OC4uNDc2MzM4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwNiw2ICsxMDYsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNz
L2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9FYXNpbmdDdXJ2
ZXMuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuY3BwCiAgICAgVUlQcm9j
ZXNzL2VmbC9Fd2tUb3VjaEV2ZW50LmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvRXdrVG91Y2hQb2lu
dC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL0ZpbmRDbGllbnRFZmwuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZWZsL1dLQmFzZUVmbC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL2VmbC9XS0Jhc2VFZmwuaAppbmRleCA5YzA3ZjhlMC4uZTdkYzU2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2VmbC9XS0Jhc2VFZmwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZWZsL1dLQmFzZUVmbC5oCkBAIC0yOSw1
ICsyOSw2IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUG9wdXBJdGVtKiBXS1BvcHVw
SXRlbVJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUG9wdXBNZW51TGlzdGVuZXIq
IFdLUG9wdXBNZW51TGlzdGVuZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1Rv
dWNoUG9pbnQqIFdLVG91Y2hQb2ludFJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdL
VG91Y2hFdmVudCogV0tUb3VjaEV2ZW50UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVl
V0tHZXN0dXJlRXZlbnQqIFdLR2VzdHVyZUV2ZW50UmVmOwogCiAjZW5kaWYgLyogV0tCYXNlRWZs
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3QuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3QuaAppbmRleCA0NDFlMDVlLi40MjU5YmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVibGljOgog
ICAgICAgICBUeXBlVG91Y2hQb2ludCwKICAgICAgICAgVHlwZVRvdWNoRXZlbnQsCiAjZW5kaWYK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgICAgIFR5cGVHZXN0dXJlRXZlbnQsCisj
ZW5kaWYKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvV2Vi
RXZlbnRGYWN0b3J5LmNwcAppbmRleCA3ZjViM2VlLi4wOTdlZWQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2VmbC9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0yMjksMzkgKzIyOSw2IEBA
IHN0YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgdG9X
ZWJQbGF0Zm9ybVRvdWNoUG9pbnRTdGF0CiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIFdlYkV2
ZW50OjpUeXBlIHRvV2ViRXZlbnRUeXBlKFdLRXZlbnRUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaFN0YXJ0OgotICAgICAgICByZXR1
cm4gV2ViRXZlbnQ6OlRvdWNoU3RhcnQ7Ci0gICAgY2FzZSBrV0tFdmVudFR5cGVUb3VjaE1vdmU6
Ci0gICAgICAgIHJldHVybiBXZWJFdmVudDo6VG91Y2hNb3ZlOwotICAgIGNhc2Uga1dLRXZlbnRU
eXBlVG91Y2hFbmQ6Ci0gICAgICAgIHJldHVybiBXZWJFdmVudDo6VG91Y2hFbmQ7Ci0gICAgY2Fz
ZSBrV0tFdmVudFR5cGVUb3VjaENhbmNlbDoKLSAgICAgICAgcmV0dXJuIFdlYkV2ZW50OjpUb3Vj
aENhbmNlbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gV2ViRXZlbnQ6Ok5vVHlwZTsK
LSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIHRvV2ViRXZl
bnRNb2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJzKQotewotICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDA7Ci0KLSAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleSkKLSAg
ICAgICAgcmVzdWx0IHw9IFdlYkV2ZW50OjpTaGlmdEtleTsKLSAgICBpZiAobW9kaWZpZXJzICYg
a1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5KQotICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6
OkNvbnRyb2xLZXk7Ci0gICAgaWYgKG1vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5
KQotICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6OkFsdEtleTsKLSAgICBpZiAobW9kaWZpZXJz
ICYga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5KQotICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6
Ok1ldGFLZXk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4o
cmVzdWx0KTsKLX0KLQogV2ViVG91Y2hFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYlRv
dWNoRXZlbnQoY29uc3QgRXdrVG91Y2hFdmVudCogZXZlbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdG9XZWJDb250ZW50KQogewogICAgIEltbXV0YWJsZUFycmF5KiB0b3VjaFBvaW50c0FycmF5
ID0gdG9JbXBsKGV2ZW50LT50b3VjaFBvaW50cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCmluZGV4IDg3YzVmNWUuLjY4NTFjZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0
RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RF
ZmwuaApAQCAtNTAsNiArNTAsMTIgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLVG91Y2hFdmVudFJl
ZiwgRXdrVG91Y2hFdmVudCkKIFdLX0FERF9BUElfTUFQUElORyhXS1RvdWNoUG9pbnRSZWYsIEV3
a1RvdWNoUG9pbnQpCiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2NsYXNz
IEV3a0dlc3R1cmVFdmVudDsKKworV0tfQUREX0FQSV9NQVBQSU5HKFdLR2VzdHVyZUV2ZW50UmVm
LCBFd2tHZXN0dXJlRXZlbnQpCisjZW5kaWYKKwogLy8gRW51bSBjb252ZXJzaW9ucy4KIGlubGlu
ZSBXS1BvcHVwSXRlbVRleHREaXJlY3Rpb24gdG9BUEkoV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pCiB7CkBAIC0xMDQsNiArMTEwLDQ0IEBAIGlubGluZSBXS1RvdWNoUG9pbnRTdGF0
ZSB0b0FQSShXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUG9pbnRTdGF0ZSBzdGF0ZSkKIH0K
ICNlbmRpZgogCitpbmxpbmUgV2ViRXZlbnQ6OlR5cGUgdG9XZWJFdmVudFR5cGUoV0tFdmVudFR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hTdGFydDoKKyAgICAgICAgcmV0dXJuIFdlYkV2
ZW50OjpUb3VjaFN0YXJ0OworICAgIGNhc2Uga1dLRXZlbnRUeXBlVG91Y2hNb3ZlOgorICAgICAg
ICByZXR1cm4gV2ViRXZlbnQ6OlRvdWNoTW92ZTsKKyAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNo
RW5kOgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6OlRvdWNoRW5kOworICAgIGNhc2Uga1dLRXZl
bnRUeXBlVG91Y2hDYW5jZWw6CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6VG91Y2hDYW5jZWw7
CisjZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgY2FzZSBrV0tFdmVudFR5
cGVHZXN0dXJlU2luZ2xlVGFwOgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6Okdlc3R1cmVTaW5n
bGVUYXA7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6Ok5v
VHlwZTsKKyAgICB9Cit9CisKK2lubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIHRvV2ViRXZlbnRN
b2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJzKQoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7
CisKKyAgICBpZiAobW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleSkKKyAgICAg
ICAgcmVzdWx0IHw9IFdlYkV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAobW9kaWZpZXJzICYga1dL
RXZlbnRNb2RpZmllcnNDb250cm9sS2V5KQorICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6OkNv
bnRyb2xLZXk7CisgICAgaWYgKG1vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5KQor
ICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6OkFsdEtleTsKKyAgICBpZiAobW9kaWZpZXJzICYg
a1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5KQorICAgICAgICByZXN1bHQgfD0gV2ViRXZlbnQ6Ok1l
dGFLZXk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4ocmVz
dWx0KTsKK30KKwogfQogCiAjZW5kaWYgLy8gV0tBUElDYXN0RWZsX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLRXZlbnRFZmwuY3BwCmluZGV4IDg0M2FlYjAu
LmU5NzAyOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tFdmVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S0V2ZW50RWZsLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
ICNpbmNsdWRlICJXZWJFdmVudC5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2lu
Y2x1ZGUgIkV3a0dlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKIFdLVG91Y2hQb2ludFJlZiBXS1RvdWNoUG9pbnRDcmVhdGUoaW50IGlkLCBXS1BvaW50
IHBvc2l0aW9uLCBXS1BvaW50IHNjcmVlblBvc2l0aW9uLCBXS1RvdWNoUG9pbnRTdGF0ZSBzdGF0
ZSwgV0tTaXplIHJhZGl1cywgZmxvYXQgcm90YXRpb25BbmdsZSwgZmxvYXQgZm9yY2VGYWN0b3Ip
CkBAIC0xNzIsMyArMTc2LDIwIEBAIGZsb2F0IFdLVG91Y2hQb2ludEdldEZvcmNlRmFjdG9yKFdL
VG91Y2hQb2ludFJlZiBwb2ludCkKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQorCitXS0dlc3R1
cmVFdmVudFJlZiBXS0dlc3R1cmVFdmVudENyZWF0ZShXS0V2ZW50VHlwZSB0eXBlLCBXS1BvaW50
IHBvc2l0aW9uLCBXS1BvaW50IHNjcmVlblBvc2l0aW9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVycywgZG91YmxlIHRpbWVzdGFtcCwgV0tTaXplIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQg
ZGVsdGFZKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICByZXR1cm4gdG9BUEko
RXdrR2VzdHVyZUV2ZW50OjpjcmVhdGUodHlwZSwgcG9zaXRpb24sIHNjcmVlblBvc2l0aW9uLCBt
b2RpZmllcnMsIHRpbWVzdGFtcCwgYXJlYSwgZGVsdGFYLCBkZWx0YVkpLmxlYWtSZWYoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ocG9zaXRpb24p
OworICAgIFVOVVNFRF9QQVJBTShzY3JlZW5Qb3NpdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKG1v
ZGlmaWVycyk7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVzdGFtcCk7CisgICAgVU5VU0VEX1BBUkFN
KGFyZWEpOworICAgIFVOVVNFRF9QQVJBTShkZWx0YVgpOworICAgIFVOVVNFRF9QQVJBTShkZWx0
YVkpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLRXZlbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5oCmluZGV4IGI1NDM5MjEuLjllNzUzMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tFdmVudEVmbC5oCkBAIC0z
OSw3ICszOSw4IEBAIGVudW0gV0tFdmVudFR5cGUgewogICAgIGtXS0V2ZW50VHlwZVRvdWNoU3Rh
cnQsCiAgICAga1dLRXZlbnRUeXBlVG91Y2hNb3ZlLAogICAgIGtXS0V2ZW50VHlwZVRvdWNoRW5k
LAotICAgIGtXS0V2ZW50VHlwZVRvdWNoQ2FuY2VsCisgICAga1dLRXZlbnRUeXBlVG91Y2hDYW5j
ZWwsCisgICAga1dLRXZlbnRUeXBlR2VzdHVyZVNpbmdsZVRhcAogfTsKIHR5cGVkZWYgZW51bSBX
S0V2ZW50VHlwZSBXS0V2ZW50VHlwZTsKIApAQCAtNjgsNiArNjksOCBAQCBXS19FWFBPUlQgV0tT
aXplIFdLVG91Y2hQb2ludEdldFJhZGl1cyhXS1RvdWNoUG9pbnRSZWYpOwogV0tfRVhQT1JUIGZs
b2F0IFdLVG91Y2hQb2ludEdldFJvdGF0aW9uQW5nbGUoV0tUb3VjaFBvaW50UmVmKTsKIFdLX0VY
UE9SVCBmbG9hdCBXS1RvdWNoUG9pbnRHZXRGb3JjZUZhY3RvcihXS1RvdWNoUG9pbnRSZWYpOwog
CitXS19FWFBPUlQgV0tHZXN0dXJlRXZlbnRSZWYgV0tHZXN0dXJlRXZlbnRDcmVhdGUoV0tFdmVu
dFR5cGUsIFdLUG9pbnQgcG9zaXRpb24sIFdLUG9pbnQgc2NyZWVuUG9zaXRpb24sIFdLRXZlbnRN
b2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXAsIFdLU2l6ZSBhcmVhLCBmbG9hdCBkZWx0YVgsIGZs
b2F0IGRlbHRhWSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHAKaW5kZXggY2VmYTJk
My4uY2U4NmRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXdFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tWaWV3RWZsLmNwcApAQCAtNTgsMyArNTgsMTMgQEAgdm9pZCBXS1ZpZXdTZW5kVG91Y2hFdmVu
dChXS1ZpZXdSZWYgdmlld1JlZiwgV0tUb3VjaEV2ZW50UmVmIHRvdWNoRXZlbnRSZWYpCiAgICAg
VU5VU0VEX1BBUkFNKHRvdWNoRXZlbnRSZWYpOwogI2VuZGlmCiB9CisKK3ZvaWQgV0tWaWV3U2Vu
ZEdlc3R1cmVFdmVudChXS1ZpZXdSZWYgdmlld1JlZiwgV0tHZXN0dXJlRXZlbnRSZWYgZ2VzdHVy
ZUV2ZW50UmVmKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBzdGF0aWNfY2Fz
dDxXZWJWaWV3RWZsKj4odG9JbXBsKHZpZXdSZWYpKS0+c2VuZEdlc3R1cmVFdmVudCh0b0ltcGwo
Z2VzdHVyZUV2ZW50UmVmKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2aWV3UmVmKTsKKyAg
ICBVTlVTRURfUEFSQU0oZ2VzdHVyZUV2ZW50UmVmKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXdFZmwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmgKaW5kZXggZDhhZmRjNC4uNmY3
MjgyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXdFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0Vm
bC5oCkBAIC00Miw2ICs0Miw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLVmlld1NldFRoZW1lUGF0aChX
S1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2VuZFRvdWNo
RXZlbnQoV0tWaWV3UmVmLCBXS1RvdWNoRXZlbnRSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1Zp
ZXdTZW5kR2VzdHVyZUV2ZW50KFdLVmlld1JlZiwgV0tHZXN0dXJlRXZlbnRSZWYpOworCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcAppbmRleCA1YmI4NDk3Li43MDM0MTc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMTM4OSw3ICsxMzg5LDI0IEBA
IFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogCiB2
b2lkIEV3a1ZpZXc6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgV0tQb2ludCYgcG9pbnQsIGNv
bnN0IFdLUmVjdCYgYXJlYSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fcGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudC0+c2NhbGVUb0FyZWFXaXRoQW5pbWF0aW9uKHRvSW50UG9p
bnQocG9pbnQpLCB0b0ludFJlY3QoYXJlYSkpOworfQorCitib29sIEV3a1ZpZXc6OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIG9mZnNldCkKK3sKKyAgICBXS1BvaW50IG9sZFBvc2l0aW9uID0gV0tW
aWV3R2V0Q29udGVudFBvc2l0aW9uKHdrVmlldygpKTsKKyAgICBGbG9hdFBvaW50IG5ld1Bvc2l0
aW9uID0gRmxvYXRQb2ludChvbGRQb3NpdGlvbi54ICsgb2Zmc2V0LndpZHRoKCksIG9sZFBvc2l0
aW9uLnkgKyBvZmZzZXQuaGVpZ2h0KCkpOworICAgIFdLVmlld1NldENvbnRlbnRQb3NpdGlvbih3
a1ZpZXcoKSwgV0tQb2ludE1ha2UobmV3UG9zaXRpb24ueCgpLCBuZXdQb3NpdGlvbi55KCkpKTsK
KworICAgIFdLUG9pbnQgcG9zaXRpb24gPSBXS1ZpZXdHZXRDb250ZW50UG9zaXRpb24od2tWaWV3
KCkpOworICAgIGZsb2F0IGNvbnRlbnRTY2FsZSA9IFdLVmlld0dldENvbnRlbnRTY2FsZUZhY3Rv
cih3a1ZpZXcoKSk7CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VDb250
ZW50c1Zpc2liaWxpdHkoRmxvYXRQb2ludChwb3NpdGlvbi54IC8gY29udGVudFNjYWxlLCBwb3Np
dGlvbi55IC8gY29udGVudFNjYWxlKSwgY29udGVudFNjYWxlKTsKKworICAgIC8vIElmIHRoZSBw
YWdlIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLCBub3RpZnkgdGhhdCB1c2luZyByZXR1cm5pbmcg
dmFsdWUuCisgICAgaWYgKG9sZFBvc2l0aW9uID09IHBvc2l0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogRXZhc19TbWFydF9DbGFzcyBFd2tWaWV3
OjpwYXJlbnRTbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYzQ2YjE1MS4uMzA2ZTM2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMjAy
LDYgKzIwMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluZm9ybVVSTENoYW5nZSgpOwogCiAgICAg
UGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgpOworICAgIGJvb2wgc2Ny
b2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAgICAgdm9pZCBkaWRGaW5kWm9vbWFi
bGVBcmVhKGNvbnN0IFdLUG9pbnQmLCBjb25zdCBXS1JlY3QmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4
IDIxNWIzMTQuLmEyZTNiOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0dlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9HZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTI3LDkgKzI3LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2VzdHVyZVJlY29nbml6ZXIuaCIKIAorI2luY2x1
ZGUgIkVhc2luZ0N1cnZlcy5oIgogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldL
Vmlld0VmbC5oIgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIApAQCAtNDMsMTMgKzQ1LDE2
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2VzdHVyZUhh
bmRsZXIoZXdrVmlldykpOwogICAgIH0KKyAgICB+R2VzdHVyZUhhbmRsZXIoKTsKIAorICAgIHZv
aWQgcmVzZXQoKTsKICAgICB2b2lkIGhhbmRsZVNpbmdsZVRhcChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogICAgIHZvaWQgaGFuZGxlRG91YmxlVGFwKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7CiAgICAgdm9pZCBoYW5kbGVUYXBBbmRIb2xkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CiAgICAgdm9pZCBoYW5kbGVQYW5TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAg
ICAgdm9pZCBoYW5kbGVQYW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2b2lkIGhh
bmRsZVBhbkZpbmlzaGVkKCk7CisgICAgdm9pZCBoYW5kbGVGbGljayhjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAgICAgdm9pZCBoYW5kbGVQaW5jaFN0YXJ0ZWQoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkludFBvaW50PiYpOwogICAgIHZvaWQgaGFuZGxlUGluY2goY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkludFBvaW50PiYpOwogICAgIHZvaWQgaGFuZGxlUGluY2hGaW5pc2hlZCgpOwpAQCAtNTcs
MjIgKzYyLDcyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgR2VzdHVyZUhhbmRs
ZXIoRXdrVmlldyopOwogCisgICAgc3RhdGljIEVpbmFfQm9vbCBwYW5BbmltYXRvckNhbGxiYWNr
KHZvaWQqKTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIGZsaWNrQW5pbWF0b3JDYWxsYmFjayh2b2lk
Kik7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfaGlzdG9yeUNhcGFjaXR5ID0gNTsKKwogICAg
IEV3a1ZpZXcqIG1fZXdrVmlldzsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RQb2ludDsK
KyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2N1cnJlbnRQb2ludDsKKyAgICBib29sIG1faXNDdXJy
ZW50UG9pbnRVcGRhdGVkOworICAgIEVjb3JlX0FuaW1hdG9yKiBtX3BhbkFuaW1hdG9yOworICAg
IEVjb3JlX0FuaW1hdG9yKiBtX2ZsaWNrQW5pbWF0b3I7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBt
X2ZsaWNrT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fZmxpY2tEdXJhdGlvbjsKKyAgICB1bnNpZ25l
ZCBtX2ZsaWNrSW5kZXg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFdlYkNvcmU6
OkludFBvaW50IHBvaW50OworICAgICAgICBkb3VibGUgdGltZXN0YW1wOworICAgIH0gSGlzdG9y
eUl0ZW07CisgICAgVmVjdG9yPEhpc3RvcnlJdGVtPiBtX2hpc3Rvcnk7CisgICAgdW5zaWduZWQg
bV9maXJzdEhpc3RvcnlJdGVtSW5kZXg7CiB9OwogCiBHZXN0dXJlSGFuZGxlcjo6R2VzdHVyZUhh
bmRsZXIoRXdrVmlldyogZXdrVmlldykKICAgICA6IG1fZXdrVmlldyhld2tWaWV3KQorICAgICwg
bV9pc0N1cnJlbnRQb2ludFVwZGF0ZWQoZmFsc2UpCisgICAgLCBtX3BhbkFuaW1hdG9yKDApCisg
ICAgLCBtX2ZsaWNrQW5pbWF0b3IoMCkKKyAgICAsIG1fZmxpY2tEdXJhdGlvbigwKQorICAgICwg
bV9mbGlja0luZGV4KDApCisgICAgLCBtX2ZpcnN0SGlzdG9yeUl0ZW1JbmRleCgwKQogeworICAg
IG1faGlzdG9yeS5yZXNlcnZlQ2FwYWNpdHkoc19oaXN0b3J5Q2FwYWNpdHkpOwogfQogCi12b2lk
IEdlc3R1cmVIYW5kbGVyOjpoYW5kbGVTaW5nbGVUYXAoY29uc3QgSW50UG9pbnQmKQorR2VzdHVy
ZUhhbmRsZXI6On5HZXN0dXJlSGFuZGxlcigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXNldCgpOwogfQogCi12b2lkIEdlc3R1cmVIYW5kbGVyOjpoYW5kbGVEb3VibGVUYXAoY29u
c3QgSW50UG9pbnQmKQordm9pZCBHZXN0dXJlSGFuZGxlcjo6cmVzZXQoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgaWYgKG1fcGFuQW5pbWF0b3IpIHsKKyAgICAgICAgZWNvcmVfYW5p
bWF0b3JfZGVsKG1fcGFuQW5pbWF0b3IpOworICAgICAgICBtX3BhbkFuaW1hdG9yID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobV9mbGlja0FuaW1hdG9yKSB7CisgICAgICAgIGVjb3JlX2FuaW1hdG9y
X2RlbChtX2ZsaWNrQW5pbWF0b3IpOworICAgICAgICBtX2ZsaWNrQW5pbWF0b3IgPSAwOworICAg
IH0KK30KKwordm9pZCBHZXN0dXJlSGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFwKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbikKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgV0tWaWV3
U2VuZEdlc3R1cmVFdmVudChtX2V3a1ZpZXctPndrVmlldygpLCBhZG9wdFdLKFdLR2VzdHVyZUV2
ZW50Q3JlYXRlKGtXS0V2ZW50VHlwZUdlc3R1cmVTaW5nbGVUYXAsIHRvQVBJKHBvc2l0aW9uKSwg
dG9BUEkobV9ld2tWaWV3LT50cmFuc2Zvcm1Ub1NjcmVlbigpLm1hcFBvaW50KHBvc2l0aW9uKSks
IDAsIGVjb3JlX3RpbWVfZ2V0KCksIFdLU2l6ZU1ha2UoMCwgMCksIDAsIDApKS5nZXQoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShwb3NpdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBHZXN0
dXJlSGFuZGxlcjo6aGFuZGxlRG91YmxlVGFwKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sK
KyAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBzZXQgbWVhbmluZ2Z1bCBzaXplIG9mIHRvdWNoIGlu
c3RlYWQgb2YgIjEsIDEiLgorICAgIFdLVmlld0ZpbmRab29tYWJsZUFyZWFGb3JSZWN0KG1fZXdr
Vmlldy0+d2tWaWV3KCksIFdLUmVjdE1ha2UocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIDEs
IDEpKTsKIH0KIAogdm9pZCBHZXN0dXJlSGFuZGxlcjo6aGFuZGxlVGFwQW5kSG9sZChjb25zdCBJ
bnRQb2ludCYpCkBAIC04MCwxOSArMTM1LDg0IEBAIHZvaWQgR2VzdHVyZUhhbmRsZXI6OmhhbmRs
ZVRhcEFuZEhvbGQoY29uc3QgSW50UG9pbnQmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgR2VzdHVyZUhhbmRsZXI6OmhhbmRsZVBhblN0YXJ0ZWQoY29uc3QgSW50UG9pbnQmKQor
RWluYV9Cb29sIEdlc3R1cmVIYW5kbGVyOjpwYW5BbmltYXRvckNhbGxiYWNrKHZvaWQqIGRhdGEp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBHZXN0dXJlSGFuZGxlciogZ2VzdHVyZUhh
bmRsZXIgPSBzdGF0aWNfY2FzdDxHZXN0dXJlSGFuZGxlcio+KGRhdGEpOworICAgIGlmICghZ2Vz
dHVyZUhhbmRsZXItPm1faXNDdXJyZW50UG9pbnRVcGRhdGVkIHx8IGdlc3R1cmVIYW5kbGVyLT5t
X2xhc3RQb2ludCA9PSBnZXN0dXJlSGFuZGxlci0+bV9jdXJyZW50UG9pbnQpCisgICAgICAgIHJl
dHVybiBFQ09SRV9DQUxMQkFDS19SRU5FVzsKKworICAgIGdlc3R1cmVIYW5kbGVyLT5tX2V3a1Zp
ZXctPnNjcm9sbEJ5KGdlc3R1cmVIYW5kbGVyLT5tX2xhc3RQb2ludCAtIGdlc3R1cmVIYW5kbGVy
LT5tX2N1cnJlbnRQb2ludCk7CisgICAgZ2VzdHVyZUhhbmRsZXItPm1fbGFzdFBvaW50ID0gZ2Vz
dHVyZUhhbmRsZXItPm1fY3VycmVudFBvaW50OworICAgIGdlc3R1cmVIYW5kbGVyLT5tX2lzQ3Vy
cmVudFBvaW50VXBkYXRlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JF
TkVXOwogfQogCi12b2lkIEdlc3R1cmVIYW5kbGVyOjpoYW5kbGVQYW4oY29uc3QgSW50UG9pbnQm
KQordm9pZCBHZXN0dXJlSGFuZGxlcjo6aGFuZGxlUGFuU3RhcnRlZChjb25zdCBJbnRQb2ludCYg
cG9pbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoIW1fcGFuQW5pbWF0
b3IpOworICAgIG1fcGFuQW5pbWF0b3IgPSBlY29yZV9hbmltYXRvcl9hZGQocGFuQW5pbWF0b3JD
YWxsYmFjaywgdGhpcyk7CisgICAgbV9sYXN0UG9pbnQgPSBtX2N1cnJlbnRQb2ludCA9IHBvaW50
OworICAgIG1fZmlyc3RIaXN0b3J5SXRlbUluZGV4ID0gMDsKKyAgICBtX2hpc3RvcnkucmVzaXpl
KDApOworfQorCit2b2lkIEdlc3R1cmVIYW5kbGVyOjpoYW5kbGVQYW4oY29uc3QgSW50UG9pbnQm
IHBvaW50KQoreworICAgIG1fY3VycmVudFBvaW50ID0gcG9pbnQ7CisgICAgbV9pc0N1cnJlbnRQ
b2ludFVwZGF0ZWQgPSB0cnVlOworCisgICAgLy8gU2F2ZSBjdXJyZW50IHBvaW50IHRvIHVzZSB0
byBjYWxjdWxhdGUgb2Zmc2V0IG9mIGZsaWNrLgorICAgIEhpc3RvcnlJdGVtIGl0ZW0gPSB7bV9j
dXJyZW50UG9pbnQsIGVjb3JlX3RpbWVfZ2V0KCl9OworICAgIGlmIChtX2hpc3Rvcnkuc2l6ZSgp
IDwgbV9oaXN0b3J5LmNhcGFjaXR5KCkpCisgICAgICAgIG1faGlzdG9yeS51bmNoZWNrZWRBcHBl
bmQoaXRlbSk7CisgICAgZWxzZSB7CisgICAgICAgIG1faGlzdG9yeVttX2ZpcnN0SGlzdG9yeUl0
ZW1JbmRleCsrXSA9IGl0ZW07CisgICAgICAgIGlmIChtX2ZpcnN0SGlzdG9yeUl0ZW1JbmRleCA9
PSBtX2hpc3RvcnkuY2FwYWNpdHkoKSkKKyAgICAgICAgICAgIG1fZmlyc3RIaXN0b3J5SXRlbUlu
ZGV4ID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgR2VzdHVyZUhhbmRsZXI6OmhhbmRsZVBhbkZpbmlz
aGVkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChtX3BhbkFuaW1hdG9y
KTsKKyAgICBlY29yZV9hbmltYXRvcl9kZWwobV9wYW5BbmltYXRvcik7CisgICAgbV9wYW5Bbmlt
YXRvciA9IDA7CisKKyAgICBpZiAoIW1faGlzdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
Q2FsY3VsYXRlIG9mZnNldCB0byBtb3ZlIGR1cmluZyBvbmUgZnJhbWUuCisgICAgICAgIGNvbnN0
IEhpc3RvcnlJdGVtJiBmaXJzdEhpc3RvcnlJdGVtID0gbV9oaXN0b3J5W21fZmlyc3RIaXN0b3J5
SXRlbUluZGV4XTsKKyAgICAgICAgZG91YmxlIGZyYW1lID0gKGVjb3JlX3RpbWVfZ2V0KCkgLSBm
aXJzdEhpc3RvcnlJdGVtLnRpbWVzdGFtcCkgLyBlY29yZV9hbmltYXRvcl9mcmFtZXRpbWVfZ2V0
KCk7CisgICAgICAgIEludFNpemUgb2Zmc2V0ID0gZmlyc3RIaXN0b3J5SXRlbS5wb2ludCAtIG1f
Y3VycmVudFBvaW50OworICAgICAgICBvZmZzZXQuc2NhbGUoMSAvIGZyYW1lKTsKKyAgICAgICAg
aGFuZGxlRmxpY2sob2Zmc2V0KTsKKyAgICB9Cit9CisKK0VpbmFfQm9vbCBHZXN0dXJlSGFuZGxl
cjo6ZmxpY2tBbmltYXRvckNhbGxiYWNrKHZvaWQqIGRhdGEpCit7CisgICAgR2VzdHVyZUhhbmRs
ZXIqIGdlc3R1cmVIYW5kbGVyID0gc3RhdGljX2Nhc3Q8R2VzdHVyZUhhbmRsZXIqPihkYXRhKTsK
KyAgICBmbG9hdCBtdWx0aXBsaWVyID0gZWFzZUluT3V0UXVhZChnZXN0dXJlSGFuZGxlci0+bV9m
bGlja0luZGV4LCAwLCAxLjAsIGdlc3R1cmVIYW5kbGVyLT5tX2ZsaWNrRHVyYXRpb24pOworICAg
IGZsb2F0IG9mZnNldFdpZHRoID0gZ2VzdHVyZUhhbmRsZXItPm1fZmxpY2tPZmZzZXQud2lkdGgo
KSAqIG11bHRpcGxpZXI7CisgICAgZmxvYXQgb2Zmc2V0SGVpZ2h0ID0gZ2VzdHVyZUhhbmRsZXIt
Pm1fZmxpY2tPZmZzZXQuaGVpZ2h0KCkgKiBtdWx0aXBsaWVyOworICAgIG9mZnNldFdpZHRoID0g
KG9mZnNldFdpZHRoID4gMCkgPyBjZWlsZihvZmZzZXRXaWR0aCkgOiBmbG9vcmYob2Zmc2V0V2lk
dGgpOworICAgIG9mZnNldEhlaWdodCA9IChvZmZzZXRIZWlnaHQgPiAwKSA/IGNlaWxmKG9mZnNl
dEhlaWdodCkgOiBmbG9vcmYob2Zmc2V0SGVpZ2h0KTsKKyAgICBJbnRTaXplIG9mZnNldChvZmZz
ZXRXaWR0aCwgb2Zmc2V0SGVpZ2h0KTsKKyAgICBnZXN0dXJlSGFuZGxlci0+bV9mbGlja0luZGV4
LS07CisKKyAgICBpZiAob2Zmc2V0LmlzWmVybygpIHx8ICFnZXN0dXJlSGFuZGxlci0+bV9ld2tW
aWV3LT5zY3JvbGxCeShvZmZzZXQpIHx8ICFnZXN0dXJlSGFuZGxlci0+bV9mbGlja0luZGV4KSB7
CisgICAgICAgIGdlc3R1cmVIYW5kbGVyLT5tX2ZsaWNrQW5pbWF0b3IgPSAwOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR2VzdHVy
ZUhhbmRsZXI6OmhhbmRsZUZsaWNrKGNvbnN0IEludFNpemUmIG9mZnNldCkKK3sKKyAgICBtX2Zs
aWNrT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fZmxpY2tJbmRleCA9IG1fZmxpY2tEdXJhdGlvbiA9
IDEgLyBlY29yZV9hbmltYXRvcl9mcmFtZXRpbWVfZ2V0KCk7CisgICAgbV9mbGlja0FuaW1hdG9y
ID0gZWNvcmVfYW5pbWF0b3JfYWRkKGZsaWNrQW5pbWF0b3JDYWxsYmFjaywgdGhpcyk7CiB9CiAK
IHZvaWQgR2VzdHVyZUhhbmRsZXI6OmhhbmRsZVBpbmNoU3RhcnRlZChjb25zdCBWZWN0b3I8SW50
UG9pbnQ+JikKQEAgLTE5Niw2ICszMTYsOCBAQCB2b2lkIEdlc3R1cmVSZWNvZ25pemVyOjpub0dl
c3R1cmUoV0tFdmVudFR5cGUgdHlwZSwgV0tBcnJheVJlZiB0b3VjaFBvaW50cykKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIGtXS0V2ZW50VHlwZVRvdWNoU3RhcnQ6CisgICAgICAg
IG1fZ2VzdHVyZUhhbmRsZXItPnJlc2V0KCk7CisKICAgICAgICAgbV9yZWNvZ25pemVyRnVuY3Rp
b24gPSAmR2VzdHVyZVJlY29nbml6ZXI6OnNpbmdsZVRhcEdlc3R1cmU7CiAgICAgICAgIG1fZmly
c3RQcmVzc2VkUG9pbnQgPSB0b0ludFBvaW50KGdldFBvaW50QXRJbmRleCh0b3VjaFBvaW50cywg
MCkpOwogICAgICAgICBBU1NFUlQoIW1fdGFwQW5kSG9sZFRpbWVyKTsKQEAgLTM0MCw2ICs0NjIs
NyBAQCB2b2lkIEdlc3R1cmVSZWNvZ25pemVyOjpwaW5jaEdlc3R1cmUoV0tFdmVudFR5cGUgdHlw
ZSwgV0tBcnJheVJlZiB0b3VjaFBvaW50cykKIHZvaWQgR2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0
KCkKIHsKICAgICBzdG9wVGFwVGltZXJzKCk7CisgICAgbV9nZXN0dXJlSGFuZGxlci0+cmVzZXQo
KTsKIAogICAgIG1fcmVjb2duaXplckZ1bmN0aW9uID0gJkdlc3R1cmVSZWNvZ25pemVyOjpub0dl
c3R1cmU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCmluZGV4IDFjMWNhNGEuLmI3NDliMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YlZpZXcuY3BwCkBAIC0xMTQsNiArMTE0LDE2IEBAIHZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShi
b29sIHZpc2libGUpCiAgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5
OjpWaWV3SXNWaXNpYmxlKTsKIH0KIAordm9pZCBXZWJWaWV3OjpzZXRDb250ZW50UG9zaXRpb24o
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgRmxvYXRSZWN0IGJv
dW5kczsKKyAgICBib3VuZHMuc2V0V2lkdGgoc3RkOjptYXgoMC5mLCBjZWlsZihtX2NvbnRlbnRz
U2l6ZS53aWR0aCgpICogbV9jb250ZW50U2NhbGVGYWN0b3IpKSAtIHNpemUoKS53aWR0aCgpKTsK
KyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWF4KDAuZiwgY2VpbGYobV9jb250ZW50c1NpemUu
aGVpZ2h0KCkgKiBtX2NvbnRlbnRTY2FsZUZhY3RvcikpIC0gc2l6ZSgpLmhlaWdodCgpKTsKKwor
ICAgIG1fY29udGVudFBvc2l0aW9uLnNldFgoY2xhbXBUbyhwb3NpdGlvbi54KCksIGJvdW5kcy54
KCksIGJvdW5kcy53aWR0aCgpKSk7CisgICAgbV9jb250ZW50UG9zaXRpb24uc2V0WShjbGFtcFRv
KHBvc2l0aW9uLnkoKSwgYm91bmRzLnkoKSwgYm91bmRzLmhlaWdodCgpKSk7Cit9CisKIHZvaWQg
V2ViVmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkp
CiB7CiAgICAgbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LnRyYW5zbGF0ZSh0eCwgdHkpOwpAQCAtMjMwLDcgKzI0MCw3IEBAIEFmZmluZVRyYW5zZm9ybSBX
ZWJWaWV3Ojp0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKIHsKICAgICBGbG9hdFBvaW50IHBvc2l0
aW9uID0gLW1fY29udGVudFBvc2l0aW9uOwogICAgIGZsb2F0IGVmZmVjdGl2ZVNjYWxlID0gbV9j
b250ZW50U2NhbGVGYWN0b3IgKiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgcG9z
aXRpb24uc2NhbGUoZWZmZWN0aXZlU2NhbGUsIGVmZmVjdGl2ZVNjYWxlKTsKKyAgICBwb3NpdGlv
bi5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX3VzZXJW
aWV3cG9ydFRyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHBvc2l0aW9uLngoKSwg
cG9zaXRpb24ueSgpKTsKQEAgLTI1Nyw3ICsyNjcsOSBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZVZp
ZXdwb3J0U2l6ZSgpCiAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFn
ZSgpLT5kcmF3aW5nQXJlYSgpKSB7CiAgICAgICAgIC8vIFdlYiBQcm9jZXNzIGV4cGVjdHMgc2l6
ZXMgaW4gVUkgdW5pdHMsIGFuZCBub3QgcmF3IGRldmljZSB1bml0cy4KICAgICAgICAgZHJhd2lu
Z0FyZWEtPnNldFNpemUocm91bmRlZEludFNpemUoZGlwU2l6ZSgpKSwgSW50U2l6ZSgpLCBJbnRT
aXplKCkpOwotICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdChjb250ZW50UG9z
aXRpb24oKSwgdmlzaWJsZUNvbnRlbnRzU2l6ZSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb3Np
dGlvbiA9IGNvbnRlbnRQb3NpdGlvbigpOworICAgICAgICBwb3NpdGlvbi5zY2FsZSgxIC8gbV9j
b250ZW50U2NhbGVGYWN0b3IsIDEgLyBtX2NvbnRlbnRTY2FsZUZhY3Rvcik7CisgICAgICAgIEZs
b2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KHBvc2l0aW9uLCB2aXNpYmxlQ29udGVudHNTaXpl
KCkpOwogICAgICAgICB2aXNpYmxlQ29udGVudHNSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBjb250ZW50c1NpemUoKSkpOwogICAgICAgICBkcmF3aW5nQXJlYS0+c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCBGbG9hdFBvaW50KCkpOwogICAg
IH0KQEAgLTQxMCw2ICs0MjIsMTMgQEAgdm9pZCBXZWJWaWV3Ojpkb25lV2l0aEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCit2b2lkIFdlYlZpZXc6OmRvbmVXaXRo
R2VzdHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYsIGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIHZvaWQg
V2ViVmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2
ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaAppbmRleCBhZDM5YmIxLi5h
MDU1YjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViVmlldy5oCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldENvbnRlbnRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikgeyBtX2NvbnRlbnRTY2Fs
ZUZhY3RvciA9IHNjYWxlRmFjdG9yOyB9CiAgICAgZmxvYXQgY29udGVudFNjYWxlRmFjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50U2NhbGVGYWN0b3I7IH0KIAotICAgIHZvaWQgc2V0Q29u
dGVudFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fY29u
dGVudFBvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldENvbnRlbnRQb3NpdGlvbihj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgY29udGVudFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UG9zaXRpb247IH0K
IAogICAgIHZvaWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUg
dHkpOwpAQCAtMTczLDYgKzE3Myw5IEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2Vi
VG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBPVkVSUklERTsKICNlbmRpZgorI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGRvbmVXaXRoR2VzdHVyZUV2ZW50KGNv
bnN0IFdlYkdlc3R1cmVFdmVudCYsIGJvb2wpIE9WRVJSSURFOworI2VuZGlmCiAKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdl
YlBhZ2VQcm94eSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0
TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIE9WRVJSSURF
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIuY3BwCmluZGV4IDYyNTRjZjcuLjNmY2UyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKQEAgLTI1Nyw4ICsyNTcsNyBA
QCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmRpZENoYW5nZUNvbnRlbnRzVmlzaWJpbGl0
eShjb25zdCBGbG9hdFBvaW50JiBwb3NpdAogewogICAgIGlmICghbV9wZW5kaW5nUG9zaXRpb25D
aGFuZ2UpCiAgICAgICAgIG1fY29udGVudHNQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICgh
bV9wZW5kaW5nU2NhbGVDaGFuZ2UpCi0gICAgICAgIGFwcGx5U2NhbGVBZnRlclJlbmRlcmluZ0Nv
bnRlbnRzKHNjYWxlKTsKKyAgICBhcHBseVNjYWxlQWZ0ZXJSZW5kZXJpbmdDb250ZW50cyhzY2Fs
ZSk7CiAKICAgICBzeW5jVmlzaWJsZUNvbnRlbnRzKHRyYWplY3RvcnlWZWN0b3IpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9FYXNpbmdDdXJ2ZXMuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9FYXNpbmdDdXJ2ZXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Y2NmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Vhc2luZ0N1cnZlcy5jcHAKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSb2JlcnQgUGVubmVyIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1
dGhvciBub3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyAqICAgIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisg
KiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyAqIFJvYmVydCBQZW5uZXIncyBlYXNpbmcgZXF1YXRpb25zLiBodHRwOi8vd3d3LnJv
YmVydHBlbm5lci5jb20vZWFzaW5nLworICogc3RhdGljIGZ1bmN0aW9uIGVhc2VJbk91dFF1YWQg
KHQ6TnVtYmVyLCBiOk51bWJlciwgYzpOdW1iZXIsIGQ6TnVtYmVyKTpOdW1iZXIgeworICogICAg
IGlmICgodC89ZC8yKSA8IDEpIHJldHVybiBjLzIqdCp0ICsgYjsKKyAqICAgICByZXR1cm4gLWMv
MiAqICgoLS10KSoodC0yKSAtIDEpICsgYjsKKyAqIH0KKyAqLworZmxvYXQgZWFzZUluT3V0UXVh
ZChmbG9hdCB0aW1lLCBjb25zdCBmbG9hdCBiYXNlLCBjb25zdCBmbG9hdCBjb25zdGFudCwgY29u
c3QgdW5zaWduZWQgZHVyYXRpb24pCit7CisgICAgaWYgKHRpbWUgPiBkdXJhdGlvbiB8fCB0aW1l
IDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoKHRpbWUgLz0gKGR1cmF0aW9uIC8g
MikpIDwgMSkKKyAgICAgICAgcmV0dXJuIChjb25zdGFudCAvIDIpICogdGltZSAqIHRpbWUgKyBi
YXNlOworCisgICAgdGltZSAtPSAxOworICAgIHJldHVybiAtMSAqIChjb25zdGFudCAvIDIpICog
KHRpbWUgKiAodGltZSAtIDIpIC0gMSkgKyBiYXNlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9FYXNpbmdDdXJ2ZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvRWFzaW5nQ3VydmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjcyNmM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvRWFzaW5nQ3VydmVzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMSBSb2JlcnQgUGVubmVyIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycyBtYXkgYmUKKyAqICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIkFTIElTIgorICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICog
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFYXNpbmdDdXJ2ZXNf
aAorI2RlZmluZSBFYXNpbmdDdXJ2ZXNfaAorCitmbG9hdCBlYXNlSW5PdXRRdWFkKGZsb2F0IHRp
bWUsIGNvbnN0IGZsb2F0IGJhc2UsIGNvbnN0IGZsb2F0IGNvbnN0YW50LCBjb25zdCB1bnNpZ25l
ZCBkdXJhdGlvbik7CisKKyNlbmRpZiAvLyBFYXNpbmdDdXJ2ZXNfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTJiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL0V3a0dlc3R1cmVFdmVudC5jcHAKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXdr
R2VzdHVyZUV2ZW50LmgiCisKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitFd2tHZXN0dXJlRXZlbnQ6OkV3a0dlc3R1cmVFdmVudChXS0V2ZW50VHlw
ZSB0eXBlLCBXS1BvaW50IHBvc2l0aW9uLCBXS1BvaW50IHNjcmVlblBvc2l0aW9uLCBXS0V2ZW50
TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCwgV0tTaXplIGFyZWEsIGZsb2F0
IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQorICAgIDogbV9ldmVudFR5cGUodHlwZSkKKyAgICAsIG1f
bW9kaWZpZXJzKG1vZGlmaWVycykKKyAgICAsIG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKKyAgICAs
IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgLCBtX3NjcmVlblBvc2l0aW9uKHNjcmVlblBvc2l0
aW9uKQorICAgICwgbV9hcmVhKGFyZWEpCisgICAgLCBtX2RlbHRhWChkZWx0YVgpCisgICAgLCBt
X2RlbHRhWShkZWx0YVkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9Fd2tHZXN0dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvRXdrR2VzdHVyZUV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDBiZDhjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
RXdrR2VzdHVyZUV2ZW50LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEV3a0dlc3R1cmVFdmVudF9oCisjZGVmaW5lIEV3a0dlc3R1cmVFdmVudF9oCisK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNp
bmNsdWRlICJXS0V2ZW50RWZsLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEV3a0dlc3R1cmVFdmVudCA6IHB1YmxpYyBBUElPYmpl
Y3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBBUElPYmplY3Q6OlR5cGUgQVBJVHlwZSA9
IFR5cGVHZXN0dXJlRXZlbnQ7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tHZXN0dXJlRXZl
bnQ+IGNyZWF0ZShXS0V2ZW50VHlwZSB0eXBlLCBXS1BvaW50IHBvc2l0aW9uLCBXS1BvaW50IHNj
cmVlblBvc2l0aW9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFt
cCwgV0tTaXplIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tHZXN0dXJlRXZlbnQodHlwZSwgcG9zaXRpb24sIHNj
cmVlblBvc2l0aW9uLCBtb2RpZmllcnMsIHRpbWVzdGFtcCwgYXJlYSwgZGVsdGFYLCBkZWx0YVkp
KTsKKyAgICB9CisKKyAgICBXS0V2ZW50VHlwZSBldmVudFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2V2ZW50VHlwZTsgfQorICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RpZmllcnM7IH0KKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3QgeyByZXR1
cm4gbV90aW1lc3RhbXA7IH0KKyAgICBXS1BvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbjsgfQorICAgIFdLUG9pbnQgc2NyZWVuUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3NjcmVlblBvc2l0aW9uOyB9CisgICAgV0tTaXplIGFyZWEoKSBjb25zdCB7IHJldHVybiBt
X2FyZWE7IH0KKyAgICBmbG9hdCBkZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWDsgfQor
ICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsdGFZOyB9CisKK3ByaXZhdGU6
CisgICAgRXdrR2VzdHVyZUV2ZW50KFdLRXZlbnRUeXBlLCBXS1BvaW50IHBvc2l0aW9uLCBXS1Bv
aW50IHNjcmVlblBvc2l0aW9uLCBXS0V2ZW50TW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wLCBX
S1NpemUgYXJlYSwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpOworCisgICAgdmlydHVhbCBB
UElPYmplY3Q6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAgIFdL
RXZlbnRUeXBlIG1fZXZlbnRUeXBlOworICAgIFdLRXZlbnRNb2RpZmllcnMgbV9tb2RpZmllcnM7
CisgICAgZG91YmxlIG1fdGltZXN0YW1wOworICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBX
S1BvaW50IG1fc2NyZWVuUG9zaXRpb247CisgICAgV0tTaXplIG1fYXJlYTsKKyAgICBmbG9hdCBt
X2RlbHRhWDsKKyAgICBmbG9hdCBtX2RlbHRhWTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorCisjZW5kaWYgLyogRXdrR2Vz
dHVyZUV2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCmluZGV4IDIyYTQ1
YjUuLjMxNTUyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcApAQCAtMSw2ICsx
LDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMSw3IEBACiAKICNpbmNsdWRlICJQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgiCiAKKyNpbmNsdWRlICJFYXNpbmdDdXJ2
ZXMuaCIKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJv
bGxlci5oIgogCkBAIC0zNywxMyArMzksOTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBUcmFuc2l0aW9uIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxUcmFuc2l0aW9uPiBjcmVhdGUoVHJhbnNpdGlvbkNsaWVudCogY2xp
ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFuc2l0aW9uKGNsaWVu
dCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5UcmFuc2l0aW9uKCk7CisKKyAgICB2b2lkIHNldFJl
Y3RzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYmFzZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCk7CisgICAgdm9pZCBzdGFydCh1bnNpZ25lZCBkdXJhdGlvbik7
CisKK3ByaXZhdGU6CisgICAgVHJhbnNpdGlvbihUcmFuc2l0aW9uQ2xpZW50Kik7CisKKyAgICBz
dGF0aWMgRWluYV9Cb29sIGFuaW1hdG9yQ2FsbGJhY2sodm9pZCopOworICAgIGJvb2wgcHJvY2Vz
cygpOworCisgICAgVHJhbnNpdGlvbkNsaWVudCogbV9jbGllbnQ7CisgICAgRWNvcmVfQW5pbWF0
b3IqIG1fYW5pbWF0b3I7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdGFyZ2V0UmVjdDsKKyAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9iYXNlUmVjdDsKKyAgICB1bnNpZ25lZCBtX3NjYWxlRHVy
YXRpb247CisgICAgdW5zaWduZWQgbV9zY2FsZUluZGV4OworfTsKKworVHJhbnNpdGlvbjo6VHJh
bnNpdGlvbihUcmFuc2l0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQp
CisgICAgLCBtX2FuaW1hdG9yKDApCisgICAgLCBtX3NjYWxlRHVyYXRpb24oMCkKKyAgICAsIG1f
c2NhbGVJbmRleCgwKQoreworfQorCitUcmFuc2l0aW9uOjp+VHJhbnNpdGlvbigpCit7CisgICAg
aWYgKG1fYW5pbWF0b3IpCisgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChtX2FuaW1hdG9yKTsK
K30KKwordm9pZCBUcmFuc2l0aW9uOjpzZXRSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGJhc2VSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9iYXNlUmVjdCA9IGJhc2VS
ZWN0OworICAgIG1fdGFyZ2V0UmVjdCA9IHRhcmdldFJlY3Q7Cit9CisKK3ZvaWQgVHJhbnNpdGlv
bjo6c3RhcnQodW5zaWduZWQgZHVyYXRpb24pCit7CisgICAgbV9hbmltYXRvciA9IGVjb3JlX2Fu
aW1hdG9yX2FkZChhbmltYXRvckNhbGxiYWNrLCB0aGlzKTsKKyAgICBtX3NjYWxlRHVyYXRpb24g
PSBkdXJhdGlvbjsKKyAgICBtX3NjYWxlSW5kZXggPSAxOworfQorCitFaW5hX0Jvb2wgVHJhbnNp
dGlvbjo6YW5pbWF0b3JDYWxsYmFjayh2b2lkKiBkYXRhKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUcmFuc2l0aW9uKj4oZGF0YSktPnByb2Nlc3MoKTsKK30KKworYm9vbCBUcmFuc2l0aW9u
Ojpwcm9jZXNzKCkKK3sKKyAgICBGbG9hdFJlY3QgcmVjdDsKKyAgICBmbG9hdCBtdWx0aXBsaWVy
ID0gZWFzZUluT3V0UXVhZChtX3NjYWxlSW5kZXgrKywgMCwgMS4wLCBtX3NjYWxlRHVyYXRpb24p
OworICAgIHJlY3Quc2V0WChtX2Jhc2VSZWN0LngoKSArIChtX3RhcmdldFJlY3QueCgpIC0gbV9i
YXNlUmVjdC54KCkpICogbXVsdGlwbGllcik7CisgICAgcmVjdC5zZXRZKG1fYmFzZVJlY3QueSgp
ICsgKG1fdGFyZ2V0UmVjdC55KCkgLSBtX2Jhc2VSZWN0LnkoKSkgKiBtdWx0aXBsaWVyKTsKKyAg
ICByZWN0LnNldFdpZHRoKG1fYmFzZVJlY3Qud2lkdGgoKSArIChtX3RhcmdldFJlY3Qud2lkdGgo
KSAtIG1fYmFzZVJlY3Qud2lkdGgoKSkgKiBtdWx0aXBsaWVyKTsKKyAgICByZWN0LnNldEhlaWdo
dChtX2Jhc2VSZWN0LmhlaWdodCgpICsgKG1fdGFyZ2V0UmVjdC5oZWlnaHQoKSAtIG1fYmFzZVJl
Y3QuaGVpZ2h0KCkpICogbXVsdGlwbGllcik7CisKKyAgICBtX2NsaWVudC0+c2V0VHJhbnNpdGlv
blJlY3QocmVjdCk7CisKKyAgICBpZiAobV9zY2FsZUluZGV4ID4gbV9zY2FsZUR1cmF0aW9uKSB7
CisgICAgICAgIG1fYW5pbWF0b3IgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoRXdrVmlldyogdmlldykKICAgICA6IG1f
dmlldyh2aWV3KQogICAgICwgbV9jb250cm9sbGVyKDApCisgICAgLCBtX3RyYW5zaXRpb24oVHJh
bnNpdGlvbjo6Y3JlYXRlKHRoaXMpKQogewogICAgIEFTU0VSVChtX3ZpZXcpOwogfQogCitQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp+UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbCgpCit7Cit9CisKIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlk
Q2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQogewogICAgIG1fdmll
dy0+c2NoZWR1bGVVcGRhdGVEaXNwbGF5KCk7CkBAIC04MCw1ICsxNjMsNDUgQEAgdm9pZCBQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRDb250cm9sbGVyKFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXIqIGNvbnQKICAgICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwogfQogCit2b2lk
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNjYWxlVG9BcmVhV2l0aEFuaW1hdGlv
bihjb25zdCBJbnRQb2ludCYgdGFyZ2V0LCBjb25zdCBGbG9hdFJlY3QmIGFyZWEpCit7CisgICAg
QVNTRVJUKG1fY29udHJvbGxlcik7CisgICAgaWYgKCFtX2NvbnRyb2xsZXItPmFsbG93c1VzZXJT
Y2FsaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhcmVhLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBhcmVhOworICAgIHRh
cmdldFJlY3QuaW5mbGF0ZVgoc19zY2FsZU1hcmdpbik7CisgICAgV0tTaXplIHZpZXdwb3J0U2l6
ZSA9IFdLVmlld0dldFNpemUobV92aWV3LT53a1ZpZXcoKSk7CisKKyAgICBmbG9hdCB0YXJnZXRT
Y2FsZTsKKyAgICBpZiAoc3RkOjphYnMobV9jb250cm9sbGVyLT5taW5pbXVtU2NhbGUoKSAtIG1f
Y29udHJvbGxlci0+Y3VycmVudFNjYWxlKCkpIDwgMC4wMDAxKQorICAgICAgICB0YXJnZXRTY2Fs
ZSA9IG1fY29udHJvbGxlci0+aW5uZXJCb3VuZGVkVmlld3BvcnRTY2FsZSh2aWV3cG9ydFNpemUu
d2lkdGggLyB0YXJnZXRSZWN0LndpZHRoKCkpOworICAgIGVsc2UKKyAgICAgICAgdGFyZ2V0U2Nh
bGUgPSBtX2NvbnRyb2xsZXItPm1pbmltdW1TY2FsZSgpOworCisgICAgRmxvYXRSZWN0IG5ld0Nv
bnRlbnRzUmVjdCh0YXJnZXRSZWN0LmNlbnRlcigpLCBGbG9hdFNpemUodmlld3BvcnRTaXplLndp
ZHRoIC8gdGFyZ2V0U2NhbGUsIHZpZXdwb3J0U2l6ZS5oZWlnaHQgLyB0YXJnZXRTY2FsZSkpOwor
ICAgIGlmICh0YXJnZXRSZWN0LmhlaWdodCgpID4gbmV3Q29udGVudHNSZWN0LmhlaWdodCgpKQor
ICAgICAgICBuZXdDb250ZW50c1JlY3Quc2V0WSh0YXJnZXQueSgpKTsKKyAgICBuZXdDb250ZW50
c1JlY3QubW92ZSgtbmV3Q29udGVudHNSZWN0LndpZHRoKCkgLyAyLCAtbmV3Q29udGVudHNSZWN0
LmhlaWdodCgpIC8gMik7CisgICAgbmV3Q29udGVudHNSZWN0LnNldExvY2F0aW9uKG1fY29udHJv
bGxlci0+Ym91bmRDb250ZW50c1Bvc2l0aW9uQXRTY2FsZShuZXdDb250ZW50c1JlY3QubG9jYXRp
b24oKSwgdGFyZ2V0U2NhbGUpKTsKKworICAgIFdLUG9pbnQgY29udGVudHNQb3NpdGlvbiA9IFdL
Vmlld0dldENvbnRlbnRQb3NpdGlvbihtX3ZpZXctPndrVmlldygpKTsKKyAgICBmbG9hdCBjb250
ZW50U2NhbGUgPSBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IobV92aWV3LT53a1ZpZXcoKSk7
CisgICAgRmxvYXRSZWN0IGN1cnJlbnRDb250ZW50c1JlY3QgPSBGbG9hdFJlY3QoY29udGVudHNQ
b3NpdGlvbi54LCBjb250ZW50c1Bvc2l0aW9uLnksIHZpZXdwb3J0U2l6ZS53aWR0aCwgdmlld3Bv
cnRTaXplLmhlaWdodCk7CisgICAgY3VycmVudENvbnRlbnRzUmVjdC5zY2FsZSgxIC8gY29udGVu
dFNjYWxlKTsKKyAgICBtX3RyYW5zaXRpb24tPnNldFJlY3RzKGN1cnJlbnRDb250ZW50c1JlY3Qs
IG5ld0NvbnRlbnRzUmVjdCk7CisgICAgbV90cmFuc2l0aW9uLT5zdGFydChzX3NjYWxlRHVyYXRp
b24pOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFRyYW5z
aXRpb25SZWN0KGNvbnN0IEZsb2F0UmVjdCYgY29udGVudHNSZWN0KQoreworICAgIFdLU2l6ZSBz
aXplID0gV0tWaWV3R2V0U2l6ZShtX3ZpZXctPndrVmlldygpKTsKKyAgICBzZXRQYWdlU2NhbGVG
YWN0b3Ioc2l6ZS53aWR0aCAvIGNvbnRlbnRzUmVjdC53aWR0aCgpKTsKKyAgICBzZXRWaWV3cG9y
dFBvc2l0aW9uKGNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmwuaAppbmRleCBlNDA0NWI2Li5mZjY3NTc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmwuaApAQCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwy
MCArMjksMzAgQEAKICNkZWZpbmUgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbF9oCiAK
ICNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8RWNv
cmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIGNsYXNzIEV3a1Zp
ZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50RWZsIDogcHVibGljIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQgeworY2xhc3Mg
VHJhbnNpdGlvbjsKKworY2xhc3MgVHJhbnNpdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+VHJhbnNpdGlvbkNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2l0
aW9uUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KK307CisKK2NsYXNzIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwgOiBwdWJsaWMgUGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudCwgcHVibGljIFRyYW5zaXRpb25DbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3
KiB2aWV3SW1wbCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbCh2aWV3SW1wbCkpOwogICAgIH0KLSAgICB2aXJ0dWFsIH5Q
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKCkgeyB9CisgICAgdmlydHVhbCB+UGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdw
b3J0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQpIE9WRVJSSURFOwpAQCAtNTIsMTIg
KzYzLDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXIqKSBPVkVSUklERTsKIAorICAgIHZvaWQgc2NhbGVUb0FyZWFXaXRo
QW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CisKKyAgICAvLyBUcmFuc2l0aW9uQ2xpZW50LgorICAgIHZvaWQgc2V0VHJhbnNpdGlv
blJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbChFd2tWaWV3Kik7CiAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc19zY2FsZUR1cmF0aW9uID0gMjA7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfc2NhbGVNYXJnaW4gPSA1OworCiAgICAgRXdrVmlldyogbV92aWV3OwogICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9jb250ZW50UG9zaXRpb247CiAgICAgUGFnZVZpZXdwb3J0
Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIE93blB0cjxUcmFuc2l0aW9uPiBtX3RyYW5z
aXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwCmluZGV4IDU2NjBiZTEuLmUzNTA5MTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcApAQCAtNDMsNiArNDMsMTAg
QEAKICNpbmNsdWRlICJFd2tUb3VjaEV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKKyNpbmNsdWRlICJFd2tHZXN0dXJlRXZlbnQuaCIKKyNlbmRpZgorCiB1c2lu
ZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC0xMjQsNCArMTI4LDEzIEBAIHZvaWQgV2ViVmlld0VmbDo6c2VuZFRvdWNoRXZlbnQoRXdr
VG91Y2hFdmVudCogdG91Y2hFdmVudCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQordm9pZCBXZWJWaWV3RWZsOjpzZW5kR2VzdHVyZUV2ZW50KGNvbnN0IEV3a0dlc3R1
cmVFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKGV2ZW50KTsKKyAgICBXZWJHZXN0dXJlRXZl
bnQgZ2VzdHVyZSh0b1dlYkV2ZW50VHlwZShldmVudC0+ZXZlbnRUeXBlKCkpLCB0cmFuc2Zvcm1G
cm9tU2NlbmUoKS5tYXBQb2ludCh0b0ludFBvaW50KGV2ZW50LT5wb3NpdGlvbigpKSksIHRvSW50
UG9pbnQoZXZlbnQtPnNjcmVlblBvc2l0aW9uKCkpLCB0b1dlYkV2ZW50TW9kaWZpZXJzKGV2ZW50
LT5tb2RpZmllcnMoKSksIGV2ZW50LT50aW1lc3RhbXAoKSwgdG9JbnRTaXplKGV2ZW50LT5hcmVh
KCkpLCBGbG9hdFBvaW50KGV2ZW50LT5kZWx0YVgoKSwgZXZlbnQtPmRlbHRhWSgpKSk7CisgICAg
bV9wYWdlLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZSk7Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXdFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5o
CmluZGV4IGQ3MTcyMzQuLmU2M2IzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlld0VmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViVmlld0VmbC5oCkBAIC00OCw2ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kVG91
Y2hFdmVudChFd2tUb3VjaEV2ZW50Kik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VW
RU5UUykKKyAgICB2b2lkIHNlbmRHZXN0dXJlRXZlbnQoY29uc3QgRXdrR2VzdHVyZUV2ZW50Kik7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3RWZsKFdlYkNvbnRleHQqLCBXZWJQYWdl
R3JvdXAqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCAxYmI1ODc0Li41ZWMwYzQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQpAQCAtMjcyLDMgKzI3Miw3IEBAIGlmIChFTkFCTEVfSU5ERVhFRF9E
QVRBQkFTRSkKICAgICBzZXQoV1RGX1VTRV9MRVZFTERCIDEpCiAgICAgYWRkX2RlZmluaXRpb25z
KC1EV1RGX1VTRV9MRVZFTERCPTEpCiBlbmRpZiAoKQorCitpZiAoRU5BQkxFX1dFQktJVDIgQU5E
IFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBhZGRfZGVmaW5pdGlvbnMoLURFTkFC
TEVfR0VTVFVSRV9FVkVOVFM9MSkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9lZmwvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCAwM2Y5
Y2Y4Li43NmU4ZmU4MyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBAIC0xODI2LDYgKzE4MjYsMTAgQEAg
c3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0ICpvcGVuZXIs
IGNvbnN0IGNoYXIgKnVybCwgaW50IHcKICAgICBld2tfdmlld19zb3VyY2VfbW9kZV9zZXQod2lu
ZG93LT5ld2tfdmlldywgdmlld19tb2RlKTsKICAgICBld2tfdmlld191c2VyX2FnZW50X3NldCh3
aW5kb3ctPmV3a192aWV3LCB1c2VyX2FnZW50X3N0cmluZyk7CiAKKyAgICAvLyBldW5taQorICAg
IGV3a192aWV3X3RvdWNoX2V2ZW50c19lbmFibGVkX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5B
X1RSVUUpOworICAgIGV3a192aWV3X21vdXNlX2V2ZW50c19lbmFibGVkX3NldCh3aW5kb3ctPmV3
a192aWV3LCBFSU5BX0ZBTFNFKTsKKwogICAgIC8qIFNldCB0aGUgem9vbSBsZXZlbCB0byBkZWZh
dWx0ICovCiAgICAgd2luZG93LT5jdXJyZW50X3pvb21fbGV2ZWwgPSBERUZBVUxUX1pPT01fTEVW
RUw7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>