<?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>116350</bug_id>
          
          <creation_ts>2013-05-17 14:04:01 -0700</creation_ts>
          <short_desc>fourthTier: Executable and CodeBlock should be aware of DFG::Plans that complete asynchronously</short_desc>
          <delta_ts>2013-05-17 21:23:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>890656</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-17 14:04:01 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890658</commentid>
    <comment_count>1</comment_count>
      <attachid>202154</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-17 14:04:27 -0700</bug_when>
    <thetext>Created attachment 202154
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890692</commentid>
    <comment_count>2</comment_count>
      <attachid>202163</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-17 14:57:15 -0700</bug_when>
    <thetext>Created attachment 202163
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890814</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-17 21:23:59 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/150323</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202154</attachid>
            <date>2013-05-17 14:04:27 -0700</date>
            <delta_ts>2013-05-17 14:57:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57596</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTAyMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSw4IEBACiAJCTBGREIyQ0RFMTc0MkQ4
MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRG
aW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkRCMkNERjE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNENzE3NDJEODA0MDA3QjND
MUIgLyogREZHUGxhbi5jcHAgKi87IH07CiAJCTBGREIyQ0UwMTc0MkQ4MDQwMDdCM0MxQiAvKiBE
RkdQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGREIyQ0UyMTc0NkMxRkEwMDdCM0MxQiAv
KiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEQjJDRTExNzQ2QzFGODAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZE
QjJDRTQxNzQ2Q0U5RjAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0UzMTc0NkNFOUQwMDdC
M0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgKi87IH07CiAJCTBGRERCRkI1MTY2NkVFRDgw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLzsgfTsKIAkJMEZEREJGQjYxNjY2RUVE
QTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIy
OEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMzQsNiArMTMzNiw4IEBACiAJCTBGREIyQ0Q2
MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHSklURmluYWxpemVyLmg7IHBhdGggPSBkZmcvREZHSklURmluYWxp
emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0Q3MTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1BsYW4uY3BwOyBwYXRoID0gZGZnL0RGR1BsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuLmg7IHBhdGggPSBkZmcvREZHUGxhbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIg
LyogQ29tcGlsYXRpb25SZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25SZXN1bHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRTMxNzQ2Q0U5RDAwN0IzQzFC
IC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9u
UmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVE
NTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAv
KiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYyNSw2ICsyNjI5LDggQEAK
IAkJCQk2NUVBNzM2MjBCQUUzNUQxMDAxQkI1NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuY3BwICov
LAogCQkJCTY1RUE3MzYzMEJBRTM1RDEwMDFCQjU2MCAvKiBDb21tb25JZGVudGlmaWVycy5oICov
LAogCQkJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLywK
KwkJCQkwRkRCMkNFMzE3NDZDRTlEMDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwICov
LAorCQkJCTBGREIyQ0UxMTc0NkMxRjgwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5oICov
LAogCQkJCTk2OUEwOTIyMEVEMUUwOUMwMEYxRjY4MSAvKiBDb21wbGV0aW9uLmNwcCAqLywKIAkJ
CQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovLAogCQkJCUJDQTYy
REZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywKQEAgLTM0MjgsNiAr
MzQzNCw3IEBACiAJCQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlv
bkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8q
IEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQjJDRTIxNzQ2QzFGQTAw
N0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI2
ODE0QkU1RjY4MDBBREM2NEIgLyogSklURHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2
ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklURXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCBpbiBIZWFkZXJzICov
LApAQCAtNDMwMiw2ICs0MzA5LDcgQEAKIAkJCQkwRjRFMUExMzE3M0FGMDdFMDA3RUUyRDMgLyog
REZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURE
RTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4
MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREIyQ0U0MTc0NkNFOUYwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFC
NjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1NjhFMDEx
QTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMTUwMjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NzUsMzAgKzI3NzUsNTEgQEAgQ29kZUJsb2NrKiBG
dW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbgogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZv
cihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQog
Ci1KU09iamVjdCogUHJvZ3JhbUNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorSlNPYmplY3Qq
IFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKIHsKLSAgICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmdl
dEpJVFR5cGUoKSwgZ2V0SklUVHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSwgZ2V0SklUVHlwZSgpKSkgeworICAgICAgICBy
ZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNP
YmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGUsIGJ5dGVjb2RlSW5kZXgpOwor
ICAgIH0KKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwgcmVz
dWx0LCBieXRlY29kZUluZGV4KTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUpTT2JqZWN0KiBF
dmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
c2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitDb21waWxhdGlvblJlc3VsdCBQcm9ncmFt
Q29kZUJsb2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERG
Rzo6UGxhbj4gcGxhbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2Rl
KHBsYW4pOworfQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRp
ZXIocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpLCBnZXRKSVRUeXBlKCkpKQorICAgIGlmIChK
SVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpLCBnZXRKSVRU
eXBlKCkpKSB7CisgICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVlZGVkOwogICAgICAg
ICByZXR1cm4gMDsKLSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwg
Ynl0ZWNvZGVJbmRleCk7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0
PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkKGV4
ZWMsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwogICAgIHJldHVybiBlcnJvcjsKIH0K
IAotSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitDb21waWxh
dGlvblJlc3VsdCBFdmFsQ29kZUJsb2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29k
ZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRP
cHRpbWl6ZWRDb2RlKHBsYW4pOworfQorCitKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRp
b25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoSklU
Q29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSwgZ2V0SklUVHlw
ZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmdldEpJ
VFR5cGUoKSwgZ2V0SklUVHlwZSgpKSkgeworICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5v
dE5lZWRlZDsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0
aW1pemVkRm9yKGV4ZWMsIHNjb3BlLCBieXRlY29kZUluZGV4LCBtX2lzQ29uc3RydWN0b3IgPyBD
b2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAgIH0KKyAgICBKU09iamVjdCogZXJy
b3IgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmNvbXBpbGVPcHRpbWl6ZWRGb3IoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCwg
bV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKICAgICBy
ZXR1cm4gZXJyb3I7CiB9CiAKK0NvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0aW9uQ29kZUJsb2NrOjpy
ZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxh
bikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihwbGFuLCBt
X2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQorCiBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0lu
dGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlUHJvZ3JhbSh0aGlzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDE1MDIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw4IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ28KICAgICAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBnZXRKSVRDb2Rl
KCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBn
ZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVj
azsgfQogICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSBjb25zdCB7IHJldHVy
biBKSVRDb2RlOjpqaXRUeXBlRm9yKG1faml0Q29kZS5nZXQoKSk7IH0KLSAgICAgICAgdmlydHVh
bCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkgPSAwOworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsKKyAgICAgICAgdmlydHVhbCBDb21waWxhdGlvblJlc3Vs
dCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4p
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICBlbnVt
IEpJVENvbXBpbGF0aW9uUmVzdWx0IHsgQWxyZWFkeUNvbXBpbGVkLCBDb3VsZE5vdENvbXBpbGUs
IENvbXBpbGVkU3VjY2Vzc2Z1bGx5IH07CiAgICAgICAgIEpJVENvbXBpbGF0aW9uUmVzdWx0IGpp
dENvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTE1OCw3ICsxMTU5LDggQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDbwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21w
aWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB2aXJ0dWFs
IENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NS
ZWZQdHI8REZHOjpQbGFuPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAgICAgIHZp
cnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwpAQCAtMTE4Myw3ICsxMTg1LDggQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDbwogICAgICAgICAKICNpZiBFTkFC
TEUoSklUKQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwg
SlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpl
dHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUq
KTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CkBAIC0xMjA4LDcg
KzEyMTEsOCBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvCiAgICAg
ICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KTsKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0
aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJ
bXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5jcHAJKHJldmlzaW9uIDE1MDIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBEZXNpcmVkSWRlbnRpZmllcnM6
OkRlc2lyZWRJZGVudGlmaWVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTM5LDExICs0MSwy
NyBAQCBEZXNpcmVkSWRlbnRpZmllcnM6On5EZXNpcmVkSWRlbnRpZmllcnMoCiB7CiB9CiAKK3Vu
c2lnbmVkIERlc2lyZWRJZGVudGlmaWVyczo6bnVtYmVyT2ZJZGVudGlmaWVycygpCit7CisgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkgKyBtX2FkZGVkSWRlbnRp
ZmllcnMuc2l6ZSgpOworfQorCiB2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6YWRkTGF6aWx5KFN0
cmluZ0ltcGwqIHJlcCkKIHsKICAgICBtX2FkZGVkSWRlbnRpZmllcnMuYXBwZW5kKHJlcCk7CiB9
CiAKK1N0cmluZ0ltcGwqIERlc2lyZWRJZGVudGlmaWVyczo6YXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0Cit7CisgICAgU3RyaW5nSW1wbCogcmVzdWx0OworICAgIGlmIChpbmRleCA8IG1fY29kZUJs
b2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpCisgICAgICAgIHJlc3VsdCA9IG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGluZGV4KS5pbXBsKCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBt
X2FkZGVkSWRlbnRpZmllcnNbaW5kZXggLSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVy
cygpXTsKKyAgICBBU1NFUlQocmVzdWx0LT5oYXNBdExlYXN0T25lUmVmKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIHZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQoVk0mIHZt
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FkZGVkSWRlbnRpZmllcnMuc2l6
ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElk
ZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTUwMjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MzMgKzMwLDIzIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNl
IERGRyB7CiAKIGNsYXNzIERlc2lyZWRJZGVudGlmaWVycyB7CiBwdWJsaWM6CiAgICAgRGVzaXJl
ZElkZW50aWZpZXJzKENvZGVCbG9jayopOwogICAgIH5EZXNpcmVkSWRlbnRpZmllcnMoKTsKICAg
ICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZklkZW50aWZpZXJzKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpICsgbV9hZGRlZElkZW50aWZp
ZXJzLnNpemUoKTsKLSAgICB9Ci0gICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZJZGVudGlmaWVy
cygpOwogICAgIHZvaWQgYWRkTGF6aWx5KFN0cmluZ0ltcGwqKTsKICAgICAKLSAgICBTdHJpbmdJ
bXBsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFN0cmluZ0ltcGwq
IHJlc3VsdDsKLSAgICAgICAgaWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRp
ZmllcnMoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlu
ZGV4KS5pbXBsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fYWRkZWRJ
ZGVudGlmaWVyc1tpbmRleCAtIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCldOwot
ICAgICAgICBBU1NFUlQocmVzdWx0LT5oYXNBdExlYXN0T25lUmVmKCkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KKyAgICBTdHJpbmdJbXBsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CiAgICAgCiAgICAgU3RyaW5nSW1wbCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTAyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdUaHVu
a3MuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJTYW1wbGluZ1Rv
b2wuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00OCw3ICs1MCw3
IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAgICAgcmV0dXJuIG51bUNvbXBpbGF0
aW9uczsKIH0KIAotc3RhdGljIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwg
RXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpTQzo6SklUQ29k
ZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNr
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCitzdGF0aWMgQ29tcGlsYXRpb25SZXN1
bHQgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBD
b21waWxhdGlvbiAoRHJpdmVyKSIpOwogICAgIApAQCAtNjEsNyArNjMsNyBAQCBzdGF0aWMgYm9v
bCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgQVNTRVJUKG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCAhPSBVSU5UX01BWCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
ICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2co
IkRGRyBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9
ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKQEAgLTg2LDkgKzg4LDEw
IEBAIHN0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgbnVt
VmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBlbHNlCiAgICAgICAg
IG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICBQbGFuIHBsYW4oY29tcGlsZU1vZGUsIGNvZGVC
bG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcyk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOworICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCisgICAgICAgIG5ldyBQ
bGFuKGNvbXBpbGVNb2RlLCBjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFy
c1dpdGhWYWx1ZXMpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpCiAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFu
ZCkKICAgICAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgpAQCAtOTcs
MjMgKzEwMCwyMSBAQCBzdGF0aWMgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAg
ICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQg
d2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAogICAgICAgICAgICAgLy8gYnV0IGl0IGhh
cyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50
IERGRyBwYXNzZXMsCiAgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1
cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCi0gICAgICAgICAgICBwbGFuLm11c3RIYW5kbGVWYWx1
ZXNbaV0gPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVl
c1tpXSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGxhbi5t
dXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7
CisgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2Vk
UihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIHBsYW4uY29tcGlsZUluVGhy
ZWFkKCk7Ci0gICAgaWYgKHBsYW4uZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrKSAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKTsKKyAgICByZXR1cm4g
cGxhbi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKIH0KIAotYm9v
bCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0
cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorQ29tcGls
YXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKICAgICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNvZGVCbG9jaywg
aml0Q29kZSwgMCwgYnl0ZWNvZGVJbmRleCk7CiB9CiAKLWJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVj
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0NvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGVG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFy
aXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgcmV0dXJuIGNvbXBpbGUo
Q29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFy
aXR5Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTAyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIERG
R0RyaXZlcl9oCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJERkdQbGFuLmgi
CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDEsMTEg
KzQyLDE3IEBAIG5hbWVzcGFjZSBERkcgewogSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0
TnVtQ29tcGlsYXRpb25zKCk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLWJvb2wgdHJ5Q29tcGls
ZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpOwotYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29k
ZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGpp
dENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CitDb21waWxhdGlv
blJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CitDb21waWxhdGlvblJlc3VsdCB0cnlD
b21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29k
ZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCk7CitDb21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFz
c1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIqIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5Q29tcGls
ZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIHVuc2lnbmVk
KSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgQ29tcGlsYXRpb25S
ZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRD
b2RlPiYsIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIENvbXBpbGF0aW9uUmVz
dWx0IHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYsIHVuc2lnbmVkKSB7IHJldHVybiBm
YWxzZTsgfQoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUZpbmFsaXplUGxhbihQYXNzUmVm
UHRyPFBsYW4+LCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciop
Cit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIENvbXBpbGF0
aW9uRmFpbGVkOworfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTAyMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewogR3Jh
cGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbikKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX3Bs
YW4ocGxhbikKLSAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2spCisgICAgLCBtX2Nv
ZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrLmdldCgpKQogICAgICwgbV9wcm9maWxlZEJsb2NrKG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwgbV9hbGxvY2F0b3Iodm0ubV9kZmdTdGF0
ZS0+bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTUwMjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSAr
NjgsMTAgQEAgc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncgogfQogCiBQ
bGFuOjpQbGFuKAotICAgIENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIENvbXBpbGVNb2RlIGNv
bXBpbGVNb2RlLCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCiAgICAg
OiBjb21waWxlTW9kZShjb21waWxlTW9kZSkKKyAgICAsIHZtKCpjb2RlQmxvY2stPnZtKCkpCiAg
ICAgLCBjb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG51bVZhcnNXaXRoVmFsdWVzKG51bVZhcnNXaXRo
VmFsdWVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDE1
MDIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwzNSArMjgsMzggQEAKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgog
I2luY2x1ZGUgIkRGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaCIKICNpbmNsdWRlICJERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCIKICNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJP
cGVyYW5kcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERG
RyB7CiAKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9
OwotZW51bSBDb21waWxhdGlvblJlc3VsdCB7IENvbXBpbGF0aW9uRmFpbGVkLCBDb21waWxhdGlv
bkludmFsaWRhdGVkLCBDb21waWxhdGlvblN1Y2Nlc3NmdWwgfTsKKworI2lmIEVOQUJMRShERkdf
SklUKQogCiBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7
CiAgICAgUGxhbigKLSAgICAgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIHVuc2ln
bmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUs
IFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2ssCisgICAgICAgIHVuc2lnbmVkIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOwogICAgIH5QbGFu
KCk7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKTsKICAgICAKICAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgIAotICAgIFZNJiB2
bSgpIHsgcmV0dXJuICpjb2RlQmxvY2stPnZtKCk7IH0KLQogICAgIGNvbnN0IENvbXBpbGVNb2Rl
IGNvbXBpbGVNb2RlOwotICAgIENvZGVCbG9jayogY29uc3QgY29kZUJsb2NrOworICAgIFZNJiB2
bTsKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgY29uc3QgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4OwogICAgIGNvbnN0IHVuc2lnbmVkIG51bVZhcnNXaXRoVmFs
dWVzOwogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CkBAIC03NCw5ICs3
NywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhbGx5QWRkKCk7CiB9OwogCi19IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKworY2xhc3MgUGxhbiA6
IHB1YmxpYyBSZWZDb3VudGVkPFBsYW4+IHsKKyAgICAvLyBEdW1teSBjbGFzcyB0byBhbGxvdyAh
RU5BQkxFKERGR19KSVQpIHRvIGJ1aWxkLgorfTsKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKICNlbmRpZiAvLyBERkdQbGFuX2gKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAko
cmV2aXNpb24gMTUwMjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgSklURmluYWxp
emVyOjpmaW5hbGl6ZUZ1bmN0aW9uKFJlZlAKICAgICAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
RXhpdFRodW5rcygKICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAg
ICAgICptX2V4aXRUaHVua3NMaW5rQnVmZmVyLAotICAgICAgICAgICAgICAgICgiRlRMIGV4aXQg
dGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CisgICAgICAgICAgICAgICAgKCJG
VEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9
IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5r
cy4KICAgICAKICAgICB3aXRoQXJpdHlDaGVjayA9IG1fZW50cnlwb2ludExpbmtCdWZmZXItPmxv
Y2F0aW9uT2YobV9hcml0eUNoZWNrKTsKQEAgLTY2LDcgKzY2LDcgQEAgYm9vbCBKSVRGaW5hbGl6
ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVmUAogICAgICAgICBtX2VuZ2luZSwKICAgICAgICAgRklO
QUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqbV9lbnRyeXBvaW50TGlua0J1ZmZlciwKLSAg
ICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5lcmF0
ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIG1fZnVuY3Rpb24pKSk7CisgICAgICAg
ICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNv
ZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
ay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBtX2Z1bmN0aW9uKSkpOwogICAgIGVu
dHJ5ID0gbV9qaXRDb2RlOwogICAgIAogICAgIG1fZW5naW5lID0gMDsgLy8gV2UgZG9uJ3Qgb3du
IGl0IGFueW1vcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgJKHJl
dmlzaW9uIDE1MDIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5o
IgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxM
SW50RW50cnlwb2ludHMuaCIKQEAgLTM4LDQ5ICszOSw1NCBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBqaXRDb21waWxl
SWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywg
UmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBD
b21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZSgKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2Rl
LAorICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgCiAgICAgaWYgKGppdFR5cGUgPT0gY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7CiAg
ICAgCiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBDb21waWxhdGlvbk5vdE5lZWRlZDsgLy8gRklYTUU6IEludmVzdGlnYXRlIGlm
IHRoaXMgaXMgcmlnaHQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTYyNDYKICAgICAKICAgICBjb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICAK
ICAgICBSZWZQdHI8SklUQ29kZT4gb2xkSklUQ29kZSA9IGppdENvZGU7CiAgICAgCiAgICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKSkgewotICAgICAgICBpZiAoREZHOjp0
cnlDb21waWxlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgYnl0ZWNvZGVJbmRleCkpCisgICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9CisgICAgICAgICAgICBERkc6OnRyeUNvbXBp
bGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBBU1NFUlQob2xkSklUQ29kZSA9PSBqaXRDb2RlKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBSZWZQdHI8SklUQ29kZT4gcmVzdWx0ID0gSklUOjpjb21waWxlKCZ2
bSwgY29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAg
aml0Q29kZSA9IHJlc3VsdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIH0KICAgICAKLSAg
ICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkp
OwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3Nm
dWw7CiB9CiAKLWlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhl
Y1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29k
ZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNr
LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBDb21waWxhdGlvblJlc3VsdCBqaXRDb21w
aWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25D
b2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUsCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAgaWYgKGpp
dFR5cGUgPT0gY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7CiAgICAgCiAgICAgaWYgKCF2bS5j
YW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDb21waWxh
dGlvbk5vdE5lZWRlZDsgLy8gRklYTUU6IEludmVzdGlnYXRlIGlmIHRoaXMgaXMgcmlnaHQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYyNDYKICAgICAKICAgICBj
b2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICAKQEAgLTg4LDEyICs5NCwxNCBA
QCBpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9IGppdENvZGVXaXRoQXJpdHlD
aGVjazsKICAgICAKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKSB7
Ci0gICAgICAgIGlmIChERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBjb2RlQmxvY2ssIGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNvZGVJbmRleCkpCisgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKAorICAgICAg
ICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bCkKICAgICAgICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdD
YWxscygpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2RlID09
IGppdENvZGUpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRKSVRDb2RlV2l0aEFyaXR5
Q2hlY2ssIG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9PSBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiByZXN1bHQg
PQpAQCAtMTAyLDEzICsxMTAsMTEgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZB
cHByb3ByaQogICAgICAgICAgICAgaml0Q29kZSA9IHJlc3VsdDsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjaywgb2xkSklU
Q29kZVdpdGhBcml0eUNoZWNrID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTAyMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTY0LDIyICs5NjQsNDAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAj
ZW5kaWYKICAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29w
ZSgpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6
ZWQoY2FsbEZyYW1lLCBzY29wZSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdDsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21w
aWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKQorICAgICAgICAgICAgfHwg
T3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkKKyAgICAgICAgICAgIHx8IE9wdGlvbnM6OnNob3dE
RkdEaXNhc3NlbWJseSgpKQorICAgICAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyBjb21waWxh
dGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKICNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBk
YXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVkLlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVkIHdp
dGggYSBKUyBlcnJvci5cbiIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsK
ICNlbmRpZgogICAgICAgICAKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSA9
PSBjb2RlQmxvY2spIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKHJlc3VsdCA9PSBDb21waWxh
dGlvblN1Y2Nlc3NmdWwpID09IChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkgIT0gY29kZUJsb2Nr
KSk7CisgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgQ29tcGlsYXRpb25T
dWNlc3NmdWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21waWxhdGlvbkZh
aWxlZDoKKyAgICAgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVkOgogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxv
Y2ssICIgZmFpbGVkLlxuIik7CiAjZW5kaWYKLSAgICAgICAgICAgIAogICAgICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDb21waWxhdGlvbkludmFsaWRhdGVkOgorICAgICAg
ICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICAgICAg
Y29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0
aW9uUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgIG91dC5wcmludCgiQ29tcGlsYXRpb25G
YWlsZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRl
ZDoKKyAgICAgICAgb3V0LnByaW50KCJDb21waWxhdGlvbkludmFsaWRhdGVkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKKyAgICAgICAgb3V0LnBy
aW50KCJDb21waWxhdGlvblN1Y2Nlc3NmdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q29tcGlsYXRpb25Ob3ROZWVkZWQ6CisgICAgICAgIG91dC5wcmludCgiQ29tcGlsYXRpb25Ob3RO
ZWVkZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoK
KyAgICAgICAgb3V0LnByaW50KCJDb21waWxhdGlvbkRlZmVycmVkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21waWxhdGlvblJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBDb21waWxhdGlvblJlc3VsdF9oCisjZGVmaW5lIENvbXBpbGF0aW9uUmVzdWx0
X2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBDb21waWxhdGlvblJlc3VsdCB7IENvbXBpbGF0aW9uRmFpbGVkLCBDb21waWxhdGlvbklu
dmFsaWRhdGVkLCBDb21waWxhdGlvblN1Y2Nlc3NmdWwsIENvbXBpbGF0aW9uTm90TmVlZGVkLCBD
b21waWxhdGlvbkRlZmVycmVkIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpDb21waWxhdGlv
blJlc3VsdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQ29tcGlsYXRpb25S
ZXN1bHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gMTUwMjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMyArMTU1LDE1IEBAIHZv
aWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKICAgICBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+RnVuY3Rpb25FeGVjdXRhYmxlOjp+RnVuY3Rpb25F
eGVjdXRhYmxlKCk7CiB9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKICAgICBKU09iamVjdCog
ZXJyb3IgPSAwOwogICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fZXZhbENvZGVC
bG9jay0+Z2V0SklUVHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhl
Yywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4
ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5
cGUoKSksICZyZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7CiAgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsK
ICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTAsMTAgKzE5MiwxMyBAQCBpbmxpbmUgY29uc3Qg
Y2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKCiAgICAgfQogfQogCi1KU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0
KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24g
c2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOworICAgIAog
I2lmICFFTkFCTEUoSklUKQogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7CkBAIC0yMjQsMjIgKzIyOSwxOSBAQCBKU09iamVjdCogRXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0
UmVmKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIHVubGlua2VkRXZhbENvZGUsIGxleGljYWxHbG9i
YWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlLT5sb2NhbERlcHRoKCkpKTsKICAg
ICB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbihleGVj
LCBuZXdDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2Rl
SW5kZXgpKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgotICAgIAotICAgIG1fZXZhbENvZGVC
bG9jayA9IG5ld0NvZGVCbG9jazsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgSGVhcDo6aGVhcCh0
aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9ldmFsQ29kZUJsb2NrKSArIG1f
aml0Q29kZUZvckNhbGwtPnNpemUoKSk7Ci0jZWxzZQotICAgIEhlYXA6OmhlYXAodGhpcyktPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fZXZhbENvZGVCbG9jaykpOwotI2VuZGlmCi0K
KyAgICBDb21waWxhdGlvblJlc3VsdCB0aGVSZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uKAor
ICAgICAgICBleGVjLCBtX2V2YWxDb2RlQmxvY2ssIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRD
b2RlRm9yQ2FsbCwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCk7CisgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKICAgICByZXR1cm4gMDsKIH0KIAorQ29tcGlsYXRp
b25SZXN1bHQgRXZhbEV4ZWN1dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2Rl
KFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQoreworICAgIHJldHVybiBKU0M6OnJlcGxhY2VX
aXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAorICAgICAgICBwbGFuLCBtX2V2YWxDb2RlQmxvY2ss
IG1faml0Q29kZUZvckNhbGwsIDAsIDApOworfQorCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgRXZh
bEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7CkBAIC0yOTAsMTMg
KzI5MiwxNSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAg
cmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2Up
OwogfQogCi1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0pT
T2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICBKU09i
amVjdCogZXJyb3IgPSAwOwogICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fcHJv
Z3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9j
ay0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGVycm9yID0gY29tcGls
ZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2Rl
QmxvY2stPmdldEpJVFR5cGUoKSksICZyZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOworICAgIGVsc2UK
KyAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7CiAgICAgQVNTRVJUKCEhbV9w
cm9ncmFtQ29kZUJsb2NrKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC0zMDgsMTAgKzMxMiwx
MyBAQCBib29sIFByb2dyYW1FeGVjdXRhYmxlOjpqaXRDb21waWxlKEV4ZWNTCiB9CiAjZW5kaWYK
IAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50
ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRp
b24oaml0VHlwZSkpOwogICAgIAorICAgIGlmIChyZXN1bHQpCisgICAgICAgICpyZXN1bHQgPSBD
b21waWxhdGlvbkZhaWxlZDsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwpAQCAtMzI4LDIyICszMzUsMTkg
QEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgICAgICBuZXdD
b2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBtX3VubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigp
KSk7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRp
b24oZXhlYywgbmV3Q29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLQotICAgIG1fcHJvZ3Jh
bUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jazsKLSAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIEhl
YXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fcHJvZ3JhbUNv
ZGVCbG9jaykgKyBtX2ppdENvZGVGb3JDYWxsLT5zaXplKCkpOwotI2Vsc2UKLSAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX3Byb2dyYW1Db2RlQmxv
Y2spKTsKLSNlbmRpZgotCisgICAgQ29tcGlsYXRpb25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFy
ZUZvckV4ZWN1dGlvbigKKyAgICAgICAgZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLCBuZXdDb2Rl
QmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwor
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7CiAgICAgcmV0dXJu
IDA7CiB9CiAKK0NvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1FeGVjdXRhYmxlOjpyZXBsYWNlV2l0
aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikKK3sKKyAg
ICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKKyAgICAgICAg
cGxhbiwgbV9wcm9ncmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCAwLCAwKTsKK30KKwog
I2lmIEVOQUJMRShKSVQpCiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGUoVk0mIHZtKQogewpAQCAtNDYyLDI0ICs0NjYsMjggQEAgRnVuY3Rpb25Db2RlQmxvY2sq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCog
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBKU09i
amVjdCogZXJyb3IgPSAwOwogICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fY29k
ZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlRm9y
Q2FsbEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9j
a0ZvckNhbGwtPmdldEpJVFR5cGUoKSksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBlcnJvciA9
IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklU
KG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJbmRl
eCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsKICAg
ICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAot
SlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0
cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYg
cmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpKSkK
LSAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGUs
IEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBl
KCkpLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5nZXRKSVRUeXBlKCkpLCAmcmVzdWx0LCBieXRlY29kZUluZGV4KTsKKyAgICBl
bHNlCisgICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVlZGVkOwogICAgIEFTU0VSVCgh
IW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC01MjMs
MTAgKzUzMSwxMyBAQCBQYXNzUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiB9
CiAKIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5h
bChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdCwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKICAgICAKKyAgICBpZiAocmVzdWx0KQor
ICAgICAgICAqcmVzdWx0ID0gQ29tcGlsYXRpb25GYWlsZWQ7CisgICAgCiAjaWYgIUVOQUJMRShK
SVQpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsK
QEAgLTU0MCwyOSArNTUxLDI5IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsK
ICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0
aW9uKGV4ZWMsIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9yQ2Fs
bCkpCi0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCi0KLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwg
PSBuZXdDb2RlQmxvY2s7Ci0gICAgCi0gICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IG1fY29k
ZUJsb2NrRm9yQ2FsbC0+bnVtUGFyYW1ldGVycygpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fbnVt
UGFyYW1ldGVyc0ZvckNhbGwpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBIZWFwOjpoZWFwKHRo
aXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNhbGwpICsg
bV9qaXRDb2RlRm9yQ2FsbC0+c2l6ZSgpKTsKLSNlbHNlCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSk7Ci0jZW5k
aWYKLQorICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5jdGlvbkZv
ckV4ZWN1dGlvbigKKyAgICAgICAgZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBuZXdDb2RlQmxv
Y2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsCisgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjaywgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCwgaml0VHlwZSwKKyAgICAgICAgYnl0
ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgICpyZXN1
bHQgPSB0aGVSZXN1bHQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCitDb21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGxhY2VXaXRo
RGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikK
K3sKKyAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKKyAg
ICAgICAgcGxhbiwgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCAmbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLAorICAgICAgICAmbV9udW1QYXJhbWV0ZXJzRm9yQ2Fs
bCk7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNj
cmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgKnJlc3Vs
dCA9IENvbXBpbGF0aW9uRmFpbGVkOworICAgIAogI2lmICFFTkFCTEUoSklUKQogICAgIFVOVVNF
RF9QQVJBTShqaXRUeXBlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CkBAIC01NzUsMjUgKzU4
NiwyMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgaWYg
KCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKLSNpZiBFTkFCTEUo
SklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG5ld0NvZGVC
bG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCkp
Ci0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCi0KLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCA9IG5ld0NvZGVCbG9jazsKLSAgICAKLSAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qg
PSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bnVtUGFyYW1ldGVycygpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci0KLSNpZiBFTkFCTEUoSklUKQot
ICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KSArIG1faml0Q29kZUZvckNvbnN0cnVjdC0+c2l6ZSgpKTsKLSNl
bHNlCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigq
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpKTsKLSNlbmRpZgotCisgICAgQ29tcGlsYXRpb25SZXN1
bHQgdGhlUmVzdWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAorICAgICAgICBleGVj
LCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbmV3Q29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QsCisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
LCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QsIGppdFR5cGUsCisgICAgICAgIGJ5dGVjb2Rl
SW5kZXgsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgICpyZXN1
bHQgPSB0aGVSZXN1bHQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKK0NvbXBpbGF0aW9uUmVzdWx0IEZ1
bmN0aW9uRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCit7CisgICAgcmV0dXJuIEpTQzo6cmVw
bGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCisgICAgICAgIHBsYW4sIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsCisgICAgICAgICZtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgJm1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7
Cit9CisKICNpZiBFTkFCTEUoSklUKQogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTUwMjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw4IEBACiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNo
LmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvbXBp
bGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkhhbmRsZXJJ
bmZvLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CkBAIC0zODEsNyArMzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdHJp
Y3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9
CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwotCisgICAgICAgIAogICAgICAgICBDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTQzMCw3ICs0MzIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQm
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVw
bGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICAg
ICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENv
ZGUoVk0mKTsKQEAgLTQ3Myw3ICs0NzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBFdmFsRXhlY3V0
YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCk7CiAKLSAgICAgICAgSlNP
YmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklU
VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlw
ZSwgQ29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRf
TUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7
CkBAIC01MDcsNyArNTEwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CiAgICAgICAgIH0KIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlv
blJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBDb21waWxhdGlvblJl
c3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxh
bj4pOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIGpldHRpc29uT3B0
aW1pemVkQ29kZShWTSYpOwpAQCAtNTUxLDcgKzU1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBlbnVtIEZ1bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0
aW9uT3JOb3RTcGVjaWFsaXphYmxlIH07CiAgICAgICAgIGludCBhZGRHbG9iYWxWYXIoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUp
OwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7
CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSos
IEpJVENvZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKQEAgLTYwMiw3ICs2
MDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAg
ICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3Rh
dGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEpTT2JqZWN0
KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRp
b25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKFBhc3NSZWZQdHI8
REZHOjpQbGFuPik7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgamV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwpAQCAtNjMwLDcgKzYzNSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKLSAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgSlNT
Y29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25S
ZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoUGFzc1JlZlB0
cjxERkc6OlBsYW4+KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBq
ZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoVk0mKTsKQEAgLTY2MCwxOCArNjY2LDI1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVGb3JDb25zdHJ1
Y3QoZXhlYywgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZEZvcihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
c2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKGV4ZWMtPmNhbGxlZSgpKTsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKS0+
aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpOwogICAgICAgICAgICAgQVNTRVJUKGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlLCBi
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZv
ckNhbGwoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgICAgIHJldHVybiBjb21w
aWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlLCBieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3Bl
LCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBD
b21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihQYXNz
UmVmUHRyPERGRzo6UGxhbj4gcGxhbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKHBsYW4p
OworICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9y
Q29uc3RydWN0KHBsYW4pOworICAgICAgICB9CisKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2
b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKICAgICAgICAgewpAQCAtNzM5LDggKzc1Miw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHByaXZhdGU6CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwg
dW5zaWduZWQgbGFzdExpbmUpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbElu
dGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwotICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNv
bnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOworICAgICAgICBKU09iamVjdCogY29t
cGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlw
ZSwgQ29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRf
TUFYKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqID0g
MCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgCiAgICAgICAg
IFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDE1MDIwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsNDIgKzMwLDEyMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNvbXBp
bGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCisjaW5jbHVkZSAiREZHUGxh
bi5oIgogI2luY2x1ZGUgIkpJVERyaXZlci5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludHMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
Ci1pbmxpbmUgYm9vbCBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK2lubGluZSBDb21waWxhdGlv
blJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIEpJ
VENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBF
TkFCTEUoTExJTlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7
CiAgICAgICAgIC8vIFN0YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVycHJldGVyLgogICAg
ICAgICBMTEludDo6Z2V0RW50cnlwb2ludChleGVjLT52bSgpLCBjb2RlQmxvY2ssIGppdENvZGUp
OwotICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCkpOwogICAgICAgICBpZiAoZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
CiAgICAgICAgICAgICBleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0
ZWNvZGVzRm9yKGNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoTExJTlQp
Ci0gICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0
Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0
VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyNpZiBFTkFCTEUoSklUKQorICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZSgK
KyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4
LAorICAgICAgICBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworI2VuZGlmCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7
CiB9CiAKLWlubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENv
ZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlv
bkZvckV4ZWN1dGlvbkltcGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhlIGxvdyBsZXZlbCBpbnRl
cnByZXRlci4KICAgICAgICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludChleGVjLT52bSgp
LCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAgICAg
aWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAgICAgICAgZXhlYy0+
dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2sp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShraW5kKTsKICNlbmRpZiAvLyBF
TkFCTEUoTExJTlQpCi0gICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUo
ZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUs
IGJ5dGVjb2RlSW5kZXgsIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisjaWYgRU5BQkxF
KEpJVCkKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZSgKKyAgICAg
ICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGppdFR5
cGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5
cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisjZW5kaWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBD
b21waWxhdGlvbkZhaWxlZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
K2lubGluZSB2b2lkIGluc3RhbGxPcHRpbWl6ZWRDb2RlKAorICAgIFJlZlB0cjxDb2RlQmxvY2tU
eXBlPiYgc2luaywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBQYXNzUmVmUHRyPEpJVENvZGU+
IGppdENvZGUsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVj
aywgdW5zaWduZWQqIG51bVBhcmFtZXRlcnMpCit7CisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgCisgICAgc2luayA9IGNvZGVC
bG9jazsKKyAgICAKKyAgICBpZiAobnVtUGFyYW1ldGVycykKKyAgICAgICAgKm51bVBhcmFtZXRl
cnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAKKyNpZiBFTkFCTEUoSklUKQor
ICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNv
ZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOworI2Vsc2UKKyAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spKTsKKyNlbmRpZgor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENvbXBpbGF0aW9u
UmVzdWx0IHByZXBhcmVGb3JFeGVjdXRpb24oCisgICAgRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8
Q29kZUJsb2NrVHlwZT4mIHNpbmssIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywKKyAgICBSZWZQ
dHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKK3sKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJl
Rm9yRXhlY3V0aW9uSW1wbCgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4KTsKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bCkKKyAgICAgICAgaW5zdGFsbE9wdGltaXplZENvZGUoc2luaywgY29kZUJsb2NrLCBqaXRD
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIHNpbmssIEZ1
bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssCisgICAgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywKKyAgICB1bnNp
Z25lZCogbnVtUGFyYW1ldGVycywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBD
b21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb25JbXBs
KAorICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVj
aywgaml0VHlwZSwKKyAgICAgICAgYnl0ZWNvZGVJbmRleCwga2luZCk7CisgICAgaWYgKHJlc3Vs
dCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIGluc3RhbGxPcHRpbWl6ZWRDb2Rl
KHNpbmssIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBudW1QYXJh
bWV0ZXJzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRP
cHRpbWl6ZWRDb2RlKAorICAgIFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuLCBSZWZQdHI8Q29k
ZUJsb2NrVHlwZT4mIHNpbmssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQqIG51bVBhcmFt
ZXRlcnMpCit7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjp0cnlGaW5hbGl6
ZVBsYW4ocGxhbiwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAocmVz
dWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgeworICAgICAgICBpbnN0YWxsT3B0aW1pemVk
Q29kZSgKKyAgICAgICAgICAgIHNpbmssIHN0YXRpY19jYXN0PENvZGVCbG9ja1R5cGUqPihwbGFu
LT5jb2RlQmxvY2suZ2V0KCkpLCBqaXRDb2RlLAorICAgICAgICAgICAgaml0Q29kZVdpdGhBcml0
eUNoZWNrID8gKmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
LAorICAgICAgICAgICAgbnVtUGFyYW1ldGVycyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202163</attachid>
            <date>2013-05-17 14:57:15 -0700</date>
            <delta_ts>2013-05-17 15:12:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72059</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMy0wNS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEV4ZWN1dGFibGUgYW5kIENvZGVCbG9jayBzaG91bGQgYmUgYXdhcmUgb2Yg
