<?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>70529</bug_id>
          
          <creation_ts>2011-10-20 11:30:46 -0700</creation_ts>
          <short_desc>[Qt][WK2] Remove QtWidgets dependency in MiniBrowser</short_desc>
          <delta_ts>2011-10-26 01:29:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70525</dependson>
          <blocked>70315</blocked>
    
    <blocked>70537</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>hausmann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>487731</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-20 11:30:46 -0700</bug_when>
    <thetext>This is a requirement for creating an entirely QML based solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487764</commentid>
    <comment_count>1</comment_count>
      <attachid>111821</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-20 12:16:53 -0700</bug_when>
    <thetext>Created attachment 111821
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487812</commentid>
    <comment_count>2</comment_count>
      <attachid>111832</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-20 13:13:48 -0700</bug_when>
    <thetext>Created attachment 111832
patch for review.

fixed ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489964</commentid>
    <comment_count>3</comment_count>
      <attachid>112322</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-25 04:59:04 -0700</bug_when>
    <thetext>Created attachment 112322
patch for review. - save touch mocking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489970</commentid>
    <comment_count>4</comment_count>
      <attachid>112322</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-25 05:22:13 -0700</bug_when>
    <thetext>Comment on attachment 112322
patch for review. - save touch mocking.

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

&gt; Tools/MiniBrowser/qt/MiniBrowserApplication.cpp:-165
&gt; -        return true;

if we return true here, then mouse events will not be delivered anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489974</commentid>
    <comment_count>5</comment_count>
      <attachid>112322</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-25 05:26:27 -0700</bug_when>
    <thetext>Comment on attachment 112322
patch for review. - save touch mocking.

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

r=me

&gt; Tools/ChangeLog:9
&gt; +        Change BrowserWindow to derive from QSGView instead of
&gt; +        QMainWindow. QSGView is used as a top level window that

We&apos;re going to have the land this before Friday, otherwise the patch will need work to adapt to the QSG* -&gt; QQuick* renaming.

&gt; Tools/MiniBrowser/qt/main.cpp:33
&gt; +#include &lt;QDir&gt;

This seems unnecessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489981</commentid>
    <comment_count>6</comment_count>
      <attachid>112322</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-25 05:34:21 -0700</bug_when>
    <thetext>Comment on attachment 112322
patch for review. - save touch mocking.

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

&gt;&gt; Tools/MiniBrowser/qt/main.cpp:33
&gt;&gt; +#include &lt;QDir&gt;
&gt; 
&gt; This seems unnecessary?

