<?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>179685</bug_id>
          
          <creation_ts>2017-11-14 12:42:54 -0800</creation_ts>
          <short_desc>Remove JSDollarVMPrototype.</short_desc>
          <delta_ts>2017-11-17 13:05:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1371520</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-14 12:42:54 -0800</bug_when>
    <thetext>Move the JSDollarVMPrototype C++ utility functions into VMInspector.cpp.
Move the JSDollarVMPrototype JS functions into JSDollarVM.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371529</commentid>
    <comment_count>1</comment_count>
      <attachid>326910</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-14 12:51:05 -0800</bug_when>
    <thetext>Created attachment 326910
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371534</commentid>
    <comment_count>2</comment_count>
      <attachid>326913</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-14 13:08:07 -0800</bug_when>
    <thetext>Created attachment 326913
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371539</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-14 13:16:57 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r224838: &lt;http://trac.webkit.org/r224838&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373233</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-17 13:05:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/35621959&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326910</attachid>
            <date>2017-11-14 12:51:05 -0800</date>
            <delta_ts>2017-11-14 13:08:07 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-179685.patch</filename>
            <type>text/plain</type>
            <size>49680</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0ODM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE3LTExLTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgSlNEb2xsYXJWTVByb3RvdHlwZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3OTY4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDEuIE1vdmUgdGhlIEpTRG9sbGFyVk1Qcm90b3R5cGUgQysrIHV0