REZHOjpQbGFucyB0aGF0IGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYzNTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVmYWN0b3JzIGNv
bXBpbGF0aW9uIHNvIHRoYXQ6CisgICAgICAgIAorICAgICAgICAtIEpJVFN0dWJzIGtub3dzIGV4
YWN0bHkgd2hhdCB0aGUgcmVzdWx0IG9mIGNvbXBpbGF0aW9uIHdhcy4gRm9yIGV4YW1wbGUsIGlm
CisgICAgICAgICAgY29tcGlsYXRpb24gd2FzIGRlZmVycmVkLCBpdCB3aWxsIG5vdyBrbm93IHRo
aXMuCisgICAgICAgIAorICAgICAgICAtIFRoZSBzZXQgb2YgdGhpbmdzIHRoYXQgaGFzIHRvIGhh
cHBlbiB0byBpbnN0YWxsIGNvbXBpbGVkIGNvZGUgaXMgbm93IGZhY3RvcmVkCisgICAgICAgICAg
b3V0IGludG8gSlNDOjppbnN0YWxsT3B0aW1pemVkQ29kZSgpLgorICAgICAgICAKKyAgICAgICAg
LSBBIGJ1bmNoIG9mIHRoZSBjb2RlIGluIEV4ZWN1dGFibGUuY3BwIGlzIG5vdyBtYWRlIG1vcmUg
Y29tbW9uIHRvIHJlZHVjZSBjb2RlCisgICAgICAgICAgZHVwbGljYXRpb24uIEZvciBleGFtcGxl
LCB0aGUgaGVhcCBoZXVyaXN0aWNzIHN0dWZmIGlzIG5vdyBpbiBvbmUgcGxhY2UuCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6
OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpyZXBs
YWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSk6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKToKKyAgICAgICAg
KEpTQzo6RXZhbENvZGVCbG9jazo6aml0Q29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
aXRDb21waWxlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoRXZhbENv
ZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0Rlc2lyZWRJZGVudGlmaWVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50
aWZpZXJzOjpudW1iZXJPZklkZW50aWZpZXJzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChK
U0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjphdCk6CisgICAgICAgICogZGZnL0RGR0Rlc2ly
ZWRJZGVudGlmaWVycy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKERlc2lyZWRJZGVudGlm
aWVycyk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6
OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlGaW5hbGl6
ZVBsYW4pOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5RmluYWxp
emVQbGFuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6cmVhbGx5QWRkKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKFBsYW4pOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBmdGwvRlRMSklU
RmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24pOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6aml0
Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUZ1bmN0
aW9uSWZBcHByb3ByaWF0ZUltcGwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aml0
Q29tcGlsZUlmQXBwcm9wcmlhdGUpOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRnVuY3Rpb25J
ZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tcGlsYXRpb25SZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRh
YmxlOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVy
cmVkT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpQcm9ncmFt
RXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVj
dXRhYmxlOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpyZXBsYWNl
V2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZv
ckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoU2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChF
dmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChG
dW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGVPcHRpbWl6ZWRGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGlv
bkhhcm5lc3MuaDoKKyAgICAgICAgKEpTQzo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwpOgorICAg
ICAgICAoSlNDOjpwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6Omluc3RhbGxPcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6
cHJlcGFyZUZvckV4ZWN1dGlvbik6CisgICAgICAgIChKU0M6OnByZXBhcmVGdW5jdGlvbkZvckV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2Rl
KToKKwogMjAxMy0wNS0xNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgogCiAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlIGRvZXNuJ3QgY29udGFpbiBhIGNhc2Ug
Zm9yIEtub3duQ2VsbFVzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE1MDMwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDggQEAK
IAkJMEZEQjJDREUxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRDYxNzQyRDgwNDAw
N0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0RGMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0Q3MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmNwcCAqLzsgfTsKIAkJMEZEQjJDRTAxNzQy
RDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q4MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJDRTIx
NzQ2QzFGQTAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFMTE3NDZDMUY4MDA3QjNDMUIgLyog
Q29tcGlsYXRpb25SZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkRCMkNFNDE3NDZDRTlGMDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
QjJDRTMxNzQ2Q0U5RDAwN0IzQzFCIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCAqLzsgfTsKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZBQjI3
MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMzNCw2ICsxMzM2
LDggQEAKIAkJMEZEQjJDRDYxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRGaW5hbGl6ZXIuaDsgcGF0aCA9
IGRmZy9ERkdKSVRGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
QjJDRDcxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHUGxhbi5jcHA7IHBhdGggPSBkZmcvREZHUGxhbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0Q4MTc0MkQ4MDQwMDdCM0MxQiAvKiBE
RkdQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW4uaDsgcGF0
aCA9IGRmZy9ERkdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0Ux
MTc0NkMxRjgwMDdCM0MxQiAvKiBDb21waWxhdGlvblJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b21waWxhdGlvblJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNF
MzE3NDZDRTlEMDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29tcGlsYXRpb25SZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUEx
NDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NjI1LDYgKzI2MjksOCBAQAogCQkJCTY1RUE3MzYyMEJBRTM1RDEwMDFCQjU2MCAvKiBDb21tb25J
ZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJNjVFQTczNjMwQkFFMzVEMTAwMUJCNTYwIC8qIENvbW1v
bklkZW50aWZpZXJzLmggKi8sCiAJCQkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1v
blNsb3dQYXRocy5oICovLAorCQkJCTBGREIyQ0UzMTc0NkNFOUQwMDdCM0MxQiAvKiBDb21waWxh
dGlvblJlc3VsdC5jcHAgKi8sCisJCQkJMEZEQjJDRTExNzQ2QzFGODAwN0IzQzFCIC8qIENvbXBp
bGF0aW9uUmVzdWx0LmggKi8sCiAJCQkJOTY5QTA5MjIwRUQxRTA5QzAwRjFGNjgxIC8qIENvbXBs
ZXRpb24uY3BwICovLAogCQkJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0aW9u
LmggKi8sCiAJCQkJQkNBNjJERkYwRTI4MjYzMTAwMDRGMzBEIC8qIENvbnN0cnVjdERhdGEuY3Bw
ICovLApAQCAtMzQyOCw2ICszNDM0LDcgQEAKIAkJCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUg
LyogSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMy
IC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkFGN0VGRTE2
NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkRCMkNFMjE3NDZDMUZBMDA3QjNDMUIgLyogQ29tcGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MDgyMTRCQTU3MkQwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzAyLDYgKzQzMDksNyBAQAogCQkJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEQjJDRTQxNzQ2Q0U5RjAwN0IzQzFCIC8qIENv
bXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QjcyM0IyMTJEN0RBNDYw
MDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
QjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTAzMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3NSwzMCArMjc3NSw1
MSBAQCBDb2RlQmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVuCiAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdl
bmVyYXRlZEJ5dGVjb2RlRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBD
b2RlRm9yQ2FsbCk7CiB9CiAKLUpTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCitKU09iamVjdCogUHJvZ3JhbUNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIo
cmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpLCBnZXRKSVRUeXBlKCkpKQorICAgIGlmIChKSVRD
b2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpLCBnZXRKSVRUeXBl
KCkpKSB7CisgICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVlZGVkOwogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwg
Ynl0ZWNvZGVJbmRleCk7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0
PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVk
KGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwogICAgIHJldHVybiBlcnJvcjsK
IH0KIAotSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0NvbXBpbGF0
aW9uUmVzdWx0IFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRD
b2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZl
cnJlZE9wdGltaXplZENvZGUocGxhbik7Cit9CisKK0pTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0
aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgaWYgKEpJ
VENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCksIGdldEpJVFR5
cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5nZXRK
SVRUeXBlKCksIGdldEpJVFR5cGUoKSkpIHsKKyAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25O
b3ROZWVkZWQ7CiAgICAgICAgIHJldHVybiAwOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRp
Y19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1p
emVkKGV4ZWMsIHNjb3BlLCBieXRlY29kZUluZGV4KTsKKyAgICB9CisgICAgSlNPYmplY3QqIGVy
cm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNv
bXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7CiAgICAg
cmV0dXJuIGVycm9yOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVP
cHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKK0NvbXBpbGF0aW9uUmVzdWx0IEV2YWxDb2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVm
ZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVw
bGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Cit9CisKK0pTT2JqZWN0KiBGdW5j
dGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KQogewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQoKS0+Z2V0SklU
VHlwZSgpLCBnZXRKSVRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVw
bGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpLCBnZXRKSVRUeXBlKCkpKSB7CisgICAgICAgIHJlc3Vs
dCA9IENvbXBpbGF0aW9uTm90TmVlZGVkOwogICAgICAgICByZXR1cm4gMDsKLSAgICBKU09iamVj
dCogZXJyb3IgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWRGb3IoZXhlYywgc2NvcGUsIGJ5dGVjb2RlSW5kZXgsIG1f
aXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgfQor
ICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZSwgcmVzdWx0
LCBieXRlY29kZUluZGV4LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29k
ZUZvckNhbGwpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAorQ29tcGlsYXRpb25SZXN1bHQgRnVu
Y3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPiBwbGFuKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6
ZWRDb2RlRm9yKHBsYW4sIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2Rl
Rm9yQ2FsbCk7Cit9CisKIERGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVQ
cm9ncmFtKHRoaXMpOwpAQCAtMjg0MywyMSArMjg2NCwyMSBAQCB2b2lkIEZ1bmN0aW9uQ29kZUJs
b2NrOjpqZXR0aXNvbigpCiAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3du
ZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKnZtKCksIG1faXNDb25z
dHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKLWJvb2wgUHJv
Z3JhbUNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQorQ29tcGlsYXRp
b25SZXN1bHQgUHJvZ3JhbUNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
ayk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxl
KGV4ZWMpOwogfQogCi1ib29sIEV2YWxDb2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNTdGF0
ZSogZXhlYykKK0NvbXBpbGF0aW9uUmVzdWx0IEV2YWxDb2RlQmxvY2s6OmppdENvbXBpbGVJbXBs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+aml0Q29tcGlsZShleGVjKTsKIH0KIAotYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29t
cGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQorQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25Db2Rl
QmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZ2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwogICAgIEFTU0VSVCh0aGlz
ID09IHJlcGxhY2VtZW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTUwMzAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsMjIgKzI5OCwyMCBA
QCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvCiAgICAgICAgIFBhc3NS
ZWZQdHI8SklUQ29kZT4gZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1
cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBn
ZXRKSVRUeXBlKCkgY29uc3QgeyByZXR1cm4gSklUQ29kZTo6aml0VHlwZUZvcihtX2ppdENvZGUu
Z2V0KCkpOyB9Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsKKyAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwg
Q29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbigpID0gMDsKLSAgICAgICAgZW51bSBKSVRDb21waWxhdGlvblJlc3VsdCB7IEFscmVhZHlD
b21waWxlZCwgQ291bGROb3RDb21waWxlLCBDb21waWxlZFN1Y2Nlc3NmdWxseSB9OwotICAgICAg
ICBKSVRDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmIChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykgewogICAgICAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOwotICAgICAgICAgICAgICAgIHJldHVybiBBbHJlYWR5Q29tcGlsZWQ7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uTm90TmVlZGVkOwogICAgICAgICAgICAg
fQogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBpZiAoaml0Q29tcGlsZUltcGwoZXhlYykp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvbXBpbGVkU3VjY2Vzc2Z1bGx5OwotICAgICAgICAg
ICAgcmV0dXJuIENvdWxkTm90Q29tcGlsZTsKKyAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxl
SW1wbChleGVjKTsKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAg
ICAgICAgICByZXR1cm4gQ291bGROb3RDb21waWxlOworICAgICAgICAgICAgcmV0dXJuIENvbXBp
bGF0aW9uRmFpbGVkOwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgPSAwOwpAQCAtOTMwLDcgKzkyOCw3IEBAIGNsYXNzIENvZGVCbG9j
ayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ28KIAogICAgIHByb3RlY3RlZDoKICNpZiBFTkFCTEUo
SklUKQotICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKikgPSAw
OworICAgICAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJbXBsKEV4ZWNT
dGF0ZSopID0gMDsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJl
bmNlcyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKTsKQEAgLTExNTgsOSArMTE1NiwxMCBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvCiAKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Nj
b3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0
JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHZpcnR1YWwgQ29tcGlsYXRpb25S
ZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBs
YW4+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKKyAgICAgICAgdmlydHVhbCBDb21waWxh
dGlvblJlc3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMTgzLDkgKzEx
ODIsMTAgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDbwogICAgICAg
ICAKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhE
ZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1w
bChFeGVjU3RhdGUqKTsKKyAgICAgICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21w
aWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVdp
dGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjA4LDkgKzEyMDgsMTAgQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDbwogICAgICAgICAKICNpZiBFTkFCTEUoSklU
KQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29u
KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKKyAg
ICAgICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUq
KTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZp
cnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlm
aWVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkSWRlbnRpZmllcnMuY3BwCShyZXZpc2lvbiAxNTAzMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogRGVzaXJlZElkZW50aWZp
ZXJzOjpEZXNpcmVkSWRlbnRpZmllcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0zOSwxMSAr
NDEsMjcgQEAgRGVzaXJlZElkZW50aWZpZXJzOjp+RGVzaXJlZElkZW50aWZpZXJzKAogewogfQog
Cit1bnNpZ25lZCBEZXNpcmVkSWRlbnRpZmllcnM6Om51bWJlck9mSWRlbnRpZmllcnMoKQorewor
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpICsgbV9hZGRlZElk
ZW50aWZpZXJzLnNpemUoKTsKK30KKwogdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OmFkZExhemls
eShTdHJpbmdJbXBsKiByZXApCiB7CiAgICAgbV9hZGRlZElkZW50aWZpZXJzLmFwcGVuZChyZXAp
OwogfQogCitTdHJpbmdJbXBsKiBEZXNpcmVkSWRlbnRpZmllcnM6OmF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAoreworICAgIFN0cmluZ0ltcGwqIHJlc3VsdDsKKyAgICBpZiAoaW5kZXggPCBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKQorICAgICAgICByZXN1bHQgPSBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gbV9hZGRlZElkZW50aWZpZXJzW2luZGV4IC0gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRp
ZmllcnMoKV07CisgICAgQVNTRVJUKHJlc3VsdC0+aGFzQXRMZWFzdE9uZVJlZigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6cmVhbGx5QWRkKFZN
JiB2bSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hZGRlZElkZW50aWZpZXJz
LnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRJZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZElkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE1MDMwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDMzICszMCwyMyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK25hbWVz
cGFjZSBERkcgewogCiBjbGFzcyBEZXNpcmVkSWRlbnRpZmllcnMgewogcHVibGljOgogICAgIERl
c2lyZWRJZGVudGlmaWVycyhDb2RlQmxvY2sqKTsKICAgICB+RGVzaXJlZElkZW50aWZpZXJzKCk7
CiAgICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJZGVudGlmaWVycygpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSArIG1fYWRkZWRJZGVu
dGlmaWVycy5zaXplKCk7Ci0gICAgfQotICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mSWRlbnRp
ZmllcnMoKTsKICAgICB2b2lkIGFkZExhemlseShTdHJpbmdJbXBsKik7CiAgICAgCi0gICAgU3Ry
aW5nSW1wbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBTdHJpbmdJ
bXBsKiByZXN1bHQ7Ci0gICAgICAgIGlmIChpbmRleCA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklk
ZW50aWZpZXJzKCkpCi0gICAgICAgICAgICByZXN1bHQgPSBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihpbmRleCkuaW1wbCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBtX2Fk
ZGVkSWRlbnRpZmllcnNbaW5kZXggLSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygp
XTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC0+aGFzQXRMZWFzdE9uZVJlZigpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgU3RyaW5nSW1wbCogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0OwogICAgIAogICAgIFN0cmluZ0ltcGwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTUwMzAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZH
VGh1bmtzLmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2FtcGxp
bmdUb29sLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDgsNyAr
NTAsNyBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogICAgIHJldHVybiBudW1Db21w
aWxhdGlvbnM7CiB9CiAKLXN0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlD
aGVjaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4KQorc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZUluZGV4KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAgLTYxLDcgKzYzLDcgQEAgc3RhdGlj
IGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIEFTU0VSVChvc3JFbnRyeUJ5
dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CiAgICAgCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRh
TG9nKCJERkcgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlv
bnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CkBAIC04Niw5ICs4
OCwxMCBAQCBzdGF0aWMgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAg
IG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CiAgICAgZWxzZQogICAg
ICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Ci0gICAgUGxhbiBwbGFuKGNvbXBpbGVNb2RlLCBj
b2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKKyAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAorICAgICAgICBu
ZXcgUGxhbihjb21waWxlTW9kZSwgY29kZUJsb2NrLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51
bVZhcnNXaXRoVmFsdWVzKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludCBvcGVyYW5kID0gcGxhbi0+
bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKQogICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpCiAgICAgICAgICAgICAmJiBjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24KQEAg
LTk3LDI3ICsxMDAsMzAgQEAgc3RhdGljIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxl
TQogICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3
aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKICAgICAgICAgICAgIC8vIGJ1dCBp
dCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2Vx
dWVudCBERkcgcGFzc2VzLAogICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBi
eSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAgICAgICAgICAgcGxhbi5tdXN0SGFuZGxl
VmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVW
YWx1ZXNbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBs
YW4ubXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1
ZSgpOworICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hl
Y2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBwbGFuLmNvbXBpbGVJ
blRocmVhZCgpOwotICAgIGlmIChwbGFuLmZpbmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjaykgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcGxhbi0+Y29tcGlsZUluVGhyZWFkKCk7CisgICAgcmV0
dXJuIHBsYW4tPmZpbmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiB9CiAK
LWJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0Nv
bXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiB7CiAgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZU90aGVyLCBleGVjLCBjb2RlQmxv
Y2ssIGppdENvZGUsIDAsIGJ5dGVjb2RlSW5kZXgpOwogfQogCi1ib29sIHRyeUNvbXBpbGVGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpK
SVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitDb21waWxhdGlvblJlc3VsdCB0cnlDb21w
aWxlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdp
dGhBcml0eUNoZWNrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIHJldHVybiBjb21w
aWxlKENvbXBpbGVGdW5jdGlvbiwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdp
dGhBcml0eUNoZWNrLCBieXRlY29kZUluZGV4KTsKIH0KIAorQ29tcGlsYXRpb25SZXN1bHQgdHJ5
RmluYWxpemVQbGFuKFBhc3NSZWZQdHI8UGxhbj4gcGxhbiwgUmVmUHRyPEpTQzo6SklUQ29kZT4m
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQor
eworICAgIHJldHVybiBwbGFuLT5maW5hbGl6ZShqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNp
b24gMTUwMzAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBERkdEcml2ZXJfaAogCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQxLDExICs0MiwxNyBAQCBuYW1lc3BhY2Ug
REZHIHsKIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpOwog
CiAjaWYgRU5BQkxFKERGR19KSVQpCi1ib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLWJv
b2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6
OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwor
Q29tcGlsYXRpb25SZXN1bHQgdHJ5RmluYWxpemVQbGFuKFBhc3NSZWZQdHI8UGxhbj4sIFJlZlB0
cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2spOwogI2Vsc2UKLWlubGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0K
LWlubGluZSBib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYsIHVuc2lnbmVkKSB7
IHJldHVybiBmYWxzZTsgfQoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUoRXhl
Y1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gZmFsc2U7IH0KK2lubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rp
b24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBDb21w
aWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpT
Qzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKK30KICNlbmRp
ZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUwMzAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBs
YW4mIHBsYW4pCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9wbGFuKHBsYW4pCi0gICAgLCBtX2Nv
ZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrKQorICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVC
bG9jay5nZXQoKSkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSkKICAgICAsIG1fYWxsb2NhdG9yKHZtLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAg
ICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTAzMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVmUAogdm9p
ZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKIHsKICAgICBpZiAobV9wbGFuLmNvbXBp
bGF0aW9uKQotICAgICAgICBtX3BsYW4udm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENv
bXBpbGF0aW9uKG1fcGxhbi5jb21waWxhdGlvbik7CisgICAgICAgIG1fcGxhbi52bS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5jb21waWxhdGlvbik7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMTUwMzAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTUgKzY4LDE2IEBAIHN0YXRpYyB2
b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3IKIH0KIAogUGxhbjo6UGxhbigKLSAgICBD
b21waWxlTW9kZSBjb21waWxlTW9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBDb21waWxlTW9kZSBjb21waWxlTW9kZSwgUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZUluZGV4LAogICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKQogICAgIDogY29tcGlsZU1v
ZGUoY29tcGlsZU1vZGUpCi0gICAgLCBjb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgdm0oKnBh
c3NlZENvZGVCbG9jay0+dm0oKSkKKyAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAg
ICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwg
bnVtVmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCiAgICAgLCBtdXN0SGFuZGxlVmFs
dWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcykKLSAgICAs
IGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRv
cHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jayksIFByb2ZpbGVyOjpE
RkcpKSA6IDApCi0gICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2spCisgICAgLCBjb21waWxhdGlv
bihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0UmVmKG5ldyBQ
cm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpLCBQcm9maWxlcjo6REZHKSkg
OiAwKQorICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrLmdldCgpKQogewogfQogCkBAIC04OSw3
ICs5MCw3IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKCkKICAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChQbGFuKSIpOwogICAgIENvbXBpbGF0
aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsKIAotICAgIEdyYXBoIGRmZyh2bSgpLCAqdGhpcyk7
CisgICAgR3JhcGggZGZnKHZtLCAqdGhpcyk7CiAgICAgCiAgICAgaWYgKCFwYXJzZShkZmcpKSB7
CiAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMp
KTsKQEAgLTE3Niw3ICsxNzcsNyBAQCBib29sIFBsYW46OmlzU3RpbGxWYWxpZCgpCiB2b2lkIFBs
YW46OnJlYWxseUFkZCgpCiB7CiAgICAgd2F0Y2hwb2ludHMucmVhbGx5QWRkKCk7Ci0gICAgaWRl
bnRpZmllcnMucmVhbGx5QWRkKHZtKCkpOworICAgIGlkZW50aWZpZXJzLnJlYWxseUFkZCh2bSk7
CiB9CiAKIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVj
aykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxNTAzMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMzUgKzI4LDM4IEBACiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2lmIEVO
QUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGls
YXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKICNpbmNs
dWRlICJERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgiCiAjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCisjaW5jbHVkZSAiT3BlcmFu
ZHMuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK25hbWVzcGFjZSBERkcgewog
CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKLWVu
dW0gQ29tcGlsYXRpb25SZXN1bHQgeyBDb21waWxhdGlvbkZhaWxlZCwgQ29tcGlsYXRpb25JbnZh
bGlkYXRlZCwgQ29tcGlsYXRpb25TdWNjZXNzZnVsIH07CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
IAogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAg
IFBsYW4oCi0gICAgICAgIENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAotICAgICAgICB1bnNpZ25lZCBu
dW1WYXJzV2l0aFZhbHVlcyk7CisgICAgICAgIENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBQYXNz
UmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrLAorICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICB+UGxhbigpOwog
ICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7CiAgICAgCiAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAKLSAgICBWTSYgdm0oKSB7
IHJldHVybiAqY29kZUJsb2NrLT52bSgpOyB9Ci0KICAgICBjb25zdCBDb21waWxlTW9kZSBjb21w
aWxlTW9kZTsKLSAgICBDb2RlQmxvY2sqIGNvbnN0IGNvZGVCbG9jazsKKyAgICBWTSYgdm07Cisg
ICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleDsKICAgICBjb25zdCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsK
ICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwpAQCAtNzQsOSArNzcsMTUg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlYWxseUFkZCgpOwogfTsKIAotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK2NsYXNzIFBsYW4gOiBwdWJs
aWMgUmVmQ291bnRlZDxQbGFuPiB7CisgICAgLy8gRHVtbXkgY2xhc3MgdG8gYWxsb3cgIUVOQUJM
RShERkdfSklUKSB0byBidWlsZC4KK307CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCiAjZW5kaWYgLy8gREZHUGxhbl9oCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlz
aW9uIDE1MDMwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbihSZWZQCiAgICAgICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRU
aHVua3MoCiAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAgICAgICAgICAgICAgICAq
bV9leGl0VGh1bmtzTGlua0J1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5r
cyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
aywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgICgiRlRMIGV4
aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4u
Y29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CiAgICAgfSAvLyBl
bHNlIHRoaXMgZnVuY3Rpb24gaGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCiAg
ICAgCiAgICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlv
bk9mKG1fYXJpdHlDaGVjayk7CkBAIC02Niw3ICs2Niw3IEBAIGJvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKFJlZlAKICAgICAgICAgbV9lbmdpbmUsCiAgICAgICAgIEZJTkFMSVpF
X0RGR19DT0RFKAogICAgICAgICAgICAgKm1fZW50cnlwb2ludExpbmtCdWZmZXIsCi0gICAgICAg
ICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNv
ZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
aywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBtX2Z1bmN0aW9uKSkpOworICAgICAgICAgICAg
KCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0
ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0
KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgbV9mdW5jdGlvbikpKTsKICAgICBlbnRyeSA9
IG1faml0Q29kZTsKICAgICAKICAgICBtX2VuZ2luZSA9IDA7IC8vIFdlIGRvbid0IG93biBpdCBh
bnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCShyZXZpc2lv
biAxNTAzMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKICNp
bmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMTEludEVu
dHJ5cG9pbnRzLmgiCkBAIC0zOCw0OSArMzksNTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBw
cm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFJlZlB0
cjxKSVRDb2RlPiYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitpbmxpbmUgQ29tcGls
YXRpb25SZXN1bHQgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUs
CisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBK
SVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICAKICAgICBpZiAoaml0VHlwZSA9PSBjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDb21waWxhdGlvbk5vdE5lZWRlZDsKICAg
ICAKICAgICBpZiAoIXZtLmNhblVzZUpJVCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIENvbXBpbGF0aW9uTm90TmVlZGVkOyAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYg
dGhpcyBpcyByaWdodC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NjI0NgogICAgIAogICAgIGNvZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOwogICAgIAog
ICAgIFJlZlB0cjxKSVRDb2RlPiBvbGRKSVRDb2RlID0gaml0Q29kZTsKICAgICAKICAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKSB7Ci0gICAgICAgIGlmIChERkc6OnRy
eUNvbXBpbGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBieXRlY29kZUluZGV4KSkKKyAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIERGRzo6dHJ5Q29tcGls
ZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAo
cmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgICAgIGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2RlID09IGppdENvZGUpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiByZXN1bHQgPSBKSVQ6OmNvbXBpbGUoJnZt
LCBjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICBq
aXRDb2RlID0gcmVzdWx0OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAgICAgfQogICAgIAotICAg
IGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7
Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bDsKIH0KIAotaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2Rl
PiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBp
bGVGdW5jdGlvbklmQXBwcm9wcmlhdGVJbXBsKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rp
b25Db2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUsCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAgaWYg
KGppdFR5cGUgPT0gY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7CiAgICAgCiAgICAgaWYgKCF2
bS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDb21w
aWxhdGlvbk5vdE5lZWRlZDsgLy8gRklYTUU6IEludmVzdGlnYXRlIGlmIHRoaXMgaXMgcmlnaHQu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYyNDYKICAgICAKICAg
ICBjb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKICAgICAKQEAgLTg4LDEyICs5NCwx
NCBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9IGppdENvZGVXaXRoQXJp
dHlDaGVjazsKICAgICAKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUp
KSB7Ci0gICAgICAgIGlmIChERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBjb2RlQmxvY2ss
IGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNvZGVJbmRleCkpCisgICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKAorICAg
ICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bCkKICAgICAgICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21p
bmdDYWxscygpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2Rl
ID09IGppdENvZGUpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2ssIG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9PSBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiByZXN1
bHQgPQpAQCAtMTAyLDEzICsxMTAsMzkgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9u
SWZBcHByb3ByaQogICAgICAgICAgICAgaml0Q29kZSA9IHJlc3VsdDsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjaywgb2xk
SklUQ29kZVdpdGhBcml0eUNoZWNrID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwg
aml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJZkFwcHJvcHJpYXRl
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8
SklUQ29kZT4mIGppdENvZGUsCisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCit7CisgICAgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAorICAg
ICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIGVm
Zm9ydCk7CisgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKKyAgICAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
KTsKKyAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChq
aXRDb2RlLT5zaXplKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfSAgICAKKworaW5s
aW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8
SklUQ29kZT4mIGppdENvZGUsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKKyAgICB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCit7CisgICAgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0ID0gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZUltcGwoCisg
ICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBq
aXRUeXBlLCBieXRlY29kZUluZGV4LCBlZmZvcnQpOworICAgIGlmIChyZXN1bHQgPT0gQ29tcGls
YXRpb25TdWNjZXNzZnVsKSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2Rl
LCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAu
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGppdENvZGUtPnNpemUoKSk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1MDMwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjQsMjIgKzk2NCw0
MCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgICAg
IEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUs
IHNjb3BlLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
OworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQo
Y2FsbEZyYW1lLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpCisgICAgICAgICAgICB8fCBPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKQorICAgICAgICAgICAgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpj
b2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwogI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCiAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIGRhdGFMb2coIldBUk5J
Tkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCBhIEpTIGVycm9y
LlxuIik7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwogI2VuZGlmCiAgICAg
ICAgIAotICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVCbG9jaykg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bCkgPT0gKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSAhPSBjb2RlQmxvY2spKTsKKyAgICAgICAg
c3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAgICAg
ICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVkOgogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CiAgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgZmFpbGVk
LlxuIik7CiAjZW5kaWYKLSAgICAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAgICAgICAgIGNv
ZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBDb21waWxhdGlvbkludmFsaWRhdGVkOgorICAgICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAg
ICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICAgICAgY29kZUJsb2NrLT5v
cHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTAzMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgsMjkgKzI4OCwzMCBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyhDCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgQ29k
ZUJsb2NrOjpKSVRDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb2RlQmxvY2stPmppdENvbXBp
bGUoZXhlYyk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29kZUJsb2NrLT5qaXRD
b21waWxlKGV4ZWMpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgY2FzZSBDb2RlQmxvY2s6
OkFscmVhZHlDb21waWxlZDoKKyAgICBjYXNlIENvbXBpbGF0aW9uTm90TmVlZGVkOgogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29kZSB3YXMgYWxy
ZWFkeSBjb21waWxlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENvZGVCbG9jazo6Q291bGROb3RDb21w
aWxlOgorICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKICAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLlxuIik7
CiAjZW5kaWYKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgQ29kZUJsb2NrOjpDb21waWxlZFN1Y2Nlc3NmdWxs
eToKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQogICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVs
LlxuIik7CiAjZW5kaWYKICAgICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGVudW0gRW50cnlLaW5kIHsg
UHJvbG9ndWUsIEFyaXR5Q2hlY2sgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25S
ZXN1bHQuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQpCit7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVk
OgorICAgICAgICBvdXQucHJpbnQoIkNvbXBpbGF0aW9uRmFpbGVkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CisgICAgICAgIG91dC5wcmludCgi
Q29tcGlsYXRpb25JbnZhbGlkYXRlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWw6CisgICAgICAgIG91dC5wcmludCgiQ29tcGlsYXRpb25TdWNjZXNz
ZnVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uTm90TmVlZGVkOgor
ICAgICAgICBvdXQucHJpbnQoIkNvbXBpbGF0aW9uTm90TmVlZGVkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIG91dC5wcmludCgiQ29t
cGlsYXRpb25EZWZlcnJlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3Vs
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGls
YXRpb25SZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29tcGlsYXRpb25S
ZXN1bHRfaAorI2RlZmluZSBDb21waWxhdGlvblJlc3VsdF9oCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gQ29tcGlsYXRpb25SZXN1bHQg
eyBDb21waWxhdGlvbkZhaWxlZCwgQ29tcGlsYXRpb25JbnZhbGlkYXRlZCwgQ29tcGlsYXRpb25T
dWNjZXNzZnVsLCBDb21waWxhdGlvbk5vdE5lZWRlZCwgQ29tcGlsYXRpb25EZWZlcnJlZCB9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6Q29tcGlsYXRpb25SZXN1bHQpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIENvbXBpbGF0aW9uUmVzdWx0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1MDMw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTUsMTkgKzE1NSwyMSBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Vs
bCktPkZ1bmN0aW9uRXhlY3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi1KU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0pTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewog
ICAgIEFTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCgh
IW1fZXZhbENvZGVCbG9jayk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAoIUpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSkpCi0g
ICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0
VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSksIGJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6bmV4
dFRpZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpLCAmcmVzdWx0LCBieXRlY29k
ZUluZGV4KTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVlZGVk
OwogICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CiAgICAgcmV0dXJuIGVycm9yOwogfQog
CiAjaWYgRU5BQkxFKEpJVCkKLWJvb2wgRXZhbEV4ZWN1dGFibGU6OmppdENvbXBpbGUoRXhlY1N0
YXRlKiBleGVjKQorQ29tcGlsYXRpb25SZXN1bHQgRXZhbEV4ZWN1dGFibGU6OmppdENvbXBpbGUo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShl
eGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CkBAIC0x
OTAsMTAgKzE5MiwxMyBAQCBpbmxpbmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihK
CiAgICAgfQogfQogCi1KU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNj
cmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgKnJlc3Vs
dCA9IENvbXBpbGF0aW9uRmFpbGVkOworICAgIAogI2lmICFFTkFCTEUoSklUKQogICAgIFVOVVNF
RF9QQVJBTShqaXRUeXBlKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkBAIC0y
MjQsMjIgKzIyOSwxOSBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
CiAgICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMs
IHVubGlua2VkRXZhbENvZGUsIGxleGljYWxHbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNjb3BlLT5sb2NhbERlcHRoKCkpKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAg
IGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbihleGVjLCBuZXdDb2RlQmxvY2suZ2V0KCksIG1faml0
Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpKQotICAgICAgICByZXR1cm4gMDsK
LSNlbmRpZgotICAgIAotICAgIG1fZXZhbENvZGVCbG9jayA9IG5ld0NvZGVCbG9jazsKLQotI2lm
IEVOQUJMRShKSVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KHNpemVvZigqbV9ldmFsQ29kZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwtPnNpemUoKSk7Ci0j
ZWxzZQotICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2Yo
Km1fZXZhbENvZGVCbG9jaykpOwotI2VuZGlmCi0KKyAgICBDb21waWxhdGlvblJlc3VsdCB0aGVS
ZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAgICBleGVjLCBtX2V2YWxDb2RlQmxv
Y2ssIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSwgYnl0ZWNv
ZGVJbmRleCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsK
ICAgICByZXR1cm4gMDsKIH0KIAorQ29tcGlsYXRpb25SZXN1bHQgRXZhbEV4ZWN1dGFibGU6OnJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFu
KQoreworICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAor
ICAgICAgICBwbGFuLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIDAsIDApOwor
fQorCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1p
emVkQ29kZShWTSYgdm0pCiB7CkBAIC0yOTAsMjggKzI5MiwzMyBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3Qo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UpOwogfQogCi1KU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxh
dGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEh
bV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgIGlmICgh
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
KSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6
Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRD
b2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSksICZyZXN1
bHQsIGJ5dGVjb2RlSW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRp
b25Ob3ROZWVkZWQ7CiAgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICByZXR1
cm4gZXJyb3I7CiB9CiAKICNpZiBFTkFCTEUoSklUKQotYm9vbCBQcm9ncmFtRXhlY3V0YWJsZTo6
aml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCitDb21waWxhdGlvblJlc3VsdCBQcm9ncmFtRXhl
Y3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGppdENv
bXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRD
b2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKIH0KICNlbmRpZgogCi1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2Rl
OjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogUHJv
Z3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1
bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCisgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOworICAgIAogI2lmICFF
TkFCTEUoSklUKQogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBVTlVTRURfUEFSQU0oaml0
VHlwZSk7CkBAIC0zMjgsMjIgKzMzNSwxOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlCiAgICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBQcm9ncmFt
Q29kZUJsb2NrKHRoaXMsIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBnbG9iYWxP
YmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSklUKQot
ICAgIGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbihleGVjLCBuZXdDb2RlQmxvY2suZ2V0KCksIG1f
aml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpKQotICAgICAgICByZXR1cm4g
MDsKLSNlbmRpZgotCi0gICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gbmV3Q29kZUJsb2NrOwotICAg
IAotI2lmIEVOQUJMRShKSVQpCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1v
cnlDb3N0KHNpemVvZigqbV9wcm9ncmFtQ29kZUJsb2NrKSArIG1faml0Q29kZUZvckNhbGwtPnNp
emUoKSk7Ci0jZWxzZQotICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwotI2VuZGlmCi0KKyAgICBDb21waWxhdGlv
blJlc3VsdCB0aGVSZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAgICBleGVjLCBt
X3Byb2dyYW1Db2RlQmxvY2ssIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwg
aml0VHlwZSwgYnl0ZWNvZGVJbmRleCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgKnJlc3Vs
dCA9IHRoZVJlc3VsdDsKICAgICByZXR1cm4gMDsKIH0KIAorQ29tcGlsYXRpb25SZXN1bHQgUHJv
Z3JhbUV4ZWN1dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPiBwbGFuKQoreworICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVmZXJy
ZWRPcHRpbWl6ZWRDb2RlKAorICAgICAgICBwbGFuLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG1faml0
Q29kZUZvckNhbGwsIDAsIDApOworfQorCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7CkBAIC00NjIsMzUgKzQ2
NiwzOSBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9u
UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2Nv
ZGVCbG9ja0ZvckNhbGwpOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkpKQot
ICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENv
ZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBz
Y29wZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBl
KCkpLCAmcmVzdWx0LCBieXRlY29kZUluZGV4KTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9
IENvbXBpbGF0aW9uTm90TmVlZGVkOwogICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ2FsbCk7
CiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
c2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsK
ICAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGVy
cm9yID0gMDsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5nZXRKSVRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSksIGJ5dGVjb2RlSW5kZXgpOworICAgIGlmICgh
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRU
eXBlKCkpKQorICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVj
LCBzY29wZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdl
dEpJVFR5cGUoKSksICZyZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOworICAgIGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1i
b29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKiBleGVj
KQorQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ2Fs
bChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBw
cm9wcmlhdGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxs
LCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQo
KSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAKLWJvb2wgRnVuY3Rpb25F
eGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0NvbXBp
bGF0aW9uUmVzdWx0IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNvbnN0cnVjdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9w
cmlhdGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksIG1faml0Q29kZUZvckNv
bnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CkBAIC01
MjMsMTAgKzUzMSwxMyBAQCBQYXNzUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4
CiB9CiAKIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRl
cm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdCwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKICAgICAKKyAgICBpZiAocmVzdWx0
KQorICAgICAgICAqcmVzdWx0ID0gQ29tcGlsYXRpb25GYWlsZWQ7CisgICAgCiAjaWYgIUVOQUJM
RShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBl
KTsKQEAgLTU0MCwyOSArNTUxLDI5IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGVGb3IKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhl
Y3V0aW9uKGV4ZWMsIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBDb2RlRm9y
Q2FsbCkpCi0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCi0KLSAgICBtX2NvZGVCbG9ja0ZvckNh
bGwgPSBuZXdDb2RlQmxvY2s7Ci0gICAgCi0gICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IG1f
Y29kZUJsb2NrRm9yQ2FsbC0+bnVtUGFyYW1ldGVycygpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1f
bnVtUGFyYW1ldGVyc0ZvckNhbGwpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBIZWFwOjpoZWFw
KHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2NvZGVCbG9ja0ZvckNhbGwp
ICsgbV9qaXRDb2RlRm9yQ2FsbC0+c2l6ZSgpKTsKLSNlbHNlCi0gICAgSGVhcDo6aGVhcCh0aGlz
KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSk7Ci0j
ZW5kaWYKLQorICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5jdGlv
bkZvckV4ZWN1dGlvbigKKyAgICAgICAgZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBuZXdDb2Rl
QmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsCisgICAgICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjaywgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCwgaml0VHlwZSwKKyAgICAgICAg
Ynl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgICpy
ZXN1bHQgPSB0aGVSZXN1bHQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpCitDb21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGxhY2VX
aXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxh
bikKK3sKKyAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgK
KyAgICAgICAgcGxhbiwgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCAmbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLAorICAgICAgICAmbV9udW1QYXJhbWV0ZXJzRm9y
Q2FsbCk7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdE
ZXNjcmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgKnJl
c3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOworICAgIAogI2lmICFFTkFCTEUoSklUKQogICAgIFVO
VVNFRF9QQVJBTShqaXRUeXBlKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CkBAIC01NzUsMjUg
KzU4NiwyMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAg
aWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKLSNpZiBFTkFC
TEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG5ld0Nv
ZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVj
dCkpCi0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCi0KLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCA9IG5ld0NvZGVCbG9jazsKLSAgICAKLSAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1
Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bnVtUGFyYW1ldGVycygpOwotICAgIFJFTEVB
U0VfQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci0KLSNpZiBFTkFCTEUoSklU
KQotICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKm1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KSArIG1faml0Q29kZUZvckNvbnN0cnVjdC0+c2l6ZSgpKTsK
LSNlbHNlCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVv
ZigqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpKTsKLSNlbmRpZgotCisgICAgQ29tcGlsYXRpb25S
ZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAorICAgICAgICBl
eGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbmV3Q29kZUJsb2NrLmdldCgpLCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QsCisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrLCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QsIGppdFR5cGUsCisgICAgICAgIGJ5dGVj
b2RlSW5kZXgsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgICpy
ZXN1bHQgPSB0aGVSZXN1bHQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKK0NvbXBpbGF0aW9uUmVzdWx0
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JD
b25zdHJ1Y3QoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCit7CisgICAgcmV0dXJuIEpTQzo6
cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCisgICAgICAgIHBsYW4sIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsCisgICAgICAgICZtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgJm1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCk7Cit9CisKICNpZiBFTkFCTEUoSklUKQogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTUwMzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tI
YXNoLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNv
bXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkhhbmRs
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCkBAIC0zODEsNyArMzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNT
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJl
OyB9CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwotCisgICAgICAgIAogICAgICAgICBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTQzMCwxMSAr
NDMyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJl
c3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4p
OwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1p
emVkQ29kZShWTSYpOwotICAgICAgICBib29sIGppdENvbXBpbGUoRXhlY1N0YXRlKik7CisgICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGUoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAog
ICAgICAgICBFdmFsQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCkBAIC00NzMsNyArNDc2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpT
dHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwo
RXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSBVSU5UX01BWCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhl
Y1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9
IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBSZWZQ
dHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOwpAQCAtNTA3LDExICs1MTAsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAot
ICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVy
cmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwogICAgICAgICAKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShWTSYpOwotICAg
ICAgICBib29sIGppdENvbXBpbGUoRXhlY1N0YXRlKik7CisgICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IGppdENvbXBpbGUoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAogICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCkBAIC01NTEsNyArNTU1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGVudW0gRnVuY3Rpb25Nb2RlIHsgSXNGdW5jdGlvblRvU3BlY2lhbGl6
ZSwgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUgfTsKICAgICAgICAgaW50IGFkZEdsb2Jh
bFZhcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1
bmN0aW9uTW9kZSk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3Rh
dGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9
IFVJTlRfTUFYKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
LCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIFdyaXRlQmFycmll
cjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwpA
QCAtNjAyLDExICs2MDYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CiAgICAgICAgIH0KIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZv
ckNhbGwoRXhlY1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2Fs
bChQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAg
ICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mKTsKLSAgICAgICAgYm9v
bCBqaXRDb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgaml0Q29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAogICAgICAgICBib29s
IGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CkBAIC02MzAsMTEgKzYzNSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCi0gICAgICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTU2Nv
cGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVP
cHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVz
dWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFBhc3NSZWZQdHI8
REZHOjpQbGFuPik7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgamV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZNJik7Ci0gICAgICAgIGJvb2wgaml0Q29t
cGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQg
aml0Q29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgICAgIGJv
b2wgaXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdApAQCAtNjYwLDE4ICs2NjYsMjUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY29tcGlsZUZvckNvbnN0cnVjdChl
eGVjLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+Y2FsbGVlKCkpOwogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhl
cml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CiAgICAgICAgICAgICBBU1NFUlQoanNDYXN0PEpT
RnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNhbGwoZXhlYywgc2NvcGUsIGJ5dGVj
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2Fs
bChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKICAgICAgICAgICAgIEFTU0VS
VChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVP
cHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGUsIGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGUsIHJl
c3VsdCwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPiBwbGFuLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAg
IHJldHVybiByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNhbGwocGxhbik7Cisg
ICAgICAgICAgICByZXR1cm4gcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QocGxhbik7CisgICAgICAgIH0KKwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQg
amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQogICAgICAgICB7CkBAIC02ODMsNyArNjk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgaml0Q29tcGlsZUZv
cihFeGVjU3RhdGUqIGV4ZWMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUZvcihFeGVjU3RhdGUqIGV4ZWMsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGppdENvbXBpbGVGb3JDYWxsKGV4
ZWMpOwpAQCAtNzM5LDggKzc1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExp
bmUpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0
ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0g
VUlOVF9NQVgpOwotICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFs
KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4ID0gVUlOVF9NQVgpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRl
cm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgQ29tcGlsYXRpb25S
ZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKKyAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgSklUQ29kZTo6SklUVHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxGdW5jdGlv
bkNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAg
ICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhh
cm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDE1MDMwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNDIgKzMwLDEx
OSBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0Lmgi
CisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCisjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUg
IkpJVERyaXZlci5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludHMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBw
cmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK2lubGluZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJl
Rm9yRXhlY3V0aW9uSW1wbCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoTExJTlQpCiAg
ICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CiAgICAgICAgIC8vIFN0
YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVycHJldGVyLgogICAgICAgICBMTEludDo6Z2V0
RW50cnlwb2ludChleGVjLT52bSgpLCBjb2RlQmxvY2ssIGppdENvZGUpOwotICAgICAgICBjb2Rl
QmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAg
ICAgICBpZiAoZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgICAgICBl
eGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVC
bG9jayk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25T
dWNjZXNzZnVsOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0gICAgcmV0dXJuIGpp
dENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwg
Ynl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyNpZiBFTkFCTEUo
SklUKQorICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZUltcGwoCisgICAgICAgIGV4
ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAg
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyNlbmRpZgorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogfQogCi1pbmxp
bmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBGdW5j
dGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK2lubGluZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRp
b25JbXBsKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9j
aywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
aml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsCisgICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogI2lm
IEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkp
IHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50ZXJwcmV0ZXIuCiAg
ICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhlYy0+dm0oKSwga2luZCwgaml0
Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRD
b2RlKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgIGlmIChleGVjLT52
bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkubV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiAgICAg
fQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oa2luZCk7CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5U
KQotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVC
bG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUlu
ZGV4LCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworI2lmIEVOQUJMRShKSVQpCisgICAg
cmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGVJbXBsKAorICAgICAgICBleGVj
LCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0
ZWNvZGVJbmRleCwKKyAgICAgICAgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyNlbmRp
ZgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENvbXBpbGF0
aW9uRmFpbGVkOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5l
IHZvaWQgaW5zdGFsbE9wdGltaXplZENvZGUoCisgICAgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBz
aW5rLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29k
ZSwKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBpbnQq
IG51bVBhcmFtZXRlcnMpCit7CisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgCisgICAgc2luayA9IGNvZGVCbG9jazsKKyAgICAK
KyAgICBpZiAobnVtUGFyYW1ldGVycykKKyAgICAgICAgKm51bVBhcmFtZXRlcnMgPSBjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAKKyAgICBpZiAoaml0Q29kZSkKKyAgICAgICAgY29k
ZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9j
aykgKyBqaXRDb2RlLT5zaXplKCkpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrLT52bSgp
LT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9jaykpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENvbXBpbGF0aW9uUmVzdWx0
IHByZXBhcmVGb3JFeGVjdXRpb24oCisgICAgRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8Q29kZUJs
b2NrVHlwZT4mIHNpbmssIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywKKyAgICBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKK3sKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRm9yRXhl
Y3V0aW9uSW1wbCgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4KTsKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkK
KyAgICAgICAgaW5zdGFsbE9wdGltaXplZENvZGUoc2luaywgY29kZUJsb2NrLCBqaXRDb2RlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIHNpbmssIEZ1bmN0aW9u
Q29kZUJsb2NrKiBjb2RlQmxvY2ssCisgICAgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywKKyAgICBpbnQmIG51bVBh
cmFtZXRlcnMsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uSW1wbCgKKyAgICAgICAg
ZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUs
CisgICAgICAgIGJ5dGVjb2RlSW5kZXgsIGtpbmQpOworICAgIGlmIChyZXN1bHQgPT0gQ29tcGls
YXRpb25TdWNjZXNzZnVsKQorICAgICAgICBpbnN0YWxsT3B0aW1pemVkQ29kZShzaW5rLCBjb2Rl
QmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgJm51bVBhcmFtZXRlcnMpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CitpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoCisgICAgUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4sIFJlZlB0cjxDb2RlQmxvY2tUeXBl
PiYgc2luaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrLCBpbnQqIG51bVBhcmFtZXRlcnMpCit7CisgICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjp0cnlGaW5hbGl6ZVBsYW4ocGxhbiwgaml0
Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bCkgeworICAgICAgICBpbnN0YWxsT3B0aW1pemVkQ29kZSgKKyAgICAgICAg
ICAgIHNpbmssIHN0YXRpY19jYXN0PENvZGVCbG9ja1R5cGUqPihwbGFuLT5jb2RlQmxvY2suZ2V0
KCkpLCBqaXRDb2RlLAorICAgICAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID8gKmppdENv
ZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAorICAgICAgICAgICAg
bnVtUGFyYW1ldGVycyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwo=
</data>
<flag name="review"
          id="223579"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>