<?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>120706</bug_id>
          
          <creation_ts>2013-09-04 16:52:06 -0700</creation_ts>
          <short_desc>Rename StackIterator to StackVisitor.</short_desc>
          <delta_ts>2013-09-04 17:39:34 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>924662</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-04 16:52:06 -0700</bug_when>
    <thetext>Renaming StackIterator to StackVisitor.  Also doing some minor refactoring:

- Renamed StackIterator::iterate() to StackVisitor::visit().
- Make StackVisitor::visit() a static method.
- Move the instantiation of the StackVisitor instance into StackVisitor::visit() from CallFrame::iterate().
- Removed StackIterator::resetIterator() and inline its body into the StackVisitor constructor since this is the only remaining caller of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924663</commentid>
    <comment_count>1</comment_count>
      <attachid>210506</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-04 16:54:14 -0700</bug_when>
    <thetext>Created attachment 210506
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924691</commentid>
    <comment_count>2</comment_count>
      <attachid>210506</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-04 17:23:57 -0700</bug_when>
    <thetext>Comment on attachment 210506
the patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924706</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-04 17:39:34 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r155081: &lt;http://trac.webkit.org/r155081&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210506</attachid>
            <date>2013-09-04 16:54:14 -0700</date>
            <delta_ts>2013-09-04 17:23:57 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-120706.patch</filename>
            <type>text/plain</type>
            <size>86804</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1MDc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDEzLTA5LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWVkIFN0YWNrSXRlcmF0b3IgdG8gU3RhY2tWaXNpdG9yLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNzA2LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gZGlkIHNvbWUgbWlub3IgcmVmYWN0
