<?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>194193</bug_id>
          
          <creation_ts>2019-02-02 07:50:33 -0800</creation_ts>
          <short_desc>Merge AsyncScrollingCoordinator into ScrollingCoordinator</short_desc>
          <delta_ts>2019-02-02 07:51:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1501494</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-02 07:50:33 -0800</bug_when>
    <thetext>There are no non-async scrolling coordinators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501495</commentid>
    <comment_count>1</comment_count>
      <attachid>360979</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-02 07:51:52 -0800</bug_when>
    <thetext>Created attachment 360979
wip</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360979</attachid>
            <date>2019-02-02 07:51:52 -0800</date>
            <delta_ts>2019-02-02 07:51:52 -0800</delta_ts>
            <desc>wip</desc>
            <filename>merge-async-scrolling-coordinator-2.patch</filename>
            <type>text/plain</type>
            <size>123202</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTU3NCw3ICsxNTc0LDYgQEAgcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmUuY3BwCiAKLXBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29uc3RyYWludHMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDI0MDg5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbk9wdGlvbnMuaCIKICNpbmNs
dWRlICJTY3JvbGxUb09wdGlvbnMuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdE1vZGUuaCIK
ICNpbmNsdWRlICJTaW11bGF0ZWRDbGlja09wdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUNoYW5n
ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsOSArODAxLDYg
QEAgdm9pZCBGcmFtZTo6d2lsbERldGFjaFBhZ2UoKQogICAgIGlmIChwYWdlKCkgJiYgcGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSB0aGlzKQogICAgICAgICBwYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRGcmFtZShudWxscHRyKTsKIAotICAgIGlm
IChwYWdlKCkgJiYgcGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpICYmIG1fdmlldykKLSAg
ICAgICAgcGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpLT53aWxsRGVzdHJveVNjcm9sbGFi
bGVBcmVhKCptX3ZpZXcpOwotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoV2Vi
VGhyZWFkQ291bnRPZk9ic2VydmVkRE9NVGltZXJzKCkgPiAwICYmIG1fcGFnZSkgewogICAgICAg
ICBMT0coQ29udGVudE9ic2VydmF0aW9uLCAiRnJhbWU6OndpbGxEZXRhY2hQYWdlOiByZW1vdmUg
cmVnaXN0ZXJlZCB0aW1lcnMuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2NSwxMSArMzY1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnByZXBhcmVG
b3JEZXRhY2goKQogICAgIC8vIFdoZW4gdGhlIHZpZXcgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQg
d2l0aCBhIGZyYW1lLCBpdCBuZWVkcyB0byBiZSByZW1vdmVkIGZyb20gdGhlIGF4IG9iamVjdCBj
YWNoZQogICAgIC8vIHJpZ2h0IG5vdywgb3RoZXJ3aXNlIGl0IHdvbid0IGJlIGFibGUgdG8gcmVh
Y2ggdGhlIHRvcERvY3VtZW50KCkncyBheE9iamVjdCBjYWNoZSBsYXRlci4KICAgICByZW1vdmVG
cm9tQVhPYmplY3RDYWNoZSgpOwotCi0gICAgaWYgKGZyYW1lKCkucGFnZSgpKSB7Ci0gICAgICAg
IGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBmcmFtZSgp
LnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKLSAgICB9CiB9CiAK
IHZvaWQgRnJhbWVWaWV3OjpkZXRhY2hDdXN0b21TY3JvbGxiYXJzKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAkocmV2aXNpb24gMjQwODkyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEyICszOTYsMTMgQEAgVmlld3BvcnRBcmd1bWVudHMg
UGFnZTo6dmlld3BvcnRBcmd1bWVudAogCiBTY3JvbGxpbmdDb29yZGluYXRvciogUGFnZTo6c2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKQogeworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAg
aWYgKCFtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yICYmIG1fc2V0dGluZ3MtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yRW5hYmxlZCgpKSB7CiAgICAgICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBjaHJv
bWUoKS5jbGllbnQoKS5jcmVhdGVTY3JvbGxpbmdDb29yZGluYXRvcigqdGhpcyk7CiAgICAgICAg
IGlmICghbV9zY3JvbGxpbmdDb29yZGluYXRvcikKICAgICAgICAgICAgIG1fc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKHRoaXMpOwogICAgIH0KLQor
I2VuZGlmCiAgICAgcmV0dXJuIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3IuZ2V0KCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ODYgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCiAKLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0jaW5jbHVkZSAiQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgotCi0jaW5jbHVkZSAiRGVidWdQYWdlT3ZlcmxheXMuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIK
LSNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJhaW50cy5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0
YXRlRml4ZWROb2RlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGcmFtZUhvc3RpbmdOb2Rl
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCIKLSNpbmNs
dWRlICJTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIgotI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlU3RpY2t5Tm9kZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5o
IgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
LmgiCi0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Bc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2UpCi0gICAgOiBTY3JvbGxp
bmdDb29yZGluYXRvcihwYWdlKQotICAgICwgbV91cGRhdGVOb2RlU2Nyb2xsUG9zaXRpb25UaW1l
cigqdGhpcywgJkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9u
QWZ0ZXJBc3luY1Njcm9sbFRpbWVyRmlyZWQpCi0gICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShz
dGQ6Om1ha2VfdW5pcXVlPFNjcm9sbGluZ1N0YXRlVHJlZT4odGhpcykpCi17Ci19Ci0KLUFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCkgPSBkZWZh
dWx0OwotCi12b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJl
ZVByb3BlcnRpZXNDaGFuZ2VkKCkKLXsKLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwot
fQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRT
dGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlJiBub2RlLCBTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgVmVjdG9yPExheW91dFVu
aXQ+KiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVu
aXQ+Piogc25hcE9mZnNldFJhbmdlcywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAg
Ly8gRklYTUU6IEluY29ycG9yYXRlIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IgaW4gc25hcHBp
bmcgdG8gZGV2aWNlIHBpeGVsLiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbnZlcnQgdG8gZmxv
YXQgaGVyZSBhbmQgbGV0IFVJIHByb2Nlc3MgZG8gdGhlIHBpeGVsIHNuYXBwaW5nPwotICAgIFZl
Y3RvcjxmbG9hdD4gc25hcE9mZnNldHNBc0Zsb2F0OwotICAgIGlmIChzbmFwT2Zmc2V0cykgewot
ICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzbmFwT2Zm
c2V0cy0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBvZmZzZXQgOiAqc25hcE9mZnNldHMp
Ci0gICAgICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQudW5jaGVja2VkQXBwZW5kKHJvdW5kVG9E
ZXZpY2VQaXhlbChvZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yLCBmYWxzZSkpOwotICAgIH0KLQot
ICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+IHNuYXBPZmZzZXRSYW5nZXNBc0Zs
b2F0OwotICAgIGlmIChzbmFwT2Zmc2V0UmFuZ2VzKSB7Ci0gICAgICAgIHNuYXBPZmZzZXRSYW5n
ZXNBc0Zsb2F0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc25hcE9mZnNldFJhbmdlcy0+c2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6ICpzbmFwT2Zmc2V0UmFuZ2VzKQotICAgICAg
ICAgICAgc25hcE9mZnNldFJhbmdlc0FzRmxvYXQudW5jaGVja2VkQXBwZW5kKHsgcm91bmRUb0Rl
dmljZVBpeGVsKHJhbmdlLnN0YXJ0LCBkZXZpY2VTY2FsZUZhY3RvciwgZmFsc2UpLCByb3VuZFRv
RGV2aWNlUGl4ZWwocmFuZ2UuZW5kLCBkZXZpY2VTY2FsZUZhY3RvciwgZmFsc2UpIH0pOwotICAg
IH0KLSAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHsKLSAgICAg
ICAgbm9kZS5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMoc25hcE9mZnNldHNBc0Zsb2F0KTsKLSAg
ICAgICAgbm9kZS5zZXRIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyhzbmFwT2Zmc2V0UmFuZ2Vz
QXNGbG9hdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm9kZS5zZXRWZXJ0aWNhbFNuYXBPZmZz
ZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7Ci0gICAgICAgIG5vZGUuc2V0VmVydGljYWxTbmFwT2Zm
c2V0UmFuZ2VzKHNuYXBPZmZzZXRSYW5nZXNBc0Zsb2F0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
dm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRFdmVudFRyYWNraW5nUmVnaW9uc0Rp
cnR5KCkKLXsKLSAgICBtX2V2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkgPSB0cnVlOwotICAgIC8v
IFdlIGhhdmUgdG8gc2NoZWR1bGUgYSBjb21taXQsIGJ1dCB0aGUgY29tcHV0ZWQgbm9uLWZhc3Qg
cmVnaW9uIG1heSBub3QgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgotICAgIHNjaGVkdWxlVHJlZVN0
YXRlQ29tbWl0KCk7Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6d2lsbENv
bW1pdFRyZWUoKQotewotICAgIHVwZGF0ZUV2ZW50VHJhY2tpbmdSZWdpb25zKCk7Ci19Ci0KLXZv
aWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlRXZlbnRUcmFja2luZ1JlZ2lvbnMo
KQotewotICAgIGlmICghbV9ldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2Rl
KCktPnNldEV2ZW50VHJhY2tpbmdSZWdpb25zKGFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnMo
KSk7Ci0gICAgbV9ldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQg
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZp
ZXcmIGZyYW1lVmlldykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VS
VChtX3BhZ2UpOwotCi0gICAgLy8gSWYgdGhlcmUgaXNuJ3QgYSByb290IG5vZGUgeWV0LCBkb24n
dCBkbyBhbnl0aGluZy4gV2UnbGwgYmUgY2FsbGVkIGFnYWluIGFmdGVyIGNyZWF0aW5nIG9uZS4K
LSAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNldEV2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkoKTsKLSAgICBpZiAo
IWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8qIG5vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlz
PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPigqbm9kZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8mIGZyYW1lU2Nyb2xsaW5nTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlPigqbm9kZSk7Ci0KLSAgICBhdXRvKiB2ZXJ0aWNhbFNjcm9s
bGJhciA9IGZyYW1lVmlldy52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8qIGhvcml6b250
YWxTY3JvbGxiYXIgPSBmcmFtZVZpZXcuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGZyYW1l
U2Nyb2xsaW5nTm9kZS5zZXRTY3JvbGxlckltcHNGcm9tU2Nyb2xsYmFycyh2ZXJ0aWNhbFNjcm9s
bGJhciwgaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0KLSAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0
RnJhbWVTY2FsZUZhY3RvcihmcmFtZVZpZXcuZnJhbWUoKS5mcmFtZVNjYWxlRmFjdG9yKCkpOwot
ICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRIZWFkZXJIZWlnaHQoZnJhbWVWaWV3LmhlYWRlckhl
aWdodCgpKTsKLSAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0Rm9vdGVySGVpZ2h0KGZyYW1lVmll
dy5mb290ZXJIZWlnaHQoKSk7Ci0gICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldFRvcENvbnRlbnRJ
bnNldChmcmFtZVZpZXcudG9wQ29udGVudEluc2V0KCkpOwotCi0gICAgZnJhbWVTY3JvbGxpbmdO
b2RlLnNldFZpc3VhbFZpZXdwb3J0RW5hYmxlZCh2aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSk7Ci0g
ICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldExheW91dFZpZXdwb3J0KGZyYW1lVmlldy5sYXlvdXRW
aWV3cG9ydFJlY3QoKSk7Ci0gICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldEFzeW5jRnJhbWVPck92
ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZChhc3luY0ZyYW1lT3JPdmVyZmxvd1Njcm9sbGluZ0VuYWJs
ZWQoKSk7Ci0KLSAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0TWluTGF5b3V0Vmlld3BvcnRPcmln
aW4oZnJhbWVWaWV3Lm1pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luKCkpOwotICAgIGZyYW1l
U2Nyb2xsaW5nTm9kZS5zZXRNYXhMYXlvdXRWaWV3cG9ydE9yaWdpbihmcmFtZVZpZXcubWF4U3Rh
YmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4oKSk7Ci0KLSAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0
U2Nyb2xsT3JpZ2luKGZyYW1lVmlldy5zY3JvbGxPcmlnaW4oKSk7Ci0gICAgZnJhbWVTY3JvbGxp
bmdOb2RlLnNldFNjcm9sbGFibGVBcmVhU2l6ZShmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0
KCkuc2l6ZSgpKTsKLSAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0VG90YWxDb250ZW50c1NpemUo
ZnJhbWVWaWV3LnRvdGFsQ29udGVudHNTaXplKCkpOwotICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5z
ZXRSZWFjaGFibGVDb250ZW50c1NpemUoZnJhbWVWaWV3LnRvdGFsQ29udGVudHNTaXplKCkpOwot
ICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRGaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0Zy
YW1lKGZyYW1lVmlldy5maXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCkpOwotICAg
IGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoZnJh
bWVWaWV3LnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpKTsKLQotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
dXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGZyYW1lVmlldyk7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZVZpZXcuZnJh
bWUoKS5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UgJiYgcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmln
Z2VycygpKSB7Ci0gICAgICAgIExPRyhXaGVlbEV2ZW50VGVzdFRyaWdnZXJzLCAiICAgIEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQ6IEV4cGVjdHMgd2hl
ZWwgZXZlbnQgdGVzdCB0cmlnZ2VyPSVkIiwgcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2Vy
cygpKTsKLSAgICAgICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldEV4cGVjdHNXaGVlbEV2ZW50VGVz
dFRyaWdnZXIocGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2VycygpKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyBzY3JvbGxQYXJhbWV0ZXJzOwotICAg
IHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXcu
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHko
KTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0g
aG9yaXpvbnRhbFNjcm9sbGJhciAmJiBob3Jpem9udGFsU2Nyb2xsYmFyLT5lbmFibGVkKCk7Ci0g
ICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0aWNh
bFNjcm9sbGJhciAmJiB2ZXJ0aWNhbFNjcm9sbGJhci0+ZW5hYmxlZCgpOwotICAgIHNjcm9sbFBh
cmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXcuaG9yaXpvbnRhbFNj
cm9sbGJhck1vZGUoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSA9IGZyYW1lVmlldy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKLSAgICBzY3JvbGxQYXJhbWV0
ZXJzLnVzZURhcmtBcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyA9IGZyYW1lVmlldy51c2VEYXJrQXBw
ZWFyYW5jZUZvclNjcm9sbGJhcnMoKTsKLQotICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRTY3Jv
bGxhYmxlQXJlYVBhcmFtZXRlcnMoc2Nyb2xsUGFyYW1ldGVycyk7Ci19Ci0KLXZvaWQgQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlRXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcldp
dGhGcmFtZVZpZXcoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCi17Ci0gICAgYXV0byogcGFn
ZSA9IGZyYW1lVmlldy5mcmFtZSgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8qIG5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZT4obV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmll
dy5zY3JvbGxpbmdOb2RlSUQoKSkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbm9kZS0+c2V0RXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcihwYWdlLT5leHBlY3Rz
V2hlZWxFdmVudFRyaWdnZXJzKCkpOwotfQotCi12b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld0V2ZW50VHJhY2tpbmdSZWdpb25zQ2hhbmdlZChGcmFtZVZpZXcmIGZyYW1l
VmlldykKLXsKLSAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNldEV2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkoKTsK
LSAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkQ2hhbmdlRXZlbnRIYW5kbGVycyhmcmFtZVZpZXcu
ZnJhbWUoKSk7Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyYgZnJhbWVWaWV3KQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICBpZiAoIWNvb3JkaW5h
dGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICAvLyBGSVhNRTogSW4gc29tZSBuYXZpZ2F0aW9uIHNjZW5hcmlvcywgdGhlIEZyYW1l
VmlldyBoYXMgbm8gUmVuZGVyVmlldyBvciB0aGF0IFJlbmRlclZpZXcgaGFzIG5vdCBiZWVuIGNv
bXBvc2l0ZWQuCi0gICAgLy8gVGhpcyBuZWVkcyBjbGVhbmluZyB1cDogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjcyNAotICAgIGlmICghZnJhbWVWaWV3LnNjcm9s
bGluZ05vZGVJRCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gSWYgdGhlIHJvb3Qg
bGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQg
Y3JlYXRlIG9uZS4KLSAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmll
dyk7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJRChmcmFt
ZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCkpKTsKLQotICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpm
cmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoZnJhbWVWaWV3KTsKLQotICAgIGF1dG8qIG5vZGUg
PSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4obV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy5zY3JvbGxpbmdOb2RlSUQoKSkpOwot
ICAgIG5vZGUtPnNldFNjcm9sbGVkQ29udGVudHNMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpKTsKLSAgICBub2RlLT5zZXRSb290Q29udGVudHNMYXllcihyb290Q29udGVu
dHNMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKLSAgICBub2RlLT5zZXRDb3VudGVyU2Ny
b2xsaW5nTGF5ZXIoY291bnRlclNjcm9sbGluZ0xheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykp
OwotICAgIG5vZGUtPnNldEluc2V0Q2xpcExheWVyKGluc2V0Q2xpcExheWVyRm9yRnJhbWVWaWV3
KGZyYW1lVmlldykpOwotICAgIG5vZGUtPnNldENvbnRlbnRTaGFkb3dMYXllcihjb250ZW50U2hh
ZG93TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7Ci0gICAgbm9kZS0+c2V0SGVhZGVyTGF5
ZXIoaGVhZGVyTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7Ci0gICAgbm9kZS0+c2V0Rm9v
dGVyTGF5ZXIoZm9vdGVyTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7Ci0gICAgbm9kZS0+
c2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKGZyYW1lVmlldy5zY3JvbGxCZWhhdmlv
ckZvckZpeGVkRWxlbWVudHMoKSk7Ci0gICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxiYXJMYXll
cihmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKTsKLSAgICBub2RlLT5zZXRI
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpKTsKLX0KLQotYm9vbCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3JiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBz
Y3JvbGxQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VS
VChtX3BhZ2UpOwotCi0gICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhm
cmFtZVZpZXcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGlzUHJvZ3JhbW1h
dGljU2Nyb2xsID0gZnJhbWVWaWV3LmluUHJvZ3JhbW1hdGljU2Nyb2xsKCk7Ci0gICAgaWYgKGlz
UHJvZ3JhbW1hdGljU2Nyb2xsIHx8IGZyYW1lVmlldy5mcmFtZSgpLmRvY3VtZW50KCktPnBhZ2VD
YWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQotICAgICAgICB1cGRhdGVT
Y3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNTY3JvbGwoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgp
LCBzY3JvbGxQb3NpdGlvbiwgV1RGOjpudWxsb3B0LCBpc1Byb2dyYW1tYXRpY1Njcm9sbCwgU2Ny
b2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U2V0KTsKLQotICAgIC8vIElmIHRoaXMgZnJhbWUg
dmlldydzIGRvY3VtZW50IGlzIGJlaW5nIHB1dCBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3ZSBkb24n
dCB3YW50IHRvIHVwZGF0ZSBvdXIKLSAgICAvLyBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbi4g
SnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGluayB0aGF0IHdlIGRpZC4KLSAgICBpZiAoZnJhbWVW
aWV3LmZyYW1lKCkuZG9jdW1lbnQoKS0+cGFnZUNhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90
SW5QYWdlQ2FjaGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byogc3RhdGVOb2Rl
ID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPihtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSk7Ci0gICAg
aWYgKCFzdGF0ZU5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRlTm9kZS0+
c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGlzUHJvZ3JhbW1hdGlj
U2Nyb2xsKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzY2hlZHVsZVVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbChTY3Jv
bGxpbmdOb2RlSUQgbm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29u
c3QgT3B0aW9uYWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0T3JpZ2luLCBib29sIHByb2dy
YW1tYXRpY1Njcm9sbCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiBzY3JvbGxpbmdMYXll
clBvc2l0aW9uQWN0aW9uKQotewotICAgIFNjaGVkdWxlZFNjcm9sbFVwZGF0ZSBzY3JvbGxVcGRh
dGUobm9kZUlELCBzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmlnaW4sIHByb2dyYW1t
YXRpY1Njcm9sbCwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7Ci0gICAgCi0gICAgLy8g
Rm9yIHByb2dyYW1tYXRpYyBzY3JvbGxzLCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKSBo
YXMgYWxyZWFkeSBjYWxsZWQgdXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKCku
Ci0gICAgaWYgKHByb2dyYW1tYXRpY1Njcm9sbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fdXBkYXRlTm9kZVNjcm9sbFBvc2l0aW9uVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBp
ZiAobV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUubWF0Y2hlc1VwZGF0ZVR5cGUoc2Nyb2xsVXBkYXRl
KSkgewotICAgICAgICAgICAgbV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUuc2Nyb2xsUG9zaXRpb24g
PSBzY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgICAgIG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRlLmxh
eW91dFZpZXdwb3J0T3JpZ2luID0gbGF5b3V0Vmlld3BvcnRPcmlnaW47Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlcnMgZG9u
J3QgbWF0Y2ggd2hhdCB3YXMgcHJldmlvdXNseSBzY2hlZHVsZWQsIGRpc3BhdGNoIGltbWVkaWF0
ZWx5LgotICAgICAgICBtX3VwZGF0ZU5vZGVTY3JvbGxQb3NpdGlvblRpbWVyLnN0b3AoKTsKLSAg
ICAgICAgdXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKG1fc2NoZWR1bGVkU2Ny
b2xsVXBkYXRlLm5vZGVJRCwgbV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUuc2Nyb2xsUG9zaXRpb24s
IG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRlLmxheW91dFZpZXdwb3J0T3JpZ2luLCBtX3NjaGVkdWxl
ZFNjcm9sbFVwZGF0ZS5pc1Byb2dyYW1tYXRpY1Njcm9sbCwgbV9zY2hlZHVsZWRTY3JvbGxVcGRh
dGUudXBkYXRlTGF5ZXJQb3NpdGlvbkFjdGlvbik7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbFBvc2l0
aW9uQWZ0ZXJBc3luY1Njcm9sbChub2RlSUQsIHNjcm9sbFBvc2l0aW9uLCBsYXlvdXRWaWV3cG9y
dE9yaWdpbiwgcHJvZ3JhbW1hdGljU2Nyb2xsLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRl
ID0gc2Nyb2xsVXBkYXRlOwotICAgIG1fdXBkYXRlTm9kZVNjcm9sbFBvc2l0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBk
YXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsVGltZXJGaXJlZCgpCi17Ci0gICAgdXBk
YXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRl
Lm5vZGVJRCwgbV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUuc2Nyb2xsUG9zaXRpb24sIG1fc2NoZWR1
bGVkU2Nyb2xsVXBkYXRlLmxheW91dFZpZXdwb3J0T3JpZ2luLCBtX3NjaGVkdWxlZFNjcm9sbFVw
ZGF0ZS5pc1Byb2dyYW1tYXRpY1Njcm9sbCwgbV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUudXBkYXRl
TGF5ZXJQb3NpdGlvbkFjdGlvbik7Ci19Ci0KLUZyYW1lVmlldyogQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3Rm9yU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xs
aW5nTm9kZUlEKSBjb25zdAotewotICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKHNjcm9s
bGluZ05vZGVJRCA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zY3Jv
bGxpbmdOb2RlSUQoKSkKLSAgICAgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygp
OwotCi0gICAgYXV0byogc3RhdGVOb2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9k
ZUZvcklEKHNjcm9sbGluZ05vZGVJRCk7Ci0gICAgaWYgKCFzdGF0ZU5vZGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgLy8gRmluZCB0aGUgZW5jbG9zaW5nIGZyYW1lIHNjcm9sbGlu
ZyBub2RlLgotICAgIGF1dG8qIHBhcmVudE5vZGUgPSBzdGF0ZU5vZGU7Ci0gICAgd2hpbGUgKHBh
cmVudE5vZGUgJiYgIXBhcmVudE5vZGUtPmlzRnJhbWVTY3JvbGxpbmdOb2RlKCkpCi0gICAgICAg
IHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLT5wYXJlbnQoKTsKLSAgICAKLSAgICBpZiAoIXBhcmVu
dE5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIC8vIFdhbGsgdGhlIGZy
YW1lIHRyZWUgdG8gZmluZCB0aGUgbWF0Y2hpbmcgRnJhbWVWaWV3LiBUaGlzIGlzIG5vdCBpZGVh
bCwgYnV0IGF2b2lkcyBiYWNrIHBvaW50ZXJzIHRvIEZyYW1lVmlld3MKLSAgICAvLyBmcm9tIFNj
cm9sbGluZ1RyZWVTdGF0ZU5vZGVzLgotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHZpZXcgPSBmcmFtZS0+dmlldygpKSB7Ci0gICAgICAgICAg
ICBpZiAodmlldy0+c2Nyb2xsaW5nTm9kZUlEKCkgPT0gcGFyZW50Tm9kZS0+c2Nyb2xsaW5nTm9k
ZUlEKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Ojp1cGRhdGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIHNj
cm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIE9wdGlvbmFs
PEZsb2F0UG9pbnQ+IGxheW91dFZpZXdwb3J0T3JpZ2luLCBib29sIHByb2dyYW1tYXRpY1Njcm9s
bCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0
aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogZnJhbWVWaWV3UHRyID0gZnJhbWVWaWV3Rm9y
U2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdOb2RlSUQpOwotICAgIGlmICghZnJhbWVWaWV3UHRyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0g
PDwgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJB
c3luY1Njcm9sbCBub2RlICIgPDwgc2Nyb2xsaW5nTm9kZUlEIDw8ICIgc2Nyb2xsUG9zaXRpb24g
IiA8PCBzY3JvbGxQb3NpdGlvbiA8PCAiIGFjdGlvbiAiIDw8IHNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24pOwotCi0gICAgYXV0byYgZnJhbWVWaWV3ID0gKmZyYW1lVmlld1B0cjsKLQotICAg
IGlmIChzY3JvbGxpbmdOb2RlSUQgPT0gZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSB7Ci0g
ICAgICAgIHJlY29uY2lsZVNjcm9sbGluZ1N0YXRlKGZyYW1lVmlldywgc2Nyb2xsUG9zaXRpb24s
IGxheW91dFZpZXdwb3J0T3JpZ2luLCBwcm9ncmFtbWF0aWNTY3JvbGwsIFZpZXdwb3J0UmVjdFN0
YWJpbGl0eTo6U3RhYmxlLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKTsKLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgICAgICBpZiAobV9wYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdn
ZXJzKCkpIHsKLSAgICAgICAgICAgIGZyYW1lVmlldy5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcihtX3BhZ2UtPnRlc3RUcmlnZ2VyKCkpOwotICAgICAgICAgICAgaWYg
KGNvbnN0IGF1dG8mIHRyaWdnZXIgPSBtX3BhZ2UtPnRlc3RUcmlnZ2VyKCkpCi0gICAgICAgICAg
ICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nh
c3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHNjcm9s
bGluZ05vZGVJRCksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhyZWFkU3luY05l
ZWRlZCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIE92ZXJmbG93LXNjcm9sbCBhcmVhLgotICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlQXJlYSA9IGZyYW1lVmlldy5zY3JvbGxhYmxlQXJlYUZvclNjcm9sbExheWVySUQoc2Nyb2xs
aW5nTm9kZUlEKSkgewotICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0SXNVc2VyU2Nyb2xsKHNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gPT0gU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlv
bjo6U3luYyk7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oc2Nyb2xsUG9zaXRpb24pOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0SXNV
c2VyU2Nyb2xsKGZhbHNlKTsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rp
b24gPT0gU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U2V0KQotICAgICAgICAgICAgbV9w
YWdlLT5lZGl0b3JDbGllbnQoKS5vdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIGlmIChtX3BhZ2UtPmV4cGVjdHNXaGVlbEV2ZW50
VHJpZ2dlcnMoKSkgewotICAgICAgICAgICAgZnJhbWVWaWV3LnNjcm9sbEFuaW1hdG9yKCkuc2V0
V2hlZWxFdmVudFRlc3RUcmlnZ2VyKG1fcGFnZS0+dGVzdFRyaWdnZXIoKSk7Ci0gICAgICAgICAg
ICBpZiAoY29uc3QgYXV0byYgdHJpZ2dlciA9IG1fcGFnZS0+dGVzdFRyaWdnZXIoKSkKLSAgICAg
ICAgICAgICAgICB0cmlnZ2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnBy
ZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4o
c2Nyb2xsaW5nTm9kZUlEKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxpbmdUaHJlYWRT
eW5jTmVlZGVkKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotfQotCi12b2lkIEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnJlY29uY2lsZVNjcm9sbGluZ1N0YXRlKEZyYW1lVmlldyYgZnJh
bWVWaWV3LCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgTGF5b3V0Vmll
d3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCYgbGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRl
UmVjdCwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwsIFZpZXdwb3J0UmVjdFN0YWJpbGl0eSB2aWV3
cG9ydFJlY3RTdGFiaWxpdHksIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gc2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbikKLXsKLSAgICBib29sIG9sZFByb2dyYW1tYXRpY1Njcm9sbCA9
IGZyYW1lVmlldy5pblByb2dyYW1tYXRpY1Njcm9sbCgpOwotICAgIGZyYW1lVmlldy5zZXRJblBy
b2dyYW1tYXRpY1Njcm9sbChwcm9ncmFtbWF0aWNTY3JvbGwpOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbGluZywgc3RyZWFtIDw8IGdldEN1cnJlbnRQcm9jZXNzSUQoKSA8PCAiIEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3IgIiA8PCB0aGlzIDw8ICIgcmVjb25jaWxlU2Nyb2xsaW5nU3Rh
dGUgc2Nyb2xsUG9zaXRpb24gIiA8PCBzY3JvbGxQb3NpdGlvbiA8PCAiIHByb2dyYW1tYXRpY1Nj
cm9sbCAiIDw8IHByb2dyYW1tYXRpY1Njcm9sbCA8PCAiIHN0YWJpbGl0eSAiIDw8IHZpZXdwb3J0
UmVjdFN0YWJpbGl0eSA8PCAiICIgPDwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7Ci0K
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxheW91dFZpZXdwb3J0UmVjdDsKLQotICAgIFdURjo6
c3dpdGNoT24obGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCwKLSAgICAgICAgWyZm
cmFtZVZpZXddKE9wdGlvbmFsPEZsb2F0UG9pbnQ+IG9yaWdpbikgewotICAgICAgICAgICAgaWYg
KG9yaWdpbikKLSAgICAgICAgICAgICAgICBmcmFtZVZpZXcuc2V0QmFzZUxheW91dFZpZXdwb3J0
T3JpZ2luKExheW91dFBvaW50KG9yaWdpbi52YWx1ZSgpKSwgRnJhbWVWaWV3OjpUcmlnZ2VyTGF5
b3V0T3JOb3Q6Ok5vKTsKLSAgICAgICAgfSwgWyZmcmFtZVZpZXcsICZsYXlvdXRWaWV3cG9ydFJl
Y3QsIHZpZXdwb3J0UmVjdFN0YWJpbGl0eSwgdmlzdWFsVmlld3BvcnRFbmFibGVkID0gdmlzdWFs
Vmlld3BvcnRFbmFibGVkKCldKE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVSZWN0KSB7Ci0g
ICAgICAgICAgICBpZiAoIW92ZXJyaWRlUmVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGxheW91dFZpZXdwb3J0UmVjdCA9IG92ZXJyaWRlUmVjdDsKLSAgICAgICAg
ICAgIGlmICh2aXN1YWxWaWV3cG9ydEVuYWJsZWQgJiYgdmlld3BvcnRSZWN0U3RhYmlsaXR5ICE9
IFZpZXdwb3J0UmVjdFN0YWJpbGl0eTo6Q2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZl
bHkpCi0gICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldExheW91dFZpZXdwb3J0T3ZlcnJpZGVS
ZWN0KExheW91dFJlY3Qob3ZlcnJpZGVSZWN0LnZhbHVlKCkpLCB2aWV3cG9ydFJlY3RTdGFiaWxp
dHkgPT0gVmlld3BvcnRSZWN0U3RhYmlsaXR5OjpTdGFibGUgPyBGcmFtZVZpZXc6OlRyaWdnZXJM
YXlvdXRPck5vdDo6WWVzIDogRnJhbWVWaWV3OjpUcmlnZ2VyTGF5b3V0T3JOb3Q6Ok5vKTsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAgICAgZWxzZSBpZiAodmlld3BvcnRSZWN0
U3RhYmlsaXR5ID09IFZpZXdwb3J0UmVjdFN0YWJpbGl0eTo6U3RhYmxlKQotICAgICAgICAgICAg
ICAgIGZyYW1lVmlldy5zZXRDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KG92ZXJyaWRlUmVjdC52YWx1ZSgpKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICk7
Ci0KLSAgICBmcmFtZVZpZXcuc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFs
c2UpOwotICAgIGZyYW1lVmlldy5ub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQocm91bmRlZElu
dFBvaW50KHNjcm9sbFBvc2l0aW9uKSk7Ci0gICAgZnJhbWVWaWV3LnNldENvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwotICAgIGZyYW1lVmlldy5zZXRJblByb2dyYW1tYXRp
Y1Njcm9sbChvbGRQcm9ncmFtbWF0aWNTY3JvbGwpOwotCi0gICAgaWYgKCFwcm9ncmFtbWF0aWNT
Y3JvbGwgJiYgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiAhPSBTY3JvbGxpbmdMYXllclBv
c2l0aW9uQWN0aW9uOjpTZXQpIHsKLSAgICAgICAgYXV0byBzY3JvbGxpbmdOb2RlSUQgPSBmcmFt
ZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCk7Ci0gICAgICAgIGlmICh2aWV3cG9ydFJlY3RTdGFiaWxp
dHkgPT0gVmlld3BvcnRSZWN0U3RhYmlsaXR5OjpTdGFibGUpCi0gICAgICAgICAgICByZWNvbmNp
bGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJQb3NpdGlvbnMoc2Nyb2xsaW5nTm9kZUlELCBmcmFt
ZVZpZXcucmVjdEZvckZpeGVkUG9zaXRpb25MYXlvdXQoKSwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlv
bkFjdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKGxheW91dFZpZXdwb3J0UmVjdCkKLSAgICAgICAg
ICAgIHJlY29uY2lsZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhzY3JvbGxpbmdO
b2RlSUQsIExheW91dFJlY3QobGF5b3V0Vmlld3BvcnRSZWN0LnZhbHVlKCkpLCBzY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBzY3JvbGxMYXllciA9IHNj
cm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7Ci0gICAgaWYgKCFzY3JvbGxMYXllcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY291bnRlclNjcm9sbGluZ0xheWVyID0gY291
bnRlclNjcm9sbGluZ0xheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7Ci0gICAgYXV0byogaW5z
ZXRDbGlwTGF5ZXIgPSBpbnNldENsaXBMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwotICAg
IGF1dG8qIGNvbnRlbnRTaGFkb3dMYXllciA9IGNvbnRlbnRTaGFkb3dMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpOwotICAgIGF1dG8qIHJvb3RDb250ZW50c0xheWVyID0gcm9vdENvbnRlbnRz
TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKLSAgICBhdXRvKiBoZWFkZXJMYXllciA9IGhl
YWRlckxheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7Ci0gICAgYXV0byogZm9vdGVyTGF5ZXIg
PSBmb290ZXJMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwotCi0gICAgQVNTRVJUKGZyYW1l
Vmlldy5zY3JvbGxQb3NpdGlvbigpID09IHJvdW5kZWRJbnRQb2ludChzY3JvbGxQb3NpdGlvbikp
OwotICAgIExheW91dFBvaW50IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWQgPSBmcmFtZVZpZXcuc2Ny
b2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKCk7Ci0gICAgZmxvYXQgdG9wQ29udGVudEluc2V0
ID0gZnJhbWVWaWV3LnRvcENvbnRlbnRJbnNldCgpOwotCi0gICAgRmxvYXRQb2ludCBwb3NpdGlv
bkZvckluc2V0Q2xpcExheWVyOwotICAgIGlmIChpbnNldENsaXBMYXllcikKLSAgICAgICAgcG9z
aXRpb25Gb3JJbnNldENsaXBMYXllciA9IEZsb2F0UG9pbnQoaW5zZXRDbGlwTGF5ZXItPnBvc2l0
aW9uKCkueCgpLCBGcmFtZVZpZXc6OnlQb3NpdGlvbkZvckluc2V0Q2xpcExheWVyKHNjcm9sbFBv
c2l0aW9uLCB0b3BDb250ZW50SW5zZXQpKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uRm9yQ29u
dGVudHNMYXllciA9IGZyYW1lVmlldy5wb3NpdGlvbkZvclJvb3RDb250ZW50TGF5ZXIoKTsKLSAg
ICAKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uRm9ySGVhZGVyTGF5ZXIgPSBGbG9hdFBvaW50KHNj
cm9sbFBvc2l0aW9uRm9yRml4ZWQueCgpLCBGcmFtZVZpZXc6OnlQb3NpdGlvbkZvckhlYWRlckxh
eWVyKHNjcm9sbFBvc2l0aW9uLCB0b3BDb250ZW50SW5zZXQpKTsKLSAgICBGbG9hdFBvaW50IHBv
c2l0aW9uRm9yRm9vdGVyTGF5ZXIgPSBGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uRm9yRml4ZWQu
eCgpLAotICAgICAgICBGcmFtZVZpZXc6OnlQb3NpdGlvbkZvckZvb3RlckxheWVyKHNjcm9sbFBv
c2l0aW9uLCB0b3BDb250ZW50SW5zZXQsIGZyYW1lVmlldy50b3RhbENvbnRlbnRzU2l6ZSgpLmhl
aWdodCgpLCBmcmFtZVZpZXcuZm9vdGVySGVpZ2h0KCkpKTsKLQotICAgIGlmIChwcm9ncmFtbWF0
aWNTY3JvbGwgfHwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9PSBTY3JvbGxpbmdMYXll
clBvc2l0aW9uQWN0aW9uOjpTZXQpIHsKLSAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9u
KC1mcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIGlmIChjb3VudGVyU2Nyb2xs
aW5nTGF5ZXIpCi0gICAgICAgICAgICBjb3VudGVyU2Nyb2xsaW5nTGF5ZXItPnNldFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uRm9yRml4ZWQpOwotICAgICAgICBpZiAoaW5zZXRDbGlwTGF5ZXIpCi0g
ICAgICAgICAgICBpbnNldENsaXBMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb25Gb3JJbnNldENs
aXBMYXllcik7Ci0gICAgICAgIGlmIChjb250ZW50U2hhZG93TGF5ZXIpCi0gICAgICAgICAgICBj
b250ZW50U2hhZG93TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uRm9yQ29udGVudHNMYXllcik7
Ci0gICAgICAgIGlmIChyb290Q29udGVudHNMYXllcikKLSAgICAgICAgICAgIHJvb3RDb250ZW50
c0xheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbkZvckNvbnRlbnRzTGF5ZXIpOwotICAgICAgICBp
ZiAoaGVhZGVyTGF5ZXIpCi0gICAgICAgICAgICBoZWFkZXJMYXllci0+c2V0UG9zaXRpb24ocG9z
aXRpb25Gb3JIZWFkZXJMYXllcik7Ci0gICAgICAgIGlmIChmb290ZXJMYXllcikKLSAgICAgICAg
ICAgIGZvb3RlckxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbkZvckZvb3RlckxheWVyKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzY3JvbGxMYXllci0+c3luY1Bvc2l0aW9uKC1mcmFtZVZpZXcu
c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIGlmIChjb3VudGVyU2Nyb2xsaW5nTGF5ZXIpCi0g
ICAgICAgICAgICBjb3VudGVyU2Nyb2xsaW5nTGF5ZXItPnN5bmNQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbkZvckZpeGVkKTsKLSAgICAgICAgaWYgKGluc2V0Q2xpcExheWVyKQotICAgICAgICAgICAg
aW5zZXRDbGlwTGF5ZXItPnN5bmNQb3NpdGlvbihwb3NpdGlvbkZvckluc2V0Q2xpcExheWVyKTsK
LSAgICAgICAgaWYgKGNvbnRlbnRTaGFkb3dMYXllcikKLSAgICAgICAgICAgIGNvbnRlbnRTaGFk
b3dMYXllci0+c3luY1Bvc2l0aW9uKHBvc2l0aW9uRm9yQ29udGVudHNMYXllcik7Ci0gICAgICAg
IGlmIChyb290Q29udGVudHNMYXllcikKLSAgICAgICAgICAgIHJvb3RDb250ZW50c0xheWVyLT5z
eW5jUG9zaXRpb24ocG9zaXRpb25Gb3JDb250ZW50c0xheWVyKTsKLSAgICAgICAgaWYgKGhlYWRl
ckxheWVyKQotICAgICAgICAgICAgaGVhZGVyTGF5ZXItPnN5bmNQb3NpdGlvbihwb3NpdGlvbkZv
ckhlYWRlckxheWVyKTsKLSAgICAgICAgaWYgKGZvb3RlckxheWVyKQotICAgICAgICAgICAgZm9v
dGVyTGF5ZXItPnN5bmNQb3NpdGlvbihwb3NpdGlvbkZvckZvb3RlckxheWVyKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxi
YXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICBhdXRvKiBub2RlID0gbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnN0YXRlTm9kZUZvcklEKHNjcm9sbGFibGVBcmVhLnNjcm9sbGluZ05vZGVJRCgpKTsK
LSAgICBpZiAoaXM8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+KG5vZGUpKSB7Ci0g
ICAgICAgIGF1dG8mIHNjcm9sbGluZ05vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZT4oKm5vZGUpOwotICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBzY3JvbGxpbmdOb2RlLnNldFZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIoc2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsaW5nTm9kZS5zZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIoc2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOwot
Ci0gICAgfQotCi0gICAgaWYgKCZzY3JvbGxhYmxlQXJlYSA9PSBtX3BhZ2UtPm1haW5GcmFtZSgp
LnZpZXcoKSkgewotICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIp
Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLmhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwotICAgIH0KLX0KLQotU2Nyb2xsaW5nTm9kZUlE
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZU5vZGUoU2Nyb2xsaW5nTm9kZVR5cGUg
bm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBuZXdOb2RlSUQpCi17Ci0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGVOb2RlICIgPDwgbm9kZVR5cGUgPDwgIiBub2RlICIgPDwgbmV3Tm9kZUlEKTsKLSAgICByZXR1
cm4gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmNyZWF0ZVVucGFyZW50ZWROb2RlKG5vZGVUeXBlLCBu
ZXdOb2RlSUQpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6aW5zZXJ0Tm9kZShTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlE
IG5ld05vZGVJRCwgU2Nyb2xsaW5nTm9kZUlEIHBhcmVudElELCBzaXplX3QgY2hpbGRJbmRleCkK
LXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIkFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6Omluc2VydE5vZGUgIiA8PCBub2RlVHlwZSA8PCAiIG5vZGUgIiA8PCBu
ZXdOb2RlSUQgPDwgIiBwYXJlbnQgIiA8PCBwYXJlbnRJRCA8PCAiIGluZGV4ICIgPDwgY2hpbGRJ
bmRleCk7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5pbnNlcnROb2RlKG5vZGVU
eXBlLCBuZXdOb2RlSUQsIHBhcmVudElELCBjaGlsZEluZGV4KTsKLX0KLQotdm9pZCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1bnBhcmVudE5vZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkK
LXsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+dW5wYXJlbnROb2RlKG5vZGVJRCk7Ci19Ci0K
LXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dW5wYXJlbnRDaGlsZHJlbkFuZERlc3Ry
b3lOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCi17Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnVucGFyZW50Q2hpbGRyZW5BbmREZXN0cm95Tm9kZShub2RlSUQpOwotfQotCi12b2lkIEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEFuZERlc3Ryb3lTdWJ0cmVlKFNjcm9sbGlu
Z05vZGVJRCBub2RlSUQpCi17Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmRldGFjaEFuZERl
c3Ryb3lTdWJ0cmVlKG5vZGVJRCk7Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y2xlYXJBbGxOb2RlcygpCi17Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmNsZWFyKCk7
Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYXJlbnRP
Zk5vZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgY29uc3QKLXsKLSAgICBhdXRvKiBzY3JvbGxp
bmdOb2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKG5vZGVJRCk7Ci0g
ICAgaWYgKCFzY3JvbGxpbmdOb2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBz
Y3JvbGxpbmdOb2RlLT5wYXJlbnROb2RlSUQoKTsKLX0KLQotVmVjdG9yPFNjcm9sbGluZ05vZGVJ
RD4gQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUoU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCkgY29uc3QKLXsKLSAgICBhdXRvKiBzY3JvbGxpbmdOb2RlID0gbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKG5vZGVJRCk7Ci0gICAgaWYgKCFzY3JvbGxpbmdO
b2RlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byogY2hpbGRyZW4gPSBzY3JvbGxp
bmdOb2RlLT5jaGlsZHJlbigpOwotICAgIGlmICghY2hpbGRyZW4gfHwgY2hpbGRyZW4tPmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICBWZWN0b3I8U2Nyb2xsaW5nTm9k
ZUlEPiBjaGlsZE5vZGVJRHM7Ci0gICAgY2hpbGROb2RlSURzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoY2hpbGRyZW4tPnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZE5vZGUgOiAq
Y2hpbGRyZW4pCi0gICAgICAgIGNoaWxkTm9kZUlEcy51bmNoZWNrZWRBcHBlbmQoY2hpbGROb2Rl
LT5zY3JvbGxpbmdOb2RlSUQoKSk7Ci0KLSAgICByZXR1cm4gY2hpbGROb2RlSURzOwotfQotCi12
b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29uY2lsZVZpZXdwb3J0Q29uc3RyYWlu
ZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlELCBjb25zdCBM
YXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gYWN0
aW9uKQotewotICAgIGF1dG8qIHNjcm9sbGluZ05vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
c3RhdGVOb2RlRm9ySUQoc2Nyb2xsaW5nTm9kZUlEKTsKLSAgICBpZiAoIXNjcm9sbGluZ05vZGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVh
bSA8PCBnZXRDdXJyZW50UHJvY2Vzc0lEKCkgPDwgIiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
OjpyZWNvbmNpbGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJQb3NpdGlvbnMgZm9yIHZpZXdwb3J0
IHJlY3QgIiA8PCB2aWV3cG9ydFJlY3QgPDwgIiBhbmQgbm9kZSAiIDw8IHNjcm9sbGluZ05vZGVJ
RCk7Ci0KLSAgICBzY3JvbGxpbmdOb2RlLT5yZWNvbmNpbGVMYXllclBvc2l0aW9uRm9yVmlld3Bv
cnRSZWN0KHZpZXdwb3J0UmVjdCwgYWN0aW9uKTsKLX0KLQotdm9pZCBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyYgZnJh
bWVWaWV3KQotewotICAgIEFTU0VSVChmcmFtZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCkpOwotICAg
IGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9s
bGluZ05vZGVJRCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIG5vbi1tYWluIGZy
YW1lcywgaXQgaXMgb25seSBwb3NzaWJsZSB0byBhcnJpdmUgaW4gdGhpcyBmdW5jdGlvbiBmcm9t
Ci0gICAgLy8gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nIHdoZXJlIHRoZSBu
b2RlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KLSAgICBBU1NFUlQoZnJhbWVWaWV3LmZyYW1l
KCkuaXNNYWluRnJhbWUoKSk7Ci0gICAgaW5zZXJ0Tm9kZShTY3JvbGxpbmdOb2RlVHlwZTo6TWFp
bkZyYW1lLCBmcmFtZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCksIDAsIDApOwotfQotCi12b2lkIEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vZGVMYXllcnMoU2Nyb2xsaW5nTm9kZUlEIG5v
ZGVJRCwgY29uc3QgTm9kZUxheWVycyYgbm9kZUxheWVycykKLXsKLSAgICBhdXRvKiBub2RlID0g
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKG5vZGVJRCk7Ci0gICAgQVNTRVJU
KG5vZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm9kZS0+c2V0
TGF5ZXIobm9kZUxheWVycy5sYXllcik7Ci0KLSAgICBpZiAoaXM8U2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBzY3JvbGxpbmdOb2RlID0gZG93bmNh
c3Q8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPigqbm9kZSk7Ci0gICAgICAgIHNjcm9sbGlu
Z05vZGUuc2V0U2Nyb2xsQ29udGFpbmVyTGF5ZXIobm9kZUxheWVycy5zY3JvbGxDb250YWluZXJM
YXllcik7Ci0gICAgICAgIHNjcm9sbGluZ05vZGUuc2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKG5v
ZGVMYXllcnMuc2Nyb2xsZWRDb250ZW50c0xheWVyKTsKLQotICAgICAgICBpZiAoaXM8U2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+KG5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBm
cmFtZVNjcm9sbGluZ05vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZT4oKm5vZGUpOwotICAgICAgICAgICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldEluc2V0Q2xp
cExheWVyKG5vZGVMYXllcnMuaW5zZXRDbGlwTGF5ZXIpOwotICAgICAgICAgICAgZnJhbWVTY3Jv
bGxpbmdOb2RlLnNldENvdW50ZXJTY3JvbGxpbmdMYXllcihub2RlTGF5ZXJzLmNvdW50ZXJTY3Jv
bGxpbmdMYXllcik7Ci0gICAgICAgICAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0Um9vdENvbnRl
bnRzTGF5ZXIobm9kZUxheWVycy5yb290Q29udGVudHNMYXllcik7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsaW5nTm9kZUdl
b21ldHJ5KFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIGNvbnN0IFNjcm9sbGluZ0dlb21ldHJ5JiBz
Y3JvbGxpbmdHZW9tZXRyeSkKLXsKLSAgICBhdXRvKiBzdGF0ZU5vZGUgPSBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+c3RhdGVOb2RlRm9ySUQobm9kZUlEKTsKLSAgICBBU1NFUlQoc3RhdGVOb2RlKTsK
LSAgICBpZiAoIXN0YXRlTm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHN0YXRlTm9k
ZS0+bm9kZVR5cGUoKSA9PSBTY3JvbGxpbmdOb2RlVHlwZTo6RnJhbWVIb3N0aW5nKSB7Ci0gICAg
ICAgIGF1dG8mIGZyYW1lSG9zdGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRl
RnJhbWVIb3N0aW5nTm9kZT4oKnN0YXRlTm9kZSk7Ci0gICAgICAgIGZyYW1lSG9zdGluZ1N0YXRl
Tm9kZS5zZXRQYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KHNjcm9sbGluZ0dlb21ldHJ5LnBh
cmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byYgc2Nyb2xsaW5nTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZT4oKnN0YXRlTm9kZSk7Ci0KLSAgICBzY3JvbGxpbmdOb2RlLnNldFBhcmVudFJlbGF0aXZl
U2Nyb2xsYWJsZVJlY3Qoc2Nyb2xsaW5nR2VvbWV0cnkucGFyZW50UmVsYXRpdmVTY3JvbGxhYmxl
UmVjdCk7Ci0gICAgc2Nyb2xsaW5nTm9kZS5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsaW5nR2VvbWV0
cnkuc2Nyb2xsT3JpZ2luKTsKLSAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbFBvc2l0aW9uKHNj
cm9sbGluZ0dlb21ldHJ5LnNjcm9sbFBvc2l0aW9uKTsKLSAgICBzY3JvbGxpbmdOb2RlLnNldFRv
dGFsQ29udGVudHNTaXplKHNjcm9sbGluZ0dlb21ldHJ5LmNvbnRlbnRTaXplKTsKLSAgICBzY3Jv
bGxpbmdOb2RlLnNldFJlYWNoYWJsZUNvbnRlbnRzU2l6ZShzY3JvbGxpbmdHZW9tZXRyeS5yZWFj
aGFibGVDb250ZW50U2l6ZSk7Ci0gICAgc2Nyb2xsaW5nTm9kZS5zZXRTY3JvbGxhYmxlQXJlYVNp
emUoc2Nyb2xsaW5nR2VvbWV0cnkuc2Nyb2xsYWJsZUFyZWFTaXplKTsKLQotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgLy8gdXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJh
bWVWaWV3KCkgc2V0cyB0aGVzZSBmb3IgZnJhbWUgc2Nyb2xsaW5nIG5vZGVzLiBGSVhNRTogV2h5
IHRoZSBkaWZmZXJlbmNlPwotICAgIGlmIChpczxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZT4oc2Nyb2xsaW5nTm9kZSkpIHsKLSAgICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2Rl
U25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGluZ05vZGUsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCwgJnNjcm9sbGluZ0dlb21ldHJ5Lmhvcml6b250YWxTbmFwT2Zmc2V0cywgJnNjcm9sbGlu
Z0dlb21ldHJ5Lmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzLCBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCkpOwotICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxv
YXQoc2Nyb2xsaW5nTm9kZSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgJnNjcm9sbGluZ0dl
b21ldHJ5LnZlcnRpY2FsU25hcE9mZnNldHMsICZzY3JvbGxpbmdHZW9tZXRyeS52ZXJ0aWNhbFNu
YXBPZmZzZXRSYW5nZXMsIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIHNj
cm9sbGluZ05vZGUuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxpbmdH
ZW9tZXRyeS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTsKLSAgICAgICAgc2Nyb2xs
aW5nTm9kZS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChzY3JvbGxpbmdHZW9tZXRy
eS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZv
aWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Vmlld3BvcnRDb25zdHJhaW50ZWROb2Rl
R2VvbWV0cnkoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29uc3QgVmlld3BvcnRDb25zdHJhaW50
cyYgY29uc3RyYWludHMpCi17Ci0gICAgYXV0byogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5zdGF0ZU5vZGVGb3JJRChub2RlSUQpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc3dpdGNoIChjb25zdHJhaW50cy5jb25zdHJhaW50VHlwZSgpKSB7Ci0gICAgY2Fz
ZSBWaWV3cG9ydENvbnN0cmFpbnRzOjpGaXhlZFBvc2l0aW9uQ29uc3RyYWludDogewotICAgICAg
ICBhdXRvJiBmaXhlZE5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZT4oKm5v
ZGUpOwotICAgICAgICBmaXhlZE5vZGUudXBkYXRlQ29uc3RyYWludHMoKGNvbnN0IEZpeGVkUG9z
aXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJiljb25zdHJhaW50cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFZpZXdwb3J0Q29uc3RyYWludHM6OlN0aWNreVBvc2l0aW9uQ29uc3Ry
YWludDogewotICAgICAgICBhdXRvJiBzdGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3Rh
dGVTdGlja3lOb2RlPigqbm9kZSk7Ci0gICAgICAgIHN0aWNreU5vZGUudXBkYXRlQ29uc3RyYWlu
dHMoKGNvbnN0IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyYpY29uc3RyYWludHMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotfQotCi12b2lkIEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyhGcmFtZVZpZXcmIGZy
YW1lVmlldywgU3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgYXV0
byogc2Nyb2xsaW5nU3RhdGVOb2RlID0gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGUqPihtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVW
aWV3LnNjcm9sbGluZ05vZGVJRCgpKSk7Ci0gICAgaWYgKCFzY3JvbGxpbmdTdGF0ZU5vZGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIGlz
IGxpa2VseSB0byBiZSBvdXQtb2Ytc3luY2ggd2l0aCB0aGUgUGxhdGZvcm1MYXllcgotICAgIC8v
IGF0IHRoaXMgcG9pbnQuIFNvIHdlJ2xsIHVwZGF0ZSBpdCBiZWZvcmUgd2Ugc3dpdGNoIGJhY2sg
dG8gbWFpbiB0aHJlYWQgc2Nyb2xsaW5nCi0gICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgbGF5ZXIg
cG9zaXRpb25pbmcgYnVncy4KLSAgICBpZiAocmVhc29ucykKLSAgICAgICAgdXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbihmcmFtZVZpZXcpOwotICAgIHNjcm9sbGluZ1N0YXRlTm9kZS0+c2V0U3lu
Y2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKHJlYXNvbnMpOwotfQotCi12b2lkIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb24oRnJhbWVWaWV3JiBmcmFt
ZVZpZXcpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoYXV0byogc2Ny
b2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQotICAgICAgICBz
Y3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigpKTsKLX0K
LQotYm9vbCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjppc1J1YmJlckJhbmRJblByb2dyZXNz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsaW5nVHJlZSgpLT5pc1J1YmJlckJhbmRJblBy
b2dyZXNzKCk7Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xs
UGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uaW5nKQotewotICAgIHNj
cm9sbGluZ1RyZWUoKS0+c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHBpbm5pbmcpOwotfQotCi1i
b29sIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCkuc2V0dGluZ3MoKS52aXN1YWxW
aWV3cG9ydEVuYWJsZWQoKTsKLX0KLQotYm9vbCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjph
c3luY0ZyYW1lT3JPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSBjb25zdAotewotICAgIGF1dG8m
IHNldHRpbmdzID0gbV9wYWdlLT5tYWluRnJhbWUoKS5zZXR0aW5ncygpOwotICAgIHJldHVybiBz
ZXR0aW5ncy5hc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCgpIHx8IHNldHRpbmdzLmFzeW5jT3Zl
cmZsb3dTY3JvbGxpbmdFbmFibGVkKCk7Ci19Ci0KLVN0cmluZyBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoU2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0
QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCkpIHsKLSAgICAgICAgaWYgKG1fZXZlbnRUcmFja2luZ1JlZ2lvbnNE
aXJ0eSkKLSAgICAgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkt
PnNldEV2ZW50VHJhY2tpbmdSZWdpb25zKGFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnMoKSk7
Ci0gICAgICAgIHJldHVybiBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
Y3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoYmVoYXZpb3IpOwotICAgIH0KLQotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQgc2Ny
b2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5kZXgsIHVuc2lnbmVkIHZlcnRpY2Fs
SW5kZXgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAKLSAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8qIGZyYW1lVmlldyA9IGZyYW1l
Vmlld0ZvclNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nTm9kZUlEKTsKLSAgICBpZiAoIWZyYW1lVmll
dykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzY3JvbGxpbmdOb2RlSUQgPT0gZnJh
bWVWaWV3LT5zY3JvbGxpbmdOb2RlSUQoKSkgewotICAgICAgICBmcmFtZVZpZXctPnNldEN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaG9yaXpvbnRhbEluZGV4KTsKLSAgICAgICAgZnJh
bWVWaWV3LT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh2ZXJ0aWNhbEluZGV4KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBPdmVyZmxvdy1zY3JvbGwgYXJl
YS4KLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBmcmFtZVZpZXctPnNjcm9sbGFibGVB
cmVhRm9yU2Nyb2xsTGF5ZXJJRChzY3JvbGxpbmdOb2RlSUQpKSB7Ci0gICAgICAgIHNjcm9sbGFi
bGVBcmVhLT5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGhvcml6b250YWxJbmRl
eCk7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleCh2ZXJ0aWNhbEluZGV4KTsKLSAgICB9Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9s
bGFibGVBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRl
ZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVhc29uKSBjb25zdAotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKCFtX3BhZ2UgfHwgIW1fcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRU
cmlnZ2VycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29uc3QgYXV0byYgdHJpZ2dl
ciA9IG1fcGFnZS0+dGVzdFRyaWdnZXIoKSkgewotICAgICAgICBMT0coV2hlZWxFdmVudFRlc3RU
cmlnZ2VycywgIiAgICAoISkgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGVmZXJUZXN0c0Zv
clJlYXNvbjogRGVmZXJyaW5nICVwIGZvciByZWFzb24gJWQuIiwgaWRlbnRpZmllciwgcmVhc29u
KTsKLSAgICAgICAgdHJpZ2dlci0+ZGVmZXJUZXN0c0ZvclJlYXNvbihpZGVudGlmaWVyLCByZWFz
b24pOwotICAgIH0KLX0KLQotdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVU
ZXN0RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RU
cmlnZ2VyUmVhc29uIHJlYXNvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGlmICghbV9wYWdlIHx8ICFtX3BhZ2UtPmV4cGVjdHNXaGVlbEV2ZW50VHJpZ2dlcnMo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnN0IGF1dG8mIHRyaWdnZXIgPSBtX3Bh
Z2UtPnRlc3RUcmlnZ2VyKCkpIHsKLSAgICAgICAgTE9HKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcnMs
ICIgICAgKCEpIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlbW92ZVRlc3REZWZlcnJhbEZv
clJlYXNvbjogRGVmZXJyaW5nICVwIGZvciByZWFzb24gJWQuIiwgaWRlbnRpZmllciwgcmVhc29u
KTsKLSAgICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKGlkZW50aWZp
ZXIsIHJlYXNvbik7Ci0gICAgfQotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQotYm9vbCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjppc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsaW5nVHJlZSgpLT5pc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCk7Ci19Ci0KLXZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRl
U2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1lVmlldyYgZnJhbWVW
aWV3KQotewotICAgIGlmIChhdXRvIG5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZT4obV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1l
Vmlldy5zY3JvbGxpbmdOb2RlSUQoKSkpKSB7Ci0gICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9k
ZVNuYXBPZmZzZXRzQXNGbG9hdCgqbm9kZSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBm
cmFtZVZpZXcuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIGZyYW1lVmlldy5ob3Jpem9udGFsU25h
cE9mZnNldFJhbmdlcygpLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBz
ZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUsIFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIGZyYW1lVmlldy52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIGZyYW1lVmll
dy52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3Rvcigp
KTsKLSAgICAgICAgbm9kZS0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChmcmFt
ZVZpZXcuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpKTsKLSAgICAgICAgbm9kZS0+
c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoZnJhbWVWaWV3LmN1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4KCkpOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lkIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnJlcG9ydEV4cG9zZWRVbmZpbGxlZEFyZWEoTW9ub3RvbmljVGltZSB0
aW1lc3RhbXAsIHVuc2lnbmVkIHVuZmlsbGVkQXJlYSkKLXsKLSAgICBpZiAobV9wYWdlICYmIG1f
cGFnZS0+cGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50KCkpCi0gICAgICAgIG1fcGFnZS0+cGVyZm9y
bWFuY2VMb2dnaW5nQ2xpZW50KCktPmxvZ1Njcm9sbGluZ0V2ZW50KFBlcmZvcm1hbmNlTG9nZ2lu
Z0NsaWVudDo6U2Nyb2xsaW5nRXZlbnQ6OkV4cG9zZWRUaWxlbGVzc0FyZWEsIHRpbWVzdGFtcCwg
dW5maWxsZWRBcmVhKTsKLX0KLQotdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXBv
cnRTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnNDaGFuZ2VkKE1vbm90b25pY1RpbWUgdGltZXN0
YW1wLCBTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMgcmVhc29ucykKLXsKLSAgICBpZiAobV9w
YWdlICYmIG1fcGFnZS0+cGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50KCkpCi0gICAgICAgIG1fcGFn
ZS0+cGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50KCktPmxvZ1Njcm9sbGluZ0V2ZW50KFBlcmZvcm1h
bmNlTG9nZ2luZ0NsaWVudDo6U2Nyb2xsaW5nRXZlbnQ6OlN3aXRjaGVkU2Nyb2xsaW5nTW9kZSwg
dGltZXN0YW1wLCByZWFzb25zKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJl
dmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzggKzEgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCiAKLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
LQotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5n
VHJlZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBhZ2U7Ci1jbGFzcyBTY3JvbGxiYXI7Ci1jbGFz
cyBTY3JvbGxpbmdTdGF0ZU5vZGU7Ci1jbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7
Ci1jbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7Ci0KLS8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHN1
YmNsYXNzIHRoYXQgbWFpbnRhaW5zIGEgU2Nyb2xsaW5nU3RhdGVUcmVlIGFuZCBhIFNjcm9sbGlu
Z1RyZWUsCi0vLyBhbGxvd2luZyBhc3luY2hyb25vdXMgc2Nyb2xsaW5nIChpbiBhbm90aGVyIHRo
cmVhZCBvciBwcm9jZXNzKS4KLWNsYXNzIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IgOiBwdWJs
aWMgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcj4gY3JlYXRlKFBhZ2UqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCk7Ci0KLSAgICBTY3JvbGxpbmdUcmVl
KiBzY3JvbGxpbmdUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVlLmdldCgpOyB9
Ci0KLSAgICB2b2lkIHNjcm9sbGluZ1N0YXRlVHJlZVByb3BlcnRpZXNDaGFuZ2VkKCk7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjaGVkdWxlVXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFz
eW5jU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IE9wdGlv
bmFsPEZsb2F0UG9pbnQ+JiBsYXlvdXRWaWV3cG9ydE9yaWdpbiwgYm9vbCBwcm9ncmFtbWF0aWNT
Y3JvbGwsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhT
Y3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGlj
YWxJbmRleCk7Ci0gICAgdm9pZCBkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRl
ZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFs
Rm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVy
LCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0Owot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1l
VmlldyYpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0
ZUV4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXJXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1lVmll
dyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCByZXBvcnRFeHBvc2VkVW5maWxsZWRBcmVhKE1vbm90
b25pY1RpbWUsIHVuc2lnbmVkIHVuZmlsbGVkQXJlYSk7Ci0gICAgdm9pZCByZXBvcnRTeW5jaHJv
bm91c1Njcm9sbGluZ1JlYXNvbnNDaGFuZ2VkKE1vbm90b25pY1RpbWUsIFN5bmNocm9ub3VzU2Ny
b2xsaW5nUmVhc29ucyk7Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKLQotICAgIHZvaWQgc2V0U2Nyb2xsaW5nVHJlZShS
ZWY8U2Nyb2xsaW5nVHJlZT4mJiBzY3JvbGxpbmdUcmVlKSB7IG1fc2Nyb2xsaW5nVHJlZSA9IFdU
Rk1vdmUoc2Nyb2xsaW5nVHJlZSk7IH0KLQotICAgIFNjcm9sbGluZ1N0YXRlVHJlZSogc2Nyb2xs
aW5nU3RhdGVUcmVlKCkgeyByZXR1cm4gbV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCk7IH0KLQot
ICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiByZWxlYXNlU2Nyb2xsaW5nVHJlZSgpIHsgcmV0dXJu
IFdURk1vdmUobV9zY3JvbGxpbmdUcmVlKTsgfQotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxQb3Np
dGlvbkFmdGVyQXN5bmNTY3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50Jiwg
T3B0aW9uYWw8RmxvYXRQb2ludD4gbGF5b3V0Vmlld3BvcnRPcmlnaW4sIGJvb2wgcHJvZ3JhbW1h
dGljU2Nyb2xsLCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyBzY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoU2Nyb2xsaW5nU3RhdGVUcmVl
QXNUZXh0QmVoYXZpb3IgPSBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvck5vcm1hbCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3aWxsQ29tbWl0VHJlZSgp
IG92ZXJyaWRlOwotCi0gICAgYm9vbCBldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbV9ldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5OyB9Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICBib29sIGhhc1Zpc2libGVTbG93UmVwYWludFZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RzKGNvbnN0IEZyYW1lVmlldyYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgCi0gICAgYm9vbCB2aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSBjb25zdDsKLSAg
ICBib29sIGFzeW5jRnJhbWVPck92ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpIGNvbnN0OwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyYp
IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKEZyYW1lVmlldyYpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZnJh
bWVWaWV3RXZlbnRUcmFja2luZ1JlZ2lvbnNDaGFuZ2VkKEZyYW1lVmlldyYpIG92ZXJyaWRlOwot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJh
bWVWaWV3JiwgY29uc3QgSW50UG9pbnQmKSBvdmVycmlkZTsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IFNjcm9sbGluZ05vZGVJRCBjcmVhdGVOb2RlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdO
b2RlSUQgbmV3Tm9kZUlEKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdO
b2RlSUQgaW5zZXJ0Tm9kZShTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5ld05v
ZGVJRCwgU2Nyb2xsaW5nTm9kZUlEIHBhcmVudElELCBzaXplX3QgY2hpbGRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnBhcmVudE5vZGUoU2Nyb2xsaW5nTm9kZUlE
KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucGFyZW50Q2hpbGRyZW5BbmRE
ZXN0cm95Tm9kZShTY3JvbGxpbmdOb2RlSUQpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGV0YWNoQW5kRGVzdHJveVN1YnRyZWUoU2Nyb2xsaW5nTm9kZUlEKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyQWxsTm9kZXMoKSBvdmVycmlkZTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIFNjcm9sbGluZ05vZGVJRCBwYXJlbnRPZk5vZGUoU2Nyb2xsaW5nTm9k
ZUlEKSBjb25zdCBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U2Nyb2xsaW5n
Tm9kZUlEPiBjaGlsZHJlbk9mTm9kZShTY3JvbGxpbmdOb2RlSUQpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCwg
Y29uc3QgTm9kZUxheWVycyYpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U2Nyb2xsaW5nTm9kZUdlb21ldHJ5KFNjcm9sbGluZ05vZGVJRCwgY29uc3QgU2Nyb2xsaW5nR2Vv
bWV0cnkmKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZXdwb3J0Q29u
c3RyYWludGVkTm9kZUdlb21ldHJ5KFNjcm9sbGluZ05vZGVJRCwgY29uc3QgVmlld3BvcnRDb25z
dHJhaW50cyYpIG92ZXJyaWRlOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWNvbmNpbGVT
Y3JvbGxpbmdTdGF0ZShGcmFtZVZpZXcmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgTGF5b3V0
Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCYsIGJvb2wgcHJvZ3JhbW1hdGljU2Nyb2xsLCBW
aWV3cG9ydFJlY3RTdGFiaWxpdHksIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pIG92ZXJy
aWRlOwotCi0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IoU2Nyb2xsUGlubmluZ0JlaGF2aW9y
KSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgYm9vbCBpc1Nj
cm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVjb25jaWxlVmlld3BvcnRDb25zdHJhaW5lZExheWVyUG9zaXRpb25z
KFNjcm9sbGluZ05vZGVJRCwgY29uc3QgTGF5b3V0UmVjdCYgdmlld3BvcnRSZWN0LCBTY3JvbGxp
bmdMYXllclBvc2l0aW9uQWN0aW9uKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEmLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbikgb3ZlcnJpZGU7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyhGcmFtZVZpZXcmLCBTeW5jaHJvbm91c1Nj
cm9sbGluZ1JlYXNvbnMpIGZpbmFsOwotCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVHJlZVN0
YXRlQ29tbWl0KCkgPSAwOwotCi0gICAgdm9pZCBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbihGcmFt
ZVZpZXcmKTsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xs
VGltZXJGaXJlZCgpOwotICAgIHZvaWQgc2V0RXZlbnRUcmFja2luZ1JlZ2lvbnNEaXJ0eSgpOwot
ICAgIHZvaWQgdXBkYXRlRXZlbnRUcmFja2luZ1JlZ2lvbnMoKTsKLSAgICAKLSAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlld0ZvclNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nTm9kZUlEKSBjb25zdDsKLQot
ICAgIFRpbWVyIG1fdXBkYXRlTm9kZVNjcm9sbFBvc2l0aW9uVGltZXI7Ci0KLSAgICBzdHJ1Y3Qg
U2NoZWR1bGVkU2Nyb2xsVXBkYXRlIHsKLSAgICAgICAgU2NoZWR1bGVkU2Nyb2xsVXBkYXRlKCkg
PSBkZWZhdWx0OwotICAgICAgICBTY2hlZHVsZWRTY3JvbGxVcGRhdGUoU2Nyb2xsaW5nTm9kZUlE
IHNjcm9sbGluZ05vZGVJRCwgRmxvYXRQb2ludCBwb2ludCwgT3B0aW9uYWw8RmxvYXRQb2ludD4g
dmlld3BvcnRPcmlnaW4sIGJvb2wgaXNQcm9ncmFtbWF0aWMsIFNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24gdWRwYXRlQWN0aW9uKQotICAgICAgICAgICAgOiBub2RlSUQoc2Nyb2xsaW5nTm9k
ZUlEKQotICAgICAgICAgICAgLCBzY3JvbGxQb3NpdGlvbihwb2ludCkKLSAgICAgICAgICAgICwg
bGF5b3V0Vmlld3BvcnRPcmlnaW4odmlld3BvcnRPcmlnaW4pCi0gICAgICAgICAgICAsIGlzUHJv
Z3JhbW1hdGljU2Nyb2xsKGlzUHJvZ3JhbW1hdGljKQotICAgICAgICAgICAgLCB1cGRhdGVMYXll
clBvc2l0aW9uQWN0aW9uKHVkcGF0ZUFjdGlvbikKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgU2Ny
b2xsaW5nTm9kZUlEIG5vZGVJRCB7IDAgfTsKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxQb3Np
dGlvbjsKLSAgICAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gbGF5b3V0Vmlld3BvcnRPcmlnaW47
Ci0gICAgICAgIGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwgeyBmYWxzZSB9OwotICAgICAgICBT
Y3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIHVwZGF0ZUxheWVyUG9zaXRpb25BY3Rpb24geyBT
Y3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jIH07Ci0gICAgICAgIAotICAgICAgICBi
b29sIG1hdGNoZXNVcGRhdGVUeXBlKGNvbnN0IFNjaGVkdWxlZFNjcm9sbFVwZGF0ZSYgb3RoZXIp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBub2RlSUQgPT0gb3RoZXIubm9k
ZUlECi0gICAgICAgICAgICAgICAgJiYgaXNQcm9ncmFtbWF0aWNTY3JvbGwgPT0gb3RoZXIuaXNQ
cm9ncmFtbWF0aWNTY3JvbGwKLSAgICAgICAgICAgICAgICAmJiB1cGRhdGVMYXllclBvc2l0aW9u
QWN0aW9uID09IG90aGVyLnVwZGF0ZUxheWVyUG9zaXRpb25BY3Rpb247Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgU2NoZWR1bGVkU2Nyb2xsVXBkYXRlIG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRl
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdT
dGF0ZVRyZWU7Ci0gICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKLQot
ICAgIGJvb2wgbV9ldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5IHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TQ1JPTExJTkdf
Q09PUkRJTkFUT1IoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciwgaXNBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpOwotCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NSwzNyArMjUsNDMgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVk
ZSAiRGVidWdQYWdlT3ZlcmxheXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgog
I2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3Ry
YWludHMuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ1N0YXRlRnJhbWVIb3N0aW5nTm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVPdmVyZmxv
d1Njcm9sbGluZ05vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgorI2luY2x1ZGUgPHd0
Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLVJlZjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yKHBhZ2UpKTsKLX0KLSNlbmRpZgotCiBTY3JvbGxpbmdDb29yZGluYXRv
cjo6U2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQor
ICAgICwgbV91cGRhdGVOb2RlU2Nyb2xsUG9zaXRpb25UaW1lcigqdGhpcywgJlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNTY3JvbGxUaW1lckZpcmVk
KQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUoc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxpbmdT
dGF0ZVRyZWU+KHRoaXMpKQogewogfQogCkBAIC02NCw2ICs3MCwxMSBAQCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hCiAgICAgQVNTRVJUKCFtX3BhZ2UpOwogfQogCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVQcm9wZXJ0aWVzQ2hh
bmdlZCgpCit7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwogdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpCiB7CiAgICAgQVNTRVJUKG1fcGFnZSk7
CkBAIC0xNjIsNyArMTczLDcgQEAgRXZlbnRUcmFja2luZ1JlZ2lvbnMgU2Nyb2xsaW5nQ29vcmRp
bmF0bwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uLnVuaXRlKHJlbmRlcldpZGdldC0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiAgICAg
fQotICAgIAorCiAgICAgRXZlbnRUcmFja2luZ1JlZ2lvbnMgZXZlbnRUcmFja2luZ1JlZ2lvbnM7
CiAKICAgICAvLyBGSVhNRTogaWYgd2UndmUgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIHRoaXMgc3Vi
ZnJhbWUgYXMgYSBzY3JvbGxhYmxlIGFyZWEsIHdlIGNhbiBhdm9pZCByZWN1cnNpbmcgaW50byBp
dCBoZXJlLgpAQCAtMTg3LDcgKzE5OCw3IEBAIEV2ZW50VHJhY2tpbmdSZWdpb25zIFNjcm9sbGlu
Z0Nvb3JkaW5hdG8KICAgICAgICAgTGF5b3V0UmVjdCBpbmZsYXRlZFdoZWVsSGFuZGxlckJvdW5k
cyA9IGZyYW1lVmlldy0+Zml4ZWRTY3JvbGxhYmxlQXJlYUJvdW5kc0luZmxhdGVkRm9yU2Nyb2xs
aW5nKExheW91dFJlY3Qod2hlZWxIYW5kbGVyUmVnaW9uLmZpcnN0LmJvdW5kcygpKSk7CiAgICAg
ICAgIHdoZWVsSGFuZGxlclJlZ2lvbi5maXJzdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGluZmxh
dGVkV2hlZWxIYW5kbGVyQm91bmRzKSk7CiAgICAgfQotICAgIAorCiAgICAgbm9uRmFzdFNjcm9s
bGFibGVSZWdpb24udW5pdGUod2hlZWxIYW5kbGVyUmVnaW9uLmZpcnN0KTsKIAogICAgIC8vIEZJ
WE1FOiBJZiB0aGlzIGlzIG5vdCB0aGUgbWFpbiBmcmFtZSwgd2UgY291bGQgY2xpcCB0aGUgcmVn
aW9uIHRvIHRoZSBmcmFtZSdzIGJvdW5kcy4KQEAgLTIwMiw2ICsyMTMsNDAgQEAgRXZlbnRUcmFj
a2luZ1JlZ2lvbnMgU2Nyb2xsaW5nQ29vcmRpbmF0bwogICAgIHJldHVybiBhYnNvbHV0ZUV2ZW50
VHJhY2tpbmdSZWdpb25zRm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7CiB9CiAKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorc3RhdGljIGlubGluZSB2b2lkIHNldFN0YXRlU2Nyb2xs
aW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIG5v
ZGUsIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIHNuYXBP
ZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+KiBzbmFw
T2Zmc2V0UmFuZ2VzLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICAvLyBGSVhNRTog
SW5jb3Jwb3JhdGUgY3VycmVudCBwYWdlIHNjYWxlIGZhY3RvciBpbiBzbmFwcGluZyB0byBkZXZp
Y2UgcGl4ZWwuIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29udmVydCB0byBmbG9hdCBoZXJlIGFu
ZCBsZXQgVUkgcHJvY2VzcyBkbyB0aGUgcGl4ZWwgc25hcHBpbmc/CisgICAgVmVjdG9yPGZsb2F0
PiBzbmFwT2Zmc2V0c0FzRmxvYXQ7CisgICAgaWYgKHNuYXBPZmZzZXRzKSB7CisgICAgICAgIHNu
YXBPZmZzZXRzQXNGbG9hdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNuYXBPZmZzZXRzLT5zaXpl
KCkpOworICAgICAgICBmb3IgKGF1dG8mIG9mZnNldCA6ICpzbmFwT2Zmc2V0cykKKyAgICAgICAg
ICAgIHNuYXBPZmZzZXRzQXNGbG9hdC51bmNoZWNrZWRBcHBlbmQocm91bmRUb0RldmljZVBpeGVs
KG9mZnNldCwgZGV2aWNlU2NhbGVGYWN0b3IsIGZhbHNlKSk7CisgICAgfQorCisgICAgVmVjdG9y
PFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4gc25hcE9mZnNldFJhbmdlc0FzRmxvYXQ7CisgICAg
aWYgKHNuYXBPZmZzZXRSYW5nZXMpIHsKKyAgICAgICAgc25hcE9mZnNldFJhbmdlc0FzRmxvYXQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzbmFwT2Zmc2V0UmFuZ2VzLT5zaXplKCkpOworICAgICAg
ICBmb3IgKGF1dG8mIHJhbmdlIDogKnNuYXBPZmZzZXRSYW5nZXMpCisgICAgICAgICAgICBzbmFw
T2Zmc2V0UmFuZ2VzQXNGbG9hdC51bmNoZWNrZWRBcHBlbmQoeyByb3VuZFRvRGV2aWNlUGl4ZWwo
cmFuZ2Uuc3RhcnQsIGRldmljZVNjYWxlRmFjdG9yLCBmYWxzZSksIHJvdW5kVG9EZXZpY2VQaXhl
bChyYW5nZS5lbmQsIGRldmljZVNjYWxlRmFjdG9yLCBmYWxzZSkgfSk7CisgICAgfQorICAgIGlm
IChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgeworICAgICAgICBub2RlLnNl
dEhvcml6b250YWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxvYXQpOworICAgICAgICBub2Rl
LnNldEhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKHNuYXBPZmZzZXRSYW5nZXNBc0Zsb2F0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBub2RlLnNldFZlcnRpY2FsU25hcE9mZnNldHMoc25hcE9m
ZnNldHNBc0Zsb2F0KTsKKyAgICAgICAgbm9kZS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMo
c25hcE9mZnNldFJhbmdlc0FzRmxvYXQpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXRFdmVudFRyYWNraW5nUmVnaW9uc0RpcnR5KCkKK3sKKyAgICBt
X2V2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkgPSB0cnVlOworICAgIC8vIFdlIGhhdmUgdG8gc2No
ZWR1bGUgYSBjb21taXQsIGJ1dCB0aGUgY29tcHV0ZWQgbm9uLWZhc3QgcmVnaW9uIG1heSBub3Qg
aGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9
CisKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hhc1Nsb3dSZXBhaW50T2Jq
ZWN0c0RpZENoYW5nZShGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwpAQCAtMjc0LDcgKzMxOSw3IEBAIEdyYXBoaWNzTGF5ZXIqIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpjb24KICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgaWYgKGF1dG8q
IHJlbmRlclZpZXcgPSBmcmFtZVZpZXcuZnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAg
ICAgcmV0dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5sYXllckZvckNvbnRlbnRTaGFkb3co
KTsKLSAgICAKKwogICAgIHJldHVybiBudWxscHRyOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZnJhbWVWaWV3KTsKQEAgLTI4OSwxOCArMzM0LDYgQEAgR3JhcGhpY3NMYXllciogU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnJvbwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3JiBmcmFt
ZVZpZXcpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9wYWdl
KTsKLQotICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChmcmFtZVZp
ZXcpOwotICAgIHVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyhmcmFtZVZpZXcpOwot
fQotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiB7CkBAIC0z
NzksNyArNDEyLDcgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2hvdWxkVXBkYXRlUwog
ewogICAgIGlmICgmZnJhbWVWaWV3ID09IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQogICAg
ICAgICByZXR1cm4gc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKGZyYW1lVmlldyk7Ci0gICAg
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg5LDExICs0MjIsNiBAQCBTY3JvbGxpbmdO
b2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVuCiAgICAgcmV0dXJuIHVuaXF1ZVNjcm9sbGlu
Z05vZGVJRCsrOwogfQogCi1TdHJpbmcgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0
YXRlVHJlZUFzVGV4dChTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvcikgY29uc3QKLXsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KIFN0cmluZyBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zQXNUZXh0KFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVh
c29ucyByZWFzb25zKQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKQEAgLTQy
Miw2ICs0NTAsNjg4IEBAIFN0cmluZyBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3luY2hyb25vdXMK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Ondp
bGxDb21taXRUcmVlKCkKK3sKKyAgICB1cGRhdGVFdmVudFRyYWNraW5nUmVnaW9ucygpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVFdmVudFRyYWNraW5nUmVnaW9ucygp
Cit7CisgICAgaWYgKCFtX2V2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUo
KS0+c2V0RXZlbnRUcmFja2luZ1JlZ2lvbnMoYWJzb2x1dGVFdmVudFRyYWNraW5nUmVnaW9ucygp
KTsKKyAgICBtX2V2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcmIGZy
YW1lVmlldykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3Bh
Z2UpOworCisgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYSByb290IG5vZGUgeWV0LCBkb24ndCBkbyBh
bnl0aGluZy4gV2UnbGwgYmUgY2FsbGVkIGFnYWluIGFmdGVyIGNyZWF0aW5nIG9uZS4KKyAgICBp
ZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNldEV2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkoKTsKKyAgICBpZiAoIWNvb3Jk
aW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8qIG5vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9ySUQo
ZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICBpZiAoIW5vZGUgfHwgIWlzPFNjcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPigqbm9kZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8mIGZyYW1lU2Nyb2xsaW5nTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlPigqbm9kZSk7CisKKyAgICBhdXRvKiB2ZXJ0aWNhbFNjcm9sbGJhciA9
IGZyYW1lVmlldy52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8qIGhvcml6b250YWxTY3Jv
bGxiYXIgPSBmcmFtZVZpZXcuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGZyYW1lU2Nyb2xs
aW5nTm9kZS5zZXRTY3JvbGxlckltcHNGcm9tU2Nyb2xsYmFycyh2ZXJ0aWNhbFNjcm9sbGJhciwg
aG9yaXpvbnRhbFNjcm9sbGJhcik7CisKKyAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0RnJhbWVT
Y2FsZUZhY3RvcihmcmFtZVZpZXcuZnJhbWUoKS5mcmFtZVNjYWxlRmFjdG9yKCkpOworICAgIGZy
YW1lU2Nyb2xsaW5nTm9kZS5zZXRIZWFkZXJIZWlnaHQoZnJhbWVWaWV3LmhlYWRlckhlaWdodCgp
KTsKKyAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0Rm9vdGVySGVpZ2h0KGZyYW1lVmlldy5mb290
ZXJIZWlnaHQoKSk7CisgICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldFRvcENvbnRlbnRJbnNldChm
cmFtZVZpZXcudG9wQ29udGVudEluc2V0KCkpOworCisgICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNl
dFZpc3VhbFZpZXdwb3J0RW5hYmxlZCh2aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSk7CisgICAgZnJh
bWVTY3JvbGxpbmdOb2RlLnNldExheW91dFZpZXdwb3J0KGZyYW1lVmlldy5sYXlvdXRWaWV3cG9y
dFJlY3QoKSk7CisgICAgZnJhbWVTY3JvbGxpbmdOb2RlLnNldEFzeW5jRnJhbWVPck92ZXJmbG93
U2Nyb2xsaW5nRW5hYmxlZChhc3luY0ZyYW1lT3JPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSk7
CisKKyAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0TWluTGF5b3V0Vmlld3BvcnRPcmlnaW4oZnJh
bWVWaWV3Lm1pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luKCkpOworICAgIGZyYW1lU2Nyb2xs
aW5nTm9kZS5zZXRNYXhMYXlvdXRWaWV3cG9ydE9yaWdpbihmcmFtZVZpZXcubWF4U3RhYmxlTGF5
b3V0Vmlld3BvcnRPcmlnaW4oKSk7CisKKyAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0U2Nyb2xs
T3JpZ2luKGZyYW1lVmlldy5zY3JvbGxPcmlnaW4oKSk7CisgICAgZnJhbWVTY3JvbGxpbmdOb2Rl
LnNldFNjcm9sbGFibGVBcmVhU2l6ZShmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6
ZSgpKTsKKyAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0VG90YWxDb250ZW50c1NpemUoZnJhbWVW
aWV3LnRvdGFsQ29udGVudHNTaXplKCkpOworICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRSZWFj
aGFibGVDb250ZW50c1NpemUoZnJhbWVWaWV3LnRvdGFsQ29udGVudHNTaXplKCkpOworICAgIGZy
YW1lU2Nyb2xsaW5nTm9kZS5zZXRGaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKGZy
YW1lVmlldy5maXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCkpOworICAgIGZyYW1l
U2Nyb2xsaW5nTm9kZS5zZXRTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoZnJhbWVWaWV3
LnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpKTsKKworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAgdXBkYXRl
U2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGZyYW1lVmlldyk7CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGF1dG8qIHBhZ2UgPSBmcmFtZVZpZXcuZnJhbWUoKS5w
YWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2Vycygp
KSB7CisgICAgICAgIExPRyhXaGVlbEV2ZW50VGVzdFRyaWdnZXJzLCAiICAgIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkOiBFeHBlY3RzIHdoZWVsIGV2ZW50IHRl
c3QgdHJpZ2dlcj0lZCIsIHBhZ2UtPmV4cGVjdHNXaGVlbEV2ZW50VHJpZ2dlcnMoKSk7CisgICAg
ICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRFeHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBh
Z2UtPmV4cGVjdHNXaGVlbEV2ZW50VHJpZ2dlcnMoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBT
Y3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMgc2Nyb2xsUGFyYW1ldGVyczsKKyAgICBzY3JvbGxQYXJh
bWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3Lmhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkgPSBmcmFtZVZpZXcudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7CisgICAgc2Ny
b2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGhvcml6b250YWxT
Y3JvbGxiYXIgJiYgaG9yaXpvbnRhbFNjcm9sbGJhci0+ZW5hYmxlZCgpOworICAgIHNjcm9sbFBh
cmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIg
JiYgdmVydGljYWxTY3JvbGxiYXItPmVuYWJsZWQoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhv
cml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3Lmhvcml6b250YWxTY3JvbGxiYXJNb2Rl
KCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZp
ZXcudmVydGljYWxTY3JvbGxiYXJNb2RlKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy51c2VEYXJr
QXBwZWFyYW5jZUZvclNjcm9sbGJhcnMgPSBmcmFtZVZpZXcudXNlRGFya0FwcGVhcmFuY2VGb3JT
Y3JvbGxiYXJzKCk7CisKKyAgICBmcmFtZVNjcm9sbGluZ05vZGUuc2V0U2Nyb2xsYWJsZUFyZWFQ
YXJhbWV0ZXJzKHNjcm9sbFBhcmFtZXRlcnMpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjp1cGRhdGVFeHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyV2l0aEZyYW1lVmlldyhjb25z
dCBGcmFtZVZpZXcmIGZyYW1lVmlldykKK3sKKyAgICBhdXRvKiBwYWdlID0gZnJhbWVWaWV3LmZy
YW1lKCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogbm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihtX3Nj
cm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJ
RCgpKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBub2RlLT5zZXRF
eHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2UtPmV4cGVjdHNXaGVlbEV2ZW50VHJpZ2dl
cnMoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0V2ZW50VHJh
Y2tpbmdSZWdpb25zQ2hhbmdlZChGcmFtZVZpZXcmIGZyYW1lVmlldykKK3sKKyAgICBpZiAoIW1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNldEV2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkoKTsKKyAgICBEZWJ1Z1BhZ2VPdmVybGF5
czo6ZGlkQ2hhbmdlRXZlbnRIYW5kbGVycyhmcmFtZVZpZXcuZnJhbWUoKSk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZp
ZXcmIGZyYW1lVmlldykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VChtX3BhZ2UpOworCisgICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhm
cmFtZVZpZXcpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogSW4gc29tZSBuYXZp
Z2F0aW9uIHNjZW5hcmlvcywgdGhlIEZyYW1lVmlldyBoYXMgbm8gUmVuZGVyVmlldyBvciB0aGF0
IFJlbmRlclZpZXcgaGFzIG5vdCBiZWVuIGNvbXBvc2l0ZWQuCisgICAgLy8gVGhpcyBuZWVkcyBj
bGVhbmluZyB1cDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjcy
NAorICAgIGlmICghZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBJZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Nyb2xsaW5nU3Rh
dGVOb2RlLCB0aGVuIHdlIHNob3VsZCBjcmVhdGUgb25lLgorICAgIGVuc3VyZVJvb3RTdGF0ZU5v
ZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy5zY3JvbGxpbmdOb2RlSUQoKSkpOworCisgICAg
ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChmcmFtZVZpZXcpOworICAgIHVwZGF0ZVN5bmNocm9ub3Vz
U2Nyb2xsaW5nUmVhc29ucyhmcmFtZVZpZXcpOworCisgICAgYXV0byogbm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSk7CisgICAgbm9kZS0+
c2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmll
dykpOworICAgIG5vZGUtPnNldFJvb3RDb250ZW50c0xheWVyKHJvb3RDb250ZW50c0xheWVyRm9y
RnJhbWVWaWV3KGZyYW1lVmlldykpOworICAgIG5vZGUtPnNldENvdW50ZXJTY3JvbGxpbmdMYXll
cihjb3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7CisgICAgbm9k
ZS0+c2V0SW5zZXRDbGlwTGF5ZXIoaW5zZXRDbGlwTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSk7CisgICAgbm9kZS0+c2V0Q29udGVudFNoYWRvd0xheWVyKGNvbnRlbnRTaGFkb3dMYXllckZv
ckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKKyAgICBub2RlLT5zZXRIZWFkZXJMYXllcihoZWFkZXJM
YXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKKyAgICBub2RlLT5zZXRGb290ZXJMYXllcihm
b290ZXJMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKKyAgICBub2RlLT5zZXRTY3JvbGxC
ZWhhdmlvckZvckZpeGVkRWxlbWVudHMoZnJhbWVWaWV3LnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRF
bGVtZW50cygpKTsKKyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhckxheWVyKGZyYW1lVmll
dy5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIG5vZGUtPnNldEhvcml6b250YWxT
Y3JvbGxiYXJMYXllcihmcmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOwor
fQorCitib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoRnJhbWVWaWV3JiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3BhZ2UpOworCisg
ICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlzUHJvZ3JhbW1hdGljU2Nyb2xsID0gZnJh
bWVWaWV3LmluUHJvZ3JhbW1hdGljU2Nyb2xsKCk7CisgICAgaWYgKGlzUHJvZ3JhbW1hdGljU2Ny
b2xsIHx8IGZyYW1lVmlldy5mcmFtZSgpLmRvY3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgIT0g
RG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQorICAgICAgICB1cGRhdGVTY3JvbGxQb3NpdGlvbkFm
dGVyQXN5bmNTY3JvbGwoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpLCBzY3JvbGxQb3NpdGlv
biwgV1RGOjpudWxsb3B0LCBpc1Byb2dyYW1tYXRpY1Njcm9sbCwgU2Nyb2xsaW5nTGF5ZXJQb3Np
dGlvbkFjdGlvbjo6U2V0KTsKKworICAgIC8vIElmIHRoaXMgZnJhbWUgdmlldydzIGRvY3VtZW50
IGlzIGJlaW5nIHB1dCBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0
ZSBvdXIKKyAgICAvLyBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZy
YW1lVmlldyB0aGluayB0aGF0IHdlIGRpZC4KKyAgICBpZiAoZnJhbWVWaWV3LmZyYW1lKCkuZG9j
dW1lbnQoKS0+cGFnZUNhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byogc3RhdGVOb2RlID0gZG93bmNhc3Q8U2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPihtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSk7CisgICAgaWYgKCFzdGF0ZU5vZGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGlzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVVcGRh
dGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwg
Y29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IE9wdGlvbmFsPEZsb2F0UG9p
bnQ+JiBsYXlvdXRWaWV3cG9ydE9yaWdpbiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwsIFNjcm9s
bGluZ0xheWVyUG9zaXRpb25BY3Rpb24gc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbikKK3sK
KyAgICBTY2hlZHVsZWRTY3JvbGxVcGRhdGUgc2Nyb2xsVXBkYXRlIHsgbm9kZUlELCBzY3JvbGxQ
b3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmlnaW4sIHByb2dyYW1tYXRpY1Njcm9sbCwgc2Nyb2xs
aW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiB9OworCisgICAgLy8gRm9yIHByb2dyYW1tYXRpYyBzY3Jv
bGxzLCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQgdXBk
YXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKCkuCisgICAgaWYgKHByb2dyYW1tYXRp
Y1Njcm9sbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fdXBkYXRlTm9kZVNjcm9sbFBv
c2l0aW9uVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAobV9zY2hlZHVsZWRTY3JvbGxV
cGRhdGUubWF0Y2hlc1VwZGF0ZVR5cGUoc2Nyb2xsVXBkYXRlKSkgeworICAgICAgICAgICAgbV9z
Y2hlZHVsZWRTY3JvbGxVcGRhdGUuc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKyAg
ICAgICAgICAgIG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRlLmxheW91dFZpZXdwb3J0T3JpZ2luID0g
bGF5b3V0Vmlld3BvcnRPcmlnaW47CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVycyBkb24ndCBtYXRjaCB3aGF0IHdhcyBwcmV2aW91
c2x5IHNjaGVkdWxlZCwgZGlzcGF0Y2ggaW1tZWRpYXRlbHkuCisgICAgICAgIG1fdXBkYXRlTm9k
ZVNjcm9sbFBvc2l0aW9uVGltZXIuc3RvcCgpOworICAgICAgICB1cGRhdGVTY3JvbGxQb3NpdGlv
bkFmdGVyQXN5bmNTY3JvbGwobV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUubm9kZUlELCBtX3NjaGVk
dWxlZFNjcm9sbFVwZGF0ZS5zY3JvbGxQb3NpdGlvbiwgbV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUu
bGF5b3V0Vmlld3BvcnRPcmlnaW4sIG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRlLmlzUHJvZ3JhbW1h
dGljU2Nyb2xsLCBtX3NjaGVkdWxlZFNjcm9sbFVwZGF0ZS51cGRhdGVMYXllclBvc2l0aW9uQWN0
aW9uKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKG5vZGVJ
RCwgc2Nyb2xsUG9zaXRpb24sIGxheW91dFZpZXdwb3J0T3JpZ2luLCBwcm9ncmFtbWF0aWNTY3Jv
bGwsIHNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9zY2hlZHVsZWRTY3JvbGxVcGRhdGUgPSBzY3JvbGxVcGRhdGU7CisgICAgbV91
cGRhdGVOb2RlU2Nyb2xsUG9zaXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Ny
b2xsVGltZXJGaXJlZCgpCit7CisgICAgdXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Ny
b2xsKG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRlLm5vZGVJRCwgbV9zY2hlZHVsZWRTY3JvbGxVcGRh
dGUuc2Nyb2xsUG9zaXRpb24sIG1fc2NoZWR1bGVkU2Nyb2xsVXBkYXRlLmxheW91dFZpZXdwb3J0
T3JpZ2luLCBtX3NjaGVkdWxlZFNjcm9sbFVwZGF0ZS5pc1Byb2dyYW1tYXRpY1Njcm9sbCwgbV9z
Y2hlZHVsZWRTY3JvbGxVcGRhdGUudXBkYXRlTGF5ZXJQb3NpdGlvbkFjdGlvbik7Cit9CisKK0Zy
YW1lVmlldyogU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0ZvclNjcm9sbGluZ05vZGUo
U2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKHNjcm9sbGluZ05vZGVJRCA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT5zY3JvbGxpbmdOb2RlSUQoKSkKKyAgICAgICAgcmV0dXJuIG1fcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpOworCisgICAgYXV0byogc3RhdGVOb2RlID0gbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKHNjcm9sbGluZ05vZGVJRCk7CisgICAgaWYgKCFzdGF0
ZU5vZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gRmluZCB0aGUgZW5jbG9z
aW5nIGZyYW1lIHNjcm9sbGluZyBub2RlLgorICAgIGF1dG8qIHBhcmVudE5vZGUgPSBzdGF0ZU5v
ZGU7CisgICAgd2hpbGUgKHBhcmVudE5vZGUgJiYgIXBhcmVudE5vZGUtPmlzRnJhbWVTY3JvbGxp
bmdOb2RlKCkpCisgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLT5wYXJlbnQoKTsKKwor
ICAgIGlmICghcGFyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBX
YWxrIHRoZSBmcmFtZSB0cmVlIHRvIGZpbmQgdGhlIG1hdGNoaW5nIEZyYW1lVmlldy4gVGhpcyBp
cyBub3QgaWRlYWwsIGJ1dCBhdm9pZHMgYmFjayBwb2ludGVycyB0byBGcmFtZVZpZXdzCisgICAg
Ly8gZnJvbSBTY3JvbGxpbmdUcmVlU3RhdGVOb2Rlcy4KKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChhdXRvKiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgewor
ICAgICAgICAgICAgaWYgKHZpZXctPnNjcm9sbGluZ05vZGVJRCgpID09IHBhcmVudE5vZGUtPnNj
cm9sbGluZ05vZGVJRCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB2aWV3OworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbChTY3JvbGxpbmdOb2Rl
SUQgc2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgT3B0
aW9uYWw8RmxvYXRQb2ludD4gbGF5b3V0Vmlld3BvcnRPcmlnaW4sIGJvb2wgcHJvZ3JhbW1hdGlj
U2Nyb2xsLCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIHNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9w
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBmcmFtZVZpZXdQdHIgPSBmcmFtZVZp
ZXdGb3JTY3JvbGxpbmdOb2RlKHNjcm9sbGluZ05vZGVJRCk7CisgICAgaWYgKCFmcmFtZVZpZXdQ
dHIpCisgICAgICAgIHJldHVybjsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0
cmVhbSA8PCAiU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJB
c3luY1Njcm9sbCBub2RlICIgPDwgc2Nyb2xsaW5nTm9kZUlEIDw8ICIgc2Nyb2xsUG9zaXRpb24g
IiA8PCBzY3JvbGxQb3NpdGlvbiA8PCAiIGFjdGlvbiAiIDw8IHNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24pOworCisgICAgYXV0byYgZnJhbWVWaWV3ID0gKmZyYW1lVmlld1B0cjsKKworICAg
IGlmIChzY3JvbGxpbmdOb2RlSUQgPT0gZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSB7Cisg
ICAgICAgIHJlY29uY2lsZVNjcm9sbGluZ1N0YXRlKGZyYW1lVmlldywgc2Nyb2xsUG9zaXRpb24s
IGxheW91dFZpZXdwb3J0T3JpZ2luLCBwcm9ncmFtbWF0aWNTY3JvbGwsIFZpZXdwb3J0UmVjdFN0
YWJpbGl0eTo6U3RhYmxlLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKTsKKworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgICAgICBpZiAobV9wYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdn
ZXJzKCkpIHsKKyAgICAgICAgICAgIGZyYW1lVmlldy5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcihtX3BhZ2UtPnRlc3RUcmlnZ2VyKCkpOworICAgICAgICAgICAgaWYg
KGNvbnN0IGF1dG8mIHRyaWdnZXIgPSBtX3BhZ2UtPnRlc3RUcmlnZ2VyKCkpCisgICAgICAgICAg
ICAgICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nh
c3Q8V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHNjcm9s
bGluZ05vZGVJRCksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhyZWFkU3luY05l
ZWRlZCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBPdmVyZmxvdy1zY3JvbGwgYXJlYS4KKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEg
PSBmcmFtZVZpZXcuc2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxMYXllcklEKHNjcm9sbGluZ05vZGVJ
RCkpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldElzVXNlclNjcm9sbChzY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uID09IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMp
OworICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldElzVXNlclNjcm9s
bChmYWxzZSk7CisgICAgICAgIGlmIChzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uID09IFNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCkKKyAgICAgICAgICAgIG1fcGFnZS0+ZWRp
dG9yQ2xpZW50KCkub3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgICAgICBpZiAobV9wYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJz
KCkpIHsKKyAgICAgICAgICAgIGZyYW1lVmlldy5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcihtX3BhZ2UtPnRlc3RUcmlnZ2VyKCkpOworICAgICAgICAgICAgaWYgKGNv
bnN0IGF1dG8mIHRyaWdnZXIgPSBtX3BhZ2UtPnRlc3RUcmlnZ2VyKCkpCisgICAgICAgICAgICAg
ICAgdHJpZ2dlci0+cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHNjcm9sbGlu
Z05vZGVJRCksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhyZWFkU3luY05lZWRl
ZCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6cmVjb25jaWxlU2Nyb2xsaW5nU3RhdGUoRnJhbWVWaWV3JiBmcmFtZVZpZXcsIGNvbnN0
IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRWaWV3cG9ydE9yaWdpbk9y
T3ZlcnJpZGVSZWN0JiBsYXlvdXRWaWV3cG9ydE9yaWdpbk9yT3ZlcnJpZGVSZWN0LCBib29sIHBy
b2dyYW1tYXRpY1Njcm9sbCwgVmlld3BvcnRSZWN0U3RhYmlsaXR5IHZpZXdwb3J0UmVjdFN0YWJp
bGl0eSwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiBzY3JvbGxpbmdMYXllclBvc2l0aW9u
QWN0aW9uKQoreworICAgIGJvb2wgb2xkUHJvZ3JhbW1hdGljU2Nyb2xsID0gZnJhbWVWaWV3Lmlu
UHJvZ3JhbW1hdGljU2Nyb2xsKCk7CisgICAgZnJhbWVWaWV3LnNldEluUHJvZ3JhbW1hdGljU2Ny
b2xsKHByb2dyYW1tYXRpY1Njcm9sbCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5n
LCBzdHJlYW0gPDwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpIDw8ICIgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IgIiA8PCB0aGlzIDw8ICIgcmVjb25jaWxlU2Nyb2xsaW5nU3RhdGUgc2Nyb2xsUG9zaXRpb24g
IiA8PCBzY3JvbGxQb3NpdGlvbiA8PCAiIHByb2dyYW1tYXRpY1Njcm9sbCAiIDw8IHByb2dyYW1t
YXRpY1Njcm9sbCA8PCAiIHN0YWJpbGl0eSAiIDw8IHZpZXdwb3J0UmVjdFN0YWJpbGl0eSA8PCAi
ICIgPDwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7CisKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxheW91dFZpZXdwb3J0UmVjdDsKKworICAgIFdURjo6c3dpdGNoT24obGF5b3V0Vmll
d3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCwKKyAgICAgICAgWyZmcmFtZVZpZXddKE9wdGlvbmFs
PEZsb2F0UG9pbnQ+IG9yaWdpbikgeworICAgICAgICAgICAgaWYgKG9yaWdpbikKKyAgICAgICAg
ICAgICAgICBmcmFtZVZpZXcuc2V0QmFzZUxheW91dFZpZXdwb3J0T3JpZ2luKExheW91dFBvaW50
KG9yaWdpbi52YWx1ZSgpKSwgRnJhbWVWaWV3OjpUcmlnZ2VyTGF5b3V0T3JOb3Q6Ok5vKTsKKyAg
ICAgICAgfSwgWyZmcmFtZVZpZXcsICZsYXlvdXRWaWV3cG9ydFJlY3QsIHZpZXdwb3J0UmVjdFN0
YWJpbGl0eSwgdmlzdWFsVmlld3BvcnRFbmFibGVkID0gdmlzdWFsVmlld3BvcnRFbmFibGVkKCld
KE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVSZWN0KSB7CisgICAgICAgICAgICBpZiAoIW92
ZXJyaWRlUmVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxheW91
dFZpZXdwb3J0UmVjdCA9IG92ZXJyaWRlUmVjdDsKKyAgICAgICAgICAgIGlmICh2aXN1YWxWaWV3
cG9ydEVuYWJsZWQgJiYgdmlld3BvcnRSZWN0U3RhYmlsaXR5ICE9IFZpZXdwb3J0UmVjdFN0YWJp
bGl0eTo6Q2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpCisgICAgICAgICAgICAg
ICAgZnJhbWVWaWV3LnNldExheW91dFZpZXdwb3J0T3ZlcnJpZGVSZWN0KExheW91dFJlY3Qob3Zl
cnJpZGVSZWN0LnZhbHVlKCkpLCB2aWV3cG9ydFJlY3RTdGFiaWxpdHkgPT0gVmlld3BvcnRSZWN0
U3RhYmlsaXR5OjpTdGFibGUgPyBGcmFtZVZpZXc6OlRyaWdnZXJMYXlvdXRPck5vdDo6WWVzIDog
RnJhbWVWaWV3OjpUcmlnZ2VyTGF5b3V0T3JOb3Q6Ok5vKTsKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICAgICAgZWxzZSBpZiAodmlld3BvcnRSZWN0U3RhYmlsaXR5ID09IFZpZXdw
b3J0UmVjdFN0YWJpbGl0eTo6U3RhYmxlKQorICAgICAgICAgICAgICAgIGZyYW1lVmlldy5zZXRD
dXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdChlbmNsb3NpbmdJbnRSZWN0KG92ZXJyaWRlUmVj
dC52YWx1ZSgpKSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICk7CisKKyAgICBmcmFtZVZpZXcu
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOworICAgIGZyYW1lVmll
dy5ub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQocm91bmRlZEludFBvaW50KHNjcm9sbFBvc2l0
aW9uKSk7CisgICAgZnJhbWVWaWV3LnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KHRydWUpOworICAgIGZyYW1lVmlldy5zZXRJblByb2dyYW1tYXRpY1Njcm9sbChvbGRQcm9ncmFt
bWF0aWNTY3JvbGwpOworCisgICAgaWYgKCFwcm9ncmFtbWF0aWNTY3JvbGwgJiYgc2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbiAhPSBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQp
IHsKKyAgICAgICAgYXV0byBzY3JvbGxpbmdOb2RlSUQgPSBmcmFtZVZpZXcuc2Nyb2xsaW5nTm9k
ZUlEKCk7CisgICAgICAgIGlmICh2aWV3cG9ydFJlY3RTdGFiaWxpdHkgPT0gVmlld3BvcnRSZWN0
U3RhYmlsaXR5OjpTdGFibGUpCisgICAgICAgICAgICByZWNvbmNpbGVWaWV3cG9ydENvbnN0cmFp
bmVkTGF5ZXJQb3NpdGlvbnMoc2Nyb2xsaW5nTm9kZUlELCBmcmFtZVZpZXcucmVjdEZvckZpeGVk
UG9zaXRpb25MYXlvdXQoKSwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7CisgICAgICAg
IGVsc2UgaWYgKGxheW91dFZpZXdwb3J0UmVjdCkKKyAgICAgICAgICAgIHJlY29uY2lsZVZpZXdw
b3J0Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhzY3JvbGxpbmdOb2RlSUQsIExheW91dFJlY3Qo
bGF5b3V0Vmlld3BvcnRSZWN0LnZhbHVlKCkpLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9u
KTsKKyAgICB9CisKKyAgICBhdXRvKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJhbWVW
aWV3KGZyYW1lVmlldyk7CisgICAgaWYgKCFzY3JvbGxMYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byogY291bnRlclNjcm9sbGluZ0xheWVyID0gY291bnRlclNjcm9sbGluZ0xheWVy
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgYXV0byogaW5zZXRDbGlwTGF5ZXIgPSBpbnNl
dENsaXBMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGF1dG8qIGNvbnRlbnRTaGFk
b3dMYXllciA9IGNvbnRlbnRTaGFkb3dMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAg
IGF1dG8qIHJvb3RDb250ZW50c0xheWVyID0gcm9vdENvbnRlbnRzTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KTsKKyAgICBhdXRvKiBoZWFkZXJMYXllciA9IGhlYWRlckxheWVyRm9yRnJhbWVW
aWV3KGZyYW1lVmlldyk7CisgICAgYXV0byogZm9vdGVyTGF5ZXIgPSBmb290ZXJMYXllckZvckZy
YW1lVmlldyhmcmFtZVZpZXcpOworCisgICAgQVNTRVJUKGZyYW1lVmlldy5zY3JvbGxQb3NpdGlv
bigpID09IHJvdW5kZWRJbnRQb2ludChzY3JvbGxQb3NpdGlvbikpOworICAgIExheW91dFBvaW50
IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWQgPSBmcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb25Gb3JGaXhl
ZFBvc2l0aW9uKCk7CisgICAgZmxvYXQgdG9wQ29udGVudEluc2V0ID0gZnJhbWVWaWV3LnRvcENv
bnRlbnRJbnNldCgpOworCisgICAgRmxvYXRQb2ludCBwb3NpdGlvbkZvckluc2V0Q2xpcExheWVy
OworICAgIGlmIChpbnNldENsaXBMYXllcikKKyAgICAgICAgcG9zaXRpb25Gb3JJbnNldENsaXBM
YXllciA9IEZsb2F0UG9pbnQoaW5zZXRDbGlwTGF5ZXItPnBvc2l0aW9uKCkueCgpLCBGcmFtZVZp
ZXc6OnlQb3NpdGlvbkZvckluc2V0Q2xpcExheWVyKHNjcm9sbFBvc2l0aW9uLCB0b3BDb250ZW50
SW5zZXQpKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uRm9yQ29udGVudHNMYXllciA9IGZyYW1l
Vmlldy5wb3NpdGlvbkZvclJvb3RDb250ZW50TGF5ZXIoKTsKKworICAgIEZsb2F0UG9pbnQgcG9z
aXRpb25Gb3JIZWFkZXJMYXllciA9IEZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZC54
KCksIEZyYW1lVmlldzo6eVBvc2l0aW9uRm9ySGVhZGVyTGF5ZXIoc2Nyb2xsUG9zaXRpb24sIHRv
cENvbnRlbnRJbnNldCkpOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb25Gb3JGb290ZXJMYXllciA9
IEZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZC54KCksCisgICAgICAgIEZyYW1lVmll
dzo6eVBvc2l0aW9uRm9yRm9vdGVyTGF5ZXIoc2Nyb2xsUG9zaXRpb24sIHRvcENvbnRlbnRJbnNl
dCwgZnJhbWVWaWV3LnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCksIGZyYW1lVmlldy5mb290
ZXJIZWlnaHQoKSkpOworCisgICAgaWYgKHByb2dyYW1tYXRpY1Njcm9sbCB8fCBzY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uID09IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCkg
eworICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy5zY3JvbGxQb3Np
dGlvbigpKTsKKyAgICAgICAgaWYgKGNvdW50ZXJTY3JvbGxpbmdMYXllcikKKyAgICAgICAgICAg
IGNvdW50ZXJTY3JvbGxpbmdMYXllci0+c2V0UG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gb3JGaXhl
ZCk7CisgICAgICAgIGlmIChpbnNldENsaXBMYXllcikKKyAgICAgICAgICAgIGluc2V0Q2xpcExh
eWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbkZvckluc2V0Q2xpcExheWVyKTsKKyAgICAgICAgaWYg
KGNvbnRlbnRTaGFkb3dMYXllcikKKyAgICAgICAgICAgIGNvbnRlbnRTaGFkb3dMYXllci0+c2V0
UG9zaXRpb24ocG9zaXRpb25Gb3JDb250ZW50c0xheWVyKTsKKyAgICAgICAgaWYgKHJvb3RDb250
ZW50c0xheWVyKQorICAgICAgICAgICAgcm9vdENvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKHBv
c2l0aW9uRm9yQ29udGVudHNMYXllcik7CisgICAgICAgIGlmIChoZWFkZXJMYXllcikKKyAgICAg
ICAgICAgIGhlYWRlckxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbkZvckhlYWRlckxheWVyKTsK
KyAgICAgICAgaWYgKGZvb3RlckxheWVyKQorICAgICAgICAgICAgZm9vdGVyTGF5ZXItPnNldFBv
c2l0aW9uKHBvc2l0aW9uRm9yRm9vdGVyTGF5ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNj
cm9sbExheWVyLT5zeW5jUG9zaXRpb24oLWZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigpKTsKKyAg
ICAgICAgaWYgKGNvdW50ZXJTY3JvbGxpbmdMYXllcikKKyAgICAgICAgICAgIGNvdW50ZXJTY3Jv
bGxpbmdMYXllci0+c3luY1Bvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRm9yRml4ZWQpOworICAgICAg
ICBpZiAoaW5zZXRDbGlwTGF5ZXIpCisgICAgICAgICAgICBpbnNldENsaXBMYXllci0+c3luY1Bv
c2l0aW9uKHBvc2l0aW9uRm9ySW5zZXRDbGlwTGF5ZXIpOworICAgICAgICBpZiAoY29udGVudFNo
YWRvd0xheWVyKQorICAgICAgICAgICAgY29udGVudFNoYWRvd0xheWVyLT5zeW5jUG9zaXRpb24o
cG9zaXRpb25Gb3JDb250ZW50c0xheWVyKTsKKyAgICAgICAgaWYgKHJvb3RDb250ZW50c0xheWVy
KQorICAgICAgICAgICAgcm9vdENvbnRlbnRzTGF5ZXItPnN5bmNQb3NpdGlvbihwb3NpdGlvbkZv
ckNvbnRlbnRzTGF5ZXIpOworICAgICAgICBpZiAoaGVhZGVyTGF5ZXIpCisgICAgICAgICAgICBo
ZWFkZXJMYXllci0+c3luY1Bvc2l0aW9uKHBvc2l0aW9uRm9ySGVhZGVyTGF5ZXIpOworICAgICAg
ICBpZiAoZm9vdGVyTGF5ZXIpCisgICAgICAgICAgICBmb290ZXJMYXllci0+c3luY1Bvc2l0aW9u
KHBvc2l0aW9uRm9yRm9vdGVyTGF5ZXIpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAg
ICBhdXRvKiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKHNjcm9s
bGFibGVBcmVhLnNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICBpZiAoaXM8U2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU+KG5vZGUpKSB7CisgICAgICAgIGF1dG8mIHNjcm9sbGluZ05vZGUg
PSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKm5vZGUpOworICAg
ICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBz
Y3JvbGxpbmdOb2RlLnNldFZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoc2Nyb2xsYWJsZUFyZWEubGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Ny
b2xsaW5nTm9kZS5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoc2Nyb2xsYWJsZUFyZWEubGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworCisgICAgfQorCisgICAgaWYgKCZzY3JvbGxh
YmxlQXJlYSA9PSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKSkgeworICAgICAgICBpZiAob3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxhYmxlQXJl
YS52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgp
OworICAgIH0KK30KKworU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGVOb2RlKFNjcm9sbGluZ05vZGVUeXBlIG5vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQgbmV3Tm9k
ZUlEKQoreworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZU5vZGUgIiA8PCBub2RlVHlwZSA8PCAiIG5vZGUgIiA8PCBu
ZXdOb2RlSUQpOworICAgIHJldHVybiBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y3JlYXRlVW5wYXJl
bnRlZE5vZGUobm9kZVR5cGUsIG5ld05vZGVJRCk7Cit9CisKK1Njcm9sbGluZ05vZGVJRCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6aW5zZXJ0Tm9kZShTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwg
U2Nyb2xsaW5nTm9kZUlEIG5ld05vZGVJRCwgU2Nyb2xsaW5nTm9kZUlEIHBhcmVudElELCBzaXpl
X3QgY2hpbGRJbmRleCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0g
PDwgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjppbnNlcnROb2RlICIgPDwgbm9kZVR5cGUgPDwgIiBu
b2RlICIgPDwgbmV3Tm9kZUlEIDw8ICIgcGFyZW50ICIgPDwgcGFyZW50SUQgPDwgIiBpbmRleCAi
IDw8IGNoaWxkSW5kZXgpOworICAgIHJldHVybiBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aW5zZXJ0
Tm9kZShub2RlVHlwZSwgbmV3Tm9kZUlELCBwYXJlbnRJRCwgY2hpbGRJbmRleCk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVucGFyZW50Tm9kZShTY3JvbGxpbmdOb2RlSUQgbm9k
ZUlEKQoreworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT51bnBhcmVudE5vZGUobm9kZUlEKTsK
K30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dW5wYXJlbnRDaGlsZHJlbkFuZERlc3Ry
b3lOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnVucGFyZW50Q2hpbGRyZW5BbmREZXN0cm95Tm9kZShub2RlSUQpOworfQorCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hBbmREZXN0cm95U3VidHJlZShTY3JvbGxpbmdOb2Rl
SUQgbm9kZUlEKQoreworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5kZXRhY2hBbmREZXN0cm95
U3VidHJlZShub2RlSUQpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhckFs
bE5vZGVzKCkKK3sKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+Y2xlYXIoKTsKK30KKworU2Ny
b2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpwYXJlbnRPZk5vZGUoU2Nyb2xsaW5n
Tm9kZUlEIG5vZGVJRCkgY29uc3QKK3sKKyAgICBhdXRvKiBzY3JvbGxpbmdOb2RlID0gbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKG5vZGVJRCk7CisgICAgaWYgKCFzY3JvbGxp
bmdOb2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzY3JvbGxpbmdOb2RlLT5w
YXJlbnROb2RlSUQoKTsKK30KKworVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNoaWxkcmVuT2ZOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIGNvbnN0Cit7
CisgICAgYXV0byogc2Nyb2xsaW5nTm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5v
ZGVGb3JJRChub2RlSUQpOworICAgIGlmICghc2Nyb2xsaW5nTm9kZSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGF1dG8qIGNoaWxkcmVuID0gc2Nyb2xsaW5nTm9kZS0+Y2hpbGRyZW4oKTsK
KyAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBWZWN0b3I8U2Nyb2xsaW5nTm9kZUlEPiBjaGlsZE5vZGVJRHM7CisgICAg
Y2hpbGROb2RlSURzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hpbGRyZW4tPnNpemUoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZE5vZGUgOiAqY2hpbGRyZW4pCisgICAgICAgIGNoaWxk
Tm9kZUlEcy51bmNoZWNrZWRBcHBlbmQoY2hpbGROb2RlLT5zY3JvbGxpbmdOb2RlSUQoKSk7CisK
KyAgICByZXR1cm4gY2hpbGROb2RlSURzOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpyZWNvbmNpbGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJQb3NpdGlvbnMoU2Nyb2xsaW5nTm9k
ZUlEIHNjcm9sbGluZ05vZGVJRCwgY29uc3QgTGF5b3V0UmVjdCYgdmlld3BvcnRSZWN0LCBTY3Jv
bGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIGFjdGlvbikKK3sKKyAgICBhdXRvKiBzY3JvbGxpbmdO
b2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKHNjcm9sbGluZ05vZGVJ
RCk7CisgICAgaWYgKCFzY3JvbGxpbmdOb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpIDw8
ICIgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29uY2lsZVZpZXdwb3J0Q29uc3RyYWluZWRMYXll
clBvc2l0aW9ucyBmb3Igdmlld3BvcnQgcmVjdCAiIDw8IHZpZXdwb3J0UmVjdCA8PCAiIGFuZCBu
b2RlICIgPDwgc2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHNjcm9sbGluZ05vZGUtPnJlY29uY2ls
ZUxheWVyUG9zaXRpb25Gb3JWaWV3cG9ydFJlY3Qodmlld3BvcnRSZWN0LCBhY3Rpb24pOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyYgZnJhbWVWaWV3KQoreworICAgIEFTU0VSVChmcmFtZVZpZXcuc2Nyb2xs
aW5nTm9kZUlEKCkpOworICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9y
SUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRm9yIG5vbi1tYWluIGZyYW1lcywgaXQgaXMgb25seSBwb3NzaWJsZSB0byBhcnJpdmUgaW4g
dGhpcyBmdW5jdGlvbiBmcm9tCisgICAgLy8gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nIHdoZXJlIHRoZSBub2RlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KKyAgICBBU1NF
UlQoZnJhbWVWaWV3LmZyYW1lKCkuaXNNYWluRnJhbWUoKSk7CisgICAgaW5zZXJ0Tm9kZShTY3Jv
bGxpbmdOb2RlVHlwZTo6TWFpbkZyYW1lLCBmcmFtZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCksIDAs
IDApOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb2RlTGF5ZXJzKFNjcm9s
bGluZ05vZGVJRCBub2RlSUQsIGNvbnN0IE5vZGVMYXllcnMmIG5vZGVMYXllcnMpCit7CisgICAg
YXV0byogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJRChub2RlSUQp
OworICAgIEFTU0VSVChub2RlKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG5vZGUtPnNldExheWVyKG5vZGVMYXllcnMubGF5ZXIpOworCisgICAgaWYgKGlzPFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgc2Nyb2xsaW5n
Tm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oKm5vZGUpOworICAg
ICAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbENvbnRhaW5lckxheWVyKG5vZGVMYXllcnMuc2Ny
b2xsQ29udGFpbmVyTGF5ZXIpOworICAgICAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbGVkQ29u
dGVudHNMYXllcihub2RlTGF5ZXJzLnNjcm9sbGVkQ29udGVudHNMYXllcik7CisKKyAgICAgICAg
aWYgKGlzPFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihub2RlKSkgeworICAgICAg
ICAgICAgYXV0byYgZnJhbWVTY3JvbGxpbmdOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU+KCpub2RlKTsKKyAgICAgICAgICAgIGZyYW1lU2Nyb2xsaW5nTm9k
ZS5zZXRJbnNldENsaXBMYXllcihub2RlTGF5ZXJzLmluc2V0Q2xpcExheWVyKTsKKyAgICAgICAg
ICAgIGZyYW1lU2Nyb2xsaW5nTm9kZS5zZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXIobm9kZUxheWVy
cy5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIpOworICAgICAgICAgICAgZnJhbWVTY3JvbGxpbmdOb2Rl
LnNldFJvb3RDb250ZW50c0xheWVyKG5vZGVMYXllcnMucm9vdENvbnRlbnRzTGF5ZXIpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxp
bmdOb2RlR2VvbWV0cnkoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29uc3QgU2Nyb2xsaW5nR2Vv
bWV0cnkmIHNjcm9sbGluZ0dlb21ldHJ5KQoreworICAgIGF1dG8qIHN0YXRlTm9kZSA9IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJRChub2RlSUQpOworICAgIEFTU0VSVChzdGF0
ZU5vZGUpOworICAgIGlmICghc3RhdGVOb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
c3RhdGVOb2RlLT5ub2RlVHlwZSgpID09IFNjcm9sbGluZ05vZGVUeXBlOjpGcmFtZUhvc3Rpbmcp
IHsKKyAgICAgICAgYXV0byYgZnJhbWVIb3N0aW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xs
aW5nU3RhdGVGcmFtZUhvc3RpbmdOb2RlPigqc3RhdGVOb2RlKTsKKyAgICAgICAgZnJhbWVIb3N0
aW5nU3RhdGVOb2RlLnNldFBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3Qoc2Nyb2xsaW5nR2Vv
bWV0cnkucGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhdXRvJiBzY3JvbGxpbmdOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlPigqc3RhdGVOb2RlKTsKKworICAgIHNjcm9sbGluZ05vZGUuc2V0UGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChzY3JvbGxpbmdHZW9tZXRyeS5wYXJlbnRSZWxhdGl2ZVNj
cm9sbGFibGVSZWN0KTsKKyAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbE9yaWdpbihzY3JvbGxp
bmdHZW9tZXRyeS5zY3JvbGxPcmlnaW4pOworICAgIHNjcm9sbGluZ05vZGUuc2V0U2Nyb2xsUG9z
aXRpb24oc2Nyb2xsaW5nR2VvbWV0cnkuc2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9sbGluZ05v
ZGUuc2V0VG90YWxDb250ZW50c1NpemUoc2Nyb2xsaW5nR2VvbWV0cnkuY29udGVudFNpemUpOwor
ICAgIHNjcm9sbGluZ05vZGUuc2V0UmVhY2hhYmxlQ29udGVudHNTaXplKHNjcm9sbGluZ0dlb21l
dHJ5LnJlYWNoYWJsZUNvbnRlbnRTaXplKTsKKyAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbGFi
bGVBcmVhU2l6ZShzY3JvbGxpbmdHZW9tZXRyeS5zY3JvbGxhYmxlQXJlYVNpemUpOworCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyB1cGRhdGVTY3JvbGxTbmFwUHJvcGVydGll
c1dpdGhGcmFtZVZpZXcoKSBzZXRzIHRoZXNlIGZvciBmcmFtZSBzY3JvbGxpbmcgbm9kZXMuIEZJ
WE1FOiBXaHkgdGhlIGRpZmZlcmVuY2U/CisgICAgaWYgKGlzPFNjcm9sbGluZ1N0YXRlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlPihzY3JvbGxpbmdOb2RlKSkgeworICAgICAgICBzZXRTdGF0ZVNjcm9s
bGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoc2Nyb2xsaW5nTm9kZSwgU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsLCAmc2Nyb2xsaW5nR2VvbWV0cnkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCAm
c2Nyb2xsaW5nR2VvbWV0cnkuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMsIG1fcGFnZS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZz
ZXRzQXNGbG9hdChzY3JvbGxpbmdOb2RlLCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCAmc2Ny
b2xsaW5nR2VvbWV0cnkudmVydGljYWxTbmFwT2Zmc2V0cywgJnNjcm9sbGluZ0dlb21ldHJ5LnZl
cnRpY2FsU25hcE9mZnNldFJhbmdlcywgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICAgICAgc2Nyb2xsaW5nTm9kZS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHNj
cm9sbGluZ0dlb21ldHJ5LmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOworICAgICAg
ICBzY3JvbGxpbmdOb2RlLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9sbGlu
Z0dlb21ldHJ5LmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTsKKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Vmlld3BvcnRDb25zdHJhaW50ZWRO
b2RlR2VvbWV0cnkoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29uc3QgVmlld3BvcnRDb25zdHJh
aW50cyYgY29uc3RyYWludHMpCit7CisgICAgYXV0byogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5zdGF0ZU5vZGVGb3JJRChub2RlSUQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3dpdGNoIChjb25zdHJhaW50cy5jb25zdHJhaW50VHlwZSgpKSB7CisgICAg
Y2FzZSBWaWV3cG9ydENvbnN0cmFpbnRzOjpGaXhlZFBvc2l0aW9uQ29uc3RyYWludDogeworICAg
ICAgICBhdXRvJiBmaXhlZE5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZT4o
Km5vZGUpOworICAgICAgICBmaXhlZE5vZGUudXBkYXRlQ29uc3RyYWludHMoKGNvbnN0IEZpeGVk
UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJiljb25zdHJhaW50cyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFZpZXdwb3J0Q29uc3RyYWludHM6OlN0aWNreVBvc2l0aW9uQ29u
c3RyYWludDogeworICAgICAgICBhdXRvJiBzdGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5n
U3RhdGVTdGlja3lOb2RlPigqbm9kZSk7CisgICAgICAgIHN0aWNreU5vZGUudXBkYXRlQ29uc3Ry
YWludHMoKGNvbnN0IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyYpY29uc3RyYWlu
dHMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMoRnJhbWVWaWV3JiBmcmFt
ZVZpZXcsIFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyByZWFzb25zKQoreworICAgIGF1dG8q
IHNjcm9sbGluZ1N0YXRlTm9kZSA9IHN0YXRpY19jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlKj4obV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmll
dy5zY3JvbGxpbmdOb2RlSUQoKSkpOworICAgIGlmICghc2Nyb2xsaW5nU3RhdGVOb2RlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciBpcyBs
aWtlbHkgdG8gYmUgb3V0LW9mLXN5bmNoIHdpdGggdGhlIFBsYXRmb3JtTGF5ZXIKKyAgICAvLyBh
dCB0aGlzIHBvaW50LiBTbyB3ZSdsbCB1cGRhdGUgaXQgYmVmb3JlIHdlIHN3aXRjaCBiYWNrIHRv
IG1haW4gdGhyZWFkIHNjcm9sbGluZworICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGxheWVyIHBv
c2l0aW9uaW5nIGJ1Z3MuCisgICAgaWYgKHJlYXNvbnMpCisgICAgICAgIHVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb24oZnJhbWVWaWV3KTsKKyAgICBzY3JvbGxpbmdTdGF0ZU5vZGUtPnNldFN5bmNo
cm9ub3VzU2Nyb2xsaW5nUmVhc29ucyhyZWFzb25zKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6dXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbihGcmFtZVZpZXcmIGZyYW1lVmlldykK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChhdXRvKiBzY3JvbGxMYXll
ciA9IHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCisgICAgICAgIHNjcm9sbExh
eWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LnNjcm9sbFBvc2l0aW9uKCkpOworfQorCitib29s
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsaW5nVHJlZSgpLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihT
Y3JvbGxQaW5uaW5nQmVoYXZpb3IgcGlubmluZykKK3sKKyAgICBzY3JvbGxpbmdUcmVlKCktPnNl
dFNjcm9sbFBpbm5pbmdCZWhhdmlvcihwaW5uaW5nKTsKK30KKworYm9vbCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6dmlzdWFsVmlld3BvcnRFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YWdlLT5tYWluRnJhbWUoKS5zZXR0aW5ncygpLnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpOworfQor
Citib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphc3luY0ZyYW1lT3JPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSBjb25zdAoreworICAgIGF1dG8mIHNldHRpbmdzID0gbV9wYWdlLT5tYWluRnJh
bWUoKS5zZXR0aW5ncygpOworICAgIHJldHVybiBzZXR0aW5ncy5hc3luY0ZyYW1lU2Nyb2xsaW5n
RW5hYmxlZCgpIHx8IHNldHRpbmdzLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCk7Cit9
CisKK1N0cmluZyBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0
KFNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdAoreworICAg
IGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKSB7CisgICAgICAgIGlm
IChtX2V2ZW50VHJhY2tpbmdSZWdpb25zRGlydHkpCisgICAgICAgICAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRFdmVudFRyYWNraW5nUmVnaW9ucyhhYnNvbHV0
ZUV2ZW50VHJhY2tpbmdSZWdpb25zKCkpOworICAgICAgICByZXR1cm4gbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGJlaGF2aW9y
KTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKyNpZiBQTEFURk9STShDT0NP
QSkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2Vz
KFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWxJbmRl
eCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1l
VmlldyA9IGZyYW1lVmlld0ZvclNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nTm9kZUlEKTsKKyAgICBp
ZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNjcm9sbGluZ05vZGVJ
RCA9PSBmcmFtZVZpZXctPnNjcm9sbGluZ05vZGVJRCgpKSB7CisgICAgICAgIGZyYW1lVmlldy0+
c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChob3Jpem9udGFsSW5kZXgpOworICAg
ICAgICBmcmFtZVZpZXctPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHZlcnRpY2Fs
SW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3ZlcmZsb3ctc2Nyb2xs
IGFyZWEuCisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gZnJhbWVWaWV3LT5zY3JvbGxh
YmxlQXJlYUZvclNjcm9sbExheWVySUQoc2Nyb2xsaW5nTm9kZUlEKSkgeworICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChob3Jpem9udGFs
SW5kZXgpOworICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0Q3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgodmVydGljYWxJbmRleCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVm
ZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxFdmVudFRy
aWdnZXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb25zdCBhdXRvJiB0cmlnZ2Vy
ID0gbV9wYWdlLT50ZXN0VHJpZ2dlcigpKSB7CisgICAgICAgIExPRyhXaGVlbEV2ZW50VGVzdFRy
aWdnZXJzLCAiICAgICghKSBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGVmZXJUZXN0c0ZvclJlYXNv
bjogRGVmZXJyaW5nICVwIGZvciByZWFzb24gJWQuIiwgaWRlbnRpZmllciwgcmVhc29uKTsKKyAg
ICAgICAgdHJpZ2dlci0+ZGVmZXJUZXN0c0ZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOwor
ICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFs
Rm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNv
biByZWFzb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
IW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChjb25zdCBhdXRvJiB0cmlnZ2VyID0gbV9wYWdlLT50ZXN0VHJp
Z2dlcigpKSB7CisgICAgICAgIExPRyhXaGVlbEV2ZW50VGVzdFRyaWdnZXJzLCAiICAgICghKSBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uOiBEZWZlcnJp
bmcgJXAgZm9yIHJlYXNvbiAlZC4iLCBpZGVudGlmaWVyLCByZWFzb24pOworICAgICAgICB0cmln
Z2VyLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oaWRlbnRpZmllciwgcmVhc29uKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitib29sIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2Nyb2xsaW5nVHJlZSgpLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZy
YW1lVmlldyhjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykKK3sKKyAgICBpZiAoYXV0byBub2Rl
ID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+KG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJRChmcmFtZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCkpKSkg
eworICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUs
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgZnJhbWVWaWV3Lmhvcml6b250YWxTbmFwT2Zm
c2V0cygpLCBmcmFtZVZpZXcuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSwgbV9wYWdlLT5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9m
ZnNldHNBc0Zsb2F0KCpub2RlLCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBmcmFtZVZpZXcu
dmVydGljYWxTbmFwT2Zmc2V0cygpLCBmcmFtZVZpZXcudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2Vz
KCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIG5vZGUtPnNldEN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoZnJhbWVWaWV3LmN1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXgoKSk7CisgICAgICAgIG5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4KGZyYW1lVmlldy5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKKyAgICB9
Cit9CisjZW5kaWYKKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVwb3J0RXhwb3NlZFVu
ZmlsbGVkQXJlYShNb25vdG9uaWNUaW1lIHRpbWVzdGFtcCwgdW5zaWduZWQgdW5maWxsZWRBcmVh
KQoreworICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5wZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQo
KSkKKyAgICAgICAgbV9wYWdlLT5wZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQoKS0+bG9nU2Nyb2xs
aW5nRXZlbnQoUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50OjpTY3JvbGxpbmdFdmVudDo6RXhwb3Nl
ZFRpbGVsZXNzQXJlYSwgdGltZXN0YW1wLCB1bmZpbGxlZEFyZWEpOworfQorCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpyZXBvcnRTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnNDaGFuZ2Vk
KE1vbm90b25pY1RpbWUgdGltZXN0YW1wLCBTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMgcmVh
c29ucykKK3sKKyAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+cGVyZm9ybWFuY2VMb2dnaW5nQ2xp
ZW50KCkpCisgICAgICAgIG1fcGFnZS0+cGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50KCktPmxvZ1Nj
cm9sbGluZ0V2ZW50KFBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudDo6U2Nyb2xsaW5nRXZlbnQ6OlN3
aXRjaGVkU2Nyb2xsaW5nTW9kZSwgdGltZXN0YW1wLCByZWFzb25zKTsKK30KKwogVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIHNj
cm9sbGFibGVBcmVhUGFyYW1ldGVycykKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoImhvcml6b250
YWwgc2Nyb2xsIGVsYXN0aWNpdHkiLCBzY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMuaG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkpOwpAQCAtNDk0LDMgKzEyMDQsNSBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBWCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9u
IDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTkgKzM2LDE3IEBACiAjaW5jbHVkZSA8
d3RmL1R5cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKLSNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogI2luY2x1ZGUgIkF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVh
bTsKLX0KKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsMzYg
KzU1LDM1IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NM
YXllcjsKIGNsYXNzIFBhZ2U7Ci1jbGFzcyBSZWdpb247CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNs
YXNzIFNjcm9sbGFibGVBcmVhOworY2xhc3MgU2Nyb2xsYmFyOworY2xhc3MgU2Nyb2xsaW5nU3Rh
dGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOworY2xhc3MgU2Nyb2xs
aW5nU3RhdGVUcmVlOwogY2xhc3MgVmlld3BvcnRDb25zdHJhaW50czsKIAotI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCi1jbGFzcyBTY3JvbGxpbmdUcmVlOwotI2VuZGlmCi0KIGNsYXNzIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTY3JvbGxpbmdDb29yZGlu
YXRvcj4gY3JlYXRlKFBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRvcigp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwotICAgIAot
ICAgIHZpcnR1YWwgYm9vbCBpc0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJlZVN0
YXRlSWZOZWVkZWQoKSB7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGluZ0V2ZW50UmVzdWx0IGhhbmRs
ZVdoZWVsRXZlbnQoRnJhbWVWaWV3JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgeyByZXR1
cm4gU2Nyb2xsaW5nRXZlbnRSZXN1bHQ6OkRpZE5vdEhhbmRsZUV2ZW50OyB9CisKKyAgICBTY3Jv
bGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVl
LmdldCgpOyB9CisKICAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHNjcm9sbGluZyBjb29yZGlu
YXRvciBoYW5kbGVzIHNjcm9sbGluZyBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcuCiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3
KGNvbnN0IEZyYW1lVmlldyYpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBz
Y3JvbGxpbmcgY29vcmRpbmF0b3IgaGFuZGxlcyBzY3JvbGxpbmcgZm9yIHRoZSBnaXZlbiBvdmVy
ZmxvdyBzY3JvbGwgbGF5ZXIuCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIGNvb3Jk
aW5hdGVzU2Nyb2xsaW5nRm9yT3ZlcmZsb3dMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0
OwogCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmll
dyBoYXMgYmVlbiBsYWlkIG91dC4KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBk
YXRlZChGcmFtZVZpZXcmKSB7IH0KLQogICAgIHVzaW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JP
dmVycmlkZVJlY3QgPSBXVEY6OlZhcmlhbnQ8T3B0aW9uYWw8RmxvYXRQb2ludD4sIE9wdGlvbmFs
PEZsb2F0UmVjdD4+OwotICAgIHZpcnR1YWwgdm9pZCByZWNvbmNpbGVTY3JvbGxpbmdTdGF0ZShG
cmFtZVZpZXcmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgTGF5b3V0Vmlld3BvcnRPcmlnaW5P
ck92ZXJyaWRlUmVjdCYsIGJvb2wgLyogcHJvZ3JhbW1hdGljU2Nyb2xsICovLCBWaWV3cG9ydFJl
Y3RTdGFiaWxpdHksIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pIHsgfQogCiAgICAgLy8g
U2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2xvdyByZXBhaW50IG9iamVjdHMgY291bnRl
ciBjaGFuZ2VzIGJldHdlZW4gemVybyBhbmQgb25lLgogICAgIHZvaWQgZnJhbWVWaWV3SGFzU2xv
d1JlcGFpbnRPYmplY3RzRGlkQ2hhbmdlKEZyYW1lVmlldyYpOwpAQCAtOTQsMTIgKzkxLDYgQEAg
cHVibGljOgogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNldCBvZiBmaXhl
ZCBvYmplY3RzIGNoYW5nZXMuCiAgICAgdm9pZCBmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFu
Z2UoRnJhbWVWaWV3Jik7CiAKLSAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIG5vbi1mYXN0IHNj
cm9sbGFibGUgcmVnaW9uIGNoYW5nZXMgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiBsYXlvdXQuCi0g
ICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0V2ZW50VHJhY2tpbmdSZWdpb25zQ2hhbmdlZChGcmFt
ZVZpZXcmKSB7IH0KLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3Qg
bGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCi0gICAgdmlydHVhbCB2b2lk
IGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcmKTsKLQogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIC8vIERpc3BhdGNoZWQgYnkgdGhlIHNjcm9sbGluZyB0cmVlIGR1cmluZyBo
YW5kbGVXaGVlbEV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGFzIGxvbmcgYXMgc2Nyb2xsYmFycyBh
cmUgcGFpbnRlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UpOwpAQCAtMTA4LDI2ICs5OSwyMSBAQCBwdWJs
aWM6CiAgICAgLy8gRm9yY2UgYWxsIHNjcm9sbCBsYXllciBwb3NpdGlvbiB1cGRhdGVzIHRvIGhh
cHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb3Jj
ZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoYm9vbCk7CiAKLSAgICAvLyBU
aGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgY3VycmVudGx5IHVuaXF1ZSB0byB0aGUgdGhyZWFk
ZWQgc2Nyb2xsaW5nIGFyY2hpdGVjdHVyZS4gCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyZWVT
dGF0ZUlmTmVlZGVkKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlv
blVwZGF0ZShGcmFtZVZpZXcmLCBjb25zdCBJbnRQb2ludCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBTY3JvbGxpbmdFdmVudFJlc3VsdCBoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmll
dyYsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIHsgcmV0dXJuIFNjcm9sbGluZ0V2ZW50UmVz
dWx0OjpEaWROb3RIYW5kbGVFdmVudDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZnJhbWVW
aWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZy
YW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZyYW1lVmlld0V2ZW50VHJhY2tpbmdSZWdpb25zQ2hhbmdlZChGcmFtZVZpZXcmKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZy
YW1lVmlldyYsIGNvbnN0IEludFBvaW50Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxp
bmdOb2RlSUQgY3JlYXRlTm9kZShTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5l
d05vZGVJRCk7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsaW5nTm9kZUlEIGluc2VydE5vZGUo
U2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBuZXdOb2RlSUQsIFNjcm9sbGluZ05v
ZGVJRCBwYXJlbnRJRCwgc2l6ZV90IGNoaWxkSW5kZXgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdW5wYXJlbnROb2RlKFNjcm9sbGluZ05vZGVJRCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB1bnBhcmVudENoaWxkcmVuQW5kRGVzdHJveU5vZGUoU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRldGFjaEFuZERlc3Ryb3lTdWJ0cmVlKFNjcm9sbGluZ05vZGVJ
RCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckFsbE5vZGVzKCk7CiAKLSAgICAvLyBD
cmVhdGUgYW4gdW5wYXJlbnRlZCBub2RlLgotICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIGNy
ZWF0ZU5vZGUoU2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBuZXdOb2RlSUQpIHsg
cmV0dXJuIG5ld05vZGVJRDsgfQotICAgIC8vIFBhcmVudCBhIG5vZGUgaW4gdGhlIHNjcm9sbGlu
ZyB0cmVlLiBUaGlzIG1heSByZXR1cm4gYSBuZXcgbm9kZUlEIGlmIHRoZSBub2RlIHR5cGUgY2hh
bmdlZC4gcGFyZW50SUQgPSAwIHNldHMgdGhlIHJvb3Qgbm9kZS4KLSAgICB2aXJ0dWFsIFNjcm9s
bGluZ05vZGVJRCBpbnNlcnROb2RlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQg
bmV3Tm9kZUlELCBTY3JvbGxpbmdOb2RlSUQgLypwYXJlbnRJRCovLCBzaXplX3QgLypjaGlsZElu
ZGV4Ki8gPSBub3RGb3VuZCkgeyByZXR1cm4gbmV3Tm9kZUlEOyB9Ci0gICAgLy8gTm9kZSB3aWxs
IGJlIHVucGFyZW50ZWQsIGJ1dCBub3QgZGVzdHJveWVkLiBJdCdzIHRoZSBjbGllbnQncyByZXNw
b25zaWJpbGl0eSB0byBlaXRoZXIgcmUtcGFyZW50IG9yIGRlc3Ryb3kgdGhpcyBub2RlLgotICAg
IHZpcnR1YWwgdm9pZCB1bnBhcmVudE5vZGUoU2Nyb2xsaW5nTm9kZUlEKSB7IH0KLSAgICAvLyBO
b2RlIHdpbGwgYmUgZGVzdHJveWVkLCBhbmQgaXRzIGNoaWxkcmVuIGxlZnQgdW5wYXJlbnRlZC4K
LSAgICB2aXJ0dWFsIHZvaWQgdW5wYXJlbnRDaGlsZHJlbkFuZERlc3Ryb3lOb2RlKFNjcm9sbGlu
Z05vZGVJRCkgeyB9Ci0gICAgLy8gTm9kZSB3aWxsIGJlIHVucGFyZW50ZWQsIGFuZCBpdCBhbmQg
aXRzIGNoaWxkcmVuIGRlc3Ryb3llZC4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQW5kRGVzdHJv
eVN1YnRyZWUoU2Nyb2xsaW5nTm9kZUlEKSB7IH0KLSAgICAvLyBEZXN0cm95IHRoZSB0cmVlLCBp
bmNsdWRpbmcgYm90aCBwYXJlbnRlZCBhbmQgdW5wYXJlbnRlZCBub2Rlcy4KLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxOb2RlcygpIHsgfQotCi0gICAgdmlydHVhbCBTY3JvbGxpbmdOb2RlSUQg
cGFyZW50T2ZOb2RlKFNjcm9sbGluZ05vZGVJRCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gY2hpbGRyZW5PZk5vZGUoU2Nyb2xsaW5nTm9k
ZUlEKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdO
b2RlSUQgcGFyZW50T2ZOb2RlKFNjcm9sbGluZ05vZGVJRCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gY2hpbGRyZW5PZk5vZGUoU2Nyb2xsaW5nTm9k
ZUlEKSBjb25zdDsKIAogICAgIHN0cnVjdCBOb2RlTGF5ZXJzIHsKICAgICAgICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgeyBudWxscHRyIH07CkBAIC0xMzcsNyArMTIzLDcgQEAgcHVibGljOgogICAg
ICAgICBHcmFwaGljc0xheWVyKiBpbnNldENsaXBMYXllciB7IG51bGxwdHIgfTsKICAgICAgICAg
R3JhcGhpY3NMYXllciogcm9vdENvbnRlbnRzTGF5ZXIgeyBudWxscHRyIH07CiAgICAgfTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZUxheWVycyhTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IE5vZGVM
YXllcnMmKSB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5vZGVMYXllcnMoU2Nyb2xs
aW5nTm9kZUlELCBjb25zdCBOb2RlTGF5ZXJzJik7CiAKICAgICBzdHJ1Y3QgU2Nyb2xsaW5nR2Vv
bWV0cnkgewogICAgICAgICBMYXlvdXRSZWN0IHBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3Q7
CkBAIC0xNTUsMTYgKzE0MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4OwogI2VuZGlmCiAgICAgfTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFNjcm9sbGluZ05vZGVHZW9tZXRyeShTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFNj
cm9sbGluZ0dlb21ldHJ5Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWV3cG9ydENv
bnN0cmFpbnRlZE5vZGVHZW9tZXRyeShTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFZpZXdwb3J0Q29u
c3RyYWludHMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVjb25jaWxlU2Nyb2xsaW5n
U3RhdGUoRnJhbWVWaWV3JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IExheW91dFZpZXdwb3J0
T3JpZ2luT3JPdmVycmlkZVJlY3QmLCBib29sIHByb2dyYW1tYXRpY1Njcm9sbCwgVmlld3BvcnRS
ZWN0U3RhYmlsaXR5LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxpbmdOb2RlR2VvbWV0cnkoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBT
Y3JvbGxpbmdHZW9tZXRyeSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydENvbnN0
cmFpbnRlZE5vZGVHZW9tZXRyeShTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFZpZXdwb3J0Q29uc3Ry
YWludHMmKSB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlY29uY2lsZVZpZXdwb3J0Q29u
c3RyYWluZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IExheW91dFJlY3Qm
IHZpZXdwb3J0UmVjdCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKFNjcm9s
bGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOwogCi0gICAgdmlydHVhbCB2b2lkIHJl
Y29uY2lsZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdOb2RlSUQs
IGNvbnN0IExheW91dFJlY3QmLCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKSB7IH0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBzY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoU2Nyb2xsaW5nU3RhdGVU
cmVlQXNUZXh0QmVoYXZpb3IgPSBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvck5vcm1h
bCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Ny
b2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1lVmlldyYpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IoU2Nyb2xsUGlubmluZ0JlaGF2
aW9yKSB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN5bmNocm9ub3VzU2Nyb2xsaW5n
UmVhc29ucyhGcmFtZVZpZXcmLCBTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dChTY3JvbGxpbmdT
dGF0ZVRyZWVBc1RleHRCZWhhdmlvciA9IFNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dEJlaGF2aW9y
Tm9ybWFsKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdpbGxDb21taXRUcmVlKCk7
CiAKICAgICAvLyBHZW5lcmF0ZWQgYSB1bmlxdWUgaWQgZm9yIHNjcm9sbGluZyBub2Rlcy4KICAg
ICBTY3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsaW5nTm9kZUlEKCk7CkBAIC0xODAsMTcgKzE2
OCw0MCBAQCBwdWJsaWM6CiAgICAgU3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zIHN5bmNocm9u
b3VzU2Nyb2xsaW5nUmVhc29ucyhjb25zdCBGcmFtZVZpZXcmKSBjb25zdDsKICAgICBib29sIHNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KGNvbnN0IEZyYW1lVmll
dyYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEo
U2Nyb2xsYWJsZUFyZWEmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9u
KSB7IH0KLQogICAgIHN0YXRpYyBTdHJpbmcgc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zQXNU
ZXh0KFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyk7CiAgICAgU3RyaW5nIHN5bmNocm9ub3Vz
U2Nyb2xsaW5nUmVhc29uc0FzVGV4dCgpIGNvbnN0OwogCiAgICAgRXZlbnRUcmFja2luZ1JlZ2lv
bnMgYWJzb2x1dGVFdmVudFRyYWNraW5nUmVnaW9ucygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVFeHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyV2l0aEZyYW1lVmlldyhjb25zdCBG
cmFtZVZpZXcmKSB7IH0KKworICAgIHZvaWQgc2Nyb2xsaW5nU3RhdGVUcmVlUHJvcGVydGllc0No
YW5nZWQoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NoZWR1bGVVcGRhdGVTY3JvbGxQ
b3NpdGlvbkFmdGVyQXN5bmNTY3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgT3B0aW9uYWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0T3JpZ2luLCBib29s
IHByb2dyYW1tYXRpY1Njcm9sbCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbEluZGV4LCB1
bnNpZ25lZCB2ZXJ0aWNhbEluZGV4KTsKKyAgICB2b2lkIGRlZmVyVGVzdHNGb3JSZWFzb24oV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRU
ZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgY29uc3Q7CisgICAgdm9pZCByZW1v
dmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxl
QXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJl
YXNvbikgY29uc3Q7CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZp
ZXcoY29uc3QgRnJhbWVWaWV3Jik7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIGlzUnViYmVyQmFuZElu
UHJvZ3Jlc3MoKSBjb25zdDsKKworICAgIGJvb2wgdmlzdWFsVmlld3BvcnRFbmFibGVkKCkgY29u
c3Q7CisgICAgYm9vbCBhc3luY0ZyYW1lT3JPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IoU2Nyb2xsUGlu
bmluZ0JlaGF2aW9yKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlRXhwZWN0c1do
ZWVsRXZlbnRUZXN0VHJpZ2dlcldpdGhGcmFtZVZpZXcoY29uc3QgRnJhbWVWaWV3Jik7CisKKyAg
ICB2b2lkIHJlcG9ydEV4cG9zZWRVbmZpbGxlZEFyZWEoTW9ub3RvbmljVGltZSwgdW5zaWduZWQg
dW5maWxsZWRBcmVhKTsKKyAgICB2b2lkIHJlcG9ydFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29u
c0NoYW5nZWQoTW9ub3RvbmljVGltZSwgU3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKTsKIAog
cHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKICAgICBHcmFw
aGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcmKTsKICAgICBHcmFw
aGljc0xheWVyKiBjb3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Jik7
CkBAIC0yMDAsMjAgKzIxMSw2MyBAQCBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllciogaGVh
ZGVyTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Jik7CiAgICAgR3JhcGhpY3NMYXllciogZm9v
dGVyTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bENvbW1pdFRyZWUoKSB7IH0KKyAgICB2b2lkIHNldFNjcm9sbGluZ1RyZWUoUmVmPFNjcm9sbGlu
Z1RyZWU+JiYgc2Nyb2xsaW5nVHJlZSkgeyBtX3Njcm9sbGluZ1RyZWUgPSBXVEZNb3ZlKHNjcm9s
bGluZ1RyZWUpOyB9CiAKLSAgICBQYWdlKiBtX3BhZ2U7IC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMg
d291bGQgYmUgYSByZWZlcmVuY2UgYnV0IGl0IGdldHMgbnVsbGVkIG9uIGFzeW5jIHRlYXJkb3du
LgorICAgIFNjcm9sbGluZ1N0YXRlVHJlZSogc2Nyb2xsaW5nU3RhdGVUcmVlKCkgeyByZXR1cm4g
bV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCk7IH0KIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKEZyYW1lVmlldyYsIFN5bmNocm9ub3Vz
U2Nyb2xsaW5nUmVhc29ucykgeyB9CisgICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IHJlbGVhc2VT
Y3JvbGxpbmdUcmVlKCkgeyByZXR1cm4gV1RGTW92ZShtX3Njcm9sbGluZ1RyZWUpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbChTY3JvbGxpbmdOb2Rl
SUQsIGNvbnN0IEZsb2F0UG9pbnQmLCBPcHRpb25hbDxGbG9hdFBvaW50PiBsYXlvdXRWaWV3cG9y
dE9yaWdpbiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25B
Y3Rpb24pOworCisgICAgYm9vbCBldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9ldmVudFRyYWNraW5nUmVnaW9uc0RpcnR5OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aGFzVmlzaWJsZVNsb3dSZXBhaW50Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoY29uc3QgRnJh
bWVWaWV3JikgY29uc3Q7Citwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU3luY2hyb25vdXNTY3Jv
bGxpbmdSZWFzb25zKEZyYW1lVmlldyYpOwogICAgIHZvaWQgdXBkYXRlU3luY2hyb25vdXNTY3Jv
bGxpbmdSZWFzb25zRm9yQWxsRnJhbWVzKCk7CiAKICAgICBFdmVudFRyYWNraW5nUmVnaW9ucyBh
YnNvbHV0ZUV2ZW50VHJhY2tpbmdSZWdpb25zRm9yRnJhbWUoY29uc3QgRnJhbWUmKSBjb25zdDsK
IAorICAgIGJvb2wgaGFzVmlzaWJsZVNsb3dSZXBhaW50Vmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dHMoY29uc3QgRnJhbWVWaWV3JikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVU
cmVlU3RhdGVDb21taXQoKSA9IDA7CisKKyAgICB2b2lkIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JG
cmFtZVZpZXcoRnJhbWVWaWV3Jik7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
KEZyYW1lVmlldyYpOworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNT
Y3JvbGxUaW1lckZpcmVkKCk7CisgICAgdm9pZCBzZXRFdmVudFRyYWNraW5nUmVnaW9uc0RpcnR5
KCk7CisgICAgdm9pZCB1cGRhdGVFdmVudFRyYWNraW5nUmVnaW9ucygpOworCisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXdGb3JTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ05vZGVJRCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBQYWdlKiBtX3BhZ2U7IC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMgd291
bGQgYmUgYSByZWZlcmVuY2UgYnV0IGl0IGdldHMgbnVsbGVkIG9uIGFzeW5jIHRlYXJkb3duLgor
Citwcml2YXRlOgorICAgIFRpbWVyIG1fdXBkYXRlTm9kZVNjcm9sbFBvc2l0aW9uVGltZXI7CisK
KyAgICBzdHJ1Y3QgU2NoZWR1bGVkU2Nyb2xsVXBkYXRlIHsKKyAgICAgICAgU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCB7IDAgfTsKKyAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbjsKKyAg
ICAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gbGF5b3V0Vmlld3BvcnRPcmlnaW47CisgICAgICAg
IGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwgeyBmYWxzZSB9OworICAgICAgICBTY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uIHVwZGF0ZUxheWVyUG9zaXRpb25BY3Rpb24geyBTY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uOjpTeW5jIH07CisKKyAgICAgICAgYm9vbCBtYXRjaGVzVXBkYXRl
VHlwZShjb25zdCBTY2hlZHVsZWRTY3JvbGxVcGRhdGUmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbm9kZUlEID09IG90aGVyLm5vZGVJRAorICAgICAgICAgICAg
ICAgICYmIGlzUHJvZ3JhbW1hdGljU2Nyb2xsID09IG90aGVyLmlzUHJvZ3JhbW1hdGljU2Nyb2xs
CisgICAgICAgICAgICAgICAgJiYgdXBkYXRlTGF5ZXJQb3NpdGlvbkFjdGlvbiA9PSBvdGhlci51
cGRhdGVMYXllclBvc2l0aW9uQWN0aW9uOworICAgICAgICB9CisgICAgfTsKKworICAgIFNjaGVk
dWxlZFNjcm9sbFVwZGF0ZSBtX3NjaGVkdWxlZFNjcm9sbFVwZGF0ZTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlOworICAgIFJl
ZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1RyZWU7CisKICAgICBib29sIG1fZm9yY2VT
eW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fZXZlbnRUcmFja2luZ1JlZ2lvbnNEaXJ0eSB7IGZhbHNlIH07CiB9OwogCiBXRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU2Nyb2xs
YWJsZUFyZWFQYXJhbWV0ZXJzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpIHx8IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1
ZGUgPHN0ZGludC5oPgpAQCAtMjg1LDUgKzI4MywzIEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpzZXRQcm9wZXJ0eUNoYW4KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
VG9WYWx1ZVR5cGVOYW1lKSBcCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlLmgJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4
ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCiAjaW5jbHVkZSAiU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgpAQCAtMTQ3LDUgKzE0NSwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU0NST0xMSU5HX1NUQVRFX05PREUo
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLCBpc1Njcm9sbGluZ05vZGUoKSkKLQotI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpIHx8IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVUcmVlLmNwcAkocmV2aXNpb24gMjQwODkyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsOCBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogCi0jaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3Rh
dGVGcmFtZUhvc3RpbmdOb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGUuaCIKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
Y3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZShBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcikKK1Njcm9sbGluZ1N0YXRlVHJlZTo6U2Nyb2xs
aW5nU3RhdGVUcmVlKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcikK
ICAgICA6IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3Ioc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZVRyZWUuaAkocmV2aXNpb24gMjQwODkyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcg
QEAKICAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvcjsKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU7CiAKIC8vIFRoZSBTY3JvbGxpbmdTdGF0ZVRyZWUgaXMgYSB0cmVl
IHRoYXQgbWFuYWdlZCBTY3JvbGxpbmdTdGF0ZU5vZGVzLiBUaGUgbm9kZXMga2VlcCB0cmFjayBv
ZiB0aGUgY3VycmVudApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWUg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxp
bmdTdGF0ZU5vZGU7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsaW5nU3RhdGVU
cmVlKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9F
WFBPUlQgU2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiA9IG51bGxwdHIp
OwogICAgIFdFQkNPUkVfRVhQT1JUIH5TY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAogICAgIFNjcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9yb290U3RhdGVOb2RlLmdldCgpOyB9CkBAIC05MCw3ICs5MCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZWN1cnNpdmVOb2RlV2lsbEJlUmVtb3ZlZChTY3JvbGxpbmdTdGF0ZU5vZGUqIGN1
cnJOb2RlKTsKICAgICB2b2lkIHdpbGxSZW1vdmVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOwog
Ci0gICAgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciogbV9zY3JvbGxpbmdDb29yZGluYXRvcjsK
KyAgICBTY3JvbGxpbmdDb29yZGluYXRvciogbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKICAgICAv
LyBDb250YWlucyBhbGwgdGhlIG5vZGVzIHdlIGtub3cgYWJvdXQgKHRob3NlIGluIHRoZSBtX3Jv
b3RTdGF0ZU5vZGUgdHJlZSwgYW5kIGluIG1fdW5wYXJlbnRlZE5vZGVzIHN1YnRyZWVzKS4KICAg
ICBTdGF0ZU5vZGVNYXAgbV9zdGF0ZU5vZGVNYXA7CiAgICAgLy8gT3ducyByb290cyBvZiB1bnBh
cmVudGVkIHN1YnRyZWVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZS5jcHAJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5o
IgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CkBAIC00NjUsNSArNDYzLDMgQEAgT3B0aW9uYWw8VG91Y2hBY3Rpb25EYXRhPiBTY3JvbGxpbmdU
cmVlOgogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1
LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCiAj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKQEAgLTIwMyw0ICsyMDEsMyBAQCBwcml2YXRl
OgogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihUb1ZhbHVlVHlwZU5hbWUpIFwKICAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYgdHJlZSkgeyBy
ZXR1cm4gdHJlZS5wcmVkaWNhdGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQot
I2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgJKHJldmlzaW9uIDI0MDg5
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKQEAgLTEw
Miw1ICsxMDAsMyBAQCBwcml2YXRlOgogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZU5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUucHJlZGljYXRlOyB9
IFwKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDI0MDg5MikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
CkBAIC0xNDYsNSArMTQ0LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TQ1JPTExJTkdfTk9ERShTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZSwgaXNTY3JvbGxpbmdOb2RlKCkpCi0KLSNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQog
Ci0jaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIK
ICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIgpAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6VGhyZWFk
ZWRTY3JvbGxpbmdUcmVlKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3ImIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKQorVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpUaHJlYWRlZFNjcm9sbGluZ1RyZWUoU2Ny
b2xsaW5nQ29vcmRpbmF0b3ImIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQogICAgIDogbV9zY3JvbGxp
bmdDb29yZGluYXRvcigmc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUu
aAkocmV2aXNpb24gMjQwODkyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOwor
Y2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiAKIC8vIFRoZSBUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWUgY2xhc3MgbGl2ZXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFk
IGFuZCBtYW5hZ2VzIHRoZQogLy8gaGllcmFyY2h5IG9mIHNjcm9sbGFibGUgcmVnaW9ucyBvbiB0
aGUgcGFnZS4gSXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyBldmVudHMKQEAg
LTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlKEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3ImKTsKKyAgICBleHBsaWNpdCBUaHJlYWRlZFNjcm9sbGluZ1RyZWUo
U2Nyb2xsaW5nQ29vcmRpbmF0b3ImKTsKIAogICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRT
Y3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwg
Y29uc3QgT3B0aW9uYWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0T3JpZ2luLCBTY3JvbGxp
bmdMYXllclBvc2l0aW9uQWN0aW9uID0gU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3lu
Yykgb3ZlcnJpZGU7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNzUsNyArNzUsNyBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIGJvb2wgaXNUaHJlYWRlZFNjcm9sbGluZ1RyZWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBSZWZQdHI8QXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcj4gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKKyAgICBSZWZQdHI8U2Nyb2xsaW5nQ29v
cmRpbmF0b3I+IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9pb3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MuaAkocmV2aXNpb24gMjQwODkyKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGluZ0Nvb3JkaW5hdG9ySU9T
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLSNpbmNsdWRlICJBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIGNsYXNzIFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZTsKIAotY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MgOiBwdWJs
aWMgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciB7CitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRv
cklPUyA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CiBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MoUGFnZSopOwogICAgIHZpcnR1YWwgflNjcm9sbGlu
Z0Nvb3JkaW5hdG9ySU9TKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9p
b3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGluZ0Nvb3JkaW5hdG9ySU9TLm1tCShyZXZpc2lv
biAyNDA4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgUmVmPFNj
cm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZAogfQogCiBTY3JvbGxpbmdDb29yZGlu
YXRvcklPUzo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MoUGFnZSogcGFnZSkKLSAgICA6IEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkKKyAgICA6IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBh
Z2UpCiAgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKCp0aGlzLCAmU2Ny
b2xsaW5nQ29vcmRpbmF0b3JJT1M6OmNvbW1pdFRyZWVTdGF0ZSkKIHsKICAgICBzZXRTY3JvbGxp
bmdUcmVlKFNjcm9sbGluZ1RyZWVJT1M6OmNyZWF0ZSgqdGhpcykpOwpAQCAtNjIsNyArNjIsNyBA
QCBTY3JvbGxpbmdDb29yZGluYXRvcklPUzo6flNjcm9sbGluZ0Nvb3JkCiAKIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JJT1M6OnBhZ2VEZXN0cm95ZWQoKQogewotICAgIEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6
cGFnZURlc3Ryb3llZCgpOwogCiAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1l
ci5zdG9wKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3Jv
bGxpbmdUcmVlSU9TLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9pb3MvU2Nyb2xsaW5nVHJlZUlPUy5jcHAJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlSU9TLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
JiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgogI2luY2x1
ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJh
bWVIb3N0aW5nTm9kZS5oIgpAQCAtNDEsMTIgKzQxLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmPFNjcm9sbGluZ1RyZWVJT1M+IFNjcm9sbGluZ1RyZWVJT1M6OmNyZWF0ZShBc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yJiBzY3JvbGxpbmdDb29yZGluYXRvcikKK1JlZjxTY3JvbGxp
bmdUcmVlSU9TPiBTY3JvbGxpbmdUcmVlSU9TOjpjcmVhdGUoU2Nyb2xsaW5nQ29vcmRpbmF0b3Im
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9s
bGluZ1RyZWVJT1Moc2Nyb2xsaW5nQ29vcmRpbmF0b3IpKTsKIH0KIAotU2Nyb2xsaW5nVHJlZUlP
Uzo6U2Nyb2xsaW5nVHJlZUlPUyhBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yJiBzY3JvbGxpbmdD
b29yZGluYXRvcikKK1Njcm9sbGluZ1RyZWVJT1M6OlNjcm9sbGluZ1RyZWVJT1MoU2Nyb2xsaW5n
Q29vcmRpbmF0b3ImIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQogICAgIDogbV9zY3JvbGxpbmdDb29y
ZGluYXRvcigmc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUlPUy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlSU9TLmgJKHJldmlz
aW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3JvbGxp
bmdUcmVlSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CitjbGFzcyBT
Y3JvbGxpbmdDb29yZGluYXRvcjsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZUlPUyBmaW5hbCA6IHB1
YmxpYyBTY3JvbGxpbmdUcmVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNjcm9sbGluZ1Ry
ZWVJT1M+IGNyZWF0ZShBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yJik7CisgICAgc3RhdGljIFJl
ZjxTY3JvbGxpbmdUcmVlSU9TPiBjcmVhdGUoU2Nyb2xsaW5nQ29vcmRpbmF0b3ImKTsKICAgICB2
aXJ0dWFsIH5TY3JvbGxpbmdUcmVlSU9TKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgU2Ny
b2xsaW5nVHJlZUlPUyhBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yJik7CisgICAgZXhwbGljaXQg
U2Nyb2xsaW5nVHJlZUlPUyhTY3JvbGxpbmdDb29yZGluYXRvciYpOwogCiAgICAgYm9vbCBpc1Nj
cm9sbGluZ1RyZWVJT1MoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTU1LDcg
KzU1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hh
bmdlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWdu
ZWQgdmVydGljYWwpIGZpbmFsOwogICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdCgpIGZp
bmFsOwogCi0gICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5n
Q29vcmRpbmF0b3I7CisgICAgUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGlu
Z0Nvb3JkaW5hdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9S
TShNQUMpCiAKLSNpbmNsdWRlICJBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNj
cm9sbGluZ1N0YXRlVHJlZTsKIGNsYXNzIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTsKIAotY2xhc3Mg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgOiBwdWJsaWMgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ciB7CitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxpbmdDb29y
ZGluYXRvciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMo
UGFnZSopOwogICAgIHZpcnR1YWwgflNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgUmVmPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxp
bmdDb29yZAogfQogCiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMoUGFnZSogcGFnZSkKLSAgICA6IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkK
KyAgICA6IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCiAgICAgLCBtX3Njcm9sbGluZ1N0YXRl
VHJlZUNvbW1pdHRlclRpbWVyKCp0aGlzLCAmU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1p
dFRyZWVTdGF0ZSkKIHsKICAgICBzZXRTY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWVNYWM6OmNy
ZWF0ZSgqdGhpcykpOwpAQCAtNjUsNyArNjUsNyBAQCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
flNjcm9sbGluZ0Nvb3JkCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnBhZ2VEZXN0
cm95ZWQoKQogewotICAgIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQo
KTsKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOwogCiAgICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTWFjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU1hYy5j
cHAJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdUcmVlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEyIEBA
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1SZWY8U2Nyb2xsaW5nVHJlZU1hYz4gU2Ny
b2xsaW5nVHJlZU1hYzo6Y3JlYXRlKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3ImIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKQorUmVmPFNjcm9sbGluZ1RyZWVNYWM+IFNjcm9sbGluZ1RyZWVNYWM6OmNy
ZWF0ZShTY3JvbGxpbmdDb29yZGluYXRvciYgc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZU1hYyhzY3JvbGxpbmdDb29yZGluYXRv
cikpOwogfQogCi1TY3JvbGxpbmdUcmVlTWFjOjpTY3JvbGxpbmdUcmVlTWFjKEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3ImIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorU2Nyb2xsaW5nVHJlZU1hYzo6
U2Nyb2xsaW5nVHJlZU1hYyhTY3JvbGxpbmdDb29yZGluYXRvciYgc2Nyb2xsaW5nQ29vcmRpbmF0
b3IpCiAgICAgOiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUoc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlTWFjLmgJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEwICszMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGluZ1RyZWVN
YWMgZmluYWwgOiBwdWJsaWMgVGhyZWFkZWRTY3JvbGxpbmdUcmVlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNjcm9sbGluZ1RyZWVNYWM+IGNyZWF0ZShBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yJik7CisgICAgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVlTWFjPiBjcmVhdGUoU2Nyb2xsaW5n
Q29vcmRpbmF0b3ImKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlTWFj
KEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3ImKTsKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVl
TWFjKFNjcm9sbGluZ0Nvb3JkaW5hdG9yJik7CiAKICAgICBSZWY8U2Nyb2xsaW5nVHJlZU5vZGU+
IGNyZWF0ZVNjcm9sbGluZ1RyZWVOb2RlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2Rl
SUQpIGZpbmFsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29z
aWEvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOaWNvc2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTmljb3Np
YS5jcHAJKHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L25pY29zaWEvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOaWNvc2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNyBAQCBSZWY8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3Jk
CiB9CiAKIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTmljb3NpYTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JO
aWNvc2lhKFBhZ2UqIHBhZ2UpCi0gICAgOiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2Up
CisgICAgOiBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQogICAgICwgbV9zY3JvbGxpbmdTdGF0
ZVRyZWVDb21taXR0ZXJUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZTY3JvbGxpbmdDb29y
ZGluYXRvck5pY29zaWE6OmNvbW1pdFRyZWVTdGF0ZSkKIHsKICAgICBzZXRTY3JvbGxpbmdUcmVl
KFNjcm9sbGluZ1RyZWVOaWNvc2lhOjpjcmVhdGUoKnRoaXMpKTsKQEAgLTU0LDcgKzU0LDcgQEAg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JOaWNvc2lhOjp+U2Nyb2xsaW5nQwogCiB2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTmljb3NpYTo6cGFnZURlc3Ryb3llZCgpCiB7Ci0gICAgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpwYWdlRGVzdHJveWVkKCk7CiAKICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRp
bWVyLnN0b3AoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3Np
YS9TY3JvbGxpbmdDb29yZGluYXRvck5pY29zaWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTmljb3NpYS5o
CShyZXZpc2lvbiAyNDA4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNv
c2lhL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTmljb3NpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTMgQEAKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShOSUNPU0lB
KQogCi0jaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTmljb3NpYSBmaW5h
bCA6IHB1YmxpYyBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yIHsKK2NsYXNzIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTmljb3NpYSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CiBw
dWJsaWM6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JOaWNvc2lhKFBhZ2UqKTsK
ICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRvck5pY29zaWEoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjQwODkyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzU2LDkgKzM1Niw2IEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgIGRlc3Ry
b3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgZGVzdHJveVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7CiAKLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSByZW5kZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAg
ICBpZiAobV9yZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmNwcAkocmV2aXNpb24gMjQwODkyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QAogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQotI2luY2x1ZGUgPFdlYkNvcmUvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGluZ1RocmVhZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGhyZWFkZWRTY3JvbGxpbmdUcmVl
Lmg+CiAjZW5kaWYKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkZFNj
cm9sbGluZ1RyZWVGbwogICAgIEFTU0VSVCh3ZWJQYWdlLT5jb3JlUGFnZSgpLT5zY3JvbGxpbmdD
b29yZGluYXRvcigpKTsKICAgICBBU1NFUlQoIW1fc2Nyb2xsaW5nVHJlZXMuY29udGFpbnMod2Vi
UGFnZS0+cGFnZUlEKCkpKTsKIAotICAgIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3ImIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gZG93bmNhc3Q8QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcj4oKndl
YlBhZ2UtPmNvcmVQYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpOworICAgIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yJiBzY3JvbGxpbmdDb29yZGluYXRvciA9ICp3ZWJQYWdlLT5jb3JlUGFnZSgp
LT5zY3JvbGxpbmdDb29yZGluYXRvcigpOwogICAgIG1fc2Nyb2xsaW5nVHJlZXMuc2V0KHdlYlBh
Z2UtPnBhZ2VJRCgpLCBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLnNjcm9sbGluZ1RyZWUoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMjQwODky
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkg
QEAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
aW5nQ29uc3RyYWludHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKQEAgLTQz
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjsKIAotY2xhc3MgUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgOiBwdWJsaWMgV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ciwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yIDogcHVibGljIFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBwdWJsaWMg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8UmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKiBwYWdlKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0J
KHJldmlzaW9uIDI0MDg5MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6UmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoV2ViUGFnZSogcGFnZSkKLSAgICA6IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Io
cGFnZS0+Y29yZVBhZ2UoKSkKKyAgICA6IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UtPmNvcmVQ
YWdlKCkpCiAgICAgLCBtX3dlYlBhZ2UocGFnZSkKIHsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS0+cGFnZUlEKCksICp0aGlzKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0JKHJldmlzaW9u
IDI0MDg5MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBA
QAogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCi0jaW1wb3J0IDxXZWJDb3JlL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Ny
b2xsaW5nVGhyZWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4KICNlbmRp
ZgpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6
OnVwZGEKICAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0
dGluZ3MoKTsKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gZG93bmNhc3Q8QXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcj4obV93ZWJQYWdlLmNvcmVQYWdlKCktPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpKSB7CisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7
CiAgICAgICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCA9IG1fd2Vi
UGFnZS5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCk7CiAgICAgICAgIAogICAg
ICAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gc2Nyb2xsaW5nVHJlZSA9IHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zY3JvbGxpbmdUcmVlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>