<?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>136770</bug_id>
          
          <creation_ts>2014-09-11 19:17:19 -0700</creation_ts>
          <short_desc>[EFL][CoordinatedGraphics] Move CoordinatedGraphicsScene and CoordinatedBackingStore to WebKit2</short_desc>
          <delta_ts>2014-09-11 21:19:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>lucas.de.marchi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034793</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-09-11 19:17:19 -0700</bug_when>
    <thetext>CoordinatedGraphicsScene and CoordinatedBackingStore is only for UIProcess.
So, they don&apos;t need to be in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034809</commentid>
    <comment_count>1</comment_count>
      <attachid>238013</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-09-11 21:04:18 -0700</bug_when>
    <thetext>Created attachment 238013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034810</commentid>
    <comment_count>2</comment_count>
      <attachid>238013</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-09-11 21:05:57 -0700</bug_when>
    <thetext>Comment on attachment 238013
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034811</commentid>
    <comment_count>3</comment_count>
      <attachid>238013</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-09-11 21:19:36 -0700</bug_when>
    <thetext>Comment on attachment 238013
Patch

Clearing flags on attachment: 238013

Committed r173553: &lt;http://trac.webkit.org/changeset/173553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034812</commentid>
    <comment_count>4</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-09-11 21:19:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238013</attachid>
            <date>2014-09-11 21:04:18 -0700</date>
            <delta_ts>2014-09-11 21:19:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136770-20140912130413.patch</filename>
            <type>text/plain</type>
            <size>98483</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTYwNzM1ZTU1ZTdjZTEz