No, this one is indeed necessary. It was transitive fulfilled by including MiniBrowserApplication.h, which included &lt;QFileDialog&gt;. (And that was removed by this patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490662</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-26 01:29:37 -0700</bug_when>
    <thetext>Committed r98448: &lt;http://trac.webkit.org/changeset/98448&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111821</attachid>
            <date>2011-10-20 12:16:53 -0700</date>
            <delta_ts>2011-10-20 13:13:48 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>70525_20111020-211525.patch</filename>
            <type>text/plain</type>
            <size>29222</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ODE5
YmE2Li5lY2QzOTk3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsNDIgQEAKIDIwMTEtMTAtMjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5v
LmFsYmlzc2VyQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRdW1dLMl0gUmVtb3ZlIFF0V2lkZ2V0
cyBkZXBlbmRlbmN5IGluIE1pbmlCcm93c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MDUyOQorCisgICAgICAgIFJlbW92ZSBvYnNvbGV0ZSBjb2Rl
IGZvciBhIG5ldyBRTUwgYmFzZWQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgb2YgTWluaUJyb3dz
ZXIuCisgICAgICAgIENoYW5nZSBCcm93c2VyV2luZG93IHRvIGRlcml2ZSBmcm9tIFFTR1ZpZXcg
aW5zdGVhZCBvZgorICAgICAgICBRTWFpbldpbmRvdy4gUVNHVmlldyBpcyB1c2VkIGFzIGEgdG9w
IGxldmVsIHdpbmRvdyB0aGF0CisgICAgICAgIHByb3ZpZGVzIHRoZSBjb250YWluZXIgZm9yIHBs
YWNpbmcgUU1MIGNvbnRlbnQuCisgICAgICAgIE1ha2UgTWluaUJyb3dzZXJBcHBsaWNhdGlvbiBk
ZXJpdmUgZnJvbSBRR3VpQXBwbGljYXRpb24KKyAgICAgICAgaW5zdGVhZCBvZiBRQXBwbGljYXRp
b24uCisKKyAgICAgICAgUGF0Y2ggYnkgSm9jZWx5biBUdXJjb3R0ZSA8am9jZWx5bi50dXJjb3R0
ZUBub2tpYS5jb20+LAorICAgICAgICAgICAgICAgICBaZW5vIEFsYmlzc2VyIDx6ZW5vLmFsYmlz
c2VyQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyVmlldy5oOiBSZW1vdmVkLgorICAgICAgICAqIE1p
bmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6
QnJvd3NlcldpbmRvdyk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojpsb2FkKToKKyAgICAgICAg
KEJyb3dzZXJXaW5kb3c6OnNjcmVlbnNob3QpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6bG9h
ZFVSTExpc3RGcm9tRmlsZSk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojp1cGRhdGVVc2VyQWdl
bnRMaXN0KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6On5Ccm93c2VyV2luZG93KToKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93Lmg6CisgICAgICAgICogTWluaUJyb3dz
ZXIvcXQvTWluaUJyb3dzZXIucHJvOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyQXBwbGljYXRpb24uY3BwOgorICAgICAgICAoTWluaUJyb3dzZXJBcHBsaWNhdGlvbjo6TWlu
aUJyb3dzZXJBcHBsaWNhdGlvbik6CisgICAgICAgIChNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpu
b3RpZnkpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24u
aDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwOgorICAgICAgICAoVXJs
TG9hZGVyOjpVcmxMb2FkZXIpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L21haW4uY3BwOgor
CisyMDExLTEwLTIwICBaZW5vIEFsYmlzc2VyICA8emVuby5hbGJpc3NlckBub2tpYS5jb20+CisK
ICAgICAgICAgW1F0XVtXSzJdIFJlbW92ZSBRQWN0aW9uIGZyb20gTWluaUJyb3dzZXIKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTI1CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL3F0L0Jyb3dzZXJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjFjNmYyYy4uMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyVmlldy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiQnJvd3NlclZpZXcuaCIKLQotI2luY2x1ZGUgPFFH
cmFwaGljc1NjZW5lPgotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXNnaXRlbS5oPgotI2luY2x1
ZGUgPFFSZXNpemVFdmVudD4KLSNpbmNsdWRlIDxxZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRl
IDxxdG91Y2h3ZWJ2aWV3Lmg+Ci0jaW5jbHVkZSA8cXRvdWNod2VicGFnZS5oPgotI2luY2x1ZGUg
PHF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgotCi1Ccm93c2VyVmlldzo6QnJvd3NlclZpZXco
Ym9vbCB1c2VUb3VjaFdlYlZpZXcsIFFXaW5kb3cqIHBhcmVudCkKLSAgICA6IFFTR0NhbnZhcyhw
YXJlbnQpCi0gICAgLCBtX2l0ZW0oMCkKLXsKLSAgICBpZiAodXNlVG91Y2hXZWJWaWV3KQotICAg
ICAgICBtX2l0ZW0gPSBuZXcgUVRvdWNoV2ViVmlldyhyb290SXRlbSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faXRlbSA9IG5ldyBRRGVza3RvcFdlYlZpZXcocm9vdEl0ZW0oKSk7Ci19Ci0KLUJy
b3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcoKQotewotICAgIGRlbGV0ZSBtX2l0ZW07Ci0gICAgbV9p
dGVtID0gMDsKLX0KLQotdm9pZCBCcm93c2VyVmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50
KiBldmVudCkKLXsKLSAgICBRU0dDYW52YXM6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKLSAgICBtX2l0
ZW0tPnNldFgoMCk7Ci0gICAgbV9pdGVtLT5zZXRZKDApOwotICAgIG1faXRlbS0+c2V0U2l6ZShl
dmVudC0+c2l6ZSgpKTsKLX0KLQotdm9pZCBCcm93c2VyVmlldzo6bG9hZChjb25zdCBRU3RyaW5n
JiB1cmxTdHJpbmcpCi17Ci0gICAgUVVybCB1cmwoUVVybDo6ZnJvbVVzZXJJbnB1dCh1cmxTdHJp
bmcpKTsKLQotICAgIGlmIChkZXNrdG9wV2ViVmlldygpKQotICAgICAgICBkZXNrdG9wV2ViVmll
dygpLT5sb2FkKHVybCk7Ci0gICAgZWxzZSBpZiAodG91Y2hXZWJWaWV3KCkpCi0gICAgICAgIHRv
dWNoV2ViVmlldygpLT5wYWdlKCktPmxvYWQodXJsKTsKLX0KLQotUVNHSXRlbSogQnJvd3NlclZp
ZXc6OnZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZW07Ci19Ci0KLVFUb3VjaFdlYlZp
ZXcqIEJyb3dzZXJWaWV3Ojp0b3VjaFdlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBxb2Jq
ZWN0X2Nhc3Q8UVRvdWNoV2ViVmlldyo+KG1faXRlbSk7Ci19Ci0KLVFEZXNrdG9wV2ViVmlldyog
QnJvd3NlclZpZXc6OmRlc2t0b3BXZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcW9iamVj
dF9jYXN0PFFEZXNrdG9wV2ViVmlldyo+KG1faXRlbSk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmggYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93
c2VyVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTVlY2RiLi4wMDAwMDAw
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEJyb3dzZXJWaWV3X2gKLSNkZWZpbmUgQnJvd3NlclZpZXdfaAotCi0jaW5jbHVkZSA8
UUFjdGlvbj4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FzZ2NhbnZhcy5oPgotI2luY2x1ZGUg
PHF3ZWJraXR0eXBlcy5oPgotCi1jbGFzcyBRRGVza3RvcFdlYlZpZXc7Ci1jbGFzcyBRU0dJdGVt
OwotY2xhc3MgUVRvdWNoV2ViVmlldzsKLQotY2xhc3MgQnJvd3NlclZpZXcgOiBwdWJsaWMgUVNH
Q2FudmFzIHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgQnJvd3NlclZpZXcoYm9vbCB1
c2VUb3VjaFdlYlZpZXcsIFFXaW5kb3cqIHBhcmVudCA9IDApOwotICAgIHZpcnR1YWwgfkJyb3dz
ZXJWaWV3KCk7Ci0KLSAgICB2b2lkIGxvYWQoY29uc3QgUVN0cmluZyYpOwotICAgIFFTR0l0ZW0q
IHZpZXcoKSBjb25zdDsKLQotICAgIFFUb3VjaFdlYlZpZXcqIHRvdWNoV2ViVmlldygpIGNvbnN0
OwotICAgIFFEZXNrdG9wV2ViVmlldyogZGVza3RvcFdlYlZpZXcoKSBjb25zdDsKLQotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgdm9pZCByZXNpemVFdmVudChRUmVzaXplRXZlbnQqKTsKLQotcHJp
dmF0ZToKLSAgICBRU0dJdGVtKiBtX2l0ZW07Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIv
cXQvQnJvd3NlcldpbmRvdy5jcHAKaW5kZXggMzExNDU1Mi4uZWU5MGZhOCAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKKysrIGIvVG9vbHMvTWluaUJy
b3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKQEAgLTMzLDQ4ICszMyw5IEBACiAjaW5jbHVkZSAi
cXRvdWNod2Vidmlldy5oIgogI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKIAotI2lmIDAKLS8v
IEZJWE1FCi1zdGF0aWMgUVdLUGFnZSogbmV3UGFnZUZ1bmN0aW9uKFFXS1BhZ2UqIHBhZ2UpCi17
Ci0gICAgQnJvd3NlcldpbmRvdyogd2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3coKTsKLSAgICBy
ZXR1cm4gd2luZG93LT5wYWdlKCk7Ci19Ci0jZW5kaWYKLQotV2luZG93V3JhcHBlcjo6V2luZG93
V3JhcHBlcihRV2luZG93KiB3aW5kb3csIFFXaWRnZXQqIHdpZGdldCkKLSAgICA6IFFXaWRnZXQo
d2lkZ2V0KQotICAgICwgbV93aW5kb3cod2luZG93KQotewotICAgIC8vIFRocm90dGxlIHJlc2l6
ZSBldmVudHMgYSBiaXQKLSAgICBtX3Jlc2l6ZVRpbWVyLnNldEludGVydmFsKDE2KTsKLSAgICBt
X3Jlc2l6ZVRpbWVyLnNldFNpbmdsZVNob3QodHJ1ZSk7Ci0gICAgY29ubmVjdCgmbV9yZXNpemVU
aW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNMT1QoZG9SZXNpemUoKSkpOwotICAgIG1f
d2luZG93LT5zZXRXaW5kb3dGbGFncyhRdDo6RnJhbWVsZXNzV2luZG93SGludCk7Ci19Ci0KLXZv
aWQgV2luZG93V3JhcHBlcjo6c2hvd0V2ZW50KFFTaG93RXZlbnQqIGV2ZW50KQotewotICAgIFFX
aWRnZXQ6OnNob3dFdmVudChldmVudCk7Ci0gICAgbV93aW5kb3ctPnNldFBhcmVudCh3aW5kb3co
KS0+d2luZG93SGFuZGxlKCkpOwotICAgIG1fd2luZG93LT5zaG93KCk7Ci19Ci0KLXZvaWQgV2lu
ZG93V3JhcHBlcjo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50KiBldmVudCkKLXsKLSAgICBRV2lk
Z2V0OjpyZXNpemVFdmVudChldmVudCk7Ci0gICAgaWYgKCFtX3Jlc2l6ZVRpbWVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIG1fcmVzaXplVGltZXIuc3RhcnQoKTsKLX0KLQotdm9pZCBXaW5kb3dXcmFw
cGVyOjpkb1Jlc2l6ZSgpCi17Ci0gICAgbV93aW5kb3ctPnNldEdlb21ldHJ5KFFSZWN0KG1hcFRv
KHdpbmRvdygpLCBRUG9pbnQoMCwgMCkpLCBzaXplKCkpKTsKLX0KIAogQnJvd3NlcldpbmRvdzo6
QnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogICAgIDogbV91cmxMb2FkZXIo
MCkKLSAgICAsIG1fYnJvd3NlcigwKQogewogICAgIGlmIChvcHRpb25zKQogICAgICAgICBtX3dp
bmRvd09wdGlvbnMgPSAqb3B0aW9uczsKQEAgLTgzLDc2ICs0NCw4IEBAIEJyb3dzZXJXaW5kb3c6
OkJyb3dzZXJXaW5kb3coV2luZG93T3B0aW9ucyogb3B0aW9ucykKICAgICAgICAgbV93aW5kb3dP
cHRpb25zID0gdG1wT3B0aW9uczsKICAgICB9CiAKLSAgICBtX2Jyb3dzZXIgPSBuZXcgQnJvd3Nl
clZpZXcobV93aW5kb3dPcHRpb25zLnVzZVRvdWNoV2ViVmlldyk7Ci0KLSAgICBzZXRBdHRyaWJ1
dGUoUXQ6OldBX0RlbGV0ZU9uQ2xvc2UpOwotCi0gICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05B
TChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpLCBTTE9UKG9uTG9hZFByb2dyZXNzQ2hhbmdlZChp
bnQpKSk7Ci0gICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmlu
ZykpLCBTTE9UKHNldFdpbmRvd1RpdGxlKFFTdHJpbmcpKSk7Ci0gICAgY29ubmVjdCh3ZWJWaWV3
KCksIFNJR05BTCh1cmxDaGFuZ2VkKFFVcmwpKSwgU0xPVCh1cmxDaGFuZ2VkKFFVcmwpKSk7Ci0K
LSAgICBpZiAobV93aW5kb3dPcHRpb25zLnByaW50TG9hZGVkVXJscykKLSAgICAgICAgY29ubmVj
dCh3ZWJWaWV3KCksIFNJR05BTCh1cmxDaGFuZ2VkKFFVcmwpKSwgdGhpcywgU0xPVChwcmludFVS
TChRVXJsKSkpOwotCi0gICAgaWYgKFFEZXNrdG9wV2ViVmlldyogY29uc3QgZGVza3RvcFdlYlZp
ZXcgPSBtX2Jyb3dzZXItPmRlc2t0b3BXZWJWaWV3KCkpIHsKLSAgICAgICAgY29ubmVjdChkZXNr
dG9wV2ViVmlldywgU0lHTkFMKHN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2VkKFFTdHJpbmcpKSwgc3Rh
dHVzQmFyKCksIFNMT1Qoc2hvd01lc3NhZ2UoUVN0cmluZykpKTsKLSAgICAgICAgY29ubmVjdChk
ZXNrdG9wV2ViVmlldywgU0lHTkFMKGxpbmtIb3ZlcmVkKFFVcmwsIFFTdHJpbmcpKSwgdGhpcywg
U0xPVChvbkxpbmtIb3ZlcmVkKFFVcmwsIFFTdHJpbmcpKSk7Ci0gICAgfQotCi0gICAgc2V0Q2Vu
dHJhbFdpZGdldChuZXcgV2luZG93V3JhcHBlcihtX2Jyb3dzZXIsIHRoaXMpKTsKLSAgICBjZW50
cmFsV2lkZ2V0KCktPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKLQotICAgIFFNZW51
KiBmaWxlTWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJkZpbGUiKTsKLSAgICBmaWxlTWVudS0+
YWRkQWN0aW9uKCJOZXcgV2luZG93IiwgdGhpcywgU0xPVChuZXdXaW5kb3coKSksIFFLZXlTZXF1
ZW5jZTo6TmV3KTsKLSAgICBmaWxlTWVudS0+YWRkQWN0aW9uKCJPcGVuIEZpbGUiLCB0aGlzLCBT
TE9UKG9wZW5GaWxlKCkpLCBRS2V5U2VxdWVuY2U6Ok9wZW4pOwotICAgIGZpbGVNZW51LT5hZGRT
ZXBhcmF0b3IoKTsKLSAgICBmaWxlTWVudS0+YWRkQWN0aW9uKCJRdWl0IiwgdGhpcywgU0xPVChj
bG9zZSgpKSk7Ci0KLSNpZiAwCi0gICAgUU1lbnUqIGVkaXRNZW51ID0gbWVudUJhcigpLT5hZGRN
ZW51KCImRWRpdCIpOwotICAgIFFBY3Rpb24qIHVuZG8gPSBwYWdlKCktPmFjdGlvbihRV0tQYWdl
OjpVbmRvKTsKLSAgICB1bmRvLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUUtleVNlcXVlbmNl
OjpVbmRvKSk7Ci0gICAgZWRpdE1lbnUtPmFkZEFjdGlvbih1bmRvKTsKLSAgICBRQWN0aW9uKiBy
ZWRvID0gcGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6UmVkbyk7Ci0gICAgcmVkby0+c2V0U2hvcnRj
dXQoUUtleVNlcXVlbmNlKFFLZXlTZXF1ZW5jZTo6UmVkbykpOwotICAgIGVkaXRNZW51LT5hZGRB
Y3Rpb24ocmVkbyk7Ci0gICAgZWRpdE1lbnUtPmFkZFNlcGFyYXRvcigpOwotCi0gICAgUU1lbnUq
IHZpZXdNZW51ID0gbWVudUJhcigpLT5hZGRNZW51KCImVmlldyIpOwotICAgIHZpZXdNZW51LT5h
ZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6U3RvcCkpOwotICAgIHZpZXdNZW51LT5h
ZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6UmVsb2FkKSk7Ci0gICAgdmlld01lbnUt
PmFkZFNlcGFyYXRvcigpOwotICAgIHZpZXdNZW51LT5hZGRBY3Rpb24oIlRha2UgU2NyZWVuIFNo
b3QuLi4iLCB0aGlzLCBTTE9UKHNjcmVlbnNob3QoKSkpOwotI2VuZGlmCi0KLSAgICBRTWVudSog
d2luZG93TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJldpbmRvdyIpOwotICAgIFFBY3Rpb24q
IHRvZ2dsZUZ1bGxTY3JlZW4gPSB3aW5kb3dNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBGdWxsU2Ny
ZWVuIiwgdGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVuTW9kZShib29sKSkpOwotICAgIHRv
Z2dsZUZ1bGxTY3JlZW4tPnNldFNob3J0Y3V0KFF0OjpLZXlfRjExKTsKLSAgICB0b2dnbGVGdWxs
U2NyZWVuLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgdG9nZ2xlRnVsbFNjcmVlbi0+c2V0Q2hl
Y2tlZChmYWxzZSk7Ci0gICAgLy8gV2hlbiBleGl0IGZ1bGxzY3JlZW4gbW9kZSBieSBjbGlja2lu
ZyBvbiB0aGUgZXhpdCBhcmVhIChib3R0b20gcmlnaHQgY29ybmVyKSB3ZSBtdXN0Ci0gICAgLy8g
dW5jaGVjayB0aGUgVG9nZ2xlIEZ1bGxTY3JlZW4gYWN0aW9uLgotICAgIHRvZ2dsZUZ1bGxTY3Jl
ZW4tPmNvbm5lY3QodGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVuTW9kZShib29sKSksIFNM
T1Qoc2V0Q2hlY2tlZChib29sKSkpOwotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGVudGVyZWRG
dWxsU2NyZWVuTW9kZShib29sKSksIHRoaXMsIFNMT1QodG9nZ2xlRnVsbFNjcmVlbk1vZGUoYm9v
bCkpKTsKLQotICAgIFFNZW51KiB0b29sc01lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZEZXZl
bG9wIik7Ci0gICAgdG9vbHNNZW51LT5hZGRBY3Rpb24oIkNoYW5nZSBVc2VyIEFnZW50IiwgdGhp
cywgU0xPVChzaG93VXNlckFnZW50RGlhbG9nKCkpKTsKLSAgICB0b29sc01lbnUtPmFkZFNlcGFy
YXRvcigpOwotICAgIHRvb2xzTWVudS0+YWRkQWN0aW9uKCJMb2FkIFVSTHMgZnJvbSBmaWxlIiwg
dGhpcywgU0xPVChsb2FkVVJMTGlzdEZyb21GaWxlKCkpKTsKLQotICAgIG1fYWRkcmVzc0JhciA9
IG5ldyBRTGluZUVkaXQoKTsKLSAgICBjb25uZWN0KG1fYWRkcmVzc0JhciwgU0lHTkFMKHJldHVy
blByZXNzZWQoKSksIFNMT1QoY2hhbmdlTG9jYXRpb24oKSkpOwotCi0gICAgUVNob3J0Y3V0KiBz
ZWxlY3RBZGRyZXNzQmFyID0gbmV3IFFTaG9ydGN1dChRdDo6Q1RSTCB8IFF0OjpLZXlfTCwgdGhp
cyk7Ci0gICAgY29ubmVjdChzZWxlY3RBZGRyZXNzQmFyLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCB0
aGlzLCBTTE9UKG9wZW5Mb2NhdGlvbigpKSk7Ci0KLSNpZiAwCi0gICAgLy8gRklYTUUKLSAgICBw
YWdlKCktPnNldENyZWF0ZU5ld1BhZ2VGdW5jdGlvbihuZXdQYWdlRnVuY3Rpb24pOwotI2VuZGlm
Ci0KICAgICBpZiAobV93aW5kb3dPcHRpb25zLnN0YXJ0TWF4aW1pemVkKQotICAgICAgICBzZXRX
aW5kb3dTdGF0ZSh3aW5kb3dTdGF0ZSgpIHwgUXQ6OldpbmRvd01heGltaXplZCk7CisgICAgICAg
IHNldFdpbmRvd1N0YXRlKFF0OjpXaW5kb3dNYXhpbWl6ZWQpOwogICAgIGVsc2UKICAgICAgICAg
cmVzaXplKDgwMCwgNjAwKTsKICAgICBzaG93KCk7CkBAIC0xNjAsMTMgKzUzLDYgQEAgQnJvd3Nl
cldpbmRvdzo6QnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogCiB2b2lkIEJy
b3dzZXJXaW5kb3c6OmxvYWQoY29uc3QgUVN0cmluZyYgdXJsKQogewotICAgIG1fYWRkcmVzc0Jh
ci0+c2V0VGV4dCh1cmwpOwotICAgIG1fYnJvd3Nlci0+bG9hZCh1cmwpOwotfQotCi1RT2JqZWN0
KiBCcm93c2VyV2luZG93Ojp3ZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9icm93c2Vy
LT50b3VjaFdlYlZpZXcoKSA/IHN0YXRpY19jYXN0PFFPYmplY3QqPihtX2Jyb3dzZXItPnRvdWNo
V2ViVmlldygpLT5wYWdlKCkpIDogc3RhdGljX2Nhc3Q8UU9iamVjdCo+KG1fYnJvd3Nlci0+ZGVz
a3RvcFdlYlZpZXcoKSk7CiB9CiAKIEJyb3dzZXJXaW5kb3cqIEJyb3dzZXJXaW5kb3c6Om5ld1dp
bmRvdyhjb25zdCBRU3RyaW5nJiB1cmwpCkBAIC0xNzYsMTcxICs2MiwxOSBAQCBCcm93c2VyV2lu
ZG93KiBCcm93c2VyV2luZG93OjpuZXdXaW5kb3coY29uc3QgUVN0cmluZyYgdXJsKQogICAgIHJl
dHVybiB3aW5kb3c7CiB9CiAKLXZvaWQgQnJvd3NlcldpbmRvdzo6b3BlbkxvY2F0aW9uKCkKLXsK
LSAgICBtX2FkZHJlc3NCYXItPnNlbGVjdEFsbCgpOwotICAgIG1fYWRkcmVzc0Jhci0+c2V0Rm9j
dXMoKTsKLX0KLQotdm9pZCBCcm93c2VyV2luZG93OjpjaGFuZ2VMb2NhdGlvbigpCi17Ci0gICAg
UVN0cmluZyBzdHJpbmcgPSBtX2FkZHJlc3NCYXItPnRleHQoKTsKLSAgICBtX2Jyb3dzZXItPmxv
YWQoc3RyaW5nKTsKLX0KLQotdm9pZCBCcm93c2VyV2luZG93OjpvbkxvYWRQcm9ncmVzc0NoYW5n
ZWQoaW50IHByb2dyZXNzKQotewotICAgIFFDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBRQXBwbGlj
YXRpb246OnBhbGV0dGUoKS5jb2xvcihRUGFsZXR0ZTo6QmFzZSk7Ci0gICAgUUNvbG9yIHByb2dy
ZXNzQ29sb3IgPSBRQ29sb3IoMTIwLCAxODAsIDI0MCk7Ci0gICAgUVBhbGV0dGUgcGFsbGV0ZSA9
IG1fYWRkcmVzc0Jhci0+cGFsZXR0ZSgpOwotCi0gICAgaWYgKHByb2dyZXNzIDw9IDAgfHwgcHJv
Z3Jlc3MgPj0gMTAwKQotICAgICAgICBwYWxsZXRlLnNldEJydXNoKFFQYWxldHRlOjpCYXNlLCBi
YWNrZ3JvdW5kQ29sb3IpOwotICAgIGVsc2UgewotICAgICAgICBRTGluZWFyR3JhZGllbnQgZ3Jh
ZGllbnQoMCwgMCwgd2lkdGgoKSwgMCk7Ci0gICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoMCwg
cHJvZ3Jlc3NDb2xvcik7Ci0gICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoKChkb3VibGUpIHBy
b2dyZXNzKSAvIDEwMCwgcHJvZ3Jlc3NDb2xvcik7Ci0gICAgICAgIGlmIChwcm9ncmVzcyAhPSAx
MDApCi0gICAgICAgICAgICBncmFkaWVudC5zZXRDb2xvckF0KChkb3VibGUpIHByb2dyZXNzIC8g
MTAwICsgMC4wMDEsIGJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIHBhbGxldGUuc2V0QnJ1c2go
UVBhbGV0dGU6OkJhc2UsIGdyYWRpZW50KTsKLSAgICB9Ci0gICAgbV9hZGRyZXNzQmFyLT5zZXRQ
YWxldHRlKHBhbGxldGUpOwotfQotCi12b2lkIEJyb3dzZXJXaW5kb3c6OnVybENoYW5nZWQoY29u
c3QgUVVybCYgdXJsKQotewotICAgIG1fYWRkcmVzc0Jhci0+c2V0VGV4dCh1cmwudG9TdHJpbmco
KSk7Ci0gICAgbV9icm93c2VyLT5yZXF1ZXN0QWN0aXZhdGVXaW5kb3coKTsKLSAgICBtX2Jyb3dz
ZXItPnZpZXcoKS0+c2V0Rm9jdXModHJ1ZSk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6b3Bl
bkZpbGUoKQotewotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIGZpbHRlcigiSFRNTCBGaWxlcyAo
Ki5odG0gKi5odG1sICoueGh0bWwpOztUZXh0IEZpbGVzICgqLnR4dCk7O0ltYWdlIEZpbGVzICgq
LmdpZiAqLmpwZyAqLnBuZyk7O1NWRyBGaWxlcyAoKi5zdmcpOztBbGwgRmlsZXMgKCopIik7Ci0K
LSAgICBRRmlsZURpYWxvZyBmaWxlRGlhbG9nKHRoaXMsIHRyKCJPcGVuIiksIFFTdHJpbmcoKSwg
ZmlsdGVyKTsKLSAgICBmaWxlRGlhbG9nLnNldEFjY2VwdE1vZGUoUUZpbGVEaWFsb2c6OkFjY2Vw
dE9wZW4pOwotICAgIGZpbGVEaWFsb2cuc2V0RmlsZU1vZGUoUUZpbGVEaWFsb2c6OkV4aXN0aW5n
RmlsZSk7Ci0gICAgZmlsZURpYWxvZy5zZXRPcHRpb25zKFFGaWxlRGlhbG9nOjpSZWFkT25seSk7
Ci0KLSAgICBpZiAoZmlsZURpYWxvZy5leGVjKCkpIHsKLSAgICAgICAgUVN0cmluZyBzZWxlY3Rl
ZEZpbGUgPSBmaWxlRGlhbG9nLnNlbGVjdGVkRmlsZXMoKVswXTsKLSAgICAgICAgaWYgKCFzZWxl
Y3RlZEZpbGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgbG9hZChzZWxlY3RlZEZpbGUpOwotICAg
IH0KLX0KLQogdm9pZCBCcm93c2VyV2luZG93OjpzY3JlZW5zaG90KCkKIHsKLSAgICBRUGl4bWFw
IHBpeG1hcCA9IFFQaXhtYXA6OmdyYWJXaWRnZXQobV9icm93c2VyKTsKLSAgICBRTGFiZWwqIGxh
YmVsID0gMDsKLSAgICBsYWJlbCA9IG5ldyBRTGFiZWw7Ci0gICAgbGFiZWwtPnNldEF0dHJpYnV0
ZShRdDo6V0FfRGVsZXRlT25DbG9zZSk7Ci0gICAgbGFiZWwtPnNldFdpbmRvd1RpdGxlKCJTY3Jl
ZW5zaG90IC0gUHJldmlldyIpOwotICAgIGxhYmVsLT5zZXRQaXhtYXAocGl4bWFwKTsKLSAgICBs
YWJlbC0+c2hvdygpOwotCi0gICAgUVN0cmluZyBmaWxlTmFtZSA9IFFGaWxlRGlhbG9nOjpnZXRT
YXZlRmlsZU5hbWUobGFiZWwsICJTY3JlZW5zaG90IiwgUVN0cmluZygpLCBRU3RyaW5nKCJQTkcg
RmlsZSAoLnBuZykiKSk7Ci0gICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
UVJlZ0V4cCByeCgiKi5wbmciKTsKLSAgICAgICAgcnguc2V0Q2FzZVNlbnNpdGl2aXR5KFF0OjpD
YXNlSW5zZW5zaXRpdmUpOwotICAgICAgICByeC5zZXRQYXR0ZXJuU3ludGF4KFFSZWdFeHA6Oldp
bGRjYXJkKTsKLQotICAgICAgICBpZiAoIXJ4LmV4YWN0TWF0Y2goZmlsZU5hbWUpKQotICAgICAg
ICAgICAgZmlsZU5hbWUgKz0gIi5wbmciOwotCi0gICAgICAgIHBpeG1hcC5zYXZlKGZpbGVOYW1l
LCAicG5nIik7Ci0gICAgICAgIGlmIChsYWJlbCkKLSAgICAgICAgICAgIGxhYmVsLT5zZXRXaW5k
b3dUaXRsZShRU3RyaW5nKCJTY3JlZW5zaG90IC0gU2F2ZWQgYXQgJTEiKS5hcmcoZmlsZU5hbWUp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6dG9nZ2xlRnVsbFNjcmVlbk1vZGUo
Ym9vbCBlbmFibGUpCi17Ci0gICAgYm9vbCBhbHJlYWR5RW5hYmxlZCA9IHdpbmRvd1N0YXRlKCkg
JiBRdDo6V2luZG93RnVsbFNjcmVlbjsKLSAgICBpZiAoZW5hYmxlIF4gYWxyZWFkeUVuYWJsZWQp
Ci0gICAgICAgIHNldFdpbmRvd1N0YXRlKHdpbmRvd1N0YXRlKCkgXiBRdDo6V2luZG93RnVsbFNj
cmVlbik7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6c2hvd1VzZXJBZ2VudERpYWxvZygpCi17
Ci0jaWYgMAotICAgIC8vIEZJWE1FCi0gICAgdXBkYXRlVXNlckFnZW50TGlzdCgpOwotCi0gICAg
UURpYWxvZyBkaWFsb2codGhpcyk7Ci0gICAgZGlhbG9nLnNldFdpbmRvd1RpdGxlKCJDaGFuZ2Ug
VXNlciBBZ2VudCIpOwotICAgIGRpYWxvZy5yZXNpemUoc2l6ZSgpLndpZHRoKCkgKiAwLjcsIGRp
YWxvZy5zaXplKCkuaGVpZ2h0KCkpOwotICAgIFFWQm94TGF5b3V0KiBsYXlvdXQgPSBuZXcgUVZC
b3hMYXlvdXQoJmRpYWxvZyk7Ci0gICAgZGlhbG9nLnNldExheW91dChsYXlvdXQpOwotCi0gICAg
UUNvbWJvQm94KiBjb21ibyA9IG5ldyBRQ29tYm9Cb3goJmRpYWxvZyk7Ci0gICAgY29tYm8tPnNl
dFNpemVBZGp1c3RQb2xpY3koUUNvbWJvQm94OjpBZGp1c3RUb01pbmltdW1Db250ZW50c0xlbmd0
aCk7Ci0gICAgY29tYm8tPnNldEVkaXRhYmxlKHRydWUpOwotICAgIGNvbWJvLT5pbnNlcnRJdGVt
cygwLCBtX3VzZXJBZ2VudExpc3QpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KGNvbWJvKTsKLQot
ICAgIGludCBpbmRleCA9IGNvbWJvLT5maW5kVGV4dChwYWdlKCktPmN1c3RvbVVzZXJBZ2VudCgp
KTsKLSAgICBjb21iby0+c2V0Q3VycmVudEluZGV4KGluZGV4KTsKLQotICAgIFFEaWFsb2dCdXR0
b25Cb3gqIGJ1dHRvbkJveCA9IG5ldyBRRGlhbG9nQnV0dG9uQm94KFFEaWFsb2dCdXR0b25Cb3g6
Ok9rIHwgUURpYWxvZ0J1dHRvbkJveDo6Q2FuY2VsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFF0OjpIb3Jpem9udGFsLCAmZGlhbG9nKTsK
LSAgICBjb25uZWN0KGJ1dHRvbkJveCwgU0lHTkFMKGFjY2VwdGVkKCkpLCAmZGlhbG9nLCBTTE9U
KGFjY2VwdCgpKSk7Ci0gICAgY29ubmVjdChidXR0b25Cb3gsIFNJR05BTChyZWplY3RlZCgpKSwg
JmRpYWxvZywgU0xPVChyZWplY3QoKSkpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KGJ1dHRvbkJv
eCk7Ci0KLSAgICBpZiAoZGlhbG9nLmV4ZWMoKSAmJiAhY29tYm8tPmN1cnJlbnRUZXh0KCkuaXNF
bXB0eSgpKQotICAgICAgICBwYWdlKCktPnNldEN1c3RvbVVzZXJBZ2VudChjb21iby0+Y3VycmVu
dFRleHQoKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBCcm93c2VyV2luZG93Ojpsb2FkVVJMTGlzdEZy
b21GaWxlKCkKIHsKLSAgICBRU3RyaW5nIHNlbGVjdGVkRmlsZTsKLSAgICBzZWxlY3RlZEZpbGUg
PSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKHRoaXMsIHRyKCJMb2FkIFVSTCBsaXN0IGZy
b20gZmlsZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBRU3RyaW5nKCksIHRyKCJUZXh0IEZpbGVzICgqLnR4dCk7O0FsbCBGaWxlcyAo
KikiKSk7Ci0gICAgaWYgKHNlbGVjdGVkRmlsZS5pc0VtcHR5KCkpCi0gICAgICAgcmV0dXJuOwot
Ci0gICAgbV91cmxMb2FkZXIgPSBuZXcgVXJsTG9hZGVyKHRoaXMsIHNlbGVjdGVkRmlsZSwgMCwg
MCk7Ci0gICAgbV91cmxMb2FkZXItPmxvYWROZXh0KCk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRv
dzo6cHJpbnRVUkwoY29uc3QgUVVybCYgdXJsKQotewotICAgIFFUZXh0U3RyZWFtIG91dHB1dChz
dGRvdXQpOwotICAgIG91dHB1dCA8PCAiTG9hZGVkOiAiIDw8IHVybC50b1N0cmluZygpIDw8IGVu
ZGw7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6b25MaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1
cmwsIGNvbnN0IFFTdHJpbmcmKQotewotICAgIHN0YXR1c0JhcigpLT5zaG93TWVzc2FnZSh1cmwu
dG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgQnJvd3NlcldpbmRvdzo6dXBkYXRlVXNlckFnZW50TGlz
dCgpCiB7Ci0jaWYgMAotICAgIC8vIEZJWE1FCi0gICAgUUZpbGUgZmlsZSgiOi91c2VyYWdlbnRs
aXN0LnR4dCIpOwotCi0gICAgaWYgKGZpbGUub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkgewot
ICAgICAgICB3aGlsZSAoIWZpbGUuYXRFbmQoKSkgewotICAgICAgICAgICAgUVN0cmluZyBhZ2Vu
dCA9IGZpbGUucmVhZExpbmUoKS50cmltbWVkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fdXNlckFn
ZW50TGlzdC5jb250YWlucyhhZ2VudCkpCi0gICAgICAgICAgICAgICAgbV91c2VyQWdlbnRMaXN0
IDw8IGFnZW50OwotICAgICAgICB9Ci0gICAgICAgIGZpbGUuY2xvc2UoKTsKLSAgICB9Ci0KLSAg
ICBRX0FTU0VSVCghbV91c2VyQWdlbnRMaXN0LmlzRW1wdHkoKSk7Ci0gICAgUVdLUGFnZSogd2tQ
YWdlID0gcGFnZSgpOwotICAgIGlmICghKHdrUGFnZS0+Y3VzdG9tVXNlckFnZW50KCkuaXNFbXB0
eSgpIHx8IG1fdXNlckFnZW50TGlzdC5jb250YWlucyh3a1BhZ2UtPmN1c3RvbVVzZXJBZ2VudCgp
KSkpCi0gICAgICAgIG1fdXNlckFnZW50TGlzdCA8PCB3a1BhZ2UtPmN1c3RvbVVzZXJBZ2VudCgp
OwotI2VuZGlmCiB9CiAKIEJyb3dzZXJXaW5kb3c6On5Ccm93c2VyV2luZG93KCkKIHsKICAgICBk
ZWxldGUgbV91cmxMb2FkZXI7Ci0gICAgZGVsZXRlIG1fYWRkcmVzc0JhcjsKIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93
c2VyL3F0L0Jyb3dzZXJXaW5kb3cuaAppbmRleCAyYTg1YTAwLi44ZWMyZDFhIDEwMDY0NAotLS0g
YS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmgKKysrIGIvVG9vbHMvTWluaUJy
b3dzZXIvcXQvQnJvd3NlcldpbmRvdy5oCkBAIC0yOSw3NCArMjksMzUgQEAKICNpZm5kZWYgQnJv
d3NlcldpbmRvd19oCiAjZGVmaW5lIEJyb3dzZXJXaW5kb3dfaAogCi0jaW5jbHVkZSAiQnJvd3Nl
clZpZXcuaCIKLQogI2luY2x1ZGUgIk1pbmlCcm93c2VyQXBwbGljYXRpb24uaCIKICNpbmNsdWRl
IDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVGltZXI+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9RU0dWaWV3PgogCiBjbGFzcyBVcmxMb2FkZXI7CiAKLWNsYXNzIFdpbmRvd1dyYXBwZXIgOiBw
dWJsaWMgUVdpZGdldAotewotICAgIFFfT0JKRUNUCi0KLXB1YmxpYzoKLSAgICBXaW5kb3dXcmFw
cGVyKFFXaW5kb3cqIHdpbmRvdywgUVdpZGdldCogd2lkZ2V0ID0gMCk7Ci0KLXByb3RlY3RlZDoK
LSAgICB2b2lkIHNob3dFdmVudChRU2hvd0V2ZW50KiBldmVudCk7Ci0gICAgdm9pZCByZXNpemVF
dmVudChRUmVzaXplRXZlbnQqIGV2ZW50KTsKLQotcHJpdmF0ZSBzbG90czoKLSAgICB2b2lkIGRv
UmVzaXplKCk7Ci0KLXByaXZhdGU6Ci0gICAgUVdpbmRvdyogbV93aW5kb3c7Ci0gICAgUVRpbWVy
IG1fcmVzaXplVGltZXI7Ci19OwotCi1jbGFzcyBCcm93c2VyV2luZG93IDogcHVibGljIFFNYWlu
V2luZG93IHsKK2NsYXNzIEJyb3dzZXJXaW5kb3cgOiBwdWJsaWMgUVNHVmlldyB7CiAgICAgUV9P
QkpFQ1QKIAogcHVibGljOgogICAgIEJyb3dzZXJXaW5kb3coV2luZG93T3B0aW9ucyogPSAwKTsK
ICAgICB+QnJvd3NlcldpbmRvdygpOwogICAgIHZvaWQgbG9hZChjb25zdCBRU3RyaW5nJiB1cmwp
OwotCiAgICAgUU9iamVjdCogd2ViVmlldygpIGNvbnN0OwogCiBwdWJsaWMgc2xvdHM6CiAgICAg
QnJvd3NlcldpbmRvdyogbmV3V2luZG93KGNvbnN0IFFTdHJpbmcmIHVybCA9ICJhYm91dDpibGFu
ayIpOwotICAgIHZvaWQgb3BlbkxvY2F0aW9uKCk7Ci0KLXNpZ25hbHM6Ci0gICAgdm9pZCBlbnRl
cmVkRnVsbFNjcmVlbk1vZGUoYm9vbCBvbik7CiAKIHByb3RlY3RlZCBzbG90czoKLSAgICB2b2lk
IGNoYW5nZUxvY2F0aW9uKCk7Ci0gICAgdm9pZCBvbkxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHBy
b2dyZXNzKTsKLSAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYpOwotICAgIHZvaWQgb3Bl
bkZpbGUoKTsKLQogICAgIHZvaWQgc2NyZWVuc2hvdCgpOwogCi0gICAgdm9pZCB0b2dnbGVGdWxs
U2NyZWVuTW9kZShib29sIGVuYWJsZSk7Ci0KLSAgICB2b2lkIHNob3dVc2VyQWdlbnREaWFsb2co
KTsKLQogICAgIHZvaWQgbG9hZFVSTExpc3RGcm9tRmlsZSgpOwogCi0gICAgdm9pZCBwcmludFVS
TChjb25zdCBRVXJsJik7Ci0gICAgdm9pZCBvbkxpbmtIb3ZlcmVkKGNvbnN0IFFVcmwmLCBjb25z
dCBRU3RyaW5nJik7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVVc2VyQWdlbnRMaXN0KCk7
CiAKICAgICBVcmxMb2FkZXIqIG1fdXJsTG9hZGVyOwogICAgIFdpbmRvd09wdGlvbnMgbV93aW5k
b3dPcHRpb25zOwotICAgIEJyb3dzZXJWaWV3KiBtX2Jyb3dzZXI7Ci0gICAgUUxpbmVFZGl0KiBt
X2FkZHJlc3NCYXI7CiAgICAgUVN0cmluZ0xpc3QgbV91c2VyQWdlbnRMaXN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCmluZGV4IDg4YzU3MTguLmEyZWQwOTggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybworKysgYi9Ub29scy9N
aW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KQEAgLTIsNyArMiw2IEBAIFRFTVBMQVRFID0g
YXBwCiBUQVJHRVQgPSBNaW5pQnJvd3NlcgogCiBTT1VSQ0VTICs9IFwKLSAgICBCcm93c2VyVmll
dy5jcHAgXAogICAgIEJyb3dzZXJXaW5kb3cuY3BwIFwKICAgICBtYWluLmNwcCBcCiAgICAgTWlu
aUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAgXApAQCAtMTAsNyArOSw2IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHV0aWxzLmNwcCBcCiAKIEhFQURFUlMgKz0gXAotICAgIEJyb3dzZXJWaWV3LmggXAogICAg
IEJyb3dzZXJXaW5kb3cuaCBcCiAgICAgTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oIFwKICAgICBV
cmxMb2FkZXIuaCBcCkBAIC0zMiw3ICszMCw2IEBAIENPTkZJRyAtPSBhcHBfYnVuZGxlCiAKIFFU
ICs9IG5ldHdvcmsgZGVjbGFyYXRpdmUKIG1hY3g6UVQrPXhtbAotZ3JlYXRlclRoYW4oUVRfTUFK
T1JfVkVSU0lPTiwgNCk6IFFUICs9IHdpZGdldHMKIAogbGludXgtKiB7CiAgICAgIyBGcm9tIENy
ZWF0b3IncyBzcmMvcnBhdGgucHJpOgpAQCAtNDcsMTEgKzQ0LDYgQEAgbGludXgtKiB7CiAgICAg
UU1BS0VfUlBBVEhESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIKIH0KIAot
Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKLSAgICBRVCArPSBvcGVuZ2wKLSAgICBERUZJ
TkVTICs9IFFUX0NPTkZJR1VSRURfV0lUSF9PUEVOR0wKLX0KLQogREVGSU5FUyAtPSBRVF9BU0NJ
SV9DQVNUX1dBUk5JTkdTCiAKICMgVXNlIHRoZSBNaW5pQnJvd3Nlci5xcmMgZmlsZSBmcm9tIHRo
ZSBzb3VyY2VzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJB
cHBsaWNhdGlvbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0
aW9uLmNwcAppbmRleCA5OGI3YzdlLi5kNGI1MGExIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgPFFFdmVudD4KICNpbmNsdWRlIDxRTW91c2VFdmVudD4KICNpbmNsdWRlIDxRVG91Y2hFdmVu
dD4KLSNpbmNsdWRlIDxRR3VpQXBwbGljYXRpb24+CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1Rv
dWNoRXZlbnQoY29uc3QgUUV2ZW50KiBldmVudCkKIHsKQEAgLTYxLDEwICs2MCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc01vdXNlRXZlbnQoY29uc3QgUUV2ZW50KiBldmVudCkKIH0KIAogTWlu
aUJyb3dzZXJBcHBsaWNhdGlvbjo6TWluaUJyb3dzZXJBcHBsaWNhdGlvbihpbnQmIGFyZ2MsIGNo
YXIqKiBhcmd2KQotICAgIDogUUFwcGxpY2F0aW9uKGFyZ2MsIGFyZ3YsIFFBcHBsaWNhdGlvbjo6
R3VpU2VydmVyKQorICAgIDogUUd1aUFwcGxpY2F0aW9uKGFyZ2MsIGFyZ3YpCiAgICAgLCBtX3dp
bmRvd09wdGlvbnMoKQotICAgICwgbV9yZWFsVG91Y2hFdmVudFJlY2VpdmVkKGZhbHNlKQotICAg
ICwgbV9wZW5kaW5nRmFrZVRvdWNoRXZlbnRDb3VudCgwKQogICAgICwgbV9pc1JvYm90aXplZChm
YWxzZSkKICAgICAsIG1fcm9ib3RUaW1lb3V0U2Vjb25kcygwKQogICAgICwgbV9yb2JvdEV4dHJh
VGltZVNlY29uZHMoMCkKQEAgLTgxLDkxICs3OCw0NyBAQCBib29sIE1pbmlCcm93c2VyQXBwbGlj
YXRpb246Om5vdGlmeShRT2JqZWN0KiB0YXJnZXQsIFFFdmVudCogZXZlbnQpCiAgICAgLy8gV2Ug
dHJ5IHRvIGJlIHNtYXJ0LCBpZiB3ZSByZWNlaXZlZCByZWFsIHRvdWNoIGV2ZW50LCB3ZSBhcmUg
cHJvYmFibHkgb24gYSBkZXZpY2UKICAgICAvLyB3aXRoIHRvdWNoIHNjcmVlbiwgYW5kIHdlIHNo
b3VsZCBub3QgaGF2ZSB0b3VjaCBtb2NraW5nLgogCi0gICAgaWYgKCFldmVudC0+c3BvbnRhbmVv
dXMoKSB8fCBtX3JlYWxUb3VjaEV2ZW50UmVjZWl2ZWQpCi0gICAgICAgIHJldHVybiBRQXBwbGlj
YXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsKLQotICAgIGlmIChpc1RvdWNoRXZlbnQoZXZl
bnQpICYmIHN0YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXZlbnQpLT5kZXZpY2VUeXBlKCkgPT0g
UVRvdWNoRXZlbnQ6OlRvdWNoU2NyZWVuKSB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdGYWtlVG91
Y2hFdmVudENvdW50KQotICAgICAgICAgICAgLS1tX3BlbmRpbmdGYWtlVG91Y2hFdmVudENvdW50
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlYWxUb3VjaEV2ZW50UmVjZWl2ZWQgPSB0
cnVlOwotICAgICAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0LCBldmVudCk7
Ci0gICAgfQotCi0gICAgUVdpbmRvdyogdGFyZ2V0V2luZG93ID0gcW9iamVjdF9jYXN0PFFXaW5k
b3cqPih0YXJnZXQpOwotICAgIGlmICh0YXJnZXRXaW5kb3cgJiYgaXNNb3VzZUV2ZW50KGV2ZW50
KSkgeworICAgIGlmICghZXZlbnQtPnNwb250YW5lb3VzKCkpCisgICAgICAgIHJldHVybiBRR3Vp
QXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsKKyAgICBpZiAoaXNUb3VjaEV2ZW50
KGV2ZW50KSAmJiBzdGF0aWNfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KS0+ZGV2aWNlVHlwZSgp
ID09IFFUb3VjaEV2ZW50OjpUb3VjaFNjcmVlbikKKyAgICAgICAgcmV0dXJuIFFHdWlBcHBsaWNh
dGlvbjo6bm90aWZ5KHRhcmdldCwgZXZlbnQpOworICAgIGlmIChpc01vdXNlRXZlbnQoZXZlbnQp
KSB7CiAgICAgICAgIGNvbnN0IFFNb3VzZUV2ZW50KiBjb25zdCBtb3VzZUV2ZW50ID0gc3RhdGlj
X2Nhc3Q8UU1vdXNlRXZlbnQqPihldmVudCk7CiAKLSAgICAgICAgUVdpbmRvd1N5c3RlbUludGVy
ZmFjZTo6VG91Y2hQb2ludCB0b3VjaFBvaW50OwotICAgICAgICB0b3VjaFBvaW50LmFyZWEgPSBR
UmVjdEYobW91c2VFdmVudC0+Z2xvYmFsUG9zKCksIFFTaXplRigxLCAxKSk7Ci0gICAgICAgIHRv
dWNoUG9pbnQucHJlc3N1cmUgPSAxOworICAgICAgICBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCB0
b3VjaFBvaW50OworICAgICAgICB0b3VjaFBvaW50LnNldFNjcmVlblBvcyhtb3VzZUV2ZW50LT5n
bG9iYWxQb3MoKSk7CisgICAgICAgIHRvdWNoUG9pbnQuc2V0UG9zKG1vdXNlRXZlbnQtPnBvcygp
KTsKIAogICAgICAgICBzd2l0Y2ggKG1vdXNlRXZlbnQtPnR5cGUoKSkgewogICAgICAgICBjYXNl
IFFFdmVudDo6TW91c2VCdXR0b25QcmVzczoKICAgICAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0
dG9uRGJsQ2xpY2s6Ci0gICAgICAgICAgICB0b3VjaFBvaW50LmlkID0gbW91c2VFdmVudC0+YnV0
dG9uKCk7Ci0gICAgICAgICAgICBpZiAobV90b3VjaFBvaW50cy5jb250YWlucyh0b3VjaFBvaW50
LmlkKSkKLSAgICAgICAgICAgICAgICB0b3VjaFBvaW50LnN0YXRlID0gUXQ6OlRvdWNoUG9pbnRN
b3ZlZDsKKyAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0SWQobW91c2VFdmVudC0+YnV0dG9uKCkp
OworICAgICAgICAgICAgaWYgKG1fdG91Y2hQb2ludHMuY29udGFpbnModG91Y2hQb2ludC5pZCgp
KSkKKyAgICAgICAgICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50TW92
ZWQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRvdWNoUG9pbnQuc3RhdGUg
PSBRdDo6VG91Y2hQb2ludFByZXNzZWQ7CisgICAgICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRT
dGF0ZShRdDo6VG91Y2hQb2ludFByZXNzZWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUUV2ZW50OjpNb3VzZU1vdmU6CiAgICAgICAgICAgICBpZiAoIW1vdXNlRXZlbnQtPmJ1
dHRvbnMoKSB8fCAhbV90b3VjaFBvaW50cy5jb250YWlucyhtb3VzZUV2ZW50LT5idXR0b25zKCkp
KQotICAgICAgICAgICAgICAgIHJldHVybiBRQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2
ZW50KTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc3RhdGUgPSBRdDo6VG91Y2hQb2ludE1vdmVk
OwotICAgICAgICAgICAgdG91Y2hQb2ludC5pZCA9IG1vdXNlRXZlbnQtPmJ1dHRvbnMoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUUd1aUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0LCBldmVu
dCk7CisgICAgICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50TW92ZWQp
OworICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRJZChtb3VzZUV2ZW50LT5idXR0b25zKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVh
c2U6CiAgICAgICAgICAgICBpZiAobW91c2VFdmVudC0+bW9kaWZpZXJzKCkudGVzdEZsYWcoUXQ6
OkNvbnRyb2xNb2RpZmllcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6
bm90aWZ5KHRhcmdldCwgZXZlbnQpOwotICAgICAgICAgICAgdG91Y2hQb2ludC5zdGF0ZSA9IFF0
OjpUb3VjaFBvaW50UmVsZWFzZWQ7Ci0gICAgICAgICAgICB0b3VjaFBvaW50LmlkID0gbW91c2VF
dmVudC0+YnV0dG9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFFHdWlBcHBsaWNhdGlvbjo6
bm90aWZ5KHRhcmdldCwgZXZlbnQpOworICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRTdGF0ZShR
dDo6VG91Y2hQb2ludFJlbGVhc2VkKTsKKyAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0SWQobW91
c2VFdmVudC0+YnV0dG9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBRX0FTU0VSVF9YKGZhbHNlLCAibXVsdGktdG91Y2ggbW9ja2luZyIsICJ1
bmhhbmRsZWQgZXZlbnQgdHlwZSIpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVXBkYXRlIGN1
cnJlbnQgdG91Y2gtcG9pbnQKLSAgICAgICAgbV90b3VjaFBvaW50cy5pbnNlcnQodG91Y2hQb2lu
dC5pZCwgdG91Y2hQb2ludCk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHN0YXRlcyBmb3IgYWxsIG90
aGVyIHRvdWNoLXBvaW50cwotICAgICAgICBmb3IgKFFIYXNoPGludCwgUVdpbmRvd1N5c3RlbUlu
dGVyZmFjZTo6VG91Y2hQb2ludD46Oml0ZXJhdG9yIGl0ID0gbV90b3VjaFBvaW50cy5iZWdpbigp
LCBlbmQgPSBtX3RvdWNoUG9pbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmIChpdC52YWx1ZSgpLmlkICE9IHRvdWNoUG9pbnQuaWQpCi0gICAgICAgICAgICAgICAg
aXQudmFsdWUoKS5zdGF0ZSA9IFF0OjpUb3VjaFBvaW50U3RhdGlvbmFyeTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFFMaXN0PFFXaW5kb3dTeXN0ZW1JbnRlcmZhY2U6OlRvdWNoUG9pbnQ+IHRvdWNo
UG9pbnRzID0gbV90b3VjaFBvaW50cy52YWx1ZXMoKTsKLSAgICAgICAgUVdpbmRvd1N5c3RlbUlu
dGVyZmFjZTo6VG91Y2hQb2ludCYgZmlyc3RQb2ludCA9IHRvdWNoUG9pbnRzLmZpcnN0KCk7Ci0g
ICAgICAgIGZpcnN0UG9pbnQuaXNQcmltYXJ5ID0gdHJ1ZTsKLQotICAgICAgICBRRXZlbnQ6OlR5
cGUgZXZlbnRUeXBlOwotICAgICAgICBzd2l0Y2ggKHRvdWNoUG9pbnQuc3RhdGUpIHsKLSAgICAg
ICAgY2FzZSBRdDo6VG91Y2hQb2ludFByZXNzZWQ6Ci0gICAgICAgICAgICBldmVudFR5cGUgPSBR
RXZlbnQ6OlRvdWNoQmVnaW47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRdDo6
VG91Y2hQb2ludFJlbGVhc2VkOgotICAgICAgICAgICAgZXZlbnRUeXBlID0gUUV2ZW50OjpUb3Vj
aEVuZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFF0OjpUb3VjaFBvaW50U3Rh
dGlvbmFyeToKLSAgICAgICAgICAgIC8vIERvbid0IHNlbmQgdGhlIGV2ZW50IGlmIG5vdGhpbmcg
Y2hhbmdlZC4KLSAgICAgICAgICAgIHJldHVybiBRQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQs
IGV2ZW50KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IFFFdmVu
dDo6VG91Y2hVcGRhdGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IG1fcGVuZGluZ0Zha2VUb3VjaEV2ZW50Q291bnQrKzsKLSAgICAgICAgUVdpbmRvd1N5c3RlbUlu
dGVyZmFjZTo6aGFuZGxlVG91Y2hFdmVudCh0YXJnZXRXaW5kb3csIGV2ZW50VHlwZSwgUVRvdWNo
RXZlbnQ6OlRvdWNoU2NyZWVuLCB0b3VjaFBvaW50cyk7Ci0KLSAgICAgICAgLy8gR2V0IHJpZCBv
ZiB0b3VjaC1wb2ludHMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAgICAgIGZvcmVhY2gg
KGNvbnN0IFFXaW5kb3dTeXN0ZW1JbnRlcmZhY2U6OlRvdWNoUG9pbnQmIHRvdWNoUG9pbnQsIG1f
dG91Y2hQb2ludHMpIHsKLSAgICAgICAgICAgIGlmICh0b3VjaFBvaW50LnN0YXRlID09ICBRdDo6
VG91Y2hQb2ludFJlbGVhc2VkKQotICAgICAgICAgICAgICAgIG1fdG91Y2hQb2ludHMucmVtb3Zl
KHRvdWNoUG9pbnQuaWQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IFRvdWNoUG9pbnQgaGFuZGxpbmcgaW4gYSBRdDUvUXRRdWlj
ayBjb21wYXRpYmxlIHdheS4KICAgICB9CiAKLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpub3Rp
ZnkodGFyZ2V0LCBldmVudCk7CisgICAgcmV0dXJuIFFHdWlBcHBsaWNhdGlvbjo6bm90aWZ5KHRh
cmdldCwgZXZlbnQpOwogfQogCiB2b2lkIE1pbmlCcm93c2VyQXBwbGljYXRpb246OmhhbmRsZVVz
ZXJPcHRpb25zKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2Vy
QXBwbGljYXRpb24uaCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRp
b24uaAppbmRleCBiNjhhZTRmLi43YjJkMTRhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
TWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oCkBAIC0yOSwxOCArMjksOSBAQAogI2lmbmRlZiBNaW5p
QnJvd3NlckFwcGxpY2F0aW9uX2gKICNkZWZpbmUgTWluaUJyb3dzZXJBcHBsaWNhdGlvbl9oCiAK
LSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUZpbGVEaWFsb2c+CisjaW5jbHVk
ZSA8UXRHdWkvUUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFIYXNoPgotI2luY2x1ZGUgPFFM
YWJlbD4KLSNpbmNsdWRlIDxRTGluZUVkaXQ+Ci0jaW5jbHVkZSA8UU1haW5XaW5kb3c+Ci0jaW5j
bHVkZSA8UU1lbnU+Ci0jaW5jbHVkZSA8UU1lbnVCYXI+Ci0jaW5jbHVkZSA8UVNob3J0Y3V0Pgot
I2luY2x1ZGUgPFFTdGF0dXNCYXI+CiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+Ci0jaW5jbHVkZSA8
UVRvb2xCYXI+CiAjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CiAjaW5jbHVkZSA8UVVybD4KICNpbmNs
dWRlICJxd2luZG93c3lzdGVtaW50ZXJmYWNlX3FwYS5oIgpAQCAtNjQsNyArNTUsNyBAQCBzdHJ1
Y3QgV2luZG93T3B0aW9ucyB7CiAjZW5kaWYKIH07CiAKLWNsYXNzIE1pbmlCcm93c2VyQXBwbGlj
YXRpb24gOiBwdWJsaWMgUUFwcGxpY2F0aW9uIHsKK2NsYXNzIE1pbmlCcm93c2VyQXBwbGljYXRp
b24gOiBwdWJsaWMgUUd1aUFwcGxpY2F0aW9uIHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6CmRp
ZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvVXJsTG9hZGVyLmNwcAppbmRleCA5NGQ5NDg4Li5mODJhNmQzIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwCisrKyBiL1Rvb2xzL01pbmlC
cm93c2VyL3F0L1VybExvYWRlci5jcHAKQEAgLTQxLDEzICs0MSwxNiBAQCBVcmxMb2FkZXI6OlVy
bExvYWRlcihCcm93c2VyV2luZG93KiBicm93c2VyV2luZG93LCBjb25zdCBRU3RyaW5nJiBpbnB1
dEZpbGVOYW1lLAogICAgIG1fY2hlY2tJZkZpbmlzaGVkVGltZXIuc2V0U2luZ2xlU2hvdCh0cnVl
KTsKICAgICBjb25uZWN0KCZtX2NoZWNrSWZGaW5pc2hlZFRpbWVyLCBTSUdOQUwodGltZW91dCgp
KSwgdGhpcywgU0xPVChjaGVja0lmRmluaXNoZWQoKSkpOwogICAgIC8vIGxvYWRTdGFydGVkIGFu
ZCBsb2FkRmluaXNoZWQgb24gUVdlYlBhZ2UgaXMgZW1pdHRlZCBmb3IgZWFjaCBmcmFtZS9zdWIt
ZnJhbWUKLSAgICBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBTSUdOQUwobG9h
ZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QoZnJhbWVMb2FkU3RhcnRlZCgpKSk7Ci0gICAgY29ubmVj
dChtX2Jyb3dzZXJXaW5kb3ctPndlYlZpZXcoKSwgU0lHTkFMKGxvYWRGaW5pc2hlZChib29sKSks
IHRoaXMsIFNMT1QoZnJhbWVMb2FkRmluaXNoZWQoKSkpOworCisgICAgLy8gRklYTUU6IFJlY29u
bmVjdCB0aGlzIHNpZ25hbHMgYWZ0ZXIgUXQ1L1F0UXVpY2sgcmV3cml0ZSBpZiBuZWNlc3Nhcnku
CisgICAgLy8gY29ubmVjdChtX2Jyb3dzZXJXaW5kb3ctPndlYlZpZXcoKSwgU0lHTkFMKGxvYWRT
dGFydGVkKCkpLCB0aGlzLCBTTE9UKGZyYW1lTG9hZFN0YXJ0ZWQoKSkpOworICAgIC8vIGNvbm5l
Y3QobV9icm93c2VyV2luZG93LT53ZWJWaWV3KCksIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkp
LCB0aGlzLCBTTE9UKGZyYW1lTG9hZEZpbmlzaGVkKCkpKTsKIAogICAgIGlmICh0aW1lb3V0U2Vj
b25kcykgewogICAgICAgICBtX3RpbWVvdXRUaW1lci5zZXRJbnRlcnZhbCh0aW1lb3V0U2Vjb25k
cyAqIDEwMDApOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5zZXRTaW5nbGVTaG90KHRydWUpOwot
ICAgICAgICBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBTSUdOQUwobG9hZFN0
YXJ0ZWQoKSksICZtX3RpbWVvdXRUaW1lciwgU0xPVChzdGFydCgpKSk7CisgICAgICAgIC8vIEZJ
WE1FOiBSZWNvbm5lY3QgdGhpcyBzaWduYWwgYWZ0ZXIgUXQ1L1F0UXVpY2sgcmV3cml0ZSBpZiBu
ZWNlc3NhcnkuCisgICAgICAgIC8vIGNvbm5lY3QobV9icm93c2VyV2luZG93LT53ZWJWaWV3KCks
IFNJR05BTChsb2FkU3RhcnRlZCgpKSwgJm1fdGltZW91dFRpbWVyLCBTTE9UKHN0YXJ0KCkpKTsK
ICAgICAgICAgY29ubmVjdCgmbV90aW1lb3V0VGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCB0aGlz
LCBTTE9UKGxvYWROZXh0KCkpKTsKICAgICB9CiAgICAgaWYgKGV4dHJhVGltZVNlY29uZHMpIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwIGIvVG9vbHMvTWluaUJy
b3dzZXIvcXQvbWFpbi5jcHAKaW5kZXggZTkwYzRmNy4uYTIwYjI1ZSAxMDA2NDQKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFp
bi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIk1pbmlCcm93c2VyQXBwbGljYXRp
b24uaCIKICNpbmNsdWRlICJVcmxMb2FkZXIuaCIKKyNpbmNsdWRlIDxRRGlyPgogI2luY2x1ZGUg
PFFMYXRpbjFTdHJpbmc+CiAjaW5jbHVkZSA8UVJlZ0V4cD4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111832</attachid>
            <date>2011-10-20 13:13:48 -0700</date>
            <delta_ts>2011-10-25 04:59:04 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>70525_20111020-221226.patch</filename>
            <type>text/plain</type>
            <size>29116</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ODE5
YmE2Li5lY2QzOTk3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKyAyMDExLTEwLTIwICBaZW5vIEFsYmlzc2VyICA8emVu
by5hbGJpc3NlckBub2tpYS5jb20+CisgCisgICAgICAgIFtRdF1bV0syXSBSZW1vdmUgUXRXaWRn
ZXRzIGRlcGVuZGVuY3kgaW4gTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTI5CisKKyAgICAgICAgUmVtb3ZlIG9ic29sZXRlIGNv
ZGUgZm9yIGEgbmV3IFFNTCBiYXNlZCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBNaW5pQnJv
d3Nlci4KKyAgICAgICAgQ2hhbmdlIEJyb3dzZXJXaW5kb3cgdG8gZGVyaXZlIGZyb20gUVNHVmll
dyBpbnN0ZWFkIG9mCisgICAgICAgIFFNYWluV2luZG93LiBRU0dWaWV3IGlzIHVzZWQgYXMgYSB0
b3AgbGV2ZWwgd2luZG93IHRoYXQKKyAgICAgICAgcHJvdmlkZXMgdGhlIGNvbnRhaW5lciBmb3Ig
cGxhY2luZyBRTUwgY29udGVudC4KKyAgICAgICAgTWFrZSBNaW5pQnJvd3NlckFwcGxpY2F0aW9u
IGRlcml2ZSBmcm9tIFFHdWlBcHBsaWNhdGlvbgorICAgICAgICBpbnN0ZWFkIG9mIFFBcHBsaWNh
dGlvbi4KKworICAgICAgICBQYXRjaCBieSBKb2NlbHluIFR1cmNvdHRlIDxqb2NlbHluLnR1cmNv
dHRlQG5va2lhLmNvbT4sCisgICAgICAgICAgICAgICAgIFplbm8gQWxiaXNzZXIgPHplbm8uYWxi
aXNzZXJAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICog
TWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHA6CisgICAgICAgIChCcm93c2VyV2luZG93
OjpCcm93c2VyV2luZG93KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OmxvYWQpOgorICAgICAg
ICAoQnJvd3NlcldpbmRvdzo6c2NyZWVuc2hvdCk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojps
b2FkVVJMTGlzdEZyb21GaWxlKToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OnVwZGF0ZVVzZXJB
Z2VudExpc3QpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6fkJyb3dzZXJXaW5kb3cpOgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuaDoKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci9xdC9NaW5pQnJvd3Nlci5wcm86CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXJBcHBsaWNhdGlvbi5jcHA6CisgICAgICAgIChNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpN
aW5pQnJvd3NlckFwcGxpY2F0aW9uKToKKyAgICAgICAgKE1pbmlCcm93c2VyQXBwbGljYXRpb246
Om5vdGlmeSk6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlv
bi5oOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHA6CisgICAgICAgIChV
cmxMb2FkZXI6OlVybExvYWRlcik6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6
CisKMjAxMS0xMC0yMCAgWmVubyBBbGJpc3NlciAgPHplbm8uYWxiaXNzZXJAbm9raWEuY29tPgoK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuY3BwIGIvVG9v
bHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmMWM2ZjJjLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dz
ZXJWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJCcm93c2VyVmlldy5oIgotCi0jaW5j
bHVkZSA8UUdyYXBoaWNzU2NlbmU+Ci0jaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xc2dpdGVtLmg+
Ci0jaW5jbHVkZSA8UVJlc2l6ZUV2ZW50PgotI2luY2x1ZGUgPHFkZXNrdG9wd2Vidmlldy5oPgot
I2luY2x1ZGUgPHF0b3VjaHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxxdG91Y2h3ZWJwYWdlLmg+Ci0j
aW5jbHVkZSA8cXdlYm5hdmlnYXRpb25jb250cm9sbGVyLmg+Ci0KLUJyb3dzZXJWaWV3OjpCcm93
c2VyVmlldyhib29sIHVzZVRvdWNoV2ViVmlldywgUVdpbmRvdyogcGFyZW50KQotICAgIDogUVNH
Q2FudmFzKHBhcmVudCkKLSAgICAsIG1faXRlbSgwKQotewotICAgIGlmICh1c2VUb3VjaFdlYlZp
ZXcpCi0gICAgICAgIG1faXRlbSA9IG5ldyBRVG91Y2hXZWJWaWV3KHJvb3RJdGVtKCkpOwotICAg
IGVsc2UKLSAgICAgICAgbV9pdGVtID0gbmV3IFFEZXNrdG9wV2ViVmlldyhyb290SXRlbSgpKTsK
LX0KLQotQnJvd3NlclZpZXc6On5Ccm93c2VyVmlldygpCi17Ci0gICAgZGVsZXRlIG1faXRlbTsK
LSAgICBtX2l0ZW0gPSAwOwotfQotCi12b2lkIEJyb3dzZXJWaWV3OjpyZXNpemVFdmVudChRUmVz
aXplRXZlbnQqIGV2ZW50KQotewotICAgIFFTR0NhbnZhczo6cmVzaXplRXZlbnQoZXZlbnQpOwot
ICAgIG1faXRlbS0+c2V0WCgwKTsKLSAgICBtX2l0ZW0tPnNldFkoMCk7Ci0gICAgbV9pdGVtLT5z
ZXRTaXplKGV2ZW50LT5zaXplKCkpOwotfQotCi12b2lkIEJyb3dzZXJWaWV3Ojpsb2FkKGNvbnN0
IFFTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBRVXJsIHVybChRVXJsOjpmcm9tVXNlcklucHV0
KHVybFN0cmluZykpOwotCi0gICAgaWYgKGRlc2t0b3BXZWJWaWV3KCkpCi0gICAgICAgIGRlc2t0
b3BXZWJWaWV3KCktPmxvYWQodXJsKTsKLSAgICBlbHNlIGlmICh0b3VjaFdlYlZpZXcoKSkKLSAg
ICAgICAgdG91Y2hXZWJWaWV3KCktPnBhZ2UoKS0+bG9hZCh1cmwpOwotfQotCi1RU0dJdGVtKiBC
cm93c2VyVmlldzo6dmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlbTsKLX0KLQotUVRv
dWNoV2ViVmlldyogQnJvd3NlclZpZXc6OnRvdWNoV2ViVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHFvYmplY3RfY2FzdDxRVG91Y2hXZWJWaWV3Kj4obV9pdGVtKTsKLX0KLQotUURlc2t0b3BX
ZWJWaWV3KiBCcm93c2VyVmlldzo6ZGVza3RvcFdlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVy
biBxb2JqZWN0X2Nhc3Q8UURlc2t0b3BXZWJWaWV3Kj4obV9pdGVtKTsKLX0KLQpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuaCBiL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L0Jyb3dzZXJWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNWVjZGIu
LjAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQnJvd3NlclZpZXdfaAotI2RlZmluZSBCcm93c2VyVmlld19oCi0KLSNp
bmNsdWRlIDxRQWN0aW9uPgotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXNnY2FudmFzLmg+Ci0j
aW5jbHVkZSA8cXdlYmtpdHR5cGVzLmg+Ci0KLWNsYXNzIFFEZXNrdG9wV2ViVmlldzsKLWNsYXNz
IFFTR0l0ZW07Ci1jbGFzcyBRVG91Y2hXZWJWaWV3OwotCi1jbGFzcyBCcm93c2VyVmlldyA6IHB1
YmxpYyBRU0dDYW52YXMgewotICAgIFFfT0JKRUNUCi0KLXB1YmxpYzoKLSAgICBCcm93c2VyVmll
dyhib29sIHVzZVRvdWNoV2ViVmlldywgUVdpbmRvdyogcGFyZW50ID0gMCk7Ci0gICAgdmlydHVh
bCB+QnJvd3NlclZpZXcoKTsKLQotICAgIHZvaWQgbG9hZChjb25zdCBRU3RyaW5nJik7Ci0gICAg
UVNHSXRlbSogdmlldygpIGNvbnN0OwotCi0gICAgUVRvdWNoV2ViVmlldyogdG91Y2hXZWJWaWV3
KCkgY29uc3Q7Ci0gICAgUURlc2t0b3BXZWJWaWV3KiBkZXNrdG9wV2ViVmlldygpIGNvbnN0Owot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCop
OwotCi1wcml2YXRlOgotICAgIFFTR0l0ZW0qIG1faXRlbTsKLX07Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAppbmRleCAzMTE0NTUyLi5lZTkwZmE4IDEwMDY0
NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcApAQCAtMzMsNDggKzMzLDkgQEAKICNp
bmNsdWRlICJxdG91Y2h3ZWJ2aWV3LmgiCiAjaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgogCi0j
aWYgMAotLy8gRklYTUUKLXN0YXRpYyBRV0tQYWdlKiBuZXdQYWdlRnVuY3Rpb24oUVdLUGFnZSog
cGFnZSkKLXsKLSAgICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdygp
OwotICAgIHJldHVybiB3aW5kb3ctPnBhZ2UoKTsKLX0KLSNlbmRpZgotCi1XaW5kb3dXcmFwcGVy
OjpXaW5kb3dXcmFwcGVyKFFXaW5kb3cqIHdpbmRvdywgUVdpZGdldCogd2lkZ2V0KQotICAgIDog
UVdpZGdldCh3aWRnZXQpCi0gICAgLCBtX3dpbmRvdyh3aW5kb3cpCi17Ci0gICAgLy8gVGhyb3R0
bGUgcmVzaXplIGV2ZW50cyBhIGJpdAotICAgIG1fcmVzaXplVGltZXIuc2V0SW50ZXJ2YWwoMTYp
OwotICAgIG1fcmVzaXplVGltZXIuc2V0U2luZ2xlU2hvdCh0cnVlKTsKLSAgICBjb25uZWN0KCZt
X3Jlc2l6ZVRpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChkb1Jlc2l6ZSgpKSk7
Ci0gICAgbV93aW5kb3ctPnNldFdpbmRvd0ZsYWdzKFF0OjpGcmFtZWxlc3NXaW5kb3dIaW50KTsK
LX0KLQotdm9pZCBXaW5kb3dXcmFwcGVyOjpzaG93RXZlbnQoUVNob3dFdmVudCogZXZlbnQpCi17
Ci0gICAgUVdpZGdldDo6c2hvd0V2ZW50KGV2ZW50KTsKLSAgICBtX3dpbmRvdy0+c2V0UGFyZW50
KHdpbmRvdygpLT53aW5kb3dIYW5kbGUoKSk7Ci0gICAgbV93aW5kb3ctPnNob3coKTsKLX0KLQot
dm9pZCBXaW5kb3dXcmFwcGVyOjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGV2ZW50KQotewot
ICAgIFFXaWRnZXQ6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKLSAgICBpZiAoIW1fcmVzaXplVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgbV9yZXNpemVUaW1lci5zdGFydCgpOwotfQotCi12b2lkIFdp
bmRvd1dyYXBwZXI6OmRvUmVzaXplKCkKLXsKLSAgICBtX3dpbmRvdy0+c2V0R2VvbWV0cnkoUVJl
Y3QobWFwVG8od2luZG93KCksIFFQb2ludCgwLCAwKSksIHNpemUoKSkpOwotfQogCiBCcm93c2Vy
V2luZG93OjpCcm93c2VyV2luZG93KFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCiAgICAgOiBtX3Vy
bExvYWRlcigwKQotICAgICwgbV9icm93c2VyKDApCiB7CiAgICAgaWYgKG9wdGlvbnMpCiAgICAg
ICAgIG1fd2luZG93T3B0aW9ucyA9ICpvcHRpb25zOwpAQCAtODMsNzYgKzQ0LDggQEAgQnJvd3Nl
cldpbmRvdzo6QnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogICAgICAgICBt
X3dpbmRvd09wdGlvbnMgPSB0bXBPcHRpb25zOwogICAgIH0KIAotICAgIG1fYnJvd3NlciA9IG5l
dyBCcm93c2VyVmlldyhtX3dpbmRvd09wdGlvbnMudXNlVG91Y2hXZWJWaWV3KTsKLQotICAgIHNl
dEF0dHJpYnV0ZShRdDo6V0FfRGVsZXRlT25DbG9zZSk7Ci0KLSAgICBjb25uZWN0KHdlYlZpZXco
KSwgU0lHTkFMKGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KSksIFNMT1Qob25Mb2FkUHJvZ3Jlc3ND
aGFuZ2VkKGludCkpKTsKLSAgICBjb25uZWN0KHdlYlZpZXcoKSwgU0lHTkFMKHRpdGxlQ2hhbmdl
ZChRU3RyaW5nKSksIFNMT1Qoc2V0V2luZG93VGl0bGUoUVN0cmluZykpKTsKLSAgICBjb25uZWN0
KHdlYlZpZXcoKSwgU0lHTkFMKHVybENoYW5nZWQoUVVybCkpLCBTTE9UKHVybENoYW5nZWQoUVVy
bCkpKTsKLQotICAgIGlmIChtX3dpbmRvd09wdGlvbnMucHJpbnRMb2FkZWRVcmxzKQotICAgICAg
ICBjb25uZWN0KHdlYlZpZXcoKSwgU0lHTkFMKHVybENoYW5nZWQoUVVybCkpLCB0aGlzLCBTTE9U
KHByaW50VVJMKFFVcmwpKSk7Ci0KLSAgICBpZiAoUURlc2t0b3BXZWJWaWV3KiBjb25zdCBkZXNr
dG9wV2ViVmlldyA9IG1fYnJvd3Nlci0+ZGVza3RvcFdlYlZpZXcoKSkgewotICAgICAgICBjb25u
ZWN0KGRlc2t0b3BXZWJWaWV3LCBTSUdOQUwoc3RhdHVzQmFyTWVzc2FnZUNoYW5nZWQoUVN0cmlu
ZykpLCBzdGF0dXNCYXIoKSwgU0xPVChzaG93TWVzc2FnZShRU3RyaW5nKSkpOwotICAgICAgICBj
b25uZWN0KGRlc2t0b3BXZWJWaWV3LCBTSUdOQUwobGlua0hvdmVyZWQoUVVybCwgUVN0cmluZykp
LCB0aGlzLCBTTE9UKG9uTGlua0hvdmVyZWQoUVVybCwgUVN0cmluZykpKTsKLSAgICB9Ci0KLSAg
ICBzZXRDZW50cmFsV2lkZ2V0KG5ldyBXaW5kb3dXcmFwcGVyKG1fYnJvd3NlciwgdGhpcykpOwot
ICAgIGNlbnRyYWxXaWRnZXQoKS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24pOwotCi0g
ICAgUU1lbnUqIGZpbGVNZW51ID0gbWVudUJhcigpLT5hZGRNZW51KCImRmlsZSIpOwotICAgIGZp
bGVNZW51LT5hZGRBY3Rpb24oIk5ldyBXaW5kb3ciLCB0aGlzLCBTTE9UKG5ld1dpbmRvdygpKSwg
UUtleVNlcXVlbmNlOjpOZXcpOwotICAgIGZpbGVNZW51LT5hZGRBY3Rpb24oIk9wZW4gRmlsZSIs
IHRoaXMsIFNMT1Qob3BlbkZpbGUoKSksIFFLZXlTZXF1ZW5jZTo6T3Blbik7Ci0gICAgZmlsZU1l
bnUtPmFkZFNlcGFyYXRvcigpOwotICAgIGZpbGVNZW51LT5hZGRBY3Rpb24oIlF1aXQiLCB0aGlz
LCBTTE9UKGNsb3NlKCkpKTsKLQotI2lmIDAKLSAgICBRTWVudSogZWRpdE1lbnUgPSBtZW51QmFy
KCktPmFkZE1lbnUoIiZFZGl0Iik7Ci0gICAgUUFjdGlvbiogdW5kbyA9IHBhZ2UoKS0+YWN0aW9u
KFFXS1BhZ2U6OlVuZG8pOwotICAgIHVuZG8tPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRS2V5
U2VxdWVuY2U6OlVuZG8pKTsKLSAgICBlZGl0TWVudS0+YWRkQWN0aW9uKHVuZG8pOwotICAgIFFB
Y3Rpb24qIHJlZG8gPSBwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpSZWRvKTsKLSAgICByZWRvLT5z
ZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUUtleVNlcXVlbmNlOjpSZWRvKSk7Ci0gICAgZWRpdE1l
bnUtPmFkZEFjdGlvbihyZWRvKTsKLSAgICBlZGl0TWVudS0+YWRkU2VwYXJhdG9yKCk7Ci0KLSAg
ICBRTWVudSogdmlld01lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZWaWV3Iik7Ci0gICAgdmll
d01lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpTdG9wKSk7Ci0gICAgdmll
d01lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpSZWxvYWQpKTsKLSAgICB2
aWV3TWVudS0+YWRkU2VwYXJhdG9yKCk7Ci0gICAgdmlld01lbnUtPmFkZEFjdGlvbigiVGFrZSBT
Y3JlZW4gU2hvdC4uLiIsIHRoaXMsIFNMT1Qoc2NyZWVuc2hvdCgpKSk7Ci0jZW5kaWYKLQotICAg
IFFNZW51KiB3aW5kb3dNZW51ID0gbWVudUJhcigpLT5hZGRNZW51KCImV2luZG93Iik7Ci0gICAg
UUFjdGlvbiogdG9nZ2xlRnVsbFNjcmVlbiA9IHdpbmRvd01lbnUtPmFkZEFjdGlvbigiVG9nZ2xl
IEZ1bGxTY3JlZW4iLCB0aGlzLCBTSUdOQUwoZW50ZXJlZEZ1bGxTY3JlZW5Nb2RlKGJvb2wpKSk7
Ci0gICAgdG9nZ2xlRnVsbFNjcmVlbi0+c2V0U2hvcnRjdXQoUXQ6OktleV9GMTEpOwotICAgIHRv
Z2dsZUZ1bGxTY3JlZW4tPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICB0b2dnbGVGdWxsU2NyZWVu
LT5zZXRDaGVja2VkKGZhbHNlKTsKLSAgICAvLyBXaGVuIGV4aXQgZnVsbHNjcmVlbiBtb2RlIGJ5
IGNsaWNraW5nIG9uIHRoZSBleGl0IGFyZWEgKGJvdHRvbSByaWdodCBjb3JuZXIpIHdlIG11c3QK
LSAgICAvLyB1bmNoZWNrIHRoZSBUb2dnbGUgRnVsbFNjcmVlbiBhY3Rpb24uCi0gICAgdG9nZ2xl
RnVsbFNjcmVlbi0+Y29ubmVjdCh0aGlzLCBTSUdOQUwoZW50ZXJlZEZ1bGxTY3JlZW5Nb2RlKGJv
b2wpKSwgU0xPVChzZXRDaGVja2VkKGJvb2wpKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwo
ZW50ZXJlZEZ1bGxTY3JlZW5Nb2RlKGJvb2wpKSwgdGhpcywgU0xPVCh0b2dnbGVGdWxsU2NyZWVu
TW9kZShib29sKSkpOwotCi0gICAgUU1lbnUqIHRvb2xzTWVudSA9IG1lbnVCYXIoKS0+YWRkTWVu
dSgiJkRldmVsb3AiKTsKLSAgICB0b29sc01lbnUtPmFkZEFjdGlvbigiQ2hhbmdlIFVzZXIgQWdl
bnQiLCB0aGlzLCBTTE9UKHNob3dVc2VyQWdlbnREaWFsb2coKSkpOwotICAgIHRvb2xzTWVudS0+
YWRkU2VwYXJhdG9yKCk7Ci0gICAgdG9vbHNNZW51LT5hZGRBY3Rpb24oIkxvYWQgVVJMcyBmcm9t
IGZpbGUiLCB0aGlzLCBTTE9UKGxvYWRVUkxMaXN0RnJvbUZpbGUoKSkpOwotCi0gICAgbV9hZGRy
ZXNzQmFyID0gbmV3IFFMaW5lRWRpdCgpOwotICAgIGNvbm5lY3QobV9hZGRyZXNzQmFyLCBTSUdO
QUwocmV0dXJuUHJlc3NlZCgpKSwgU0xPVChjaGFuZ2VMb2NhdGlvbigpKSk7Ci0KLSAgICBRU2hv
cnRjdXQqIHNlbGVjdEFkZHJlc3NCYXIgPSBuZXcgUVNob3J0Y3V0KFF0OjpDVFJMIHwgUXQ6Oktl
eV9MLCB0aGlzKTsKLSAgICBjb25uZWN0KHNlbGVjdEFkZHJlc3NCYXIsIFNJR05BTChhY3RpdmF0
ZWQoKSksIHRoaXMsIFNMT1Qob3BlbkxvY2F0aW9uKCkpKTsKLQotI2lmIDAKLSAgICAvLyBGSVhN
RQotICAgIHBhZ2UoKS0+c2V0Q3JlYXRlTmV3UGFnZUZ1bmN0aW9uKG5ld1BhZ2VGdW5jdGlvbik7
Ci0jZW5kaWYKLQogICAgIGlmIChtX3dpbmRvd09wdGlvbnMuc3RhcnRNYXhpbWl6ZWQpCi0gICAg
ICAgIHNldFdpbmRvd1N0YXRlKHdpbmRvd1N0YXRlKCkgfCBRdDo6V2luZG93TWF4aW1pemVkKTsK
KyAgICAgICAgc2V0V2luZG93U3RhdGUoUXQ6OldpbmRvd01heGltaXplZCk7CiAgICAgZWxzZQog
ICAgICAgICByZXNpemUoODAwLCA2MDApOwogICAgIHNob3coKTsKQEAgLTE2MCwxMyArNTMsNiBA
QCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCiAK
IHZvaWQgQnJvd3NlcldpbmRvdzo6bG9hZChjb25zdCBRU3RyaW5nJiB1cmwpCiB7Ci0gICAgbV9h
ZGRyZXNzQmFyLT5zZXRUZXh0KHVybCk7Ci0gICAgbV9icm93c2VyLT5sb2FkKHVybCk7Ci19Ci0K
LVFPYmplY3QqIEJyb3dzZXJXaW5kb3c6OndlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBt
X2Jyb3dzZXItPnRvdWNoV2ViVmlldygpID8gc3RhdGljX2Nhc3Q8UU9iamVjdCo+KG1fYnJvd3Nl
ci0+dG91Y2hXZWJWaWV3KCktPnBhZ2UoKSkgOiBzdGF0aWNfY2FzdDxRT2JqZWN0Kj4obV9icm93
c2VyLT5kZXNrdG9wV2ViVmlldygpKTsKIH0KIAogQnJvd3NlcldpbmRvdyogQnJvd3NlcldpbmRv
dzo6bmV3V2luZG93KGNvbnN0IFFTdHJpbmcmIHVybCkKQEAgLTE3NiwxNzEgKzYyLDE5IEBAIEJy
b3dzZXJXaW5kb3cqIEJyb3dzZXJXaW5kb3c6Om5ld1dpbmRvdyhjb25zdCBRU3RyaW5nJiB1cmwp
CiAgICAgcmV0dXJuIHdpbmRvdzsKIH0KIAotdm9pZCBCcm93c2VyV2luZG93OjpvcGVuTG9jYXRp
b24oKQotewotICAgIG1fYWRkcmVzc0Jhci0+c2VsZWN0QWxsKCk7Ci0gICAgbV9hZGRyZXNzQmFy
LT5zZXRGb2N1cygpOwotfQotCi12b2lkIEJyb3dzZXJXaW5kb3c6OmNoYW5nZUxvY2F0aW9uKCkK
LXsKLSAgICBRU3RyaW5nIHN0cmluZyA9IG1fYWRkcmVzc0Jhci0+dGV4dCgpOwotICAgIG1fYnJv
d3Nlci0+bG9hZChzdHJpbmcpOwotfQotCi12b2lkIEJyb3dzZXJXaW5kb3c6Om9uTG9hZFByb2dy
ZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpCi17Ci0gICAgUUNvbG9yIGJhY2tncm91bmRDb2xvciA9
IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpLmNvbG9yKFFQYWxldHRlOjpCYXNlKTsKLSAgICBRQ29s
b3IgcHJvZ3Jlc3NDb2xvciA9IFFDb2xvcigxMjAsIDE4MCwgMjQwKTsKLSAgICBRUGFsZXR0ZSBw
YWxsZXRlID0gbV9hZGRyZXNzQmFyLT5wYWxldHRlKCk7Ci0KLSAgICBpZiAocHJvZ3Jlc3MgPD0g
MCB8fCBwcm9ncmVzcyA+PSAxMDApCi0gICAgICAgIHBhbGxldGUuc2V0QnJ1c2goUVBhbGV0dGU6
OkJhc2UsIGJhY2tncm91bmRDb2xvcik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFFMaW5lYXJHcmFk
aWVudCBncmFkaWVudCgwLCAwLCB3aWR0aCgpLCAwKTsKLSAgICAgICAgZ3JhZGllbnQuc2V0Q29s
b3JBdCgwLCBwcm9ncmVzc0NvbG9yKTsKLSAgICAgICAgZ3JhZGllbnQuc2V0Q29sb3JBdCgoKGRv
dWJsZSkgcHJvZ3Jlc3MpIC8gMTAwLCBwcm9ncmVzc0NvbG9yKTsKLSAgICAgICAgaWYgKHByb2dy
ZXNzICE9IDEwMCkKLSAgICAgICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoKGRvdWJsZSkgcHJv
Z3Jlc3MgLyAxMDAgKyAwLjAwMSwgYmFja2dyb3VuZENvbG9yKTsKLSAgICAgICAgcGFsbGV0ZS5z
ZXRCcnVzaChRUGFsZXR0ZTo6QmFzZSwgZ3JhZGllbnQpOwotICAgIH0KLSAgICBtX2FkZHJlc3NC
YXItPnNldFBhbGV0dGUocGFsbGV0ZSk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6dXJsQ2hh
bmdlZChjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgbV9hZGRyZXNzQmFyLT5zZXRUZXh0KHVybC50
b1N0cmluZygpKTsKLSAgICBtX2Jyb3dzZXItPnJlcXVlc3RBY3RpdmF0ZVdpbmRvdygpOwotICAg
IG1fYnJvd3Nlci0+dmlldygpLT5zZXRGb2N1cyh0cnVlKTsKLX0KLQotdm9pZCBCcm93c2VyV2lu
ZG93OjpvcGVuRmlsZSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgZmlsdGVyKCJIVE1M
IEZpbGVzICgqLmh0bSAqLmh0bWwgKi54aHRtbCk7O1RleHQgRmlsZXMgKCoudHh0KTs7SW1hZ2Ug
RmlsZXMgKCouZ2lmICouanBnICoucG5nKTs7U1ZHIEZpbGVzICgqLnN2Zyk7O0FsbCBGaWxlcyAo
KikiKTsKLQotICAgIFFGaWxlRGlhbG9nIGZpbGVEaWFsb2codGhpcywgdHIoIk9wZW4iKSwgUVN0
cmluZygpLCBmaWx0ZXIpOwotICAgIGZpbGVEaWFsb2cuc2V0QWNjZXB0TW9kZShRRmlsZURpYWxv
Zzo6QWNjZXB0T3Blbik7Ci0gICAgZmlsZURpYWxvZy5zZXRGaWxlTW9kZShRRmlsZURpYWxvZzo6
RXhpc3RpbmdGaWxlKTsKLSAgICBmaWxlRGlhbG9nLnNldE9wdGlvbnMoUUZpbGVEaWFsb2c6OlJl
YWRPbmx5KTsKLQotICAgIGlmIChmaWxlRGlhbG9nLmV4ZWMoKSkgewotICAgICAgICBRU3RyaW5n
IHNlbGVjdGVkRmlsZSA9IGZpbGVEaWFsb2cuc2VsZWN0ZWRGaWxlcygpWzBdOwotICAgICAgICBp
ZiAoIXNlbGVjdGVkRmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBsb2FkKHNlbGVjdGVkRmls
ZSk7Ci0gICAgfQotfQotCiB2b2lkIEJyb3dzZXJXaW5kb3c6OnNjcmVlbnNob3QoKQogewotICAg
IFFQaXhtYXAgcGl4bWFwID0gUVBpeG1hcDo6Z3JhYldpZGdldChtX2Jyb3dzZXIpOwotICAgIFFM
YWJlbCogbGFiZWwgPSAwOwotICAgIGxhYmVsID0gbmV3IFFMYWJlbDsKLSAgICBsYWJlbC0+c2V0
QXR0cmlidXRlKFF0OjpXQV9EZWxldGVPbkNsb3NlKTsKLSAgICBsYWJlbC0+c2V0V2luZG93VGl0
bGUoIlNjcmVlbnNob3QgLSBQcmV2aWV3Iik7Ci0gICAgbGFiZWwtPnNldFBpeG1hcChwaXhtYXAp
OwotICAgIGxhYmVsLT5zaG93KCk7Ci0KLSAgICBRU3RyaW5nIGZpbGVOYW1lID0gUUZpbGVEaWFs
b2c6OmdldFNhdmVGaWxlTmFtZShsYWJlbCwgIlNjcmVlbnNob3QiLCBRU3RyaW5nKCksIFFTdHJp
bmcoIlBORyBGaWxlICgucG5nKSIpKTsKLSAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewot
ICAgICAgICBRUmVnRXhwIHJ4KCIqLnBuZyIpOwotICAgICAgICByeC5zZXRDYXNlU2Vuc2l0aXZp
dHkoUXQ6OkNhc2VJbnNlbnNpdGl2ZSk7Ci0gICAgICAgIHJ4LnNldFBhdHRlcm5TeW50YXgoUVJl
Z0V4cDo6V2lsZGNhcmQpOwotCi0gICAgICAgIGlmICghcnguZXhhY3RNYXRjaChmaWxlTmFtZSkp
Ci0gICAgICAgICAgICBmaWxlTmFtZSArPSAiLnBuZyI7Ci0KLSAgICAgICAgcGl4bWFwLnNhdmUo
ZmlsZU5hbWUsICJwbmciKTsKLSAgICAgICAgaWYgKGxhYmVsKQotICAgICAgICAgICAgbGFiZWwt
PnNldFdpbmRvd1RpdGxlKFFTdHJpbmcoIlNjcmVlbnNob3QgLSBTYXZlZCBhdCAlMSIpLmFyZyhm
aWxlTmFtZSkpOwotICAgIH0KLX0KLQotdm9pZCBCcm93c2VyV2luZG93Ojp0b2dnbGVGdWxsU2Ny
ZWVuTW9kZShib29sIGVuYWJsZSkKLXsKLSAgICBib29sIGFscmVhZHlFbmFibGVkID0gd2luZG93
U3RhdGUoKSAmIFF0OjpXaW5kb3dGdWxsU2NyZWVuOwotICAgIGlmIChlbmFibGUgXiBhbHJlYWR5
RW5hYmxlZCkKLSAgICAgICAgc2V0V2luZG93U3RhdGUod2luZG93U3RhdGUoKSBeIFF0OjpXaW5k
b3dGdWxsU2NyZWVuKTsKLX0KLQotdm9pZCBCcm93c2VyV2luZG93OjpzaG93VXNlckFnZW50RGlh
bG9nKCkKLXsKLSNpZiAwCi0gICAgLy8gRklYTUUKLSAgICB1cGRhdGVVc2VyQWdlbnRMaXN0KCk7
Ci0KLSAgICBRRGlhbG9nIGRpYWxvZyh0aGlzKTsKLSAgICBkaWFsb2cuc2V0V2luZG93VGl0bGUo
IkNoYW5nZSBVc2VyIEFnZW50Iik7Ci0gICAgZGlhbG9nLnJlc2l6ZShzaXplKCkud2lkdGgoKSAq
IDAuNywgZGlhbG9nLnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgUVZCb3hMYXlvdXQqIGxheW91dCA9
IG5ldyBRVkJveExheW91dCgmZGlhbG9nKTsKLSAgICBkaWFsb2cuc2V0TGF5b3V0KGxheW91dCk7
Ci0KLSAgICBRQ29tYm9Cb3gqIGNvbWJvID0gbmV3IFFDb21ib0JveCgmZGlhbG9nKTsKLSAgICBj
b21iby0+c2V0U2l6ZUFkanVzdFBvbGljeShRQ29tYm9Cb3g6OkFkanVzdFRvTWluaW11bUNvbnRl
bnRzTGVuZ3RoKTsKLSAgICBjb21iby0+c2V0RWRpdGFibGUodHJ1ZSk7Ci0gICAgY29tYm8tPmlu
c2VydEl0ZW1zKDAsIG1fdXNlckFnZW50TGlzdCk7Ci0gICAgbGF5b3V0LT5hZGRXaWRnZXQoY29t
Ym8pOwotCi0gICAgaW50IGluZGV4ID0gY29tYm8tPmZpbmRUZXh0KHBhZ2UoKS0+Y3VzdG9tVXNl
ckFnZW50KCkpOwotICAgIGNvbWJvLT5zZXRDdXJyZW50SW5kZXgoaW5kZXgpOwotCi0gICAgUURp
YWxvZ0J1dHRvbkJveCogYnV0dG9uQm94ID0gbmV3IFFEaWFsb2dCdXR0b25Cb3goUURpYWxvZ0J1
dHRvbkJveDo6T2sgfCBRRGlhbG9nQnV0dG9uQm94OjpDYW5jZWwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgUXQ6Okhvcml6b250YWwsICZk
aWFsb2cpOwotICAgIGNvbm5lY3QoYnV0dG9uQm94LCBTSUdOQUwoYWNjZXB0ZWQoKSksICZkaWFs
b2csIFNMT1QoYWNjZXB0KCkpKTsKLSAgICBjb25uZWN0KGJ1dHRvbkJveCwgU0lHTkFMKHJlamVj
dGVkKCkpLCAmZGlhbG9nLCBTTE9UKHJlamVjdCgpKSk7Ci0gICAgbGF5b3V0LT5hZGRXaWRnZXQo
YnV0dG9uQm94KTsKLQotICAgIGlmIChkaWFsb2cuZXhlYygpICYmICFjb21iby0+Y3VycmVudFRl
eHQoKS5pc0VtcHR5KCkpCi0gICAgICAgIHBhZ2UoKS0+c2V0Q3VzdG9tVXNlckFnZW50KGNvbWJv
LT5jdXJyZW50VGV4dCgpKTsKLSNlbmRpZgogfQogCiB2b2lkIEJyb3dzZXJXaW5kb3c6OmxvYWRV
UkxMaXN0RnJvbUZpbGUoKQogewotICAgIFFTdHJpbmcgc2VsZWN0ZWRGaWxlOwotICAgIHNlbGVj
dGVkRmlsZSA9IFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUodGhpcywgdHIoIkxvYWQgVVJM
IGxpc3QgZnJvbSBmaWxlIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIFFTdHJpbmcoKSwgdHIoIlRleHQgRmlsZXMgKCoudHh0KTs7QWxs
IEZpbGVzICgqKSIpKTsKLSAgICBpZiAoc2VsZWN0ZWRGaWxlLmlzRW1wdHkoKSkKLSAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3VybExvYWRlciA9IG5ldyBVcmxMb2FkZXIodGhpcywgc2VsZWN0ZWRG
aWxlLCAwLCAwKTsKLSAgICBtX3VybExvYWRlci0+bG9hZE5leHQoKTsKLX0KLQotdm9pZCBCcm93
c2VyV2luZG93OjpwcmludFVSTChjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgUVRleHRTdHJlYW0g
b3V0cHV0KHN0ZG91dCk7Ci0gICAgb3V0cHV0IDw8ICJMb2FkZWQ6ICIgPDwgdXJsLnRvU3RyaW5n
KCkgPDwgZW5kbDsKLX0KLQotdm9pZCBCcm93c2VyV2luZG93OjpvbkxpbmtIb3ZlcmVkKGNvbnN0
IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYpCi17Ci0gICAgc3RhdHVzQmFyKCktPnNob3dNZXNz
YWdlKHVybC50b1N0cmluZygpKTsKIH0KIAogdm9pZCBCcm93c2VyV2luZG93Ojp1cGRhdGVVc2Vy
QWdlbnRMaXN0KCkKIHsKLSNpZiAwCi0gICAgLy8gRklYTUUKLSAgICBRRmlsZSBmaWxlKCI6L3Vz
ZXJhZ2VudGxpc3QudHh0Iik7Ci0KLSAgICBpZiAoZmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9u
bHkpKSB7Ci0gICAgICAgIHdoaWxlICghZmlsZS5hdEVuZCgpKSB7Ci0gICAgICAgICAgICBRU3Ry
aW5nIGFnZW50ID0gZmlsZS5yZWFkTGluZSgpLnRyaW1tZWQoKTsKLSAgICAgICAgICAgIGlmICgh
bV91c2VyQWdlbnRMaXN0LmNvbnRhaW5zKGFnZW50KSkKLSAgICAgICAgICAgICAgICBtX3VzZXJB
Z2VudExpc3QgPDwgYWdlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmlsZS5jbG9zZSgpOwotICAg
IH0KLQotICAgIFFfQVNTRVJUKCFtX3VzZXJBZ2VudExpc3QuaXNFbXB0eSgpKTsKLSAgICBRV0tQ
YWdlKiB3a1BhZ2UgPSBwYWdlKCk7Ci0gICAgaWYgKCEod2tQYWdlLT5jdXN0b21Vc2VyQWdlbnQo
KS5pc0VtcHR5KCkgfHwgbV91c2VyQWdlbnRMaXN0LmNvbnRhaW5zKHdrUGFnZS0+Y3VzdG9tVXNl
ckFnZW50KCkpKSkKLSAgICAgICAgbV91c2VyQWdlbnRMaXN0IDw8IHdrUGFnZS0+Y3VzdG9tVXNl
ckFnZW50KCk7Ci0jZW5kaWYKIH0KIAogQnJvd3NlcldpbmRvdzo6fkJyb3dzZXJXaW5kb3coKQog
ewogICAgIGRlbGV0ZSBtX3VybExvYWRlcjsKLSAgICBkZWxldGUgbV9hZGRyZXNzQmFyOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5oIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5oCmluZGV4IDJhODVhMDAuLjhlYzJkMWEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuaAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmgKQEAgLTI5LDc0ICsyOSwzNSBAQAogI2lm
bmRlZiBCcm93c2VyV2luZG93X2gKICNkZWZpbmUgQnJvd3NlcldpbmRvd19oCiAKLSNpbmNsdWRl
ICJCcm93c2VyVmlldy5oIgotCiAjaW5jbHVkZSAiTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oIgog
I2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogI2luY2x1ZGUgPFFUaW1lcj4KKyNpbmNsdWRlIDxRdERl
Y2xhcmF0aXZlL1FTR1ZpZXc+CiAKIGNsYXNzIFVybExvYWRlcjsKIAotY2xhc3MgV2luZG93V3Jh
cHBlciA6IHB1YmxpYyBRV2lkZ2V0Ci17Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFdp
bmRvd1dyYXBwZXIoUVdpbmRvdyogd2luZG93LCBRV2lkZ2V0KiB3aWRnZXQgPSAwKTsKLQotcHJv
dGVjdGVkOgotICAgIHZvaWQgc2hvd0V2ZW50KFFTaG93RXZlbnQqIGV2ZW50KTsKLSAgICB2b2lk
IHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCogZXZlbnQpOwotCi1wcml2YXRlIHNsb3RzOgotICAg
IHZvaWQgZG9SZXNpemUoKTsKLQotcHJpdmF0ZToKLSAgICBRV2luZG93KiBtX3dpbmRvdzsKLSAg
ICBRVGltZXIgbV9yZXNpemVUaW1lcjsKLX07Ci0KLWNsYXNzIEJyb3dzZXJXaW5kb3cgOiBwdWJs
aWMgUU1haW5XaW5kb3cgeworY2xhc3MgQnJvd3NlcldpbmRvdyA6IHB1YmxpYyBRU0dWaWV3IHsK
ICAgICBRX09CSkVDVAogCiBwdWJsaWM6CiAgICAgQnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25z
KiA9IDApOwogICAgIH5Ccm93c2VyV2luZG93KCk7CiAgICAgdm9pZCBsb2FkKGNvbnN0IFFTdHJp
bmcmIHVybCk7Ci0KICAgICBRT2JqZWN0KiB3ZWJWaWV3KCkgY29uc3Q7CiAKIHB1YmxpYyBzbG90
czoKICAgICBCcm93c2VyV2luZG93KiBuZXdXaW5kb3coY29uc3QgUVN0cmluZyYgdXJsID0gImFi
b3V0OmJsYW5rIik7Ci0gICAgdm9pZCBvcGVuTG9jYXRpb24oKTsKLQotc2lnbmFsczoKLSAgICB2
b2lkIGVudGVyZWRGdWxsU2NyZWVuTW9kZShib29sIG9uKTsKIAogcHJvdGVjdGVkIHNsb3RzOgot
ICAgIHZvaWQgY2hhbmdlTG9jYXRpb24oKTsKLSAgICB2b2lkIG9uTG9hZFByb2dyZXNzQ2hhbmdl
ZChpbnQgcHJvZ3Jlc3MpOwotICAgIHZvaWQgdXJsQ2hhbmdlZChjb25zdCBRVXJsJik7Ci0gICAg
dm9pZCBvcGVuRmlsZSgpOwotCiAgICAgdm9pZCBzY3JlZW5zaG90KCk7CiAKLSAgICB2b2lkIHRv
Z2dsZUZ1bGxTY3JlZW5Nb2RlKGJvb2wgZW5hYmxlKTsKLQotICAgIHZvaWQgc2hvd1VzZXJBZ2Vu
dERpYWxvZygpOwotCiAgICAgdm9pZCBsb2FkVVJMTGlzdEZyb21GaWxlKCk7CiAKLSAgICB2b2lk
IHByaW50VVJMKGNvbnN0IFFVcmwmKTsKLSAgICB2b2lkIG9uTGlua0hvdmVyZWQoY29uc3QgUVVy
bCYsIGNvbnN0IFFTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVVzZXJBZ2Vu
dExpc3QoKTsKIAogICAgIFVybExvYWRlciogbV91cmxMb2FkZXI7CiAgICAgV2luZG93T3B0aW9u
cyBtX3dpbmRvd09wdGlvbnM7Ci0gICAgQnJvd3NlclZpZXcqIG1fYnJvd3NlcjsKLSAgICBRTGlu
ZUVkaXQqIG1fYWRkcmVzc0JhcjsKICAgICBRU3RyaW5nTGlzdCBtX3VzZXJBZ2VudExpc3Q7CiB9
OwogCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8gYi9U
b29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KaW5kZXggODhjNTcxOC4uYTJlZDA5
OCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybwpAQCAtMiw3ICsyLDYgQEAgVEVN
UExBVEUgPSBhcHAKIFRBUkdFVCA9IE1pbmlCcm93c2VyCiAKIFNPVVJDRVMgKz0gXAotICAgIEJy
b3dzZXJWaWV3LmNwcCBcCiAgICAgQnJvd3NlcldpbmRvdy5jcHAgXAogICAgIG1haW4uY3BwIFwK
ICAgICBNaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcCBcCkBAIC0xMCw3ICs5LDYgQEAgU09VUkNF
UyArPSBcCiAgICAgdXRpbHMuY3BwIFwKIAogSEVBREVSUyArPSBcCi0gICAgQnJvd3NlclZpZXcu
aCBcCiAgICAgQnJvd3NlcldpbmRvdy5oIFwKICAgICBNaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgg
XAogICAgIFVybExvYWRlci5oIFwKQEAgLTMyLDcgKzMwLDYgQEAgQ09ORklHIC09IGFwcF9idW5k
bGUKIAogUVQgKz0gbmV0d29yayBkZWNsYXJhdGl2ZQogbWFjeDpRVCs9eG1sCi1ncmVhdGVyVGhh
bihRVF9NQUpPUl9WRVJTSU9OLCA0KTogUVQgKz0gd2lkZ2V0cwogCiBsaW51eC0qIHsKICAgICAj
IEZyb20gQ3JlYXRvcidzIHNyYy9ycGF0aC5wcmk6CkBAIC00NywxMSArNDQsNiBAQCBsaW51eC0q
IHsKICAgICBRTUFLRV9SUEFUSERJUiA9ICQkT1VUUFVUX0RJUi9saWIgJCRRTUFLRV9SUEFUSERJ
UgogfQogCi1jb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgewotICAgIFFUICs9IG9wZW5nbAot
ICAgIERFRklORVMgKz0gUVRfQ09ORklHVVJFRF9XSVRIX09QRU5HTAotfQotCiBERUZJTkVTIC09
IFFUX0FTQ0lJX0NBU1RfV0FSTklOR1MKIAogIyBVc2UgdGhlIE1pbmlCcm93c2VyLnFyYyBmaWxl
IGZyb20gdGhlIHNvdXJjZXMuCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5p
QnJvd3NlckFwcGxpY2F0aW9uLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2Vy
QXBwbGljYXRpb24uY3BwCmluZGV4IDk4YjdjN2UuLmQ0YjUwYTEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uY3BwCisrKyBiL1Rvb2xzL01p
bmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uY3BwCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW5jbHVkZSA8UUV2ZW50PgogI2luY2x1ZGUgPFFNb3VzZUV2ZW50PgogI2luY2x1ZGUgPFFU
b3VjaEV2ZW50PgotI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KIAogc3RhdGljIGlubGluZSBi
b29sIGlzVG91Y2hFdmVudChjb25zdCBRRXZlbnQqIGV2ZW50KQogewpAQCAtNjEsMTAgKzYwLDgg
QEAgc3RhdGljIGlubGluZSBib29sIGlzTW91c2VFdmVudChjb25zdCBRRXZlbnQqIGV2ZW50KQog
fQogCiBNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpNaW5pQnJvd3NlckFwcGxpY2F0aW9uKGludCYg
YXJnYywgY2hhcioqIGFyZ3YpCi0gICAgOiBRQXBwbGljYXRpb24oYXJnYywgYXJndiwgUUFwcGxp
Y2F0aW9uOjpHdWlTZXJ2ZXIpCisgICAgOiBRR3VpQXBwbGljYXRpb24oYXJnYywgYXJndikKICAg
ICAsIG1fd2luZG93T3B0aW9ucygpCi0gICAgLCBtX3JlYWxUb3VjaEV2ZW50UmVjZWl2ZWQoZmFs
c2UpCi0gICAgLCBtX3BlbmRpbmdGYWtlVG91Y2hFdmVudENvdW50KDApCiAgICAgLCBtX2lzUm9i
b3RpemVkKGZhbHNlKQogICAgICwgbV9yb2JvdFRpbWVvdXRTZWNvbmRzKDApCiAgICAgLCBtX3Jv
Ym90RXh0cmFUaW1lU2Vjb25kcygwKQpAQCAtODEsOTEgKzc4LDQ3IEBAIGJvb2wgTWluaUJyb3dz
ZXJBcHBsaWNhdGlvbjo6bm90aWZ5KFFPYmplY3QqIHRhcmdldCwgUUV2ZW50KiBldmVudCkKICAg
ICAvLyBXZSB0cnkgdG8gYmUgc21hcnQsIGlmIHdlIHJlY2VpdmVkIHJlYWwgdG91Y2ggZXZlbnQs
IHdlIGFyZSBwcm9iYWJseSBvbiBhIGRldmljZQogICAgIC8vIHdpdGggdG91Y2ggc2NyZWVuLCBh
bmQgd2Ugc2hvdWxkIG5vdCBoYXZlIHRvdWNoIG1vY2tpbmcuCiAKLSAgICBpZiAoIWV2ZW50LT5z
cG9udGFuZW91cygpIHx8IG1fcmVhbFRvdWNoRXZlbnRSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJu
IFFBcHBsaWNhdGlvbjo6bm90aWZ5KHRhcmdldCwgZXZlbnQpOwotCi0gICAgaWYgKGlzVG91Y2hF
dmVudChldmVudCkgJiYgc3RhdGljX2Nhc3Q8UVRvdWNoRXZlbnQqPihldmVudCktPmRldmljZVR5
cGUoKSA9PSBRVG91Y2hFdmVudDo6VG91Y2hTY3JlZW4pIHsKLSAgICAgICAgaWYgKG1fcGVuZGlu
Z0Zha2VUb3VjaEV2ZW50Q291bnQpCi0gICAgICAgICAgICAtLW1fcGVuZGluZ0Zha2VUb3VjaEV2
ZW50Q291bnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVhbFRvdWNoRXZlbnRSZWNl
aXZlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBRQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQs
IGV2ZW50KTsKLSAgICB9Ci0KLSAgICBRV2luZG93KiB0YXJnZXRXaW5kb3cgPSBxb2JqZWN0X2Nh
c3Q8UVdpbmRvdyo+KHRhcmdldCk7Ci0gICAgaWYgKHRhcmdldFdpbmRvdyAmJiBpc01vdXNlRXZl
bnQoZXZlbnQpKSB7CisgICAgaWYgKCFldmVudC0+c3BvbnRhbmVvdXMoKSkKKyAgICAgICAgcmV0
dXJuIFFHdWlBcHBsaWNhdGlvbjo6bm90aWZ5KHRhcmdldCwgZXZlbnQpOworICAgIGlmIChpc1Rv
dWNoRXZlbnQoZXZlbnQpICYmIHN0YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXZlbnQpLT5kZXZp
Y2VUeXBlKCkgPT0gUVRvdWNoRXZlbnQ6OlRvdWNoU2NyZWVuKQorICAgICAgICByZXR1cm4gUUd1
aUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0LCBldmVudCk7CisgICAgaWYgKGlzTW91c2VFdmVu
dChldmVudCkpIHsKICAgICAgICAgY29uc3QgUU1vdXNlRXZlbnQqIGNvbnN0IG1vdXNlRXZlbnQg
PSBzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2ZW50KTsKIAotICAgICAgICBRV2luZG93U3lz
dGVtSW50ZXJmYWNlOjpUb3VjaFBvaW50IHRvdWNoUG9pbnQ7Ci0gICAgICAgIHRvdWNoUG9pbnQu
YXJlYSA9IFFSZWN0Rihtb3VzZUV2ZW50LT5nbG9iYWxQb3MoKSwgUVNpemVGKDEsIDEpKTsKLSAg
ICAgICAgdG91Y2hQb2ludC5wcmVzc3VyZSA9IDE7CisgICAgICAgIFFUb3VjaEV2ZW50OjpUb3Vj
aFBvaW50IHRvdWNoUG9pbnQ7CisgICAgICAgIHRvdWNoUG9pbnQuc2V0U2NyZWVuUG9zKG1vdXNl
RXZlbnQtPmdsb2JhbFBvcygpKTsKKyAgICAgICAgdG91Y2hQb2ludC5zZXRQb3MobW91c2VFdmVu
dC0+cG9zKCkpOwogCiAgICAgICAgIHN3aXRjaCAobW91c2VFdmVudC0+dHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzOgogICAgICAgICBjYXNlIFFFdmVudDo6
TW91c2VCdXR0b25EYmxDbGljazoKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuaWQgPSBtb3VzZUV2
ZW50LT5idXR0b24oKTsKLSAgICAgICAgICAgIGlmIChtX3RvdWNoUG9pbnRzLmNvbnRhaW5zKHRv
dWNoUG9pbnQuaWQpKQotICAgICAgICAgICAgICAgIHRvdWNoUG9pbnQuc3RhdGUgPSBRdDo6VG91
Y2hQb2ludE1vdmVkOworICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRJZChtb3VzZUV2ZW50LT5i
dXR0b24oKSk7CisgICAgICAgICAgICBpZiAobV90b3VjaFBvaW50cy5jb250YWlucyh0b3VjaFBv
aW50LmlkKCkpKQorICAgICAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6OlRvdWNo
UG9pbnRNb3ZlZCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdG91Y2hQb2lu
dC5zdGF0ZSA9IFF0OjpUb3VjaFBvaW50UHJlc3NlZDsKKyAgICAgICAgICAgICAgICB0b3VjaFBv
aW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UHJlc3NlZCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlTW92ZToKICAgICAgICAgICAgIGlmICghbW91c2VF
dmVudC0+YnV0dG9ucygpIHx8ICFtX3RvdWNoUG9pbnRzLmNvbnRhaW5zKG1vdXNlRXZlbnQtPmJ1
dHRvbnMoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6bm90aWZ5KHRh
cmdldCwgZXZlbnQpOwotICAgICAgICAgICAgdG91Y2hQb2ludC5zdGF0ZSA9IFF0OjpUb3VjaFBv
aW50TW92ZWQ7Ci0gICAgICAgICAgICB0b3VjaFBvaW50LmlkID0gbW91c2VFdmVudC0+YnV0dG9u
cygpOworICAgICAgICAgICAgICAgIHJldHVybiBRR3VpQXBwbGljYXRpb246Om5vdGlmeSh0YXJn
ZXQsIGV2ZW50KTsKKyAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6OlRvdWNoUG9p
bnRNb3ZlZCk7CisgICAgICAgICAgICB0b3VjaFBvaW50LnNldElkKG1vdXNlRXZlbnQtPmJ1dHRv
bnMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0
dG9uUmVsZWFzZToKICAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50LT5tb2RpZmllcnMoKS50ZXN0
RmxhZyhRdDo6Q29udHJvbE1vZGlmaWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUUFwcGxp
Y2F0aW9uOjpub3RpZnkodGFyZ2V0LCBldmVudCk7Ci0gICAgICAgICAgICB0b3VjaFBvaW50LnN0
YXRlID0gUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZDsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuaWQg
PSBtb3VzZUV2ZW50LT5idXR0b24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUUd1aUFwcGxp
Y2F0aW9uOjpub3RpZnkodGFyZ2V0LCBldmVudCk7CisgICAgICAgICAgICB0b3VjaFBvaW50LnNl
dFN0YXRlKFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpOworICAgICAgICAgICAgdG91Y2hQb2ludC5z
ZXRJZChtb3VzZUV2ZW50LT5idXR0b24oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFFfQVNTRVJUX1goZmFsc2UsICJtdWx0aS10b3VjaCBtb2Nr
aW5nIiwgInVuaGFuZGxlZCBldmVudCB0eXBlIik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBV
cGRhdGUgY3VycmVudCB0b3VjaC1wb2ludAotICAgICAgICBtX3RvdWNoUG9pbnRzLmluc2VydCh0
b3VjaFBvaW50LmlkLCB0b3VjaFBvaW50KTsKLQotICAgICAgICAvLyBVcGRhdGUgc3RhdGVzIGZv
ciBhbGwgb3RoZXIgdG91Y2gtcG9pbnRzCi0gICAgICAgIGZvciAoUUhhc2g8aW50LCBRV2luZG93
U3lzdGVtSW50ZXJmYWNlOjpUb3VjaFBvaW50Pjo6aXRlcmF0b3IgaXQgPSBtX3RvdWNoUG9pbnRz
LmJlZ2luKCksIGVuZCA9IG1fdG91Y2hQb2ludHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgaWYgKGl0LnZhbHVlKCkuaWQgIT0gdG91Y2hQb2ludC5pZCkKLSAgICAgICAg
ICAgICAgICBpdC52YWx1ZSgpLnN0YXRlID0gUXQ6OlRvdWNoUG9pbnRTdGF0aW9uYXJ5OwotICAg
ICAgICB9Ci0KLSAgICAgICAgUUxpc3Q8UVdpbmRvd1N5c3RlbUludGVyZmFjZTo6VG91Y2hQb2lu
dD4gdG91Y2hQb2ludHMgPSBtX3RvdWNoUG9pbnRzLnZhbHVlcygpOwotICAgICAgICBRV2luZG93
U3lzdGVtSW50ZXJmYWNlOjpUb3VjaFBvaW50JiBmaXJzdFBvaW50ID0gdG91Y2hQb2ludHMuZmly
c3QoKTsKLSAgICAgICAgZmlyc3RQb2ludC5pc1ByaW1hcnkgPSB0cnVlOwotCi0gICAgICAgIFFF
dmVudDo6VHlwZSBldmVudFR5cGU7Ci0gICAgICAgIHN3aXRjaCAodG91Y2hQb2ludC5zdGF0ZSkg
ewotICAgICAgICBjYXNlIFF0OjpUb3VjaFBvaW50UHJlc3NlZDoKLSAgICAgICAgICAgIGV2ZW50
VHlwZSA9IFFFdmVudDo6VG91Y2hCZWdpbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFF0OjpUb3VjaFBvaW50UmVsZWFzZWQ6Ci0gICAgICAgICAgICBldmVudFR5cGUgPSBRRXZl
bnQ6OlRvdWNoRW5kOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUXQ6OlRvdWNo
UG9pbnRTdGF0aW9uYXJ5OgotICAgICAgICAgICAgLy8gRG9uJ3Qgc2VuZCB0aGUgZXZlbnQgaWYg
bm90aGluZyBjaGFuZ2VkLgotICAgICAgICAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6bm90aWZ5
KHRhcmdldCwgZXZlbnQpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXZlbnRUeXBl
ID0gUUV2ZW50OjpUb3VjaFVwZGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgbV9wZW5kaW5nRmFrZVRvdWNoRXZlbnRDb3VudCsrOwotICAgICAgICBRV2luZG93
U3lzdGVtSW50ZXJmYWNlOjpoYW5kbGVUb3VjaEV2ZW50KHRhcmdldFdpbmRvdywgZXZlbnRUeXBl
LCBRVG91Y2hFdmVudDo6VG91Y2hTY3JlZW4sIHRvdWNoUG9pbnRzKTsKLQotICAgICAgICAvLyBH
ZXQgcmlkIG9mIHRvdWNoLXBvaW50cyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKLSAgICAgICAg
Zm9yZWFjaCAoY29uc3QgUVdpbmRvd1N5c3RlbUludGVyZmFjZTo6VG91Y2hQb2ludCYgdG91Y2hQ
b2ludCwgbV90b3VjaFBvaW50cykgewotICAgICAgICAgICAgaWYgKHRvdWNoUG9pbnQuc3RhdGUg
PT0gIFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpCi0gICAgICAgICAgICAgICAgbV90b3VjaFBvaW50
cy5yZW1vdmUodG91Y2hQb2ludC5pZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgVG91Y2hQb2ludCBoYW5kbGluZyBpbiBhIFF0
NS9RdFF1aWNrIGNvbXBhdGlibGUgd2F5LgogICAgIH0KIAotICAgIHJldHVybiBRQXBwbGljYXRp
b246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsKKyAgICByZXR1cm4gUUd1aUFwcGxpY2F0aW9uOjpu
b3RpZnkodGFyZ2V0LCBldmVudCk7CiB9CiAKIHZvaWQgTWluaUJyb3dzZXJBcHBsaWNhdGlvbjo6
aGFuZGxlVXNlck9wdGlvbnMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWlu
aUJyb3dzZXJBcHBsaWNhdGlvbi5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJB
cHBsaWNhdGlvbi5oCmluZGV4IGI2OGFlNGYuLjdiMmQxNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uaAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgKQEAgLTI5LDE4ICsyOSw5IEBACiAjaWZu
ZGVmIE1pbmlCcm93c2VyQXBwbGljYXRpb25faAogI2RlZmluZSBNaW5pQnJvd3NlckFwcGxpY2F0
aW9uX2gKIAotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRmlsZURpYWxvZz4K
KyNpbmNsdWRlIDxRdEd1aS9RR3VpQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUhhc2g+Ci0jaW5j
bHVkZSA8UUxhYmVsPgotI2luY2x1ZGUgPFFMaW5lRWRpdD4KLSNpbmNsdWRlIDxRTWFpbldpbmRv
dz4KLSNpbmNsdWRlIDxRTWVudT4KLSNpbmNsdWRlIDxRTWVudUJhcj4KLSNpbmNsdWRlIDxRU2hv
cnRjdXQ+Ci0jaW5jbHVkZSA8UVN0YXR1c0Jhcj4KICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KLSNp
bmNsdWRlIDxRVG9vbEJhcj4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KICNpbmNsdWRlIDxRVXJs
PgogI2luY2x1ZGUgInF3aW5kb3dzeXN0ZW1pbnRlcmZhY2VfcXBhLmgiCkBAIC02NCw3ICs1NSw3
IEBAIHN0cnVjdCBXaW5kb3dPcHRpb25zIHsKICNlbmRpZgogfTsKIAotY2xhc3MgTWluaUJyb3dz
ZXJBcHBsaWNhdGlvbiA6IHB1YmxpYyBRQXBwbGljYXRpb24geworY2xhc3MgTWluaUJyb3dzZXJB
cHBsaWNhdGlvbiA6IHB1YmxpYyBRR3VpQXBwbGljYXRpb24gewogICAgIFFfT0JKRUNUCiAKIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHAgYi9U
b29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwCmluZGV4IDk0ZDk0ODguLmY4MmE2ZDMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHAKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvcXQvVXJsTG9hZGVyLmNwcApAQCAtNDEsMTMgKzQxLDE2IEBAIFVybExv
YWRlcjo6VXJsTG9hZGVyKEJyb3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5kb3csIGNvbnN0IFFTdHJp
bmcmIGlucHV0RmlsZU5hbWUsCiAgICAgbV9jaGVja0lmRmluaXNoZWRUaW1lci5zZXRTaW5nbGVT
aG90KHRydWUpOwogICAgIGNvbm5lY3QoJm1fY2hlY2tJZkZpbmlzaGVkVGltZXIsIFNJR05BTCh0
aW1lb3V0KCkpLCB0aGlzLCBTTE9UKGNoZWNrSWZGaW5pc2hlZCgpKSk7CiAgICAgLy8gbG9hZFN0
YXJ0ZWQgYW5kIGxvYWRGaW5pc2hlZCBvbiBRV2ViUGFnZSBpcyBlbWl0dGVkIGZvciBlYWNoIGZy
YW1lL3N1Yi1mcmFtZQotICAgIGNvbm5lY3QobV9icm93c2VyV2luZG93LT53ZWJWaWV3KCksIFNJ
R05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRTdGFydGVkKCkpKTsKLSAg
ICBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBTSUdOQUwobG9hZEZpbmlzaGVk
KGJvb2wpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRGaW5pc2hlZCgpKSk7CisKKyAgICAvLyBGSVhN
RTogUmVjb25uZWN0IHRoaXMgc2lnbmFscyBhZnRlciBRdDUvUXRRdWljayByZXdyaXRlIGlmIG5l
Y2Vzc2FyeS4KKyAgICAvLyBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBTSUdO
QUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QoZnJhbWVMb2FkU3RhcnRlZCgpKSk7CisgICAg
Ly8gY29ubmVjdChtX2Jyb3dzZXJXaW5kb3ctPndlYlZpZXcoKSwgU0lHTkFMKGxvYWRGaW5pc2hl
ZChib29sKSksIHRoaXMsIFNMT1QoZnJhbWVMb2FkRmluaXNoZWQoKSkpOwogCiAgICAgaWYgKHRp
bWVvdXRTZWNvbmRzKSB7CiAgICAgICAgIG1fdGltZW91dFRpbWVyLnNldEludGVydmFsKHRpbWVv
dXRTZWNvbmRzICogMTAwMCk7CiAgICAgICAgIG1fdGltZW91dFRpbWVyLnNldFNpbmdsZVNob3Qo
dHJ1ZSk7Ci0gICAgICAgIGNvbm5lY3QobV9icm93c2VyV2luZG93LT53ZWJWaWV3KCksIFNJR05B
TChsb2FkU3RhcnRlZCgpKSwgJm1fdGltZW91dFRpbWVyLCBTTE9UKHN0YXJ0KCkpKTsKKyAgICAg
ICAgLy8gRklYTUU6IFJlY29ubmVjdCB0aGlzIHNpZ25hbCBhZnRlciBRdDUvUXRRdWljayByZXdy
aXRlIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gY29ubmVjdChtX2Jyb3dzZXJXaW5kb3ctPndl
YlZpZXcoKSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCAmbV90aW1lb3V0VGltZXIsIFNMT1Qoc3Rh
cnQoKSkpOwogICAgICAgICBjb25uZWN0KCZtX3RpbWVvdXRUaW1lciwgU0lHTkFMKHRpbWVvdXQo
KSksIHRoaXMsIFNMT1QobG9hZE5leHQoKSkpOwogICAgIH0KICAgICBpZiAoZXh0cmFUaW1lU2Vj
b25kcykgewpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBlOTBjNGY3Li5hMjBiMjVlIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9tYWluLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiTWluaUJyb3dzZXJB
cHBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIlVybExvYWRlci5oIgorI2luY2x1ZGUgPFFEaXI+CiAj
aW5jbHVkZSA8UUxhdGluMVN0cmluZz4KICNpbmNsdWRlIDxRUmVnRXhwPgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112322</attachid>
            <date>2011-10-25 04:59:04 -0700</date>
            <delta_ts>2011-10-25 05:34:21 -0700</delta_ts>
            <desc>patch for review. - save touch mocking.</desc>
            <filename>70525_20111025-135628.patch</filename>
            <type>text/plain</type>
            <size>27237</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZDZi
MGZhLi4yNTcyM2E3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsNDIgQEAKIDIwMTEtMTAtMjQgIFplbm8gQWxiaXNzZXIgIDx6ZW5v
LmFsYmlzc2VyQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRdW1dLMl0gUmVtb3ZlIFF0V2lkZ2V0
cyBkZXBlbmRlbmN5IGluIE1pbmlCcm93c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MDUyOQorCisgICAgICAgIFJlbW92ZSBvYnNvbGV0ZSBjb2Rl
IGZvciBhIG5ldyBRTUwgYmFzZWQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgb2YgTWluaUJyb3dz
ZXIuCisgICAgICAgIENoYW5nZSBCcm93c2VyV2luZG93IHRvIGRlcml2ZSBmcm9tIFFTR1ZpZXcg
aW5zdGVhZCBvZgorICAgICAgICBRTWFpbldpbmRvdy4gUVNHVmlldyBpcyB1c2VkIGFzIGEgdG9w
IGxldmVsIHdpbmRvdyB0aGF0CisgICAgICAgIHByb3ZpZGVzIHRoZSBjb250YWluZXIgZm9yIHBs
YWNpbmcgUU1MIGNvbnRlbnQuCisgICAgICAgIE1ha2UgTWluaUJyb3dzZXJBcHBsaWNhdGlvbiBk
ZXJpdmUgZnJvbSBRR3VpQXBwbGljYXRpb24KKyAgICAgICAgaW5zdGVhZCBvZiBRQXBwbGljYXRp
b24uCisKKyAgICAgICAgUGF0Y2ggYnkgSm9jZWx5biBUdXJjb3R0ZSA8am9jZWx5bi50dXJjb3R0
ZUBub2tpYS5jb20+LAorICAgICAgICAgICAgICAgICBaZW5vIEFsYmlzc2VyIDx6ZW5vLmFsYmlz
c2VyQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyVmlldy5oOiBSZW1vdmVkLgorICAgICAgICAqIE1p
bmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6
QnJvd3NlcldpbmRvdyk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojpsb2FkKToKKyAgICAgICAg
KEJyb3dzZXJXaW5kb3c6OnNjcmVlbnNob3QpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6bG9h
ZFVSTExpc3RGcm9tRmlsZSk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojp1cGRhdGVVc2VyQWdl
bnRMaXN0KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6On5Ccm93c2VyV2luZG93KToKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93Lmg6CisgICAgICAgICogTWluaUJyb3dz
ZXIvcXQvTWluaUJyb3dzZXIucHJvOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyQXBwbGljYXRpb24uY3BwOgorICAgICAgICAoTWluaUJyb3dzZXJBcHBsaWNhdGlvbjo6TWlu
aUJyb3dzZXJBcHBsaWNhdGlvbik6CisgICAgICAgIChNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpu
b3RpZnkpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24u
aDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwOgorICAgICAgICAoVXJs
TG9hZGVyOjpVcmxMb2FkZXIpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L21haW4uY3BwOgor
CisyMDExLTEwLTIwICBaZW5vIEFsYmlzc2VyICA8emVuby5hbGJpc3NlckBub2tpYS5jb20+CisK
ICAgICAgICAgW1F0XVtXSzJdIFJlbW92ZSBRQWN0aW9uIGZyb20gTWluaUJyb3dzZXIKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTI1CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL3F0L0Jyb3dzZXJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjFjNmYyYy4uMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyVmlldy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiQnJvd3NlclZpZXcuaCIKLQotI2luY2x1ZGUgPFFH
cmFwaGljc1NjZW5lPgotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXNnaXRlbS5oPgotI2luY2x1
ZGUgPFFSZXNpemVFdmVudD4KLSNpbmNsdWRlIDxxZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRl
IDxxdG91Y2h3ZWJ2aWV3Lmg+Ci0jaW5jbHVkZSA8cXRvdWNod2VicGFnZS5oPgotI2luY2x1ZGUg
PHF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgotCi1Ccm93c2VyVmlldzo6QnJvd3NlclZpZXco
Ym9vbCB1c2VUb3VjaFdlYlZpZXcsIFFXaW5kb3cqIHBhcmVudCkKLSAgICA6IFFTR0NhbnZhcyhw
YXJlbnQpCi0gICAgLCBtX2l0ZW0oMCkKLXsKLSAgICBpZiAodXNlVG91Y2hXZWJWaWV3KQotICAg
ICAgICBtX2l0ZW0gPSBuZXcgUVRvdWNoV2ViVmlldyhyb290SXRlbSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faXRlbSA9IG5ldyBRRGVza3RvcFdlYlZpZXcocm9vdEl0ZW0oKSk7Ci19Ci0KLUJy
b3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcoKQotewotICAgIGRlbGV0ZSBtX2l0ZW07Ci0gICAgbV9p
dGVtID0gMDsKLX0KLQotdm9pZCBCcm93c2VyVmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50
KiBldmVudCkKLXsKLSAgICBRU0dDYW52YXM6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKLSAgICBtX2l0
ZW0tPnNldFgoMCk7Ci0gICAgbV9pdGVtLT5zZXRZKDApOwotICAgIG1faXRlbS0+c2V0U2l6ZShl
dmVudC0+c2l6ZSgpKTsKLX0KLQotdm9pZCBCcm93c2VyVmlldzo6bG9hZChjb25zdCBRU3RyaW5n
JiB1cmxTdHJpbmcpCi17Ci0gICAgUVVybCB1cmwoUVVybDo6ZnJvbVVzZXJJbnB1dCh1cmxTdHJp
bmcpKTsKLQotICAgIGlmIChkZXNrdG9wV2ViVmlldygpKQotICAgICAgICBkZXNrdG9wV2ViVmll
dygpLT5sb2FkKHVybCk7Ci0gICAgZWxzZSBpZiAodG91Y2hXZWJWaWV3KCkpCi0gICAgICAgIHRv
dWNoV2ViVmlldygpLT5wYWdlKCktPmxvYWQodXJsKTsKLX0KLQotUVNHSXRlbSogQnJvd3NlclZp
ZXc6OnZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZW07Ci19Ci0KLVFUb3VjaFdlYlZp
ZXcqIEJyb3dzZXJWaWV3Ojp0b3VjaFdlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBxb2Jq
ZWN0X2Nhc3Q8UVRvdWNoV2ViVmlldyo+KG1faXRlbSk7Ci19Ci0KLVFEZXNrdG9wV2ViVmlldyog
QnJvd3NlclZpZXc6OmRlc2t0b3BXZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcW9iamVj
dF9jYXN0PFFEZXNrdG9wV2ViVmlldyo+KG1faXRlbSk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmggYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93
c2VyVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZThiNzM2Li4wMDAwMDAw
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEJyb3dzZXJWaWV3X2gKLSNkZWZpbmUgQnJvd3NlclZpZXdfaAotCi0jaW5jbHVkZSA8
UUFjdGlvbj4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FzZ2NhbnZhcy5oPgotCi1jbGFzcyBR
RGVza3RvcFdlYlZpZXc7Ci1jbGFzcyBRU0dJdGVtOwotY2xhc3MgUVRvdWNoV2ViVmlldzsKLQot
Y2xhc3MgQnJvd3NlclZpZXcgOiBwdWJsaWMgUVNHQ2FudmFzIHsKLSAgICBRX09CSkVDVAotCi1w
dWJsaWM6Ci0gICAgQnJvd3NlclZpZXcoYm9vbCB1c2VUb3VjaFdlYlZpZXcsIFFXaW5kb3cqIHBh
cmVudCA9IDApOwotICAgIHZpcnR1YWwgfkJyb3dzZXJWaWV3KCk7Ci0KLSAgICB2b2lkIGxvYWQo
Y29uc3QgUVN0cmluZyYpOwotICAgIFFTR0l0ZW0qIHZpZXcoKSBjb25zdDsKLQotICAgIFFUb3Vj
aFdlYlZpZXcqIHRvdWNoV2ViVmlldygpIGNvbnN0OwotICAgIFFEZXNrdG9wV2ViVmlldyogZGVz
a3RvcFdlYlZpZXcoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZXNp
emVFdmVudChRUmVzaXplRXZlbnQqKTsKLQotcHJpdmF0ZToKLSAgICBRU0dJdGVtKiBtX2l0ZW07
Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJX
aW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKaW5kZXgg
MzExNDU1Mi4uZWU5MGZhOCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3Nl
cldpbmRvdy5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAK
QEAgLTMzLDQ4ICszMyw5IEBACiAjaW5jbHVkZSAicXRvdWNod2Vidmlldy5oIgogI2luY2x1ZGUg
InF0b3VjaHdlYnBhZ2UuaCIKIAotI2lmIDAKLS8vIEZJWE1FCi1zdGF0aWMgUVdLUGFnZSogbmV3
UGFnZUZ1bmN0aW9uKFFXS1BhZ2UqIHBhZ2UpCi17Ci0gICAgQnJvd3NlcldpbmRvdyogd2luZG93
ID0gbmV3IEJyb3dzZXJXaW5kb3coKTsKLSAgICByZXR1cm4gd2luZG93LT5wYWdlKCk7Ci19Ci0j
ZW5kaWYKLQotV2luZG93V3JhcHBlcjo6V2luZG93V3JhcHBlcihRV2luZG93KiB3aW5kb3csIFFX
aWRnZXQqIHdpZGdldCkKLSAgICA6IFFXaWRnZXQod2lkZ2V0KQotICAgICwgbV93aW5kb3cod2lu
ZG93KQotewotICAgIC8vIFRocm90dGxlIHJlc2l6ZSBldmVudHMgYSBiaXQKLSAgICBtX3Jlc2l6
ZVRpbWVyLnNldEludGVydmFsKDE2KTsKLSAgICBtX3Jlc2l6ZVRpbWVyLnNldFNpbmdsZVNob3Qo
dHJ1ZSk7Ci0gICAgY29ubmVjdCgmbV9yZXNpemVUaW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRo
aXMsIFNMT1QoZG9SZXNpemUoKSkpOwotICAgIG1fd2luZG93LT5zZXRXaW5kb3dGbGFncyhRdDo6
RnJhbWVsZXNzV2luZG93SGludCk7Ci19Ci0KLXZvaWQgV2luZG93V3JhcHBlcjo6c2hvd0V2ZW50
KFFTaG93RXZlbnQqIGV2ZW50KQotewotICAgIFFXaWRnZXQ6OnNob3dFdmVudChldmVudCk7Ci0g
ICAgbV93aW5kb3ctPnNldFBhcmVudCh3aW5kb3coKS0+d2luZG93SGFuZGxlKCkpOwotICAgIG1f
d2luZG93LT5zaG93KCk7Ci19Ci0KLXZvaWQgV2luZG93V3JhcHBlcjo6cmVzaXplRXZlbnQoUVJl
c2l6ZUV2ZW50KiBldmVudCkKLXsKLSAgICBRV2lkZ2V0OjpyZXNpemVFdmVudChldmVudCk7Ci0g
ICAgaWYgKCFtX3Jlc2l6ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcmVzaXplVGltZXIu
c3RhcnQoKTsKLX0KLQotdm9pZCBXaW5kb3dXcmFwcGVyOjpkb1Jlc2l6ZSgpCi17Ci0gICAgbV93
aW5kb3ctPnNldEdlb21ldHJ5KFFSZWN0KG1hcFRvKHdpbmRvdygpLCBRUG9pbnQoMCwgMCkpLCBz
aXplKCkpKTsKLX0KIAogQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25z
KiBvcHRpb25zKQogICAgIDogbV91cmxMb2FkZXIoMCkKLSAgICAsIG1fYnJvd3NlcigwKQogewog
ICAgIGlmIChvcHRpb25zKQogICAgICAgICBtX3dpbmRvd09wdGlvbnMgPSAqb3B0aW9uczsKQEAg
LTgzLDc2ICs0NCw4IEBAIEJyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3coV2luZG93T3B0aW9u
cyogb3B0aW9ucykKICAgICAgICAgbV93aW5kb3dPcHRpb25zID0gdG1wT3B0aW9uczsKICAgICB9
CiAKLSAgICBtX2Jyb3dzZXIgPSBuZXcgQnJvd3NlclZpZXcobV93aW5kb3dPcHRpb25zLnVzZVRv
dWNoV2ViVmlldyk7Ci0KLSAgICBzZXRBdHRyaWJ1dGUoUXQ6OldBX0RlbGV0ZU9uQ2xvc2UpOwot
Ci0gICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkp
LCBTTE9UKG9uTG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpKSk7Ci0gICAgY29ubmVjdCh3ZWJWaWV3
KCksIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLCBTTE9UKHNldFdpbmRvd1RpdGxlKFFT
dHJpbmcpKSk7Ci0gICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05BTCh1cmxDaGFuZ2VkKFFVcmwp
KSwgU0xPVCh1cmxDaGFuZ2VkKFFVcmwpKSk7Ci0KLSAgICBpZiAobV93aW5kb3dPcHRpb25zLnBy
aW50TG9hZGVkVXJscykKLSAgICAgICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05BTCh1cmxDaGFu
Z2VkKFFVcmwpKSwgdGhpcywgU0xPVChwcmludFVSTChRVXJsKSkpOwotCi0gICAgaWYgKFFEZXNr
dG9wV2ViVmlldyogY29uc3QgZGVza3RvcFdlYlZpZXcgPSBtX2Jyb3dzZXItPmRlc2t0b3BXZWJW
aWV3KCkpIHsKLSAgICAgICAgY29ubmVjdChkZXNrdG9wV2ViVmlldywgU0lHTkFMKHN0YXR1c0Jh
ck1lc3NhZ2VDaGFuZ2VkKFFTdHJpbmcpKSwgc3RhdHVzQmFyKCksIFNMT1Qoc2hvd01lc3NhZ2Uo
UVN0cmluZykpKTsKLSAgICAgICAgY29ubmVjdChkZXNrdG9wV2ViVmlldywgU0lHTkFMKGxpbmtI
b3ZlcmVkKFFVcmwsIFFTdHJpbmcpKSwgdGhpcywgU0xPVChvbkxpbmtIb3ZlcmVkKFFVcmwsIFFT
dHJpbmcpKSk7Ci0gICAgfQotCi0gICAgc2V0Q2VudHJhbFdpZGdldChuZXcgV2luZG93V3JhcHBl
cihtX2Jyb3dzZXIsIHRoaXMpKTsKLSAgICBjZW50cmFsV2lkZ2V0KCktPnNldEZvY3VzKFF0OjpP
dGhlckZvY3VzUmVhc29uKTsKLQotICAgIFFNZW51KiBmaWxlTWVudSA9IG1lbnVCYXIoKS0+YWRk
TWVudSgiJkZpbGUiKTsKLSAgICBmaWxlTWVudS0+YWRkQWN0aW9uKCJOZXcgV2luZG93IiwgdGhp
cywgU0xPVChuZXdXaW5kb3coKSksIFFLZXlTZXF1ZW5jZTo6TmV3KTsKLSAgICBmaWxlTWVudS0+
YWRkQWN0aW9uKCJPcGVuIEZpbGUiLCB0aGlzLCBTTE9UKG9wZW5GaWxlKCkpLCBRS2V5U2VxdWVu
Y2U6Ok9wZW4pOwotICAgIGZpbGVNZW51LT5hZGRTZXBhcmF0b3IoKTsKLSAgICBmaWxlTWVudS0+
YWRkQWN0aW9uKCJRdWl0IiwgdGhpcywgU0xPVChjbG9zZSgpKSk7Ci0KLSNpZiAwCi0gICAgUU1l
bnUqIGVkaXRNZW51ID0gbWVudUJhcigpLT5hZGRNZW51KCImRWRpdCIpOwotICAgIFFBY3Rpb24q
IHVuZG8gPSBwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpVbmRvKTsKLSAgICB1bmRvLT5zZXRTaG9y
dGN1dChRS2V5U2VxdWVuY2UoUUtleVNlcXVlbmNlOjpVbmRvKSk7Ci0gICAgZWRpdE1lbnUtPmFk
ZEFjdGlvbih1bmRvKTsKLSAgICBRQWN0aW9uKiByZWRvID0gcGFnZSgpLT5hY3Rpb24oUVdLUGFn
ZTo6UmVkbyk7Ci0gICAgcmVkby0+c2V0U2hvcnRjdXQoUUtleVNlcXVlbmNlKFFLZXlTZXF1ZW5j
ZTo6UmVkbykpOwotICAgIGVkaXRNZW51LT5hZGRBY3Rpb24ocmVkbyk7Ci0gICAgZWRpdE1lbnUt
PmFkZFNlcGFyYXRvcigpOwotCi0gICAgUU1lbnUqIHZpZXdNZW51ID0gbWVudUJhcigpLT5hZGRN
ZW51KCImVmlldyIpOwotICAgIHZpZXdNZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdL
UGFnZTo6U3RvcCkpOwotICAgIHZpZXdNZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdL
UGFnZTo6UmVsb2FkKSk7Ci0gICAgdmlld01lbnUtPmFkZFNlcGFyYXRvcigpOwotICAgIHZpZXdN
ZW51LT5hZGRBY3Rpb24oIlRha2UgU2NyZWVuIFNob3QuLi4iLCB0aGlzLCBTTE9UKHNjcmVlbnNo
b3QoKSkpOwotI2VuZGlmCi0KLSAgICBRTWVudSogd2luZG93TWVudSA9IG1lbnVCYXIoKS0+YWRk
TWVudSgiJldpbmRvdyIpOwotICAgIFFBY3Rpb24qIHRvZ2dsZUZ1bGxTY3JlZW4gPSB3aW5kb3dN
ZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBGdWxsU2NyZWVuIiwgdGhpcywgU0lHTkFMKGVudGVyZWRG
dWxsU2NyZWVuTW9kZShib29sKSkpOwotICAgIHRvZ2dsZUZ1bGxTY3JlZW4tPnNldFNob3J0Y3V0
KFF0OjpLZXlfRjExKTsKLSAgICB0b2dnbGVGdWxsU2NyZWVuLT5zZXRDaGVja2FibGUodHJ1ZSk7
Ci0gICAgdG9nZ2xlRnVsbFNjcmVlbi0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0gICAgLy8gV2hlbiBl
eGl0IGZ1bGxzY3JlZW4gbW9kZSBieSBjbGlja2luZyBvbiB0aGUgZXhpdCBhcmVhIChib3R0b20g
cmlnaHQgY29ybmVyKSB3ZSBtdXN0Ci0gICAgLy8gdW5jaGVjayB0aGUgVG9nZ2xlIEZ1bGxTY3Jl
ZW4gYWN0aW9uLgotICAgIHRvZ2dsZUZ1bGxTY3JlZW4tPmNvbm5lY3QodGhpcywgU0lHTkFMKGVu
dGVyZWRGdWxsU2NyZWVuTW9kZShib29sKSksIFNMT1Qoc2V0Q2hlY2tlZChib29sKSkpOwotICAg
IGNvbm5lY3QodGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVuTW9kZShib29sKSksIHRoaXMs
IFNMT1QodG9nZ2xlRnVsbFNjcmVlbk1vZGUoYm9vbCkpKTsKLQotICAgIFFNZW51KiB0b29sc01l
bnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZEZXZlbG9wIik7Ci0gICAgdG9vbHNNZW51LT5hZGRB
Y3Rpb24oIkNoYW5nZSBVc2VyIEFnZW50IiwgdGhpcywgU0xPVChzaG93VXNlckFnZW50RGlhbG9n
KCkpKTsKLSAgICB0b29sc01lbnUtPmFkZFNlcGFyYXRvcigpOwotICAgIHRvb2xzTWVudS0+YWRk
QWN0aW9uKCJMb2FkIFVSTHMgZnJvbSBmaWxlIiwgdGhpcywgU0xPVChsb2FkVVJMTGlzdEZyb21G
aWxlKCkpKTsKLQotICAgIG1fYWRkcmVzc0JhciA9IG5ldyBRTGluZUVkaXQoKTsKLSAgICBjb25u
ZWN0KG1fYWRkcmVzc0JhciwgU0lHTkFMKHJldHVyblByZXNzZWQoKSksIFNMT1QoY2hhbmdlTG9j
YXRpb24oKSkpOwotCi0gICAgUVNob3J0Y3V0KiBzZWxlY3RBZGRyZXNzQmFyID0gbmV3IFFTaG9y
dGN1dChRdDo6Q1RSTCB8IFF0OjpLZXlfTCwgdGhpcyk7Ci0gICAgY29ubmVjdChzZWxlY3RBZGRy
ZXNzQmFyLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCB0aGlzLCBTTE9UKG9wZW5Mb2NhdGlvbigpKSk7
Ci0KLSNpZiAwCi0gICAgLy8gRklYTUUKLSAgICBwYWdlKCktPnNldENyZWF0ZU5ld1BhZ2VGdW5j
dGlvbihuZXdQYWdlRnVuY3Rpb24pOwotI2VuZGlmCi0KICAgICBpZiAobV93aW5kb3dPcHRpb25z
LnN0YXJ0TWF4aW1pemVkKQotICAgICAgICBzZXRXaW5kb3dTdGF0ZSh3aW5kb3dTdGF0ZSgpIHwg
UXQ6OldpbmRvd01heGltaXplZCk7CisgICAgICAgIHNldFdpbmRvd1N0YXRlKFF0OjpXaW5kb3dN
YXhpbWl6ZWQpOwogICAgIGVsc2UKICAgICAgICAgcmVzaXplKDgwMCwgNjAwKTsKICAgICBzaG93
KCk7CkBAIC0xNjAsMTMgKzUzLDYgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhXaW5k
b3dPcHRpb25zKiBvcHRpb25zKQogCiB2b2lkIEJyb3dzZXJXaW5kb3c6OmxvYWQoY29uc3QgUVN0
cmluZyYgdXJsKQogewotICAgIG1fYWRkcmVzc0Jhci0+c2V0VGV4dCh1cmwpOwotICAgIG1fYnJv
d3Nlci0+bG9hZCh1cmwpOwotfQotCi1RT2JqZWN0KiBCcm93c2VyV2luZG93Ojp3ZWJWaWV3KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9icm93c2VyLT50b3VjaFdlYlZpZXcoKSA/IHN0YXRpY19j
YXN0PFFPYmplY3QqPihtX2Jyb3dzZXItPnRvdWNoV2ViVmlldygpLT5wYWdlKCkpIDogc3RhdGlj
X2Nhc3Q8UU9iamVjdCo+KG1fYnJvd3Nlci0+ZGVza3RvcFdlYlZpZXcoKSk7CiB9CiAKIEJyb3dz
ZXJXaW5kb3cqIEJyb3dzZXJXaW5kb3c6Om5ld1dpbmRvdyhjb25zdCBRU3RyaW5nJiB1cmwpCkBA
IC0xNzYsMTcxICs2MiwxOSBAQCBCcm93c2VyV2luZG93KiBCcm93c2VyV2luZG93OjpuZXdXaW5k
b3coY29uc3QgUVN0cmluZyYgdXJsKQogICAgIHJldHVybiB3aW5kb3c7CiB9CiAKLXZvaWQgQnJv
d3NlcldpbmRvdzo6b3BlbkxvY2F0aW9uKCkKLXsKLSAgICBtX2FkZHJlc3NCYXItPnNlbGVjdEFs
bCgpOwotICAgIG1fYWRkcmVzc0Jhci0+c2V0Rm9jdXMoKTsKLX0KLQotdm9pZCBCcm93c2VyV2lu
ZG93OjpjaGFuZ2VMb2NhdGlvbigpCi17Ci0gICAgUVN0cmluZyBzdHJpbmcgPSBtX2FkZHJlc3NC
YXItPnRleHQoKTsKLSAgICBtX2Jyb3dzZXItPmxvYWQoc3RyaW5nKTsKLX0KLQotdm9pZCBCcm93
c2VyV2luZG93OjpvbkxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dyZXNzKQotewotICAgIFFD
b2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKS5jb2xvcihRUGFs
ZXR0ZTo6QmFzZSk7Ci0gICAgUUNvbG9yIHByb2dyZXNzQ29sb3IgPSBRQ29sb3IoMTIwLCAxODAs
IDI0MCk7Ci0gICAgUVBhbGV0dGUgcGFsbGV0ZSA9IG1fYWRkcmVzc0Jhci0+cGFsZXR0ZSgpOwot
Ci0gICAgaWYgKHByb2dyZXNzIDw9IDAgfHwgcHJvZ3Jlc3MgPj0gMTAwKQotICAgICAgICBwYWxs
ZXRlLnNldEJydXNoKFFQYWxldHRlOjpCYXNlLCBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGVsc2Ug
ewotICAgICAgICBRTGluZWFyR3JhZGllbnQgZ3JhZGllbnQoMCwgMCwgd2lkdGgoKSwgMCk7Ci0g
ICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoMCwgcHJvZ3Jlc3NDb2xvcik7Ci0gICAgICAgIGdy
YWRpZW50LnNldENvbG9yQXQoKChkb3VibGUpIHByb2dyZXNzKSAvIDEwMCwgcHJvZ3Jlc3NDb2xv
cik7Ci0gICAgICAgIGlmIChwcm9ncmVzcyAhPSAxMDApCi0gICAgICAgICAgICBncmFkaWVudC5z
ZXRDb2xvckF0KChkb3VibGUpIHByb2dyZXNzIC8gMTAwICsgMC4wMDEsIGJhY2tncm91bmRDb2xv
cik7Ci0gICAgICAgIHBhbGxldGUuc2V0QnJ1c2goUVBhbGV0dGU6OkJhc2UsIGdyYWRpZW50KTsK
LSAgICB9Ci0gICAgbV9hZGRyZXNzQmFyLT5zZXRQYWxldHRlKHBhbGxldGUpOwotfQotCi12b2lk
IEJyb3dzZXJXaW5kb3c6OnVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKQotewotICAgIG1fYWRk
cmVzc0Jhci0+c2V0VGV4dCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgbV9icm93c2VyLT5yZXF1ZXN0
QWN0aXZhdGVXaW5kb3coKTsKLSAgICBtX2Jyb3dzZXItPnZpZXcoKS0+c2V0Rm9jdXModHJ1ZSk7
Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6b3BlbkZpbGUoKQotewotICAgIHN0YXRpYyBjb25z
dCBRU3RyaW5nIGZpbHRlcigiSFRNTCBGaWxlcyAoKi5odG0gKi5odG1sICoueGh0bWwpOztUZXh0
IEZpbGVzICgqLnR4dCk7O0ltYWdlIEZpbGVzICgqLmdpZiAqLmpwZyAqLnBuZyk7O1NWRyBGaWxl
cyAoKi5zdmcpOztBbGwgRmlsZXMgKCopIik7Ci0KLSAgICBRRmlsZURpYWxvZyBmaWxlRGlhbG9n
KHRoaXMsIHRyKCJPcGVuIiksIFFTdHJpbmcoKSwgZmlsdGVyKTsKLSAgICBmaWxlRGlhbG9nLnNl
dEFjY2VwdE1vZGUoUUZpbGVEaWFsb2c6OkFjY2VwdE9wZW4pOwotICAgIGZpbGVEaWFsb2cuc2V0
RmlsZU1vZGUoUUZpbGVEaWFsb2c6OkV4aXN0aW5nRmlsZSk7Ci0gICAgZmlsZURpYWxvZy5zZXRP
cHRpb25zKFFGaWxlRGlhbG9nOjpSZWFkT25seSk7Ci0KLSAgICBpZiAoZmlsZURpYWxvZy5leGVj
KCkpIHsKLSAgICAgICAgUVN0cmluZyBzZWxlY3RlZEZpbGUgPSBmaWxlRGlhbG9nLnNlbGVjdGVk
RmlsZXMoKVswXTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZEZpbGUuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbG9hZChzZWxlY3RlZEZpbGUpOwotICAgIH0KLX0KLQogdm9pZCBCcm93c2VyV2luZG93
OjpzY3JlZW5zaG90KCkKIHsKLSAgICBRUGl4bWFwIHBpeG1hcCA9IFFQaXhtYXA6OmdyYWJXaWRn
ZXQobV9icm93c2VyKTsKLSAgICBRTGFiZWwqIGxhYmVsID0gMDsKLSAgICBsYWJlbCA9IG5ldyBR
TGFiZWw7Ci0gICAgbGFiZWwtPnNldEF0dHJpYnV0ZShRdDo6V0FfRGVsZXRlT25DbG9zZSk7Ci0g
ICAgbGFiZWwtPnNldFdpbmRvd1RpdGxlKCJTY3JlZW5zaG90IC0gUHJldmlldyIpOwotICAgIGxh
YmVsLT5zZXRQaXhtYXAocGl4bWFwKTsKLSAgICBsYWJlbC0+c2hvdygpOwotCi0gICAgUVN0cmlu
ZyBmaWxlTmFtZSA9IFFGaWxlRGlhbG9nOjpnZXRTYXZlRmlsZU5hbWUobGFiZWwsICJTY3JlZW5z
aG90IiwgUVN0cmluZygpLCBRU3RyaW5nKCJQTkcgRmlsZSAoLnBuZykiKSk7Ci0gICAgaWYgKCFm
aWxlTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUVJlZ0V4cCByeCgiKi5wbmciKTsKLSAgICAg
ICAgcnguc2V0Q2FzZVNlbnNpdGl2aXR5KFF0OjpDYXNlSW5zZW5zaXRpdmUpOwotICAgICAgICBy
eC5zZXRQYXR0ZXJuU3ludGF4KFFSZWdFeHA6OldpbGRjYXJkKTsKLQotICAgICAgICBpZiAoIXJ4
LmV4YWN0TWF0Y2goZmlsZU5hbWUpKQotICAgICAgICAgICAgZmlsZU5hbWUgKz0gIi5wbmciOwot
Ci0gICAgICAgIHBpeG1hcC5zYXZlKGZpbGVOYW1lLCAicG5nIik7Ci0gICAgICAgIGlmIChsYWJl
bCkKLSAgICAgICAgICAgIGxhYmVsLT5zZXRXaW5kb3dUaXRsZShRU3RyaW5nKCJTY3JlZW5zaG90
IC0gU2F2ZWQgYXQgJTEiKS5hcmcoZmlsZU5hbWUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQnJvd3Nl
cldpbmRvdzo6dG9nZ2xlRnVsbFNjcmVlbk1vZGUoYm9vbCBlbmFibGUpCi17Ci0gICAgYm9vbCBh
bHJlYWR5RW5hYmxlZCA9IHdpbmRvd1N0YXRlKCkgJiBRdDo6V2luZG93RnVsbFNjcmVlbjsKLSAg
ICBpZiAoZW5hYmxlIF4gYWxyZWFkeUVuYWJsZWQpCi0gICAgICAgIHNldFdpbmRvd1N0YXRlKHdp
bmRvd1N0YXRlKCkgXiBRdDo6V2luZG93RnVsbFNjcmVlbik7Ci19Ci0KLXZvaWQgQnJvd3Nlcldp
bmRvdzo6c2hvd1VzZXJBZ2VudERpYWxvZygpCi17Ci0jaWYgMAotICAgIC8vIEZJWE1FCi0gICAg
dXBkYXRlVXNlckFnZW50TGlzdCgpOwotCi0gICAgUURpYWxvZyBkaWFsb2codGhpcyk7Ci0gICAg
ZGlhbG9nLnNldFdpbmRvd1RpdGxlKCJDaGFuZ2UgVXNlciBBZ2VudCIpOwotICAgIGRpYWxvZy5y
ZXNpemUoc2l6ZSgpLndpZHRoKCkgKiAwLjcsIGRpYWxvZy5zaXplKCkuaGVpZ2h0KCkpOwotICAg
IFFWQm94TGF5b3V0KiBsYXlvdXQgPSBuZXcgUVZCb3hMYXlvdXQoJmRpYWxvZyk7Ci0gICAgZGlh
bG9nLnNldExheW91dChsYXlvdXQpOwotCi0gICAgUUNvbWJvQm94KiBjb21ibyA9IG5ldyBRQ29t
Ym9Cb3goJmRpYWxvZyk7Ci0gICAgY29tYm8tPnNldFNpemVBZGp1c3RQb2xpY3koUUNvbWJvQm94
OjpBZGp1c3RUb01pbmltdW1Db250ZW50c0xlbmd0aCk7Ci0gICAgY29tYm8tPnNldEVkaXRhYmxl
KHRydWUpOwotICAgIGNvbWJvLT5pbnNlcnRJdGVtcygwLCBtX3VzZXJBZ2VudExpc3QpOwotICAg
IGxheW91dC0+YWRkV2lkZ2V0KGNvbWJvKTsKLQotICAgIGludCBpbmRleCA9IGNvbWJvLT5maW5k
VGV4dChwYWdlKCktPmN1c3RvbVVzZXJBZ2VudCgpKTsKLSAgICBjb21iby0+c2V0Q3VycmVudElu
ZGV4KGluZGV4KTsKLQotICAgIFFEaWFsb2dCdXR0b25Cb3gqIGJ1dHRvbkJveCA9IG5ldyBRRGlh
bG9nQnV0dG9uQm94KFFEaWFsb2dCdXR0b25Cb3g6Ok9rIHwgUURpYWxvZ0J1dHRvbkJveDo6Q2Fu
Y2VsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIFF0OjpIb3Jpem9udGFsLCAmZGlhbG9nKTsKLSAgICBjb25uZWN0KGJ1dHRvbkJveCwgU0lH
TkFMKGFjY2VwdGVkKCkpLCAmZGlhbG9nLCBTTE9UKGFjY2VwdCgpKSk7Ci0gICAgY29ubmVjdChi
dXR0b25Cb3gsIFNJR05BTChyZWplY3RlZCgpKSwgJmRpYWxvZywgU0xPVChyZWplY3QoKSkpOwot
ICAgIGxheW91dC0+YWRkV2lkZ2V0KGJ1dHRvbkJveCk7Ci0KLSAgICBpZiAoZGlhbG9nLmV4ZWMo
KSAmJiAhY29tYm8tPmN1cnJlbnRUZXh0KCkuaXNFbXB0eSgpKQotICAgICAgICBwYWdlKCktPnNl
dEN1c3RvbVVzZXJBZ2VudChjb21iby0+Y3VycmVudFRleHQoKSk7Ci0jZW5kaWYKIH0KIAogdm9p
ZCBCcm93c2VyV2luZG93Ojpsb2FkVVJMTGlzdEZyb21GaWxlKCkKIHsKLSAgICBRU3RyaW5nIHNl
bGVjdGVkRmlsZTsKLSAgICBzZWxlY3RlZEZpbGUgPSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVO
YW1lKHRoaXMsIHRyKCJMb2FkIFVSTCBsaXN0IGZyb20gZmlsZSIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBRU3RyaW5nKCksIHRyKCJU
ZXh0IEZpbGVzICgqLnR4dCk7O0FsbCBGaWxlcyAoKikiKSk7Ci0gICAgaWYgKHNlbGVjdGVkRmls
ZS5pc0VtcHR5KCkpCi0gICAgICAgcmV0dXJuOwotCi0gICAgbV91cmxMb2FkZXIgPSBuZXcgVXJs
TG9hZGVyKHRoaXMsIHNlbGVjdGVkRmlsZSwgMCwgMCk7Ci0gICAgbV91cmxMb2FkZXItPmxvYWRO
ZXh0KCk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6cHJpbnRVUkwoY29uc3QgUVVybCYgdXJs
KQotewotICAgIFFUZXh0U3RyZWFtIG91dHB1dChzdGRvdXQpOwotICAgIG91dHB1dCA8PCAiTG9h
ZGVkOiAiIDw8IHVybC50b1N0cmluZygpIDw8IGVuZGw7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRv
dzo6b25MaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmKQotewotICAg
IHN0YXR1c0JhcigpLT5zaG93TWVzc2FnZSh1cmwudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgQnJv
d3NlcldpbmRvdzo6dXBkYXRlVXNlckFnZW50TGlzdCgpCiB7Ci0jaWYgMAotICAgIC8vIEZJWE1F
Ci0gICAgUUZpbGUgZmlsZSgiOi91c2VyYWdlbnRsaXN0LnR4dCIpOwotCi0gICAgaWYgKGZpbGUu
b3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkgewotICAgICAgICB3aGlsZSAoIWZpbGUuYXRFbmQo
KSkgewotICAgICAgICAgICAgUVN0cmluZyBhZ2VudCA9IGZpbGUucmVhZExpbmUoKS50cmltbWVk
KCk7Ci0gICAgICAgICAgICBpZiAoIW1fdXNlckFnZW50TGlzdC5jb250YWlucyhhZ2VudCkpCi0g
ICAgICAgICAgICAgICAgbV91c2VyQWdlbnRMaXN0IDw8IGFnZW50OwotICAgICAgICB9Ci0gICAg
ICAgIGZpbGUuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBRX0FTU0VSVCghbV91c2VyQWdlbnRMaXN0
LmlzRW1wdHkoKSk7Ci0gICAgUVdLUGFnZSogd2tQYWdlID0gcGFnZSgpOwotICAgIGlmICghKHdr
UGFnZS0+Y3VzdG9tVXNlckFnZW50KCkuaXNFbXB0eSgpIHx8IG1fdXNlckFnZW50TGlzdC5jb250
YWlucyh3a1BhZ2UtPmN1c3RvbVVzZXJBZ2VudCgpKSkpCi0gICAgICAgIG1fdXNlckFnZW50TGlz
dCA8PCB3a1BhZ2UtPmN1c3RvbVVzZXJBZ2VudCgpOwotI2VuZGlmCiB9CiAKIEJyb3dzZXJXaW5k
b3c6On5Ccm93c2VyV2luZG93KCkKIHsKICAgICBkZWxldGUgbV91cmxMb2FkZXI7Ci0gICAgZGVs
ZXRlIG1fYWRkcmVzc0JhcjsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jy
b3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuaAppbmRl
eCAyYTg1YTAwLi44ZWMyZDFhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93
c2VyV2luZG93LmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5oCkBA
IC0yOSw3NCArMjksMzUgQEAKICNpZm5kZWYgQnJvd3NlcldpbmRvd19oCiAjZGVmaW5lIEJyb3dz
ZXJXaW5kb3dfaAogCi0jaW5jbHVkZSAiQnJvd3NlclZpZXcuaCIKLQogI2luY2x1ZGUgIk1pbmlC
cm93c2VyQXBwbGljYXRpb24uaCIKICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxR
VGltZXI+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RU0dWaWV3PgogCiBjbGFzcyBVcmxMb2Fk
ZXI7CiAKLWNsYXNzIFdpbmRvd1dyYXBwZXIgOiBwdWJsaWMgUVdpZGdldAotewotICAgIFFfT0JK
RUNUCi0KLXB1YmxpYzoKLSAgICBXaW5kb3dXcmFwcGVyKFFXaW5kb3cqIHdpbmRvdywgUVdpZGdl
dCogd2lkZ2V0ID0gMCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHNob3dFdmVudChRU2hvd0V2
ZW50KiBldmVudCk7Ci0gICAgdm9pZCByZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGV2ZW50KTsK
LQotcHJpdmF0ZSBzbG90czoKLSAgICB2b2lkIGRvUmVzaXplKCk7Ci0KLXByaXZhdGU6Ci0gICAg
UVdpbmRvdyogbV93aW5kb3c7Ci0gICAgUVRpbWVyIG1fcmVzaXplVGltZXI7Ci19OwotCi1jbGFz
cyBCcm93c2VyV2luZG93IDogcHVibGljIFFNYWluV2luZG93IHsKK2NsYXNzIEJyb3dzZXJXaW5k
b3cgOiBwdWJsaWMgUVNHVmlldyB7CiAgICAgUV9PQkpFQ1QKIAogcHVibGljOgogICAgIEJyb3dz
ZXJXaW5kb3coV2luZG93T3B0aW9ucyogPSAwKTsKICAgICB+QnJvd3NlcldpbmRvdygpOwogICAg
IHZvaWQgbG9hZChjb25zdCBRU3RyaW5nJiB1cmwpOwotCiAgICAgUU9iamVjdCogd2ViVmlldygp
IGNvbnN0OwogCiBwdWJsaWMgc2xvdHM6CiAgICAgQnJvd3NlcldpbmRvdyogbmV3V2luZG93KGNv
bnN0IFFTdHJpbmcmIHVybCA9ICJhYm91dDpibGFuayIpOwotICAgIHZvaWQgb3BlbkxvY2F0aW9u
KCk7Ci0KLXNpZ25hbHM6Ci0gICAgdm9pZCBlbnRlcmVkRnVsbFNjcmVlbk1vZGUoYm9vbCBvbik7
CiAKIHByb3RlY3RlZCBzbG90czoKLSAgICB2b2lkIGNoYW5nZUxvY2F0aW9uKCk7Ci0gICAgdm9p
ZCBvbkxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dyZXNzKTsKLSAgICB2b2lkIHVybENoYW5n
ZWQoY29uc3QgUVVybCYpOwotICAgIHZvaWQgb3BlbkZpbGUoKTsKLQogICAgIHZvaWQgc2NyZWVu
c2hvdCgpOwogCi0gICAgdm9pZCB0b2dnbGVGdWxsU2NyZWVuTW9kZShib29sIGVuYWJsZSk7Ci0K
LSAgICB2b2lkIHNob3dVc2VyQWdlbnREaWFsb2coKTsKLQogICAgIHZvaWQgbG9hZFVSTExpc3RG
cm9tRmlsZSgpOwogCi0gICAgdm9pZCBwcmludFVSTChjb25zdCBRVXJsJik7Ci0gICAgdm9pZCBv
bkxpbmtIb3ZlcmVkKGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJik7Ci0KIHByaXZhdGU6CiAg
ICAgdm9pZCB1cGRhdGVVc2VyQWdlbnRMaXN0KCk7CiAKICAgICBVcmxMb2FkZXIqIG1fdXJsTG9h
ZGVyOwogICAgIFdpbmRvd09wdGlvbnMgbV93aW5kb3dPcHRpb25zOwotICAgIEJyb3dzZXJWaWV3
KiBtX2Jyb3dzZXI7Ci0gICAgUUxpbmVFZGl0KiBtX2FkZHJlc3NCYXI7CiAgICAgUVN0cmluZ0xp
c3QgbV91c2VyQWdlbnRMaXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
cXQvTWluaUJyb3dzZXIucHJvIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJv
CmluZGV4IDg4YzU3MTguLmEyZWQwOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L01pbmlCcm93c2VyLnBybworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5w
cm8KQEAgLTIsNyArMiw2IEBAIFRFTVBMQVRFID0gYXBwCiBUQVJHRVQgPSBNaW5pQnJvd3Nlcgog
CiBTT1VSQ0VTICs9IFwKLSAgICBCcm93c2VyVmlldy5jcHAgXAogICAgIEJyb3dzZXJXaW5kb3cu
Y3BwIFwKICAgICBtYWluLmNwcCBcCiAgICAgTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAgXApA
QCAtMTAsNyArOSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHV0aWxzLmNwcCBcCiAKIEhFQURFUlMg
Kz0gXAotICAgIEJyb3dzZXJWaWV3LmggXAogICAgIEJyb3dzZXJXaW5kb3cuaCBcCiAgICAgTWlu
aUJyb3dzZXJBcHBsaWNhdGlvbi5oIFwKICAgICBVcmxMb2FkZXIuaCBcCkBAIC0zMiw3ICszMCw2
IEBAIENPTkZJRyAtPSBhcHBfYnVuZGxlCiAKIFFUICs9IG5ldHdvcmsgZGVjbGFyYXRpdmUKIG1h
Y3g6UVQrPXhtbAotZ3JlYXRlclRoYW4oUVRfTUFKT1JfVkVSU0lPTiwgNCk6IFFUICs9IHdpZGdl
dHMKIAogbGludXgtKiB7CiAgICAgIyBGcm9tIENyZWF0b3IncyBzcmMvcnBhdGgucHJpOgpAQCAt
NDcsMTEgKzQ0LDYgQEAgbGludXgtKiB7CiAgICAgUU1BS0VfUlBBVEhESVIgPSAkJE9VVFBVVF9E
SVIvbGliICQkUU1BS0VfUlBBVEhESVIKIH0KIAotY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wp
IHsKLSAgICBRVCArPSBvcGVuZ2wKLSAgICBERUZJTkVTICs9IFFUX0NPTkZJR1VSRURfV0lUSF9P
UEVOR0wKLX0KLQogREVGSU5FUyAtPSBRVF9BU0NJSV9DQVNUX1dBUk5JTkdTCiAKICMgVXNlIHRo
ZSBNaW5pQnJvd3Nlci5xcmMgZmlsZSBmcm9tIHRoZSBzb3VyY2VzLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcAppbmRleCA5OGI3YzdlLi5iMTZi
MjIyIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0
aW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9u
LmNwcApAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNNb3VzZUV2ZW50KGNv
bnN0IFFFdmVudCogZXZlbnQpCiB9CiAKIE1pbmlCcm93c2VyQXBwbGljYXRpb246Ok1pbmlCcm93
c2VyQXBwbGljYXRpb24oaW50JiBhcmdjLCBjaGFyKiogYXJndikKLSAgICA6IFFBcHBsaWNhdGlv
bihhcmdjLCBhcmd2LCBRQXBwbGljYXRpb246Okd1aVNlcnZlcikKKyAgICA6IFFHdWlBcHBsaWNh
dGlvbihhcmdjLCBhcmd2KQogICAgICwgbV93aW5kb3dPcHRpb25zKCkKICAgICAsIG1fcmVhbFRv
dWNoRXZlbnRSZWNlaXZlZChmYWxzZSkKICAgICAsIG1fcGVuZGluZ0Zha2VUb3VjaEV2ZW50Q291
bnQoMCkKQEAgLTgyLDE0ICs4MiwxNCBAQCBib29sIE1pbmlCcm93c2VyQXBwbGljYXRpb246Om5v
dGlmeShRT2JqZWN0KiB0YXJnZXQsIFFFdmVudCogZXZlbnQpCiAgICAgLy8gd2l0aCB0b3VjaCBz
Y3JlZW4sIGFuZCB3ZSBzaG91bGQgbm90IGhhdmUgdG91Y2ggbW9ja2luZy4KIAogICAgIGlmICgh
ZXZlbnQtPnNwb250YW5lb3VzKCkgfHwgbV9yZWFsVG91Y2hFdmVudFJlY2VpdmVkKQotICAgICAg
ICByZXR1cm4gUUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0LCBldmVudCk7CisgICAgICAgIHJl
dHVybiBRR3VpQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsKIAogICAgIGlmIChp
c1RvdWNoRXZlbnQoZXZlbnQpICYmIHN0YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXZlbnQpLT5k
ZXZpY2VUeXBlKCkgPT0gUVRvdWNoRXZlbnQ6OlRvdWNoU2NyZWVuKSB7CiAgICAgICAgIGlmICht
X3BlbmRpbmdGYWtlVG91Y2hFdmVudENvdW50KQogICAgICAgICAgICAgLS1tX3BlbmRpbmdGYWtl
VG91Y2hFdmVudENvdW50OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3JlYWxUb3VjaEV2
ZW50UmVjZWl2ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpub3RpZnko
dGFyZ2V0LCBldmVudCk7CisgICAgICAgIHJldHVybiBRR3VpQXBwbGljYXRpb246Om5vdGlmeSh0
YXJnZXQsIGV2ZW50KTsKICAgICB9CiAKICAgICBRV2luZG93KiB0YXJnZXRXaW5kb3cgPSBxb2Jq
ZWN0X2Nhc3Q8UVdpbmRvdyo+KHRhcmdldCk7CkBAIC0xMTEsMTMgKzExMSwxMyBAQCBib29sIE1p
bmlCcm93c2VyQXBwbGljYXRpb246Om5vdGlmeShRT2JqZWN0KiB0YXJnZXQsIFFFdmVudCogZXZl
bnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlTW92ZToK
ICAgICAgICAgICAgIGlmICghbW91c2VFdmVudC0+YnV0dG9ucygpIHx8ICFtX3RvdWNoUG9pbnRz
LmNvbnRhaW5zKG1vdXNlRXZlbnQtPmJ1dHRvbnMoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFFBcHBsaWNhdGlvbjo6bm90aWZ5KHRhcmdldCwgZXZlbnQpOworICAgICAgICAgICAgICAgIHJl
dHVybiBRR3VpQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsKICAgICAgICAgICAg
IHRvdWNoUG9pbnQuc3RhdGUgPSBRdDo6VG91Y2hQb2ludE1vdmVkOwogICAgICAgICAgICAgdG91
Y2hQb2ludC5pZCA9IG1vdXNlRXZlbnQtPmJ1dHRvbnMoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgogICAgICAgICAgICAgaWYg
KG1vdXNlRXZlbnQtPm1vZGlmaWVycygpLnRlc3RGbGFnKFF0OjpDb250cm9sTW9kaWZpZXIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBRQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUUd1aUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0
LCBldmVudCk7CiAgICAgICAgICAgICB0b3VjaFBvaW50LnN0YXRlID0gUXQ6OlRvdWNoUG9pbnRS
ZWxlYXNlZDsKICAgICAgICAgICAgIHRvdWNoUG9pbnQuaWQgPSBtb3VzZUV2ZW50LT5idXR0b24o
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIGJvb2wgTWluaUJyb3dz
ZXJBcHBsaWNhdGlvbjo6bm90aWZ5KFFPYmplY3QqIHRhcmdldCwgUUV2ZW50KiBldmVudCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFF0OjpUb3VjaFBvaW50U3RhdGlvbmFyeToK
ICAgICAgICAgICAgIC8vIERvbid0IHNlbmQgdGhlIGV2ZW50IGlmIG5vdGhpbmcgY2hhbmdlZC4K
LSAgICAgICAgICAgIHJldHVybiBRQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsK
KyAgICAgICAgICAgIHJldHVybiBRR3VpQXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50
KTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFFFdmVudDo6VG91
Y2hVcGRhdGU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2MiwxMCArMTYyLDkgQEAgYm9vbCBN
aW5pQnJvd3NlckFwcGxpY2F0aW9uOjpub3RpZnkoUU9iamVjdCogdGFyZ2V0LCBRRXZlbnQqIGV2
ZW50KQogICAgICAgICAgICAgaWYgKHRvdWNoUG9pbnQuc3RhdGUgPT0gIFF0OjpUb3VjaFBvaW50
UmVsZWFzZWQpCiAgICAgICAgICAgICAgICAgbV90b3VjaFBvaW50cy5yZW1vdmUodG91Y2hQb2lu
dC5pZCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0
dXJuIFFBcHBsaWNhdGlvbjo6bm90aWZ5KHRhcmdldCwgZXZlbnQpOworICAgIHJldHVybiBRR3Vp
QXBwbGljYXRpb246Om5vdGlmeSh0YXJnZXQsIGV2ZW50KTsKIH0KIAogdm9pZCBNaW5pQnJvd3Nl
ckFwcGxpY2F0aW9uOjpoYW5kbGVVc2VyT3B0aW9ucygpCkBAIC0xODMsMTEgKzE4Miw3IEBAIHZv
aWQgTWluaUJyb3dzZXJBcHBsaWNhdGlvbjo6aGFuZGxlVXNlck9wdGlvbnMoKQogICAgICAgICAg
ICAgIDw8ICJbLXIgbGlzdF0iCiAgICAgICAgICAgICAgPDwgIlstcm9ib3QtdGltZW91dCBzZWNv
bmRzXSIKICAgICAgICAgICAgICA8PCAiWy1yb2JvdC1leHRyYS10aW1lIHNlY29uZHNdIgotICAg
ICAgICAgICAgIDw8ICJbLWNodW5rZWQtZHJhd2luZy1hcmVhXSIKICAgICAgICAgICAgICA8PCAi
Wy1wcmludC1sb2FkZWQtdXJsc10iCi0jaWYgZGVmaW5lZChRVF9DT05GSUdVUkVEX1dJVEhfT1BF
TkdMKQotICAgICAgICAgICAgIDw8ICJbLWdsLXZpZXdwb3J0XSIKLSNlbmRpZgogICAgICAgICAg
ICAgIDw8ICJVUkxzIjsKICAgICAgICAgYXBwUXVpdCgwKTsKICAgICB9CkBAIC0yMjQsOCArMjE5
LDQgQEAgdm9pZCBNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpoYW5kbGVVc2VyT3B0aW9ucygpCiAg
ICAgaWYgKGFyZ3MuY29udGFpbnMoIi1wcmludC1sb2FkZWQtdXJscyIpKQogICAgICAgICBtX3dp
bmRvd09wdGlvbnMucHJpbnRMb2FkZWRVcmxzID0gdHJ1ZTsKIAotI2lmIGRlZmluZWQoUVRfQ09O
RklHVVJFRF9XSVRIX09QRU5HTCkKLSAgICBpZiAoYXJncy5jb250YWlucygiLWdsLXZpZXdwb3J0
IikpCi0gICAgICAgIG1fd2luZG93T3B0aW9ucy51c2VRR0xXaWRnZXRWaWV3cG9ydCA9IHRydWU7
Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2Vy
QXBwbGljYXRpb24uaCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRp
b24uaAppbmRleCBiNjhhZTRmLi4wNzBlYTcxIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
TWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oCkBAIC0yOSwxOCArMjksMTAgQEAKICNpZm5kZWYgTWlu
aUJyb3dzZXJBcHBsaWNhdGlvbl9oCiAjZGVmaW5lIE1pbmlCcm93c2VyQXBwbGljYXRpb25faAog
Ci0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFGaWxlRGlhbG9nPgogI2luY2x1
ZGUgPFFIYXNoPgotI2luY2x1ZGUgPFFMYWJlbD4KLSNpbmNsdWRlIDxRTGluZUVkaXQ+Ci0jaW5j
bHVkZSA8UU1haW5XaW5kb3c+Ci0jaW5jbHVkZSA8UU1lbnU+Ci0jaW5jbHVkZSA8UU1lbnVCYXI+
Ci0jaW5jbHVkZSA8UVNob3J0Y3V0PgotI2luY2x1ZGUgPFFTdGF0dXNCYXI+CiAjaW5jbHVkZSA8
UVN0cmluZ0xpc3Q+Ci0jaW5jbHVkZSA8UVRvb2xCYXI+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZT4KKyNpbmNsdWRlIDxRdEd1aS9RR3VpQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UVRvdWNoRXZl
bnQ+CiAjaW5jbHVkZSA8UVVybD4KICNpbmNsdWRlICJxd2luZG93c3lzdGVtaW50ZXJmYWNlX3Fw
YS5oIgpAQCAtNTksMTIgKzUxLDkgQEAgc3RydWN0IFdpbmRvd09wdGlvbnMgewogICAgIGJvb2wg
cHJpbnRMb2FkZWRVcmxzOwogICAgIGJvb2wgdXNlVG91Y2hXZWJWaWV3OwogICAgIGJvb2wgc3Rh
cnRNYXhpbWl6ZWQ7Ci0jaWYgZGVmaW5lZChRVF9DT05GSUdVUkVEX1dJVEhfT1BFTkdMKQotICAg
IGJvb2wgdXNlUUdMV2lkZ2V0Vmlld3BvcnQ7Ci0jZW5kaWYKIH07CiAKLWNsYXNzIE1pbmlCcm93
c2VyQXBwbGljYXRpb24gOiBwdWJsaWMgUUFwcGxpY2F0aW9uIHsKK2NsYXNzIE1pbmlCcm93c2Vy
QXBwbGljYXRpb24gOiBwdWJsaWMgUUd1aUFwcGxpY2F0aW9uIHsKICAgICBRX09CSkVDVAogCiBw
dWJsaWM6CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwIGIv
VG9vbHMvTWluaUJyb3dzZXIvcXQvVXJsTG9hZGVyLmNwcAppbmRleCA5NGQ5NDg4Li4wZGE0ZTA1
IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwCisrKyBiL1Rv
b2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHAKQEAgLTQxLDEzICs0MSwxNiBAQCBVcmxM
b2FkZXI6OlVybExvYWRlcihCcm93c2VyV2luZG93KiBicm93c2VyV2luZG93LCBjb25zdCBRU3Ry
aW5nJiBpbnB1dEZpbGVOYW1lLAogICAgIG1fY2hlY2tJZkZpbmlzaGVkVGltZXIuc2V0U2luZ2xl
U2hvdCh0cnVlKTsKICAgICBjb25uZWN0KCZtX2NoZWNrSWZGaW5pc2hlZFRpbWVyLCBTSUdOQUwo
dGltZW91dCgpKSwgdGhpcywgU0xPVChjaGVja0lmRmluaXNoZWQoKSkpOwogICAgIC8vIGxvYWRT
dGFydGVkIGFuZCBsb2FkRmluaXNoZWQgb24gUVdlYlBhZ2UgaXMgZW1pdHRlZCBmb3IgZWFjaCBm
cmFtZS9zdWItZnJhbWUKLSAgICBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBT
SUdOQUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QoZnJhbWVMb2FkU3RhcnRlZCgpKSk7Ci0g
ICAgY29ubmVjdChtX2Jyb3dzZXJXaW5kb3ctPndlYlZpZXcoKSwgU0lHTkFMKGxvYWRGaW5pc2hl
ZChib29sKSksIHRoaXMsIFNMT1QoZnJhbWVMb2FkRmluaXNoZWQoKSkpOworCisgICAgLy8gRklY
TUU6IFJlY29ubmVjdCB0aGVzZSBzaWduYWxzIGFmdGVyIFF0NS9RdFF1aWNrIHJld3JpdGUgaWYg
bmVjZXNzYXJ5LgorICAgIC8vIGNvbm5lY3QobV9icm93c2VyV2luZG93LT53ZWJWaWV3KCksIFNJ
R05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRTdGFydGVkKCkpKTsKKyAg
ICAvLyBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBTSUdOQUwobG9hZEZpbmlz
aGVkKGJvb2wpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRGaW5pc2hlZCgpKSk7CiAKICAgICBpZiAo
dGltZW91dFNlY29uZHMpIHsKICAgICAgICAgbV90aW1lb3V0VGltZXIuc2V0SW50ZXJ2YWwodGlt
ZW91dFNlY29uZHMgKiAxMDAwKTsKICAgICAgICAgbV90aW1lb3V0VGltZXIuc2V0U2luZ2xlU2hv
dCh0cnVlKTsKLSAgICAgICAgY29ubmVjdChtX2Jyb3dzZXJXaW5kb3ctPndlYlZpZXcoKSwgU0lH
TkFMKGxvYWRTdGFydGVkKCkpLCAmbV90aW1lb3V0VGltZXIsIFNMT1Qoc3RhcnQoKSkpOworICAg
ICAgICAvLyBGSVhNRTogUmVjb25uZWN0IHRoaXMgc2lnbmFsIGFmdGVyIFF0NS9RdFF1aWNrIHJl
d3JpdGUgaWYgbmVjZXNzYXJ5LgorICAgICAgICAvLyBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+
d2ViVmlldygpLCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSksICZtX3RpbWVvdXRUaW1lciwgU0xPVChz
dGFydCgpKSk7CiAgICAgICAgIGNvbm5lY3QoJm1fdGltZW91dFRpbWVyLCBTSUdOQUwodGltZW91
dCgpKSwgdGhpcywgU0xPVChsb2FkTmV4dCgpKSk7CiAgICAgfQogICAgIGlmIChleHRyYVRpbWVT
ZWNvbmRzKSB7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcCBiL1Rv
b2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwCmluZGV4IGU5MGM0ZjcuLmEyMGIyNWUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL3F0L21haW4uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJNaW5pQnJvd3Nl
ckFwcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiVXJsTG9hZGVyLmgiCisjaW5jbHVkZSA8UURpcj4K
ICNpbmNsdWRlIDxRTGF0aW4xU3RyaW5nPgogI2luY2x1ZGUgPFFSZWdFeHA+CiAK
</data>
<flag name="review"
          id="110383"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>