aWxpdHkgZnVuY3Rpb25zIGludG8gVk1JbnNwZWN0b3IuY3BwLgorCisgICAgICAgICAgIFRoaXMg
YWxsb3dzIHVzIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zIGR1cmluZyBsbGRiIGRlYnVnZ2luZyBz
ZXNzaW9ucyB1c2luZworICAgICAgICAgICBWTUluc3BlY3Rvcjo6Zm9vKCkgaW5zdGVhZCBvZiBK
U0RvbGxhclZNUHJvdG90eXBlOjpmb28oKS4gIEl0IG1ha2VzIHNlbnNlIHRoYXQKKyAgICAgICAg
ICAgVk1JbnNwZWN0b3IgcHJvdmlkZXMgVk0gZGVidWdnaW5nIHV0aWxpdHkgbWV0aG9kcy4gIEl0
IGRvZXNuJ3QgbWFrZSBzZW5zZSB0bworICAgICAgICAgICBoYXZlIGEgSlNEb2xsYXJWTVByb3Rv
dHlwZSBvYmplY3QgcHJvdmlkZSB0aGVzZSBtZXRob2RzLgorCisgICAgICAgICAgIFBsdXMsIGl0
J3Mgc2hvcnRlciB0byB0eXBlIFZNSW5zcGVjdG9yIHRoYW4gSlNEb2xsYXJWTVByb3RvdHlwZS4K
KworICAgICAgICAyLiBNb3ZlIHRoZSBKU0RvbGxhclZNUHJvdG90eXBlIEpTIGZ1bmN0aW9ucyBp
bnRvIEpTRG9sbGFyVk0uY3BwLgorCisgICAgICAgICAgIEpTRG9sbGFyVk0gaXMgYSBzcGVjaWFs
IG9iamVjdCB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFRoZXJlJ3Mgbm8KKyAg
ICAgICAgICAgZ2FpbiBpbiByZXF1aXJpbmcgaXRzIG1ldGhvZHMgdG8gYmUgc3RvcmVkIGluIGEg
cHJvdG90eXBlIG9iamVjdCBvdGhlciB0aGFuIHRvCisgICAgICAgICAgIGNvbmZvcm0gdG8gdHlw
aWNhbCBKUyBjb252ZW50aW9uLiAgV2UgY2FuIHJlbW92ZSB0aGlzIGNvbXBsZXhpdHkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmFkZEZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uREZHVHJ1
ZSk6CisgICAgICAgIChKU0M6OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3I6OkNhbGxlckZyYW1l
SklUVHlwZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9y
OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbGVyRnJhbWVKSVRUeXBlRnVu
Y3Rvcjo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTExpbnRUcnVlKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25KSVRUcnVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HQyk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uRWRlbkdDKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Db2Rl
QmxvY2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OmNvZGVCbG9ja0Zyb21BcmcpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJp
bnRTb3VyY2VGb3IpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Qnl0ZWNvZGVGb3IpOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcmlu
dENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRTdGFjayk6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uVmFsdWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdldFBJRCk6Cisg
ICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB0b29s
cy9KU0RvbGxhclZNLmg6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmNyZWF0ZSk6CisgICAg
ICAgICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
dG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHRvb2xzL1ZN
SW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRP
d25zSlNMb2NrKToKKyAgICAgICAgKEpTQzo6ZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2sp
OgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6Z2MpOgorICAgICAgICAoSlNDOjpWTUluc3Bl
Y3Rvcjo6ZWRlbkdDKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmlzSW5IZWFwKToKKyAg
ICAgICAgKEpTQzo6Q2VsbEFkZHJlc3NDaGVja0Z1bmN0b3I6OkNlbGxBZGRyZXNzQ2hlY2tGdW5j
dG9yKToKKyAgICAgICAgKEpTQzo6Q2VsbEFkZHJlc3NDaGVja0Z1bmN0b3I6Om9wZXJhdG9yKCkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6aXNWYWxpZENlbGwpOgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aXNWYWxpZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlZN
SW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OlByaW50RnJhbWVG
dW5jdG9yOjpQcmludEZyYW1lRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlByaW50RnJhbWVGdW5j
dG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnByaW50
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnByaW50U3RhY2spOgorICAg
ICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6cHJpbnRWYWx1ZSk6CisgICAgICAgICogdG9vbHMvVk1J
bnNwZWN0b3IuaDoKKwogMjAxNy0xMS0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBhIFNlcnZpY2VXb3JrZXIgZG9t
YWluIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBpbnNwZWN0ZWQgU2VydmljZVdvcmtlcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI0Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyAr
OTMyLDYgQEAgdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRl
bGlzdC5jcHAKIHRvb2xzL0hlYXBWZXJpZmllci5jcHAKIHRvb2xzL0pTRG9sbGFyVk0uY3BwCi10
b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHAKIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjI0Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MTYs
NyArMTcxNiw2IEBACiAJCUZFMzE4RkUwMUNBQzk4MkYwMERGQ0M1NCAvKiBFQ01BU2NyaXB0U3Bl
Y0ludGVybmFsRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTMxOEZERTFDQUM4QzUzMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRl
cm5hbEZ1bmN0aW9ucy5oICovOyB9OwogCQlGRTM0MjIxMjFENkI4MUMzMDAzMkJFODggLyogVGhy
b3dTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNjFBRERCN0FEMDA1NURF
MkMgLyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRTM4NEVFODFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk1Qcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTNBMDZBNjFDMTBCNzJEMDAzOTBGREQgLyogSklUQml0T3JHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0Ew
NkE0MUMxMEI3MDgwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5oICovOyB9OwogCQlGRTNB
MDZBODFDMTBCQzgxMDAzOTBGREQgLyogSklUQml0QmluYXJ5T3BHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkE3MUMxMEJDNzQw
MDM5MEZERCAvKiBKSVRCaXRCaW5hcnlPcEdlbmVyYXRvci5oICovOyB9OwogCQlGRTNBMDZCMjFD
MTBDQjg5MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZBRTFDMTBDQjZGMDAzOTBGREQgLyog
SklUQml0QW5kR2VuZXJhdG9yLmggKi87IH07CkBAIC0zMTgxLDkgKzMxODAsOSBAQAogCQk1MzBB
NjZCNTFGQTNFNzdEMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTUtbW0ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSAiVW5pZmllZFNvdXJjZTUtbW0ubW0iOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjZCNjFGQTNFNzdEMDAyNkE1NDUgLyogVW5p
ZmllZFNvdXJjZTE0Mi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
bmlmaWVkU291cmNlMTQyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTY2
QjcxRkEzRTc3RDAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UxNDMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZmllZFNvdXJjZTE0My5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0gICAgICAgICAgICAgICAgNTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1
IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gIlVuaWZpZWRTb3VyY2U0LW1tLm1tIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLSAgICAgICAgICAgICAgICA1MzBBNjZDQzFGQjEzNDZEMDAyNkE1NDUgLyogU3VwZXJTYW1w
bGVyQnl0ZWNvZGVTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBsZXJCeXRlY29kZVNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0gICAgICAgICAgICAgICAgNTMwRkIz
MDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gIlVuaWZpZWRTb3VyY2U0LW1tLm1t
Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwQTY2Q0MxRkIxMzQ2RDAwMjZBNTQ1
IC8qIFN1cGVyU2FtcGxlckJ5dGVjb2RlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJTYW1w
bGVyQnl0ZWNvZGVTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMw
MTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxh
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT01HUGxhbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDQ5MUVBNTgxRTUwMDUyNTI4
MSAvKiBXYXNtT01HUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
T01HUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU4NCw4ICs0NTgzLDYg
QEAKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvbGxhclZNLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9s
bGFyVk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEb2xsYXJWTS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTM4NEVFMzFBRERCN0FEMDA1NURFMkMgLyog
SlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RvbGxhclZNUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEb2xsYXJWTVByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTNBMDZBMzFDMTBCNzA4MDAzOTBGREQgLyogSklU
Qml0T3JHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SklUQml0T3JHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTNB
MDZBNDFDMTBCNzA4MDAzOTBGREQgLyogSklUQml0T3JHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQml0T3JHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUzQTA2QTcxQzEwQkM3NDAwMzkwRkREIC8qIEpJVEJpdEJpbmFyeU9w
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVEJpdEJpbmFy
eU9wR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODk5LDggKzY4
OTYsNiBAQAogCQkJCUZFMUJEMDIzMUU3MjA1MkYwMDEzNEJDOSAvKiBIZWFwVmVyaWZpZXIuaCAq
LywKIAkJCQlGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8sCiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKLQkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCi0JCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKIAkJ
CQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8sCiAJCQkJ
RkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovLAog
CQkJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi8s
CkBAIC04NzgwLDcgKzg3NzUsNiBAQAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxM0MxRTI5NzEx
MzAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhw
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNF
eHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5ODkzNzc5MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI0Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw2IEBACiAjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgog
I2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0RvbGxhclZNLmgi
Ci0jaW5jbHVkZSAiSlNEb2xsYXJWTVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKQEAgLTg5Niw5ICs4OTUsOCBAQCBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgbV9saW5rVGltZUNv
bnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6VGhyb3dUeXBl
RXJyb3JGdW5jdGlvbildID0gbV90aHJvd1R5cGVFcnJvckZ1bmN0aW9uLmdldCgpOwogCiAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpKSB7Ci0gICAgICAgIEpTRG9sbGFy
Vk1Qcm90b3R5cGUqIGRvbGxhclZNUHJvdG90eXBlID0gSlNEb2xsYXJWTVByb3RvdHlwZTo6Y3Jl
YXRlKHZtLCB0aGlzLCBKU0RvbGxhclZNUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRo
aXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgICAgIG1fZG9sbGFyVk1TdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBKU0RvbGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGRv
bGxhclZNUHJvdG90eXBlKSk7Ci0gICAgICAgIEpTRG9sbGFyVk0qIGRvbGxhclZNID0gSlNEb2xs
YXJWTTo6Y3JlYXRlKHZtLCBtX2RvbGxhclZNU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgbV9k
b2xsYXJWTVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRG9sbGFyVk06OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgSlNEb2xsYXJW
TSogZG9sbGFyVk0gPSBKU0RvbGxhclZNOjpjcmVhdGUodm0sIHRoaXMsIG1fZG9sbGFyVk1TdHJ1
Y3R1cmUuZ2V0KCkpOwogCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyBleHRyYVN0YXRpY0ds
b2JhbHNbXSA9IHsKICAgICAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5kb2xsYXJWTVByaXZhdGVOYW1lKCksIGRvbGxhclZNLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyMjQ3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTAgKzI2
LDI2OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKIAor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CisjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNEb2xsYXJWTTo6c19pbmZvID0geyAiRG9sbGFyVk0iLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRG9sbGFyVk0pIH07CiAKK3Zv
aWQgSlNEb2xsYXJWTTo6YWRkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKQoreworICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIu
c3RyaW5nKCksIGZ1bmN0aW9uKSk7Cit9CisKKy8vIFRyaWdnZXJzIGEgY3Jhc2ggaW1tZWRpYXRl
bHkuCisvLyBVc2FnZTogJHZtLmNyYXNoKCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRlKikKK3sKKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY3VycmVudCBmcmFtZSBpcyBhIERGRyBmcmFtZS4KKy8vIFVzYWdlOiBpc0RGRyA9
ICR2bS5kZmdUcnVlKCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uREZHVHJ1ZShFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGZhbHNlKSk7Cit9CisKK2NsYXNzIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3Igewor
cHVibGljOgorICAgIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IoKQorICAgICAgICA6IG1fY3Vy
cmVudEZyYW1lKDApCisgICAgICAgICwgbV9qaXRUeXBlKEpJVENvZGU6Ok5vbmUpCisgICAgewor
ICAgIH0KKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lKysgPiAx
KSB7CisgICAgICAgICAgICBtX2ppdFR5cGUgPSB2aXNpdG9yLT5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICB9CisgICAgCisgICAg
SklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgeyByZXR1cm4gbV9qaXRUeXBlOyB9CisKK3ByaXZh
dGU6CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2N1cnJlbnRGcmFtZTsKKyAgICBtdXRhYmxlIEpJ
VENvZGU6OkpJVFR5cGUgbV9qaXRUeXBlOworfTsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
dXJyZW50IGZyYW1lIGlzIGEgTExJbnQgZnJhbWUuCisvLyBVc2FnZTogaXNMTEludCA9ICR2bS5s
bGludFRydWUoKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25M
TGludFRydWUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBDYWxsZXJGcmFtZUpJVFR5
cGVGdW5jdG9yIGZ1bmN0b3I7CisgICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVu
dCBmcmFtZSBpcyBhIGJhc2VsaW5lIEpJVCBmcmFtZS4KKy8vIFVzYWdlOiBpc0Jhc2VsaW5lSklU
ID0gJHZtLmppdFRydWUoKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25KSVRUcnVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgQ2FsbGVyRnJhbWVK
SVRUeXBlRnVuY3RvciBmdW5jdG9yOworICAgIGV4ZWMtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZnVuY3Rvci5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpKTsKK30KKworLy8gUnVucyBhIGZ1bGwgR0Mgc3luY2hyb25vdXNs
eS4KKy8vIFVzYWdlOiAkdm0uZ2MoKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk1JbnNwZWN0b3I6OmdjKGV4
ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKKy8v
IFJ1bnMgdGhlIGVkZW5HQyBzeW5jaHJvbm91c2x5LgorLy8gVXNhZ2U6ICR2bS5lZGVuR0MoKQor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNSW5zcGVjdG9yOjplZGVuR0MoZXhlYyk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworLy8gR2V0cyBhIHRva2VuIGZv
ciB0aGUgQ29kZUJsb2NrIGZvciBhIHNwZWNpZmllZCBmcmFtZSBpbmRleC4KKy8vIFVzYWdlOiBj
b2RlQmxvY2tUb2tlbiA9ICR2bS5jb2RlQmxvY2tGb3JGcmFtZSgwKSAvLyBmcmFtZSAwIGlzIHRo
ZSB0b3AgZnJhbWUuCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNvZGVCbG9ja0ZvckZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBpZiAoIXZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGluYyB0aGUgZnJhbWUg
bnVtYmVyIGJlY2F1c2UgdGhlIGNhbGxlciB3b3VsZCBjb25zaWRlcgorICAgIC8vIGl0cyBvd24g
ZnJhbWUgYXMgZnJhbWUgMC4gSGVuY2UsIHdlIG5lZWQgZGlzY291bnQgdGhlIGZyYW1lIGZvciB0
aGlzCisgICAgLy8gZnVuY3Rpb24uCisgICAgdW5zaWduZWQgZnJhbWVOdW1iZXIgPSB2YWx1ZS5h
c1VJbnQzMigpICsgMTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IFZNSW5zcGVjdG9yOjpj
b2RlQmxvY2tGb3JGcmFtZShleGVjLCBmcmFtZU51bWJlcik7CisgICAgLy8gVGhvdWdoIENvZGVC
bG9jayBpcyBhIEpTQ2VsbCwgaXQgaXMgbm90IHNhZmUgdG8gcmV0dXJuIGl0IGRpcmVjdGx5IGJh
Y2sgdG8gSlMgY29kZQorICAgIC8vIGFzIGl0IGlzIGFuIGludGVybmFsIHR5cGUgdGhhdCB0aGUg
SlMgY29kZSBjYW5ub3QgaGFuZGxlLiBIZW5jZSwgd2UgZmlyc3QgZW5jb2RlIHRoZQorICAgIC8v
IENvZGVCbG9jayogYXMgYSBkb3VibGUgdG9rZW4gKHdoaWNoIGlzIHNhZmUgZm9yIEpTIGNvZGUg
dG8gaGFuZGxlKSBiZWZvcmUgcmV0dXJuaW5nIGl0LgorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaykpKSkpOworfQorCitzdGF0aWMgQ29k
ZUJsb2NrKiBjb2RlQmxvY2tGcm9tQXJnKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9IG51bGxwdHI7
CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBq
c0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgdmFsdWUuYXNDZWxsKCkpOworICAgICAgICBp
ZiAoZnVuYykgeworICAgICAgICAgICAgaWYgKGZ1bmMtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb2RlQmxvY2sgPSBmdW5jLT5qc0V4ZWN1dGFi
bGUoKS0+ZWl0aGVyQ29kZUJsb2NrKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZhbHVl
LmlzRG91YmxlKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgZG91YmxlLCBpdCBt
YXkgYmUgYW4gZW5jb2RlZCBDb2RlQmxvY2sqIHRoYXQgY2FtZSBmcm9tCisgICAgICAgIC8vICR2
bS5jb2RlQmxvY2tGb3JGcmFtZSgpLiBXZSdsbCB0cmVhdCBpdCBhcyBhIGNhbmRpZGF0ZSBjb2Rl
QmxvY2sgYW5kIGNoZWNrIGlmIGl0J3MKKyAgICAgICAgLy8gdmFsaWQgYmVsb3cgYmVmb3JlIHVz
aW5nLgorICAgICAgICBjYW5kaWRhdGVDb2RlQmxvY2sgPSByZWludGVycHJldF9jYXN0PENvZGVC
bG9jayo+KGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNEb3VibGUoKSkpOworICAgIH0K
KworICAgIGlmIChjYW5kaWRhdGVDb2RlQmxvY2sgJiYgVk1JbnNwZWN0b3I6OmlzVmFsaWRDb2Rl
QmxvY2soZXhlYywgY2FuZGlkYXRlQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGNhbmRpZGF0
ZUNvZGVCbG9jazsKKworICAgIGlmIChjYW5kaWRhdGVDb2RlQmxvY2spCisgICAgICAgIGRhdGFM
b2coIkludmFsaWQgY29kZUJsb2NrOiAiLCBSYXdQb2ludGVyKGNhbmRpZGF0ZUNvZGVCbG9jayks
ICIgIiwgdmFsdWUsICJcbiIpOworICAgIGVsc2UKKyAgICAgICAgZGF0YUxvZygiSW52YWxpZCBj
b2RlQmxvY2s6ICIsIHZhbHVlLCAiXG4iKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8g
VXNhZ2U6IHByaW50KCJjb2RlYmxvY2sgPSAiICsgJHZtLmNvZGVCbG9ja0ZvcihmdW5jdGlvbk9i
aikpCisvLyBVc2FnZTogcHJpbnQoImNvZGVibG9jayA9ICIgKyAkdm0uY29kZUJsb2NrRm9yKGNv
ZGVCbG9ja1Rva2VuKSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7CisgICAgV1RGOjpTdHJpbmdQcmludFN0cmVh
bSBzdHJlYW07CisgICAgaWYgKGNvZGVCbG9jaykgeworICAgICAgICBzdHJlYW0ucHJpbnQoKmNv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
c3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworLy8gVXNhZ2U6ICR2bS5wcmludFNvdXJjZUZvcihmdW5jdGlv
bk9iaikKKy8vIFVzYWdlOiAkdm0ucHJpbnRTb3VyY2VGb3IoY29kZUJsb2NrVG9rZW4pCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U291cmNlRm9yKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zy
b21BcmcoZXhlYyk7CisgICAgaWYgKGNvZGVCbG9jaykKKyAgICAgICAgY29kZUJsb2NrLT5kdW1w
U291cmNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworLy8gVXNhZ2U6ICR2bS5wcmludEJ5dGVjb2RlRm9yKGZ1bmN0aW9uT2JqKQorLy8gVXNhZ2U6
ICR2bS5wcmludEJ5dGVjb2RlKGNvZGVCbG9ja1Rva2VuKQorc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludEJ5dGVjb2RlRm9yKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7Cisg
ICAgaWYgKGNvZGVCbG9jaykKKyAgICAgICAgY29kZUJsb2NrLT5kdW1wQnl0ZWNvZGUoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisvLyBQcmludHMg
YSBzZXJpZXMgb2YgY29tbWEgc2VwYXJhdGUgc3RyaW5ncyB3aXRob3V0IGluc2VydGluZyBhIG5l
d2xpbmUuCisvLyBVc2FnZTogJHZtLnByaW50KHN0cjEsIHN0cjIsIHN0cjMpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgU3RyaW5nIGFyZ1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvV1RG
U3RyaW5nKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgZGF0YUxvZyhhcmdTdHIpOworICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisvLyBQcmludHMgdGhlIGN1cnJl
bnQgQ2FsbEZyYW1lLgorLy8gVXNhZ2U6ICR2bS5wcmludENhbGxGcmFtZSgpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Q2FsbEZyYW1lKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwg
dGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50IHRoZWlyCisgICAgLy8gb3duIGZyYW1lLiBTbyBz
a2lwIDEgZm9yIHRoaXMgZnJhbWUuCisgICAgVk1JbnNwZWN0b3I6OnByaW50Q2FsbEZyYW1lKGV4
ZWMsIDEpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
Ky8vIFByaW50cyB0aGUgSlMgc3RhY2suCisvLyBVc2FnZTogJHZtLnByaW50U3RhY2soKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0YWNrKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlv
biwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50IHRoZQorICAgIC8vIHN0YWNrIHN0YXJ0aW5n
IHRoZWlyIG93biBmcmFtZS4gU28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgorICAgIFZNSW5zcGVj
dG9yOjpwcmludFN0YWNrKGV4ZWMsIDEpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKKy8vIEdldHMgdGhlIGRhdGFMb2cgZHVtcCBvZiBhIGdpdmVuIEpT
IHZhbHVlIGFzIGEgc3RyaW5nLgorLy8gVXNhZ2U6IHByaW50KCJ2YWx1ZSA9ICIgKyAkdm0udmFs
dWUoanNWYWx1ZSkpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0
cmVhbTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBzdHJlYW0ucHJpbnQoIiwgIik7
CisgICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyZWFt
LnRvU3RyaW5nKCkpKTsKK30KKworLy8gR2V0cyB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHByb2Nl
c3MuCisvLyBVc2FnZTogcHJpbnQoInBpZCA9ICIgKyAkdm0uZ2V0cGlkKCkpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFBJRChFeGVjU3RhdGUqKQorewor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ2V0Q3VycmVudFByb2Nlc3NJRCgp
KSk7Cit9CisKK3ZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiY3Jhc2giLCBmdW5jdGlv
bkNyYXNoLCAwKTsKKyAgICAKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRmZ1RydWUiKSwgMCwgZnVuY3Rp
b25ERkdUcnVlLCBERkdUcnVlSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgCisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2Jh
bE9iamVjdCwgImxsaW50VHJ1ZSIsIGZ1bmN0aW9uTExpbnRUcnVlLCAwKTsKKyAgICBhZGRGdW5j
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiaml0VHJ1ZSIsIGZ1bmN0aW9uSklUVHJ1ZSwgMCk7Cisg
ICAgCisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImdjIiwgZnVuY3Rpb25HQywg
MCk7CisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImVkZW5HQyIsIGZ1bmN0aW9u
RWRlbkdDLCAwKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiY29k
ZUJsb2NrRm9yIiwgZnVuY3Rpb25Db2RlQmxvY2tGb3IsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsICJjb2RlQmxvY2tGb3JGcmFtZSIsIGZ1bmN0aW9uQ29kZUJsb2NrRm9y
RnJhbWUsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJwcmludFNvdXJj
ZUZvciIsIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsICJwcmludEJ5dGVjb2RlRm9yIiwgZnVuY3Rpb25QcmludEJ5dGVjb2RlRm9y
LCAxKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnQiLCBm
dW5jdGlvblByaW50LCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJp
bnRDYWxsRnJhbWUiLCBmdW5jdGlvblByaW50Q2FsbEZyYW1lLCAwKTsKKyAgICBhZGRGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnRTdGFjayIsIGZ1bmN0aW9uUHJpbnRTdGFjaywgMCk7
CisKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAidmFsdWUiLCBmdW5jdGlvblZh
bHVlLCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiZ2V0cGlkIiwgZnVu
Y3Rpb25HZXRQSUQsIDApOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjI0Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwx
MSArMzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgSlNEb2xsYXJW
TSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisKKyAgICBzdGF0aWMgSlNE
b2xsYXJWTSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU0RvbGxhclZNKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9sbGFyVk0+KHZtLmhlYXApKSBKU0RvbGxh
clZNKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAgICAgCkBAIC01Miw2ICs1Miw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgIHsKICAgICB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGFk
ZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjI0Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDc2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RvbGxhclZNUHJvdG90eXBlLmgiCi0KLSNp
bmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgotI2lu
Y2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgotI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgotI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY29uc3QgQ2xhc3NJbmZv
IEpTRG9sbGFyVk1Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIkRvbGxhclZNUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RvbGxh
clZNUHJvdG90eXBlKSB9OwotICAgIAotICAgIAotYm9vbCBKU0RvbGxhclZNUHJvdG90eXBlOjpj
dXJyZW50VGhyZWFkT3duc0pTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGV4
ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKTsKLX0KLQotc3RhdGljIGJv
b2wgZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChKU0RvbGxhclZNUHJvdG90eXBlOjpjdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGF0YUxvZygiRVJST1I6IGN1cnJlbnQgdGhyZWFk
IGRvZXMgbm90IG93biB0aGUgSlNMb2NrXG4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6YWRkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlv
biwgdW5zaWduZWQgYXJndW1lbnRzKQotewotICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKLSAgICBwdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlk
ZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRlKikKLXsKLSAgICBDUkFTSCgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uREZHVHJ1ZShFeGVjU3RhdGUq
KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7Ci19Ci0K
LWNsYXNzIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgewotcHVibGljOgotICAgIENhbGxlckZy
YW1lSklUVHlwZUZ1bmN0b3IoKQotICAgICAgICA6IG1fY3VycmVudEZyYW1lKDApCi0gICAgICAg
ICwgbV9qaXRUeXBlKEpJVENvZGU6Ok5vbmUpCi0gICAgewotICAgIH0KLQotICAgIFN0YWNrVmlz
aXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lKysgPiAxKSB7Ci0gICAgICAgICAgICBtX2pp
dFR5cGUgPSB2aXNpdG9yLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpOwotICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpDb250aW51ZTsKLSAgICB9Ci0gICAgCi0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlKCkgeyByZXR1cm4gbV9qaXRUeXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSB1bnNp
Z25lZCBtX2N1cnJlbnRGcmFtZTsKLSAgICBtdXRhYmxlIEpJVENvZGU6OkpJVFR5cGUgbV9qaXRU
eXBlOwotfTsKLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25M
TGludFRydWUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmICghZXhlYykKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBDYWxsZXJGcmFtZUpJVFR5
cGVGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uSklUVHJ1ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKCFleGVj
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIENh
bGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3RvcjsKLSAgICBleGVjLT5pdGVyYXRlKGZ1bmN0
b3IpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZ1bmN0b3Iuaml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSk7Ci19Ci0KLXZvaWQgSlNEb2xsYXJWTVByb3Rv
dHlwZTo6Z2MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OwotfQotICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
QyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MoZXhlYyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotdm9pZCBK
U0RvbGxhclZNUHJvdG90eXBlOjplZGVuR0MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhl
eGVjKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlv
blNjb3BlOjpFZGVuKTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25FZGVuR0MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTRG9sbGFyVk1Qcm90b3R5
cGU6OmVkZW5HQyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotfQotCi1ib29sIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmlzSW5IZWFwKEhlYXAqIGhlYXAs
IHZvaWQqIHB0cikKLXsKLSAgICByZXR1cm4gaXNJbk9iamVjdFNwYWNlKGhlYXAsIHB0cikgfHwg
aXNJblN0b3JhZ2VTcGFjZShoZWFwLCBwdHIpOwotfQotCi1ib29sIEpTRG9sbGFyVk1Qcm90b3R5
cGU6OmlzSW5PYmplY3RTcGFjZShIZWFwKiBoZWFwLCB2b2lkKiBwdHIpCi17Ci0gICAgTWFya2Vk
QmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihwdHIpOwotICAgIGlmICho
ZWFwLT5vYmplY3RTcGFjZSgpLmJsb2NrcygpLnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGZvciAoTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
IDogaGVhcC0+b2JqZWN0U3BhY2UoKS5sYXJnZUFsbG9jYXRpb25zKCkpIHsKLSAgICAgICAgaWYg
KGFsbG9jYXRpb24tPmNvbnRhaW5zKHB0cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEpTRG9sbGFyVk1Qcm90b3R5cGU6Omlz
SW5TdG9yYWdlU3BhY2UoSGVhcCosIHZvaWQqKQotewotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhp
bmcgd2l0aCB0aGlzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjE3NTMKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0cnVjdCBDZWxsQWRkcmVzc0No
ZWNrRnVuY3RvciA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewotICAgIENlbGxBZGRyZXNz
Q2hlY2tGdW5jdG9yKEpTQ2VsbCogY2FuZGlkYXRlKQotICAgICAgICA6IGNhbmRpZGF0ZShjYW5k
aWRhdGUpCi0gICAgewotICAgIH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEhl
YXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChj
ZWxsID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICB9Ci0KLSAgICBKU0NlbGwqIGNhbmRp
ZGF0ZTsKLSAgICBtdXRhYmxlIGJvb2wgZm91bmQgeyBmYWxzZSB9OwotfTsKLQotYm9vbCBKU0Rv
bGxhclZNUHJvdG90eXBlOjppc1ZhbGlkQ2VsbChIZWFwKiBoZWFwLCBKU0NlbGwqIGNhbmRpZGF0
ZSkKLXsKLSAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKmhlYXApOwotICAg
IENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2FuZGlkYXRlKTsKLSAgICBoZWFwLT5v
YmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7Ci0g
ICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7Ci19Ci0KLWJvb2wgSlNEb2xsYXJWTVByb3RvdHlwZTo6
aXNWYWxpZENvZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY2FuZGlkYXRlKQot
ewotICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHJ1Y3QgQ29kZUJsb2NrVmFsaWRhdGlvbkZ1bmN0
b3IgewotICAgICAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3RvcihDb2RlQmxvY2sqIGNhbmRp
ZGF0ZSkKLSAgICAgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0ZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2sgPT0gY2Fu
ZGlkYXRlKQotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVy
biBmb3VuZDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ29kZUJsb2NrKiBjYW5kaWRh
dGU7Ci0gICAgICAgIG11dGFibGUgYm9vbCBmb3VuZCB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICAK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIENvZGVCbG9ja1ZhbGlkYXRpb25GdW5jdG9y
IGZ1bmN0b3IoY2FuZGlkYXRlKTsKLSAgICB2bS5oZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rv
cik7Ci0gICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7Ci19Ci0KLUNvZGVCbG9jayogSlNEb2xsYXJW
TVByb3RvdHlwZTo6Y29kZUJsb2NrRm9yRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVu
c2lnbmVkIGZyYW1lTnVtYmVyKQotewotICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNK
U0xvY2sodG9wQ2FsbEZyYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAg
aWYgKCF0b3BDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN0
cnVjdCBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgRmV0Y2hD
b2RlQmxvY2tGdW5jdG9yKHVuc2lnbmVkIHRhcmdldEZyYW1lTnVtYmVyKQotICAgICAgICAgICAg
OiB0YXJnZXRGcmFtZSh0YXJnZXRGcmFtZU51bWJlcikKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgY3VycmVudEZyYW1l
Kys7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lID09IHRhcmdldEZyYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCB0YXJnZXRGcmFtZTsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBj
dXJyZW50RnJhbWUgeyAwIH07Ci0gICAgICAgIG11dGFibGUgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
eyBudWxscHRyIH07Ci0gICAgfTsKLSAgICAKLSAgICBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgZnVu
Y3RvcihmcmFtZU51bWJlcik7Ci0gICAgdG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwot
ICAgIHJldHVybiBmdW5jdG9yLmNvZGVCbG9jazsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFtZShFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgaWYgKCF2YWx1ZS5pc1VJbnQzMigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgLy8gV2Ug
bmVlZCB0byBpbmMgdGhlIGZyYW1lIG51bWJlciBiZWNhdXNlIHRoZSBjYWxsZXIgd291bGQgY29u
c2lkZXIKLSAgICAvLyBpdHMgb3duIGZyYW1lIGFzIGZyYW1lIDAuIEhlbmNlLCB3ZSBuZWVkIGRp
c2NvdW50IHRoZSBmcmFtZSBmb3IgdGhpcwotICAgIC8vIGZ1bmN0aW9uLgotICAgIHVuc2lnbmVk
IGZyYW1lTnVtYmVyID0gdmFsdWUuYXNVSW50MzIoKSArIDE7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBKU0RvbGxhclZNUHJvdG90eXBlOjpjb2RlQmxvY2tGb3JGcmFtZShleGVjLCBmcmFt
ZU51bWJlcik7Ci0gICAgLy8gVGhvdWdoIENvZGVCbG9jayBpcyBhIEpTQ2VsbCwgaXQgaXMgbm90
IHNhZmUgdG8gcmV0dXJuIGl0IGRpcmVjdGx5IGJhY2sgdG8gSlMgY29kZQotICAgIC8vIGFzIGl0
IGlzIGFuIGludGVybmFsIHR5cGUgdGhhdCB0aGUgSlMgY29kZSBjYW5ub3QgaGFuZGxlLiBIZW5j
ZSwgd2UgZmlyc3QgZW5jb2RlIHRoZQotICAgIC8vIENvZGVCbG9jayogYXMgYSBkb3VibGUgdG9r
ZW4gKHdoaWNoIGlzIHNhZmUgZm9yIEpTIGNvZGUgdG8gaGFuZGxlKSBiZWZvcmUgcmV0dXJuaW5n
IGl0LgotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiaXR3aXNlX2Nhc3Q8ZG91
YmxlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVCbG9jaykpKSkpOwotfQotCi1zdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2tGcm9tQXJnKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEpT
VmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBDb2RlQmxvY2sq
IGNhbmRpZGF0ZUNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7
Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2
bSwgdmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoZnVuYykgewotICAgICAgICAgICAgaWYg
KGZ1bmMtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29kZUJs
b2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYW5kaWRh
dGVDb2RlQmxvY2sgPSBmdW5jLT5qc0V4ZWN1dGFibGUoKS0+ZWl0aGVyQ29kZUJsb2NrKCk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKLSAgICAgICAgLy8g
SWYgdGhlIHZhbHVlIGlzIGEgZG91YmxlLCBpdCBtYXkgYmUgYW4gZW5jb2RlZCBDb2RlQmxvY2sq
IHRoYXQgY2FtZSBmcm9tCi0gICAgICAgIC8vICR2bS5jb2RlQmxvY2tGb3JGcmFtZSgpLiBXZSds
bCB0cmVhdCBpdCBhcyBhIGNhbmRpZGF0ZSBjb2RlQmxvY2sgYW5kIGNoZWNrIGlmIGl0J3MKLSAg
ICAgICAgLy8gdmFsaWQgYmVsb3cgYmVmb3JlIHVzaW5nLgotICAgICAgICBjYW5kaWRhdGVDb2Rl
QmxvY2sgPSByZWludGVycHJldF9jYXN0PENvZGVCbG9jayo+KGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4odmFsdWUuYXNEb3VibGUoKSkpOwotICAgIH0KLQotICAgIGlmIChjYW5kaWRhdGVDb2RlQmxv
Y2sgJiYgSlNEb2xsYXJWTVByb3RvdHlwZTo6aXNWYWxpZENvZGVCbG9jayhleGVjLCBjYW5kaWRh
dGVDb2RlQmxvY2spKQotICAgICAgICByZXR1cm4gY2FuZGlkYXRlQ29kZUJsb2NrOwotCi0gICAg
aWYgKGNhbmRpZGF0ZUNvZGVCbG9jaykKLSAgICAgICAgZGF0YUxvZygiSW52YWxpZCBjb2RlQmxv
Y2s6ICIsIFJhd1BvaW50ZXIoY2FuZGlkYXRlQ29kZUJsb2NrKSwgIiAiLCB2YWx1ZSwgIlxuIik7
Ci0gICAgZWxzZQotICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGNvZGVCbG9jazogIiwgdmFsdWUs
ICJcbiIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tGcm9tQXJnKGV4ZWMpOwotICAgIFdU
Rjo6U3RyaW5nUHJpbnRTdHJlYW0gc3RyZWFtOwotICAgIGlmIChjb2RlQmxvY2spIHsKLSAgICAg
ICAgc3RyZWFtLnByaW50KCpjb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKSk7Ci0gICAgfQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsK
LSAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICBjb2RlQmxvY2stPmR1bXBTb3VyY2UoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFy
ZyhleGVjKTsKLSAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRl
Y29kZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0K
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewotICAgICAgICBTdHJpbmcgYXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBkYXRhTG9nKGFyZ1N0cik7Ci0gICAgfQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLWNsYXNzIFBy
aW50RnJhbWVGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjdGlvbiB7Ci0gICAgICAgIFBy
aW50T25lLAotICAgICAgICBQcmludEFsbAotICAgIH07Ci0gICAgCi0gICAgUHJpbnRGcmFtZUZ1
bmN0b3IoQWN0aW9uIGFjdGlvbiwgdW5zaWduZWQgZnJhbWVzVG9Ta2lwKQotICAgICAgICA6IG1f
YWN0aW9uKGFjdGlvbikKLSAgICAgICAgLCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudEZyYW1l
Kys7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA+IG1fZnJhbWVzVG9Ta2lwKSB7Ci0gICAg
ICAgICAgICB2aXNpdG9yLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgSW5kZW50ZXIoMiksIFsmXSAo
UHJpbnRTdHJlYW0mIG91dCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludCgiWyIsIChtX2N1
cnJlbnRGcmFtZSAtIG1fZnJhbWVzVG9Ta2lwIC0gMSksICJdICIpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fYWN0aW9uID09IFByaW50T25lICYmIG1fY3VycmVu
dEZyYW1lID4gbV9mcmFtZXNUb1NraXApCi0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOwotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIEFjdGlvbiBtX2FjdGlvbjsKLSAgICB1bnNpZ25lZCBtX2ZyYW1l
c1RvU2tpcDsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY3VycmVudEZyYW1lIHsgMCB9OwotfTsK
LQotc3RhdGljIHZvaWQgcHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2ln
bmVkIGZyYW1lc1RvU2tpcCkKLXsKLSAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNM
b2NrKGNhbGxGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBQcmludEZyYW1lRnVuY3RvciBm
dW5jdG9yKFByaW50RnJhbWVGdW5jdG9yOjpQcmludE9uZSwgZnJhbWVzVG9Ta2lwKTsKLSAgICBj
YWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci19Ci0KLXZvaWQgSlNEb2xsYXJWTVByb3RvdHlw
ZTo6cHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNDOjpwcmlu
dENhbGxGcmFtZShjYWxsRnJhbWUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBwcmludFN0YWNrKENh
bGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZXNUb1NraXApCi17Ci0gICAgaWYg
KCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayh0b3BDYWxsRnJhbWUpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF0b3BDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBQcmlu
dEZyYW1lRnVuY3RvciBmdW5jdG9yKFByaW50RnJhbWVGdW5jdG9yOjpQcmludEFsbCwgZnJhbWVz
VG9Ta2lwKTsKLSAgICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci19Ci0KLXZvaWQg
SlNEb2xsYXJWTVByb3RvdHlwZTo6cHJpbnRTdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkK
LXsKLSAgICBKU0M6OnByaW50U3RhY2sodG9wQ2FsbEZyYW1lLCAwKTsKLX0KLQotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludENhbGxGcmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgLy8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24s
IHRoZXkgYXJlIGV4cGVjdGluZyB0byBwcmludCB0aGVpcgotICAgIC8vIG93biBmcmFtZS4gU28g
c2tpcCAxIGZvciB0aGlzIGZyYW1lLgotICAgIHByaW50Q2FsbEZyYW1lKGV4ZWMsIDEpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGFjayhFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgLy8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkg
YXJlIGV4cGVjdGluZyB0byBwcmludCB0aGUKLSAgICAvLyBzdGFjayBzdGFydGluZyB0aGVpciBv
d24gZnJhbWUuIFNvIHNraXAgMSBmb3IgdGhpcyBmcmFtZS4KLSAgICBwcmludFN0YWNrKGV4ZWMs
IDEpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXZv
aWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6cHJpbnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQotewotICAg
IGRhdGFMb2codmFsdWUpOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXVEY6OlN0cmluZ1ByaW50
U3RyZWFtIHN0cmVhbTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICBzdHJlYW0ucHJp
bnQoIiwgIik7Ci0gICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNoZWNrZWRBcmd1bWVudChp
KSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhl
Yywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25HZXRQSUQoRXhlY1N0YXRlKikKLXsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGdldEN1cnJlbnRQcm9jZXNzSUQoKSkpOwotfQotCi12b2lkIEpT
RG9sbGFyVk1Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgCi0g
ICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImNyYXNoIiwgZnVuY3Rpb25DcmFzaCwg
MCk7Ci0gICAgCi0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZmdUcnVlIiksIDAsIGZ1bmN0aW9uREZHVHJ1
ZSwgREZHVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwotICAgIAotICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
ICJsbGludFRydWUiLCBmdW5jdGlvbkxMaW50VHJ1ZSwgMCk7Ci0gICAgYWRkRnVuY3Rpb24odm0s
IGdsb2JhbE9iamVjdCwgImppdFRydWUiLCBmdW5jdGlvbkpJVFRydWUsIDApOwotICAgIAotICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJnYyIsIGZ1bmN0aW9uR0MsIDApOwotICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJlZGVuR0MiLCBmdW5jdGlvbkVkZW5HQywg
MCk7Ci0gICAgCi0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImNvZGVCbG9ja0Zv
ciIsIGZ1bmN0aW9uQ29kZUJsb2NrRm9yLCAxKTsKLSAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCAiY29kZUJsb2NrRm9yRnJhbWUiLCBmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lLCAx
KTsKLSAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnRTb3VyY2VGb3IiLCBm
dW5jdGlvblByaW50U291cmNlRm9yLCAxKTsKLSAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCAicHJpbnRCeXRlQ29kZUZvciIsIGZ1bmN0aW9uUHJpbnRCeXRlQ29kZUZvciwgMSk7Ci0g
ICAgCi0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInByaW50IiwgZnVuY3Rpb25Q
cmludCwgMSk7Ci0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInByaW50Q2FsbEZy
YW1lIiwgZnVuY3Rpb25QcmludENhbGxGcmFtZSwgMCk7Ci0gICAgYWRkRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgInByaW50U3RhY2siLCBmdW5jdGlvblByaW50U3RhY2ssIDApOwotCi0gICAg
YWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInZhbHVlIiwgZnVuY3Rpb25WYWx1ZSwgMSk7
Ci0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImdldHBpZCIsIGZ1bmN0aW9uR2V0
UElELCAwKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmgJKHJldmlzaW9uIDIyNDc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU09iamVjdC5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSGVhcDsKLQotY2xhc3MgSlNEb2xsYXJWTVBy
b3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRp
YyBKU0RvbGxhclZNUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTRG9sbGFy
Vk1Qcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9s
bGFyVk1Qcm90b3R5cGU+KHZtLmhlYXApKSBKU0RvbGxhclZNUHJvdG90eXBlKHZtLCBzdHJ1Y3R1
cmUpOwotICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5n
IGFyZSBleHBvcnRlZCBiZWNhdXNlIHRoZXkgYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxhYmxlIGZy
b20KLSAgICAvLyBsbGRiLiBUaGUgSlMgdmVyc2lvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBv
ZiB0aGVzZS4KLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXJyZW50
VGhyZWFkT3duc0pTTG9jayhFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnYyhFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBlZGVuR0MoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
aXNJbkhlYXAoSGVhcCosIHZvaWQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBpc0luT2JqZWN0U3BhY2UoSGVhcCosIHZvaWQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBpc0luU3RvcmFnZVNwYWNlKEhlYXAqLCB2b2lkKik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgaXNWYWxpZENlbGwoSGVhcCosIEpTQ2VsbCopOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGlzVmFsaWRDb2RlQmxvY2soRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lTnVt
YmVyKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludENhbGxGcmFtZShD
YWxsRnJhbWUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludFN0YWNr
KENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwcmludFZhbHVlKEpTVmFsdWUpOwotCi1wcml2YXRlOgotICAgIEpTRG9sbGFyVk1Qcm90
b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U0dsb2JhbE9iamVjdCopOwotICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHJldmlzaW9uIDIyNDc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDEwIEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0
LmgiCiAjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2Nv
cGUuaCIKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgorI2luY2x1ZGUgIk1hcmtlZFNwYWNl
SW5saW5lcy5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgPG11dGV4Pgog
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCkBAIC0xOTQsNCArMTk3LDE5MCBAQCBhdXRvIFZN
SW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JNYWNoaW5lUEMoCiAjZW5kaWYKIH0KIAorYm9vbCBWTUlu
c3BlY3Rvcjo6Y3VycmVudFRocmVhZE93bnNKU0xvY2soRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCk7Cit9CisK
K3N0YXRpYyBib29sIGVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoVk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGV4ZWMp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkYXRhTG9nKCJFUlJPUjogY3VycmVudCB0aHJl
YWQgZG9lcyBub3Qgb3duIHRoZSBKU0xvY2tcbiIpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBWTUluc3BlY3Rvcjo6Z2MoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjplZGVuR0MoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50
VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZtLmhlYXAuY29s
bGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKK30KKworYm9vbCBWTUluc3BlY3Rvcjo6
aXNJbkhlYXAoSGVhcCogaGVhcCwgdm9pZCogcHRyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5k
aWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocHRyKTsKKyAgICBpZiAoaGVhcC0+b2JqZWN0
U3BhY2UoKS5ibG9ja3MoKS5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBmb3IgKExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA6IGhlYXAtPm9i
amVjdFNwYWNlKCkubGFyZ2VBbGxvY2F0aW9ucygpKSB7CisgICAgICAgIGlmIChhbGxvY2F0aW9u
LT5jb250YWlucyhwdHIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RydWN0IENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIDogTWFya2Vk
QmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgQ2VsbEFkZHJlc3NDaGVja0Z1bmN0b3IoSlNDZWxs
KiBjYW5kaWRhdGUpCisgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0ZSkKKyAgICB7CisgICAg
fQorCisgICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENlbGwqIGNlbGwsIEhlYXBD
ZWxsOjpLaW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNlbGwgPT0gY2FuZGlkYXRlKSB7
CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpEb25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgIH0KKworICAgIEpTQ2VsbCogY2FuZGlkYXRlOworICAgIG11dGFibGUg
Ym9vbCBmb3VuZCB7IGZhbHNlIH07Cit9OworCitib29sIFZNSW5zcGVjdG9yOjppc1ZhbGlkQ2Vs
bChIZWFwKiBoZWFwLCBKU0NlbGwqIGNhbmRpZGF0ZSkKK3sKKyAgICBIZWFwSXRlcmF0aW9uU2Nv
cGUgaXRlcmF0aW9uU2NvcGUoKmhlYXApOworICAgIENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIGZ1
bmN0b3IoY2FuZGlkYXRlKTsKKyAgICBoZWFwLT5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2Vs
bChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7CisgICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7Cit9
CisKK2Jvb2wgVk1JbnNwZWN0b3I6OmlzVmFsaWRDb2RlQmxvY2soRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIGNhbmRpZGF0ZSkKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25z
SlNMb2NrKGV4ZWMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3QgQ29kZUJs
b2NrVmFsaWRhdGlvbkZ1bmN0b3IgeworICAgICAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3Rv
cihDb2RlQmxvY2sqIGNhbmRpZGF0ZSkKKyAgICAgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKENvZGVC
bG9jayogY29kZUJsb2NrKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29kZUJs
b2NrID09IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqIGNhbmRp
ZGF0ZTsKKyAgICAgICAgbXV0YWJsZSBib29sIGZvdW5kIHsgZmFsc2UgfTsKKyAgICB9OworCisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3RvciBm
dW5jdG9yKGNhbmRpZGF0ZSk7CisgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3Ip
OworICAgIHJldHVybiBmdW5jdG9yLmZvdW5kOworfQorCitDb2RlQmxvY2sqIFZNSW5zcGVjdG9y
Ojpjb2RlQmxvY2tGb3JGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSwgdW5zaWduZWQgZnJh
bWVOdW1iZXIpCit7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayh0b3BD
YWxsRnJhbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghdG9wQ2FsbEZy
YW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0cnVjdCBGZXRjaENvZGVCbG9j
a0Z1bmN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRmV0Y2hDb2RlQmxvY2tGdW5jdG9yKHVu
c2lnbmVkIHRhcmdldEZyYW1lTnVtYmVyKQorICAgICAgICAgICAgOiB0YXJnZXRGcmFtZSh0YXJn
ZXRGcmFtZU51bWJlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RhY2tWaXNp
dG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gY3VycmVudEZyYW1lID0gbmV4dEZyYW1lKys7CisgICAg
ICAgICAgICBpZiAoY3VycmVudEZyYW1lID09IHRhcmdldEZyYW1lKSB7CisgICAgICAgICAgICAg
ICAgY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
dGFyZ2V0RnJhbWU7CisgICAgICAgIG11dGFibGUgdW5zaWduZWQgbmV4dEZyYW1lIHsgMCB9Owor
ICAgICAgICBtdXRhYmxlIENvZGVCbG9jayogY29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIH07
CisKKyAgICBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgZnVuY3RvcihmcmFtZU51bWJlcik7CisgICAg
dG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9yLmNvZGVC
bG9jazsKK30KKworY2xhc3MgUHJpbnRGcmFtZUZ1bmN0b3IgeworcHVibGljOgorICAgIGVudW0g
QWN0aW9uIHsKKyAgICAgICAgUHJpbnRPbmUsCisgICAgICAgIFByaW50QWxsCisgICAgfTsKKwor
ICAgIFByaW50RnJhbWVGdW5jdG9yKEFjdGlvbiBhY3Rpb24sIHVuc2lnbmVkIGZyYW1lc1RvU2tp
cCkKKyAgICAgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgICAgICwgbV9mcmFtZXNUb1NraXAo
ZnJhbWVzVG9Ta2lwKQorICAgIHsKKyAgICB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBv
cGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIG1f
Y3VycmVudEZyYW1lKys7CisgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA+IG1fZnJhbWVzVG9T
a2lwKSB7CisgICAgICAgICAgICB2aXNpdG9yLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgSW5kZW50
ZXIoMiksIFsmXSAoUHJpbnRTdHJlYW0mIG91dCkgeworICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiWyIsIChtX2N1cnJlbnRGcmFtZSAtIG1fZnJhbWVzVG9Ta2lwIC0gMSksICJdICIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYWN0aW9uID09IFByaW50T25l
ICYmIG1fY3VycmVudEZyYW1lID4gbV9mcmFtZXNUb1NraXApCisgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWN0aW9uIG1fYWN0aW9uOworICAgIHVuc2lnbmVk
IG1fZnJhbWVzVG9Ta2lwOworICAgIG11dGFibGUgdW5zaWduZWQgbV9jdXJyZW50RnJhbWUgeyAw
IH07Cit9OworCit2b2lkIFZNSW5zcGVjdG9yOjpwcmludENhbGxGcmFtZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgdW5zaWduZWQgZnJhbWVzVG9Ta2lwKQoreworICAgIGlmICghZW5zdXJlQ3VycmVu
dFRocmVhZE93bnNKU0xvY2soY2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIFByaW50
RnJhbWVGdW5jdG9yIGZ1bmN0b3IoUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50T25lLCBmcmFtZXNU
b1NraXApOworICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKK30KKwordm9pZCBWTUlu
c3BlY3Rvcjo6cHJpbnRTdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSwgdW5zaWduZWQgZnJh
bWVzVG9Ta2lwKQoreworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2sodG9w
Q2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdG9wQ2FsbEZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgUHJpbnRGcmFtZUZ1bmN0b3IgZnVuY3RvcihQcmludEZyYW1lRnVu
Y3Rvcjo6UHJpbnRBbGwsIGZyYW1lc1RvU2tpcCk7CisgICAgdG9wQ2FsbEZyYW1lLT5pdGVyYXRl
KGZ1bmN0b3IpOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjpwcmludFZhbHVlKEpTVmFsdWUgdmFs
dWUpCit7CisgICAgZGF0YUxvZyh2YWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHJldmlzaW9uIDIy
NDc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgRXhwZWN0ZWQ8Ym9vbCwg
RXJyb3I+IGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0IExvY2tlciYsIHZvaWQqKTsKICAg
ICBFeHBlY3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4gY29kZUJsb2NrRm9yTWFjaGluZVBDKGNvbnN0
IExvY2tlciYsIHZvaWQqKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1
cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdjKEV4ZWNTdGF0ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGVkZW5HQyhFeGVjU3RhdGUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBpc0luSGVhcChIZWFwKiwgdm9pZCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGlzVmFsaWRDZWxsKEhlYXAqLCBKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29kZUJsb2NrKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckZyYW1l
KENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZU51bWJlcik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiwgdW5z
aWduZWQgZnJhbWVzVG9Ta2lwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBw
cmludFN0YWNrKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZXNUb1NraXAp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHByaW50VmFsdWUoSlNWYWx1ZSk7
CisKIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0
ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326913</attachid>
            <date>2017-11-14 13:08:07 -0800</date>
            <delta_ts>2017-11-14 13:11:47 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-179685.patch</filename>
            <type>text/plain</type>
            <size>49819</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0ODM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE3LTExLTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgSlNEb2xsYXJWTVByb3RvdHlwZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3OTY4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDEuIE1vdmUgdGhlIEpTRG9sbGFyVk1Qcm90b3R5cGUgQysrIHV0