M2MwNmIwMmE5NGUxMDc4NzIzZjIxZTk4NC4uZjZjNWNhODM3ZWMxZjhhNjU0MTY1NmMxNTRmYjNk
Y2FmZWExOGEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA5LTExICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBnbWFpbC5jb20+CisKKyAgICAgICAgW0VGTF1bQ29vcmRpbmF0
ZWRHcmFwaGljc10gTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgYW5kIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlIHRvIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjc3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBhbmQgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUgaXMgb25seSBmb3IgVUlQcm9jZXNzLgorICAgICAgICBUaGlzIHBhdGNoIG1v
dmVkIHRoZW0gZnJvbSBXZWJDb3JlIHRvIFdlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTQtMDktMTEgIFJvZ2VyIEZvbmcgIDxy
b2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gVW5yZXZpZXdlZCBidWls
ZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmUxYTI5YzFjOGM1MjNkM2VlMDg5YmQwZWJhZTdjZjVjZWMx
MTcxMC4uYzA0ZDJkZGY1YmY1NGZlNzgyOGE2NDY3MzM1MmZmNWNhNmNjZTY5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA5LTExICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBn
bWFpbC5jb20+CisKKyAgICAgICAgW0VGTF1bQ29vcmRpbmF0ZWRHcmFwaGljc10gTW92ZSBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUgYW5kIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIHRvIFdlYktp
dDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjc3
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSBhbmQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgaXMgb25seSBm
b3IgVUlQcm9jZXNzLgorICAgICAgICBUaGlzIHBhdGNoIG1vdmVkIHRoZW0gZnJvbSBXZWJDb3Jl
IHRvIFdlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db29yZGluYXRlZEdy
YXBoaWNzL1dLQ29vcmRpbmF0ZWRTY2VuZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmguCisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViVmlldy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcDoKKwog
MjAxNC0wOS0xMSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAgICAg
W0NTUyBGb250IExvYWRpbmddIEVuYWJsZSBDU1MgRm9udCBMb2FkaW5nIG9uIE1hYwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCBkYWM4NDI4YmYwMDkzYTQwNTJmYzBkMmY1OTg3OGZiMzdj
ZDNiYjdjLi5mMjQ2NzFkMDY1ODRhMjY3ZTM5YmVmMTFhZThkOGQ1NjBkMjUzODM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTg1LDkgKzE4NSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Fy
ZWFBbGxvY2F0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk3NGI2NDkwMWUxMWZmYjRlMGZiZTBmM2UyNGI2MjA4YzM5YzA5M2Qu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKgotIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
LXsKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0
IHRpbGVSZWN0KG1fdGlsZVJlY3QpOwotICAgIHRpbGVSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7
Ci0gICAgYm9vbCBzaG91bGRSZXNldCA9IGZhbHNlOwotICAgIGlmICh0aWxlUmVjdCAhPSByZWN0
KCkpIHsKLSAgICAgICAgc2V0UmVjdCh0aWxlUmVjdCk7Ci0gICAgICAgIHNob3VsZFJlc2V0ID0g
dHJ1ZTsKLSAgICB9Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlzLT50
ZXh0dXJlKCk7Ci0gICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAgICAgIHRleHR1cmUgPSB0ZXh0dXJl
TWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5nZXQo
KSk7Ci0gICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodGV4
dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKS53aWR0aCgpID49IG1fdGlsZVJlY3Quc2l6ZSgp
LndpZHRoKCkpOwotICAgIEFTU0VSVCh0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhl
aWdodCgpID49IG1fdGlsZVJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBpZiAoc2hvdWxkUmVz
ZXQpCi0gICAgICAgIHRleHR1cmUtPnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2Ut
PnN1cHBvcnRzQWxwaGEoKSk7Ci0KLSAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVy
ZSwgbV9zb3VyY2VSZWN0LCBtX3N1cmZhY2VPZmZzZXQpOwotICAgIG1fc3VyZmFjZS5jbGVhcigp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihj
b25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
LXsKLSAgICBtX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIG1fdGlsZVJlY3QgPSB0aWxl
UmVjdDsKLSAgICBtX3N1cmZhY2VPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdXJmYWNlID0gYnVm
ZmVyOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQz
Ml90IGlkLCBmbG9hdCBzY2FsZSkKLXsKLSAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlKHNjYWxlKSk7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotfQotCi12b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQotewotICAg
IEFTU0VSVChtX3RpbGVzLmNvbnRhaW5zKGlkKSk7Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmFkZChp
ZCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkK
LXsKLSAgICBmb3IgKGF1dG8mIGtleSA6IG1fdGlsZXMua2V5cygpKQotICAgICAgICBtX3RpbGVz
VG9SZW1vdmUuYWRkKGtleSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVw
ZGF0ZVRpbGUodWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYmFja0J1ZmZl
ciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQg
IT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3Qs
IHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAotewotICAg
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7
Ci0gICAgICAgIGlmICh0ZXh0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17
Ci0gICAgbV9wZW5kaW5nU2l6ZSA9IHNpemU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OnBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxl
Kj4mIHRpbGVzLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgdGlsZXNbaV0tPnBhaW50KHRleHR1cmVNYXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwg
Y2FsY3VsYXRlRXhwb3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlc1tpXS0+cmVjdCgpKSk7Ci19Ci0K
LVRyYW5zZm9ybWF0aW9uTWF0cml4IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjphZGp1c3RlZFRy
YW5zZm9ybUZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIHJldHVy
biBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0KCksIHRhcmdldFJlY3QpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17
Ci0gICAgaWYgKG1fdGlsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KCFtX3NpemUuaXNaZXJvKCkpOwotCi0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gdGls
ZXNUb1BhaW50OwotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHByZXZpb3VzVGlsZXNU
b1BhaW50OwotCi0gICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgd2UgcGFpbnQs
IGluIGNhc2UgdGhlIG9wYWNpdHkgaGFzIGNoYW5nZWQuCi0gICAgRmxvYXRSZWN0IGNvdmVyZWRS
ZWN0OwotICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMudmFsdWVzKCkpIHsKLSAgICAgICAg
aWYgKCF0aWxlLnRleHR1cmUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICh0aWxlLnNjYWxlKCkgPT0gbV9zY2FsZSkgewotICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFw
cGVuZCgmdGlsZSk7Ci0gICAgICAgICAgICBjb3ZlcmVkUmVjdC51bml0ZSh0aWxlLnJlY3QoKSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE9ubHkgc2hv
dyB0aGUgcHJldmlvdXMgdGlsZSBpZiB0aGUgb3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZm
ZWN0IGxvb2tzIGxpa2UgYSBidWcuCi0gICAgICAgIC8vIFdlIHNob3cgdGhlIHByZXZpb3VzLXNj
YWxlIHRpbGUgYW55d2F5IGlmIGl0IGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggYW55IGN1cnJlbnQt
c2NhbGUgdGlsZS4KLSAgICAgICAgaWYgKG9wYWNpdHkgPCAwLjk1ICYmIGNvdmVyZWRSZWN0Lmlu
dGVyc2VjdHModGlsZS5yZWN0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
cHJldmlvdXNUaWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKLSAgICB9Ci0KLSAgICAvLyB0YXJn
ZXRSZWN0IGlzIG9uIHRoZSBjb250ZW50cyBjb29yZGluYXRlIHN5c3RlbSwgc28gd2UgbXVzdCBj
b21wYXJlIHR3byByZWN0cyBvbiB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAg
Ly8gU2VlIFRpbGVkQmFja2luZ1N0b3JlLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVz
dGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdl
dFJlY3QpOwotCi0gICAgcGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9Q
YWludCwgdGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIHJlY3QoKSk7
Ci0gICAgcGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcih0aWxlc1RvUGFpbnQsIHRleHR1cmVNYXBw
ZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCByZWN0KCkpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3Qm9yZGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSkKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5z
Zm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKLSAgICBmb3IgKGF1
dG8mIHRpbGUgOiBtX3RpbGVzLnZhbHVlcygpKQotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3
Qm9yZGVyKGJvcmRlckNvbG9yLCBib3JkZXJXaWR0aCwgdGlsZS5yZWN0KCksIGFkanVzdGVkVHJh
bnNmb3JtKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRD
b3VudGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCByZXBhaW50Q291bnQsIGNv
bnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1G
b3JSZWN0KHRhcmdldFJlY3QpOwotICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMudmFsdWVz
KCkpCi0gICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdOdW1iZXIocmVwYWludENvdW50LCBib3Jk
ZXJDb2xvciwgdGlsZS5yZWN0KCkubG9jYXRpb24oKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQotewotICAgIGlmICghbV9wZW5kaW5nU2l6ZS5pc1pl
cm8oKSkgewotICAgICAgICBtX3NpemUgPSBtX3BlbmRpbmdTaXplOwotICAgICAgICBtX3BlbmRp
bmdTaXplID0gRmxvYXRTaXplKCk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0aWxlVG9SZW1v
dmUgOiBtX3RpbGVzVG9SZW1vdmUpCi0gICAgICAgIG1fdGlsZXMucmVtb3ZlKHRpbGVUb1JlbW92
ZSk7Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHRpbGUg
OiBtX3RpbGVzLnZhbHVlcygpKQotICAgICAgICB0aWxlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBw
ZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk3MjEzMWViMmNh
YjkxYzAwNjI4NWMxZTU5Y2U5ZWEzMTRhZGIyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDkwICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyVGlsZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBDb29yZGluYXRlZFN1cmZhY2U7Ci0KLWNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyVGlsZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKLSAgICAgICAgOiBUZXh0
dXJlTWFwcGVyVGlsZShGbG9hdFJlY3QoKSkKLSAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Nj
YWxlOyB9Ci0gICAgdm9pZCBzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBz
ZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmKTsKLQotcHJpdmF0ZToK
LSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgSW50UmVjdCBt
X3NvdXJjZVJlY3Q7Ci0gICAgSW50UmVjdCBtX3RpbGVSZWN0OwotICAgIEludFBvaW50IG1fc3Vy
ZmFjZU9mZnNldDsKLSAgICBmbG9hdCBtX3NjYWxlOwotfTsKLQotY2xhc3MgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQpOwotICAgIHZvaWQg
cmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsK
LSAgICB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UmVjdCYsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiwgY29uc3QgSW50UG9p
bnQmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKTsgfQot
ICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciopOwotICAgIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVyKFRleHR1cmVNYXBwZXIq
LCBjb25zdCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3
UmVwYWludENvdW50ZXIoVGV4dHVyZU1hcHBlciosIGludCByZXBhaW50Q291bnQsIGNvbnN0IENv
bG9yJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVy
cmlkZTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSgpCi0gICAgICAg
IDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAgICB2b2lkIHBhaW50VGlsZXNUb1RleHR1cmVNYXBw
ZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4mLCBUZXh0dXJlTWFwcGVyKiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9p
bnQ6Onplcm8oKSwgbV9zaXplKTsgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQzMl90LCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1h
cDsKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXAgbV90aWxlczsKLSAgICBIYXNo
U2V0PHVpbnQzMl90PiBtX3RpbGVzVG9SZW1vdmU7Ci0gICAgLy8gRklYTUU6IG1fcGVuZGluZ1Np
emUgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIGZvbGxvd2luZyBidWcgaXMgZml4ZWQ6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQKLSAgICBGbG9hdFNp
emUgbV9wZW5kaW5nU2l6ZTsKLSAgICBGbG9hdFNpemUgbV9zaXplOwotICAgIGZsb2F0IG1fc2Nh
bGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzNiOWU5Y2VjZTI0NjY0YjFjZWU4
ZTgwZTljZmFlOWM1NTU1YWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzI5
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55
IDEwMCwgSW5jLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgotCi0j
aW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgotI2lu
Y2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlzcGF0
Y2hPbk1haW5UaHJlYWQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQotewotICAgIGlm
IChpc01haW5UaHJlYWQoKSkKLSAgICAgICAgZnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoV1RGOjptb3ZlKGZ1bmN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBib29s
IGxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyKQot
ewotICAgIHJldHVybiBsYXllci0+ZHJhd3NDb250ZW50KCkgJiYgbGF5ZXItPmNvbnRlbnRzQXJl
VmlzaWJsZSgpICYmICFsYXllci0+c2l6ZSgpLmlzRW1wdHkoKTsKLX0KLQotQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2lz
QWN0aXZlKGZhbHNlKQotICAgICwgbV9yb290TGF5ZXJJRChJbnZhbGlkQ29vcmRpbmF0ZWRMYXll
cklEKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV92aWV3
QmFja2dyb3VuZENvbG9yKENvbG9yOjp3aGl0ZSkKLSAgICAsIG1fc2V0RHJhd3NCYWNrZ3JvdW5k
KGZhbHNlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci19Ci0KLUNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6fkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpCi17Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBSZWN0LCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3MpCi17Ci0g
ICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpIHsKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotICAgICAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpLT5zZXRF
bmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcodHJ1ZSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9w
ZW5HTE1vZGUpOwotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0KLSAgICBhZGp1c3RQb3NpdGlv
bkZvckZpeGVkTGF5ZXJzKCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBjdXJyZW50Um9vdExh
eWVyID0gcm9vdExheWVyKCk7Ci0gICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVy
ZU1hcHBlci5nZXQoKSk7Ci0gICAgY3VycmVudFJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVj
dXJzaXZlbHkoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFn
cyk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgY2xpcFJlY3QpOwotCi0gICAgaWYgKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKSB7Ci0gICAgICAg
IFJHQkEzMiByZ2JhID0gbWFrZVJHQkEzMkZyb21GbG9hdHMobV9iYWNrZ3JvdW5kQ29sb3IucmVk
KCksCi0gICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvci5ncmVlbigpLCBtX2JhY2tncm91bmRD
b2xvci5ibHVlKCksCi0gICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvci5hbHBoYSgpICogb3Bh
Y2l0eSk7Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3Qs
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIENvbG9yKHJnYmEpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPmdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAg
ICAgIGNvbnRleHQtPmNsZWFyQ29sb3IobV92aWV3QmFja2dyb3VuZENvbG9yLnJlZCgpIC8gMjU1
LjBmLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSAvIDI1NS4wZiwgbV92aWV3QmFja2dy
b3VuZENvbG9yLmJsdWUoKSAvIDI1NS4wZiwgbV92aWV3QmFja2dyb3VuZENvbG9yLmFscGhhKCkg
LyAyNTUuMGYpOwotICAgICAgICBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQlVGRkVSX0JJVCk7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNp
dHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJp
eCkgewotICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICB9Ci0KLSAg
ICBjdXJyZW50Um9vdExheWVyLT5wYWludCgpOwotICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNB
bmREaXNwbGF5KG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgY2xpcFJlY3QubG9jYXRpb24oKSwgbWF0
cml4KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKLSAgICBtX3RleHR1cmVNYXBw
ZXItPmVuZFBhaW50aW5nKCk7Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXllci0+ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgICAgIGRpc3BhdGNoT25N
YWluVGhyZWFkKFs9XSB7Ci0gICAgICAgICAgICBwcm90ZWN0b3ItPnVwZGF0ZVZpZXdwb3J0KCk7
Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
Q29udGV4dCkKLXsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1h
cHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7
Ci0gICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVy
ID0gcm9vdExheWVyKCk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7Ci0gICAg
bV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7Ci0g
ICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Ci0KLSAgICBJbnRSZWN0IGNsaXBS
ZWN0ID0gZ3JhcGhpY3NDb250ZXh0LmNsaXBCb3VuZHMoKTsKLSAgICBpZiAobV9zZXREcmF3c0Jh
Y2tncm91bmQpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJl
Y3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG1fYmFja2dyb3VuZENvbG9yKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIG1fdmlld0JhY2tncm91bmRDb2xvcik7Ci0KLSAgICBsYXllci0+
cGFpbnQoKTsKLSAgICBtX2Zwc0NvdW50ZXIudXBkYXRlRlBTQW5kRGlzcGxheShtX3RleHR1cmVN
YXBwZXIuZ2V0KCksIGNsaXBSZWN0LmxvY2F0aW9uKCkpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
ZW5kUGFpbnRpbmcoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgw
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQotewotICAgIG1fc2Nyb2xsUG9zaXRp
b24gPSBzY3JvbGxQb3NpdGlvbjsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJz
KCkKLXsKLSAgICBpZiAobV9maXhlZExheWVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEZpeGVkIGxheWVyIHBvc2l0aW9ucyBhcmUgdXBkYXRlZCBieSB0aGUgd2ViIHBy
b2Nlc3Mgd2hlbiB3ZSB1cGRhdGUgdGhlIHZpc2libGUgY29udGVudHMgcmVjdCAvIHNjcm9sbCBw
b3NpdGlvbi4KLSAgICAvLyBJZiB3ZSB3YW50IHRob3NlIGxheWVycyB0byBmb2xsb3cgYWNjdXJh
dGVseSB0aGUgdmlld3BvcnQgd2hlbiB3ZSBtb3ZlIGJldHdlZW4gdGhlIHdlYiBwcm9jZXNzIHVw
ZGF0ZXMsIHdlIGhhdmUgdG8gb2Zmc2V0Ci0gICAgLy8gdGhlbSBieSB0aGUgZGVsdGEgYmV0d2Vl
biB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aWV3cG9ydCB1
c2VkIGZvciB0aGUgbGFzdCBsYXlvdXQuCi0gICAgRmxvYXRTaXplIGRlbHRhID0gbV9zY3JvbGxQ
b3NpdGlvbiAtIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotCi0gICAgZm9yIChh
dXRvJiBmaXhlZExheWVyIDogbV9maXhlZExheWVycy52YWx1ZXMoKSkKLSAgICAgICAgZml4ZWRM
YXllci0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0
ZVBsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5w
bGF0Zm9ybUxheWVyVG9rZW4uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IHBsYXRmb3JtTGF5ZXJCYWNraW5n
U3RvcmUoVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKLSAgICBt
X3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChsYXllciwgcGxhdGZvcm1MYXllckJhY2tpbmdTdG9y
ZSk7Ci0gICAgcGxhdGZvcm1MYXllckJhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKEdy
YXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLnBsYXRmb3JtTGF5ZXJTaXplLCBzdGF0ZS5wbGF0
Zm9ybUxheWVyU3VyZmFjZUZsYWdzLCBzdGF0ZS5wbGF0Zm9ybUxheWVyVG9rZW4pKTsKLSAgICBs
YXllci0+c2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyQmFja2luZ1N0b3JlLmdldCgpKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNQbGF0Zm9ybUxheWVySWZO
ZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotCi0g
ICAgaWYgKHN0YXRlLnBsYXRmb3JtTGF5ZXJDaGFuZ2VkKSB7Ci0gICAgICAgIGRlc3Ryb3lQbGF0
Zm9ybUxheWVySWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKLSAgICAgICAgY3JlYXRlUGxhdGZvcm1M
YXllcklmTmVlZGVkKGxheWVyLCBzdGF0ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlLnBsYXRm
b3JtTGF5ZXJTaG91bGRTd2FwQnVmZmVycykgewotICAgICAgICBBU1NFUlQobV9zdXJmYWNlQmFj
a2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOwotICAgICAgICBTdXJmYWNlQmFja2luZ1N0b3Jl
TWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChsYXllcik7Ci0g
ICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gcGxhdGZvcm1M
YXllckJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgcGxhdGZvcm1MYXllckJhY2tp
bmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChzdGF0ZS5wbGF0Zm9ybUxheWVyRnJvbnRCdWZm
ZXIpOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lQ
bGF0Zm9ybUxheWVySWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS5wbGF0
Zm9ybUxheWVyVG9rZW4uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZh
Y2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcik7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzTGF5
ZXIoMCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExh
eWVyUmVwYWludENvdW50SWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmICghbGF5ZXIt
PmlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgfHwgIXN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRSZXBhaW50Q291bnQoc3RhdGUucmVw
YWludENvdW50KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVy
Q2hpbGRyZW5JZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5jaGlsZHJl
bkNoYW5nZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5
ZXIqPiBjaGlsZHJlbjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUuY2hpbGRy
ZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBz
dGF0ZS5jaGlsZHJlbltpXTsKLSAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBjaGlsZCA9IGxh
eWVyQnlJRChjaGlsZElEKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICB9
Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVyc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsK
LSAgICBpZiAoIXN0YXRlLmZpbHRlcnNDaGFuZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBs
YXllci0+c2V0RmlsdGVycyhzdGF0ZS5maWx0ZXJzKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgbGF5ZXJTdGF0ZSkKLXsKLSAgICBBU1NFUlQo
bV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLQotICAgIGlmIChsYXllclN0YXRl
LnBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyU3RhdGUu
cG9zKTsKLQotICAgIGlmIChsYXllclN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCkKLSAgICAgICAg
bGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVyU3RhdGUuYW5jaG9yUG9pbnQpOwotCi0gICAgaWYg
KGxheWVyU3RhdGUuc2l6ZUNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRTaXplKGxheWVyU3Rh
dGUuc2l6ZSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkKQotICAgICAg
ICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVyU3RhdGUudHJhbnNmb3JtKTsKLQotICAgIGlmIChs
YXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldENo
aWxkcmVuVHJhbnNmb3JtKGxheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pOwotCi0gICAgaWYg
KGxheWVyU3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldENvbnRl
bnRzUmVjdChsYXllclN0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5j
b250ZW50c1RpbGluZ0NoYW5nZWQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVGlsZVBo
YXNlKGxheWVyU3RhdGUuY29udGVudHNUaWxlUGhhc2UpOwotICAgICAgICBsYXllci0+c2V0Q29u
dGVudHNUaWxlU2l6ZShsYXllclN0YXRlLmNvbnRlbnRzVGlsZVNpemUpOwotICAgIH0KLQotICAg
IGlmIChsYXllclN0YXRlLm9wYWNpdHlDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0T3BhY2l0
eShsYXllclN0YXRlLm9wYWNpdHkpOwotCi0gICAgaWYgKGxheWVyU3RhdGUuc29saWRDb2xvckNo
YW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRTb2xpZENvbG9yKGxheWVyU3RhdGUuc29saWRDb2xv
cik7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCB8fCBsYXll
clN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0RGVidWdW
aXN1YWxzKGxheWVyU3RhdGUuc2hvd0RlYnVnQm9yZGVycywgbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRl
ckNvbG9yLCBsYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGgsIGxheWVyU3RhdGUuc2hvd1JlcGFp
bnRDb3VudGVyKTsKLQotICAgIGlmIChsYXllclN0YXRlLnJlcGxpY2FDaGFuZ2VkKQotICAgICAg
ICBsYXllci0+c2V0UmVwbGljYUxheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVyU3RhdGUu
cmVwbGljYSkpOwotCi0gICAgaWYgKGxheWVyU3RhdGUubWFza0NoYW5nZWQpCi0gICAgICAgIGxh
eWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJTdGF0ZS5tYXNrKSk7
Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5pbWFnZUNoYW5nZWQpCi0gICAgICAgIGFzc2lnbkltYWdl
QmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVyU3RhdGUuaW1hZ2VJRCk7Ci0KLSAgICBpZiAobGF5
ZXJTdGF0ZS5mbGFnc0NoYW5nZWQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVl
KGxheWVyU3RhdGUuY29udGVudHNPcGFxdWUpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250
ZW50KGxheWVyU3RhdGUuZHJhd3NDb250ZW50KTsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRz
VmlzaWJsZShsYXllclN0YXRlLmNvbnRlbnRzVmlzaWJsZSk7Ci0gICAgICAgIGxheWVyLT5zZXRC
YWNrZmFjZVZpc2liaWxpdHkobGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUpOwotCi0gICAgICAg
IC8vIE5ldmVyIGNsaXAgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIGxheWVyLT5zZXRNYXNrc1Rv
Qm91bmRzKGlkID09IG1fcm9vdExheWVySUQgPyBmYWxzZSA6IGxheWVyU3RhdGUubWFza3NUb0Jv
dW5kcyk7Ci0gICAgICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRlLnByZXNlcnZl
czNEKTsKLQotICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydENoYW5nZWQgPSBsYXllci0+Zml4
ZWRUb1ZpZXdwb3J0KCkgIT0gbGF5ZXJTdGF0ZS5maXhlZFRvVmlld3BvcnQ7Ci0gICAgICAgIGxh
eWVyLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJTdGF0ZS5maXhlZFRvVmlld3BvcnQpOwotICAg
ICAgICBpZiAoZml4ZWRUb1ZpZXdwb3J0Q2hhbmdlZCkgewotICAgICAgICAgICAgaWYgKGxheWVy
U3RhdGUuZml4ZWRUb1ZpZXdwb3J0KQotICAgICAgICAgICAgICAgIG1fZml4ZWRMYXllcnMuYWRk
KGlkLCBsYXllcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9maXhlZExh
eWVycy5yZW1vdmUoaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgbGF5ZXItPnNldElzU2Nyb2xs
YWJsZShsYXllclN0YXRlLmlzU2Nyb2xsYWJsZSk7Ci0gICAgfQotCi0gICAgaWYgKGxheWVyU3Rh
dGUuY29tbWl0dGVkU2Nyb2xsT2Zmc2V0Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPmRpZENvbW1p
dFNjcm9sbE9mZnNldChsYXllclN0YXRlLmNvbW1pdHRlZFNjcm9sbE9mZnNldCk7Ci0KLSAgICBw
cmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7Ci0KLSAgICAvLyBBcHBseSBPcGVyYXRp
b25zLgotICAgIHNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci0g
ICAgY3JlYXRlVGlsZXNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci0gICAgcmVtb3ZlVGls
ZXNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci0gICAgdXBkYXRlVGlsZXNJZk5lZWRlZChs
YXllciwgbGF5ZXJTdGF0ZSk7Ci0gICAgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQobGF5ZXIsIGxh
eWVyU3RhdGUpOwotICAgIHNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKGxheWVyLCBsYXllclN0
YXRlKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBzeW5jUGxhdGZvcm1MYXllcklm
TmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKLSNlbmRpZgotICAgIHNldExheWVyUmVwYWludENv
dW50SWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwotfQotCi1UZXh0dXJlTWFwcGVyTGF5ZXIq
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkKQotewotICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5
ZXJJRCkgPyBsYXllckJ5SUQoaWQpIDogMDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRz
KQotewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBpZHMuc2l6ZSgpOyArK2lu
ZGV4KQotICAgICAgICBjcmVhdGVMYXllcihpZHNbaW5kZXhdKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBuZXdMYXllciA9IHN0ZDo6
bWFrZV91bmlxdWU8VGV4dHVyZU1hcHBlckxheWVyPigpOwotICAgIG5ld0xheWVyLT5zZXRJRChp
ZCk7Ci0gICAgbmV3TGF5ZXItPnNldFNjcm9sbENsaWVudCh0aGlzKTsKLSAgICBtX2xheWVycy5h
ZGQoaWQsIFdURjo6bW92ZShuZXdMYXllcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBs
YXllcklEcykKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbGF5ZXJJRHMu
c2l6ZSgpOyArK2luZGV4KQotICAgICAgICBkZWxldGVMYXllcihsYXllcklEc1tpbmRleF0pOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJM
YXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQpOwotICAgIEFTU0VSVChsYXllcik7
Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKLSAgICBtX2ZpeGVk
TGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBt
X3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklEKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklEKQotewotICAgIEFTU0VSVChsYXllcklEICE9IEludmFsaWRDb29yZGlu
YXRlZExheWVySUQpOwotICAgIEFTU0VSVChtX3Jvb3RMYXllcklEID09IEludmFsaWRDb29yZGlu
YXRlZExheWVySUQpOwotCi0gICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7Ci0KLSAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOwotICAgIEFTU0VSVCht
X3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpOwotICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChsYXllcik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwcmVwYXJl
Q29udGVudEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyKQotewotICAgIGlm
ICghbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKGxheWVyKSkgewotICAgICAgICByZW1vdmVC
YWNraW5nU3RvcmVJZk5lZWRlZChsYXllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChsYXllcik7Ci0gICAgcmVzZXRCYWNraW5nU3Rv
cmVTaXplVG9MYXllclNpemUobGF5ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Y3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXll
cikKLXsKLSAgICBpZiAobV9iYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZXMuYWRkKGxheWVyLCBiYWNraW5nU3RvcmUpOwotICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCi17Ci0gICAg
UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdT
dG9yZXMudGFrZShsYXllcik7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUoMCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyKQotewotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7Ci0gICAgQVNTRVJU
KGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKGxheWVyLT5zaXplKCkp
OwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3Jl
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGVzSWZOZWVk
ZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS50aWxlc1RvQ3JlYXRlLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQo
YmFja2luZ1N0b3JlKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUudGlsZXNU
b0NyZWF0ZS5zaXplKCk7ICsraSkKLSAgICAgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHN0
YXRlLnRpbGVzVG9DcmVhdGVbaV0udGlsZUlELCBzdGF0ZS50aWxlc1RvQ3JlYXRlW2ldLnNjYWxl
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGVzSWZOZWVk
ZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS50aWxlc1RvUmVtb3ZlLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBpZiAoIWJh
Y2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdGF0ZS50aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBiYWNraW5nU3RvcmUt
PnJlbW92ZVRpbGUoc3RhdGUudGlsZXNUb1JlbW92ZVtpXSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsK
LSAgICBpZiAoc3RhdGUudGlsZXNUb1VwZGF0ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9i
YWNraW5nU3RvcmVzLmdldChsYXllcik7Ci0gICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLnRpbGVzVG9VcGRhdGUuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgY29uc3QgVGlsZVVwZGF0ZUluZm8mIHRpbGVJbmZvID0gc3RhdGUudGlsZXNU
b1VwZGF0ZVtpXTsKLSAgICAgICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRh
dGVJbmZvID0gdGlsZUluZm8udXBkYXRlSW5mbzsKLQotICAgICAgICBTdXJmYWNlTWFwOjppdGVy
YXRvciBzdXJmYWNlSXQgPSBtX3N1cmZhY2VzLmZpbmQoc3VyZmFjZVVwZGF0ZUluZm8uYXRsYXNJ
RCk7Ci0gICAgICAgIEFTU0VSVChzdXJmYWNlSXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0KLSAg
ICAgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJbmZvLnRpbGVJRCwgc3VyZmFjZVVw
ZGF0ZUluZm8udXBkYXRlUmVjdCwgdGlsZUluZm8udGlsZVJlY3QsIHN1cmZhY2VJdC0+dmFsdWUs
IHN1cmZhY2VVcGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOwotICAgICAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci0gICAgfQotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1VwZGF0ZUF0bGFzZXMoY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5zaXplKCk7ICsraSkKLSAgICAgICAgY3JlYXRl
VXBkYXRlQXRsYXMoc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlW2ldLmZpcnN0LCBzdGF0ZS51
cGRhdGVBdGxhc2VzVG9DcmVhdGVbaV0uc2Vjb25kKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBy
ZW1vdmVVcGRhdGVBdGxhcyhzdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmVbaV0pOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCi17Ci0gICAg
QVNTRVJUKCFtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAgICBtX3N1cmZhY2VzLmFk
ZChhdGxhc0lELCBzdXJmYWNlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgQVNTRVJUKG1fc3Vy
ZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMucmVtb3ZlKGF0bGFzSUQp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY0ltYWdlQmFja2luZ3Mo
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlLmltYWdlc1RvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBy
ZW1vdmVJbWFnZUJhY2tpbmcoc3RhdGUuaW1hZ2VzVG9SZW1vdmVbaV0pOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5pbWFnZXNUb0NyZWF0ZS5zaXplKCk7ICsraSkKLSAgICAg
ICAgY3JlYXRlSW1hZ2VCYWNraW5nKHN0YXRlLmltYWdlc1RvQ3JlYXRlW2ldKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUuaW1hZ2VzVG9VcGRhdGUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHVwZGF0ZUltYWdlQmFja2luZyhzdGF0ZS5pbWFnZXNUb1VwZGF0ZVtpXS5maXJzdCwg
c3RhdGUuaW1hZ2VzVG9VcGRhdGVbaV0uc2Vjb25kKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RhdGUuaW1hZ2VzVG9DbGVhci5zaXplKCk7ICsraSkKLSAgICAgICAgY2xlYXJJbWFn
ZUJhY2tpbmdDb250ZW50cyhzdGF0ZS5pbWFnZXNUb0NsZWFyW2ldKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgQVNTRVJUKCFtX2ltYWdlQmFja2luZ3MuY29udGFp
bnMoaW1hZ2VJRCkpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci0gICAgbV9pbWFnZUJh
Y2tpbmdzLmFkZChpbWFnZUlELCBiYWNraW5nU3RvcmUucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJm
YWNlKQotewotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwot
ICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChp
bWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IGl0LT52YWx1ZTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxp
emVkIHRvIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQ
cm9jZXNzLgotICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNj
YWxlICovKTsKLSAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6
ZSgpKTsKLSAgICAvLyBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3Rs
eUNvbXBvc2l0ZUltYWdlKCkKLSAgICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXpl
KCkpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0
LCBzdXJmYWNlLCByZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQpCi17Ci0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhp
bWFnZUlEKSk7Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNr
aW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwotICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsVGls
ZXMoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdT
dG9yZSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIEFTU0VSVCht
X2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2Fu
dCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJzIGEgZGFuZ2xpbmcgcG9pbnRlci4KLSAgICBtX3Jl
bGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFnZUJhY2tpbmdzLnRha2UoaW1hZ2VJRCkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNraW5n
VG9MYXllcihUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQpCi17Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fc3Vy
ZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMobGF5ZXIpKQotICAgICAgICByZXR1cm47Ci0jZW5k
aWYKLQotICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKDApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNr
aW5ncy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5k
KCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKGl0LT52YWx1ZS5nZXQoKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVSZWxlYXNlZEltYWdlQmFja2lu
Z3NJZk5lZWRlZCgpCi17Ci0gICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuY2xlYXIoKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3Rv
cmVPcGVyYXRpb25zKCkKLXsKLSAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycykKLSAgICAgICAgYmFja2luZ1N0b3JlLT5jb21taXRU
aWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotCi0gICAgbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZSYgc3RhdGUpCi17Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzdGF0
ZS5zY3JvbGxQb3NpdGlvbjsKLQotICAgIGNyZWF0ZUxheWVycyhzdGF0ZS5sYXllcnNUb0NyZWF0
ZSk7Ci0gICAgZGVsZXRlTGF5ZXJzKHN0YXRlLmxheWVyc1RvUmVtb3ZlKTsKLQotICAgIGlmIChz
dGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciAhPSBtX3Jvb3RMYXllcklEKQotICAgICAgICBzZXRS
b290TGF5ZXJJRChzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcik7Ci0KLSAgICBzeW5jSW1hZ2VC
YWNraW5ncyhzdGF0ZSk7Ci0gICAgc3luY1VwZGF0ZUF0bGFzZXMoc3RhdGUpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5sYXllcnNUb1VwZGF0ZS5zaXplKCk7ICsraSkKLSAg
ICAgICAgc2V0TGF5ZXJTdGF0ZShzdGF0ZS5sYXllcnNUb1VwZGF0ZVtpXS5maXJzdCwgc3RhdGUu
bGF5ZXJzVG9VcGRhdGVbaV0uc2Vjb25kKTsKLQotICAgIGNvbW1pdFBlbmRpbmdCYWNraW5nU3Rv
cmVPcGVyYXRpb25zKCk7Ci0gICAgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQo
KTsKLQotICAgIC8vIFRoZSBwZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRo
ZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCi0g
ICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOwotICAg
IGRpc3BhdGNoT25NYWluVGhyZWFkKFs9XSB7Ci0gICAgICAgIHByb3RlY3Rvci0+cmVuZGVyTmV4
dEZyYW1lKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpy
ZW5kZXJOZXh0RnJhbWUoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PnJlbmRlck5leHRGcmFtZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
ZW5zdXJlUm9vdExheWVyKCkKLXsKLSAgICBpZiAobV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcm9vdExheWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyTGF5
ZXI+KCk7Ci0gICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwotICAgIG1f
cm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOwotCi0gICAgLy8gVGhlIHJvb3QgbGF5
ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91
dC4KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKLQotICAg
IEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIG1fcm9vdExheWVyLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpzeW5jUmVtb3RlQ29udGVudCgpCi17Ci0gICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdl
cyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2
ZSBHTCBjb250ZXh0LgotICAgIGVuc3VyZVJvb3RMYXllcigpOwotCi0gICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPj4gcmVuZGVyUXVldWU7Ci0gICAgYm9vbCBjYWxsZWRPbk1haW5UaHJl
YWQgPSBXVEY6OmlzTWFpblRocmVhZCgpOwotICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQot
ICAgICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgubG9jaygpOwotICAgIHJlbmRlclF1ZXVlID0gV1RG
Ojptb3ZlKG1fcmVuZGVyUXVldWUpOwotICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQotICAg
ICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgudW5sb2NrKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uIDogcmVuZGVyUXVldWUpCi0gICAgICAgIGZ1bmN0aW9uKCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUdMUmVzb3VyY2VzKCkKLXsKLSAgICBtX2ltYWdlQmFj
a2luZ3MuY2xlYXIoKTsKLSAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5jbGVhcigpOwotI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY2xlYXIo
KTsKLSNlbmRpZgotICAgIG1fc3VyZmFjZXMuY2xlYXIoKTsKLQotICAgIG1fcm9vdExheWVyID0g
bnVsbHB0cjsKLSAgICBtX3Jvb3RMYXllcklEID0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRDsK
LSAgICBtX2xheWVycy5jbGVhcigpOwotICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKLSAgICBt
X3RleHR1cmVNYXBwZXIgPSBudWxscHRyOwotICAgIG1fYmFja2luZ1N0b3Jlcy5jbGVhcigpOwot
ICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwotCi0gICAgc2V0
QWN0aXZlKGZhbHNlKTsKLQotICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHBy
b3RlY3Rvcih0aGlzKTsKLSAgICBkaXNwYXRjaE9uTWFpblRocmVhZChbPV0gewotICAgICAgICBw
cm90ZWN0b3ItPnB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIH0pOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlzcGF0Y2hDb21taXRTY3JvbGxPZmZzZXQodWludDMyX3Qg
bGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQotewotICAgIG1fY2xpZW50LT5jb21taXRT
Y3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRT
aXplJiBvZmZzZXQpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJv
dGVjdG9yKHRoaXMpOwotICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKFs9XSB7Ci0gICAgICAgIHBy
b3RlY3Rvci0+ZGlzcGF0Y2hDb21taXRTY3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0KTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0
b3JlcygpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+cHVyZ2VCYWNr
aW5nU3RvcmVzKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXll
ckFuaW1hdGlvbnNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5hbmlt
YXRpb25zQ2hhbmdlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldEFuaW1hdGlv
bnMoc3RhdGUuYW5pbWF0aW9ucyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpkZXRhY2goKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9yZW5kZXJR
dWV1ZS5jbGVhcigpOwotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmFwcGVuZFVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24p
Ci17Ci0gICAgaWYgKCFtX2lzQWN0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0
ZXgpOwotICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKFdURjo6bW92ZShmdW5jdGlvbikpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQot
ewotICAgIGlmIChtX2lzQWN0aXZlID09IGFjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSGF2ZSB0byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KLSAgICAvLyBJZiB0
aGVyZSBhcmUgc29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRoZW4gdGhv
c2UgdXBkYXRlcyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2RlCi0gICAg
Ly8gYW5kIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgot
ICAgIG1fcmVuZGVyUXVldWUuY2xlYXIoKTsKLSAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwotICAg
IGlmIChtX2lzQWN0aXZlKSB7Ci0gICAgICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU+IHByb3RlY3Rvcih0aGlzKTsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsK
LSAgICAgICAgICAgIHByb3RlY3Rvci0+cmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgICAgIH0pOwot
ICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xv
cjsKLX0KLQotVGV4dHVyZU1hcHBlckxheWVyKiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZp
bmRTY3JvbGxhYmxlQ29udGVudHNMYXllckF0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewot
ICAgIHJldHVybiByb290TGF5ZXIoKSA/IHJvb3RMYXllcigpLT5maW5kU2Nyb2xsYWJsZUNvbnRl
bnRzTGF5ZXJBdChwb2ludCkgOiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDE2NGJhNWJiZjJjMjQ4OWE2OTJmODJiNDdkY2Y5ZTlmYjA0MTIzZWUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICAgIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFj
ZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJMYXllci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmlt
aXRpdmVzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOwotCi1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCgpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bmRlck5leHRGcmFtZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklE
LCBjb25zdCBJbnRTaXplJiBvZmZzZXQpID0gMDsKLX07Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU+LCBwdWJsaWMgVGV4dHVyZU1hcHBlckxheWVyOjpTY3JvbGxpbmdDbGllbnQgewot
cHVibGljOgotICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNz
U2NlbmUoKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IEZsb2F0UmVjdCYsIFRleHR1cmVNYXBwZXI6OlBh
aW50RmxhZ3MgPSAwKTsKLSAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKTsKLSAgICB2b2lkIGRldGFjaCgpOwotICAgIHZvaWQgYXBwZW5kVXBkYXRlKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPik7Ci0KLSAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIGZp
bmRTY3JvbGxhYmxlQ29udGVudHNMYXllckF0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwg
Y29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKLQotICAgIC8vIFRoZSBwYWludGluZyB0aHJlYWQgbXVz
dCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byB1c2UgYmVsb3cgdHdvIG1ldGhvZHMsIGJlY2F1c2Ug
dHdvIG1ldGhvZHMgYWNjZXNzIG1lbWJlcnMgdGhhdCB0aGUgbWFpbiB0aHJlYWQgbWFuYWdlcy4g
U2VlIG1fY2xpZW50LgotICAgIC8vIEN1cnJlbnRseSwgUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFp
bnROb2RlKCkgbG9ja3MgdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBjYWxsaW5nIGJvdGggbWV0aG9k
cy4KLSAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKLQotICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX2lzQWN0aXZlOyB9Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7Ci0K
LSAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
Jik7Ci0KLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZv
aWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NCYWNrZ3JvdW5k
ID0gZW5hYmxlOyB9Ci0KLSAgICB2b2lkIHNldFZpZXdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKSB7IG1fdmlld0JhY2tncm91bmRDb2xvciA9IGNvbG9yOyB9Ci0gICAgQ29sb3Ig
dmlld0JhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlld0JhY2tncm91bmRDb2xv
cjsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXll
cklEKTsKLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLSAgICB2b2lkIHNldExheWVyQ2hp
bGRyZW5JZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZvaWQgdXBkYXRlVGlsZXNJZk5lZWRlZChUZXh0dXJlTWFw
cGVyTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZv
aWQgY3JlYXRlVGlsZXNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZXNJZk5lZWRlZChU
ZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYp
OwotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLSAgICB2b2lkIHNldExheWVy
QW5pbWF0aW9uc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9p
ZCBjcmVhdGVQbGF0Zm9ybUxheWVySWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLSAgICB2b2lkIHN5bmNQbGF0Zm9ybUxh
eWVySWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKLSAgICB2b2lkIGRlc3Ryb3lQbGF0Zm9ybUxheWVySWZOZWVkZWQoVGV4
dHVyZU1hcHBlckxheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsK
LSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChUZXh0dXJlTWFw
cGVyTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAg
dm9pZCBzeW5jVXBkYXRlQXRsYXNlcyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsK
LSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPik7Ci0gICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lEKTsKLQotICAgIHZvaWQgc3luY0ltYWdlQmFja2luZ3MoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJik7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2
b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
Ci0KLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRlZExheWVySUQg
aWQpCi0gICAgewotICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMoaWQpKTsKLSAgICAg
ICAgQVNTRVJUKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwotICAgICAgICByZXR1
cm4gbV9sYXllcnMuZ2V0KGlkKTsKLSAgICB9Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBnZXRM
YXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJM
YXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLQotICAgIHZv
aWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRM
YXllcnMoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQoc3RkOjpmdW5jdGlvbjx2
b2lkKCk+KTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKTsKLSAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgdm9pZCBjcmVh
dGVMYXllcihDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEKTsKLQotICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihUZXh0
dXJlTWFwcGVyTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJl
bW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBlbnN1cmVSb290
TGF5ZXIoKTsKLSAgICB2b2lkIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7
Ci0KLSAgICB2b2lkIHByZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJMYXll
ciopOwotICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxh
eWVyKik7Ci0gICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChUZXh0dXJlTWFwcGVy
TGF5ZXIqKTsKLSAgICB2b2lkIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFRleHR1
cmVNYXBwZXJMYXllciopOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbW1pdFNjcm9sbE9mZnNldCh1
aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpOwotCi0gICAgLy8gUmVuZGVy
IHF1ZXVlIGNhbiBiZSBhY2Nlc3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQYWlu
dE5vZGUgY2FsbCBzdGFjayEKLSAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX3Jl
bmRlclF1ZXVlOwotICAgIE11dGV4IG1fcmVuZGVyUXVldWVNdXRleDsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0KLSAgICB0eXBlZGVmIEhh
c2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlPiA+IEltYWdlQmFja2luZ01hcDsKLSAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJh
Y2tpbmdzOwotICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9y
ZWxlYXNlZEltYWdlQmFja2luZ3M7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8VGV4dHVyZU1hcHBl
ckxheWVyKiwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IEJhY2tpbmdTdG9yZU1h
cDsKLSAgICBCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVzOwotCi0gICAgSGFzaFNldDxS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzOwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFRleHR1cmVNYXBwZXJMYXllciosIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwotICAgIFN1cmZhY2VCYWNraW5nU3Rv
cmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKLSNlbmRpZgotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQzMl90IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+ID4g
U3VyZmFjZU1hcDsKLSAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZXM7Ci0KLSAgICAvLyBCZWxvdyB0
d28gbWVtYmVycyBhcmUgYWNjZXNzZWQgYnkgb25seSB0aGUgbWFpbiB0aHJlYWQuIFRoZSBwYWlu
dGluZyB0aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byBhY2Nlc3MgYm90aCBtZW1i
ZXJzLgotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCogbV9jbGllbnQ7Ci0gICAg
Ym9vbCBtX2lzQWN0aXZlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXll
cj4gbV9yb290TGF5ZXI7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklE
LCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPj4gTGF5ZXJNYXA7Ci0gICAgTGF5
ZXJNYXAgbV9sYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwg
VGV4dHVyZU1hcHBlckxheWVyKj4gTGF5ZXJSYXdQdHJNYXA7Ci0gICAgTGF5ZXJSYXdQdHJNYXAg
bV9maXhlZExheWVyczsKLSAgICBDb29yZGluYXRlZExheWVySUQgbV9yb290TGF5ZXJJRDsKLSAg
ICBGbG9hdFBvaW50IG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludCBtX3JlbmRlcmVk
Q29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAg
ICBDb2xvciBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3I7Ci0gICAgYm9vbCBtX3NldERyYXdzQmFja2dy
b3VuZDsKLQotICAgIFRleHR1cmVNYXBwZXJGUFNDb3VudGVyIG1fZnBzQ291bnRlcjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCi0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCAwNTEyNzliOTZkYjcyYzFjOGUwMjEzNjNjZWJiYzQ4ODA2
ZmQyMzdhLi4wMWUzNGVhMGJmOWY4OGZiNmZlOTZhNDY5YTNlMjIzNjFmMGE4ZDFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTEwLDcgKzExMCw5IEBAIGxpc3QoQVBQRU5EIFdlYktp
dDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCiAKKyAgICBVSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBVSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCisg
ICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmNwcAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1BhZ2VW
aWV3cG9ydENvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViUGFnZVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS0Nvb3JkaW5hdGVkU2Nl
bmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db29yZGluYXRlZEdyYXBoaWNz
L1dLQ29vcmRpbmF0ZWRTY2VuZS5jcHAKaW5kZXggZWNhNDBjZmQ2ZThhYzQwNjFjZDEyNzAyYzFk
YWZkOWRhNTQ3N2RmNC4uMjY0NGZiZDE2NThlNmFmYjZjZTEwMzhlMDA0NjlhZTAyYmRjYjgyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db29yZGluYXRlZEdyYXBo
aWNzL1dLQ29vcmRpbmF0ZWRTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db29yZGluYXRlZEdyYXBoaWNzL1dLQ29vcmRpbmF0ZWRTY2VuZS5jcHAKQEAgLTI2LDEz
ICsyNiwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAi
V0tDb29yZGluYXRlZFNjZW5lLmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuaCIKICNpbmNsdWRlICJXS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0LmgiCi0KLSNpbmNsdWRl
IDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckxheWVyLmg+CiAKIFdLX0VYUE9SVCBXS0Nvb3JkaW5hdGVkU2NlbmVMYXll
ciBXS0Nvb3JkaW5hdGVkU2NlbmVGaW5kU2Nyb2xsYWJsZUNvbnRlbnRzTGF5ZXJBdChXS0Nvb3Jk
aW5hdGVkU2NlbmUgc2NlbmUsIFdLUG9pbnQgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIzYThjYzkxNWYxZDQ4MWUwZmIz
NWIyYjc5MjliYmEzMGI1ZGE5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApA
QCAtMCwwICsxLDE4NyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5o
IgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZFN1cmZhY2UuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1
ZmZlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBpZiAoIW1fc3VyZmFj
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHRpbGVSZWN0KG1fdGlsZVJlY3Qp
OworICAgIHRpbGVSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7CisgICAgYm9vbCBzaG91bGRSZXNl
dCA9IGZhbHNlOworICAgIGlmICh0aWxlUmVjdCAhPSByZWN0KCkpIHsKKyAgICAgICAgc2V0UmVj
dCh0aWxlUmVjdCk7CisgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7CisgICAgaWYgKCF0
ZXh0dXJlKSB7CisgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJl
KCk7CisgICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5nZXQoKSk7CisgICAgICAgIHNob3VsZFJl
c2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVy
ZVNpemUoKS53aWR0aCgpID49IG1fdGlsZVJlY3Quc2l6ZSgpLndpZHRoKCkpOworICAgIEFTU0VS
VCh0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhlaWdodCgpID49IG1fdGlsZVJlY3Qu
c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgIHRleHR1cmUt
PnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKSk7CisK
KyAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVyZSwgbV9zb3VyY2VSZWN0LCBtX3N1
cmZhY2VPZmZzZXQpOworICAgIG1fc3VyZmFjZS5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3NvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OworICAgIG1fdGlsZVJlY3QgPSB0aWxlUmVjdDsKKyAgICBtX3N1cmZhY2VP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVmZmVyOworfQorCit2b2lkIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQzMl90IGlkLCBmbG9hdCBzY2FsZSkK
K3sKKyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKHNjYWxl
KSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQoreworICAgIEFTU0VSVChtX3RpbGVzLmNvbnRh
aW5zKGlkKSk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFkZChpZCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGtl
eSA6IG1fdGlsZXMua2V5cygpKQorICAgICAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGtleSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUodWludDMyX3QgaWQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Cisg
ICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZm
ZXIsIG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3Ig
KENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7CisgICAgICAgIGlmICh0ZXh0dXJl
KQorICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfQorCisgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgbV9wZW5kaW5nU2l6ZSA9
IHNpemU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VGlsZXNUb1Rl
eHR1cmVNYXBwZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4mIHRpbGVzLCBUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0aWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgdGlsZXNbaV0tPnBhaW50
KHRleHR1cmVNYXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwgY2FsY3VsYXRlRXhwb3NlZFRpbGVF
ZGdlcyhyZWN0LCB0aWxlc1tpXS0+cmVjdCgpKSk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6cmVjdFRvUmVjdChyZWN0KCksIHRhcmdldFJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fdGlsZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFtX3NpemUuaXNaZXJvKCkpOwor
CisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gdGlsZXNUb1BhaW50OworICAgIFZlY3Rv
cjxUZXh0dXJlTWFwcGVyVGlsZSo+IHByZXZpb3VzVGlsZXNUb1BhaW50OworCisgICAgLy8gV2Ug
aGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgd2UgcGFpbnQsIGluIGNhc2UgdGhlIG9wYWNpdHkg
aGFzIGNoYW5nZWQuCisgICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OworICAgIGZvciAoYXV0byYg
dGlsZSA6IG1fdGlsZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0aWxlLnNjYWxlKCkgPT0gbV9z
Y2FsZSkgeworICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7CisgICAgICAg
ICAgICBjb3ZlcmVkUmVjdC51bml0ZSh0aWxlLnJlY3QoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgc2hvdyB0aGUgcHJldmlvdXMgdGlsZSBp
ZiB0aGUgb3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZmZWN0IGxvb2tzIGxpa2UgYSBidWcu
CisgICAgICAgIC8vIFdlIHNob3cgdGhlIHByZXZpb3VzLXNjYWxlIHRpbGUgYW55d2F5IGlmIGl0
IGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggYW55IGN1cnJlbnQtc2NhbGUgdGlsZS4KKyAgICAgICAg
aWYgKG9wYWNpdHkgPCAwLjk1ICYmIGNvdmVyZWRSZWN0LmludGVyc2VjdHModGlsZS5yZWN0KCkp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcHJldmlvdXNUaWxlc1RvUGFpbnQu
YXBwZW5kKCZ0aWxlKTsKKyAgICB9CisKKyAgICAvLyB0YXJnZXRSZWN0IGlzIG9uIHRoZSBjb250
ZW50cyBjb29yZGluYXRlIHN5c3RlbSwgc28gd2UgbXVzdCBjb21wYXJlIHR3byByZWN0cyBvbiB0
aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgLy8gU2VlIFRpbGVkQmFja2luZ1N0
b3JlLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNm
b3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworCisgICAgcGFpbnRU
aWxlc1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9QYWludCwgdGV4dHVyZU1hcHBlciwg
YWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIHJlY3QoKSk7CisgICAgcGFpbnRUaWxlc1RvVGV4
dHVyZU1hcHBlcih0aWxlc1RvUGFpbnQsIHRleHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNmb3Jt
LCBvcGFjaXR5LCByZWN0KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpk
cmF3Qm9yZGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IENvbG9yJiBib3Jk
ZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNm
b3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzLnZh
bHVlcygpKQorICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3Qm9yZGVyKGJvcmRlckNvbG9yLCBi
b3JkZXJXaWR0aCwgdGlsZS5yZWN0KCksIGFkanVzdGVkVHJhbnNmb3JtKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZXIsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xv
ciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNm
b3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOwor
ICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMudmFsdWVzKCkpCisgICAgICAgIHRleHR1cmVN
YXBwZXItPmRyYXdOdW1iZXIocmVwYWludENvdW50LCBib3JkZXJDb2xvciwgdGlsZS5yZWN0KCku
bG9jYXRpb24oKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyKQoreworICAgIGlmICghbV9wZW5kaW5nU2l6ZS5pc1plcm8oKSkgeworICAgICAgICBtX3Np
emUgPSBtX3BlbmRpbmdTaXplOworICAgICAgICBtX3BlbmRpbmdTaXplID0gRmxvYXRTaXplKCk7
CisgICAgfQorCisgICAgZm9yIChhdXRvJiB0aWxlVG9SZW1vdmUgOiBtX3RpbGVzVG9SZW1vdmUp
CisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHRpbGVUb1JlbW92ZSk7CisgICAgbV90aWxlc1RvUmVt
b3ZlLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzLnZhbHVlcygpKQor
ICAgICAgICB0aWxlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjk3MjEzMWVi
MmNhYjkxYzAwNjI4NWMxZTU5Y2U5ZWEzMTRhZGIyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAorI2RlZmluZSBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJUaWxlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlIDogcHVibGljIFRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQorICAg
ICAgICA6IFRleHR1cmVNYXBwZXJUaWxlKEZsb2F0UmVjdCgpKQorICAgICAgICAsIG1fc2NhbGUo
c2NhbGUpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NhbGU7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqKTsK
KyAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYpOwor
Citwcml2YXRlOgorICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAg
ICBJbnRSZWN0IG1fc291cmNlUmVjdDsKKyAgICBJbnRSZWN0IG1fdGlsZVJlY3Q7CisgICAgSW50
UG9pbnQgbV9zdXJmYWNlT2Zmc2V0OworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCitjbGFzcyBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBmbG9hdCk7
CisgICAgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCByZW1vdmVB
bGxUaWxlcygpOworICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+LCBj
b25zdCBJbnRQb2ludCYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUpOyB9CisgICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKik7
CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdCb3JkZXIoVGV4
dHVyZU1hcHBlciosIGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdSZXBhaW50Q291bnRlcihUZXh0dXJlTWFwcGVyKiwgaW50IHJlcGFpbnRDb3Vu
dCwgY29uc3QgQ29sb3ImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
KCkKKyAgICAgICAgOiBtX3NjYWxlKDEuKQorICAgIHsgfQorICAgIHZvaWQgcGFpbnRUaWxlc1Rv
VGV4dHVyZU1hcHBlcihWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiYsIFRleHR1cmVNYXBwZXIq
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJl
Y3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOyB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT4gQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmVUaWxlTWFwOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcCBtX3RpbGVz
OworICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1fdGlsZXNUb1JlbW92ZTsKKyAgICAvLyBGSVhNRTog
bV9wZW5kaW5nU2l6ZSBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciB0aGUgZm9sbG93aW5nIGJ1ZyBp
cyBmaXhlZDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAor
ICAgIEZsb2F0U2l6ZSBtX3BlbmRpbmdTaXplOworICAgIEZsb2F0U2l6ZSBtX3NpemU7CisgICAg
ZmxvYXQgbV9zY2FsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJjYWQwZGIzM2UxMDNkMWY0ZmI1MzE3NzBhYzg0OTg5M2RiYmRhMmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0wLDAgKzEsNzI4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCisKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdM
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSA8d3RmL0F0b21p
Y3MuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaXNwYXRjaE9uTWFpblRocmVhZChz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24pCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgp
KQorICAgICAgICBmdW5jdGlvbigpOworICAgIGVsc2UKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChXVEY6Om1vdmUoZnVuY3Rpb24pKTsKK30KKworc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRIYXZl
QmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxh
eWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+Y29udGVudHNBcmVWaXNpYmxlKCkgJiYgIWxh
eWVyLT5zaXplKCkuaXNFbXB0eSgpOworfQorCitDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCisg
ICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCisgICAgLCBtX2Jh
Y2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3Io
Q29sb3I6OndoaXRlKQorICAgICwgbV9zZXREcmF3c0JhY2tncm91bmQoZmFsc2UpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp+
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkKK3sKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIFRl
eHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKK3sKKyAgICBpZiAoIW1fdGV4dHVy
ZU1hcHBlcikgeworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgICAgIHN0YXRpY19jYXN0PFRleHR1
cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyh0cnVlKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVy
LT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAg
c3luY1JlbW90ZUNvbnRlbnQoKTsKKworICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMo
KTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIo
KTsKKyAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGN1
cnJlbnRSb290TGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsK
KyAgICBjdXJyZW50Um9vdExheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseSgpOworICAg
IG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdzKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7CisK
KyAgICBpZiAobV9zZXREcmF3c0JhY2tncm91bmQpIHsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBt
YWtlUkdCQTMyRnJvbUZsb2F0cyhtX2JhY2tncm91bmRDb2xvci5yZWQoKSwKKyAgICAgICAgICAg
IG1fYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIG1fYmFja2dyb3VuZENvbG9yLmJsdWUoKSwKKyAg
ICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yLmFscGhhKCkgKiBvcGFjaXR5KTsKKyAgICAgICAg
bV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgQ29sb3IocmdiYSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJl
TWFwcGVyLmdldCgpKS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgY29udGV4dC0+Y2xl
YXJDb2xvcihtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IucmVkKCkgLyAyNTUuMGYsIG1fdmlld0JhY2tn
cm91bmRDb2xvci5ncmVlbigpIC8gMjU1LjBmLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IuYmx1ZSgp
IC8gMjU1LjBmLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSAvIDI1NS4wZik7CisgICAg
ICAgIGNvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsK
KyAgICB9CisKKyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkg
fHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290
TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIH0KKworICAgIGN1cnJlbnRSb290TGF5
ZXItPnBhaW50KCk7CisgICAgbV9mcHNDb3VudGVyLnVwZGF0ZUZQU0FuZERpc3BsYXkobV90ZXh0
dXJlTWFwcGVyLmdldCgpLCBjbGlwUmVjdC5sb2NhdGlvbigpLCBtYXRyaXgpOworICAgIG1fdGV4
dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmco
KTsKKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5u
aW5nQW5pbWF0aW9ucygpKSB7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsK
KyAgICAgICAgICAgIHByb3RlY3Rvci0+dXBkYXRlVmlld3BvcnQoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFpbnRUb0dyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KQoreworICAg
IGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJl
TWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRp
b25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKKyAgICBzeW5jUmVtb3Rl
Q29udGVudCgpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSByb290TGF5ZXIoKTsK
KworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBwZXIt
PnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBw
ZXItPmJlZ2luUGFpbnRpbmcoKTsKKworICAgIEludFJlY3QgY2xpcFJlY3QgPSBncmFwaGljc0Nv
bnRleHQuY2xpcEJvdW5kcygpOworICAgIGlmIChtX3NldERyYXdzQmFja2dyb3VuZCkKKyAgICAg
ICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0
dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgbV92aWV3QmFja2dyb3VuZENvbG9yKTsKKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1f
ZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5KG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgY2xp
cFJlY3QubG9jYXRpb24oKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwor
ICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0
aW9uOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVmlld3BvcnQo
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQoreworICAgIGlmICht
X2ZpeGVkTGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRml4ZWQg
bGF5ZXIgcG9zaXRpb25zIGFyZSB1cGRhdGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB3aGVuIHdlIHVw
ZGF0ZSB0aGUgdmlzaWJsZSBjb250ZW50cyByZWN0IC8gc2Nyb2xsIHBvc2l0aW9uLgorICAgIC8v
IElmIHdlIHdhbnQgdGhvc2UgbGF5ZXJzIHRvIGZvbGxvdyBhY2N1cmF0ZWx5IHRoZSB2aWV3cG9y
dCB3aGVuIHdlIG1vdmUgYmV0d2VlbiB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlcywgd2UgaGF2ZSB0
byBvZmZzZXQKKyAgICAvLyB0aGVtIGJ5IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBv
c2l0aW9uIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0IHVzZWQgZm9yIHRoZSBsYXN0
IGxheW91dC4KKyAgICBGbG9hdFNpemUgZGVsdGEgPSBtX3Njcm9sbFBvc2l0aW9uIC0gbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CisKKyAgICBmb3IgKGF1dG8mIGZpeGVkTGF5ZXIg
OiBtX2ZpeGVkTGF5ZXJzLnZhbHVlcygpKQorICAgICAgICBmaXhlZExheWVyLT5zZXRTY3JvbGxQ
b3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOworfQorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlUGxhdGZvcm1MYXllcklm
TmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIXN0YXRlLnBsYXRmb3JtTGF5ZXJUb2tl
bi5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U3VyZmFjZUJhY2tpbmdTdG9yZT4gcGxhdGZvcm1MYXllckJhY2tpbmdTdG9yZShUZXh0dXJlTWFw
cGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1fc3VyZmFjZUJhY2tpbmdT
dG9yZXMuc2V0KGxheWVyLCBwbGF0Zm9ybUxheWVyQmFja2luZ1N0b3JlKTsKKyAgICBwbGF0Zm9y
bUxheWVyQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoR3JhcGhpY3NTdXJmYWNlOjpj
cmVhdGUoc3RhdGUucGxhdGZvcm1MYXllclNpemUsIHN0YXRlLnBsYXRmb3JtTGF5ZXJTdXJmYWNl
RmxhZ3MsIHN0YXRlLnBsYXRmb3JtTGF5ZXJUb2tlbikpOworICAgIGxheWVyLT5zZXRDb250ZW50
c0xheWVyKHBsYXRmb3JtTGF5ZXJCYWNraW5nU3RvcmUuZ2V0KCkpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3Rh
dGUpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7CisKKyAgICBpZiAoc3RhdGUucGxh
dGZvcm1MYXllckNoYW5nZWQpIHsKKyAgICAgICAgZGVzdHJveVBsYXRmb3JtTGF5ZXJJZk5lZWRl
ZChsYXllciwgc3RhdGUpOworICAgICAgICBjcmVhdGVQbGF0Zm9ybUxheWVySWZOZWVkZWQobGF5
ZXIsIHN0YXRlKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUucGxhdGZvcm1MYXllclNob3VsZFN3
YXBCdWZmZXJzKSB7CisgICAgICAgIEFTU0VSVChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRh
aW5zKGxheWVyKSk7CisgICAgICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5maW5kKGxheWVyKTsKKyAgICAgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBwbGF0Zm9ybUxheWVyQmFja2luZ1N0b3Jl
ID0gaXQtPnZhbHVlOworICAgICAgICBwbGF0Zm9ybUxheWVyQmFja2luZ1N0b3JlLT5zd2FwQnVm
ZmVyc0lmTmVlZGVkKHN0YXRlLnBsYXRmb3JtTGF5ZXJGcm9udEJ1ZmZlcik7CisgICAgfQorfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveVBsYXRmb3JtTGF5ZXJJZk5l
ZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlLnBsYXRmb3JtTGF5ZXJUb2tlbi5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
cmVtb3ZlKGxheWVyKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNMYXllcigwKTsKK30KKyNlbmRp
ZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnRJ
Zk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFsYXllci0+aXNTaG93aW5nUmVwYWlu
dENvdW50ZXIoKSB8fCAhc3RhdGUucmVwYWludENvdW50Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbGF5ZXItPnNldFJlcGFpbnRDb3VudChzdGF0ZS5yZXBhaW50Q291bnQpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVk
KFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIXN0YXRlLmNoaWxkcmVuQ2hhbmdlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJMYXllcio+IGNoaWxkcmVuOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5jaGlsZHJlbi5zaXplKCk7ICsraSkg
eworICAgICAgICBDb29yZGluYXRlZExheWVySUQgY2hpbGRJRCA9IHN0YXRlLmNoaWxkcmVuW2ld
OworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQp
OworICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgIH0KKyAgICBsYXllci0+c2V0
Q2hpbGRyZW4oY2hpbGRyZW4pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIGlmICghc3RhdGUu
ZmlsdGVyc0NoYW5nZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRGaWx0ZXJz
KHN0YXRlLmZpbHRlcnMpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJiBsYXllclN0YXRlKQoreworICAgIEFTU0VSVChtX3Jvb3RMYXllcklEICE9
IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5
ZXIgPSBsYXllckJ5SUQoaWQpOworCisgICAgaWYgKGxheWVyU3RhdGUucG9zaXRpb25DaGFuZ2Vk
KQorICAgICAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJTdGF0ZS5wb3MpOworCisgICAgaWYg
KGxheWVyU3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0QW5jaG9y
UG9pbnQobGF5ZXJTdGF0ZS5hbmNob3JQb2ludCk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5zaXpl
Q2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldFNpemUobGF5ZXJTdGF0ZS5zaXplKTsKKworICAg
IGlmIChsYXllclN0YXRlLnRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRUcmFu
c2Zvcm0obGF5ZXJTdGF0ZS50cmFuc2Zvcm0pOworCisgICAgaWYgKGxheWVyU3RhdGUuY2hpbGRy
ZW5UcmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
bGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jb250
ZW50c1JlY3RDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVyU3Rh
dGUuY29udGVudHNSZWN0KTsKKworICAgIGlmIChsYXllclN0YXRlLmNvbnRlbnRzVGlsaW5nQ2hh
bmdlZCkgeworICAgICAgICBsYXllci0+c2V0Q29udGVudHNUaWxlUGhhc2UobGF5ZXJTdGF0ZS5j
b250ZW50c1RpbGVQaGFzZSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RpbGVTaXplKGxh
eWVyU3RhdGUuY29udGVudHNUaWxlU2l6ZSk7CisgICAgfQorCisgICAgaWYgKGxheWVyU3RhdGUu
b3BhY2l0eUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVyU3RhdGUub3Bh
Y2l0eSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAgICAgICAg
bGF5ZXItPnNldFNvbGlkQ29sb3IobGF5ZXJTdGF0ZS5zb2xpZENvbG9yKTsKKworICAgIGlmIChs
YXllclN0YXRlLmRlYnVnQm9yZGVyQ29sb3JDaGFuZ2VkIHx8IGxheWVyU3RhdGUuZGVidWdCb3Jk
ZXJXaWR0aENoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXREZWJ1Z1Zpc3VhbHMobGF5ZXJTdGF0
ZS5zaG93RGVidWdCb3JkZXJzLCBsYXllclN0YXRlLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyU3Rh
dGUuZGVidWdCb3JkZXJXaWR0aCwgbGF5ZXJTdGF0ZS5zaG93UmVwYWludENvdW50ZXIpOworCisg
ICAgaWYgKGxheWVyU3RhdGUucmVwbGljYUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRSZXBs
aWNhTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJTdGF0ZS5yZXBsaWNhKSk7CisKKyAg
ICBpZiAobGF5ZXJTdGF0ZS5tYXNrQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldE1hc2tMYXll
cihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllclN0YXRlLm1hc2spKTsKKworICAgIGlmIChsYXll
clN0YXRlLmltYWdlQ2hhbmdlZCkKKyAgICAgICAgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihs
YXllciwgbGF5ZXJTdGF0ZS5pbWFnZUlEKTsKKworICAgIGlmIChsYXllclN0YXRlLmZsYWdzQ2hh
bmdlZCkgeworICAgICAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJTdGF0ZS5jb250
ZW50c09wYXF1ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJTdGF0ZS5k
cmF3c0NvbnRlbnQpOworICAgICAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVyU3Rh
dGUuY29udGVudHNWaXNpYmxlKTsKKyAgICAgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0
eShsYXllclN0YXRlLmJhY2tmYWNlVmlzaWJsZSk7CisKKyAgICAgICAgLy8gTmV2ZXIgY2xpcCB0
aGUgcm9vdCBsYXllci4KKyAgICAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoaWQgPT0gbV9y
b290TGF5ZXJJRCA/IGZhbHNlIDogbGF5ZXJTdGF0ZS5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAg
bGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVyU3RhdGUucHJlc2VydmVzM0QpOworCisgICAgICAg
IGJvb2wgZml4ZWRUb1ZpZXdwb3J0Q2hhbmdlZCA9IGxheWVyLT5maXhlZFRvVmlld3BvcnQoKSAh
PSBsYXllclN0YXRlLmZpeGVkVG9WaWV3cG9ydDsKKyAgICAgICAgbGF5ZXItPnNldEZpeGVkVG9W
aWV3cG9ydChsYXllclN0YXRlLmZpeGVkVG9WaWV3cG9ydCk7CisgICAgICAgIGlmIChmaXhlZFRv
Vmlld3BvcnRDaGFuZ2VkKSB7CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5maXhlZFRvVmll
d3BvcnQpCisgICAgICAgICAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxheWVyKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7
CisgICAgICAgIH0KKworICAgICAgICBsYXllci0+c2V0SXNTY3JvbGxhYmxlKGxheWVyU3RhdGUu
aXNTY3JvbGxhYmxlKTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jb21taXR0ZWRTY3Jv
bGxPZmZzZXRDaGFuZ2VkKQorICAgICAgICBsYXllci0+ZGlkQ29tbWl0U2Nyb2xsT2Zmc2V0KGxh
eWVyU3RhdGUuY29tbWl0dGVkU2Nyb2xsT2Zmc2V0KTsKKworICAgIHByZXBhcmVDb250ZW50QmFj
a2luZ1N0b3JlKGxheWVyKTsKKworICAgIC8vIEFwcGx5IE9wZXJhdGlvbnMuCisgICAgc2V0TGF5
ZXJDaGlsZHJlbklmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICBjcmVhdGVUaWxlc0lm
TmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICByZW1vdmVUaWxlc0lmTmVlZGVkKGxheWVy
LCBsYXllclN0YXRlKTsKKyAgICB1cGRhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRl
KTsKKyAgICBzZXRMYXllckZpbHRlcnNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisgICAg
c2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIHN5bmNQbGF0Zm9ybUxheWVySWZOZWVkZWQobGF5ZXIsIGxh
eWVyU3RhdGUpOworI2VuZGlmCisgICAgc2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChsYXll
ciwgbGF5ZXJTdGF0ZSk7Cit9CisKK1RleHR1cmVNYXBwZXJMYXllciogQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQgaWQpCit7
CisgICAgcmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKSA/IGxheWVyQnlJ
RChpZCkgOiAwOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCit7CisgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGlkcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGNy
ZWF0ZUxheWVyKGlkc1tpbmRleF0pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IG5ld0xheWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUZXh0
dXJlTWFwcGVyTGF5ZXI+KCk7CisgICAgbmV3TGF5ZXItPnNldElEKGlkKTsKKyAgICBuZXdMYXll
ci0+c2V0U2Nyb2xsQ2xpZW50KHRoaXMpOworICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGOjptb3Zl
KG5ld0xheWVyKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQoreworICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBsYXllcklEcy5zaXplKCk7ICsraW5kZXgp
CisgICAgICAgIGRlbGV0ZUxheWVyKGxheWVySURzW2luZGV4XSk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBsYXllciA9IG1f
bGF5ZXJzLnRha2UobGF5ZXJJRCk7CisgICAgQVNTRVJUKGxheWVyKTsKKworICAgIG1fYmFja2lu
Z1N0b3Jlcy5yZW1vdmUobGF5ZXIuZ2V0KCkpOworICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxh
eWVySUQpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIG1fc3VyZmFjZUJhY2tpbmdT
dG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQp
Cit7CisgICAgQVNTRVJUKGxheWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Cisg
ICAgQVNTRVJUKG1fcm9vdExheWVySUQgPT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7CisK
KyAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKKworICAgIFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgQVNTRVJUKG1fcm9vdExheWVyLT5jaGls
ZHJlbigpLmlzRW1wdHkoKSk7CisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnByZXBhcmVDb250ZW50QmFja2luZ1N0
b3JlKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCit7CisgICAgaWYgKCFsYXllclNob3VsZEhh
dmVCYWNraW5nU3RvcmUobGF5ZXIpKSB7CisgICAgICAgIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKGxheWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNyZWF0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGxheWVyKTsKKyAgICByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6
ZShsYXllcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyKQoreworICAgIGlmICht
X2JhY2tpbmdTdG9yZXMuY29udGFpbnMobGF5ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1fYmFja2luZ1N0b3Jlcy5hZGQobGF5ZXIsIGJh
Y2tpbmdTdG9yZSk7CisgICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllcikKK3sKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy50YWtlKGxheWVy
KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXIt
PnNldEJhY2tpbmdTdG9yZSgwKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFRleHR1cmVNYXBwZXJMYXllciogbGF5
ZXIpCit7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsK
KyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUobGF5ZXItPnNpemUoKSk7CisgICAgbV9iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZXNJZk5lZWRlZChUZXh0dXJlTWFwcGVy
TGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUp
Cit7CisgICAgaWYgKHN0YXRlLnRpbGVzVG9DcmVhdGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS50aWxlc1RvQ3JlYXRlLnNpemUoKTsg
KytpKQorICAgICAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUoc3RhdGUudGlsZXNUb0NyZWF0
ZVtpXS50aWxlSUQsIHN0YXRlLnRpbGVzVG9DcmVhdGVbaV0uc2NhbGUpOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJZk5lZWRlZChUZXh0dXJlTWFwcGVy
TGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUp
Cit7CisgICAgaWYgKHN0YXRlLnRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOworICAgIGlmICghYmFja2luZ1N0b3JlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLnRpbGVzVG9S
ZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlVGlsZShzdGF0
ZS50aWxlc1RvUmVtb3ZlW2ldKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnVwZGF0ZVRpbGVzSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIGlmIChzdGF0ZS50
aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0
KGxheWVyKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RhdGUudGlsZXNUb1VwZGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBUaWxlVXBkYXRlSW5mbyYgdGlsZUluZm8gPSBzdGF0ZS50aWxlc1RvVXBkYXRlW2ldOworICAg
ICAgICBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8gPSB0aWxlSW5m
by51cGRhdGVJbmZvOworCisgICAgICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIHN1cmZhY2VJdCA9
IG1fc3VyZmFjZXMuZmluZChzdXJmYWNlVXBkYXRlSW5mby5hdGxhc0lEKTsKKyAgICAgICAgQVNT
RVJUKHN1cmZhY2VJdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKworICAgICAgICBiYWNraW5nU3Rv
cmUtPnVwZGF0ZVRpbGUodGlsZUluZm8udGlsZUlELCBzdXJmYWNlVXBkYXRlSW5mby51cGRhdGVS
ZWN0LCB0aWxlSW5mby50aWxlUmVjdCwgc3VyZmFjZUl0LT52YWx1ZSwgc3VyZmFjZVVwZGF0ZUlu
Zm8uc3VyZmFjZU9mZnNldCk7CisgICAgICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzeW5jVXBkYXRlQXRsYXNlcyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUmIHN0YXRlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUudXBkYXRlQXRs
YXNlc1RvQ3JlYXRlLnNpemUoKTsgKytpKQorICAgICAgICBjcmVhdGVVcGRhdGVBdGxhcyhzdGF0
ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGVbaV0uZmlyc3QsIHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0Ny
ZWF0ZVtpXS5zZWNvbmQpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS51cGRh
dGVBdGxhc2VzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZVVwZGF0ZUF0bGFz
KHN0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZVtpXSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKK3sKKyAgICBBU1NFUlQoIW1fc3VyZmFj
ZXMuY29udGFpbnMoYXRsYXNJRCkpOworICAgIG1fc3VyZmFjZXMuYWRkKGF0bGFzSUQsIHN1cmZh
Y2UpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRs
YXModWludDMyX3QgYXRsYXNJRCkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlcy5jb250YWlucyhh
dGxhc0lEKSk7CisgICAgbV9zdXJmYWNlcy5yZW1vdmUoYXRsYXNJRCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jSW1hZ2VCYWNraW5ncyhjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rh
dGUuaW1hZ2VzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZUltYWdlQmFja2lu
ZyhzdGF0ZS5pbWFnZXNUb1JlbW92ZVtpXSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN0YXRlLmltYWdlc1RvQ3JlYXRlLnNpemUoKTsgKytpKQorICAgICAgICBjcmVhdGVJbWFnZUJh
Y2tpbmcoc3RhdGUuaW1hZ2VzVG9DcmVhdGVbaV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdGF0ZS5pbWFnZXNUb1VwZGF0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgdXBkYXRlSW1h
Z2VCYWNraW5nKHN0YXRlLmltYWdlc1RvVXBkYXRlW2ldLmZpcnN0LCBzdGF0ZS5pbWFnZXNUb1Vw
ZGF0ZVtpXS5zZWNvbmQpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5pbWFn
ZXNUb0NsZWFyLnNpemUoKTsgKytpKQorICAgICAgICBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
KHN0YXRlLmltYWdlc1RvQ2xlYXJbaV0pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJ
RCkKK3sKKyAgICBBU1NFUlQoIW1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdl
SUQsIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1h
Z2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCit7CisgICAgQVNT
RVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgSW1hZ2VCYWNraW5n
TWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIFJl
ZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwor
CisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgaXMgcmVhbGl6ZWQgdG8gQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUgd2l0aCBvbmx5IG9uZSB0aWxlIGluIFVJIFByb2Nlc3MuCisgICAgYmFj
a2luZ1N0b3JlLT5jcmVhdGVUaWxlKDEgLyogaWQgKi8sIDEgLyogc2NhbGUgKi8pOworICAgIElu
dFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzdXJmYWNlLT5zaXplKCkpOworICAgIC8vIFNl
ZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2Uo
KQorICAgIEFTU0VSVCgyMDAwID49IHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSkpOworICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShyZWN0LnNpemUoKSk7CisgICAgYmFja2lu
Z1N0b3JlLT51cGRhdGVUaWxlKDEgLyogaWQgKi8sIHJlY3QsIHJlY3QsIHN1cmZhY2UsIHJlY3Qu
bG9jYXRpb24oKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRk
KGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
K3sKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJ
RCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBp
dC0+dmFsdWU7CisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOworICAgIG1fYmFj
a2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5j
b250YWlucyhpbWFnZUlEKSk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IFRleHR1cmVNYXBwZXJM
YXllciByZWZlcnMgYSBkYW5nbGluZyBwb2ludGVyLgorICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tp
bmdzLmFwcGVuZChtX2ltYWdlQmFja2luZ3MudGFrZShpbWFnZUlEKSk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAobV9zdXJmYWNlQmFja2luZ1N0b3Jl
cy5jb250YWlucyhsYXllcikpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgaWYgKGlt
YWdlSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIHsKKyAgICAgICAgbGF5
ZXItPnNldENvbnRlbnRzTGF5ZXIoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJ
RCk7CisgICAgQVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzTGF5ZXIoaXQtPnZhbHVlLmdldCgpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCkKK3sK
KyAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKQor
eworICAgIGZvciAoYXV0byYgYmFja2luZ1N0b3JlIDogbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzKQorICAgICAgICBiYWNraW5nU3RvcmUtPmNvbW1pdFRpbGVPcGVyYXRpb25zKG1f
dGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1p
dFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAg
ICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHN0YXRlLnNjcm9sbFBvc2l0aW9u
OworCisgICAgY3JlYXRlTGF5ZXJzKHN0YXRlLmxheWVyc1RvQ3JlYXRlKTsKKyAgICBkZWxldGVM
YXllcnMoc3RhdGUubGF5ZXJzVG9SZW1vdmUpOworCisgICAgaWYgKHN0YXRlLnJvb3RDb21wb3Np
dGluZ0xheWVyICE9IG1fcm9vdExheWVySUQpCisgICAgICAgIHNldFJvb3RMYXllcklEKHN0YXRl
LnJvb3RDb21wb3NpdGluZ0xheWVyKTsKKworICAgIHN5bmNJbWFnZUJhY2tpbmdzKHN0YXRlKTsK
KyAgICBzeW5jVXBkYXRlQXRsYXNlcyhzdGF0ZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN0YXRlLmxheWVyc1RvVXBkYXRlLnNpemUoKTsgKytpKQorICAgICAgICBzZXRMYXllclN0
YXRlKHN0YXRlLmxheWVyc1RvVXBkYXRlW2ldLmZpcnN0LCBzdGF0ZS5sYXllcnNUb1VwZGF0ZVtp
XS5zZWNvbmQpOworCisgICAgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsK
KyAgICByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOworCisgICAgLy8gVGhl
IHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0
aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBSZWZQdHI8Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lPiBwcm90ZWN0b3IodGhpcyk7CisgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoWz1dIHsKKyAgICAgICAgcHJvdGVjdG9yLT5yZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB9
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSgp
Cit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+cmVuZGVyTmV4dEZyYW1l
KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjplbnN1cmVSb290TGF5ZXIo
KQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290
TGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICBtX3Jv
b3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQzRCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhh
dmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9vdExh
eWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworCisgICAgQVNTRVJUKG1fdGV4dHVy
ZU1hcHBlcik7CisgICAgbV9yb290TGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNSZW1v
dGVDb250ZW50KCkKK3sKKyAgICAvLyBXZSBlbnF1ZXVlIG1lc3NhZ2VzIGFuZCBleGVjdXRlIHRo
ZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4gYWN0aXZlIEdMIGNvbnRleHQuCisg
ICAgZW5zdXJlUm9vdExheWVyKCk7CisKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+
PiByZW5kZXJRdWV1ZTsKKyAgICBib29sIGNhbGxlZE9uTWFpblRocmVhZCA9IFdURjo6aXNNYWlu
VGhyZWFkKCk7CisgICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCisgICAgICAgIG1fcmVuZGVy
UXVldWVNdXRleC5sb2NrKCk7CisgICAgcmVuZGVyUXVldWUgPSBXVEY6Om1vdmUobV9yZW5kZXJR
dWV1ZSk7CisgICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCisgICAgICAgIG1fcmVuZGVyUXVl
dWVNdXRleC51bmxvY2soKTsKKworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiByZW5kZXJRdWV1
ZSkKKyAgICAgICAgZnVuY3Rpb24oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnB1cmdlR0xSZXNvdXJjZXMoKQoreworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwor
ICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOworI2VuZGlmCisgICAg
bV9zdXJmYWNlcy5jbGVhcigpOworCisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworICAgIG1f
cm9vdExheWVySUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEOworICAgIG1fbGF5ZXJzLmNs
ZWFyKCk7CisgICAgbV9maXhlZExheWVycy5jbGVhcigpOworICAgIG1fdGV4dHVyZU1hcHBlciA9
IG51bGxwdHI7CisgICAgbV9iYWNraW5nU3RvcmVzLmNsZWFyKCk7CisgICAgbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CisKKyAgICBzZXRBY3RpdmUoZmFsc2UpOwor
CisgICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOwor
ICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKFs9XSB7CisgICAgICAgIHByb3RlY3Rvci0+cHVyZ2VC
YWNraW5nU3RvcmVzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpkaXNwYXRjaENvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJ
bnRTaXplJiBvZmZzZXQpCit7CisgICAgbV9jbGllbnQtPmNvbW1pdFNjcm9sbE9mZnNldChsYXll
cklELCBvZmZzZXQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0
U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEludFNpemUmIG9mZnNldCkKK3sK
KyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBwcm90ZWN0b3IodGhpcyk7Cisg
ICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsKKyAgICAgICAgcHJvdGVjdG9yLT5kaXNwYXRj
aENvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpOworICAgIH0pOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5pbWF0aW9uc0lmTmVl
ZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIXN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0QW5pbWF0aW9ucyhzdGF0ZS5hbmltYXRp
b25zKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRldGFjaCgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Cisg
ICAgbV9jbGllbnQgPSAwOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXBw
ZW5kVXBkYXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIW1f
aXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVldWVNdXRleCk7CisgICAgbV9yZW5k
ZXJRdWV1ZS5hcHBlbmQoV1RGOjptb3ZlKGZ1bmN0aW9uKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1faXNB
Y3RpdmUgPT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIYXZlIHRvIGNsZWFy
IHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgorICAgIC8vIElmIHRoZXJlIGFyZSBzb21lIHVw
ZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVzIGFyZSBm
cm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5vZGUKKyAgICAvLyBhbmQgY2Fubm90IGJl
IGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCisgICAgbV9yZW5kZXJRdWV1
ZS5jbGVhcigpOworICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7CisgICAgaWYgKG1faXNBY3RpdmUp
IHsKKyAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRo
aXMpOworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChbPV0geworICAgICAgICAgICAgcHJv
dGVjdG9yLT5yZW5kZXJOZXh0RnJhbWUoKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOworfQorCitUZXh0dXJl
TWFwcGVyTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZmluZFNjcm9sbGFibGVDb250
ZW50c0xheWVyQXQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIHJvb3RM
YXllcigpID8gcm9vdExheWVyKCktPmZpbmRTY3JvbGxhYmxlQ29udGVudHNMYXllckF0KHBvaW50
KSA6IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWExMWNjOTI4NWYwOTZkNzBmMTExMTA1MjBkOTY0ZjI5NzY1YmI1
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0wLDAgKzEsMTk4IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCisjZGVmaW5lIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZh
Y2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRl
ZFN1cmZhY2UuaD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7CisKK2NsYXNzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0
b3JlcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEludFNpemUmIG9mZnNldCkg
PSAwOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4sIHB1YmxpYyBUZXh0dXJl
TWFwcGVyTGF5ZXI6OlNjcm9sbGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCopOwor
ICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOworICAgIHZvaWQgcGFpbnRU
b0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29u
c3QgRmxvYXRSZWN0JiwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOworICAgIHZvaWQg
cGFpbnRUb0dyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgZGV0YWNo
KCk7CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKworICAg
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogZmluZFNjcm9sbGFibGVDb250ZW50c0xheWVy
QXQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCisgICAgdmlydHVhbCB2b2lkIGNvbW1p
dFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpOwor
CisgICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRv
IHVzZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVzZSB0d28gbWV0aG9kcyBhY2Nlc3MgbWVtYmVy
cyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2VzLiBTZWUgbV9jbGllbnQuCisgICAgLy8gQ3Vy
cmVudGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoKSBsb2NrcyB0aGUgbWFpbiB0
aHJlYWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgorICAgIHZvaWQgcHVyZ2VHTFJlc291
cmNlcygpOworCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBY3RpdmU7
IH0KKyAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKKworICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0
ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKKworICAgIHZvaWQgc2V0QmFja2dy
b3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9v
bCBlbmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KKworICAgIHZvaWQg
c2V0Vmlld0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV92aWV3QmFja2dy
b3VuZENvbG9yID0gY29sb3I7IH0KKyAgICBDb2xvciB2aWV3QmFja2dyb3VuZENvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV92aWV3QmFja2dyb3VuZENvbG9yOyB9CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgY3JlYXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CisgICAgdm9pZCBkZWxldGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIHNldExh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpOworICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKFRleHR1cmVNYXBw
ZXJMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9p
ZCB1cGRhdGVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBjcmVhdGVUaWxlc0lmTmVlZGVkKFRl
eHR1cmVNYXBwZXJMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7
CisgICAgdm9pZCByZW1vdmVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBzZXRMYXllckZpbHRl
cnNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoVGV4dHVy
ZU1hcHBlckxheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNyZWF0ZVBsYXRmb3JtTGF5ZXJJZk5l
ZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpOworICAgIHZvaWQgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVy
TGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZvaWQg
ZGVzdHJveVBsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2VuZGlmCisgICAgdm9pZCBzZXRMYXll
clJlcGFpbnRDb3VudElmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisKKyAgICB2b2lkIHN5bmNVcGRhdGVBdGxhc2VzKGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRs
YXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKKyAg
ICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOworCisgICAgdm9pZCBz
eW5jSW1hZ2VCYWNraW5ncyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKKyAgICB2
b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2
b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOworICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKworICAgIFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2xheWVycy5jb250YWlucyhpZCkpOworICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxpZENv
b3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOworICAg
IH0KKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGdldExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5h
dGVkTGF5ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiByb290TGF5ZXIoKSB7IHJldHVy
biBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOwor
ICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOworCisgICAgdm9pZCBkaXNw
YXRjaE9uTWFpblRocmVhZChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIHZvaWQgdXBkYXRl
Vmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VC
YWNraW5nU3RvcmVzKCk7CisKKyAgICB2b2lkIGNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCk7CisgICAgdm9pZCBkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQpOworCisgICAgdm9p
ZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKFRleHR1cmVNYXBwZXJMYXllciosIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdz
SWZOZWVkZWQoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOworICAgIHZvaWQgY29tbWl0
UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKKworICAgIHZvaWQgcHJlcGFyZUNvbnRl
bnRCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlckxheWVyKik7CisgICAgdm9pZCBjcmVhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKKyAgICB2b2lkIHJlbW92ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciopOworICAgIHZvaWQgcmVzZXRC
YWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoVGV4dHVyZU1hcHBlckxheWVyKik7CisKKyAgICB2
b2lkIGRpc3BhdGNoQ29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IElu
dFNpemUmIG9mZnNldCk7CisKKyAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9u
eSBmcm9tIG1haW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQorICAgIFZl
Y3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fcmVuZGVyUXVldWU7CisgICAgTXV0ZXggbV9y
ZW5kZXJRdWV1ZU11dGV4OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXI+IG1f
dGV4dHVyZU1hcHBlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gSW1hZ2VCYWNraW5nTWFw
OworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+ID4gQmFja2luZ1N0b3JlTWFwOworICAgIEJhY2tpbmdTdG9yZU1hcCBt
X2JhY2tpbmdTdG9yZXM7CisKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gPiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CisKKyNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKKyAgICB0eXBlZGVmIEhhc2hNYXA8VGV4dHVyZU1hcHBlckxheWVyKiwg
UmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5n
U3RvcmVNYXA7CisgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzOworI2VuZGlmCisKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAq
LywgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gPiBTdXJmYWNlTWFwOworICAgIFN1cmZhY2VN
YXAgbV9zdXJmYWNlczsKKworICAgIC8vIEJlbG93IHR3byBtZW1iZXJzIGFyZSBhY2Nlc3NlZCBi
eSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhl
IG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3RoIG1lbWJlcnMuCisgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1faXNBY3RpdmU7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJl
TWFwcGVyTGF5ZXI+PiBMYXllck1hcDsKKyAgICBMYXllck1hcCBtX2xheWVyczsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBUZXh0dXJlTWFwcGVyTGF5ZXIqPiBMYXll
clJhd1B0ck1hcDsKKyAgICBMYXllclJhd1B0ck1hcCBtX2ZpeGVkTGF5ZXJzOworICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIEZsb2F0UG9pbnQgbV9zY3JvbGxQb3Np
dGlvbjsKKyAgICBGbG9hdFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwor
ICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIENvbG9yIG1fdmlld0JhY2tncm91bmRD
b2xvcjsKKyAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5kOworCisgICAgVGV4dHVyZU1hcHBl
ckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lX2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaAppbmRleCAxY2Q1MzFjM2M3NGE1OGRkYjUwY2EwMDdiZDQy
OTljMjAzMmUzNGQ4Li44M2JjMGMxMjg2ZGI2OWY5OWZmYWJjMmNmYzY5YzljM2Q3NWFkYWNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgK
QEAgLTI0LDggKzI0LDggQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgogI2luY2x1ZGUgPGZ1
bmN0aW9uYWw+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHAKaW5kZXggMDQ1
OWZiYzUxMWNkMDE2ZmJmZDJlZDA4NTI0YzEzZTY5ZmY0ODU0Yi4uNWJiMGZlZjlhN2MxZDQ0YmE0
OGI4MTAwODQ0OWE5NGE0MjVkMDQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHAKQEAgLTMwLDEyICszMCwx
MiBAQAogI2luY2x1ZGUgIldlYlZpZXcuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJWaWV3U3RhdGUuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0
TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcAppbmRleCA2Y2M4YzU0ZGIwNjg0YjBkOGRl
NDFmMTAxNmZhZGVjMGM2N2MyZTgxLi40MmQ3ZmU1ZTIyNjY4NmE5ODM4MzA4MWM1ZjJmNzJhZmRk
N2Y1OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJWaWV3
RWZsLmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCIKICNpbmNsdWRl
ICJEb3dubG9hZE1hbmFnZXJFZmwuaCIKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAi
SW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCkBAIC0zNCw3ICszNSw2IEBACiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eUVmbC5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudUxpc3RlbmVyRWZs
LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNv
bnRleHRDYWlyby5oPgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>