b3Jpbmc6CisgICAgICAgIC0gUmVuYW1lZCBTdGFja0l0ZXJhdG9yOjppdGVyYXRlKCkgdG8gU3Rh
Y2tWaXNpdG9yOjp2aXNpdCgpLgorICAgICAgICAtIE1ha2UgU3RhY2tWaXNpdG9yOjp2aXNpdCgp
IGEgc3RhdGljIG1ldGhvZC4KKyAgICAgICAgLSBNb3ZlIHRoZSBpbnN0YW50aWF0aW9uIG9mIHRo
ZSBTdGFja1Zpc2l0b3IgaW5zdGFuY2UgaW50byBTdGFja1Zpc2l0b3I6OnZpc2l0KCkKKyAgICAg
ICAgICBmcm9tIENhbGxGcmFtZTo6aXRlcmF0ZSgpLgorICAgICAgICAtIFJlbW92ZWQgU3RhY2tJ
dGVyYXRvcjo6cmVzZXRJdGVyYXRvcigpIGFuZCBpbmxpbmUgaXRzIGJvZHkgaW50byB0aGUKKyAg
ICAgICAgICBTdGFja1Zpc2l0b3IgY29uc3RydWN0b3Igc2luY2UgdGhpcyBpcyB0aGUgb25seSBy
ZW1haW5pbmcgY2FsbGVyIG9mIGl0LgorCisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6
CisgICAgICAgIChCYWNrdHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgIChKU0M6OkV4ZWNTdGF0ZTo6aXRlcmF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpEdW1wUmVnaXN0ZXJGdW5jdG9yOjpvcGVyYXRv
cigpKToKKyAgICAgICAgKEpTQzo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Z2V0
U3RhY2tGcmFtZUNvZGVUeXBlKToKKyAgICAgICAgKEpTQzo6R2V0U3RhY2tUcmFjZUZ1bmN0b3I6
Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigpKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJl
dGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tJdGVyYXRvci5jcHAuCisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9y
KToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpnb3RvTmV4dEZyYW1lKToKKyAgICAgICAg
KEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0
b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJl
YWRJbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpjb2Rl
VHlwZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSk6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OnNvdXJjZVVSTCk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6U3Rh
Y2tWaXNpdG9yOjpGcmFtZTo6YXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9y
OjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0
b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6U3RhY2tW
aXNpdG9yOjpGcmFtZTo6c2V0VG9FbmQpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZy
YW1lOjpwcmludCk6CisgICAgICAgIChEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAgICAg
KEpTQzo6U3RhY2tWaXNpdG9yOjp2aXNpdCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAg
KEZ1bmN0aW9uSlNDU3RhY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBwcm9maWxl
ci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6QWRkUGFyZW50Rm9yQ29uc29s
ZVN0YXJ0RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6UmV0cmlldmVBcmd1bWVudHNGdW5jdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKEpTQzo6UmV0cmlldmVDYWxsZXJGdW5jdGlvbkZ1bmN0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpHbG9iYWxGdW5jUHJvdG9HZXR0ZXJGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKEpTQzo6R2xvYmFsRnVuY1Byb3RvU2V0dGVyRnVuY3Rvcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok9i
amVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2ZGdW5jdG9yOjpvcGVyYXRvcigpKToKKwogMjAx
My0wOS0wNCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgQnVpbGQgZml4IGZvciBXaW5kb3dzIERlYnVnU3VmZml4IGNvbmZpZ3VyYXRpb24u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTUwNzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTIwNiw3ICsyMDYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKICAg
ICBpbnRlcnByZXRlci9KU1N0YWNrLmNwcAotICAgIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3Iu
Y3BwCisgICAgaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogICAgIGludGVycHJldGVyL1ZN
SW5zcGVjdG9yLmNwcAogCiAgICAgaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU1
MDc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTU4OSw4ICs1ODksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1ZNSW5zcGVjdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1ZNSW5zcGVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZVByZWZpeC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTUw
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtMjA1LDcgKzIwNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAgXAogICAgIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBcCiAgICAgaW50ZXJwcmV0
ZXIvSlNTdGFjay5jcHAgXAotICAgIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwIFwKKyAg
ICBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIFwKICAgICBqaXQvQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgXAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
IFwKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDE1NTA3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCi0jaW5j
bHVkZSAiU3RhY2tJdGVyYXRvci5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNs
dWRlIDxzdGRpby5oPgpAQCAtMzMzLDEwICszMzMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICBTdGFja0l0ZXJhdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja0l0ZXJhdG9yJiBp
dGVyKQorICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHsKLSAgICAgICAgbV90cmFjZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiAg
ICAlenUgICAlc1xuIiwgaXRlci0+aW5kZXgoKSwgaXRlci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpKSk7Ci0gICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjpDb250aW51ZTsKKyAgICAgICAg
bV90cmFjZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiAgICAlenUgICAlc1xuIiwgdmlzaXRvci0+
aW5kZXgoKSwgdmlzaXRvci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJl
dHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDE1NTA3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCi0jaW5jbHVkZSAi
U3RhY2tJdGVyYXRvci5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAKQEAgLTIyMSwzOSArMjIxLDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgU3Rh
Y2tJdGVyYXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBT
dGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAg
ICB7CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAg
ICAgICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBh
bnkgZnJhbWUgeWV0LCB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0aGUgZnJh
bWUsIGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgot
ICAgICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IGl0ZXItPmNhbGxlZSgpOwotICAgICAgICAg
ICAgaWYgKCFjYWxsZWUgJiYgaXRlci0+aW5kZXgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
U3RhY2tJdGVyYXRvcjo6RG9uZTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSB2aXNp
dG9yLT5jYWxsZWUoKTsKKyAgICAgICAgICAgIGlmICghY2FsbGVlICYmIHZpc2l0b3ItPmluZGV4
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciYgYnVpbGRlciA9IG1fYnVpbGRlcjsKICAgICAgICAgICAgIGlm
ICghYnVpbGRlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xu
Jyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIycpOwotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmROdW1iZXIoaXRlci0+aW5kZXgoKSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcih2aXNpdG9yLT5pbmRleCgpKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcg
Jyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5mdW5jdGlvbk5hbWUoKSk7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh2aXNpdG9yLT5mdW5jdGlvbk5hbWUoKSk7CiAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIigpIGF0ICIpOwotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoaXRlci0+c291cmNlVVJMKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXItPmlz
SlNGcmFtZSgpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh2aXNpdG9yLT5zb3VyY2VV
UkwoKSk7CisgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNKU0ZyYW1lKCkpIHsKICAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxp
bmVOdW1iZXI7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgdW51c2VkQ29sdW1uOwotICAgICAg
ICAgICAgICAgIGl0ZXItPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmVOdW1iZXIsIHVudXNlZENv
bHVtbik7CisgICAgICAgICAgICAgICAgdmlzaXRvci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGlu
ZU51bWJlciwgdW51c2VkQ29sdW1uKTsKICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51
bWJlcihsaW5lTnVtYmVyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFjYWxs
ZWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkRvbmU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9yZW1h
aW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwotICAgICAgICAgICAgcmV0dXJuIFN0YWNr
SXRlcmF0b3I6OkNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkRvbmU7Cisg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgfQogCiBwcml2YXRlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTUwNzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDcgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXENhbGxGcmFtZS5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3IuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrVmlzaXRv
ci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNw
ZWN0b3IuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAiIC8+DQpAQCAtNzQzLDcgKzc0Myw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0YWNrLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFja0lubGluZXMuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxSZWdpc3Rlci5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3IuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0b3IuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENvbXBhY3RKSVRDb2RlTWFwLmgi
IC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwkocmV2aXNpb24gMTU1MDc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgsNyArMjg4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGlu
dGVycHJldGVyXEpTU3RhY2suY3BwIj4NCiAgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0
ZXI+DQogICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXFN0YWNrSXRlcmF0b3IuY3BwIj4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxTdGFja1Zpc2l0b3IuY3BwIj4NCiAgICAgICA8RmlsdGVyPmludGVycHJldGVy
PC9GaWx0ZXI+DQogICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGludGVycHJldGVyXFZNSW5zcGVjdG9yLmNwcCI+DQpAQCAtMTMzMSw3ICsxMzMxLDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVyLmgiPg0KICAgICAg
IDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5oIj4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0b3IuaCI+DQogICAg
ICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5oIj4NCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU1MDc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTkzNSw4ICs5MzUsOCBAQAogCQlBN0MxRThFNDExMkU3MkVGMDBB
MzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi87IH07CiAJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURC
MiAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0MxRUFFQTE3OTg3QUI2MDAyOTlEQjIgLyogQ2FsbEZyYW1lSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIy
IC8qIEpTU3RhY2tJbmxpbmVzLmggKi87IH07Ci0JCUE3QzFFQUYxMTc5ODdBQjYwMDI5OURCMiAv
KiBTdGFja0l0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QzFFQUVDMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja0l0ZXJhdG9yLmNwcCAq
LzsgfTsKLQkJQTdDMUVBRjIxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzFFQUVEMTc5ODdB
QjYwMDI5OURCMiAvKiBTdGFja0l0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNr
VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCAqLzsgfTsKKwkJ
QTdDMUVBRjIxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDMUVBRUQxNzk4N0FCNjAwMjk5REIy
IC8qIFN0YWNrVmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDg5Q0Uz
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKIAkJQTdEODlDRjMx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDg5Q0U0MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgKi87IH07CiAJCUE3RDg5Q0Y0MTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEODlDRTUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Js
b2NrSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTIxMzksOCArMjEzOSw4IEBACiAJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5
OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0MxRUFFQTE3OTg3QUI2MDAyOTlEQjIgLyogQ2FsbEZyYW1lSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRnJhbWVJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAv
KiBKU1N0YWNrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0
YWNrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0MxRUFFQzE3OTg3
QUI2MDAyOTlEQjIgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdGFja0l0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTdDMUVBRUQxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrVmlzaXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3QzFFQUVEMTc5ODdBQjYwMDI5OURC
MiAvKiBTdGFja1Zpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rh
Y2tWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzIyNUNDMTM5OTgx
RjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gS2V5d29yZExvb2t1cEdlbmVyYXRvci5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMjI1Q0QxMzk5ODQ5QzAwRkYxNjYyIC8qIEtleXdvcmRM
b29rdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5d29yZExvb2t1cC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0Q4OUNFMzE3QTBCOENDMDA3NzNBRDgg
LyogREZHQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NjksOCArMjY2OSw4IEBACiAJCQkJMTRENzkyNjQw
REFBMDNGQjAwMUE5RjA1IC8qIEpTU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAy
OTlEQjIgLyogSlNTdGFja0lubGluZXMuaCAqLywKIAkJCQkxNDlCMjRGRjBEOEFGNkQxMDA5Q0I4
QzcgLyogUmVnaXN0ZXIuaCAqLywKLQkJCQlBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIgLyogU3Rh
Y2tJdGVyYXRvci5jcHAgKi8sCi0JCQkJQTdDMUVBRUQxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNr
SXRlcmF0b3IuaCAqLywKKwkJCQlBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNp
dG9yLmNwcCAqLywKKwkJCQlBN0MxRUFFRDE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9y
LmggKi8sCiAJCQkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAq
LywKIAkJCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLywKIAkJ
CSk7CkBAIC00Mzg2LDcgKzQzODYsNyBAQAogCQkJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAv
KiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMUMxN0Q1MUYyMjAw
Q0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURB
RUVFMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QzFF
QUYyMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBN0MxRUFGMjE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNp
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRp
Y1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYw
MDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTc0
LDcgKzUxNzQsNyBAQAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYxM0MxRkIwMENFM0Uy
NSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYz
RkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdD
MUVBRjExNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8q
IFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3
RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAx
NTUwNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIK
LSNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAK
IG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtMjg0LDEyICsyODQsMTEgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lTm9GbGFncygpIHsgcmV0dXJuIGNhbGxl
ckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7IH0KIAogICAgICAgICAvLyBDYWxs
RnJhbWU6Oml0ZXJhdGUoKSBleHBlY3RzIGEgRnVuY3RvciB0aGF0IGltcGxlbWVudHMgdGhlIGZv
bGxvd2luZyBtZXRob2Q6Ci0gICAgICAgIC8vICAgICBTdGFja0l0ZXJhdG9yOjpTdGF0dXMgb3Bl
cmF0b3IoKShTdGFja0l0ZXJhdG9yJik7CisgICAgICAgIC8vICAgICBTdGFja1Zpc2l0b3I6OlN0
YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoRnVuY3RvciYgZnVuY3RvcikKICAgICAgICAgewot
ICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyKHRoaXMpOwotICAgICAgICAgICAgaXRlci5p
dGVyYXRlPEZ1bmN0b3I+KGZ1bmN0b3IpOworICAgICAgICAgICAgU3RhY2tWaXNpdG9yOjp2aXNp
dDxGdW5jdG9yPih0aGlzLCBmdW5jdG9yKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAkocmV2aXNpb24gMTU1MDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogI2lu
Y2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVk
ZSAiU2FtcGxpbmdUb29sLmgiCi0jaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgorI2luY2x1ZGUg
IlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNU3RhY2tCb3VuZHMuaCIKQEAgLTI4
MiwxOSArMjgyLDE5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgU3RhY2tJdGVyYXRv
cjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBTdGFja1Zpc2l0
b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAg
ICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewogICAgICAgICAgICAgbV9oYXNTa2lw
cGVkRmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6
Q29udGludWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAg
ICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSAwOwogICAgICAgICB1bnNpZ25lZCB1
bnVzZWRDb2x1bW4gPSAwOwotICAgICAgICBpdGVyLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5l
LCB1bnVzZWRDb2x1bW4pOwotICAgICAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAg
ICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBtX2l0LCBpdGVyLT5ieXRlY29kZU9mZnNl
dCgpLCBsaW5lKTsKKyAgICAgICAgdmlzaXRvci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwg
dW51c2VkQ29sdW1uKTsKKyAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAgICAgICAgICAg
ICAgIHwgJTEwcCB8ICVkIChsaW5lICVkKVxuIiwgbV9pdCwgdmlzaXRvci0+Ynl0ZWNvZGVPZmZz
ZXQoKSwgbGluZSk7CiAgICAgICAgICsrbV9pdDsKLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0
b3I6OkRvbmU7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgfQogCiBw
cml2YXRlOgpAQCAtMzg5LDEwICszODksMTAgQEAgYm9vbCBJbnRlcnByZXRlcjo6aXNPcGNvZGUo
T3Bjb2RlIG9wY29kZQogI2VuZGlmCiB9CiAKLXN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShT
dGFja0l0ZXJhdG9yJiBpdGVyLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQorc3RhdGljIGJvb2wg
dW53aW5kQ2FsbEZyYW1lKFN0YWNrVmlzaXRvciYgdmlzaXRvciwgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGl0ZXItPmNhbGxGcmFtZSgpOwot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb2xkQ29kZUJs
b2NrID0gY29kZUJsb2NrOwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgp
OwogCkBAIC00MzEsMTYgKzQzMSwxNiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBjb25zdCBTdHJp
bmcgZ2V0U291CiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLT5zb3VyY2VVUkwoKTsKIH0KIAotc3RhdGljIFN0YWNrRnJhbWVDb2RlVHlwZSBnZXRT
dGFja0ZyYW1lQ29kZVR5cGUoU3RhY2tJdGVyYXRvciBpdGVyKQorc3RhdGljIFN0YWNrRnJhbWVD
b2RlVHlwZSBnZXRTdGFja0ZyYW1lQ29kZVR5cGUoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQogewot
ICAgIHN3aXRjaCAoaXRlci0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6
RnJhbWU6OkV2YWw6CisgICAgc3dpdGNoICh2aXNpdG9yLT5jb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBTdGFja1Zpc2l0b3I6OkZyYW1lOjpFdmFsOgogICAgICAgICByZXR1cm4gU3RhY2tGcmFtZUV2
YWxDb2RlOwotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkZ1bmN0aW9uOgorICAgIGNh
c2UgU3RhY2tWaXNpdG9yOjpGcmFtZTo6RnVuY3Rpb246CiAgICAgICAgIHJldHVybiBTdGFja0Zy
YW1lRnVuY3Rpb25Db2RlOwotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJhbWU6Okdsb2JhbDoK
KyAgICBjYXNlIFN0YWNrVmlzaXRvcjo6RnJhbWU6Okdsb2JhbDoKICAgICAgICAgcmV0dXJuIFN0
YWNrRnJhbWVHbG9iYWxDb2RlOwotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJhbWU6Ok5hdGl2
ZToKKyAgICBjYXNlIFN0YWNrVmlzaXRvcjo6RnJhbWU6Ok5hdGl2ZToKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBTdGFja0ZyYW1lTmF0aXZlQ29kZTsKICAg
ICB9CkBAIC01MDYsMzQgKzUwNiwzNCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFN0
YWNrSXRlcmF0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrSXRlcmF0b3ImIGl0ZXIpCisgICAg
U3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBWTSYgdm0gPSBtX3ZtOwogICAgICAgICBpZiAobV9yZW1haW5pbmdDYXBh
Y2l0eUZvckZyYW1lQ2FwdHVyZSkgewotICAgICAgICAgICAgaWYgKGl0ZXItPmlzSlNGcmFtZSgp
KSB7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpdGVyLT5jb2RlQmxv
Y2soKTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0pTRnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CiAgICAg
ICAgICAgICAgICAgU3RhY2tGcmFtZSBzID0gewotICAgICAgICAgICAgICAgICAgICBTdHJvbmc8
SlNPYmplY3Q+KHZtLCBpdGVyLT5jYWxsZWUoKSksCi0gICAgICAgICAgICAgICAgICAgIGdldFN0
YWNrRnJhbWVDb2RlVHlwZShpdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgU3Ryb25nPEpTT2Jq
ZWN0Pih2bSwgdmlzaXRvci0+Y2FsbGVlKCkpLAorICAgICAgICAgICAgICAgICAgICBnZXRTdGFj
a0ZyYW1lQ29kZVR5cGUodmlzaXRvciksCiAgICAgICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVj
dXRhYmxlQmFzZT4odm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAogICAgICAgICAg
ICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KHZtLCBjb2RlQmxvY2stPnVubGlu
a2VkQ29kZUJsb2NrKCkpLAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPnNvdXJjZSgp
LAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5l
Tm8oKSwKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5maXJzdExpbmVDb2x1bW5PZmZz
ZXQoKSwKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgaXRlci0+Ynl0ZWNvZGVPZmZzZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgaXRlci0+c291cmNlVVJMKCkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci0+Ynl0
ZWNvZGVPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci0+c291cmNlVVJMKCkK
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQocyk7
CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUgcyA9IHsg
U3Ryb25nPEpTT2JqZWN0Pih2bSwgaXRlci0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1lTmF0aXZlQ29k
ZSwgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KCks
IDAsIDAsIDAsIDAsIDAsIFN0cmluZygpfTsKKyAgICAgICAgICAgICAgICBTdGFja0ZyYW1lIHMg
PSB7IFN0cm9uZzxKU09iamVjdD4odm0sIHZpc2l0b3ItPmNhbGxlZSgpKSwgU3RhY2tGcmFtZU5h
dGl2ZUNvZGUsIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4oKSwgU3Ryb25nPFVubGlua2VkQ29kZUJs
b2NrPigpLCAwLCAwLCAwLCAwLCAwLCBTdHJpbmcoKX07CiAgICAgICAgICAgICAgICAgbV9yZXN1
bHRzLmFwcGVuZChzKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIG1fcmVtYWlu
aW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUtLTsKLSAgICAgICAgICAgIHJldHVybiBTdGFja0l0
ZXJhdG9yOjpDb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjpEb25lOworICAg
ICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU3
NywyMyArNTc3LDIzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgU3RhY2tJdGVyYXRv
cjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBTdGFja1Zpc2l0
b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAg
ICAgIFZNJiB2bSA9IG1fY2FsbEZyYW1lLT52bSgpOwotICAgICAgICBtX2NhbGxGcmFtZSA9IGl0
ZXItPmNhbGxGcmFtZSgpOwotICAgICAgICBtX2NvZGVCbG9jayA9IGl0ZXItPmNvZGVCbG9jaygp
OwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGl0ZXItPmJ5dGVjb2RlT2Zmc2V0
KCk7CisgICAgICAgIG1fY2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CisgICAgICAg
IG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gdmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQoKTsKIAogICAgICAgICBpZiAo
bV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgIGlmICghdW53aW5kQ2Fs
bEZyYW1lKGl0ZXIsIG1fZXhjZXB0aW9uVmFsdWUpKSB7CisgICAgICAgIGlmICghdW53aW5kQ2Fs
bEZyYW1lKHZpc2l0b3IsIG1fZXhjZXB0aW9uVmFsdWUpKSB7CiAgICAgICAgICAgICBpZiAoTGVn
YWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChtX2NhbGxGcmFtZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6RG9uZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkRvbmU7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIFN0YWNr
SXRlcmF0b3I6OkRvbmU7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKLSAg
ICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6Q29udGludWU7CisgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6Q29udGludWU7CiB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTU1MDc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmVnaXN0ZXI7
CiAgICAgY2xhc3MgSlNTY29wZTsKICAgICBjbGFzcyBTYW1wbGluZ1Rvb2w7Ci0gICAgY2xhc3Mg
U3RhY2tJdGVyYXRvcjsKICAgICBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZTsKICAgICBzdHJ1Y3Qg
SGFuZGxlckluZm87CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAkocmV2aXNp
b24gMTU1MDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKLSNpbmNs
dWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgotI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1TdGFja0l0ZXJhdG9yOjpTdGFja0l0
ZXJhdG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSkKLSAgICA6IG1fc3RhcnRGcmFtZShzdGFydEZy
YW1lKQotewotICAgIHJlc2V0SXRlcmF0b3IoKTsKLX0KLQotdm9pZCBTdGFja0l0ZXJhdG9yOjpn
b3RvTmV4dEZyYW1lKCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAobV9mcmFtZS5p
c0lubGluZWRGcmFtZSgpKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgQ29kZU9yaWdpbiogY2Fs
bGVyQ29kZU9yaWdpbiA9ICZpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKLSAgICAgICAgcmVhZElu
bGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJDb2RlT3JpZ2luKTsKLQotICAg
IH0gZWxzZQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICByZWFkRnJhbWUobV9m
cmFtZS5jYWxsZXJGcmFtZSgpKTsKLX0KLQotdm9pZCBTdGFja0l0ZXJhdG9yOjpyZXNldEl0ZXJh
dG9yKCkKLXsKLSAgICBtX2ZyYW1lLm1faW5kZXggPSAwOwotICAgIHJlYWRGcmFtZShtX3N0YXJ0
RnJhbWUpOwotfQotCi12b2lkIFN0YWNrSXRlcmF0b3I6OnJlYWRGcmFtZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWco
KSk7Ci0gICAgaWYgKCFjYWxsRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZS5zZXRUb0VuZCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgIUVOQUJMRShERkdfSklUKQotICAgIHJlYWRO
b25JbmxpbmVkRnJhbWUoY2FsbEZyYW1lKTsKLQotI2Vsc2UgLy8gIUVOQUJMRShERkdfSklUKQot
ICAgIC8vIElmIHRoZSBmcmFtZSBkb2Vzbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVuIGl0J3Mg
bm90IGEgREZHIGZyYW1lLgotICAgIC8vIEhlbmNlLCB3ZSdyZSBub3QgYXQgYW4gaW5saW5lZCBm
cmFtZS4KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgaWYgKCFjb2RlQmxvY2spIHsKLSAgICAgICAgcmVhZE5vbklubGluZWRGcmFtZShjYWxs
RnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGNvZGUgYmxv
Y2sgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBvcmlnaW5zLCB0aGVuIHRoZXJlJ3Mgbm8KLSAgICAv
LyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBhbiBpbmxpbmVkIGZyYW1lLgotICAgIGlm
ICghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKSB7Ci0gICAgICAgIHJlYWROb25JbmxpbmVk
RnJhbWUoY2FsbEZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IGluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpOwotICAgIGlmICghY29kZUJs
b2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAvLyBTZWUgYXNzZXJ0aW9u
IGFib3ZlLiBJbiByZWxlYXNlIGJ1aWxkcywgd2UgdHJ5IHRvIHByb3RlY3Qgb3Vyc2VsdmVzCi0g
ICAgICAgIC8vIGZyb20gY3Jhc2hpbmcgZXZlbiB0aG91Z2ggc3RhY2sgd2Fsa2luZyB3aWxsIGJl
IGdvb2ZlZCB1cC4KLSAgICAgICAgbV9mcmFtZS5zZXRUb0VuZCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZUJsb2NrLT5jb2RlT3Jp
Z2luKGluZGV4KTsKLSAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAg
ICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2FsbEZyYW1lLCAmY29kZU9yaWdpbik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICByZWFkSW5saW5lZEZyYW1lKGNhbGxGcmFtZSwgJmNvZGVP
cmlnaW4pOwotI2VuZGlmIC8vICFFTkFCTEUoREZHX0pJVCkKLX0KLQotdm9pZCBTdGFja0l0ZXJh
dG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2lu
KiBjb2RlT3JpZ2luKQotewotICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7Ci0g
ICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBt
X2ZyYW1lLm1fY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKLSAgICBtX2ZyYW1lLm1fc2Nv
cGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gIW1fZnJh
bWUuY29kZUJsb2NrKCkgPyAwCi0gICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgKLSAgICAgICAgOiBjYWxsRnJhbWUtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCgpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUg
PSAwOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyB1bnNpZ25lZCBp
bmxpbmVkRnJhbWVPZmZzZXQoQ29kZU9yaWdpbiogY29kZU9yaWdpbikKLXsKLSAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsK
LSAgICB1bnNpZ25lZCBmcmFtZU9mZnNldCA9IGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgOiAwOwotICAgIHJldHVybiBmcmFtZU9mZnNldDsKLX0KLQotdm9p
ZCBTdGFja0l0ZXJhdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlT3JpZ2luKiBjb2RlT3JpZ2luKQotewotICAgIEFTU0VSVChjb2RlT3JpZ2luKTsKLSAgICBB
U1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7Ci0KLSAgICB1bnNpZ25l
ZCBmcmFtZU9mZnNldCA9IGlubGluZWRGcmFtZU9mZnNldChjb2RlT3JpZ2luKTsKLSAgICBib29s
IGlzSW5saW5lZCA9ICEhZnJhbWVPZmZzZXQ7Ci0gICAgaWYgKGlzSW5saW5lZCkgewotICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNh
bGxGcmFtZTsKLQotICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwotICAg
ICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwotICAgICAg
ICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29k
ZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7Ci0KLSAgICAgICAgSlNGdW5jdGlv
biogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUuZ2V0KCk7Ci0gICAgICAgIGlmIChj
YWxsZWUpIHsKLSAgICAgICAgICAgIG1fZnJhbWUubV9zY29wZSA9IGNhbGxlZS0+c2NvcGUoKTsK
LSAgICAgICAgICAgIG1fZnJhbWUubV9jYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBDYWxsRnJhbWUqIGlubGluZWRGcmFtZSA9IGNhbGxGcmFtZSArIGZyYW1l
T2Zmc2V0OwotICAgICAgICAgICAgbV9mcmFtZS5tX3Njb3BlID0gaW5saW5lZEZyYW1lLT5zY29w
ZSgpOwotICAgICAgICAgICAgbV9mcmFtZS5tX2NhbGxlZSA9IGlubGluZWRGcmFtZS0+Y2FsbGVl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKG1fZnJhbWUuc2NvcGUoKSk7Ci0gICAgICAg
IEFTU0VSVChtX2ZyYW1lLmNhbGxlZSgpKTsKLQotICAgICAgICAvLyBUaGUgY2FsbGVyRnJhbWUg
anVzdCBuZWVkcyB0byBiZSBub24tbnVsbCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICAgIC8v
IGhhdmVuJ3QgcmVhY2hlZCB0aGUgbGFzdCBmcmFtZSB5ZXQuIFNldHRpbmcgaXQgdG8gdGhlIHJv
b3QKLSAgICAgICAgLy8gZnJhbWUgKGkuZS4gdGhlIGNhbGxGcmFtZSB0aGF0IHRoaXMgaW5saW5l
ZCBmcmFtZSBpcyBjYWxsZWQgZnJvbSkKLSAgICAgICAgLy8gd291bGQgd29yayBqdXN0IGZpbmUu
Ci0gICAgICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2FsbEZyYW1lLCBjb2RlT3Jp
Z2luKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotU3RhY2tJdGVyYXRvcjo6RnJh
bWU6OkNvZGVUeXBlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjb2RlVHlwZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpc0pTRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkZyYW1l
OjpOYXRpdmU7Ci0KLSAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5jb2RlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBFdmFsQ29kZToKLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpFdmFs
OwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6
RnJhbWU6OkZ1bmN0aW9uOwotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAgICAgcmV0dXJuIFN0
YWNrSXRlcmF0b3I6OkZyYW1lOjpHbG9iYWw7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpHbG9iYWw7Ci19
Ci0KLVN0cmluZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKCkKLXsKLSAgICBT
dHJpbmcgdHJhY2VMaW5lOwotICAgIEpTT2JqZWN0KiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKTsK
LQotICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgewotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJh
bWU6OkV2YWw6Ci0gICAgICAgIHRyYWNlTGluZSA9ICJldmFsIGNvZGUiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpOYXRpdmU6Ci0gICAgICAgIGlmIChj
YWxsZWUpCi0gICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
Y2FsbEZyYW1lKCksIGNhbGxlZSkuaW1wbCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0
YWNrSXRlcmF0b3I6OkZyYW1lOjpGdW5jdGlvbjoKLSAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2Fs
Y3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLCBjYWxsZWUpLmltcGwoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6R2xvYmFsOgotICAgICAgICB0
cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Ci19Ci0K
LVN0cmluZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6c291cmNlVVJMKCkKLXsKLSAgICBTdHJpbmcg
dHJhY2VMaW5lOwotCi0gICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBTdGFja0l0
ZXJhdG9yOjpGcmFtZTo6RXZhbDoKLSAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpGdW5j
dGlvbjoKLSAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpHbG9iYWw6IHsKLSAgICAgICAg
U3RyaW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNl
VVJMKCk7Ci0gICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRy
YWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpOYXRpdmU6Ci0gICAgICAgIHRyYWNlTGluZSA9ICJb
bmF0aXZlIGNvZGVdIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0cmFjZUxp
bmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOwotfQotCi1TdHJpbmcgU3Rh
Y2tJdGVyYXRvcjo6RnJhbWU6OnRvU3RyaW5nKCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHRyYWNl
QnVpbGQ7Ci0gICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IHRoaXMtPmZ1bmN0aW9uTmFtZSgpOwot
ICAgIFN0cmluZyBzb3VyY2VVUkwgPSB0aGlzLT5zb3VyY2VVUkwoKTsKLSAgICB0cmFjZUJ1aWxk
LmFwcGVuZChmdW5jdGlvbk5hbWUpOwotICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkgewot
ICAgICAgICBpZiAoIWZ1bmN0aW9uTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0cmFjZUJ1
aWxkLmFwcGVuZCgnQCcpOwotICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZChzb3VyY2VVUkwpOwot
ICAgICAgICBpZiAoaXNKU0ZyYW1lKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSAw
OwotICAgICAgICAgICAgdW5zaWduZWQgY29sdW1uID0gMDsKLSAgICAgICAgICAgIGNvbXB1dGVM
aW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVu
ZCgnOicpOwotICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmROdW1iZXIobGluZSk7Ci0gICAg
ICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOwotICAgICAgICAgICAgdHJhY2VCdWlsZC5h
cHBlbmROdW1iZXIoY29sdW1uKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJhY2VC
dWlsZC50b1N0cmluZygpLmltcGwoKTsKLX0KLQotQXJndW1lbnRzKiBTdGFja0l0ZXJhdG9yOjpG
cmFtZTo6YXJndW1lbnRzKCkKLXsKLSAgICBBU1NFUlQobV9jYWxsRnJhbWUpOwotICAgIENhbGxG
cmFtZSogcGh5c2ljYWxGcmFtZSA9IG1fY2FsbEZyYW1lOwotICAgIFZNJiB2bSA9IHBoeXNpY2Fs
RnJhbWUtPnZtKCk7Ci0gICAgQXJndW1lbnRzKiBhcmd1bWVudHM7Ci0jaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgaWYgKGlzSW5saW5lZEZyYW1lKCkpIHsKLSAgICAgICAgQVNTRVJUKG1faW5saW5l
Q2FsbEZyYW1lKTsKLSAgICAgICAgYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUodm0sIHBo
eXNpY2FsRnJhbWUsIG1faW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgYXJndW1lbnRzLT50ZWFy
T2ZmKHBoeXNpY2FsRnJhbWUsIG1faW5saW5lQ2FsbEZyYW1lKTsKLSAgICB9IGVsc2UgCi0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBwaHlz
aWNhbEZyYW1lKTsKLSAgICAgICAgYXJndW1lbnRzLT50ZWFyT2ZmKHBoeXNpY2FsRnJhbWUpOwot
ICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnRzOwotfQotCi12b2lkIFN0YWNrSXRlcmF0b3I6OkZy
YW1lOjpjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
bikKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAg
IGlmICghY29kZUJsb2NrKSB7Ci0gICAgICAgIGxpbmUgPSAwOwotICAgICAgICBjb2x1bW4gPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGRpdm90ID0gMDsKLSAgICBpbnQg
dW51c2VkU3RhcnRPZmZzZXQgPSAwOwotICAgIGludCB1bnVzZWRFbmRPZmZzZXQgPSAwOwotICAg
IHVuc2lnbmVkIGRpdm90TGluZSA9IDA7Ci0gICAgdW5zaWduZWQgZGl2b3RDb2x1bW4gPSAwOwot
ICAgIHJldHJpZXZlRXhwcmVzc2lvbkluZm8oZGl2b3QsIHVudXNlZFN0YXJ0T2Zmc2V0LCB1bnVz
ZWRFbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RDb2x1bW4pOwotCi0gICAgbGluZSA9IGRpdm90
TGluZSArIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmxpbmVObygpOwotICAgIGNvbHVt
biA9IGRpdm90Q29sdW1uICsgKGRpdm90TGluZSA/IDEgOiBjb2RlQmxvY2stPmZpcnN0TGluZUNv
bHVtbk9mZnNldCgpKTsKLX0KLQotdm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6cmV0cmlldmVF
eHByZXNzaW9uSW5mbyhpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNl
dCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pCi17Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBjb2RlQmxvY2stPnVubGlua2VkQ29k
ZUJsb2NrKCktPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KCksIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIGRp
dm90ICs9IGNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7Ci19Ci0KLXZvaWQgU3RhY2tJdGVyYXRv
cjo6RnJhbWU6OnNldFRvRW5kKCkKLXsKLSAgICBtX2NhbGxGcmFtZSA9IDA7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwotI2VuZGlmCi19Ci0KLSNpZm5k
ZWYgTkRFQlVHCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBqaXRUeXBlTmFtZShKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUpCi17Ci0gICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgY2FzZSBKSVRDb2Rl
OjpOb25lOiByZXR1cm4gIk5vbmUiOwotICAgIGNhc2UgSklUQ29kZTo6SG9zdENhbGxUaHVuazog
cmV0dXJuICJIb3N0Q2FsbFRodW5rIjsKLSAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1
bms6IHJldHVybiAiSW50ZXJwcmV0ZXJUaHVuayI7Ci0gICAgY2FzZSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVDogcmV0dXJuICJCYXNlbGluZUpJVCI7Ci0gICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6IHJl
dHVybiAiREZHSklUIjsKLSAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogcmV0dXJuICJGVExKSVQi
OwotICAgIH0KLSAgICByZXR1cm4gIjx1bmtub3duPiI7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50
SW5kZW50cyhpbnQgbGV2ZWxzKQotewotICAgIHdoaWxlIChsZXZlbHMtLSkKLSAgICAgICAgZGF0
YUxvZ0ZTdHJpbmcoIiAgICIpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludGlmKGludCBpbmRlbnRM
ZXZlbHMsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnTGlzdDsK
LSAgICB2YV9zdGFydChhcmdMaXN0LCBmb3JtYXQpOwotCi0gICAgaWYgKGluZGVudExldmVscykK
LSAgICAgICAgcHJpbnRJbmRlbnRzKGluZGVudExldmVscyk7Ci0KLSNpZiBDT01QSUxFUihDTEFO
RykgfHwgKENPTVBJTEVSKEdDQykgJiYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgNiwgMCkpCi0j
cHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUiCi0jZW5kaWYKLQotICAgIFdURjo6ZGF0YUxvZ0ZW
KGZvcm1hdCwgYXJnTGlzdCk7Ci0KLSNpZiBDT01QSUxFUihDTEFORykgfHwgKENPTVBJTEVSKEdD
QykgJiYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgNiwgMCkpCi0jcHJhZ21hIEdDQyBkaWFnbm9z
dGljIHBvcAotI2VuZGlmCi0KLSAgICB2YV9lbmQoYXJnTGlzdCk7Ci19Ci0KLXZvaWQgU3RhY2tJ
dGVyYXRvcjo6RnJhbWU6OnByaW50KGludCBpbmRlbnRMZXZlbCkKLXsKLSAgICBpbnQgaSA9IGlu
ZGVudExldmVsOwotCi0gICAgaWYgKCF0aGlzLT5jYWxsRnJhbWUoKSkgewotICAgICAgICBwcmlu
dGlmKGksICJmcmFtZSAweDBcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBwcmludGlmKGksICJm
cmFtZSAlcCB7XG4iLCB0aGlzLT5jYWxsRnJhbWUoKSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IG1fY2FsbEZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5j
YWxsZXJGcmFtZSgpOwotICAgIHZvaWQqIHJldHVyblBDID0gY2FsbEZyYW1lLT5oYXNSZXR1cm5Q
QygpID8gY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCkgOiAwOwotCi0gICAgcHJpbnRpZihp
LCAiICAgbmFtZSAnJXMnXG4iLCBmdW5jdGlvbk5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBw
cmludGlmKGksICIgICBzb3VyY2VVUkwgJyVzJ1xuIiwgc291cmNlVVJMKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcHJpbnRpZihpLCAiICAgaG9zdEZsYWcgJWRcbiIsIGNhbGxlckZyYW1lLT5oYXNI
b3N0Q2FsbEZyYW1lRmxhZygpKTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHByaW50aWYo
aSwgIiAgIGlzSW5saW5lZEZyYW1lICVkXG4iLCBpc0lubGluZWRGcmFtZSgpKTsKLSAgICBpZiAo
aXNJbmxpbmVkRnJhbWUoKSkKLSAgICAgICAgcHJpbnRpZihpLCAiICAgSW5saW5lQ2FsbEZyYW1l
ICVwXG4iLCBtX2lubGluZUNhbGxGcmFtZSk7Ci0jZW5kaWYKLQotICAgIHByaW50aWYoaSwgIiAg
IGNhbGxlZSAlcFxuIiwgY2FsbGVlKCkpOwotICAgIHByaW50aWYoaSwgIiAgIHJldHVyblBDICVw
XG4iLCByZXR1cm5QQyk7Ci0gICAgcHJpbnRpZihpLCAiICAgY2FsbGVyRnJhbWUgJXBcbiIsIGNh
bGxlckZyYW1lLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLSAgICB1bnNpZ25lZCBsb2Nh
dGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmxvY2F0aW9uQXNSYXdCaXRzKCk7Ci0gICAgcHJpbnRp
ZihpLCAiICAgcmF3TG9jYXRpb25CaXRzICV1IDB4JXhcbiIsIGxvY2F0aW9uUmF3Qml0cywgbG9j
YXRpb25SYXdCaXRzKTsKLSAgICBwcmludGlmKGksICIgICBjb2RlQmxvY2sgJXBcbiIsIGNvZGVC
bG9jayk7Ci0gICAgaWYgKGNvZGVCbG9jaykgewotICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+aGFz
TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKLSAgICAg
ICAgICAgIHByaW50aWYoaSwgIiAgICAgIGJ5dGVjb2RlT2Zmc2V0ICV1ICVwIC8gJXp1XG4iLCBi
eXRlY29kZU9mZnNldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYnl0ZWNvZGVPZmZzZXQpLCBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb2RlT3JpZ2luSW5kZXggPSBj
YWxsRnJhbWUtPmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKTsKLSAgICAgICAgICAgIHByaW50
aWYoaSwgIiAgICAgIGNvZGVPcmlnaW5JZGV4ICV1ICVwIC8gJXp1XG4iLCBjb2RlT3JpZ2luSW5k
ZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvZGVPcmlnaW5JbmRleCksIGNvZGVCbG9jay0+
Y29kZU9yaWdpbnMoKS5zaXplKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgdW5zaWdu
ZWQgbGluZSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNvbHVtbiA9IDA7Ci0gICAgICAgIGNvbXB1
dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIHByaW50aWYoaSwgIiAgICAg
IGxpbmUgJWRcbiIsIGxpbmUpOwotICAgICAgICBwcmludGlmKGksICIgICAgICBjb2x1bW4gJWRc
biIsIGNvbHVtbik7Ci0gICAgICAgIHByaW50aWYoaSwgIiAgICAgIGppdFR5cGUgJWQgPCVzPiBp
c09wdGltaXppbmdKSVQgJWRcbiIsIGppdFR5cGUsIGppdFR5cGVOYW1lKGppdFR5cGUpLCBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSkpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAg
ICAgICBwcmludGlmKGksICIgICAgICBoYXNDb2RlT3JpZ2lucyAlZFxuIiwgY29kZUJsb2NrLT5o
YXNDb2RlT3JpZ2lucygpKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMo
KSkgewotICAgICAgICAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LmdldCgpOwotICAgICAgICAgICAgcHJpbnRpZihpLCAiICAgICAgICAgaml0Q29kZSAlcCBzdGFy
dCAlcCBlbmQgJXBcbiIsIGppdENvZGUsIGppdENvZGUtPnN0YXJ0KCksIGppdENvZGUtPmVuZCgp
KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIHByaW50aWYoaSwgIn1cbiIpOwotfQot
Ci0jZW5kaWYgLy8gTkRFQlVHCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jaWZuZGVmIE5ERUJV
RwotdXNpbmcgSlNDOjpTdGFja0l0ZXJhdG9yOwotCi0vLyBGb3IgZGVidWdnaW5nIHVzZQotdm9p
ZCBkZWJ1Z1ByaW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZyYW1lKik7Ci12b2lkIGRlYnVnUHJpbnRT
dGFjayhKU0M6OkNhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKTsKLQotY2xhc3MgRGVidWdQcmludEZy
YW1lRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY3Rpb24gewotICAgICAgICBQcmludE9u
ZSwKLSAgICAgICAgUHJpbnRBbGwKLSAgICB9OwotCi0gICAgRGVidWdQcmludEZyYW1lRnVuY3Rv
cihBY3Rpb24gYWN0aW9uKQotICAgICAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAgICB7Ci0gICAg
fQotCi0gICAgU3RhY2tJdGVyYXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYg
aXRlcikKLSAgICB7Ci0gICAgICAgIGl0ZXItPnByaW50KDIpOwotICAgICAgICByZXR1cm4gbV9h
Y3Rpb24gPT0gUHJpbnRBbGwgPyBTdGFja0l0ZXJhdG9yOjpDb250aW51ZSA6IFN0YWNrSXRlcmF0
b3I6OkRvbmU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFjdGlvbiBtX2FjdGlvbjsKLX07Ci0K
LXZvaWQgZGVidWdQcmludENhbGxGcmFtZShKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQotewot
ICAgIGlmICghY2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRGVidWdQcmludEZyYW1l
RnVuY3RvciBmdW5jdG9yKERlYnVnUHJpbnRGcmFtZUZ1bmN0b3I6OlByaW50T25lKTsKLSAgICBj
YWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci19Ci0KLXZvaWQgZGVidWdQcmludFN0YWNrKEpT
Qzo6Q2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCi17Ci0gICAgaWYgKCF0b3BDYWxsRnJhbWUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBEZWJ1Z1ByaW50RnJhbWVGdW5jdG9yIGZ1bmN0b3IoRGVidWdQ
cmludEZyYW1lRnVuY3Rvcjo6UHJpbnRBbGwpOwotICAgIHRvcENhbGxGcmFtZS0+aXRlcmF0ZShm
dW5jdG9yKTsKLX0KLQotI2VuZGlmIC8vICFOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAkocmV2aXNpb24gMTU1MDc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFN0YWNrSXRlcmF0b3JfaAotI2RlZmluZSBT
dGFja0l0ZXJhdG9yX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotc3RydWN0IENvZGVPcmlnaW47Ci1zdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
OwotCi1jbGFzcyBBcmd1bWVudHM7Ci1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBFeGVjU3RhdGU7
Ci1jbGFzcyBKU0Z1bmN0aW9uOwotY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBKU1Njb3BlOwotCi10
eXBlZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7Ci0KLWNsYXNzIFN0YWNrSXRlcmF0b3IgewotcHVi
bGljOgotICAgIGNsYXNzIEZyYW1lIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gQ29kZVR5
cGUgewotICAgICAgICAgICAgR2xvYmFsLAotICAgICAgICAgICAgRXZhbCwKLSAgICAgICAgICAg
IEZ1bmN0aW9uLAotICAgICAgICAgICAgTmF0aXZlCi0gICAgICAgIH07Ci0KLSAgICAgICAgc2l6
ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOyB9Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxlckZyYW1lOyB9Ci0gICAgICAgIEpTT2JqZWN0KiBjYWxsZWUoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxlZTsgfQotICAgICAgICBKU1Njb3BlKiBzY29wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NvcGU7IH0KLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUNhbGxGcmFtZTsgfQotI2VuZGlmCi0KLSAgICAgICAgYm9vbCBpc0pTRnJhbWUo
KSBjb25zdCB7IHJldHVybiAhIWNvZGVCbG9jaygpOyB9Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgICAgIGJvb2wgaXNJbmxpbmVkRnJhbWUoKSBjb25zdCB7IHJldHVybiAhIW1faW5saW5lQ2Fs
bEZyYW1lOyB9Ci0jZW5kaWYKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZnVu
Y3Rpb25OYW1lKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzb3VyY2VVUkwo
KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCk7Ci0KLSAgICAg
ICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
bik7Ci0KLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMoKTsKLSAgICAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZTsgfQotICAgIAotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludChpbnQgaW5kZW50
TGV2ZWwpOwotI2VuZGlmCi0KLSAgICBwcml2YXRlOgotICAgICAgICBGcmFtZSgpIHsgfQotICAg
ICAgICB+RnJhbWUoKSB7IH0KLQotICAgICAgICB2b2lkIHJldHJpZXZlRXhwcmVzc2lvbkluZm8o
aW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKLSAgICAgICAgdm9pZCBzZXRUb0VuZCgpOwotCi0gICAg
ICAgIHNpemVfdCBtX2luZGV4OwotICAgICAgICBzaXplX3QgbV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKLSAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwotICAgICAgICBKU09i
amVjdCogbV9jYWxsZWU7Ci0gICAgICAgIEpTU2NvcGUqIG1fc2NvcGU7Ci0gICAgICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7Ci0gICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7Ci0j
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxs
RnJhbWU7Ci0jZW5kaWYKLSAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLQotICAgICAg
ICBmcmllbmQgY2xhc3MgU3RhY2tJdGVyYXRvcjsKLSAgICB9OwotCi0gICAgZW51bSBTdGF0dXMg
ewotICAgICAgICBDb250aW51ZSA9IDAsCi0gICAgICAgIERvbmUgPSAxCi0gICAgfTsKLQotICAg
IC8vIFN0YWNrSXRlcmF0b3I6Oml0ZXJhdGUoKSBleHBlY3RzIGEgRnVuY3RvciB0aGF0IGltcGxl
bWVudHMgdGhlIGZvbGxvd2luZyBtZXRob2Q6Ci0gICAgLy8gICAgIFN0YXR1cyBvcGVyYXRvcigp
KFN0YWNrSXRlcmF0b3ImKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lk
IGl0ZXJhdGUoRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIHdoaWxlIChtX2ZyYW1l
LmNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAgICBTdGF0dXMgc3RhdHVzID0gZnVuY3RvcigqdGhp
cyk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IENvbnRpbnVlKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZ290b05leHRGcmFtZSgpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgRnJhbWUmIG9wZXJhdG9yKigpIHsgcmV0dXJuIG1fZnJhbWU7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIEZyYW1lKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gJm1fZnJhbWU7IH0KLQotcHJpdmF0
ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yKENhbGxGcmFtZSogc3RhcnRG
cmFtZSk7Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdvdG9OZXh0RnJhbWUoKTsKLSAg
ICB2b2lkIHJlc2V0SXRlcmF0b3IoKTsKLQotICAgIHZvaWQgcmVhZEZyYW1lKENhbGxGcmFtZSop
OwotICAgIHZvaWQgcmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqLCBDb2RlT3JpZ2luKiA9
IDApOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHZvaWQgcmVhZElubGluZWRGcmFtZShDYWxs
RnJhbWUqLCBDb2RlT3JpZ2luKik7Ci0jZW5kaWYKLQotICAgIENhbGxGcmFtZSogbV9zdGFydEZy
YW1lOwotICAgIEZyYW1lIG1fZnJhbWU7Ci0KLSAgICBmcmllbmQgY2xhc3MgRXhlY1N0YXRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBTdGFja0l0ZXJhdG9yX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAJKHJldmlzaW9uIDE1NTA3NSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOjE1NTA3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisKKyNpbmNs
dWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitTdGFja0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSkKKyAg
ICA6IG1fc3RhcnRGcmFtZShzdGFydEZyYW1lKQoreworICAgIHJlc2V0SXRlcmF0b3IoKTsKK30K
Kwordm9pZCBTdGFja0l0ZXJhdG9yOjpnb3RvTmV4dEZyYW1lKCkKK3sKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICBpZiAobV9mcmFtZS5pc0lubGluZWRGcmFtZSgpKSB7CisgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsK
KyAgICAgICAgQ29kZU9yaWdpbiogY2FsbGVyQ29kZU9yaWdpbiA9ICZpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlcjsKKyAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBj
YWxsZXJDb2RlT3JpZ2luKTsKKworICAgIH0gZWxzZQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKK30KKwordm9pZCBT
dGFja0l0ZXJhdG9yOjpyZXNldEl0ZXJhdG9yKCkKK3sKKyAgICBtX2ZyYW1lLm1faW5kZXggPSAw
OworICAgIHJlYWRGcmFtZShtX3N0YXJ0RnJhbWUpOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6
OnJlYWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7CisgICAgaWYgKCFjYWxsRnJhbWUpIHsKKyAgICAg
ICAgbV9mcmFtZS5zZXRUb0VuZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgIUVO
QUJMRShERkdfSklUKQorICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2FsbEZyYW1lKTsKKworI2Vs
c2UgLy8gIUVOQUJMRShERkdfSklUKQorICAgIC8vIElmIHRoZSBmcmFtZSBkb2Vzbid0IGhhdmUg
YSBjb2RlIGJsb2NrLCB0aGVuIGl0J3Mgbm90IGEgREZHIGZyYW1lLgorICAgIC8vIEhlbmNlLCB3
ZSdyZSBub3QgYXQgYW4gaW5saW5lZCBmcmFtZS4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgaWYgKCFjb2RlQmxvY2spIHsKKyAgICAgICAg
cmVhZE5vbklubGluZWRGcmFtZShjYWxsRnJhbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBvcmlnaW5z
LCB0aGVuIHRoZXJlJ3Mgbm8KKyAgICAvLyBpbmxpbmluZy4gSGVuY2UsIHdlJ3JlIG5vdCBhdCBh
biBpbmxpbmVkIGZyYW1lLgorICAgIGlmICghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKSB7
CisgICAgICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHVuc2lnbmVkIGluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29k
ZU9yaWdpbkluZGV4KCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihp
bmRleCkpOworICAgIGlmICghY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewor
ICAgICAgICAvLyBTZWUgYXNzZXJ0aW9uIGFib3ZlLiBJbiByZWxlYXNlIGJ1aWxkcywgd2UgdHJ5
IHRvIHByb3RlY3Qgb3Vyc2VsdmVzCisgICAgICAgIC8vIGZyb20gY3Jhc2hpbmcgZXZlbiB0aG91
Z2ggc3RhY2sgd2Fsa2luZyB3aWxsIGJlIGdvb2ZlZCB1cC4KKyAgICAgICAgbV9mcmFtZS5zZXRU
b0VuZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gY29kZUJsb2NrLT5jb2RlT3JpZ2luKGluZGV4KTsKKyAgICBpZiAoIWNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2FsbEZyYW1l
LCAmY29kZU9yaWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZWFkSW5saW5l
ZEZyYW1lKGNhbGxGcmFtZSwgJmNvZGVPcmlnaW4pOworI2VuZGlmIC8vICFFTkFCTEUoREZHX0pJ
VCkKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luKQoreworICAgIG1fZnJhbWUubV9j
YWxsRnJhbWUgPSBjYWxsRnJhbWU7CisgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpOworICAgIG1f
ZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9z
dENhbGxGcmFtZUZsYWcoKTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxs
ZWUoKTsKKyAgICBtX2ZyYW1lLm1fc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgbV9m
cmFtZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgbV9mcmFtZS5t
X2J5dGVjb2RlT2Zmc2V0ID0gIW1fZnJhbWUuY29kZUJsb2NrKCkgPyAwCisgICAgICAgIDogY29k
ZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgKKyAgICAgICAgOiBjYWxsRnJhbWUt
PmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1f
ZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSAwOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKK3N0YXRpYyB1bnNpZ25lZCBpbmxpbmVkRnJhbWVPZmZzZXQoQ29kZU9yaWdpbiogY29k
ZU9yaWdpbikKK3sKKyAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZTsKKyAgICB1bnNpZ25lZCBmcmFtZU9mZnNldCA9IGlubGlu
ZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOworICAgIHJldHVy
biBmcmFtZU9mZnNldDsKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpyZWFkSW5saW5lZEZyYW1l
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luKQoreworICAgIEFT
U0VSVChjb2RlT3JpZ2luKTsKKyAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFt
ZUZsYWcoKSk7CisKKyAgICB1bnNpZ25lZCBmcmFtZU9mZnNldCA9IGlubGluZWRGcmFtZU9mZnNl
dChjb2RlT3JpZ2luKTsKKyAgICBib29sIGlzSW5saW5lZCA9ICEhZnJhbWVPZmZzZXQ7CisgICAg
aWYgKGlzSW5saW5lZCkgeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsKKworICAgICAgICBtX2ZyYW1lLm1fY2Fs
bEZyYW1lID0gY2FsbEZyYW1lOworICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lOworICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIG1fZnJh
bWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7Cisg
ICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXg7CisKKyAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWUuZ2V0KCk7CisgICAgICAgIGlmIChjYWxsZWUpIHsKKyAgICAgICAgICAgIG1fZnJhbWUubV9z
Y29wZSA9IGNhbGxlZS0+c2NvcGUoKTsKKyAgICAgICAgICAgIG1fZnJhbWUubV9jYWxsZWUgPSBj
YWxsZWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDYWxsRnJhbWUqIGlubGluZWRG
cmFtZSA9IGNhbGxGcmFtZSArIGZyYW1lT2Zmc2V0OworICAgICAgICAgICAgbV9mcmFtZS5tX3Nj
b3BlID0gaW5saW5lZEZyYW1lLT5zY29wZSgpOworICAgICAgICAgICAgbV9mcmFtZS5tX2NhbGxl
ZSA9IGlubGluZWRGcmFtZS0+Y2FsbGVlKCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG1f
ZnJhbWUuc2NvcGUoKSk7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lLmNhbGxlZSgpKTsKKworICAg
ICAgICAvLyBUaGUgY2FsbGVyRnJhbWUganVzdCBuZWVkcyB0byBiZSBub24tbnVsbCB0byBpbmRp
Y2F0ZSB0aGF0IHdlCisgICAgICAgIC8vIGhhdmVuJ3QgcmVhY2hlZCB0aGUgbGFzdCBmcmFtZSB5
ZXQuIFNldHRpbmcgaXQgdG8gdGhlIHJvb3QKKyAgICAgICAgLy8gZnJhbWUgKGkuZS4gdGhlIGNh
bGxGcmFtZSB0aGF0IHRoaXMgaW5saW5lZCBmcmFtZSBpcyBjYWxsZWQgZnJvbSkKKyAgICAgICAg
Ly8gd291bGQgd29yayBqdXN0IGZpbmUuCisgICAgICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9
IGNhbGxGcmFtZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlYWROb25JbmxpbmVk
RnJhbWUoY2FsbEZyYW1lLCBjb2RlT3JpZ2luKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkNvZGVUeXBlIFN0YWNrSXRlcmF0b3I6OkZyYW1l
Ojpjb2RlVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpc0pTRnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpOYXRpdmU7CisKKyAgICBzd2l0Y2ggKGNvZGVCbG9j
aygpLT5jb2RlVHlwZSgpKSB7CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgcmV0dXJuIFN0
YWNrSXRlcmF0b3I6OkZyYW1lOjpFdmFsOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAg
ICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkZ1bmN0aW9uOworICAgIGNhc2UgR2xvYmFs
Q29kZToKKyAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpHbG9iYWw7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0YWNrSXRl
cmF0b3I6OkZyYW1lOjpHbG9iYWw7Cit9CisKK1N0cmluZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
ZnVuY3Rpb25OYW1lKCkKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIEpTT2JqZWN0KiBj
YWxsZWUgPSB0aGlzLT5jYWxsZWUoKTsKKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAg
IGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkV2YWw6CisgICAgICAgIHRyYWNlTGluZSA9ICJl
dmFsIGNvZGUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1l
OjpOYXRpdmU6CisgICAgICAgIGlmIChjYWxsZWUpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBn
ZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lKCksIGNhbGxlZSkuaW1wbCgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpGdW5jdGlvbjoKKyAg
ICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLCBj
YWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0l0ZXJhdG9yOjpG
cmFtZTo6R2xvYmFsOgorICAgICAgICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3Ry
aW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6c291
cmNlVVJMKCkKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworCisgICAgc3dpdGNoIChjb2RlVHlw
ZSgpKSB7CisgICAgY2FzZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6RXZhbDoKKyAgICBjYXNlIFN0
YWNrSXRlcmF0b3I6OkZyYW1lOjpGdW5jdGlvbjoKKyAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZy
YW1lOjpHbG9iYWw6IHsKKyAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlVVJMKCk7CisgICAgICAgIGlmICghc291cmNlVVJMLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpOYXRpdmU6
CisgICAgICAgIHRyYWNlTGluZSA9ICJbbmF0aXZlIGNvZGVdIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJh
Y2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnRvU3RyaW5nKCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHRyYWNlQnVpbGQ7CisgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9
IHRoaXMtPmZ1bmN0aW9uTmFtZSgpOworICAgIFN0cmluZyBzb3VyY2VVUkwgPSB0aGlzLT5zb3Vy
Y2VVUkwoKTsKKyAgICB0cmFjZUJ1aWxkLmFwcGVuZChmdW5jdGlvbk5hbWUpOworICAgIGlmICgh
c291cmNlVVJMLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWZ1bmN0aW9uTmFtZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnQCcpOworICAgICAgICB0cmFjZUJ1
aWxkLmFwcGVuZChzb3VyY2VVUkwpOworICAgICAgICBpZiAoaXNKU0ZyYW1lKCkpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxpbmUgPSAwOworICAgICAgICAgICAgdW5zaWduZWQgY29sdW1uID0g
MDsKKyAgICAgICAgICAgIGNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7CisgICAg
ICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOworICAgICAgICAgICAgdHJhY2VCdWlsZC5h
cHBlbmROdW1iZXIobGluZSk7CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOwor
ICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmROdW1iZXIoY29sdW1uKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsKK30KKworQXJn
dW1lbnRzKiBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6YXJndW1lbnRzKCkKK3sKKyAgICBBU1NFUlQo
bV9jYWxsRnJhbWUpOworICAgIENhbGxGcmFtZSogcGh5c2ljYWxGcmFtZSA9IG1fY2FsbEZyYW1l
OworICAgIFZNJiB2bSA9IHBoeXNpY2FsRnJhbWUtPnZtKCk7CisgICAgQXJndW1lbnRzKiBhcmd1
bWVudHM7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGlzSW5saW5lZEZyYW1lKCkpIHsK
KyAgICAgICAgQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgYXJndW1lbnRzID0g
QXJndW1lbnRzOjpjcmVhdGUodm0sIHBoeXNpY2FsRnJhbWUsIG1faW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgYXJndW1lbnRzLT50ZWFyT2ZmKHBoeXNpY2FsRnJhbWUsIG1faW5saW5lQ2FsbEZy
YW1lKTsKKyAgICB9IGVsc2UgCisjZW5kaWYKKyAgICB7CisgICAgICAgIGFyZ3VtZW50cyA9IEFy
Z3VtZW50czo6Y3JlYXRlKHZtLCBwaHlzaWNhbEZyYW1lKTsKKyAgICAgICAgYXJndW1lbnRzLT50
ZWFyT2ZmKHBoeXNpY2FsRnJhbWUpOworICAgIH0KKyAgICByZXR1cm4gYXJndW1lbnRzOworfQor
Cit2b2lkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHRoaXMtPmNvZGVCbG9jaygpOworICAgIGlmICghY29kZUJsb2NrKSB7CisgICAgICAgIGxpbmUg
PSAwOworICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aW50IGRpdm90ID0gMDsKKyAgICBpbnQgdW51c2VkU3RhcnRPZmZzZXQgPSAwOworICAgIGludCB1
bnVzZWRFbmRPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGRpdm90TGluZSA9IDA7CisgICAgdW5z
aWduZWQgZGl2b3RDb2x1bW4gPSAwOworICAgIHJldHJpZXZlRXhwcmVzc2lvbkluZm8oZGl2b3Qs
IHVudXNlZFN0YXJ0T2Zmc2V0LCB1bnVzZWRFbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RDb2x1
bW4pOworCisgICAgbGluZSA9IGRpdm90TGluZSArIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPmxpbmVObygpOworICAgIGNvbHVtbiA9IGRpdm90Q29sdW1uICsgKGRpdm90TGluZSA/IDEg
OiBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVtbk9mZnNldCgpKTsKK30KKwordm9pZCBTdGFja0l0
ZXJhdG9yOjpGcmFtZTo6cmV0cmlldmVFeHByZXNzaW9uSW5mbyhpbnQmIGRpdm90LCBpbnQmIHN0
YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1
bW4pCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAg
ICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KCksIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LCBsaW5lLCBjb2x1bW4pOworICAgIGRpdm90ICs9IGNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7
Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnNldFRvRW5kKCkKK3sKKyAgICBtX2Nh
bGxGcmFtZSA9IDA7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9pbmxpbmVDYWxsRnJhbWUg
PSAwOworI2VuZGlmCit9CisKKyNpZm5kZWYgTkRFQlVHCisKK3N0YXRpYyBjb25zdCBjaGFyKiBq
aXRUeXBlTmFtZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7CisgICAgc3dpdGNoIChqaXRU
eXBlKSB7CisgICAgY2FzZSBKSVRDb2RlOjpOb25lOiByZXR1cm4gIk5vbmUiOworICAgIGNhc2Ug
SklUQ29kZTo6SG9zdENhbGxUaHVuazogcmV0dXJuICJIb3N0Q2FsbFRodW5rIjsKKyAgICBjYXNl
IEpJVENvZGU6OkludGVycHJldGVyVGh1bms6IHJldHVybiAiSW50ZXJwcmV0ZXJUaHVuayI7Cisg
ICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDogcmV0dXJuICJCYXNlbGluZUpJVCI7CisgICAg
Y2FzZSBKSVRDb2RlOjpERkdKSVQ6IHJldHVybiAiREZHSklUIjsKKyAgICBjYXNlIEpJVENvZGU6
OkZUTEpJVDogcmV0dXJuICJGVExKSVQiOworICAgIH0KKyAgICByZXR1cm4gIjx1bmtub3duPiI7
Cit9CisKK3N0YXRpYyB2b2lkIHByaW50SW5kZW50cyhpbnQgbGV2ZWxzKQoreworICAgIHdoaWxl
IChsZXZlbHMtLSkKKyAgICAgICAgZGF0YUxvZ0ZTdHJpbmcoIiAgICIpOworfQorCitzdGF0aWMg
dm9pZCBwcmludGlmKGludCBpbmRlbnRMZXZlbHMsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQor
eworICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICB2YV9zdGFydChhcmdMaXN0LCBmb3JtYXQpOwor
CisgICAgaWYgKGluZGVudExldmVscykKKyAgICAgICAgcHJpbnRJbmRlbnRzKGluZGVudExldmVs
cyk7CisKKyNpZiBDT01QSUxFUihDTEFORykgfHwgKENPTVBJTEVSKEdDQykgJiYgR0NDX1ZFUlNJ
T05fQVRfTEVBU1QoNCwgNiwgMCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUiCisjZW5k
aWYKKworICAgIFdURjo6ZGF0YUxvZ0ZWKGZvcm1hdCwgYXJnTGlzdCk7CisKKyNpZiBDT01QSUxF
UihDTEFORykgfHwgKENPTVBJTEVSKEdDQykgJiYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgNiwg
MCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyAgICB2YV9lbmQoYXJn
TGlzdCk7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnByaW50KGludCBpbmRlbnRM
ZXZlbCkKK3sKKyAgICBpbnQgaSA9IGluZGVudExldmVsOworCisgICAgaWYgKCF0aGlzLT5jYWxs
RnJhbWUoKSkgeworICAgICAgICBwcmludGlmKGksICJmcmFtZSAweDBcbiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2soKTsKKyAgICBwcmludGlmKGksICJmcmFtZSAlcCB7XG4iLCB0aGlzLT5jYWxsRnJhbWUoKSk7
CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IG1fY2FsbEZyYW1lOworICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxsZXJGcmFtZSgpOworICAgIHZvaWQqIHJldHVyblBD
ID0gY2FsbEZyYW1lLT5oYXNSZXR1cm5QQygpID8gY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVl
KCkgOiAwOworCisgICAgcHJpbnRpZihpLCAiICAgbmFtZSAnJXMnXG4iLCBmdW5jdGlvbk5hbWUo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBwcmludGlmKGksICIgICBzb3VyY2VVUkwgJyVzJ1xuIiwg
c291cmNlVVJMKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpbnRpZihpLCAiICAgaG9zdEZsYWcg
JWRcbiIsIGNhbGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKKworI2lmIEVOQUJM
RShERkdfSklUKQorICAgIHByaW50aWYoaSwgIiAgIGlzSW5saW5lZEZyYW1lICVkXG4iLCBpc0lu
bGluZWRGcmFtZSgpKTsKKyAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKKyAgICAgICAgcHJpbnRp
ZihpLCAiICAgSW5saW5lQ2FsbEZyYW1lICVwXG4iLCBtX2lubGluZUNhbGxGcmFtZSk7CisjZW5k
aWYKKworICAgIHByaW50aWYoaSwgIiAgIGNhbGxlZSAlcFxuIiwgY2FsbGVlKCkpOworICAgIHBy
aW50aWYoaSwgIiAgIHJldHVyblBDICVwXG4iLCByZXR1cm5QQyk7CisgICAgcHJpbnRpZihpLCAi
ICAgY2FsbGVyRnJhbWUgJXBcbiIsIGNhbGxlckZyYW1lLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxh
ZygpKTsKKyAgICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmxvY2F0aW9u
QXNSYXdCaXRzKCk7CisgICAgcHJpbnRpZihpLCAiICAgcmF3TG9jYXRpb25CaXRzICV1IDB4JXhc
biIsIGxvY2F0aW9uUmF3Qml0cywgbG9jYXRpb25SYXdCaXRzKTsKKyAgICBwcmludGlmKGksICIg
ICBjb2RlQmxvY2sgJXBcbiIsIGNvZGVCbG9jayk7CisgICAgaWYgKGNvZGVCbG9jaykgeworICAg
ICAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsKKyAg
ICAgICAgaWYgKGNhbGxGcmFtZS0+aGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFz
Qnl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGJ5dGVjb2Rl
T2Zmc2V0ICV1ICVwIC8gJXp1XG4iLCBieXRlY29kZU9mZnNldCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYnl0ZWNvZGVPZmZzZXQpLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7
CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBjb2RlT3JpZ2luSW5kZXggPSBjYWxsRnJhbWUtPmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5k
ZXgoKTsKKyAgICAgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGNvZGVPcmlnaW5JZGV4ICV1ICVw
IC8gJXp1XG4iLCBjb2RlT3JpZ2luSW5kZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvZGVP
cmlnaW5JbmRleCksIGNvZGVCbG9jay0+Y29kZU9yaWdpbnMoKS5zaXplKCkpOworI2VuZGlmCisg
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbGluZSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNv
bHVtbiA9IDA7CisgICAgICAgIGNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7Cisg
ICAgICAgIHByaW50aWYoaSwgIiAgICAgIGxpbmUgJWRcbiIsIGxpbmUpOworICAgICAgICBwcmlu
dGlmKGksICIgICAgICBjb2x1bW4gJWRcbiIsIGNvbHVtbik7CisgICAgICAgIHByaW50aWYoaSwg
IiAgICAgIGppdFR5cGUgJWQgPCVzPiBpc09wdGltaXppbmdKSVQgJWRcbiIsIGppdFR5cGUsIGpp
dFR5cGVOYW1lKGppdFR5cGUpLCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSkpOwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBwcmludGlmKGksICIgICAgICBoYXNDb2RlT3Jp
Z2lucyAlZFxuIiwgY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKKyAgICAgICAgaWYgKGNv
ZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkgeworICAgICAgICAgICAgSklUQ29kZSogaml0Q29k
ZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAi
ICAgICAgICAgaml0Q29kZSAlcCBzdGFydCAlcCBlbmQgJXBcbiIsIGppdENvZGUsIGppdENvZGUt
PnN0YXJ0KCksIGppdENvZGUtPmVuZCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAg
IHByaW50aWYoaSwgIn1cbiIpOworfQorCisjZW5kaWYgLy8gTkRFQlVHCisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjaWZuZGVmIE5ERUJVRwordXNpbmcgSlNDOjpTdGFja0l0ZXJhdG9yOworCisv
LyBGb3IgZGVidWdnaW5nIHVzZQordm9pZCBkZWJ1Z1ByaW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZy
YW1lKik7Cit2b2lkIGRlYnVnUHJpbnRTdGFjayhKU0M6OkNhbGxGcmFtZSogdG9wQ2FsbEZyYW1l
KTsKKworY2xhc3MgRGVidWdQcmludEZyYW1lRnVuY3RvciB7CitwdWJsaWM6CisgICAgZW51bSBB
Y3Rpb24geworICAgICAgICBQcmludE9uZSwKKyAgICAgICAgUHJpbnRBbGwKKyAgICB9OworCisg
ICAgRGVidWdQcmludEZyYW1lRnVuY3RvcihBY3Rpb24gYWN0aW9uKQorICAgICAgICA6IG1fYWN0
aW9uKGFjdGlvbikKKyAgICB7CisgICAgfQorCisgICAgU3RhY2tJdGVyYXRvcjo6U3RhdHVzIG9w
ZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICB7CisgICAgICAgIGl0ZXItPnByaW50
KDIpOworICAgICAgICByZXR1cm4gbV9hY3Rpb24gPT0gUHJpbnRBbGwgPyBTdGFja0l0ZXJhdG9y
OjpDb250aW51ZSA6IFN0YWNrSXRlcmF0b3I6OkRvbmU7CisgICAgfQorCitwcml2YXRlOgorICAg
IEFjdGlvbiBtX2FjdGlvbjsKK307CisKK3ZvaWQgZGVidWdQcmludENhbGxGcmFtZShKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIGlmICghY2FsbEZyYW1lKQorICAgICAgICByZXR1
cm47CisgICAgRGVidWdQcmludEZyYW1lRnVuY3RvciBmdW5jdG9yKERlYnVnUHJpbnRGcmFtZUZ1
bmN0b3I6OlByaW50T25lKTsKKyAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Cit9CisK
K3ZvaWQgZGVidWdQcmludFN0YWNrKEpTQzo6Q2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCit7Cisg
ICAgaWYgKCF0b3BDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBEZWJ1Z1ByaW50RnJh
bWVGdW5jdG9yIGZ1bmN0b3IoRGVidWdQcmludEZyYW1lRnVuY3Rvcjo6UHJpbnRBbGwpOworICAg
IHRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKK30KKworI2VuZGlmIC8vICFOREVCVUcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLVN0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IoQ2FsbEZyYW1lKiBzdGFydEZy
YW1lKQotICAgIDogbV9zdGFydEZyYW1lKHN0YXJ0RnJhbWUpCitTdGFja1Zpc2l0b3I6OlN0YWNr
VmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUpCiB7Ci0gICAgcmVzZXRJdGVyYXRvcigpOwor
ICAgIG1fZnJhbWUubV9pbmRleCA9IDA7CisgICAgcmVhZEZyYW1lKHN0YXJ0RnJhbWUpOwogfQog
Ci12b2lkIFN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUoKQordm9pZCBTdGFja1Zpc2l0b3I6
OmdvdG9OZXh0RnJhbWUoKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChtX2ZyYW1l
LmlzSW5saW5lZEZyYW1lKCkpIHsKQEAgLTU0LDEzICs1NCw3IEBAIHZvaWQgU3RhY2tJdGVyYXRv
cjo6Z290b05leHRGcmFtZSgpCiAgICAgICAgIHJlYWRGcmFtZShtX2ZyYW1lLmNhbGxlckZyYW1l
KCkpOwogfQogCi12b2lkIFN0YWNrSXRlcmF0b3I6OnJlc2V0SXRlcmF0b3IoKQotewotICAgIG1f
ZnJhbWUubV9pbmRleCA9IDA7Ci0gICAgcmVhZEZyYW1lKG1fc3RhcnRGcmFtZSk7Ci19Ci0KLXZv
aWQgU3RhY2tJdGVyYXRvcjo6cmVhZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQordm9pZCBT
dGFja1Zpc2l0b3I6OnJlYWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBBU1NF
UlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7CiAgICAgaWYgKCFjYWxsRnJh
bWUpIHsKQEAgLTEwNiw3ICsxMDAsNyBAQCB2b2lkIFN0YWNrSXRlcmF0b3I6OnJlYWRGcmFtZShD
YWxsRnJhbWUqCiAjZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQogfQogCi12b2lkIFN0YWNrSXRl
cmF0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmln
aW4qIGNvZGVPcmlnaW4pCit2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaWdpbikKIHsKICAgICBtX2Zy
YW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsK
QEAgLTEzMCw3ICsxMjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW5saW5lZEZyYW1lT2Zmc2V0KENv
ZGVPCiAgICAgcmV0dXJuIGZyYW1lT2Zmc2V0OwogfQogCi12b2lkIFN0YWNrSXRlcmF0b3I6OnJl
YWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmln
aW4pCit2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaWdpbikKIHsKICAgICBBU1NFUlQoY29kZU9yaWdpbik7
CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOwpAQCAtMTcw
LDY3ICsxNjQsNjcgQEAgdm9pZCBTdGFja0l0ZXJhdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbAog
fQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi1TdGFja0l0ZXJhdG9yOjpGcmFtZTo6Q29k
ZVR5cGUgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNvZGVUeXBlKCkgY29uc3QKK1N0YWNrVmlzaXRv
cjo6RnJhbWU6OkNvZGVUeXBlIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNvZGVUeXBlKCkgY29uc3QK
IHsKICAgICBpZiAoIWlzSlNGcmFtZSgpKQotICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6
RnJhbWU6Ok5hdGl2ZTsKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RnJhbWU6Ok5hdGl2
ZTsKIAogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEV2
YWxDb2RlOgotICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkV2YWw7CisgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkZyYW1lOjpFdmFsOwogICAgIGNhc2UgRnVuY3Rpb25D
b2RlOgotICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkZ1bmN0aW9uOworICAg
ICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpGcmFtZTo6RnVuY3Rpb247CiAgICAgY2FzZSBHbG9i
YWxDb2RlOgotICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6RnJhbWU6Okdsb2JhbDsKKyAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RnJhbWU6Okdsb2JhbDsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6RnJh
bWU6Okdsb2JhbDsKKyAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpGcmFtZTo6R2xvYmFsOwogfQog
Ci1TdHJpbmcgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSgpCitTdHJpbmcgU3Rh
Y2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKCkKIHsKICAgICBTdHJpbmcgdHJhY2VMaW5l
OwogICAgIEpTT2JqZWN0KiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKTsKIAogICAgIHN3aXRjaCAo
Y29kZVR5cGUoKSkgewotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkV2YWw6CisgICAg
Y2FzZSBTdGFja1Zpc2l0b3I6OkZyYW1lOjpFdmFsOgogICAgICAgICB0cmFjZUxpbmUgPSAiZXZh
bCBjb2RlIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
TmF0aXZlOgorICAgIGNhc2UgU3RhY2tWaXNpdG9yOjpGcmFtZTo6TmF0aXZlOgogICAgICAgICBp
ZiAoY2FsbGVlKQogICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlO
YW1lKGNhbGxGcmFtZSgpLCBjYWxsZWUpLmltcGwoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6RnVuY3Rpb246CisgICAgY2FzZSBTdGFja1Zpc2l0b3I6
OkZyYW1lOjpGdW5jdGlvbjoKICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3Bs
YXlOYW1lKGNhbGxGcmFtZSgpLCBjYWxsZWUpLmltcGwoKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6R2xvYmFsOgorICAgIGNhc2UgU3RhY2tWaXNpdG9y
OjpGcmFtZTo6R2xvYmFsOgogICAgICAgICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5
U3RyaW5nKCkgOiB0cmFjZUxpbmU7CiB9CiAKLVN0cmluZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
c291cmNlVVJMKCkKK1N0cmluZyBTdGFja1Zpc2l0b3I6OkZyYW1lOjpzb3VyY2VVUkwoKQogewog
ICAgIFN0cmluZyB0cmFjZUxpbmU7CiAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKLSAgICBj
YXNlIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpFdmFsOgotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6
RnJhbWU6OkZ1bmN0aW9uOgotICAgIGNhc2UgU3RhY2tJdGVyYXRvcjo6RnJhbWU6Okdsb2JhbDog
eworICAgIGNhc2UgU3RhY2tWaXNpdG9yOjpGcmFtZTo6RXZhbDoKKyAgICBjYXNlIFN0YWNrVmlz
aXRvcjo6RnJhbWU6OkZ1bmN0aW9uOgorICAgIGNhc2UgU3RhY2tWaXNpdG9yOjpGcmFtZTo6R2xv
YmFsOiB7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBjb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCktPnNvdXJjZVVSTCgpOwogICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6TmF0aXZlOgorICAgIGNh
c2UgU3RhY2tWaXNpdG9yOjpGcmFtZTo6TmF0aXZlOgogICAgICAgICB0cmFjZUxpbmUgPSAiW25h
dGl2ZSBjb2RlXSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHJhY2VMaW5l
LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKIH0KIAotU3RyaW5nIFN0YWNr
SXRlcmF0b3I6OkZyYW1lOjp0b1N0cmluZygpCitTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6
dG9TdHJpbmcoKQogewogICAgIFN0cmluZ0J1aWxkZXIgdHJhY2VCdWlsZDsKICAgICBTdHJpbmcg
ZnVuY3Rpb25OYW1lID0gdGhpcy0+ZnVuY3Rpb25OYW1lKCk7CkBAIC0yNTMsNyArMjQ3LDcgQEAg
U3RyaW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjp0b1N0cmluZygpCiAgICAgcmV0dXJuIHRyYWNl
QnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLUFyZ3VtZW50cyogU3RhY2tJdGVyYXRvcjo6
RnJhbWU6OmFyZ3VtZW50cygpCitBcmd1bWVudHMqIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmFyZ3Vt
ZW50cygpCiB7CiAgICAgQVNTRVJUKG1fY2FsbEZyYW1lKTsKICAgICBDYWxsRnJhbWUqIHBoeXNp
Y2FsRnJhbWUgPSBtX2NhbGxGcmFtZTsKQEAgLTI3Myw3ICsyNjcsNyBAQCBBcmd1bWVudHMqIFN0
YWNrSXRlcmF0b3I6OkZyYW1lOjphcmd1bWVuCiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KIAot
dm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQm
IGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pCit2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNvbXB1
dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQogewogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CiAgICAgaWYgKCFjb2Rl
QmxvY2spIHsKQEAgLTI5MywxNCArMjg3LDE0IEBAIHZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6
OmNvbXB1dGVMaW5lQW4KICAgICBjb2x1bW4gPSBkaXZvdENvbHVtbiArIChkaXZvdExpbmUgPyAx
IDogY29kZUJsb2NrLT5maXJzdExpbmVDb2x1bW5PZmZzZXQoKSk7CiB9CiAKLXZvaWQgU3RhY2tJ
dGVyYXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29s
dW1uKQordm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGlu
dCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGlu
ZSwgdW5zaWduZWQmIGNvbHVtbikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMt
PmNvZGVCbG9jaygpOwogICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+ZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQoKSwgZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0gY29kZUJsb2Nr
LT5zb3VyY2VPZmZzZXQoKTsKIH0KIAotdm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6c2V0VG9F
bmQoKQordm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpzZXRUb0VuZCgpCiB7CiAgICAgbV9jYWxs
RnJhbWUgPSAwOwogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzUyLDcgKzM0Niw3IEBAIHN0YXRp
YyB2b2lkIHByaW50aWYoaW50IGluZGVudExldmVscywgY28KICAgICB2YV9lbmQoYXJnTGlzdCk7
CiB9CiAKLXZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnByaW50KGludCBpbmRlbnRMZXZlbCkK
K3ZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGVudExldmVsKQogewogICAg
IGludCBpID0gaW5kZW50TGV2ZWw7CiAKQEAgLTQxNyw3ICs0MTEsNyBAQCB2b2lkIFN0YWNrSXRl
cmF0b3I6OkZyYW1lOjpwcmludChpbnQgaW5kCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2lmbmRl
ZiBOREVCVUcKLXVzaW5nIEpTQzo6U3RhY2tJdGVyYXRvcjsKK3VzaW5nIEpTQzo6U3RhY2tWaXNp
dG9yOwogCiAvLyBGb3IgZGVidWdnaW5nIHVzZQogdm9pZCBkZWJ1Z1ByaW50Q2FsbEZyYW1lKEpT
Qzo6Q2FsbEZyYW1lKik7CkBAIC00MzUsMTAgKzQyOSwxMCBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KIAotICAgIFN0YWNrSXRlcmF0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrSXRlcmF0b3Im
IGl0ZXIpCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3Im
IHZpc2l0b3IpCiAgICAgewotICAgICAgICBpdGVyLT5wcmludCgyKTsKLSAgICAgICAgcmV0dXJu
IG1fYWN0aW9uID09IFByaW50QWxsID8gU3RhY2tJdGVyYXRvcjo6Q29udGludWUgOiBTdGFja0l0
ZXJhdG9yOjpEb25lOworICAgICAgICB2aXNpdG9yLT5wcmludCgyKTsKKyAgICAgICAgcmV0dXJu
IG1fYWN0aW9uID09IFByaW50QWxsID8gU3RhY2tWaXNpdG9yOjpDb250aW51ZSA6IFN0YWNrVmlz
aXRvcjo6RG9uZTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCShyZXZpc2lvbiAxNTUwNzUpCShm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6MTU1
MDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3RhY2tJdGVyYXRvcl9oCisjZGVmaW5l
IFN0YWNrSXRlcmF0b3JfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ29kZU9yaWdpbjsKK3N0cnVjdCBJbmxpbmVDYWxsRnJh
bWU7CisKK2NsYXNzIEFyZ3VtZW50czsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWNTdGF0
ZTsKK2NsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBKU09iamVjdDsKK2NsYXNzIEpTU2NvcGU7CisK
K3R5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKKworY2xhc3MgU3RhY2tJdGVyYXRvciB7Citw
dWJsaWM6CisgICAgY2xhc3MgRnJhbWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBDb2Rl
VHlwZSB7CisgICAgICAgICAgICBHbG9iYWwsCisgICAgICAgICAgICBFdmFsLAorICAgICAgICAg
ICAgRnVuY3Rpb24sCisgICAgICAgICAgICBOYXRpdmUKKyAgICAgICAgfTsKKworICAgICAgICBz
aXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgIHNpemVfdCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXM7IH0KKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGVyRnJhbWU7IH0KKyAgICAgICAgSlNPYmplY3QqIGNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CisgICAgICAgIEpTU2NvcGUqIHNjb3BlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY29wZTsgfQorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorI2lmIEVOQUJMRShERkdfSklU
KQorICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5saW5lQ2FsbEZyYW1lOyB9CisjZW5kaWYKKworICAgICAgICBib29sIGlzSlNGcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICEhY29kZUJsb2NrKCk7IH0KKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICAgICAgYm9vbCBpc0lubGluZWRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbmxpbmVD
YWxsRnJhbWU7IH0KKyNlbmRpZgorCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBm
dW5jdGlvbk5hbWUoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNvdXJjZVVS
TCgpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKTsKKworICAg
ICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29s
dW1uKTsKKworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cygpOworICAgICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CisgICAgCisjaWZu
ZGVmIE5ERUJVRworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50KGludCBpbmRl
bnRMZXZlbCk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lKCkgeyB9Cisg
ICAgICAgIH5GcmFtZSgpIHsgfQorCisgICAgICAgIHZvaWQgcmV0cmlldmVFeHByZXNzaW9uSW5m
byhpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQm
IGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOworICAgICAgICB2b2lkIHNldFRvRW5kKCk7CisKKyAg
ICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgICAgIHNpemVfdCBtX2FyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzOworICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbGVyRnJhbWU7CisgICAgICAgIEpT
T2JqZWN0KiBtX2NhbGxlZTsKKyAgICAgICAgSlNTY29wZSogbV9zY29wZTsKKyAgICAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBtX2lubGluZUNh
bGxGcmFtZTsKKyNlbmRpZgorICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbEZyYW1lOworCisgICAg
ICAgIGZyaWVuZCBjbGFzcyBTdGFja0l0ZXJhdG9yOworICAgIH07CisKKyAgICBlbnVtIFN0YXR1
cyB7CisgICAgICAgIENvbnRpbnVlID0gMCwKKyAgICAgICAgRG9uZSA9IDEKKyAgICB9OworCisg
ICAgLy8gU3RhY2tJdGVyYXRvcjo6aXRlcmF0ZSgpIGV4cGVjdHMgYSBGdW5jdG9yIHRoYXQgaW1w
bGVtZW50cyB0aGUgZm9sbG93aW5nIG1ldGhvZDoKKyAgICAvLyAgICAgU3RhdHVzIG9wZXJhdG9y
KCkoU3RhY2tJdGVyYXRvciYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgaXRlcmF0ZShGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgd2hpbGUgKG1fZnJh
bWUuY2FsbEZyYW1lKCkpIHsKKyAgICAgICAgICAgIFN0YXR1cyBzdGF0dXMgPSBmdW5jdG9yKCp0
aGlzKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQ29udGludWUpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvTmV4dEZyYW1lKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBGcmFtZSYgb3BlcmF0b3IqKCkgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgRnJhbWUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAmbV9mcmFtZTsgfQorCitwcml2
YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IoQ2FsbEZyYW1lKiBzdGFy
dEZyYW1lKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ290b05leHRGcmFtZSgpOwor
ICAgIHZvaWQgcmVzZXRJdGVyYXRvcigpOworCisgICAgdm9pZCByZWFkRnJhbWUoQ2FsbEZyYW1l
Kik7CisgICAgdm9pZCByZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSosIENvZGVPcmlnaW4q
ID0gMCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgdm9pZCByZWFkSW5saW5lZEZyYW1lKENh
bGxGcmFtZSosIENvZGVPcmlnaW4qKTsKKyNlbmRpZgorCisgICAgQ2FsbEZyYW1lKiBtX3N0YXJ0
RnJhbWU7CisgICAgRnJhbWUgbV9mcmFtZTsKKworICAgIGZyaWVuZCBjbGFzcyBFeGVjU3RhdGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFN0YWNrSXRlcmF0b3JfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU3RhY2tJdGVyYXRvcl9oCi0jZGVmaW5lIFN0YWNr
SXRlcmF0b3JfaAorI2lmbmRlZiBTdGFja1Zpc2l0b3JfaAorI2RlZmluZSBTdGFja1Zpc2l0b3Jf
aAogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQyLDcgKzQyLDcgQEAg
Y2xhc3MgSlNTY29wZTsKIAogdHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOwogCi1jbGFzcyBT
dGFja0l0ZXJhdG9yIHsKK2NsYXNzIFN0YWNrVmlzaXRvciB7CiBwdWJsaWM6CiAgICAgY2xhc3Mg
RnJhbWUgewogICAgIHB1YmxpYzoKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
ICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKIAotICAgICAgICBmcmllbmQgY2xhc3Mg
U3RhY2tJdGVyYXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFN0YWNrVmlzaXRvcjsKICAgICB9
OwogCiAgICAgZW51bSBTdGF0dXMgewpAQCAtMTEwLDE2ICsxMTAsMTggQEAgcHVibGljOgogICAg
ICAgICBEb25lID0gMQogICAgIH07CiAKLSAgICAvLyBTdGFja0l0ZXJhdG9yOjppdGVyYXRlKCkg
ZXhwZWN0cyBhIEZ1bmN0b3IgdGhhdCBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgbWV0aG9kOgot
ICAgIC8vICAgICBTdGF0dXMgb3BlcmF0b3IoKShTdGFja0l0ZXJhdG9yJik7CisgICAgLy8gU3Rh
Y2tWaXNpdG9yOjp2aXNpdCgpIGV4cGVjdHMgYSBGdW5jdG9yIHRoYXQgaW1wbGVtZW50cyB0aGUg
Zm9sbG93aW5nIG1ldGhvZDoKKyAgICAvLyAgICAgU3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNp
dG9yJik7CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3Rh
dGljIHZvaWQgdmlzaXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBGdW5jdG9yJiBmdW5jdG9yKQog
ICAgIHsKLSAgICAgICAgd2hpbGUgKG1fZnJhbWUuY2FsbEZyYW1lKCkpIHsKLSAgICAgICAgICAg
IFN0YXR1cyBzdGF0dXMgPSBmdW5jdG9yKCp0aGlzKTsKKyAgICAgICAgU3RhY2tWaXNpdG9yIHZp
c2l0b3Ioc3RhcnRGcmFtZSk7CisgICAgICAgIHdoaWxlICh2aXNpdG9yLT5jYWxsRnJhbWUoKSkg
eworICAgICAgICAgICAgU3RhdHVzIHN0YXR1cyA9IGZ1bmN0b3IodmlzaXRvcik7CiAgICAgICAg
ICAgICBpZiAoc3RhdHVzICE9IENvbnRpbnVlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZ290b05leHRGcmFtZSgpOworICAgICAgICAgICAgdmlzaXRvci5nb3RvTmV4dEZy
YW1lKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNywxMCArMTI5LDkgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgRnJhbWUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAmbV9mcmFtZTsg
fQogCiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IoQ2FsbEZy
YW1lKiBzdGFydEZyYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Zpc2l0b3IoQ2Fs
bEZyYW1lKiBzdGFydEZyYW1lKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ290b05l
eHRGcmFtZSgpOwotICAgIHZvaWQgcmVzZXRJdGVyYXRvcigpOwogCiAgICAgdm9pZCByZWFkRnJh
bWUoQ2FsbEZyYW1lKik7CiAgICAgdm9pZCByZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSos
IENvZGVPcmlnaW4qID0gMCk7CkBAIC0xMzgsMTMgKzEzOSwxMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcmVhZElubGluZWRGcmFtZShDYWxsRnJhbWUqLCBDb2RlT3JpZ2luKik7CiAjZW5kaWYKIAot
ICAgIENhbGxGcmFtZSogbV9zdGFydEZyYW1lOwogICAgIEZyYW1lIG1fZnJhbWU7Ci0KLSAgICBm
cmllbmQgY2xhc3MgRXhlY1N0YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRp
ZiAvLyBTdGFja0l0ZXJhdG9yX2gKKyNlbmRpZiAvLyBTdGFja1Zpc2l0b3JfaAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNTUwNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNp
bmNsdWRlICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJQcm9maWxlLmgiCi0jaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgorI2luY2x1ZGUgIlN0
YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC03MCwyMSArNzAsMjEgQEAgcHVibGljOgogCiAgICAgYm9vbCBmb3VuZFBhcmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm91bmRQYXJlbnQ7IH0KIAotICAgIFN0YWNrSXRlcmF0b3I6OlN0YXR1cyBv
cGVyYXRvcigpKFN0YWNrSXRlcmF0b3ImIGl0ZXIpCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMg
b3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCiAgICAgewogICAgICAgICBpZiAoIW1f
aGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsKICAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJh
bWUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkNvbnRpbnVlOwor
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgICAgIH0KIAog
ICAgICAgICB1bnNpZ25lZCBsaW5lID0gMDsKICAgICAgICAgdW5zaWduZWQgdW51c2VkQ29sdW1u
ID0gMDsKLSAgICAgICAgaXRlci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgdW51c2VkQ29s
dW1uKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUobV9leGVj
LCBMZWdhY3lQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIobV9leGVjLCBpdGVyLT5jYWxs
ZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGxpbmUpLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQo
KSk7CisgICAgICAgIHZpc2l0b3ItPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIHVudXNlZENv
bHVtbik7CisgICAgICAgIG1fY3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKG1fZXhl
YywgTGVnYWN5UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKG1fZXhlYywgdmlzaXRvci0+
Y2FsbGVlKCksIHZpc2l0b3ItPnNvdXJjZVVSTCgpLCBsaW5lKSwgbV9oZWFkLmdldCgpLCBtX2hl
YWQuZ2V0KCkpOwogICAgICAgICBtX2hlYWQtPmluc2VydE5vZGUobV9jdXJyZW50Tm9kZS5nZXQo
KSk7CiAKICAgICAgICAgbV9mb3VuZFBhcmVudCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBTdGFj
a0l0ZXJhdG9yOjpEb25lOworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogICAg
IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxNTUwNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAog
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQ
cm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJTdGFja1Zpc2l0b3IuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOwpAQCAtMTkyLDE0ICsxOTIsMTQgQEAgcHVibGljOgogCiAgICAgSlNWYWx1ZSBy
ZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogCi0gICAgU3RhY2tJdGVyYXRvcjo6
U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBTdGFja1Zpc2l0b3I6
OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7Ci0gICAgICAg
IEpTT2JqZWN0KiBjYWxsZWUgPSBpdGVyLT5jYWxsZWUoKTsKKyAgICAgICAgSlNPYmplY3QqIGNh
bGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOwogICAgICAgICBpZiAoY2FsbGVlICE9IG1fdGFyZ2V0
Q2FsbGVlKQotICAgICAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkNvbnRpbnVlOworICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAKLSAgICAgICAgbV9yZXN1
bHQgPSBKU1ZhbHVlKGl0ZXItPmFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIFN0YWNrSXRl
cmF0b3I6OkRvbmU7CisgICAgICAgIG1fcmVzdWx0ID0gSlNWYWx1ZSh2aXNpdG9yLT5hcmd1bWVu
dHMoKSk7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtMjM0LDI1ICsyMzQsMjUgQEAgcHVibGljOgogCiAgICAgSlNWYWx1ZSByZXN1bHQo
KSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogCi0gICAgU3RhY2tJdGVyYXRvcjo6U3RhdHVz
IG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1
cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBjYWxsZWUgPSBpdGVyLT5jYWxsZWUoKTsKKyAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9
IHZpc2l0b3ItPmNhbGxlZSgpOwogCiAgICAgICAgIGlmIChjYWxsZWUgJiYgY2FsbGVlLT5pbmhl
cml0cyhKU0JvdW5kRnVuY3Rpb246OmluZm8oKSkpCi0gICAgICAgICAgICByZXR1cm4gU3RhY2tJ
dGVyYXRvcjo6Q29udGludWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKIAogICAgICAgICBpZiAoIW1faGFzRm91bmRGcmFtZSAmJiAoY2FsbGVlICE9IG1fdGFy
Z2V0Q2FsbGVlKSkKLSAgICAgICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjpDb250aW51ZTsK
KyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogCiAgICAgICAgIG1f
aGFzRm91bmRGcmFtZSA9IHRydWU7CiAgICAgICAgIGlmICghbV9oYXNTa2lwcGVkVG9DYWxsZXJG
cmFtZSkgewogICAgICAgICAgICAgbV9oYXNTa2lwcGVkVG9DYWxsZXJGcmFtZSA9IHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6Q29udGludWU7CisgICAgICAgICAgICBy
ZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChj
YWxsZWUpCiAgICAgICAgICAgICBtX3Jlc3VsdCA9IGNhbGxlZTsKLSAgICAgICAgcmV0dXJuIFN0
YWNrSXRlcmF0b3I6OkRvbmU7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAg
ICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTU1MDc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiTm9kZXMu
aCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCi0jaW5jbHVk
ZSAiU3RhY2tJdGVyYXRvci5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUg
PHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAg
LTcxNywxNyArNzE3LDE3IEBAIHB1YmxpYzoKIAogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCgp
IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAKLSAgICBTdGFja0l0ZXJhdG9yOjpTdGF0dXMgb3BlcmF0
b3IoKShTdGFja0l0ZXJhdG9yJiBpdGVyKQorICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJh
dG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgaWYgKCFtX2hhc1Nr
aXBwZWRGaXJzdEZyYW1lKSB7CiAgICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0g
dHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjpDb250aW51ZTsKKyAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1fdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUoKSkp
CisgICAgICAgIGlmIChtX3RoaXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20odmlzaXRvci0+Y2Fs
bEZyYW1lKCkpKQogICAgICAgICAgICAgbV9yZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUobV90aGlz
T2JqZWN0LT5wcm90b3R5cGUoKSk7CiAKLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkRv
bmU7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtNzU5LDE1ICs3NTksMTUgQEAgcHVibGljOgogCiAgICAgYm9vbCBhbGxvd3NBY2Nlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FjY2VzczsgfQogCi0gICAgU3RhY2tJdGVyYXRvcjo6
U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBTdGFja1Zpc2l0b3I6
OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7CiAgICAgICAg
IGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewogICAgICAgICAgICAgbV9oYXNTa2lwcGVk
Rmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6Q29u
dGludWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIG1fYWxsb3dzQWNjZXNzID0gbV90aGlzT2JqZWN0LT5hbGxvd3NBY2Nl
c3NGcm9tKGl0ZXItPmNhbGxGcmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6
OkRvbmU7CisgICAgICAgIG1fYWxsb3dzQWNjZXNzID0gbV90aGlzT2JqZWN0LT5hbGxvd3NBY2Nl
c3NGcm9tKHZpc2l0b3ItPmNhbGxGcmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6RG9uZTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNTUwNzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1l
QXJyYXkuaCIKLSNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU3RhY2tWaXNp
dG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDIsMTYgKzE0MiwxNiBAQCBwdWJsaWM6
CiAKICAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsg
fQogCi0gICAgU3RhY2tJdGVyYXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYg
aXRlcikKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYg
dmlzaXRvcikKICAgICB7CiAgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewog
ICAgICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICBy
ZXR1cm4gU3RhY2tJdGVyYXRvcjo6Q29udGludWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpDb250aW51ZTsKICAgICAgICAgfQogCi0gICAgaWYgKG1fb2JqZWN0LT5hbGxvd3NB
Y2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFtZSgpKSkKKyAgICBpZiAobV9vYmplY3QtPmFsbG93c0Fj
Y2Vzc0Zyb20odmlzaXRvci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICBtX3Jlc3VsdCA9IEpTVmFs
dWU6OmVuY29kZShtX29iamVjdC0+cHJvdG90eXBlKCkpOwotICAgIHJldHVybiBTdGFja0l0ZXJh
dG9yOjpEb25lOworICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiB9CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTUwNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wOS0wNCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBTdGFja0l0ZXJhdG9y
IHRvIFN0YWNrVmlzaXRvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDcwNi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9p
bnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogRm9yd2FyZGlu
Z0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbmRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZVNj
cmlwdENhbGxTdGFja0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZUZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorCiAyMDEz
LTA5LTA0ICBTYW11ZWwgV2hpdGUgIDxzYW11ZWxfd2hpdGVAYXBwbGUuY29tPgogCiAgICAgICAg
IEFYOiB3aGVuIG5vIG90aGVyIGxhYmVsIG9uIHByb3ZpZGVkIG9uIGZvcm0gZWxlbWVudHMsIFdl
YktpdCBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIEB0aXRsZQpJbmRleDogU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNr
SXRlcmF0b3IuaAkocmV2aXNpb24gMTU1MDc0KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQgKzAsMCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9yX2gKLSNkZWZpbmUg
V2ViQ29yZV9GV0RfU3RhY2tJdGVyYXRvcl9oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Rh
Y2tJdGVyYXRvci5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2aXNp
b24gMTU1MDc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnBy
ZXRlci9TdGFja0l0ZXJhdG9yLmg6MTU1MDc0KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1N0YWNrSXRlcmF0b3JfaAorI2RlZmluZSBX
ZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9yX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdGFj
a0l0ZXJhdG9yLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSNpZm5kZWYgV2Vi
Q29yZV9GV0RfU3RhY2tJdGVyYXRvcl9oCi0jZGVmaW5lIFdlYkNvcmVfRldEX1N0YWNrSXRlcmF0
b3JfaAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0YWNrSXRlcmF0b3IuaD4KKyNpZm5kZWYg
V2ViQ29yZV9GV0RfU3RhY2tWaXNpdG9yX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfU3RhY2tWaXNp
dG9yX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdGFja1Zpc2l0b3IuaD4KICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NTA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3
ICs0NSw3IEBACiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIv
U3RhY2tJdGVyYXRvci5oPgorI2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrVmlzaXRvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CkBAIC0xMjMsMTkgKzEyMywx
OSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZTsg
fQogICAgIFN0cmluZyB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQogCi0gICAgU3RhY2tJ
dGVyYXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tJdGVyYXRvciYgaXRlcikKKyAgICBTdGFj
a1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7
CiAgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewogICAgICAgICAgICAgbV9o
YXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tJdGVy
YXRvcjo6Q29udGludWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSAwOwogICAgICAgICB1bnNp
Z25lZCB1bnVzZWRDb2x1bW4gPSAwOwotICAgICAgICBpdGVyLT5jb21wdXRlTGluZUFuZENvbHVt
bihsaW5lLCB1bnVzZWRDb2x1bW4pOworICAgICAgICB2aXNpdG9yLT5jb21wdXRlTGluZUFuZENv
bHVtbihsaW5lLCB1bnVzZWRDb2x1bW4pOwogICAgICAgICBtX2xpbmUgPSBsaW5lOwotICAgICAg
ICBtX3VybCA9IGl0ZXItPnNvdXJjZVVSTCgpOwotICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRv
cjo6RG9uZTsKKyAgICAgICAgbV91cmwgPSB2aXNpdG9yLT5zb3VyY2VVUkwoKTsKKyAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcAkocmV2aXNpb24gMTU1MDc1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAK
ICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFt
ZS5oPgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaD4KLSNpbmNsdWRl
IDxpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CkBAIC02
MiwxOCArNjIsMTggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTdGFja0l0ZXJhdG9y
OjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja0l0ZXJhdG9yJiBpdGVyKQorICAgIFN0YWNrVmlzaXRv
cjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAg
ICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIGxpbmU7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAgICAgICAg
ICBpdGVyLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwotICAgICAgICAgICAg
bV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwgaXRl
ci0+c291cmNlVVJMKCksIGxpbmUsIGNvbHVtbikpOworICAgICAgICAgICAgdmlzaXRvci0+Y29t
cHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKKyAgICAgICAgICAgIG1fZnJhbWVzLmFw
cGVuZChTY3JpcHRDYWxsRnJhbWUodmlzaXRvci0+ZnVuY3Rpb25OYW1lKCksIHZpc2l0b3ItPnNv
dXJjZVVSTCgpLCBsaW5lLCBjb2x1bW4pKTsKIAogICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBh
Y2l0eUZvckZyYW1lQ2FwdHVyZS0tOwotICAgICAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6
OkNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkRvbmU7CisgICAgICAgIHJl
dHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTA3LDI5ICsx
MDcsMjkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTdGFja0l0ZXJhdG9yOjpTdGF0
dXMgb3BlcmF0b3IoKShTdGFja0l0ZXJhdG9yJiBpdGVyKQorICAgIFN0YWNrVmlzaXRvcjo6U3Rh
dHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKICAgICAgICAgaWYg
KG1fbmVlZFRvU2tpcEFGcmFtZSkgewogICAgICAgICAgICAgbV9uZWVkVG9Ta2lwQUZyYW1lID0g
ZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6Q29udGludWU7CisgICAg
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGVhcmx5IGV4aXQgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIG91ciBvbGQgYmVo
YXZpb3VyCiAgICAgICAgICAgICAvLyBidXQgdGhlIHN0YWNrIHRyYWNlIHdlIHByb2R1Y2Ugbm93
IGlzIGNvbXBsZXRlIGFuZCBoYW5kbGVzIGFsbAogICAgICAgICAgICAgLy8gd2F5cyBpbiB3aGlj
aCBjb2RlIG1heSBiZSBydW5uaW5nCi0gICAgICAgICAgICBpZiAoIWl0ZXItPmNhbGxlZSgpICYm
IG1fZnJhbWVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6
RG9uZTsKKyAgICAgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkgJiYgbV9mcmFtZXMuc2l6
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKICAgICAg
ICAgICAgIHVuc2lnbmVkIGxpbmU7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAg
ICAgICAgICBpdGVyLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwotICAgICAg
ICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUo
KSwgaXRlci0+c291cmNlVVJMKCksIGxpbmUsIGNvbHVtbikpOworICAgICAgICAgICAgdmlzaXRv
ci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKKyAgICAgICAgICAgIG1fZnJh
bWVzLmFwcGVuZChTY3JpcHRDYWxsRnJhbWUodmlzaXRvci0+ZnVuY3Rpb25OYW1lKCksIHZpc2l0
b3ItPnNvdXJjZVVSTCgpLCBsaW5lLCBjb2x1bW4pKTsKIAogICAgICAgICAgICAgbV9yZW1haW5p
bmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwotICAgICAgICAgICAgcmV0dXJuIFN0YWNrSXRl
cmF0b3I6OkNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGlu
dWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OkRvbmU7CisgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgfQogCiBwcml2YXRlOgo=
</data>
<flag name="review"
          id="232633"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>