aWxpdHkgZnVuY3Rpb25zIGludG8gVk1JbnNwZWN0b3IuY3BwLgorCisgICAgICAgICAgIFRoaXMg
YWxsb3dzIHVzIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zIGR1cmluZyBsbGRiIGRlYnVnZ2luZyBz
ZXNzaW9ucyB1c2luZworICAgICAgICAgICBWTUluc3BlY3Rvcjo6Zm9vKCkgaW5zdGVhZCBvZiBK
U0RvbGxhclZNUHJvdG90eXBlOjpmb28oKS4gIEl0IG1ha2VzIHNlbnNlIHRoYXQKKyAgICAgICAg
ICAgVk1JbnNwZWN0b3IgcHJvdmlkZXMgVk0gZGVidWdnaW5nIHV0aWxpdHkgbWV0aG9kcy4gIEl0
IGRvZXNuJ3QgbWFrZSBzZW5zZSB0bworICAgICAgICAgICBoYXZlIGEgSlNEb2xsYXJWTVByb3Rv
dHlwZSBvYmplY3QgcHJvdmlkZSB0aGVzZSBtZXRob2RzLgorCisgICAgICAgICAgIFBsdXMsIGl0
J3Mgc2hvcnRlciB0byB0eXBlIFZNSW5zcGVjdG9yIHRoYW4gSlNEb2xsYXJWTVByb3RvdHlwZS4K
KworICAgICAgICAyLiBNb3ZlIHRoZSBKU0RvbGxhclZNUHJvdG90eXBlIEpTIGZ1bmN0aW9ucyBp
bnRvIEpTRG9sbGFyVk0uY3BwLgorCisgICAgICAgICAgIEpTRG9sbGFyVk0gaXMgYSBzcGVjaWFs
IG9iamVjdCB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFRoZXJlJ3Mgbm8KKyAg
ICAgICAgICAgZ2FpbiBpbiByZXF1aXJpbmcgaXRzIG1ldGhvZHMgdG8gYmUgc3RvcmVkIGluIGEg
cHJvdG90eXBlIG9iamVjdCBvdGhlciB0aGFuIHRvCisgICAgICAgICAgIGNvbmZvcm0gdG8gdHlw
aWNhbCBKUyBjb252ZW50aW9uLiAgV2UgY2FuIHJlbW92ZSB0aGlzIGNvbXBsZXhpdHkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmFkZEZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uREZHVHJ1
ZSk6CisgICAgICAgIChKU0M6OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3I6OkNhbGxlckZyYW1l
SklUVHlwZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9y
OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbGVyRnJhbWVKSVRUeXBlRnVu
Y3Rvcjo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTExpbnRUcnVlKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25KSVRUcnVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HQyk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uRWRlbkdDKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Db2Rl
QmxvY2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OmNvZGVCbG9ja0Zyb21BcmcpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJp
bnRTb3VyY2VGb3IpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Qnl0ZWNvZGVGb3IpOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcmlu
dENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRTdGFjayk6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uVmFsdWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdldFBJRCk6Cisg
ICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB0b29s
cy9KU0RvbGxhclZNLmg6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmNyZWF0ZSk6CisgICAg
ICAgICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
dG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHRvb2xzL1ZN
SW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRP
d25zSlNMb2NrKToKKyAgICAgICAgKEpTQzo6ZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2sp
OgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6Z2MpOgorICAgICAgICAoSlNDOjpWTUluc3Bl
Y3Rvcjo6ZWRlbkdDKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmlzSW5IZWFwKToKKyAg
ICAgICAgKEpTQzo6Q2VsbEFkZHJlc3NDaGVja0Z1bmN0b3I6OkNlbGxBZGRyZXNzQ2hlY2tGdW5j
dG9yKToKKyAgICAgICAgKEpTQzo6Q2VsbEFkZHJlc3NDaGVja0Z1bmN0b3I6Om9wZXJhdG9yKCkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6aXNWYWxpZENlbGwpOgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aXNWYWxpZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlZN
SW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OlByaW50RnJhbWVG
dW5jdG9yOjpQcmludEZyYW1lRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlByaW50RnJhbWVGdW5j
dG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnByaW50
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnByaW50U3RhY2spOgorICAg
ICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6cHJpbnRWYWx1ZSk6CisgICAgICAgICogdG9vbHMvVk1J
bnNwZWN0b3IuaDoKKwogMjAxNy0xMS0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBhIFNlcnZpY2VXb3JrZXIgZG9t
YWluIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBpbnNwZWN0ZWQgU2VydmljZVdvcmtlcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI0Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyAr
OTMyLDYgQEAgdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRl
bGlzdC5jcHAKIHRvb2xzL0hlYXBWZXJpZmllci5jcHAKIHRvb2xzL0pTRG9sbGFyVk0uY3BwCi10
b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHAKIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjI0Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MTYs
NyArMTcxNiw2IEBACiAJCUZFMzE4RkUwMUNBQzk4MkYwMERGQ0M1NCAvKiBFQ01BU2NyaXB0U3Bl
Y0ludGVybmFsRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTMxOEZERTFDQUM4QzUzMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRl
cm5hbEZ1bmN0aW9ucy5oICovOyB9OwogCQlGRTM0MjIxMjFENkI4MUMzMDAzMkJFODggLyogVGhy
b3dTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNjFBRERCN0FEMDA1NURF
MkMgLyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRTM4NEVFODFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk1Qcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTNBMDZBNjFDMTBCNzJEMDAzOTBGREQgLyogSklUQml0T3JHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0Ew
NkE0MUMxMEI3MDgwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5oICovOyB9OwogCQlGRTNB
MDZBODFDMTBCQzgxMDAzOTBGREQgLyogSklUQml0QmluYXJ5T3BHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkE3MUMxMEJDNzQw
MDM5MEZERCAvKiBKSVRCaXRCaW5hcnlPcEdlbmVyYXRvci5oICovOyB9OwogCQlGRTNBMDZCMjFD
MTBDQjg5MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZBRTFDMTBDQjZGMDAzOTBGREQgLyog
SklUQml0QW5kR2VuZXJhdG9yLmggKi87IH07CkBAIC0zMTgxLDkgKzMxODAsOSBAQAogCQk1MzBB
NjZCNTFGQTNFNzdEMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTUtbW0ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSAiVW5pZmllZFNvdXJjZTUtbW0ubW0iOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjZCNjFGQTNFNzdEMDAyNkE1NDUgLyogVW5p
ZmllZFNvdXJjZTE0Mi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
bmlmaWVkU291cmNlMTQyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTY2
QjcxRkEzRTc3RDAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UxNDMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZmllZFNvdXJjZTE0My5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0gICAgICAgICAgICAgICAgNTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1
IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gIlVuaWZpZWRTb3VyY2U0LW1tLm1tIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLSAgICAgICAgICAgICAgICA1MzBBNjZDQzFGQjEzNDZEMDAyNkE1NDUgLyogU3VwZXJTYW1w
bGVyQnl0ZWNvZGVTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBsZXJCeXRlY29kZVNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0gICAgICAgICAgICAgICAgNTMwRkIz
MDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gIlVuaWZpZWRTb3VyY2U0LW1tLm1t
Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwQTY2Q0MxRkIxMzQ2RDAwMjZBNTQ1
IC8qIFN1cGVyU2FtcGxlckJ5dGVjb2RlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJTYW1w
bGVyQnl0ZWNvZGVTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMw
MTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxh
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT01HUGxhbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDQ5MUVBNTgxRTUwMDUyNTI4
MSAvKiBXYXNtT01HUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
T01HUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU4NCw4ICs0NTgzLDYg
QEAKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvbGxhclZNLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9s
bGFyVk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEb2xsYXJWTS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTM4NEVFMzFBRERCN0FEMDA1NURFMkMgLyog
SlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RvbGxhclZNUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEb2xsYXJWTVByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTNBMDZBMzFDMTBCNzA4MDAzOTBGREQgLyogSklU
Qml0T3JHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SklUQml0T3JHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTNB
MDZBNDFDMTBCNzA4MDAzOTBGREQgLyogSklUQml0T3JHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQml0T3JHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUzQTA2QTcxQzEwQkM3NDAwMzkwRkREIC8qIEpJVEJpdEJpbmFyeU9w
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVEJpdEJpbmFy
eU9wR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODk5LDggKzY4
OTYsNiBAQAogCQkJCUZFMUJEMDIzMUU3MjA1MkYwMDEzNEJDOSAvKiBIZWFwVmVyaWZpZXIuaCAq
LywKIAkJCQlGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8sCiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKLQkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCi0JCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKIAkJ
CQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8sCiAJCQkJ
RkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovLAog
CQkJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi8s
CkBAIC04NzgwLDcgKzg3NzUsNiBAQAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxM0MxRTI5NzEx
MzAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhw
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNF
eHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5ODkzNzc5MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI0Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw2IEBACiAjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgog
I2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0RvbGxhclZNLmgi
Ci0jaW5jbHVkZSAiSlNEb2xsYXJWTVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKQEAgLTg5Niw5ICs4OTUsOCBAQCBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgbV9saW5rVGltZUNv
bnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6VGhyb3dUeXBl
RXJyb3JGdW5jdGlvbildID0gbV90aHJvd1R5cGVFcnJvckZ1bmN0aW9uLmdldCgpOwogCiAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpKSB7Ci0gICAgICAgIEpTRG9sbGFy
Vk1Qcm90b3R5cGUqIGRvbGxhclZNUHJvdG90eXBlID0gSlNEb2xsYXJWTVByb3RvdHlwZTo6Y3Jl
YXRlKHZtLCB0aGlzLCBKU0RvbGxhclZNUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRo
aXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgICAgIG1fZG9sbGFyVk1TdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBKU0RvbGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGRv
bGxhclZNUHJvdG90eXBlKSk7Ci0gICAgICAgIEpTRG9sbGFyVk0qIGRvbGxhclZNID0gSlNEb2xs
YXJWTTo6Y3JlYXRlKHZtLCBtX2RvbGxhclZNU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgbV9k
b2xsYXJWTVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRG9sbGFyVk06OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgSlNEb2xsYXJW
TSogZG9sbGFyVk0gPSBKU0RvbGxhclZNOjpjcmVhdGUodm0sIHRoaXMsIG1fZG9sbGFyVk1TdHJ1
Y3R1cmUuZ2V0KCkpOwogCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyBleHRyYVN0YXRpY0ds
b2JhbHNbXSA9IHsKICAgICAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5kb2xsYXJWTVByaXZhdGVOYW1lKCksIGRvbGxhclZNLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyMjQ3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTAgKzI2
LDI2OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKIAor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CisjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNEb2xsYXJWTTo6c19pbmZvID0geyAiRG9sbGFyVk0iLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRG9sbGFyVk0pIH07CiAKK3Zv
aWQgSlNEb2xsYXJWTTo6YWRkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKQoreworICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIu
c3RyaW5nKCksIGZ1bmN0aW9uKSk7Cit9CisKKy8vIFRyaWdnZXJzIGEgY3Jhc2ggaW1tZWRpYXRl
bHkuCisvLyBVc2FnZTogJHZtLmNyYXNoKCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRlKikKK3sKKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY3VycmVudCBmcmFtZSBpcyBhIERGRyBmcmFtZS4KKy8vIFVzYWdlOiBpc0RGRyA9
ICR2bS5kZmdUcnVlKCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uREZHVHJ1ZShFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGZhbHNlKSk7Cit9CisKK2NsYXNzIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3Igewor
cHVibGljOgorICAgIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IoKQorICAgICAgICA6IG1fY3Vy
cmVudEZyYW1lKDApCisgICAgICAgICwgbV9qaXRUeXBlKEpJVENvZGU6Ok5vbmUpCisgICAgewor
ICAgIH0KKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lKysgPiAx
KSB7CisgICAgICAgICAgICBtX2ppdFR5cGUgPSB2aXNpdG9yLT5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICB9CisgICAgCisgICAg
SklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgeyByZXR1cm4gbV9qaXRUeXBlOyB9CisKK3ByaXZh
dGU6CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2N1cnJlbnRGcmFtZTsKKyAgICBtdXRhYmxlIEpJ
VENvZGU6OkpJVFR5cGUgbV9qaXRUeXBlOworfTsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
dXJyZW50IGZyYW1lIGlzIGEgTExJbnQgZnJhbWUuCisvLyBVc2FnZTogaXNMTEludCA9ICR2bS5s
bGludFRydWUoKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25M
TGludFRydWUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBDYWxsZXJGcmFtZUpJVFR5
cGVGdW5jdG9yIGZ1bmN0b3I7CisgICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVu
dCBmcmFtZSBpcyBhIGJhc2VsaW5lIEpJVCBmcmFtZS4KKy8vIFVzYWdlOiBpc0Jhc2VsaW5lSklU
ID0gJHZtLmppdFRydWUoKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25KSVRUcnVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgQ2FsbGVyRnJhbWVK
SVRUeXBlRnVuY3RvciBmdW5jdG9yOworICAgIGV4ZWMtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZnVuY3Rvci5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpKTsKK30KKworLy8gUnVucyBhIGZ1bGwgR0Mgc3luY2hyb25vdXNs
eS4KKy8vIFVzYWdlOiAkdm0uZ2MoKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk1JbnNwZWN0b3I6OmdjKGV4
ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKKy8v
IFJ1bnMgdGhlIGVkZW5HQyBzeW5jaHJvbm91c2x5LgorLy8gVXNhZ2U6ICR2bS5lZGVuR0MoKQor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNSW5zcGVjdG9yOjplZGVuR0MoZXhlYyk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworLy8gR2V0cyBhIHRva2VuIGZv
ciB0aGUgQ29kZUJsb2NrIGZvciBhIHNwZWNpZmllZCBmcmFtZSBpbmRleC4KKy8vIFVzYWdlOiBj
b2RlQmxvY2tUb2tlbiA9ICR2bS5jb2RlQmxvY2tGb3JGcmFtZSgwKSAvLyBmcmFtZSAwIGlzIHRo
ZSB0b3AgZnJhbWUuCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNvZGVCbG9ja0ZvckZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBpZiAoIXZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGluYyB0aGUgZnJhbWUg
bnVtYmVyIGJlY2F1c2UgdGhlIGNhbGxlciB3b3VsZCBjb25zaWRlcgorICAgIC8vIGl0cyBvd24g
ZnJhbWUgYXMgZnJhbWUgMC4gSGVuY2UsIHdlIG5lZWQgZGlzY291bnQgdGhlIGZyYW1lIGZvciB0
aGlzCisgICAgLy8gZnVuY3Rpb24uCisgICAgdW5zaWduZWQgZnJhbWVOdW1iZXIgPSB2YWx1ZS5h
c1VJbnQzMigpICsgMTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IFZNSW5zcGVjdG9yOjpj
b2RlQmxvY2tGb3JGcmFtZShleGVjLCBmcmFtZU51bWJlcik7CisgICAgLy8gVGhvdWdoIENvZGVC
bG9jayBpcyBhIEpTQ2VsbCwgaXQgaXMgbm90IHNhZmUgdG8gcmV0dXJuIGl0IGRpcmVjdGx5IGJh
Y2sgdG8gSlMgY29kZQorICAgIC8vIGFzIGl0IGlzIGFuIGludGVybmFsIHR5cGUgdGhhdCB0aGUg
SlMgY29kZSBjYW5ub3QgaGFuZGxlLiBIZW5jZSwgd2UgZmlyc3QgZW5jb2RlIHRoZQorICAgIC8v
IENvZGVCbG9jayogYXMgYSBkb3VibGUgdG9rZW4gKHdoaWNoIGlzIHNhZmUgZm9yIEpTIGNvZGUg
dG8gaGFuZGxlKSBiZWZvcmUgcmV0dXJuaW5nIGl0LgorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaykpKSkpOworfQorCitzdGF0aWMgQ29k
ZUJsb2NrKiBjb2RlQmxvY2tGcm9tQXJnKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9IG51bGxwdHI7
CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBq
c0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgdmFsdWUuYXNDZWxsKCkpOworICAgICAgICBp
ZiAoZnVuYykgeworICAgICAgICAgICAgaWYgKGZ1bmMtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb2RlQmxvY2sgPSBmdW5jLT5qc0V4ZWN1dGFi
bGUoKS0+ZWl0aGVyQ29kZUJsb2NrKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZhbHVl
LmlzRG91YmxlKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgZG91YmxlLCBpdCBt
YXkgYmUgYW4gZW5jb2RlZCBDb2RlQmxvY2sqIHRoYXQgY2FtZSBmcm9tCisgICAgICAgIC8vICR2
bS5jb2RlQmxvY2tGb3JGcmFtZSgpLiBXZSdsbCB0cmVhdCBpdCBhcyBhIGNhbmRpZGF0ZSBjb2Rl
QmxvY2sgYW5kIGNoZWNrIGlmIGl0J3MKKyAgICAgICAgLy8gdmFsaWQgYmVsb3cgYmVmb3JlIHVz
aW5nLgorICAgICAgICBjYW5kaWRhdGVDb2RlQmxvY2sgPSByZWludGVycHJldF9jYXN0PENvZGVC
bG9jayo+KGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNEb3VibGUoKSkpOworICAgIH0K
KworICAgIGlmIChjYW5kaWRhdGVDb2RlQmxvY2sgJiYgVk1JbnNwZWN0b3I6OmlzVmFsaWRDb2Rl
QmxvY2soZXhlYywgY2FuZGlkYXRlQ29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGNhbmRpZGF0
ZUNvZGVCbG9jazsKKworICAgIGlmIChjYW5kaWRhdGVDb2RlQmxvY2spCisgICAgICAgIGRhdGFM
b2coIkludmFsaWQgY29kZUJsb2NrOiAiLCBSYXdQb2ludGVyKGNhbmRpZGF0ZUNvZGVCbG9jayks
ICIgIiwgdmFsdWUsICJcbiIpOworICAgIGVsc2UKKyAgICAgICAgZGF0YUxvZygiSW52YWxpZCBj
b2RlQmxvY2s6ICIsIHZhbHVlLCAiXG4iKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8g
VXNhZ2U6IHByaW50KCJjb2RlYmxvY2sgPSAiICsgJHZtLmNvZGVCbG9ja0ZvcihmdW5jdGlvbk9i
aikpCisvLyBVc2FnZTogcHJpbnQoImNvZGVibG9jayA9ICIgKyAkdm0uY29kZUJsb2NrRm9yKGNv
ZGVCbG9ja1Rva2VuKSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7CisgICAgV1RGOjpTdHJpbmdQcmludFN0cmVh
bSBzdHJlYW07CisgICAgaWYgKGNvZGVCbG9jaykgeworICAgICAgICBzdHJlYW0ucHJpbnQoKmNv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
c3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworLy8gVXNhZ2U6ICR2bS5wcmludFNvdXJjZUZvcihmdW5jdGlv
bk9iaikKKy8vIFVzYWdlOiAkdm0ucHJpbnRTb3VyY2VGb3IoY29kZUJsb2NrVG9rZW4pCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U291cmNlRm9yKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zy
b21BcmcoZXhlYyk7CisgICAgaWYgKGNvZGVCbG9jaykKKyAgICAgICAgY29kZUJsb2NrLT5kdW1w
U291cmNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworLy8gVXNhZ2U6ICR2bS5wcmludEJ5dGVjb2RlRm9yKGZ1bmN0aW9uT2JqKQorLy8gVXNhZ2U6
ICR2bS5wcmludEJ5dGVjb2RlKGNvZGVCbG9ja1Rva2VuKQorc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludEJ5dGVjb2RlRm9yKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7Cisg
ICAgaWYgKGNvZGVCbG9jaykKKyAgICAgICAgY29kZUJsb2NrLT5kdW1wQnl0ZWNvZGUoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisvLyBQcmludHMg
YSBzZXJpZXMgb2YgY29tbWEgc2VwYXJhdGUgc3RyaW5ncyB3aXRob3V0IGluc2VydGluZyBhIG5l
d2xpbmUuCisvLyBVc2FnZTogJHZtLnByaW50KHN0cjEsIHN0cjIsIHN0cjMpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgU3RyaW5nIGFyZ1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvV1RG
U3RyaW5nKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgZGF0YUxvZyhhcmdTdHIpOworICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisvLyBQcmludHMgdGhlIGN1cnJl
bnQgQ2FsbEZyYW1lLgorLy8gVXNhZ2U6ICR2bS5wcmludENhbGxGcmFtZSgpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Q2FsbEZyYW1lKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwg
dGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50IHRoZWlyCisgICAgLy8gb3duIGZyYW1lLiBTbyBz
a2lwIDEgZm9yIHRoaXMgZnJhbWUuCisgICAgVk1JbnNwZWN0b3I6OnByaW50Q2FsbEZyYW1lKGV4
ZWMsIDEpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
Ky8vIFByaW50cyB0aGUgSlMgc3RhY2suCisvLyBVc2FnZTogJHZtLnByaW50U3RhY2soKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0YWNrKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlv
biwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50IHRoZQorICAgIC8vIHN0YWNrIHN0YXJ0aW5n
IHRoZWlyIG93biBmcmFtZS4gU28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgorICAgIFZNSW5zcGVj
dG9yOjpwcmludFN0YWNrKGV4ZWMsIDEpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKKy8vIEdldHMgdGhlIGRhdGFMb2cgZHVtcCBvZiBhIGdpdmVuIEpT
IHZhbHVlIGFzIGEgc3RyaW5nLgorLy8gVXNhZ2U6IHByaW50KCJ2YWx1ZSA9ICIgKyAkdm0udmFs
dWUoanNWYWx1ZSkpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0
cmVhbTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBzdHJlYW0ucHJpbnQoIiwgIik7
CisgICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyZWFt
LnRvU3RyaW5nKCkpKTsKK30KKworLy8gR2V0cyB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHByb2Nl
c3MuCisvLyBVc2FnZTogcHJpbnQoInBpZCA9ICIgKyAkdm0uZ2V0cGlkKCkpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFBJRChFeGVjU3RhdGUqKQorewor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ2V0Q3VycmVudFByb2Nlc3NJRCgp
KSk7Cit9CisKK3ZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiY3Jhc2giLCBmdW5jdGlv
bkNyYXNoLCAwKTsKKyAgICAKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRmZ1RydWUiKSwgMCwgZnVuY3Rp
b25ERkdUcnVlLCBERkdUcnVlSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgCisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2Jh
bE9iamVjdCwgImxsaW50VHJ1ZSIsIGZ1bmN0aW9uTExpbnRUcnVlLCAwKTsKKyAgICBhZGRGdW5j
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiaml0VHJ1ZSIsIGZ1bmN0aW9uSklUVHJ1ZSwgMCk7Cisg
ICAgCisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImdjIiwgZnVuY3Rpb25HQywg
MCk7CisgICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImVkZW5HQyIsIGZ1bmN0aW9u
RWRlbkdDLCAwKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiY29k
ZUJsb2NrRm9yIiwgZnVuY3Rpb25Db2RlQmxvY2tGb3IsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsICJjb2RlQmxvY2tGb3JGcmFtZSIsIGZ1bmN0aW9uQ29kZUJsb2NrRm9y
RnJhbWUsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJwcmludFNvdXJj
ZUZvciIsIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IsIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsICJwcmludEJ5dGVjb2RlRm9yIiwgZnVuY3Rpb25QcmludEJ5dGVjb2RlRm9y
LCAxKTsKKyAgICAKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnQiLCBm
dW5jdGlvblByaW50LCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJp
bnRDYWxsRnJhbWUiLCBmdW5jdGlvblByaW50Q2FsbEZyYW1lLCAwKTsKKyAgICBhZGRGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnRTdGFjayIsIGZ1bmN0aW9uUHJpbnRTdGFjaywgMCk7
CisKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAidmFsdWUiLCBmdW5jdGlvblZh
bHVlLCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAiZ2V0cGlkIiwgZnVu
Y3Rpb25HZXRQSUQsIDApOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkocmV2aXNpb24gMjI0Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwx
MSArMzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgSlNEb2xsYXJW
TSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisKKyAgICBzdGF0aWMgSlNE
b2xsYXJWTSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU0RvbGxhclZNKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9sbGFyVk0+KHZtLmhlYXApKSBKU0RvbGxh
clZNKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAgICAgCkBAIC01Miw2ICs1Miw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgIHsKICAgICB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGFk
ZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjI0Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDc2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RvbGxhclZNUHJvdG90eXBlLmgiCi0KLSNp
bmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgotI2lu
Y2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgotI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgotI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY29uc3QgQ2xhc3NJbmZv
IEpTRG9sbGFyVk1Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIkRvbGxhclZNUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RvbGxh
clZNUHJvdG90eXBlKSB9OwotICAgIAotICAgIAotYm9vbCBKU0RvbGxhclZNUHJvdG90eXBlOjpj
dXJyZW50VGhyZWFkT3duc0pTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGV4
ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKTsKLX0KLQotc3RhdGljIGJv
b2wgZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChKU0RvbGxhclZNUHJvdG90eXBlOjpjdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGF0YUxvZygiRVJST1I6IGN1cnJlbnQgdGhyZWFk
IGRvZXMgbm90IG93biB0aGUgSlNMb2NrXG4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6YWRkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlv
biwgdW5zaWduZWQgYXJndW1lbnRzKQotewotICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKLSAgICBwdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlk
ZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRlKikKLXsKLSAgICBDUkFTSCgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uREZHVHJ1ZShFeGVjU3RhdGUq
KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7Ci19Ci0K
LWNsYXNzIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgewotcHVibGljOgotICAgIENhbGxlckZy
YW1lSklUVHlwZUZ1bmN0b3IoKQotICAgICAgICA6IG1fY3VycmVudEZyYW1lKDApCi0gICAgICAg
ICwgbV9qaXRUeXBlKEpJVENvZGU6Ok5vbmUpCi0gICAgewotICAgIH0KLQotICAgIFN0YWNrVmlz
aXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lKysgPiAxKSB7Ci0gICAgICAgICAgICBtX2pp
dFR5cGUgPSB2aXNpdG9yLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpOwotICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpDb250aW51ZTsKLSAgICB9Ci0gICAgCi0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlKCkgeyByZXR1cm4gbV9qaXRUeXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSB1bnNp
Z25lZCBtX2N1cnJlbnRGcmFtZTsKLSAgICBtdXRhYmxlIEpJVENvZGU6OkpJVFR5cGUgbV9qaXRU
eXBlOwotfTsKLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25M
TGludFRydWUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmICghZXhlYykKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBDYWxsZXJGcmFtZUpJVFR5
cGVGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uSklUVHJ1ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKCFleGVj
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIENh
bGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3RvcjsKLSAgICBleGVjLT5pdGVyYXRlKGZ1bmN0
b3IpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZ1bmN0b3Iuaml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSk7Ci19Ci0KLXZvaWQgSlNEb2xsYXJWTVByb3Rv
dHlwZTo6Z2MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OwotfQotICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
QyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MoZXhlYyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotdm9pZCBK
U0RvbGxhclZNUHJvdG90eXBlOjplZGVuR0MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhl
eGVjKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlv
blNjb3BlOjpFZGVuKTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25FZGVuR0MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTRG9sbGFyVk1Qcm90b3R5
cGU6OmVkZW5HQyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotfQotCi1ib29sIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmlzSW5IZWFwKEhlYXAqIGhlYXAs
IHZvaWQqIHB0cikKLXsKLSAgICByZXR1cm4gaXNJbk9iamVjdFNwYWNlKGhlYXAsIHB0cikgfHwg
aXNJblN0b3JhZ2VTcGFjZShoZWFwLCBwdHIpOwotfQotCi1ib29sIEpTRG9sbGFyVk1Qcm90b3R5
cGU6OmlzSW5PYmplY3RTcGFjZShIZWFwKiBoZWFwLCB2b2lkKiBwdHIpCi17Ci0gICAgTWFya2Vk
QmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihwdHIpOwotICAgIGlmICho
ZWFwLT5vYmplY3RTcGFjZSgpLmJsb2NrcygpLnNldCgpLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGZvciAoTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
IDogaGVhcC0+b2JqZWN0U3BhY2UoKS5sYXJnZUFsbG9jYXRpb25zKCkpIHsKLSAgICAgICAgaWYg
KGFsbG9jYXRpb24tPmNvbnRhaW5zKHB0cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEpTRG9sbGFyVk1Qcm90b3R5cGU6Omlz
SW5TdG9yYWdlU3BhY2UoSGVhcCosIHZvaWQqKQotewotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhp
bmcgd2l0aCB0aGlzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjE3NTMKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0cnVjdCBDZWxsQWRkcmVzc0No
ZWNrRnVuY3RvciA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewotICAgIENlbGxBZGRyZXNz
Q2hlY2tGdW5jdG9yKEpTQ2VsbCogY2FuZGlkYXRlKQotICAgICAgICA6IGNhbmRpZGF0ZShjYW5k
aWRhdGUpCi0gICAgewotICAgIH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEhl
YXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChj
ZWxsID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICB9Ci0KLSAgICBKU0NlbGwqIGNhbmRp
ZGF0ZTsKLSAgICBtdXRhYmxlIGJvb2wgZm91bmQgeyBmYWxzZSB9OwotfTsKLQotYm9vbCBKU0Rv
bGxhclZNUHJvdG90eXBlOjppc1ZhbGlkQ2VsbChIZWFwKiBoZWFwLCBKU0NlbGwqIGNhbmRpZGF0
ZSkKLXsKLSAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKmhlYXApOwotICAg
IENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2FuZGlkYXRlKTsKLSAgICBoZWFwLT5v
YmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7Ci0g
ICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7Ci19Ci0KLWJvb2wgSlNEb2xsYXJWTVByb3RvdHlwZTo6
aXNWYWxpZENvZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY2FuZGlkYXRlKQot
ewotICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHJ1Y3QgQ29kZUJsb2NrVmFsaWRhdGlvbkZ1bmN0
b3IgewotICAgICAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3RvcihDb2RlQmxvY2sqIGNhbmRp
ZGF0ZSkKLSAgICAgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0ZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2sgPT0gY2Fu
ZGlkYXRlKQotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVy
biBmb3VuZDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ29kZUJsb2NrKiBjYW5kaWRh
dGU7Ci0gICAgICAgIG11dGFibGUgYm9vbCBmb3VuZCB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICAK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIENvZGVCbG9ja1ZhbGlkYXRpb25GdW5jdG9y
IGZ1bmN0b3IoY2FuZGlkYXRlKTsKLSAgICB2bS5oZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rv
cik7Ci0gICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7Ci19Ci0KLUNvZGVCbG9jayogSlNEb2xsYXJW
TVByb3RvdHlwZTo6Y29kZUJsb2NrRm9yRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVu
c2lnbmVkIGZyYW1lTnVtYmVyKQotewotICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNK
U0xvY2sodG9wQ2FsbEZyYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAg
aWYgKCF0b3BDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN0
cnVjdCBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgRmV0Y2hD
b2RlQmxvY2tGdW5jdG9yKHVuc2lnbmVkIHRhcmdldEZyYW1lTnVtYmVyKQotICAgICAgICAgICAg
OiB0YXJnZXRGcmFtZSh0YXJnZXRGcmFtZU51bWJlcikKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgY3VycmVudEZyYW1l
Kys7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lID09IHRhcmdldEZyYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCB0YXJnZXRGcmFtZTsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBj
dXJyZW50RnJhbWUgeyAwIH07Ci0gICAgICAgIG11dGFibGUgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
eyBudWxscHRyIH07Ci0gICAgfTsKLSAgICAKLSAgICBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgZnVu
Y3RvcihmcmFtZU51bWJlcik7Ci0gICAgdG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwot
ICAgIHJldHVybiBmdW5jdG9yLmNvZGVCbG9jazsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFtZShFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgaWYgKCF2YWx1ZS5pc1VJbnQzMigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgLy8gV2Ug
bmVlZCB0byBpbmMgdGhlIGZyYW1lIG51bWJlciBiZWNhdXNlIHRoZSBjYWxsZXIgd291bGQgY29u
c2lkZXIKLSAgICAvLyBpdHMgb3duIGZyYW1lIGFzIGZyYW1lIDAuIEhlbmNlLCB3ZSBuZWVkIGRp
c2NvdW50IHRoZSBmcmFtZSBmb3IgdGhpcwotICAgIC8vIGZ1bmN0aW9uLgotICAgIHVuc2lnbmVk
IGZyYW1lTnVtYmVyID0gdmFsdWUuYXNVSW50MzIoKSArIDE7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBKU0RvbGxhclZNUHJvdG90eXBlOjpjb2RlQmxvY2tGb3JGcmFtZShleGVjLCBmcmFt
ZU51bWJlcik7Ci0gICAgLy8gVGhvdWdoIENvZGVCbG9jayBpcyBhIEpTQ2VsbCwgaXQgaXMgbm90
IHNhZmUgdG8gcmV0dXJuIGl0IGRpcmVjdGx5IGJhY2sgdG8gSlMgY29kZQotICAgIC8vIGFzIGl0
IGlzIGFuIGludGVybmFsIHR5cGUgdGhhdCB0aGUgSlMgY29kZSBjYW5ub3QgaGFuZGxlLiBIZW5j
ZSwgd2UgZmlyc3QgZW5jb2RlIHRoZQotICAgIC8vIENvZGVCbG9jayogYXMgYSBkb3VibGUgdG9r
ZW4gKHdoaWNoIGlzIHNhZmUgZm9yIEpTIGNvZGUgdG8gaGFuZGxlKSBiZWZvcmUgcmV0dXJuaW5n
IGl0LgotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiaXR3aXNlX2Nhc3Q8ZG91
YmxlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVCbG9jaykpKSkpOwotfQotCi1zdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2tGcm9tQXJnKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEpT
VmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBDb2RlQmxvY2sq
IGNhbmRpZGF0ZUNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7
Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2
bSwgdmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoZnVuYykgewotICAgICAgICAgICAgaWYg
KGZ1bmMtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29kZUJs
b2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYW5kaWRh
dGVDb2RlQmxvY2sgPSBmdW5jLT5qc0V4ZWN1dGFibGUoKS0+ZWl0aGVyQ29kZUJsb2NrKCk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKLSAgICAgICAgLy8g
SWYgdGhlIHZhbHVlIGlzIGEgZG91YmxlLCBpdCBtYXkgYmUgYW4gZW5jb2RlZCBDb2RlQmxvY2sq
IHRoYXQgY2FtZSBmcm9tCi0gICAgICAgIC8vICR2bS5jb2RlQmxvY2tGb3JGcmFtZSgpLiBXZSds
bCB0cmVhdCBpdCBhcyBhIGNhbmRpZGF0ZSBjb2RlQmxvY2sgYW5kIGNoZWNrIGlmIGl0J3MKLSAg
ICAgICAgLy8gdmFsaWQgYmVsb3cgYmVmb3JlIHVzaW5nLgotICAgICAgICBjYW5kaWRhdGVDb2Rl
QmxvY2sgPSByZWludGVycHJldF9jYXN0PENvZGVCbG9jayo+KGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4odmFsdWUuYXNEb3VibGUoKSkpOwotICAgIH0KLQotICAgIGlmIChjYW5kaWRhdGVDb2RlQmxv
Y2sgJiYgSlNEb2xsYXJWTVByb3RvdHlwZTo6aXNWYWxpZENvZGVCbG9jayhleGVjLCBjYW5kaWRh
dGVDb2RlQmxvY2spKQotICAgICAgICByZXR1cm4gY2FuZGlkYXRlQ29kZUJsb2NrOwotCi0gICAg
aWYgKGNhbmRpZGF0ZUNvZGVCbG9jaykKLSAgICAgICAgZGF0YUxvZygiSW52YWxpZCBjb2RlQmxv
Y2s6ICIsIFJhd1BvaW50ZXIoY2FuZGlkYXRlQ29kZUJsb2NrKSwgIiAiLCB2YWx1ZSwgIlxuIik7
Ci0gICAgZWxzZQotICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGNvZGVCbG9jazogIiwgdmFsdWUs
ICJcbiIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tGcm9tQXJnKGV4ZWMpOwotICAgIFdU
Rjo6U3RyaW5nUHJpbnRTdHJlYW0gc3RyZWFtOwotICAgIGlmIChjb2RlQmxvY2spIHsKLSAgICAg
ICAgc3RyZWFtLnByaW50KCpjb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKSk7Ci0gICAgfQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsK
LSAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICBjb2RlQmxvY2stPmR1bXBTb3VyY2UoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFy
ZyhleGVjKTsKLSAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRl
Y29kZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0K
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewotICAgICAgICBTdHJpbmcgYXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBkYXRhTG9nKGFyZ1N0cik7Ci0gICAgfQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLWNsYXNzIFBy
aW50RnJhbWVGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjdGlvbiB7Ci0gICAgICAgIFBy
aW50T25lLAotICAgICAgICBQcmludEFsbAotICAgIH07Ci0gICAgCi0gICAgUHJpbnRGcmFtZUZ1
bmN0b3IoQWN0aW9uIGFjdGlvbiwgdW5zaWduZWQgZnJhbWVzVG9Ta2lwKQotICAgICAgICA6IG1f
YWN0aW9uKGFjdGlvbikKLSAgICAgICAgLCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudEZyYW1l
Kys7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA+IG1fZnJhbWVzVG9Ta2lwKSB7Ci0gICAg
ICAgICAgICB2aXNpdG9yLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgSW5kZW50ZXIoMiksIFsmXSAo
UHJpbnRTdHJlYW0mIG91dCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludCgiWyIsIChtX2N1
cnJlbnRGcmFtZSAtIG1fZnJhbWVzVG9Ta2lwIC0gMSksICJdICIpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fYWN0aW9uID09IFByaW50T25lICYmIG1fY3VycmVu
dEZyYW1lID4gbV9mcmFtZXNUb1NraXApCi0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOwotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIEFjdGlvbiBtX2FjdGlvbjsKLSAgICB1bnNpZ25lZCBtX2ZyYW1l
c1RvU2tpcDsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY3VycmVudEZyYW1lIHsgMCB9OwotfTsK
LQotc3RhdGljIHZvaWQgcHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2ln
bmVkIGZyYW1lc1RvU2tpcCkKLXsKLSAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNM
b2NrKGNhbGxGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBQcmludEZyYW1lRnVuY3RvciBm
dW5jdG9yKFByaW50RnJhbWVGdW5jdG9yOjpQcmludE9uZSwgZnJhbWVzVG9Ta2lwKTsKLSAgICBj
YWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci19Ci0KLXZvaWQgSlNEb2xsYXJWTVByb3RvdHlw
ZTo6cHJpbnRDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNDOjpwcmlu
dENhbGxGcmFtZShjYWxsRnJhbWUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBwcmludFN0YWNrKENh
bGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFtZXNUb1NraXApCi17Ci0gICAgaWYg
KCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayh0b3BDYWxsRnJhbWUpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF0b3BDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBQcmlu
dEZyYW1lRnVuY3RvciBmdW5jdG9yKFByaW50RnJhbWVGdW5jdG9yOjpQcmludEFsbCwgZnJhbWVz
VG9Ta2lwKTsKLSAgICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci19Ci0KLXZvaWQg
SlNEb2xsYXJWTVByb3RvdHlwZTo6cHJpbnRTdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkK
LXsKLSAgICBKU0M6OnByaW50U3RhY2sodG9wQ2FsbEZyYW1lLCAwKTsKLX0KLQotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludENhbGxGcmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgLy8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24s
IHRoZXkgYXJlIGV4cGVjdGluZyB0byBwcmludCB0aGVpcgotICAgIC8vIG93biBmcmFtZS4gU28g
c2tpcCAxIGZvciB0aGlzIGZyYW1lLgotICAgIHByaW50Q2FsbEZyYW1lKGV4ZWMsIDEpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGFjayhFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgLy8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkg
YXJlIGV4cGVjdGluZyB0byBwcmludCB0aGUKLSAgICAvLyBzdGFjayBzdGFydGluZyB0aGVpciBv
d24gZnJhbWUuIFNvIHNraXAgMSBmb3IgdGhpcyBmcmFtZS4KLSAgICBwcmludFN0YWNrKGV4ZWMs
IDEpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXZv
aWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6cHJpbnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQotewotICAg
IGRhdGFMb2codmFsdWUpOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXVEY6OlN0cmluZ1ByaW50
U3RyZWFtIHN0cmVhbTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICBzdHJlYW0ucHJp
bnQoIiwgIik7Ci0gICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNoZWNrZWRBcmd1bWVudChp
KSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhl
Yywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25HZXRQSUQoRXhlY1N0YXRlKikKLXsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGdldEN1cnJlbnRQcm9jZXNzSUQoKSkpOwotfQotCi12b2lkIEpT
RG9sbGFyVk1Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgCi0g
ICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImNyYXNoIiwgZnVuY3Rpb25DcmFzaCwg
MCk7Ci0gICAgCi0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZmdUcnVlIiksIDAsIGZ1bmN0aW9uREZHVHJ1
ZSwgREZHVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwotICAgIAotICAgIGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
ICJsbGludFRydWUiLCBmdW5jdGlvbkxMaW50VHJ1ZSwgMCk7Ci0gICAgYWRkRnVuY3Rpb24odm0s
IGdsb2JhbE9iamVjdCwgImppdFRydWUiLCBmdW5jdGlvbkpJVFRydWUsIDApOwotICAgIAotICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJnYyIsIGZ1bmN0aW9uR0MsIDApOwotICAg
IGFkZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsICJlZGVuR0MiLCBmdW5jdGlvbkVkZW5HQywg
MCk7Ci0gICAgCi0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImNvZGVCbG9ja0Zv
ciIsIGZ1bmN0aW9uQ29kZUJsb2NrRm9yLCAxKTsKLSAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCAiY29kZUJsb2NrRm9yRnJhbWUiLCBmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lLCAx
KTsKLSAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAicHJpbnRTb3VyY2VGb3IiLCBm
dW5jdGlvblByaW50U291cmNlRm9yLCAxKTsKLSAgICBhZGRGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCAicHJpbnRCeXRlQ29kZUZvciIsIGZ1bmN0aW9uUHJpbnRCeXRlQ29kZUZvciwgMSk7Ci0g
ICAgCi0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInByaW50IiwgZnVuY3Rpb25Q
cmludCwgMSk7Ci0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInByaW50Q2FsbEZy
YW1lIiwgZnVuY3Rpb25QcmludENhbGxGcmFtZSwgMCk7Ci0gICAgYWRkRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgInByaW50U3RhY2siLCBmdW5jdGlvblByaW50U3RhY2ssIDApOwotCi0gICAg
YWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgInZhbHVlIiwgZnVuY3Rpb25WYWx1ZSwgMSk7
Ci0gICAgYWRkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgImdldHBpZCIsIGZ1bmN0aW9uR2V0
UElELCAwKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmgJKHJldmlzaW9uIDIyNDc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU09iamVjdC5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSGVhcDsKLQotY2xhc3MgSlNEb2xsYXJWTVBy
b3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRp
YyBKU0RvbGxhclZNUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTRG9sbGFy
Vk1Qcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9s
bGFyVk1Qcm90b3R5cGU+KHZtLmhlYXApKSBKU0RvbGxhclZNUHJvdG90eXBlKHZtLCBzdHJ1Y3R1
cmUpOwotICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5n
IGFyZSBleHBvcnRlZCBiZWNhdXNlIHRoZXkgYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxhYmxlIGZy
b20KLSAgICAvLyBsbGRiLiBUaGUgSlMgdmVyc2lvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBv
ZiB0aGVzZS4KLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXJyZW50
VGhyZWFkT3duc0pTTG9jayhFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnYyhFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBlZGVuR0MoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
aXNJbkhlYXAoSGVhcCosIHZvaWQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBpc0luT2JqZWN0U3BhY2UoSGVhcCosIHZvaWQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBpc0luU3RvcmFnZVNwYWNlKEhlYXAqLCB2b2lkKik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgaXNWYWxpZENlbGwoSGVhcCosIEpTQ2VsbCopOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGlzVmFsaWRDb2RlQmxvY2soRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lTnVt
YmVyKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludENhbGxGcmFtZShD
YWxsRnJhbWUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludFN0YWNr
KENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwcmludFZhbHVlKEpTVmFsdWUpOwotCi1wcml2YXRlOgotICAgIEpTRG9sbGFyVk1Qcm90
b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U0dsb2JhbE9iamVjdCopOwotICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCosIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHJldmlzaW9uIDIyNDc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDEwIEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0
LmgiCiAjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2Nv
cGUuaCIKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgorI2luY2x1ZGUgIk1hcmtlZFNwYWNl
SW5saW5lcy5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgPG11dGV4Pgog
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCkBAIC0xOTQsNCArMTk3LDE5MCBAQCBhdXRvIFZN
SW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JNYWNoaW5lUEMoCiAjZW5kaWYKIH0KIAorYm9vbCBWTUlu
c3BlY3Rvcjo6Y3VycmVudFRocmVhZE93bnNKU0xvY2soRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCk7Cit9CisK
K3N0YXRpYyBib29sIGVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoVk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGV4ZWMp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkYXRhTG9nKCJFUlJPUjogY3VycmVudCB0aHJl
YWQgZG9lcyBub3Qgb3duIHRoZSBKU0xvY2tcbiIpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBWTUluc3BlY3Rvcjo6Z2MoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjplZGVuR0MoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50
VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZtLmhlYXAuY29s
bGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKK30KKworYm9vbCBWTUluc3BlY3Rvcjo6
aXNJbkhlYXAoSGVhcCogaGVhcCwgdm9pZCogcHRyKQoreworICAgIE1hcmtlZEJsb2NrKiBjYW5k
aWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocHRyKTsKKyAgICBpZiAoaGVhcC0+b2JqZWN0
U3BhY2UoKS5ibG9ja3MoKS5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBmb3IgKExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA6IGhlYXAtPm9i
amVjdFNwYWNlKCkubGFyZ2VBbGxvY2F0aW9ucygpKSB7CisgICAgICAgIGlmIChhbGxvY2F0aW9u
LT5jb250YWlucyhwdHIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RydWN0IENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIDogTWFya2Vk
QmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgQ2VsbEFkZHJlc3NDaGVja0Z1bmN0b3IoSlNDZWxs
KiBjYW5kaWRhdGUpCisgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0ZSkKKyAgICB7CisgICAg
fQorCisgICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENlbGwqIGNlbGwsIEhlYXBD
ZWxsOjpLaW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNlbGwgPT0gY2FuZGlkYXRlKSB7
CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpEb25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgIH0KKworICAgIEpTQ2VsbCogY2FuZGlkYXRlOworICAgIG11dGFibGUg
Ym9vbCBmb3VuZCB7IGZhbHNlIH07Cit9OworCitib29sIFZNSW5zcGVjdG9yOjppc1ZhbGlkQ2Vs
bChIZWFwKiBoZWFwLCBKU0NlbGwqIGNhbmRpZGF0ZSkKK3sKKyAgICBIZWFwSXRlcmF0aW9uU2Nv
cGUgaXRlcmF0aW9uU2NvcGUoKmhlYXApOworICAgIENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIGZ1
bmN0b3IoY2FuZGlkYXRlKTsKKyAgICBoZWFwLT5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2Vs
bChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7CisgICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7Cit9
CisKK2Jvb2wgVk1JbnNwZWN0b3I6OmlzVmFsaWRDb2RlQmxvY2soRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIGNhbmRpZGF0ZSkKK3sKKyAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25z
SlNMb2NrKGV4ZWMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3QgQ29kZUJs
b2NrVmFsaWRhdGlvbkZ1bmN0b3IgeworICAgICAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3Rv
cihDb2RlQmxvY2sqIGNhbmRpZGF0ZSkKKyAgICAgICAgICAgIDogY2FuZGlkYXRlKGNhbmRpZGF0
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKENvZGVC
bG9jayogY29kZUJsb2NrKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29kZUJs
b2NrID09IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqIGNhbmRp
ZGF0ZTsKKyAgICAgICAgbXV0YWJsZSBib29sIGZvdW5kIHsgZmFsc2UgfTsKKyAgICB9OworCisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2tWYWxpZGF0aW9uRnVuY3RvciBm
dW5jdG9yKGNhbmRpZGF0ZSk7CisgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3Ip
OworICAgIHJldHVybiBmdW5jdG9yLmZvdW5kOworfQorCitDb2RlQmxvY2sqIFZNSW5zcGVjdG9y
Ojpjb2RlQmxvY2tGb3JGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSwgdW5zaWduZWQgZnJh
bWVOdW1iZXIpCit7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayh0b3BD
YWxsRnJhbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghdG9wQ2FsbEZy
YW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0cnVjdCBGZXRjaENvZGVCbG9j
a0Z1bmN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRmV0Y2hDb2RlQmxvY2tGdW5jdG9yKHVu
c2lnbmVkIHRhcmdldEZyYW1lTnVtYmVyKQorICAgICAgICAgICAgOiB0YXJnZXRGcmFtZSh0YXJn
ZXRGcmFtZU51bWJlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RhY2tWaXNp
dG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gY3VycmVudEZyYW1lID0gbmV4dEZyYW1lKys7CisgICAg
ICAgICAgICBpZiAoY3VycmVudEZyYW1lID09IHRhcmdldEZyYW1lKSB7CisgICAgICAgICAgICAg
ICAgY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
dGFyZ2V0RnJhbWU7CisgICAgICAgIG11dGFibGUgdW5zaWduZWQgbmV4dEZyYW1lIHsgMCB9Owor
ICAgICAgICBtdXRhYmxlIENvZGVCbG9jayogY29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIH07
CisKKyAgICBGZXRjaENvZGVCbG9ja0Z1bmN0b3IgZnVuY3RvcihmcmFtZU51bWJlcik7CisgICAg
dG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHJldHVybiBmdW5jdG9yLmNvZGVC
bG9jazsKK30KKworY2xhc3MgUHJpbnRGcmFtZUZ1bmN0b3IgeworcHVibGljOgorICAgIGVudW0g
QWN0aW9uIHsKKyAgICAgICAgUHJpbnRPbmUsCisgICAgICAgIFByaW50QWxsCisgICAgfTsKKwor
ICAgIFByaW50RnJhbWVGdW5jdG9yKEFjdGlvbiBhY3Rpb24sIHVuc2lnbmVkIGZyYW1lc1RvU2tp
cCkKKyAgICAgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgICAgICwgbV9mcmFtZXNUb1NraXAo
ZnJhbWVzVG9Ta2lwKQorICAgIHsKKyAgICB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBv
cGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIG1f
Y3VycmVudEZyYW1lKys7CisgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA+IG1fZnJhbWVzVG9T
a2lwKSB7CisgICAgICAgICAgICB2aXNpdG9yLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgSW5kZW50
ZXIoMiksIFsmXSAoUHJpbnRTdHJlYW0mIG91dCkgeworICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiWyIsIChtX2N1cnJlbnRGcmFtZSAtIG1fZnJhbWVzVG9Ta2lwIC0gMSksICJdICIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYWN0aW9uID09IFByaW50T25l
ICYmIG1fY3VycmVudEZyYW1lID4gbV9mcmFtZXNUb1NraXApCisgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWN0aW9uIG1fYWN0aW9uOworICAgIHVuc2lnbmVk
IG1fZnJhbWVzVG9Ta2lwOworICAgIG11dGFibGUgdW5zaWduZWQgbV9jdXJyZW50RnJhbWUgeyAw
IH07Cit9OworCit2b2lkIFZNSW5zcGVjdG9yOjpwcmludENhbGxGcmFtZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgdW5zaWduZWQgZnJhbWVzVG9Ta2lwKQoreworICAgIGlmICghZW5zdXJlQ3VycmVu
dFRocmVhZE93bnNKU0xvY2soY2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIFByaW50
RnJhbWVGdW5jdG9yIGZ1bmN0b3IoUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50T25lLCBmcmFtZXNU
b1NraXApOworICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKK30KKwordm9pZCBWTUlu
c3BlY3Rvcjo6cHJpbnRTdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSwgdW5zaWduZWQgZnJh
bWVzVG9Ta2lwKQoreworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2sodG9w
Q2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdG9wQ2FsbEZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgUHJpbnRGcmFtZUZ1bmN0b3IgZnVuY3RvcihQcmludEZyYW1lRnVu
Y3Rvcjo6UHJpbnRBbGwsIGZyYW1lc1RvU2tpcCk7CisgICAgdG9wQ2FsbEZyYW1lLT5pdGVyYXRl
KGZ1bmN0b3IpOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjpwcmludFZhbHVlKEpTVmFsdWUgdmFs
dWUpCit7CisgICAgZGF0YUxvZyh2YWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHJldmlzaW9uIDIy
NDc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2Vk
TGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgpAQCAtNjEsNiArNjIsMTcgQEAgcHVi
bGljOgogICAgIEV4cGVjdGVkPGJvb2wsIEVycm9yPiBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShj
b25zdCBMb2NrZXImLCB2b2lkKik7CiAgICAgRXhwZWN0ZWQ8Q29kZUJsb2NrKiwgRXJyb3I+IGNv
ZGVCbG9ja0Zvck1hY2hpbmVQQyhjb25zdCBMb2NrZXImLCB2b2lkKik7CiAKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXJyZW50VGhyZWFkT3duc0pTTG9jayhFeGVjU3RhdGUq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnYyhFeGVjU3RhdGUqKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlZGVuR0MoRXhlY1N0YXRlKik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNJbkhlYXAoSGVhcCosIHZvaWQqKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBpc1ZhbGlkQ2VsbChIZWFwKiwgSlNDZWxs
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNWYWxpZENvZGVCbG9jayhF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgQ29k
ZUJsb2NrKiBjb2RlQmxvY2tGb3JGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSwgdW5zaWdu
ZWQgZnJhbWVOdW1iZXIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHByaW50
Q2FsbEZyYW1lKENhbGxGcmFtZSosIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRTdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFt
ZSwgdW5zaWduZWQgZnJhbWVzVG9Ta2lwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwcmludFZhbHVlKEpTVmFsdWUpOworCiBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7
Cg==
</data>
<flag name="review"
          id="346175"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>